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.
© OSzone.net 2001-