![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создавать компоненты на Notebook [D7, WinXP]
Дмитрий_05 © (2005-09-11 21:49:00)У меня Notebook создается динамически на одной из закладок PageControl-а которая имеет свой класс TTabSheet:
Notebook1: TNotebook;
StrObjects: TStringList;
Notebook1:=TNotebook.Create(Self);
Notebook1.Parent := TabSheet1;
Notebook1.SetBounds(184, 0, 529, 267);
Notebook1.Anchors := [akLeft, akTop, akTop, akBottom];
Notebook1.Pages:=StrObjects;
на Notebook-е на всех его закладках тоже нужно создать компоненты, так вот я создаю на одной закладке Label:
with TLabel.Create(Self) do
begin
Parent:=Notebook1.Pages.Objects[i] as TNotebook;
Left:=5;
Top:=8;
Caption:=StrObjects[i];
end;
компилируется нормально, в самой программе происходит ошибка при создании Label-а "Invalid class typecast". И в самой Delphi выделяется крассным эта строчка: Parent:=Notebook1.Pages.Objects[i] as TNotebook;Почему?
Дмитрий_05 (2005-09-13 01:15:00) [1]да, я уже прочитал в книге )))
Дмитрий_05 (2005-09-13 01:14:00) [2]Я сам разобрался, я забыл инициализировать массив функцией SetLength
Defunct (2005-09-13 01:13:00) [3]Дмитрий_05 (13.09.05 00:37) [11]
А SetLength(Edits, ..) где?
вот тебе и AV.
читай справку. ;>
Дмитрий_05 (2005-09-13 00:37:00) [4]сделал так, попробовал с одним пока:
private
Edits: array of TEdit;
...
Edits[0]:=TEdit.Create(Self);
Edits[0].Parent := TPage(Notebook1.Pages.Objects[0]);
Edits[0].Left:=10;
Edits[0].Top:=10;
При создании уже в самой программе выскакивает ошибка на строке: Edits[0]:=TEdit.Create(Self);"Access violation at address 00450142 in module Project1.exe. Write of address 00000000."
Fay (2005-09-12 18:16:00) [5]2 Дмитрий_05 (12.09.05 18:14) [9]
По барабану.
Дмитрий_05 (2005-09-12 18:14:00) [6]Так всетаки что лучше писать TWinControl(...) или TPage(...)? )))
Наиль (2005-09-12 07:38:00) [7]
> [2] Дмитрий_05 (12.09.05 01:29)
Решение для одого Едита на TPage.
Используешь два массива Buttons и Edits.
Edits[x]:=TEdit.Create;
Edits[x]:=TPage(...[i]);
Buttons[j]:=TButton.Create(...);
Buttons[j].Parent:=TPage(...[i]);
Buttons[j].tag:=x;
при нажатии:
Edit:=Edits[TControl(Senders).tag];
Кнопки можно без массива.
Fay (2005-09-12 05:34:00) [8]Defunct © (12.09.05 5:32) [6]
Я тоже не знал 8)
ShowMessage(TObject(Notepad1.Pages.Objects[0]).ClassName)
Defunct (2005-09-12 05:32:00) [9]> Дмитрий_05 (12.09.05 01:29) [2]
потанцевать с бубном вокруг
Button.Owner.Components[i]
либо вокруг
Button.Parent.Controls[i]
в общем выбирайте, что удобнее ;>
> Fay © (12.09.05 03:59) [5]
если честно, я просто не знал, что такое TPage. ;>
мало ли что там в том Objects[i] ;>
Fay (2005-09-12 03:59:00) [10]2 Defunct © (12.09.05 1:36) [3]
Хотя... Учитывая тип свойства Parent...
Куда уж универсальнее.
Fay (2005-09-12 03:57:00) [11]2 Defunct © (12.09.05 1:36) [3]
Будет. Я просто ошибку конкретно 8)
Defunct (2005-09-12 01:36:00) [12]Fay © (11.09.05 22:47) [1]
хм.. а нe универсальнее ли будет:
TWinControl(.. )
Дмитрий_05 (2005-09-12 01:29:00) [13]еще небольшой вопрос... Таким же образом я создал Edit-ы и Button-ы на закладках... и вот открыта какая-то закладка, при нажатии на созданную кнопку как мне определить какой Edit лежит на тойже закладке?
Fay (2005-09-11 22:47:00) [14]2 Дмитрий_05 (11.09.05 21:49)
Parent := TPage(Notebook1.Pages.Objects[i]);