Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-3969
killer
2003-09-20 01:35
2003.10.02
Как в Delphi взять побитовую коньюнкцию?


1-3972
waw
2003-09-19 16:26
2003.10.02
Как DBGridEh сделать запрет на изменение определенных ячеек?


14-4091
SergP
2003-09-13 20:30
2003.10.02
Как отучить сотрудников захламлять сетевые диски?


6-4010
DeHuC
2003-07-29 08:36
2003.10.02
InternetAutoDial


14-4118
Жестокий ФЛУД
2003-09-12 20:57
2003.10.02
Флуд - хорошо это или плохо?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский