![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание компонента в RunTime с родителем, созданным в RunTime [D7, WinXP]
kyn66 © (2005-10-31 11:21:00)Уважаемые мастера, подскажите, как мне создать в Runtime сперва ScrollBox, а затем на нем метку, но чтобы у этой метки Parent был этот созданный ScrollBox. Затем нужно удалить этот ScrollBox вместе с меткой.
kyn66 (2005-11-01 15:43:00) [1]Ну все тогда пОнятно, спасибо.
evvcom (2005-11-01 15:09:00) [2]
> TButton.Create(self) на примере 13 означает Это не очепятка?
Она самая.
kyn66 (2005-11-01 15:03:00) [3]>> umbra
>> уничтожились при уничтожении родителя. TButton.Create(self) на примере 13 означает Это не очепятка? В данном случае Create(Self) получает ScrollBox.
umbra (2005-11-01 13:06:00) [4]
> Тока вот не понятно, зачем tmp указывается и в Create и
> в Parent ?
Это затем, чтобы созданные контролы автоматически уничтожились при уничтожении родителя.TButton.Create(self)на примере 13 означает, что кнопка будет в списке контролов формы и уничтожится, когда уничтожится форма. Но ведь скроллбокс может быть закрыт раньше, и тогда кнопки будут без пользы висеть в памяти, пока не закроется форма. А так память, которую они занимают, освобождается , когда закрывается скроллбокс
kyn66 (2005-11-01 12:35:00) [5]Большое всем спасибо,и [4] и [13] помогло. Тока вот не понятно, зачем tmpуказывается и в Create и в Parent ? А если для бутона сделать так: ...Create(self)
Parent(tmp). В чем отличие?
Zeqfreed (2005-10-31 20:57:00) [6]kyn66 © (31.10.05 16:24) [7]
procedure TForm1.Button1Click(Sender: TObject);
var
tmp : TScrollBox;
i : Integer;
begin
tmp := TScrollBox.Create(self);
with tmp do begin
Parent := Form1;
tmp.Left := 8;
tmp.Top := 30;
tmp.Width := 400;
tmp.Height := 200;
end;
for i := 0 to 20 do begin
with TButton.Create(tmp) do begin
Parent := tmp;
Width := 40;
Height := 22;
Left := 8;
Top := i * Height + 5*i + 5;
end;
end;
end;
Хотя код уже приводили в [4].
Об освобождении скролбокса позаботится форма, поэтому нет ничего страшного если ты объявишь локальную переменную.
Гаврила (2005-10-31 20:23:00) [7]
> kyn66 ©
> да и имена каждому нужно свои давать.
Если не собираешься обращаться к ним потом по имени, имена можешь не задавать.
надеюсь, то, что
procedure TForm1.SomeProc;
var
label: TLabel;
В данном случае label - не имя, понятно ?
Если их много, держи указатели в списке (например)
Leonid Troyanovsky (2005-10-31 18:11:00) [8]
> kyn66 © (31.10.05 16:24) [7]
> [4] - это не выход, когда заранее объявляются компоненты.
> Число неизвестно да и имена каждому нужно свои давать.
> я пробывал как-то через вот так нужно
..
> Вот типа так нужно, но это не правильно?
Это неправильно. Да, и непонятно, как нужно (как-то через вот).
А имена, кстати, необязательны - можно хоть массив, хоть TList.
Главное, чтобы оное было полями (формы).
--
Regards, LVT.
Leonid Troyanovsky (2005-10-31 18:04:00) [9]
> kyn66 © (31.10.05 17:31) [9]
> Ну изначально наверное основная форма для всех будет Self
Изначально и окончательно:
the identifier Self references the object in which the method is called.
Т.е., Мня это обращение изнутри метода к объекту, чей этот метод.
--
Regards, LVT.
kyn66 (2005-10-31 17:31:00) [10]Ну изначально наверное основная форма для всех будет Self
umbra (2005-10-31 16:39:00) [11]
> TLabe.Create(self)
а кто тамself? в методе какого объекта вызывается конструктор лабела?
kyn66 (2005-10-31 16:24:00) [12][4] - это не выход, когда заранее объявляются компоненты. Число неизвестно да и имена каждому нужно свои давать. я пробывал как-то через вот так нужно
with TLabe.Create(self)
parent := TScrollBox(FindComponent('Scroll1'));
name := 'Lab' + IntToStr(i + 1);
...
Вот типа так нужно, но это не правильно?
umbra (2005-10-31 16:05:00) [13]2 Юрий Зотов © (31.10.05 15:55) [5]
Спасибо, запомню.
Юрий Зотов (2005-10-31 15:55:00) [14]> umbra © (31.10.05 15:07) [4]
> scroll.Visible := true;
> label.Visible := true;
Это лишнее.
umbra (2005-10-31 15:07:00) [15]
var
scroll: TScrollBox;
lab: TLabel;
{.........................}
scroll := TScrollBox.Create(nil);
scroll.Parent := MainForm; //mainForm - форма, на которой появится cкроллбокс
scroll.Visible := true;
label := TLabel.Create(nil);
label.Parent := scroll;
label.Visible := true;
{.......................................}
label.free;
scroll.Free;
Leonid Troyanovsky (2005-10-31 15:05:00) [16]
> kyn66 © (31.10.05 14:36) [2]
> А ведь ScrollBox тоже создается в RunTime ...?
Созданному также назначается Parent.
И так далее.
--
Regards, LVT.
kyn66 (2005-10-31 14:36:00) [17]А ведь ScrollBox тоже создается в RunTime ...?
Гаврила (2005-10-31 11:25:00) [18]Label1.parent:=ScrollBox;
?