![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свойство типа TStrings [D7]
Anonimus © (2004-12-27 15:12:00)Добрый день.
Пишу свой компонент. Появилась необходимость вставить туда свойство типа TStrings. Свойство должно быть published. Но при попытке редактировать его в Design Time получаю ошибку. Естесственно, ведь экземпляр класса еще не создан.
private
{ Private declarations }
fLngFileName: string;
fOtherStrings: TStrings;
procedure ExtractComponents;
procedure SetLng(FName: string);
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property LngFileName: string read fLngFileName write SetLng;
property OtherStrings: TStrings read fOtherStrings;
end;
Пожалуйста, ткните носом, как нужно делать, чтобы в результате получить какое-то подобие Lines в TMemo
Anatoly Podgoretsky (2005-01-15 14:23:00) [1]Anonimus © (27.12.04 15:12)
Естесственно, ведь экземпляр класса еще не создан.
Экземпляр класса уже создан, иначе бы ты его не увидел в инспекторе объектов.
icWasya (2005-01-11 11:27:00) [2]>как нужно делать, чтобы в результате получить какое-то подобие Lines в TMemo
кроме [1] добавить
private
procedure setOtherStrings(value :TStrings);
....
property OtherStrings: TStrings read fOtherStrings write setOtherStrings;
....
procedure TMyComponent.setOtherStrings(value :TStrings);
begin
fOtherStrings.Assign(value);
end;
Юрий Зотов (2004-12-27 16:47:00) [3]> Anonimus © (27.12.04 15:48) [2]
Нет, не интерпретатора, там более сложный механизм (больше похоже на механизм плагинов).
Еще - свойство OtherStrings: TStrings объявлено как "только для чтения". В таком случае зачем выносить его в Инспектор Объектов?
Anonimus (2004-12-27 15:48:00) [4]Я так понимаю Delphi в данной ситуации работает в качестве интерпритатора своего же кода, ну в некотором роде?
Сорри, яснее выразиться не сумел :(
prosoft (2004-12-27 15:19:00) [5]Свойство в свою очередь является ссылкой на экземпляр. Так что его как бы тоже создать нужно. ;)
Например так:
TMyComponent = class(TComponent)
.....
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property LngFileName: string read fLngFileName write SetLng;
property OtherStrings: TStrings read fOtherStrings;
end;
constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fOtherStrings := TStringList.Create;
end;
destructor TMyComponent.Destroy;
begin
fOtherStrings.Free;
inherited Destroy;
end;