Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Multi Line property   Найти похожие ветки 

 
jonni ©   (2005-02-26 00:49) [0]

мне нужно зоздать Property для компонента в которое я могу помещать многострочный текст. Что-то наподобие TMemo.
Причём это нужно делать в Designe-time.

На сколько я понимаю, это можно сделать так:
property Text:TStrings read FTexts write SetFtext(const Values:Tstrings). правильно ли это??

Подскажите пожалуйста как это можно правильно реализовать.


 
Юрий Зотов ©   (2005-02-26 09:37) [1]

private
 FText: TStrings;
 procedure SetText(const Values: TStrings);
...
published
 property Text: TStrings read FText write SetFtext;
end;

В конструкторе:
 FText := TStringList.Create;

В деструкторе
 FText.Free;

В SetText:
 FText.Assign(Value);

И все. Только проверьте, не перекроет ли Ваше свойство одноименное свойство предка (потому что, например, у TControl свойство Text ужу есть).


 
jonni ©   (2005-02-26 19:46) [2]

Юрий Зотов ©   (26.02.05 09:37) [1]
Большое спасибо за ответ.

а можно ли сделать просто:

property Text: TStrings read FText write FЕext;

т.е. без SetFtext ?????

У меня предок TComponent..... у него вроде нет такого свойства.... поэтому не перекрою....


 
Anatoly Podgoretsky ©   (2005-02-26 19:52) [3]

Можно, но это опасно, поскольку будут две ссылки на один и тот же объект, не контролируемые. В предложенном тебе варианте создается копия.


 
GuAV ©   (2005-02-26 21:55) [4]

Юрий Зотов ©   (26.02.05 9:37) [1]
В SetText:
FText.Assign(Value);


Кстати, почему так делают ? Причём не только для TStrings. Если св-во не предназначено для назначения другого объекта, то почему бы не оставиь его Readonly. А конструкция Text.Assign(MyText) выглядит прозрачнее чем Text := MyText, т.к. из последней вроде бы следует что отвественность за освобождение MyText уже лежит на компоненте, а потпытка его освободить после присвоения приведет к непредсказуемым результатам..


 
Юрий Зотов ©   (2005-02-26 23:46) [5]

> jonni ©   (26.02.05 19:46) [2]

Без SetText и Assign в нем получим утечку памяти (после прямого присвоения ссылки на внешний объект потеряется и зависнет внутренний объект, который был создан в конструкторе). Кроме того, при уничтожении нашего компонента будет уничтожен и внешний объект, а это вряд ли правильно.

> GuAV ©   (26.02.05 21:55) [4]

Похоже, что это может быть связано с чтением DFM и работой редакторов свойств. Так уж написан код VCL.



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
2-1129572350
eagle_ua
2005-10-17 22:05
2005.11.13
Как создать объект в Delhpi?


1-1130150894
Nait
2005-10-24 14:48
2005.11.13
Как клонировать кнопку?


14-1129888989
konda
2005-10-21 14:03
2005.11.13
Глюки при загрузке компьютера


2-1129975111
Ugrael
2005-10-22 13:58
2005.11.13
Помогите с QuickReport 3,пожалуйста.


2-1129801911
SMATMP
2005-10-20 13:51
2005.11.13
TImage.Bitmap