Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   CheckBox в Ячейке DBGrid (http://forum.oszone.net/showthread.php?t=53243)

Loki3D 29-08-2005 20:45 351804

CheckBox в Ячейке DBGrid
 
Подскажите по подробнее как сделать Чтоб в Ячейке Grida Рисовались CHeckBoxы.
Задача такая..
Имеется изначально Пустая Таблица с Полями типа Boolean
По нажатии Кнопки Должна Добавиться Запись, забивающая все поля Значениями False.Мне надо чобы не было Надписи False а Был CheckBox (Checked:= False). Если на CheckBoxe поставить Галку, то от Этого должно изменяться Значение в Ячейке с False на True и на оборот по сути, а Визуально False\True belen отображаться CheckBox'ами со свойсвтом Chacked := Fasle\True соответсвенно.

Подскажите подробно, а то я Чайник в этом деле.. и если нормально объяснить, то потом лишний раз не спрошу.

Заранее Спасибо

XCodeR 30-08-2005 14:39 351983

чтобы не искать линк, вырезка из ФАКа:
Цитата:

Как добавить TCheckBox в TStringGrid?
Пример демонстрирует добавление любого количества чекбоксов в StringGrid.
В этом примере необходимо добавить TPanel, а в саму панель включить TstringGrid.
Так же необходимо добавить невидимый TcheckBox на форму. Затем добавьте
5 колонок и 4 строки в объект StringGrid.

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
ShowMessage('There it is!!');
end;

// Заполняем заголовок StringGrid
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0] := 'A Simple';
StringGrid1.Cells[1,0] := 'Way';
StringGrid1.Cells[2,0] := 'To';
StringGrid1.Cells[3,0] := 'Do It';
StringGrid1.Cells[4,0] := 'Check !!';

AddCheckBoxes; // добавляем чекбоксы...
end;

procedure TForm1.AddCheckBoxes;
var
i: Integer;
NewCheckBox: TCheckBox;
begin
clean_previus_buffer; // очищаем неиспользуемые чекбоксы...

for i := 1 to 4 do
begin
StringGrid1.Cells[0,i] := 'a';
StringGrid1.Cells[1,i] := 'b';
StringGrid1.Cells[2,i] := 'c';
StringGrid1.Cells[3,i] := 'd';

NewCheckBox := TCheckBox.Create(Application);
NewCheckBox.Width := 0;
NewCheckBox.Visible := false;
NewCheckBox.Caption := 'OK';
NewCheckBox.Color := clWindow;
NewCheckBox.Tag := i;
NewCheckBox.OnClick := CheckBox1.OnClick; //Связываем предыдущее событие OnClick
// с существующим TCheckBox
NewCheckBox.Parent := Panel1;

StringGrid1.Objects[4,i] := NewCheckBox;
StringGrid1.RowCount := i;
end;
set_checkbox_alignment; // расположение чекбоксов в ячейках таблицы...
end;

Procedure TForm1.clean_previus_buffer;
var
NewCheckBox: TCheckBox;
i: Integer;
begin
for i := 1 to StringGrid1.RowCount do
begin
NewCheckBox := (StringGrid1.Objects[4,i] as TCheckBox);
if NewCheckBox <> nil then
begin
NewCheckBox.Visible := false;
StringGrid1.Objects[4,i] := nil;
end;
end;
end;

Procedure TForm1.set_checkbox_alignment;
var
NewCheckBox: TCheckBox;
Rect: TRect;
i: Integer;
begin
for i := 1 to StringGrid1.RowCount do
begin
NewCheckBox := (StringGrid1.Objects[4,i] as TCheckBox);
if NewCheckBox <> nil then
begin
Rect := StringGrid1.CellRect(4,i); // получаем размер ячейки для чекбокса
NewCheckBox.Left := StringGrid1.Left + Rect.Left+2;
NewCheckBox.Top := StringGrid1.Top + Rect.Top+2;
NewCheckBox.Width := Rect.Right - Rect.Left;
NewCheckBox.Height := Rect.Bottom - Rect.Top;
NewCheckBox.Visible := True;
end;
end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if not (gdFixed in State) then
set_checkbox_alignment;
end;

Loki3D 31-08-2005 16:54 352291

опробовал предложенный пример, только вместо StringGrid использовал DBGrid/ Не получилось Скомпелировать.. не зная чем можно заменить StringGrid1.Objects у DBGrid.. ща пробую другие варианты..

Loki3D 31-08-2005 22:54 352369

Всем спасибо за помощь..
Во всех моих запросах мне помог Компонент DBGridEH


Время: 12:32.

Время: 12:32.
© OSzone.net 2001-