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

Вниз

Как создавать компоненты на Notebook   Найти похожие ветки 

 
Дмитрий_05   (2005-09-11 21:49) [0]

У меня 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; Почему?


 
Fay ©   (2005-09-11 22:47) [1]

2 Дмитрий_05   (11.09.05 21:49)

Parent := TPage(Notebook1.Pages.Objects[i]);


 
Дмитрий_05   (2005-09-12 01:29) [2]

еще небольшой вопрос... Таким же образом я создал Edit-ы и Button-ы на закладках... и вот открыта какая-то закладка, при нажатии на созданную кнопку как мне определить какой Edit лежит на тойже закладке?


 
Defunct ©   (2005-09-12 01:36) [3]

Fay ©   (11.09.05 22:47) [1]

хм.. а нe универсальнее ли будет:
TWinControl(.. )


 
Fay ©   (2005-09-12 03:57) [4]

2 Defunct ©   (12.09.05 1:36) [3]
Будет. Я просто ошибку конкретно 8)


 
Fay ©   (2005-09-12 03:59) [5]

2 Defunct ©   (12.09.05 1:36) [3]
Хотя... Учитывая тип свойства Parent...
Куда уж универсальнее.


 
Defunct ©   (2005-09-12 05:32) [6]

> Дмитрий_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 05:34) [7]

Defunct ©   (12.09.05 5:32) [6]
Я тоже не знал 8)
ShowMessage(TObject(Notepad1.Pages.Objects[0]).ClassName)


 
Наиль ©   (2005-09-12 07:38) [8]


>  [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];
Кнопки можно без массива.


 
Дмитрий_05   (2005-09-12 18:14) [9]

Так всетаки что лучше писать TWinControl(...) или TPage(...)? )))


 
Fay ©   (2005-09-12 18:16) [10]

2 Дмитрий_05   (12.09.05 18:14) [9]
По барабану.


 
Дмитрий_05   (2005-09-13 00:37) [11]

сделал так, попробовал с одним пока:

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."


 
Defunct ©   (2005-09-13 01:13) [12]

Дмитрий_05   (13.09.05 00:37) [11]

А SetLength(Edits, ..) где?
вот тебе и AV.
читай справку. ;>


 
Дмитрий_05   (2005-09-13 01:14) [13]

Я сам разобрался, я забыл инициализировать массив функцией SetLength


 
Дмитрий_05   (2005-09-13 01:15) [14]

да, я уже прочитал в книге )))



Страницы: 1 вся ветка

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
2-1124440299
ba4inskii
2005-08-19 12:31
2005.10.02
Помогите


9-1117444315
keal
2005-05-30 13:11
2005.10.02
создание 3д моделей


3-1124255979
Zaero
2005-08-17 09:19
2005.10.02
Rave Report: Смена набора символов в шрифте элемента "Text".


14-1126129628
Сергей Суровцев
2005-09-08 01:47
2005.10.02
Спокойствие, только спокойствие!


3-1124565095
SergP
2005-08-20 23:11
2005.10.02
Поле типа Дата/время в Access