Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.128 c
11-1110826662
dimaxx
2005-03-14 21:57
2005.11.13
Несколько вопросов по KOL


8-1118224081
Gydvin
2005-06-08 13:48
2005.11.13
изменить wmf в делфи


2-1129712316
Perf2k2
2005-10-19 12:58
2005.11.13
Всем снова привет - проблема с Query


2-1130160963
SAVage
2005-10-24 17:36
2005.11.13
Стандартные средства работы со списками


4-1126151514
Laymer
2005-09-08 07:51
2005.11.13
Меню Пуск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский