Форум "Delphi" (архив)
Паскаль, Делфи
замена компоненты на форме на другую в дизайнтаймеимеется куча форм на каждой из них есть куча компонент. нужно их оптово грохнуть и поменять на другой класс с одновременным изменением некоторых пропертей. идея у меня была делать это при вызове метода Loaded. тренируюсь на наследниках обычной панели (шоб было нагляднее) procedure TPanelNew.Loaded; var nam: string; new:TPanelNew22; begin inherited Loaded; nam:= Name; name:= name+ '___111111'; new:= TPanelNew22.Create(Owner); Owner.InsertComponent(new); new.Name:= nam; new.Caption:= Caption; new.Top:= 0; new.Width:= Width; new.Height:= Height; new.Color:= Color; new.Color:= clBlue; owner.RemoveComponent(self); end; но нифига не выходит. не видно новой панельки (хотя в отладчике видно, что создаестся), а старая теряется (потому что RemoveComponent вызвал), ко всему еще АВ вылетает... вообще, такое возможно сделать? и когда фрии вызвать для первой панельки?
|
|
такс, парент был nil, теперича видно новую. как теперь старую пристрелить? |
|
> Паша © как теперь старую пристрелить? owner.RemoveComponent(self);</code> |
|
> Deep © 15.03.04 18:06 я так и делаю. ресурсы должны, по идее, обновиться при сохранении формы. т.е. я их все открываю, при открытии классы замещаются, сохраняю и нудно давлю "ОК". но, шо-то глючит по-черному, вплоть до зависания дельфей. решеил подменить базавый класс, так проще, видимо, правда, придется потерять кой-чего... |
|
> Паша © 15.03.2004 18:14:00 > > > Deep © 15.03.04 18:06 > я так и делаю. ресурсы должны, по идее, обновиться при сохранении > формы. Ну а как ты ее сохраняешь? Для сохранения формы из рантайм нужно команду дать: такую-то форму в такой-то файл. посмотри TWriter procedure WriteComponent(Component: TComponent); P.S. Это не совсем то, но тебе нужно нечто похожее |
|
#5 Mystic © 15.03.04 17:50:40
А почему Loaded? Рисковано... |
|
> Deep © 15.03.04 18:44 я их в ДИЗАЙНЕРЕ думал открыть. в принципе, почти получилось. при открытии - подмена, потом сохранение. Окей жать не тяжело. |
|
> Mystic © 15.03.04 18:50 нормально, фурычит и даже создается на форме. |
|
#8 Mystic © 15.03.04 18:18:14
1) Save dfm as text + ручная правка... 2) Написать Wizard, который выполнит оное средствами OpenToolsAPI |
|
> Mystic © 15.03.2004 19:18:00 > 1) Save dfm as text + ручная правка... я так всегда и делаю, только если много разных компонент и есть большие отличия в названиях свойств/методов -- то напряжно будет. > 2) Написать Wizard А вот это -- самое оно. Написать прожку, которая правит текстовые файлы(Save dfm as text ). |
|
> Mystic © 15.03.04 19:18 > Deep © 15.03.04 20:00 1) а я не запарюсь саве аз делать? 426 файлов дфм, млин. 2) а шо за визард такой? |
|
#11 Mystic © 16.03.04 12:08:37
1) Разве Replace отменили? Просто может проще написать парсер dfm-ки ;) 2) Это нужно изучать Open Tools API. Там есть интерфейсы для доступа в design-time в редактору формы, и т. д. Добавлять компоненты нужно исключительно методами этих интерфейсов, ибо все остальное чревато... |
|
#12 Andrey © 18.03.04 09:49:06
2) |
|
> Andrey © отличная статья! |
|
#14 Andrey © 18.03.04 11:01:48
>Deep © 18.03.04 11:50 yandex "описание ToolsAPI Delphi" первая вторая ссылки :) |
Тема находится в архиве
Написать ответ |
|
