Советы по Delphi. Версия 1.4.3 от 1.1.2001 - страница 21
>Unit MyEditor;
>interface
>uses STREDIT;
>type TMyStringListProperty = class(TStringListProperty)
> procedure Edit; override;
>end;
>implementation
>procedure TMyStringListProperty.Edit;
>begin
> if { какие-то условия } then { что-то делаем }
> else inherited Edit;
>end;
>end.
- Pat Ritchey
Как убрать публичное свойство компонента/формы из списка видимых/редактируемых свойств в Инспекторе Обьектов?
Nomadic советует:
Из TForm property не убиpал, но из TWinControl было дело. А дело было так:
>interface
>type TMyComp = class(TWinControl)
> …
>end;
>procedure Register;
>implementation
>procedure Register;
>begin
> RegisterComponents('MyPage', [TMyComp]);
> RegisterPropertyEditor(TypeInfo(String),TMyComp,'Hint',nil);
>end;
[ и т.д.]
Тепеpь property 'Hint' в Object Inspector не видно. Рад, если чем-то помог. Если будут глюки, умоляю сообщить. Такой подход у меня сплошь и pядом.
Свойство FileName в невизуальном компоненте
Следующий код взят из dsgnintf.pas (иногда стоит покопаться в файлах!) для свойства TMPLayer.filename, с помощью C.Calvert…
В заголовке модуля компонента…
>TFileNameProperty = class(TStringProperty)
>public
> function getattributes: TPropertyattributes; override;
> procedure Edit; override;
>end;
добавьте функцию регистрации…
>RegisterPropertyEditor(Typeinfo(String), TMyComponent, 'Filename', TFileNameProperty);
и код…
>function TFileNameProperty.GetAttributes;
>begin
> Result := [paDialog];
>end;
>Procedure TFilenameProperty.edit;
>var
> MFileOpen: TOpenDialog;
>begin
> MFileOpen := TOpenDialog.Create(Application);
> MFileOpen.Filename := GetValue;
> MFileOpen.Filter := 'Правильный тип файлов|*.*'; (* Поместите здесь ваш собственный фильтр...*)
> MFileOpen.Options := MFileOpen.Options + [ofPathMustExist,ofFileMustExist];
> try
> if MFileOpen.Execute then SetValue(MFileOpen.Filename);
> finally
> MFileOpen.Free;
> end;
>end;
Записи
Пример переменной записи
В Delphi 2.0 я пытаюсь прочесть текстовый файл и получаю проблему. Текстовый файл, который я хочу прочесть, имеет записи фиксированной длины, но в самих записях могут располагаться различные типы с различной длиной, и оканчиваться в различных позициях, в зависимости от типа.
Файл выглядит примерно так:
TFH.......
TBH.......
TAB........
TAA........
Вы можете поймать больше одного зайца в случае объявления переменной записи, но если сделаете это правильно.
>Type
> TDataTag = Array [1..3] of Char;
> TDataTags = Array [0..NumOfTags-1] of TDataTag;
> TDataRec = packed Record
> tagfield: TDataTag;
> case integer of
> 0: ( поля для тэга TFH );
> 1: ( поля для тэга TBH );
> 2: …
> …
> end;
> TMultiRec = packed Record
> Case Boolean of
> false: (строка: Array [0..1024] of Char);
> { должно установать строку максимально возможной длины }
> true : ( data: TDataRec );
> End;
>Const DataTags: TDataTags = ('TFH', 'TBH', …);
>var rec: TMultirec;
>ReadLn(datafile, rec.line);
>Case IndexFromDataTag(rec.data.tagfield) Of
>0: …
>1: …
IndexFromDataTag должен искать передаваемый тэг поля в массиве DataTags. Определите все поля в TDataRec как Array [1..someUpperBound] of Char.
– Peter Below
Передача массива записей символов в Memo
Delphi 1
Тема: Передача массива записей символов в Memo.
Обработка больших строк в 16-битной версии Delphi задача далеко непростая. Особенно когда строки являются частью структуры записи и вы хотите передать их в TMemo. В данном совете показано как создать структуру записи размером 1000 символов, прочесть в нее содержимое Memo и затем записать ее обратно в Memo. Основной метод, который мы здесь используем — метод Memo GetTextBuf. Используемая структура записи представляет собой простую строку и массив из 1000 символов, но структура могла бы быть сложнее.
>unit URcrdIO;
>interface
>uses
> SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls,dbtables;
>type
> TForm1 = class(TForm)
> Button1: TButton;
> Memo1: TMemo;
> Button2: TButton;
> procedure Button1Click(Sender: TObject);
> procedure Button2Click(Sender: TObject);
> private