Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Создание компонента в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.044 c
11-1111916035
RadaR
2005-03-27 13:33
2005.11.20
UNICODE


2-1130643453
gdaujk
2005-10-30 06:37
2005.11.20
TListView с функциональностью TValueListEditor.


1-1130398578
NightLord
2005-10-27 11:36
2005.11.20
Злые звуки


2-1130606810
Del_programmer
2005-10-29 21:26
2005.11.20
canvas


4-1127114536
Руслан
2005-09-19 11:22
2005.11.20
А можно ли программно из Windows