Как вставить checkbox в stringgrid

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

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

Как вставить checkbox в stringgrid

Сообщение Dark Ichigo » 25.05.2009 18:07:31

Понимаю, что проблема обсуждалась неоднократно в дельфийском сообществе. Тем не менее, у меня пока не получается это сделать по данным мануалам.

Может, у кого есть опыт вставки TCheckbox в TStringGrid в Lazarus? Помогите, плиз. :roll:
Аватара пользователя
Dark Ichigo
новенький
 
Сообщения: 44
Зарегистрирован: 12.03.2009 19:06:51

Re: Как вставить checkbox в stringgrid

Сообщение Attid » 25.05.2009 18:31:06

а что по дельфиским мануалам не получается ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Как вставить checkbox в stringgrid

Сообщение Vadim » 25.05.2009 18:52:09

Dark Ichigo
В дизайнере StringGrid.Columns, создать столько колонок, сколько Вам неоходимо и в той колонке, где нужен чекбокс, выбрать в свойстве колонки ButtonStyle:=cbsCheckboxColumn.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Как вставить checkbox в stringgrid

Сообщение Dark Ichigo » 26.05.2009 13:30:49

К сожалению, то, о чём вы говорите, отсутствует в TStringGrid. Вот цитата:

* 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
Аватара пользователя
Dark Ichigo
новенький
 
Сообщения: 44
Зарегистрирован: 12.03.2009 19:06:51

Re: Как вставить checkbox в stringgrid

Сообщение EmeraldMan » 26.05.2009 13:45:01

Может в версии 0.9.26 действительно такого нет, попробуйте установить 0.9.26.2.
Только что попробовал - все работает!
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Как вставить checkbox в stringgrid

Сообщение Dark Ichigo » 26.05.2009 17:08:35

Есть контакт!!! Работает, спасибо!

Добавлено спустя 39 минут 26 секунд:
вот если бы понять, как они работают :( что-то не выходит у меня каменный цветок.
Аватара пользователя
Dark Ichigo
новенький
 
Сообщения: 44
Зарегистрирован: 12.03.2009 19:06:51

Re: Как вставить checkbox в stringgrid

Сообщение Vadim » 26.05.2009 18:24:18

Обычно инструмент подбирают под замысел, а не замысел подгоняют под инструмент. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Как вставить checkbox в stringgrid

Сообщение Dark Ichigo » 27.05.2009 10:24:25

Собственно, я замысел пока не подгоняю под инструмент.

Пока не могу найти мануала или примера по этим чекбоксам. Сейчас они у меня серого "неактивного" цвета. Если есть возможность, подскажите, пожалуйста.

Добавлено спустя 15 минут 43 секунды:
А. Всё, разобрался. Надо было всего лишь поставить goEditing true в опциях компонента.
Аватара пользователя
Dark Ichigo
новенький
 
Сообщения: 44
Зарегистрирован: 12.03.2009 19:06:51

Re: Как вставить checkbox в stringgrid

Сообщение Climber » 02.06.2009 08:49:52

А можно сделать то же самое, но только чтобы чекбоксы были в строчку? Мне надо, чтобы они были в каждом столбце, начиная со второго, и во второй строке.
В принципе, я обхожусь конструкцией
Код: Выделить всё
StringGrid.Objects[col, row]:=TCheckBox.Create(StringGrid);
TCheckBox(StringGrid.Objects[col, row]).Parent:=StringGrid;

С обработкой события перерисовки ячейки сетки, но если можно сделать проще, будет лучше...
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Как вставить checkbox в stringgrid

Сообщение Andrew » 24.06.2009 07:14:40

подскажите пожалуйста
есть 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
новенький
 
Сообщения: 14
Зарегистрирован: 15.01.2008 23:21:26

Re: Как вставить checkbox в stringgrid

Сообщение Climber » 24.06.2009 09:37:35

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;

По первой чати вопроса ничего сказать не могу.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Как вставить checkbox в stringgrid

Сообщение Vadim » 24.06.2009 10:09:31

Andrew
Так Вы же канву клетки перерисовываете, следовательно затираете и рисунок чекбокса. Чекбоксы надо вставлять после перерисовки.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Как вставить checkbox в stringgrid

Сообщение Andrew » 24.06.2009 10:18:36

Vadim писал(а):Andrew
Так Вы же канву клетки перерисовываете, следовательно затираете и рисунок чекбокса. Чекбоксы надо вставлять после перерисовки.

в первом варианте я добавлял checkbox-ы в дезайнере StringGrid.Columns
Andrew
новенький
 
Сообщения: 14
Зарегистрирован: 15.01.2008 23:21:26

Re: Как вставить checkbox в stringgrid

Сообщение zmirk » 20.03.2010 17:25:56

Vadim писал(а):Dark Ichigo
В дизайнере StringGrid.Columns, создать столько колонок, сколько Вам неоходимо и в той колонке, где нужен чекбокс, выбрать в свойстве колонки ButtonStyle:=cbsCheckboxColumn.


Покажите пожалуйста кусок кода, как Вы их вставили. У меня в свойствах колонки вообще нет ButtonStyle..((
Lazarus 0.9.28.2
Может я не правильно понял что-то.
zmirk
незнакомец
 
Сообщения: 7
Зарегистрирован: 17.03.2010 13:18:21

Re: Как вставить checkbox в stringgrid

Сообщение Vadim » 20.03.2010 18:56:12

zmirk писал(а):Покажите пожалуйста кусок кода,

Гм... Это сделать крайне затруднительно, т.к. я использую для этой цели только свойство компонента в дизайнере и никакого кода.
Давайте попробуем разобраться на словах... ;)
1. Я кладу на форму StringGrid.
2. В левом окошечке (свойства компонента StringGrid) я нахожу свойство Columns.
3. У этого свойства есть кнопочка с тремя точками. Я щёлкаю мышкой по этой кнопочке.
4. В появившемся дополнительном окне я нажимаю кнопку "+ Добавить" и в списке колонок у меня появляется новая колонка.
5. В списке колонок щёлкаю по этой колонке мышкой и в левом окне появляются свойства этой (новой) колонки.
6. В совйстве ButtonStyle выбираю стиль колонки - cbsCheckboxColumn.
Всё. Теперь в этой колонке будут сидеть чекбоксы. Дальнейшая настройка колонки зависит от Ваших задач.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 223

Рейтинг@Mail.ru
cron