Главная страница
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.036 c
14-1129729148
oldman
2005-10-19 17:39
2005.11.13
Это форум глючит, или мой комп?


2-1130091967
_xroot
2005-10-23 22:26
2005.11.13
Атрибуты файла


3-1127822146
VitGun
2005-09-27 15:55
2005.11.13
База Paradox и DOS-приложение


14-1129365173
TG
2005-10-15 12:32
2005.11.13
SDK for CSS


4-1126050466
SergProger
2005-09-07 03:47
2005.11.13
PopupMenu & TrayIcon