Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Доступ к защищенным свойствам

Delphi , Компоненты и Классы , Свойства и События

Доступ к защищенным свойствам

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{*** It is not always necessary to write a new class when you miss the properties you need ***}

 { 
  Let's say, you writing a program with some standard controls on it's form. 
  One of the components is a TProgressBar. 
  All components, except the progressbar, are yellow (brrrr!!!) 
  but it is not possible to change the color of the progressbar the normal way. 
  There are three things that you can do: 

  1. Leave it this way 
  2. Write a new component 
  3. Try to use WinAPI 

  OR try this: 
}

 // Put this on top of your unit 
type
  TAccessControl = class(TWinControl)
    public
     property Color;
  end;

 // and put into TForm1.FormCreate() the following code: 

  TAccessControl(MyProgressBar).Color:= clYellow;

 { 
  This is possible because TwinControl is the immediate ancestor. 
  There is also another trick to give a existing class more functionality 
  without the need of creating a new component, for example: 
}

 type
  // Just a few lines of code and your TLabel 
 // components on the form has more 
 // functionality without writing a new class 
 TLabel = class(stdctrls.TLabel)
  public
    procedure SayHello();
  end;

  // ... 
procedure TLabel.SayHello();
 begin
   ShowMessage( 'I just want to say hello (and not hello world!)');
 end;


 // As you know the Custom version of a class does not 
// publish all it's properties, so you can do it the same way as with TLabel. 

type
  TTheBaseClass = class(UnitName.TTheBaseClass)
  public
    property Align;
    property Color;
    property YourProp;
    {etc etc}
  end;

 { 
  NOTES: 
  - You can never add new published properties when controls properties are stored 
    in the DFM file (on a form) 
  - You can put modified classes into another unit file so that you can add it 
    AS THE LAST UNIT to the uses clause. 

  I hope you find it usable. 
}

Статья о доступе к защищенным свойствам в Delphi, конкретно при работе с стандартными контролами на форме. Автор предлагает три опции:

  1. Оставить как есть: принять 기본ное поведение контрола.
  2. Создать новый компонент: написать пользовательский класс, который наследуется от оригинального контрола и добавляет требуемую функциональность.
  3. Использовать WinAPI: напрямую доступаться к функциям Windows API для изменения свойств контрола.

Статья затем вводит два метода доступа к защищенным свойствам:

Метод 1: Создание нового класса Автор демонстрирует, как создать новый класс TAccessControl, который наследуется от TWinControl и добавляет новое свойство Color. Это позволяет установить цвет компонента TProgressBar на форме.

type
  TAccessControl = class(TWinControl)
    public
      property Color;
  end;

// В TForm1.FormCreate():
TAccessControl(MyProgressBar).Color := clYellow;

Метод 2: Модификация существующего класса Автор показывает, как модифицировать компонент TLabel добавлением нового метода SayHello().

type
  TLabel = class(stdctrls.TLabel)
    public
      procedure SayHello;
  end;

procedure TLabel.SayHello;
begin
  ShowMessage('Я только хочу сказать hello (и не world!)');
end;

Метод 3: Создание пользовательского базового класса Автор предлагает пример создания пользовательского базового класса TTheBaseClass, который наследуется от другого класса и добавляет новые свойства. Это позволяет доступиться к защищенным свойствам оригинального класса.

type
  TTheBaseClass = class(UnitName.TTheBaseClass)
    public
      property Align;
      property Color;
      property YourProp; { и т.д. }
  end;

Заметки

  • Не можете добавлять новые опубликованные свойства, когда свойства контролов хранятся в файле DFM (на форме).
  • Можете поместить модифицированные классы в другой файл единицы и добавить его в конец списка используемых единиц.

Статья заканчивается заявлением, что эти методы могут быть полезны для добавления функциональности к стандартным контролам без создания нового компонента.

Доступ к защищенным свойствам компонентов в Delphi можно достичь с помощью наследования от базового класса или создания нового класса, который расширяет функциональность существующего компонента.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Свойства и События ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:54:21/0.0054881572723389/1