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

Вниз

Именовать сабкомпоненту   Найти похожие ветки 

 
--= Eagle =-- ©   (2006-11-24 13:40) [0]

Доброго времени суток ещё раз.
Столкнулся ещё с одной траблой - в компоненте есть сабкомпонента, которой обязательно нужно назначить имя, чтобы её уже сабкомпоненты сохранялись и загружались правильно. У этой сабкомпоненты owner"ом является форма (или фрейм), так же как и у основной компоненты. Вобщем, осталось подобрать удобный случай для именования, т.к. если именовать в конструкторе, то при загрузке формы выскочит ошибка - такой компонент уже существует. Получение уникального имени происходит таким образом:

function TMainComponent.GetUniqueName: String;
var
 I: Integer;

begin
 for I := 0 to Owner.ComponentCount do // not "count-1" because we need to return unique name
 begin
   Result := "MySubComponentName" + IntToStr(I);
   if Owner.FindComponent(Result) = nil then Break;
 end;
end;


Вобщем, было бы неплохо именовать компоненту только тогда, когда она была реально положена на форму в дизайнере, при последующих загрузках и при создании в рантайме именовать компоненту не нужно. Естественно, что варианты csDesigning и csLoading in ComponentState в конструкторе уже рассматривались и не подошли...


 
DimaBr   (2006-11-24 15:22) [1]

Создавайте панели в дизайнере

procedure TMyPanelEditors.ExecuteVerb(Index: integer);
var APanel: TMySubPanel;
begin
 case Index of
   0: with TMainPanel(Component) do begin
        APanel := Designer.CreateComponent(TMySubPanel,Component,0,0,100,100) as TMySubPanel;
   end;
 else inherited ExecuteVerb(Index);
 end;{case}
end;


 
DimaBr   (2006-11-24 15:24) [2]

Уже язык отваливается !!!!
Не изобретайте велосипед. Пользуйтесь готовым кодом
http://delphimaster.net/view/5-1162824958/


 
--= Eagle =-- ©   (2006-11-24 17:17) [3]

Спасибо, решил немного другим способом, но тем не менее спасибо за идею, имено она дала нужный толчёк :)


 
--= Eagle =-- ©   (2006-11-24 17:24) [4]

P.S. DimaBr, вообще-то я не  делал создание в дизайнтайме, я его там переименовывал :) Но за идею воспользоваться компонент-эдитором - спасибо.



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

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

Наверх




Память: 0.47 MB
Время: 0.015 c
2-1195488220
Pacific
2007-11-19 19:03
2007.12.16
Float


11-1181733015
andreykorol
2007-06-13 15:10
2007.12.16
Управление таймером из другого потока


2-1195630426
EugenNFP
2007-11-21 10:33
2007.12.16
Как узнать по какому именно Edit(у) кликнули...


6-1175771739
Мимопроходящий
2007-04-05 15:15
2007.12.16
TWebBowser и кодировка


3-1186578799
zmalqop
2007-08-08 17:13
2007.12.16
Создание индекса