Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Delphi" (архив)


Паскаль, Делфи


 #0 Паша © 15.03.04 12:05:03 - 18.03.04 11:01:48

замена компоненты на форме на другую в дизайнтайме



имеется куча форм на каждой из них есть куча компонент. нужно их оптово грохнуть и поменять на другой класс с одновременным изменением некоторых пропертей. идея у меня была делать это при вызове метода 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 вызвал), ко всему еще АВ вылетает... вообще, такое возможно сделать? и когда фрии вызвать для первой панельки? Цитата

 #1 Паша © 15.03.04 12:18:46

такс, парент был nil, теперича видно новую. как теперь старую пристрелить?
 #2 Deep © 15.03.04 17:06:36

> Паша ©
как теперь старую пристрелить?


owner.RemoveComponent(self);</­code>

ну... это ты в памяти все эти операции проводишь. В ресурсах формы попрежнему будет сидеть старая панель. Для сохранения новой формы на диск нужно юзать.... счас гляну....
 #3 Паша © 15.03.04 17:14:27

> Deep © 15.03.04 18:06
я так и делаю. ресурсы должны, по идее, обновиться при сохранении формы. т.е. я их все открываю, при открытии классы замещаются, сохраняю и нудно давлю "ОК". но, шо-то глючит по-черному, вплоть до зависания дельфей. решеил подменить базавый класс, так проще, видимо, правда, придется потерять кой-чего...
 #4 Deep © 15.03.04 17:44:04

> Паша © 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? Рисковано...
 #6 Паша © 15.03.04 17:56:01

> Deep © 15.03.04 18:44
я их в ДИЗАЙНЕРЕ думал открыть. в принципе, почти получилось. при открытии - подмена, потом сохранение. Окей жать не тяжело.
 #7 Паша © 15.03.04 17:59:16

> Mystic © 15.03.04 18:50
нормально, фурычит и даже создается на форме.
 #8 Mystic © 15.03.04 18:18:14

1) Save dfm as text + ручная правка...
2) Написать Wizard, который выполнит оное средствами OpenToolsAPI
 #9 Deep © 15.03.04 19:00:56

> Mystic © 15.03.2004 19:18:00
> 1) Save dfm as text + ручная правка...

я так всегда и делаю, только если много разных компонент и есть большие отличия в названиях свойств/методов -- то напряжно будет.

> 2) Написать Wizard
А вот это -- самое оно. Написать прожку, которая правит текстовые файлы(Save dfm as text ).
 #10 Паша © 16.03.04 10:55:35

> 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)
 #13 Deep © 18.03.04 10:50:37

> Andrey ©
отличная статья!
 #14 Andrey © 18.03.04 11:01:48

>Deep © 18.03.04 11:50
yandex "описание ToolsAPI Delphi" первая вторая ссылки :)




  • Тема находится в архиве

    Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов