Наследник tstringgrid - глюк?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
AlexP
новенький
Сообщения: 20
Зарегистрирован: 11.05.2007 19:04:01

Наследник tstringgrid - глюк?

Сообщение AlexP »

Обнаружил такой глюк, или я что-то делаю не так?

Мне нужен компонент, наследник tstringgrid, чтобы при создании в нем были две колонки с заданными свойствами.

Для этого создаю пакет, как обычно, в нем компонент tmystringgrid, пишу в его конструкторе

Код: Выделить всё

constructor tmystringgrid.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
 RowCount:=1;
 FixedCols:=0;
 Columns.Add;
 Columns.Add;
 Options:=[goEditing];
 Columns[0].ButtonStyle:=cbsCheckboxColumn;
 Columns[0].Width:=21;
 Columns[1].Width:=132;
 Columns[0].Title.Caption:=' ';
 Columns[1].Title.Caption:='заголовок';
end; 


Устанавливаю пакет, создаю новый проект, кладу на пустую форму свой новый компонент, всё ОК - на компоненте есть две колонки. Компилирую программу, она компилируется, но при запуске программы возникает сообщение -

error reading tmystringgrid1.colcount: Use Column property to add/remove columns.

и далее программа вылетает.

Я закомментировал строки в конструкторе начиная с Columns.Add; тогда программа и компилируется и запускается, причем компонент в программе имеет нужный мне вид и две колонки, и это несмотря на то, что строки их добавления в конструкторе закомментированы!

Еще что интересно - я закрываю ИДЕ и снова запускаю Лазарус, и мне при открытии этого проекта выводится сообщение -

Read error
Stream=TForm1 :Root=:TForm1
Component Class: tmystringgrid
error reading tmystringgrid1.colcount: Use Column property to add/remove columns.

Я выбираю Continue Loading, и, несмотря на это предупреждение, проект нормально открывается, на форме лежит мой компонент со своими двумя колонками, программа компилируется, но, как и раньше, откомпилированная программа запускается только тогда, когда я закомментировал строки создания столбцов в конструкторе.

Вышел из положения следующим образом

1) закомментировал строки
2) пересобрал Лазарус
3) раскомментировал строки

Теперь, если положить компонент на форму, то он выглядит как обычный stringgrid. Но после компиляции и запуска программы он выглядит так, как мне надо.

Лазарус 0.9.28.2 бета, winXP

В последнем снапшоте Lazarus-0.9.28.3-23661-fpc-2.4.0-20100208-win32.exe то же самое.
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

Для решения указанной проблемы ("чтобы при создании в нем были две колонки с заданными свойствами") наследника делать не нужно, можно сделать проще. На форму кидаем StringGrid, делаем двойной клик, открывается редактор, в редакторе заполняем сетку как хочется, делаем ширину столбцов и т. д. И не надо городить огород. А еще есть свойство Columns, это вообще супер вещь, позволяет настраивать форматирование для всего столбца.
AlexP
новенький
Сообщения: 20
Зарегистрирован: 11.05.2007 19:04:01

Сообщение AlexP »

Climber

Спасибо, это все понятно, можно конечно каждый раз настраивать внешний вид в design-time, но нужно именно в виде компонента, т.к. он будет часто использоваться и плюс там еще у него будут разные другие функции.
Ответить