Хорошо, создайте на основе опубликованного ниже кода модуль PropDemo.pas и добавьте новый компонент в палитру компонентов. Расположите его на форме и сохраните ее. Затем посмотрите файл DFM каким-либо шестнадцатиричным редактором и проверьте наличие определенных свойств по их именованным тэгам. Вы можете также попробовать закрыть форму и модуль, а затем открыть его с помощью пункта меню File | Open file..., изменив тип файла в выпадающем списке на *.DFM.
Mike Scott
Mobius Ltd.
Code: |
unit PropDemo;
{ Демонстрация DefineProperties.Mike Scott, CIS 100140,2420. }
interface
uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs;
type TDemoProps = class(TComponent) private { Private declarations } FStringThing: string; FThing: record i, j, k: integer; x, y: real; ch: char; end; procedure ReadStringThing(Reader: TReader); procedure WriteStringThing(Writer: TWriter); procedure ReadThing(Stream: TStream); procedure WriteThing(Stream: TStream); protected { Protected declarations } procedure DefineProperties(Filer: TFiler); override; public { Public declarations } constructor Create(AOwner: TComponent); override; published { Published declarations } end;
procedureRegister;
implementation
constructor TDemoProps.Create(AOwner: TComponent);
begin inherited Create(AOwner); { создайте любые данные, чтобы было что передать в поток} FStringThing := 'Всем привет!'; with FThing do begin i := 1; j := 2; k := 3; x := PI; y := 180 / PI; ch := '?'; end; end;
procedure TDemoProps.ReadStringThing(Reader: TReader); begin FStringThing := Reader.ReadString; end;
procedure TDemoProps.WriteStringThing(Writer: TWriter); begin Writer.WriteString(FStringThing); end;
procedure TDemoProps.ReadThing(Stream: TStream); begin Stream.ReadBuffer(FThing, sizeof(FThing)); end;
procedure TDemoProps.WriteThing(Stream: TStream); begin Stream.WriteBuffer(FThing, sizeof(FThing)); end;
procedure TDemoProps.DefineProperties(Filer: TFiler);
begin inherited DefineProperties(Filer); Filer.DefineProperty('StringThing', ReadStringThing, WriteStringThing, FStringThing <> ''); Filer.DefineBinaryProperty('Thing', ReadThing, WriteThing, true); end;
procedureRegister; begin RegisterComponents('Samples', [TDemoProps]); end;
end. |
Взято из Советов по Delphi отВалентина Озерова
Сборник Kuliba
- Подробности
- Родительская категория: Объектное ориентирование
- Категория: Свойства
Code: |
{ You sometimes wish to store multiple information in a given class like in the example: alltogether when it belongs together. Thus accessing this information from out of the class can be achieved using property declaration. Its a good way to "clean your code" and make it as "logic" as possible. You also may have to store or load information from your class using file or stream technology. This can be done at once for the recorded information from within the given class. }
type TPersonRecord = Record FirstName: String; LastName: String; BirthDate: TDate; End;
TForm4 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private fActualUser: TPersonRecord; ... procedure SaveActualUser(S: TFileStream); // it's an example procedure LoadActualUser(S: TFileStream); ... public property FirstName: stringread fActualUser.FirstName write fActualUser.FirstName; property LastName : stringread fActualUser.LastName write fActualUser.LastName; property BirthDate: TDate read fActualUser.BirthDate write fActualUser.BirthDate; end;
procedure TForm4.SaveActualUser(S: TFileStream); begin // All that stuff at once in your Stream S.Write(fActualUser, SizeOf(fActualUser)) end;
procedure TForm4.LoadActualUser(S: TFileStream); begin // All that stuff at once back in your class S.Read(fActualUser, SizeOf(fActualUser)); end; |
https://delphiworld.narod
DelphiWorld 6.0
- Подробности
- Родительская категория: Объектное ориентирование
- Категория: Свойства
Вы можете менять свойство "owner" и после создания компонента с помощью методов InsertComponent() и RemoveComponent().
Взято из
DELPHI VCL FAQПеревод с английского
Подборку, перевод и адаптацию материала подготовил Aziz(JINX)
специально для Королевства Дельфи
- Подробности
- Родительская категория: Объектное ориентирование
- Категория: Свойства
В иерархии VCL в большинстве случаев существует уровень объектов-"предшественников" (TCustomXXXX), в которых многие свойства скрыты. Для унаследованных от таких "предшественников" объектов можно "открывать" на выбор те или иные свойства. А как можно скрыть свойства, которые объявлены в published-области от Object Inspector'а, но при этом оставить возможность доступа во время работы программы? Решение состоит в объявлении свойства "по новой" в public-области. В примере скрытым будет у объекта TMyControl свойство Height.
Code: |
TMyControl = class(TWinControl) protected procedure SetHeight(Value: Integer); function GetHeight: Integer; public property Height: Integer read GetHeight write SetHeight; end;
procedure TMyControl.SetHeight(Value: Integer); begin inherited Height := Value; end;
function TMyControl.GetHeight; begin Result := inherited Height; end; |
- Подробности
- Родительская категория: Объектное ориентирование
- Категория: Свойства