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

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

Создание компонента в 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;
?


Наверх

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