Главная страница
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.055 c
3-1127998807
Deks
2005-09-29 17:00
2005.11.13
Связанные таблицы


4-1126507725
Ландграф Павел
2005-09-12 10:48
2005.11.13
Перехват всех критических ситуаций (ошибок) в приложении


14-1130212702
pazitron_brain
2005-10-25 07:58
2005.11.13
Помогите!


5-1109775581
вопрос
2005-03-02 17:59
2005.11.13
Как из компонента узнать, что в форме выполнилось событие ShortC


1-1129882552
kyn66
2005-10-21 12:15
2005.11.13
Как обратиться к выделенной строке ListView?