Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание компонента во время работы программы


Михаил ©   (2002-04-15 12:07:00) 

Подскажите плз, где можно почитать о том, как добавлять на форму компоненты во время работы программы (а не заранее, а потом просто делать ее видимой).
Например по какому-то событию добавить на форму Label...
Или объясните как это сделать

Заранее благодарен


Игорь Шевченко   (2002-04-16 09:52:00) [1]

День добрый, Fantasist,

Кстати, это относится к любому компоненту, и убивание самостоятельно не влечет за собой никакой беды, так как в деструкторе TComponent вызывается Owner.RemoveComponent (Self)

С уважением,


Fantasist   (2002-04-16 08:25:00) [2]

Кстати, если вы создали динамически контрол на TWinControl, то уничтожать его не надо, ибо это делает сам владелец при уничтожении, а если вы его убъете сами, то аксес виолэйшин должен возникнуть.


Anatoly Podgoretsky   (2002-04-15 17:39:00) [3]

Ничем не отличается от других свойств

OnClick :=


Михаил   (2002-04-15 17:18:00) [4]

А созданному таким образом компоненту можно програмно присваивать какие-то обработчики событий? Типа по onclick выполнение какой-нить процедуры...

Если да, то как.

Заранее спасибо


Донской   (2002-04-15 15:53:00) [5]

Класс..
Я, значит, забыл назначить pagecontrol..
Snks


Виктор Щербаков   (2002-04-15 15:26:00) [6]

Донской (15.04.02 15:20)
Пример из хэлпа:
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
with PageControl1 do
for i := 0 to 9 do
with TTabSheet.Create(Self) do
begin
PageControl := PageControl1;
Pages[i].TabVisible := (i mod 2 = 0);
Caption := "PageIndex: " +
IntToStr(Pages[i].PageIndex) + " TabIndex: " +
IntToStr(Pages[i].TabIndex);
end;
end;


Донской   (2002-04-15 15:20:00) [7]

А можно ли программно добавлять tabsheet на Pagecontrol во время работы?
Я сделал как вы сказали выше, но ее не видно, хотя и сообщений об ошибке тоже не выдается...


MBo   (2002-04-15 13:33:00) [8]

>Михаил
здесь срабатывает, потому что mylabel.destroy относится к имени переменной, а не к имени кнопки. кстати,
name:="mylabel";
надо писать. по имени можно находить с помощью FindComponent


Михаил   (2002-04-15 13:27:00) [9]

/to Виктор Щербаков

>>Нет. Так нельзя.

Почему нельзя???

var
mylabel: TLabel;
begin
...
with TLabel.Create(Self) do begin
name:=mylabel;
Parent := Self;
BoundsRect := Rect(10,10,100,100);
Caption := "Созданная метка";
end;...

mylabel.destroy

Работает


NewLabel.Free;


Anatoly Podgoretsky   (2002-04-15 12:42:00) [10]

Прочитай хелп по поводу destroy
А уничтожить можно все, имя не обязательно


Игорь Шевченко   (2002-04-15 12:42:00) [11]

День добрый,

Если вы сделаете не
with TLabel.Create, а объявите переменную в форме, например


type
TForm1 = class (TForm)
...
private
FNewLabel : TLabel;
...
procedure EventForLabelCreate ();

end;

procedure TForm1.EventForLabelCreate ();
begin
FNewLabel := TLabel.Create(Self);
with FNewLabel do begin
....
end;
end;


То потом сможете обращаться к этой метке, как к любой другой, в том числе и удалять ее.

С уважением,


Виктор Щербаков   (2002-04-15 12:41:00) [12]


> то уничтожить ее можно будет mylabel.destroy,

Нет. Так нельзя.
Нужно объявить переменную типа TLabel и присваивать ей адрес созданной метки:

var
NewLabel: TLabel;
begin
...
NewLabel := TLabel.Create(Self);
with NewLabel do begin
name:=mylabel;
Parent := Self;
BoundsRect := Rect(10,10,100,100);
Caption := "Созданная метка";
end;
...


NewLabel.Free; // Уничтожаем.


Михаил   (2002-04-15 12:30:00) [13]

Спасибо. Если можно еще один вопрос:

если ей потом присвоить имя, например

with TLabel.Create(Self) do begin
name:=mylabel;
Parent := Self;
BoundsRect := Rect(10,10,100,100);
Caption := "Созданная метка";
end;

то уничтожить ее можно будет mylabel.destroy, а возможно ли ее уничтожить без присвоения имени?


Игорь Шевченко   (2002-04-15 12:17:00) [14]

День добрый,


with TLabel.Create(Self) do begin
Parent := Self;
BoundsRect := Rect(10,10,100,100);
Caption := "Созданная метка";
end;


С уважением,


Наверх

Титульная страница Поиск, карта сайта Написать письмо