Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Курс видеоуроков программирования и крэкерства 6.0
(актуальность: февраль 2017)
Свежие инструменты, новые видеоуроки!

  • 300+ видеоуроков
  • 800 инструментов
  • 80 свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Код определения свойств

Автор: Mike Scott(Mobius Ltd.)

Итак вам опять нужно "немного" кода. Вот небольшой примерчик компонента лично для вас и остальных моих читателей. Установите этот компонент в палитру Delphi, бросьте экземпляр на форму, закройте ее и модуль и откройте форму как файл формы, используя в диалоге открытия тип *.dfm. Вы увидите дополнительные свойства 'StringThing' и 'Thing'. Первое - свойство строки, второе - бинарное свойство, фактически запись. Если вы имеете HexEdit (шестнадцатиричный редактор) или что-то аналогичное, взгляните на ваш dfm-файл и вы увидите тэги ваших новых свойств вместе с их именами.

Если TReader/TWriter имеет специфические методы для чтения/записи свойств и вы хотите добавить, например, строку, целое, символ или что-то еще (проверьте описание соответствующих методов TReader в файлах помощи), то в этом случае используйте DefineProperty. В случае сложного объекта используйте DefineBinaryProperty и ваши методы чтения и записи получат TStream вместо TReader/TWriter.


 unit PropDemo;
 
 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;
 
 procedure Register;
 
 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;
 
 procedure Register;
 begin
   RegisterComponents('Samples', [TDemoProps]);
 end;
 
 end.
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS