Советы по 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