Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизСоздание компонента в RunTime с родителем, созданным в RunTime Найти похожие ветки
← →
kyn66 © (2005-10-31 11:21) [0]Уважаемые мастера, подскажите, как мне создать в Runtime сперва ScrollBox, а затем на нем метку, но чтобы у этой метки Parent был этот созданный ScrollBox. Затем нужно удалить этот ScrollBox вместе с меткой.
← →
Гаврила © (2005-10-31 11:25) [1]Label1.parent:=ScrollBox;
?
← →
kyn66 © (2005-10-31 14:36) [2]А ведь ScrollBox тоже создается в RunTime ...?
← →
Leonid Troyanovsky © (2005-10-31 15:05) [3]
> kyn66 © (31.10.05 14:36) [2]
> А ведь ScrollBox тоже создается в RunTime ...?
Созданному также назначается Parent.
И так далее.
--
Regards, LVT.
← →
umbra © (2005-10-31 15:07) [4]
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;
← →
Юрий Зотов © (2005-10-31 15:55) [5]> umbra © (31.10.05 15:07) [4]
> scroll.Visible := true;
> label.Visible := true;
Это лишнее.
← →
umbra © (2005-10-31 16:05) [6]2 Юрий Зотов © (31.10.05 15:55) [5]
Спасибо, запомню.
← →
kyn66 © (2005-10-31 16:24) [7][4] - это не выход, когда заранее объявляются компоненты. Число неизвестно да и имена каждому нужно свои давать. я пробывал как-то через вот так нужно
with TLabe.Create(self)
parent := TScrollBox(FindComponent("Scroll1"));
name := "Lab" + IntToStr(i + 1);
...
Вот типа так нужно, но это не правильно?
← →
umbra © (2005-10-31 16:39) [8]
> TLabe.Create(self)
а кто тамself
? в методе какого объекта вызывается конструктор лабела?
← →
kyn66 © (2005-10-31 17:31) [9]Ну изначально наверное основная форма для всех будет Self
← →
Leonid Troyanovsky © (2005-10-31 18:04) [10]
> kyn66 © (31.10.05 17:31) [9]
> Ну изначально наверное основная форма для всех будет Self
Изначально и окончательно:
the identifier Self references the object in which the method is called.
Т.е., Мня это обращение изнутри метода к объекту, чей этот метод.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2005-10-31 18:11) [11]
> kyn66 © (31.10.05 16:24) [7]
> [4] - это не выход, когда заранее объявляются компоненты.
> Число неизвестно да и имена каждому нужно свои давать.
> я пробывал как-то через вот так нужно
..
> Вот типа так нужно, но это не правильно?
Это неправильно. Да, и непонятно, как нужно (как-то через вот).
А имена, кстати, необязательны - можно хоть массив, хоть TList.
Главное, чтобы оное было полями (формы).
--
Regards, LVT.
← →
Гаврила © (2005-10-31 20:23) [12]
> kyn66 ©
> да и имена каждому нужно свои давать.
Если не собираешься обращаться к ним потом по имени, имена можешь не задавать.
надеюсь, то, что
procedure TForm1.SomeProc;
var
label: TLabel;
В данном случае label - не имя, понятно ?
Если их много, держи указатели в списке (например)
← →
Zeqfreed © (2005-10-31 20:57) [13]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].
Об освобождении скролбокса позаботится форма, поэтому нет ничего страшного если ты объявишь локальную переменную.
← →
kyn66 © (2005-11-01 12:35) [14]Большое всем спасибо,и [4] и [13] помогло. Тока вот не понятно, зачем tmp указывается и в Create и в Parent ? А если для бутона сделать так: ...Create(self)
Parent(tmp). В чем отличие?
← →
umbra © (2005-11-01 13:06) [15]
> Тока вот не понятно, зачем tmp указывается и в Create и
> в Parent ?
Это затем, чтобы созданные контролы автоматически уничтожились при уничтожении родителя.TButton.Create(self)
на примере 13 означает, что кнопка будет в списке контролов формы и уничтожится, когда уничтожится форма. Но ведь скроллбокс может быть закрыт раньше, и тогда кнопки будут без пользы висеть в памяти, пока не закроется форма. А так память, которую они занимают, освобождается , когда закрывается скроллбокс
← →
kyn66 © (2005-11-01 15:03) [16]>> umbra
>> уничтожились при уничтожении родителя. TButton.Create(self) на примере 13 означает Это не очепятка? В данном случае Create(Self) получает ScrollBox.
← →
evvcom © (2005-11-01 15:09) [17]
> TButton.Create(self) на примере 13 означает Это не очепятка?
Она самая.
← →
kyn66 © (2005-11-01 15:43) [18]Ну все тогда пОнятно, спасибо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.053 c