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

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

компонент внутри компонента... [D2005]


self.name ©   (2008-07-24 23:20:00) 

здравствуйте.
Решил создать свой компонент - наследую TScrollBox.
Нужно в нём создавать TPanel'и с TRichEdit'ами. Для этого добавил процедуру AddP.
код:

unit oOtvets;
interface
uses...
var
 Panel: TPanel;
...
private
 procedure AddPanel;
...
procedure ToOtvets.AddPanel;
begin
 with panel do begin
   Parent:=Self;
   hide;
   Left := HSpace;
   Top := VSpace+(FVariantCount-1)*PanelHeight - Self.VertScrollBar.ScrollPos;
   Width := Self.Width-2*HSpace;
   Height := PanelHeight;
   TabStop := False;
   name:='otv_pnl_'+inttostr(FVariantCount);
 end;
end;



вылезает ошибка:
project comp_testing.exe raised exception class EAccessViolation with message 'Access violation at adress 004C9F2A in module 'comp_testing.exe'. Read of address 00000000'.
в точке:
Parent:=Self;
подскажите, что исправить..


self.name   (2008-07-25 02:16:00) [1]

с caption'ом разобрался, благодаря сообщ Семеныча.
надо было написать
ControlStyle := ControlStyle - [csSetCaption]


self.name   (2008-07-25 01:55:00) [2]

неа, не было. только в обьявлении.
Panel: TPanel;


Германн   (2008-07-25 01:51:00) [3]


> self.name ©   (25.07.08 01:38) [8]
>
> но всё же она так делает..
> или я что-то напутал, хотя, сомневаюсь.
>

В твоём проекте есть ещё где-нибудь такое имя?


self.name   (2008-07-25 01:45:00) [4]

я щас создаю уже кнопку на панели..но не могу удалить caption. делаю:

procedure ToOtvets.AddButton;
begin
 mButton:=TButton.Create(FindComponent('otv_pnl_'+IntToStr(FVariantCount)));
 with mButton do begin
   Parent:=mpanel;
   Left := HSpace;
   top:=VSpace;
   Width := ButtonWidth;
   Height := parent.ClientHeight-2*VSpace;
   TabStop := True;
   TabOrder := FVariantCount-1;
   name:='otv_btn_'+inttostr(FVariantCount);
 end;
 (FindComponent('otv_btn_'+IntToStr(FVariantCount)) as TsButton).caption:='';
end;

а caption так и остается равным name.
пользуясь случаем хотел бы спросить - как правильно писать, через FindComponent или mPanel? и когда я создаю еще одну mPanel, что происходит?
может где-то это описано?


self.name   (2008-07-25 01:38:00) [5]

но всё же она так делает..
или я что-то напутал, хотя, сомневаюсь.


Германн   (2008-07-25 00:38:00) [6]


> self.name ©   (25.07.08 00:18) [6]
>
> не подумал, что Delphi будет обижаться на Panel.
> назвал mPanel и всё заработало.
>

Подозрительно. Delphi действительно не должна обижаться на Panel.


self.name   (2008-07-25 00:18:00) [7]

не подумал, что Delphi будет обижаться на Panel.
назвал mPanel и всё заработало.
Virgo_Style, спасибо за ответ.


self.name   (2008-07-24 23:44:00) [8]

читал справку:)
Owner - отвечает за освобождением компонента,
Parent - содержит компонент..
правильно ли я понял?


self.name   (2008-07-24 23:36:00) [9]

не..
сделал

Panel:=TPanel.Create(Self)
with panel do begin
 Parent:=Self;
...

ошибка та же но на первой строчке. а в чём разница между Owner и Parent?


self.name   (2008-07-24 23:31:00) [10]


> Virgo_Style ©

вот это я прокололся :)
спасибо


Virgo_Style   (2008-07-24 23:28:00) [11]

self.name   (24.07.08 23:20)
подскажите, что исправить..


Панель надо создать


self.name   (2008-07-24 23:21:00) [12]

забыл...
AddP вызывает AddPanel и AddRichEdit


Наверх

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