![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Именовать сабкомпоненту [D6]
--= Eagle =-- © (2006-11-24 13:40:00)Доброго времени суток ещё раз.
Столкнулся ещё с одной траблой - в компоненте есть сабкомпонента, которой обязательно нужно назначить имя, чтобы её уже сабкомпоненты сохранялись и загружались правильно. У этой сабкомпоненты 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 в конструкторе уже рассматривались и не подошли...
--= Eagle =-- (2006-11-24 17:24:00) [1]P.S. DimaBr, вообще-то я не делал создание в дизайнтайме, я его там переименовывал :) Но за идею воспользоваться компонент-эдитором - спасибо.
--= Eagle =-- (2006-11-24 17:17:00) [2]Спасибо, решил немного другим способом, но тем не менее спасибо за идею, имено она дала нужный толчёк :)
DimaBr (2006-11-24 15:24:00) [3]Уже язык отваливается !!!!
Не изобретайте велосипед. Пользуйтесь готовым кодом
http://www.delphimaster.ru/cgi-bin/forum.pl?n=12&id=1162824958&p=2
DimaBr (2006-11-24 15:22:00) [4]Создавайте панели в дизайнере
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;