Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизСамопальный контрол-панель и design-time Найти похожие ветки
← →
kavlad (2003-09-17 12:20) [0]Наваял самопальный компонент - потомок TCustomControl. Он содержит панель. Теперь в design-time ставлю на эту панель контролы. Все вроде гладко. Запускаю - нету контролов, одна голая панель. Смотрю ресурсы формы - и правда нету контролов. Открываю в редакторе - вот они радЁмые. Что делать?
← →
Skier (2003-09-17 12:33) [1]Код покажи.
> Открываю в редакторе - вот они радЁмые.
И кто у них родитель ?
← →
kavlad (2003-09-17 12:40) [2]Какой конкретно код? Конструктор?
constructor TgtSideBarPanel.Create(AOwner: TComponent);
begin
inherited;
Width := 100;
Height := 100;
Align := alRight;
FFullSize := 100;
FButton := TSpeedButton.Create(Self);
FButton.Parent := Self;
FButton.Caption := "";
FButton.OnClick := ButtonClick;
FButton.ShowHint := True;
FButton.Align := alLeft;
Realign;
FPanel := TPanel.Create(Self);
FPanel.Parent := Self;
FPanel.Caption := "";
FPanel.Align := alClient;
ButtonPosition := posLeft;
ButtonSize := 11;
end;
← →
me (2003-09-17 13:41) [3]Поставь в конструкторе
ControlStyle := ControlStyle + [csAcceptsControls];
← →
kavlad (2003-09-17 14:13) [4]Не помогает :(
← →
me (2003-09-17 16:07) [5]приведи код ДФМ
← →
kavlad (2003-09-17 16:32) [6]
object Form1: TForm1
Left = -2
Top = 103
Width = 783
Height = 540
Caption = "Form1"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object gtSideBarPanel1: TgtSideBarPanel
Left = 536
Top = 0
Width = 239
Height = 513
Align = alRight
ButtonSize = 11
ButtonPosition = posLeft
Convolute = False
FullSize = 239
FlatButton = False
BorderStyle = bsNone
BorderWidth = 0
BevelInner = bvNone
BevelOuter = bvRaised
end
object ListBox1: TListBox
Left = 0
Top = 0
Width = 233
Height = 513
Align = alLeft
ItemHeight = 13
TabOrder = 1
end
object Button2: TButton
Left = 456
Top = 480
Width = 75
Height = 25
Caption = "Button2"
TabOrder = 2
OnClick = Button2Click
end
object ListBox2: TListBox
Left = 233
Top = 0
Width = 216
Height = 513
Align = alLeft
ItemHeight = 13
TabOrder = 3
end
end
TgtSideBarPanel - мой компонент. На нем реально стоят контролы, но в dfm их нет :(
← →
me (2003-09-17 16:47) [7]DFM - это и есть реальность.
Если ты помещаешь компоненты на контол, у которого не
установлен флаг csAcceptsControls, то парентом для них
будет форма (в твоём случае), а не этот контрол.
← →
kavlad (2003-09-17 16:51) [8]Я выложил плохой код. Эти компоненты действительно стоят на форме. А есть еще и другие, которые стоят на gtSideBarPanel1. Но в dfm их нет.
← →
me (2003-09-17 17:00) [9]Если ты открываешь в редакторе и они есть -
они должны быть в ДФМ. Иначе откуда они возьмутся?
По крайней мере если ты сохранил проект, закрыл и снова открыл,
и они есть - это соответствует истине?
← →
me (2003-09-17 17:04) [10]Попробуй вручную поставить в ДФМ на свой контрол
какой-нибудь компонент, открой и посмотри, возникнет ли он
или заругается?
← →
kavlad (2003-09-17 17:14) [11]>me (17.09.03 17:00) [9]
>По крайней мере если ты сохранил проект, закрыл и снова открыл,
>и они есть - это соответствует истине?
Нет. После переоткрытия проекта они пропадают. В dfm то их нет.
← →
kavlad (2003-09-17 17:15) [12]>me (17.09.03 17:04) [10]
Так все появляется. Сделал:
object Form1: TForm1
Left = -2
Top = 103
Width = 783
Height = 540
Caption = "Form1"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object gtSideBarPanel1: TgtSideBarPanel
Left = 536
Top = 0
Width = 239
Height = 513
Align = alRight
ButtonSize = 11
ButtonPosition = posLeft
Convolute = False
FullSize = 239
FlatButton = False
BorderStyle = bsNone
BorderWidth = 0
BevelInner = bvNone
BevelOuter = bvRaised
object Button2: TButton
Left = 6
Top = 80
Width = 75
Height = 25
Caption = "Button2"
TabOrder = 2
OnClick = Button2Click
end
end
object ListBox1: TListBox
Left = 0
Top = 0
Width = 233
Height = 513
Align = alLeft
ItemHeight = 13
TabOrder = 1
end
object ListBox2: TListBox
Left = 233
Top = 0
Width = 216
Height = 513
Align = alLeft
ItemHeight = 13
TabOrder = 3
end
end
На панели стоит кнопка.
← →
me (2003-09-17 17:28) [13]посмотри, что будет, если ты сохранишь эту ДФМку (предварительно как-ндь изменив её, напр, чуть сдвинув кнопку), закроешь и откроешь?
Сохранится ли эта кнопка?
← →
kavlad (2003-09-17 17:35) [14]дОстаточно было переоткрыть проект. Кнопка растворилась. Т.е. мой компонент не умеет сохранять свои дочерние компоненты в ресурсы. А как научить его это делать? Сижу читаю Тейксейру и Пачеко.
← →
me (2003-09-17 17:50) [15]Возьми свой контрол, поставь на него в рантайме
бутон и сохрани в рантайме всю форму в поток.
Этот процесс посмотри под отладчиком (включи галочку
использовать отладочные DCU) и посмотри, что происходит,
когда сохраняется твой компонент.
← →
kavlad (2003-09-17 17:52) [16]Спасибо. Проверенный способ :) Сейчас буду ковырять.
← →
me (2003-09-17 18:38) [17]интересно было бы узнать результаты исследований.
← →
kavlad (2003-09-17 19:38) [18]Завтра, или послезавтра :) Думаю ошибка в назначении владельца компонентов или в нотификации, а вовсе не в стриминге.
← →
kavlad (2003-09-21 15:26) [19]Опачки, задержался :) Проблема в том, что эти контролы (которые я ставлю на свою панель) в свойстве Owner хранять nil 8-0 Потому и в поток не сохраняются. Что делать - ума не приложу! Придется извращать и переписывать заново от TPanel, а не от TCustomControl.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c