Форум: "Компоненты";
Текущий архив: 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