Может, у кого есть опыт вставки TCheckbox в TStringGrid в Lazarus? Помогите, плиз.
Как вставить checkbox в stringgrid
Модератор: Модераторы
- Dark Ichigo
- новенький
- Сообщения: 44
- Зарегистрирован: 12.03.2009 18:06:51
- Контактная информация:
Как вставить checkbox в stringgrid
Понимаю, что проблема обсуждалась неоднократно в дельфийском сообществе. Тем не менее, у меня пока не получается это сделать по данным мануалам.
Может, у кого есть опыт вставки TCheckbox в TStringGrid в Lazarus? Помогите, плиз.
Может, у кого есть опыт вставки TCheckbox в TStringGrid в Lazarus? Помогите, плиз.
Dark Ichigo
В дизайнере StringGrid.Columns, создать столько колонок, сколько Вам неоходимо и в той колонке, где нужен чекбокс, выбрать в свойстве колонки ButtonStyle:=cbsCheckboxColumn.
В дизайнере StringGrid.Columns, создать столько колонок, сколько Вам неоходимо и в той колонке, где нужен чекбокс, выбрать в свойстве колонки ButtonStyle:=cbsCheckboxColumn.
- Dark Ichigo
- новенький
- Сообщения: 44
- Зарегистрирован: 12.03.2009 18:06:51
- Контактная информация:
К сожалению, то, о чём вы говорите, отсутствует в TStringGrid. Вот цитата:
http://wiki.lazarus.freepascal.org/Grids_Reference_Page
* cbsCheckboxColumn
This editor style is at the moment only available in TDBGrid. It can be useful when field contents associated with the column are restricted to a pair of values, for example, yes-no, true-false, on-off
http://wiki.lazarus.freepascal.org/Grids_Reference_Page
- EmeraldMan
- постоялец
- Сообщения: 149
- Зарегистрирован: 16.10.2008 08:41:51
- Откуда: Белгород
- Контактная информация:
Может в версии 0.9.26 действительно такого нет, попробуйте установить 0.9.26.2.
Только что попробовал - все работает!
Только что попробовал - все работает!
- Dark Ichigo
- новенький
- Сообщения: 44
- Зарегистрирован: 12.03.2009 18:06:51
- Контактная информация:
Есть контакт!!! Работает, спасибо!
Добавлено спустя 39 минут 26 секунд:
вот если бы понять, как они работают
что-то не выходит у меня каменный цветок.
Добавлено спустя 39 минут 26 секунд:
вот если бы понять, как они работают
Обычно инструмент подбирают под замысел, а не замысел подгоняют под инструмент. 
- Dark Ichigo
- новенький
- Сообщения: 44
- Зарегистрирован: 12.03.2009 18:06:51
- Контактная информация:
Собственно, я замысел пока не подгоняю под инструмент.
Пока не могу найти мануала или примера по этим чекбоксам. Сейчас они у меня серого "неактивного" цвета. Если есть возможность, подскажите, пожалуйста.
Добавлено спустя 15 минут 43 секунды:
А. Всё, разобрался. Надо было всего лишь поставить goEditing true в опциях компонента.
Пока не могу найти мануала или примера по этим чекбоксам. Сейчас они у меня серого "неактивного" цвета. Если есть возможность, подскажите, пожалуйста.
Добавлено спустя 15 минут 43 секунды:
А. Всё, разобрался. Надо было всего лишь поставить goEditing true в опциях компонента.
А можно сделать то же самое, но только чтобы чекбоксы были в строчку? Мне надо, чтобы они были в каждом столбце, начиная со второго, и во второй строке.
В принципе, я обхожусь конструкцией
С обработкой события перерисовки ячейки сетки, но если можно сделать проще, будет лучше...
В принципе, я обхожусь конструкцией
Код: Выделить всё
StringGrid.Objects[col, row]:=TCheckBox.Create(StringGrid);
TCheckBox(StringGrid.Objects[col, row]).Parent:=StringGrid;С обработкой события перерисовки ячейки сетки, но если можно сделать проще, будет лучше...
подскажите пожалуйста
есть stringgrid с колонками содержащие checkbox-ы,
при возникновении события onDrawCell (делаю многострочный заголовок) все checkbox-ы изчезают
пытался создавать checkbox-ы вручную по примеру
но все они отображаються в верхнем левом углу stringgrid-а
пробовал на версиях:
lazarus-0.9.26-fpc-2.2.2
lazarus-0.9.26.2-fpc-2.2.2
Lazarus-0.9.27-20715-fpc-2.2.5-20090623
ОС windows
есть stringgrid с колонками содержащие checkbox-ы,
при возникновении события onDrawCell (делаю многострочный заголовок) все checkbox-ы изчезают
Код: Выделить всё
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
begin
if((aCol=0)and(aRow=0))then
begin
IsledGrid.Canvas.Font.Name:='TimesNewRoman';
IsledGrid.Canvas.Font.Size:=10;
IsledGrid.Canvas.TextOut(aRect.Left+30,aRect.Top+1,'многострочный');
IsledGrid.Canvas.TextOut(aRect.Left+14,aRect.Top+14,'заголовок');
end;
end;
пытался создавать checkbox-ы вручную по примеру
Climber писал(а):А можно сделать то же самое, но только чтобы чекбоксы были в строчку? Мне надо, чтобы они были в каждом столбце, начиная со второго, и во второй строке.
В принципе, я обхожусь конструкциейКод: Выделить всё
StringGrid.Objects[col, row]:=TCheckBox.Create(StringGrid);
TCheckBox(StringGrid.Objects[col, row]).Parent:=StringGrid;
С обработкой события перерисовки ячейки сетки, но если можно сделать проще, будет лучше...
но все они отображаються в верхнем левом углу stringgrid-а
пробовал на версиях:
lazarus-0.9.26-fpc-2.2.2
lazarus-0.9.26.2-fpc-2.2.2
Lazarus-0.9.27-20715-fpc-2.2.5-20090623
ОС windows
Andrew писал(а):пытался создавать checkbox-ы вручную по примеруClimber писал(а):А можно сделать то же самое, но только чтобы чекбоксы были в строчку? Мне надо, чтобы они были в каждом столбце, начиная со второго, и во второй строке.
В принципе, я обхожусь конструкциейКод: Выделить всё
StringGrid.Objects[col, row]:=TCheckBox.Create(StringGrid);
TCheckBox(StringGrid.Objects[col, row]).Parent:=StringGrid;
С обработкой события перерисовки ячейки сетки, но если можно сделать проще, будет лучше...
но все они отображаються в верхнем левом углу stringgrid-а
пробовал на версиях:
lazarus-0.9.26-fpc-2.2.2
lazarus-0.9.26.2-fpc-2.2.2
Lazarus-0.9.27-20715-fpc-2.2.5-20090623
ОС windows
Это только начало примера, объясняющее принцип. Принцип в том, чтобы создать столько чекбоксов, сколько есть ячеек, и каждому чекбоксу в Parent и Owner поставить сетку. Тогда они будут рисоваться только внутри сетки. Чтобы они рисовались там, где надо, надо им задать координаты. По умолчанию они все будут рисоваться в углу.
TCheckBox(StringGrid.Objects[col, row]).Left, TCheckBox(StringGrid.Objects[col, row]).Top и прочие параметры надо вычислять вручную.
Координаты ячейки сетки можно вычислить через StringGrid.CellRect:
Код: Выделить всё
function CellRect(ACol, ARow: Integer): TRect;По первой чати вопроса ничего сказать не могу.
Andrew
Так Вы же канву клетки перерисовываете, следовательно затираете и рисунок чекбокса. Чекбоксы надо вставлять после перерисовки.
Так Вы же канву клетки перерисовываете, следовательно затираете и рисунок чекбокса. Чекбоксы надо вставлять после перерисовки.
Vadim писал(а):Andrew
Так Вы же канву клетки перерисовываете, следовательно затираете и рисунок чекбокса. Чекбоксы надо вставлять после перерисовки.
в первом варианте я добавлял checkbox-ы в дезайнере StringGrid.Columns
Vadim писал(а):Dark Ichigo
В дизайнере StringGrid.Columns, создать столько колонок, сколько Вам неоходимо и в той колонке, где нужен чекбокс, выбрать в свойстве колонки ButtonStyle:=cbsCheckboxColumn.
Покажите пожалуйста кусок кода, как Вы их вставили. У меня в свойствах колонки вообще нет ButtonStyle..((
Lazarus 0.9.28.2
Может я не правильно понял что-то.
zmirk писал(а):Покажите пожалуйста кусок кода,
Гм... Это сделать крайне затруднительно, т.к. я использую для этой цели только свойство компонента в дизайнере и никакого кода.
Давайте попробуем разобраться на словах...
1. Я кладу на форму StringGrid.
2. В левом окошечке (свойства компонента StringGrid) я нахожу свойство Columns.
3. У этого свойства есть кнопочка с тремя точками. Я щёлкаю мышкой по этой кнопочке.
4. В появившемся дополнительном окне я нажимаю кнопку "+ Добавить" и в списке колонок у меня появляется новая колонка.
5. В списке колонок щёлкаю по этой колонке мышкой и в левом окне появляются свойства этой (новой) колонки.
6. В совйстве ButtonStyle выбираю стиль колонки - cbsCheckboxColumn.
Всё. Теперь в этой колонке будут сидеть чекбоксы. Дальнейшая настройка колонки зависит от Ваших задач.
