Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программно создать/удалить компонент на форме 
:(
    Опции темы
saneea
Дата 26.3.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



Не могу разобраться как программно создать/удалить компонент на форме. Хочу по нажатию на кнопку что-бы создавался TLabel. Пробовал так:

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  san: TLabel;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
san.Left:=50;
san.Top:=50;
san.Caption:='adsfdsdf';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
san:=TLabel.Create(nil);
end;

end.



но никакого результата нет! Что я не правильно делаю?
PM MAIL   Вверх
Rodman
Дата 26.3.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



Код

san.Destroy;

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Rennigth
Дата 26.3.2008, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(saneea @  26.3.2008,  18:08 Найти цитируемый пост)
но никакого результата нет! Что я не правильно делаю? 

Parent не указываешь.

Добавлено через 1 минуту и 55 секунд
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Assigned(san) then
    san := TLabel.Create(Self);
  san.Parent := Self;
  san.Left := 50;
  san.Top := 50;
  san.Caption := 'adsfdsdf';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Assigned(san) then
    FreeAndNil(san);
end;





--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
saneea
Дата 26.3.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



Rennigth, спасибо, работает!

А Self - это какой-то объект-родитель? Если да, то для всех ли компонентов?

Как я понял код:
Код

FreeAndNil(san);


можно заменить на:
Код

san.Destroy;
san:=nil;


Что делает функция Assigned? Проверяет создан объект или нет?

И ещё вопрос: я тоже самое проделал с TButton, как обрабатывать клик по такой кнопке?

Заранее спасибо!
PM MAIL   Вверх
Rennigth
Дата 26.3.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(saneea @  26.3.2008,  19:18 Найти цитируемый пост)
А Self - это какой-то объект-родитель? Если да, то для всех ли компонентов?

Self это указатель на самого себя, т.е. в контексте твоей формы Form1 и Self одно и тоже.

Цитата(saneea @  26.3.2008,  19:18 Найти цитируемый пост)
Как я понял код:
Код

FreeAndNil(san);

можно заменить на:
Код

san.Destroy;
san:=nil;

да.

Цитата(saneea @  26.3.2008,  19:18 Найти цитируемый пост)
Что делает функция Assigned? Проверяет создан объект или нет?

Не совсем. Она проверяет не равен ли указатель на объект nil

Цитата(saneea @  26.3.2008,  19:18 Найти цитируемый пост)
И ещё вопрос: я тоже самое проделал с TButton, как обрабатывать клик по такой кнопке?

Код

interface
  TForm1 = class(TForm)
//...
  private
    FButton: TButton;
    procedure ButtonClick(Sender: TObject);
//...
  end;

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Assigned(FButton) then
    FButton := TButton.Create(Self);
  FButton.Parent := Self;
  FButton.Left := 50;
  FButton.Top := 50;
  FButton.Caption := 'adsfdsdf';
  FButton.OnClick := ButtonClick;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Assigned(FButton) then
    FreeAndNil(FButton);
end;

procedure TForm1.ButtonClick(Sender: TObject);
begin
  ShowMessage('Click');
end;



Это сообщение отредактировал(а) Rennigth - 26.3.2008, 19:31


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
dma
Дата 26.3.2008, 19:32 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 1.12.2006
Где: Belarus, Minsk

Репутация: 1
Всего: 1



Цитата(saneea @  26.3.2008,  18:18 Найти цитируемый пост)
Как я понял код:
Выделить всёкод Pascal/Delphi
1:
    
FreeAndNil(san);


можно заменить на:
Выделить всёкод Pascal/Delphi
1:
2:
    
san.Destroy;
san:=nil;


во Free ещё условие на  существование проверяется:

Код

if san <> nil then
  san.Destroy;



Это сообщение отредактировал(а) dma - 26.3.2008, 19:33
PM MAIL ICQ Skype GTalk   Вверх
saneea
Дата 26.3.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



Последний вопрос(я надеюсь что он последний): если мне нужно (к примеру) на форму таким образом поместить неизвестное заранее число TButton'ов и потом отслеживать нажатие на каждую из таких кнопок, как быть?
PM MAIL   Вверх
dma
Дата 27.3.2008, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 1.12.2006
Где: Belarus, Minsk

Репутация: 1
Всего: 1



для каждого создаваемого Button указывай обработчик OnClick, в котором смотри от какого именно Button он пришёл.
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0777 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.