Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.05.2022, 17:16
{$M+} {$M+} вне форума
Прохожий
 
Регистрация: 08.05.2022
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Работа с DefineProperties и ".dfm"-файл

Всем привет!
Имеется часть кода:
Код:
...
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  
Старый 08.05.2022, 20:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так сабклась TEdit и добавляй св-во в него:

Код:
type
  TEdit = class(Vcl.StdCtrls.TEdit)
  protected
    procedure DefineProperties(Filer: TFiler); override;
    procedure WriteZ(Writer: TWriter);
  end;

  TForm2 = class(TForm)
    Edit1: TEdit;
  ...
Ответить с цитированием
  #3  
Старый 08.05.2022, 22:12
{$M+} {$M+} вне форума
Прохожий
 
Регистрация: 08.05.2022
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Это действительно сработало. Спасибо!
Но что если у меня на форме более одного Edita?,- тогда новое свойство будет записано в каждый из них. А есть ли возможность обратиться к конкретному компоненту по имени?
И я так понимаю, что если у меня на форме компоненты разных типов, то миссия становится невыполнимой...
Ответить с цитированием
  #4  
Старый 09.05.2022, 21:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да, будет для каждого.
Соответсвенно, тогда в коде надо проверять имя или таг.
Т.е. запись будет вызываться для каждого, а вот будет ли записано - уже решаешь ты в коде.

По поводу разных типов - ну не так уж их и много.
Тут скорее проблема в том, что такое перекрытие придется писать в каждой форме, что не очень удобно. Если Delphi достаточно свежая, то можно попробовать как будет работать class helper (может можно просто создать соотв. class helper и методы из него будут нормально работать). В противном случае тогда придется либо пихать этот код каждый раз, либо создавать свой набор компонент и пользоваться ими.

Последний раз редактировалось lmikle, 09.05.2022 в 21:12.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter