![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем привет!
Имеется часть кода: Код:
... type TForm2 = class(TForm) Edit1: TEdit; private // protected procedure DefineProperties(Filer: TFiler); override; procedure WriteZ(Writer: TWriter); public // end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.WriteZ(Writer: TWriter); begin Writer.WriteIdent('ValueTest'); end; procedure TForm2.DefineProperties(Filer: TFiler); begin inherited; Filer.DefineProperty('PropTest', nil, WriteZ, True); end; в ".dfm" : PropTest = ValueTest Результат: Код:
object Form2: TForm2 Left = 203 Top = 107 Width = 300 Height = 200 Caption = 'Form2' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False Position = poDesktopCenter PixelsPerInch = 96 TextHeight = 13 PropTest = ValueTest object Edit1: TEdit Left = 32 Top = 32 Width = 121 Height = 21 TabOrder = 0 Text = 'Edit1' end end Новое свойство относится к объекту Form2, а как сделать, чтобы свойство относилось к объекту Edit1 ? Есть способ выбора компонента? Последний раз редактировалось Admin, 09.05.2022 в 17:12. |
#2
|
|||
|
|||
![]() Ну так сабклась TEdit и добавляй св-во в него:
Код:
type TEdit = class(Vcl.StdCtrls.TEdit) protected procedure DefineProperties(Filer: TFiler); override; procedure WriteZ(Writer: TWriter); end; TForm2 = class(TForm) Edit1: TEdit; ... |
#3
|
|||
|
|||
![]() Это действительно сработало. Спасибо!
Но что если у меня на форме более одного Edita?,- тогда новое свойство будет записано в каждый из них. А есть ли возможность обратиться к конкретному компоненту по имени? И я так понимаю, что если у меня на форме компоненты разных типов, то миссия становится невыполнимой... |
#4
|
|||
|
|||
![]() Да, будет для каждого.
Соответсвенно, тогда в коде надо проверять имя или таг. Т.е. запись будет вызываться для каждого, а вот будет ли записано - уже решаешь ты в коде. По поводу разных типов - ну не так уж их и много. Тут скорее проблема в том, что такое перекрытие придется писать в каждой форме, что не очень удобно. Если Delphi достаточно свежая, то можно попробовать как будет работать class helper (может можно просто создать соотв. class helper и методы из него будут нормально работать). В противном случае тогда придется либо пихать этот код каждый раз, либо создавать свой набор компонент и пользоваться ими. Последний раз редактировалось lmikle, 09.05.2022 в 21:12. |