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

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

Как создавать компоненты на 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]);


Наверх

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