Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.49 MB
Время: 0.041 c
2-1130435828
Yus
2005-10-27 21:57
2005.11.20
Классы


9-1120168841
ГугльМэп
2005-07-01 02:00
2005.11.20
А нет ли какого нибудь алгоритма, чтобы находить крыши домов на


2-1130528004
злобная танька
2005-10-28 23:33
2005.11.20
Memo


1-1130508623
Dimedrol
2005-10-28 18:10
2005.11.20
TWebBrowser. Не копируется текст.


9-1114769981
VolanD666
2005-04-29 14:19
2005.11.20
Far Cry





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский