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

Вниз

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

 
Begin   (2006-04-24 12:48) [0]

Есть компонент, наследник TCustomStringGrid.
Для него объявляется published property

published
 ColCaps : TStrings read FColCaps write SetColCaps;

В конструкторе FColCaps создается как:
FColCaps := TStringList.Create;

Первый вопрос: В деструкторе надо явно прописывать FColCaps.Free? Или при уничтожении стринг грида FColCaps автоматически память освободит?

Второй вопрос. Инспектор объектов предлагает для TStrings свой редактор по умолчанию. Задать строки он позволяет, но когда я пытаюсь их редактировать, окно редактора открывается пустым. Как правильно связать содержимое FColCaps и окно редактора?


 
Юрий Зотов ©   (2006-04-24 14:10) [1]

1. Надо. TStringList - некомпонентский класс, владельца он не имеет и уничтожать его автоматически некому.

2. Такого быть не должно. Похоже, что метод SetColCaps написан неверно. Покажите код.


 
Begin   (2006-04-24 15:30) [2]


> Юрий Зотов ©   (24.04.06 14:10) [1]
> 1. Надо. TStringList - некомпонентский класс, владельца
> он не имеет и уничтожать его автоматически некому.

Вот. Я так и подумал. Соответственно перекрыл деструктор. И теперь: если в дизайн тайме положить компонент на форму, задать ColCaps и попытаться удалить грид, Делфи вылетает полностью с жуткими виолейшенами...

destructor Destroy; override;
...
destructor TXStringGrid.Destroy;
begin
 if FColCaps <> nil then
   FreeAndNil(FColCaps); // вот тут и вылетает...

 inherited;
end;



> 2. Такого быть не должно. Похоже, что метод SetColCaps написан
> неверно. Покажите код.


Да там нету ничего особенного...


private
procedure SetColCaps (const Value: TStrings);
function GetColCaps  : TStrings;
...
published
property ColCaps : TStrings read GetColCaps write SetColCaps ;

implementation
//***********************************************************constructor TXStringGrid.Create(AOwner: TComponent);
begin
...
 self.FColCaps := TStringList.Create;
...
end;
//***********************************************************procedure TXStringGrid.SetColCaps (const Value: TStrings);
begin
 FColCaps := Value;
end;
//***********************************************************function TXStringGrid.GetColCaps : TStrings;
begin
 result := self.FColCaps
end;
//***********************************************************


 
Begin   (2006-04-24 15:32) [3]

Блин, намудрил чего то с тегами...

private
procedure SetColCaps (const Value: TStrings);
function GetColCaps  : TStrings;
...
published
property ColCaps : TStrings read GetColCaps write SetColCaps ;

implementation
//***********************************************************
constructor TXStringGrid.Create(AOwner: TComponent);
begin
...
self.FColCaps := TStringList.Create;
...
end;
//***********************************************************
procedure TXStringGrid.SetColCaps (const Value: TStrings);
begin
FColCaps := Value;
end;
//***********************************************************
function TXStringGrid.GetColCaps : TStrings;
begin
result := self.FColCaps
end;
//***********************************************************


 
Юрий Зотов ©   (2006-04-24 16:47) [4]

Так и есть. То самое, что и предполагалось...

procedure TXStringGrid.SetColCaps (const Value: TStrings);
begin
 FColCaps.Assign(Value)
end;

И все беды кончатся. И писать Self не надо, он и так подразумевается. И проверять в деструкторе FColCaps на nil тоже ни к чему. И FreeAndNil там не нужно, обычного Free достаточно.


 
Begin   (2006-04-24 16:51) [5]

Баальшой спасиб... :)


 
Юрий Зотов ©   (2006-04-24 17:00) [6]

До кучи - и метод GetColCaps тоже не нужен, по чтению достаточно прямого доступа к полю.



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

Форум: "Компоненты";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.049 c
15-1164938781
PHPDeveloper
2006-12-01 05:06
2006.12.24
регистраторы программ


15-1165248006
oldman
2006-12-04 19:00
2006.12.24
Наши опять взяли Кубок Девиса...


2-1165251868
DelphiLexx
2006-12-04 20:04
2006.12.24
Pause и MASSIVINSERT


1-1162825345
dima123
2006-11-06 18:02
2006.12.24
Хинт


3-1160718078
ArCtic
2006-10-13 09:41
2006.12.24
Поиск в таблице paradox 7 (*руб*)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский