Недавно добавленные исходники

•  TDictionary Custom Sort  502

•  Fast Watermark Sources  868

•  3D Designer  1 798

•  Sik Screen Capture  1 454

•  Patch Maker  1 457

•  Айболит (remote control)  1 387

•  ListBox Drag & Drop  1 152

•  Доска для игры Реверси  21 137

•  Графические эффекты  1 330

•  Рисование по маске  1 271

•  Перетаскивание изображений  1 082

•  Canvas Drawing  959

•  Рисование Луны  795

•  Поворот изображения  753

•  Рисование стержней  801

•  Paint on Shape  485

•  Генератор кроссвордов  747

•  Головоломка Paletto  659

•  Теорема Монжа об окружностях  837

•  Пазл Numbrix  606

•  Заборы и коммивояжеры  835

•  Игра HIP  549

•  Игра Go (Го)  522

•  Симулятор лифта  543

•  Программа укладки плитки  504

•  Генератор лабиринта  560

•  Проверка числового ввода  517

•  HEX View  595

•  Физический маятник  522

•  Задача коммивояжера  554

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Свойства в Delphi



- Ты видел, козлина, чтобы я наш apple гадостью всякой поливал?
- Урод ты, дед. У нас четвертый пень уже год стоит вместо MAC`a.
- Да, внучек, я этот пентиум на мешок с маком и выменял.

Свойства в Delphi могут быть простыми, перечислимыми, типа множество, объектными и массивами.

Простые свойства - это числовые, символьные и строковые типы данных. В инспекторе объектов для них не нужны специальные редакторы свойств.


unit OurComponent;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TOurComponent = class(TComponent)
  private
    { Private declarations }
    FMyInteger: Integer;
    FMyChar: Char;
    FMyString: string;
    procedure SetMyInteger(const Value: Integer);
    procedure SetMyChar(const Value: Char);
    procedure SetMyString(const Value: string);
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    property MyInteger: Integer read FMyInteger write SetMyInteger;
    property MyChar: Char read FMyChar write SetMyChar;
    property MyString: string read FMyString write SetMyString;
end;

procedure register;

implementation

procedure register;
begin
  RegisterComponents('Samples', [TOurComponent]);
end;

{ TOurComponent }

procedure TOurComponent.SetMyChar(const Value: Char);
begin
  FMyChar := Value;
end;

procedure TOurComponent.SetMyInteger(const Value: Integer);
begin
  FMyInteger := Value;
end;

procedure TOurComponent.SetMyString(const Value: string);
begin
  FMyString := Value;
end;

end.

Перечислимые свойства - это стандартные перечислимые, логический и определенные пользователем перечислимые типы данных. В инспекторе объектов для них редакторы свойств отображаются в виде списка выбора (combobox).


unit OurComponent;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics,
  Controls, Forms, Dialogs;

type
  TMyEnumerate = (meFirst, meSecond, meThird);

  TOurComponent = class(TComponent)
  private
    { Private declarations }
    FMyBoolean: Boolean;
    FMyCursor: TCursor;
    FMyEnumerate: TMyEnumerate;
    procedure SetMyCursor(const Value: TCursor);
    procedure SetMyBoolean(const Value: Boolean);
    procedure SetMyEnumerate(const Value: TMyEnumerate);
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    property MyCursor: TCursor read FMyCursor write SetMyCursor;
    property MyBoolean: Boolean read FMyBoolean write SetMyBoolean;
    property MyEnumerate: TMyEnumerate read FMyEnumerate write
    SetMyEnumerate;
end;

procedure register;

implementation

procedure register;
begin
  RegisterComponents('Samples', [TOurComponent]);
end;

{ TOurComponent }

procedure TOurComponent.SetMyCursor(const Value: TCursor);
begin
  FMyCursor := Value;
end;

procedure TOurComponent.SetMyEnumerate(const Value: TMyEnumerate);
begin
  FMyEnumerate := Value;
end;

procedure TOurComponent.SetMyBoolean(const Value: Boolean);
begin
  FMyBoolean := Value;
end;

end.

Свойства типа множество - это стандандартные, а также определенные пользователем, множества. В инспекторе объектов для них редакторы свойств имеют знак [+] перед названием свойства.

Размер публикуемых (published) свойств ограничен 32 элементами. Если вам необходимо свойство с более чем 32 элементами - объявите свое свойство публичным (public).


unit OurComponent;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics,
  Controls, Forms, Dialogs;

type
  TMySet = (msOne, msTwo, msThee, msFour, msFive);
  TMySets = set of TMySet;

  TOurComponent = class(TComponent)
  private
    { Private declarations }
    FMySet: TMySets;
    procedure SetMySet(const Value: TMySets);
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    property MySet: TMySets read FMySet write SetMySet;
end;

procedure register;

implementation

procedure register;
begin
  RegisterComponents('Samples', [TOurComponent]);
end;

{ TOurComponent }

procedure TOurComponent.SetMySet(const Value: TMySets);
begin
  FMySet := Value;
end;

end.

Объектные свойства - это стандартные (TFont, TCanvas и т.п.) или определенные пользователем объекты, как правило наследники TPersistent. В инспекторе объектов для них редакторы свойств имеют знак [+] перед названием свойства и кнопку с тремя точками [...](пользовательский редактор свойства).


unit OurComponent;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,
  Forms, Dialogs;

type

  TOurComponent = class(TComponent)
  private
    { Private declarations }
    FMyFont: TFont;
    procedure SetMyFont(const Value: TFont);
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published declarations }
    property MyFont: TFont read FMyFont write SetMyFont;
end;

procedure register;

implementation

procedure register;
begin
  RegisterComponents('Samples', [TOurComponent]);
end;

{ TOurComponent }

constructor TOurComponent.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  {В отличие от предыдущих свойств, объекты обязательно
  необходимо создавать в конструкторе компонента, как
  правило после вызова унаследованного конструктора}
  FMyFont.Create;
end;

destructor TOurComponent.Destroy;
begin
  FMyFont.Free;
  {В отличие от предыдущих свойств, объекты обязательно
  необходимо разрушать в деструкторе компонента, как
  правило перед вызовом унаследованного деструктора}
  inherited Destroy;
end;

procedure TOurComponent.SetMyFont(const Value: TFont);
begin
  {Объектному свойству значение присваивается с
  помощью вызова метода Assign}
  FMyFont.Assign(Value);
end;

end.

На заметку:

Перемещение между объявлением метода и реализацией происходит по нажатию клавиш Ctrl + Shift + стрелки вверх/вниз.

Свойства типа масив - обычные массива Object Pascal, но в отличии от последних могут индексироваться не только числовыми значениями но и строковыми. К сожалению этот тип свойства требует пользовательского редактора свойств (в инспекторе объектов редактор свойства имеет кнопку с тремя точками [...]), по-этому в указанном ниже примере свойство ArrayProp объявлено в секции public.


type
  TOurComponent = class(TComponent)
  private
    { Private declarations }
    FArrayProp: array[0..9] of integer;
    function GetArrayProp(aIndex: integer): integer;
    procedure SetArrayProp(aIndex: integer; const Value: integer);
  protected
    { Protected declarations }
  public
    { Public declarations }
    property ArrayProp[aIndex: integer]: integer read GetArrayProp
    write SetArrayProp;
  published
    { Published declarations }
end;

Спецификаторы свойств

Спецификатор default указывает сохранять значение свойства в файле формы или нет. Если значение свойства совпадает со значением default - значение в файле формы не сохраняется, если значения не равны - сохраняется. Это можно проверить, положив компонент на форму и выбрать правой кнопкой мыши пункт меню "View as Text". Default не устанавливает первоначальное значение свойства к указанному. Это необходимо сделать в конструкторе компонента.


unit OurComponent;

interface

uses
  Windows, SysUtils, Classes, Graphics, Forms, Controls;

type
  TOurComponent = class(TComponent)
  private
    { Private declarations }
    FMyInteger: Integer;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
    property MyInteger: Integer read FMyInteger write FMyInteger default 10;
end;

implementation

constructor TOurComponent.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FInteger := 10;
end;

end.

Спецификатор nodefault отменяет заданное по умолчанию значение свойства. Этот спецификатор, как правило, используется для отмены заданого по умолчанию значения унаследованного свойства. Например: property AutoSize nodefault; Спецификатор stored указывает когда сохранять в файле формы значение свойства. После stored может стоять true (всегда сохранять), false (никогда не сохранять) или название функции, которая возвращает логический результат.


property OneProp: integer read FOneProp write SetOneProp stored False;
property TwoProp: integer read FTwoProp write SetTwoProp stored True;
property ThreeProp: integer read FThreeProp write SetThreeProp stored Fuct;

Спецификатор index мы разберем в следующем выпуске, когда будем говорить о методах доступа к значению свойства. На заметку: Выделять прямоугольный фрагмент текста в редакторе исходного кода можно с помощью комбинации клавиш Alt + Shift + стрелки вверх/вниз.





Похожие по теме исходники

Delphi Magazine

Tetris DelphiX

Quake Delphi Sources

Delphi MMOG

 

Delphi Яндекс Директ

Delphi to HTML Converter

Проверка знаний Delphi

Is Delphi Dying Monitor

 

Autosave Delphi 7




Copyright © 2004-2022 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте   Facebook   Ссылка на Twitter   Ссылка на Telegram