Главная страница
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.026 c
15-1195478229
Petr V. Abramov
2007-11-19 16:17
2007.12.16
А что такое агрегация?


15-1194730016
Leonid Troyanovsky
2007-11-11 00:26
2007.12.16
Самые распространенные дельфийские заблуждения


1-1190827524
jsnx
2007-09-26 21:25
2007.12.16
как программно щелкнуть по элементу списка


3-1186590083
Shamansky_ne
2007-08-08 20:21
2007.12.16
файлы в базу данных


9-1164498939
_[*_0_*]_T_[*_0_*]_ izvrat_*
2006-11-26 02:55
2007.12.16
OpenGL проекции