-
Уважаемые программисты, здравствуйте. У меня следующая проблема. Есть свой редактор свойства (от базового TPropertyEditor). Так вот, вызвав в нем (ну, например, в переопределенном SetValue) SetStrValue('что-то'), ведь должно это значение записаться в *.dfm? Если нет, то как мне всё же сохранить все изменения, сделанные в Design-time? Благодарю за помощь)
-
Desinger.Modified
-
Спасибо, но нет, не помогло, к тому же, этот метод просто всё-таки извещает об изменениях - "Notifies property and component editors when a change is made to a component" и к установке значения не имеет отноешния. А как записываются сложные свойства компонентов, если эти свойства, например, классы?
-
> Иваха
Редактор свойства устанавливает значение свойства. И все. К его записи в DFM это не имеет никакого отношения.
> А как записываются сложные свойства компонентов, если эти свойства, > например, классы?
Зависит от многих факторов. Долго рассказывать, проще решить конкретную проблему. Показывайте объявление класса (и будет лучше, еслы Вы выбросите из него все, не относящееся к теме). Или посмотрите, как например, сохраняются TFont и TMenu у TForm - увидите разницу.
-
Дело в том, что при сохранении формы все ее свойства (если их значения не по умолчанию) сохраняются в dfm. В моём же случае это свойство в файле dfm не появляется.
Если, скажем, у нас свойство, к примеру, такого вида:
TSomeProp = class Name : String; Width : LongInt; end;
Как необходимо переопределить метод SetValue и как установить заданное в редакторе значение?
( я так понимаю, в конечном счете, в dfm должна появится запись: SomeProp.Name = 'PropName' SomeProp.Width = 123 )
а у TFont'а еще в PropertyAttribute задаются paValueList и paSubProperties с тем, чтобы можно было редактировать каждое из свойств TFont непосредственно в инспекторе объектов. Может это как-то связано или даже необходимо для того, что я прошу?..
-
Такое свойство должно наследоваться от TPersistent, в нем механизм сохранения уже реализован
-
Спасибо. Я разобрался, как это делать. Посмотрел, что делает Borland, плюс точно так же это описано в одной книге "Исскуство создания компонентов Delphi". Но при вызове SetOrdValue появляется AV! такие дела...
-
Применение редактора свойства никак не сказывается на метод сохранения в ресурсе. Разбирайтесть с редактором.
-
Если вы будете и дальше скрывать код редактора, то помочь вряд ли кто сможет.
-
В коде редактора две строчки:
function TGroupEditor.GetAttributes: TPropertyAttributes; begin Result := [paDialog, paFullWidthName] end;
и
procedure TGroupEditor.Edit; begin with TTreeGroupEditDlg.Create(nil) do try Grouping := TGrouping(Pointer(GetOrdValue));
if ShowModal = mrOK then begin SetOrdValue(LongInt(Grouping)) end finally Release end end;
-
Вызов SetOrdValue генерирует Access Violation
-
1. Хотелось бы увидеть код SetGrouping 2. Постарайтесь не присваивать указать, проще присвоить каждому свойству
|