Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

вставить в string/drawgrid checkbox

2.0K
25 июля 2007 года
nevile
138 / / 05.01.2007
ну собственно сабж. Желательно описать как в stringgrid если это возможно.
15K
26 июля 2007 года
osx
78 / / 20.07.2007
Можно попробывать так... Я так картинки засовывал в мемо))))))
 
Код:
procedure AddChBx;
var
 ChBx : TCheckbox;
begin
 ChBx:= TCheckBox.Create;
 ChBx.Parent:= {здесь твой стринггирд};
 ChBx.Left:= n;
 ChBx.Top:= n;
end;

В моем случае картинка создавалась во время работы программы (ран-тайм мод) поверх мемо...
15K
26 июля 2007 года
osx
78 / / 20.07.2007
Касяк =((
вот рабочий пример:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, StdCtrls;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
 cell_x = 2;
 cell_y = 2;

var
  Form1: TForm1;
  CheckBox1: TCheckBox;

implementation

{$R *.DFM}

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
 r:trect;
begin
 if(cell_x>=StringGrid1.LeftCol) and
   (cell_x<=StringGrid1.LeftCol+StringGrid1.VisibleColCount) and
   (cell_y>=StringGrid1.TopRow) and
   (cell_x<=StringGrid1.TopRow+StringGrid1.VisibleRowCount) then
     CheckBox1.Visible:=true
 else
     CheckBox1.Visible:=false;

 if (acol=cell_x) and (arow=cell_y) then
 begin
   r:=stringgrid1.CellRect(cell_x,cell_y);
   r.Left:=r.left+stringgrid1.left+2;
   r.right:=r.right+stringgrid1.left+2;
   r.top:=r.top+stringgrid1.top+2;
   r.bottom:=r.bottom+stringgrid1.top+2;
   CheckBox1.BoundsRect:=r;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 CheckBox1:=TCheckBox.Create(form1);
 CheckBox1.parent:=form1;
 CheckBox1.Caption:='proba';
end;

end.
257
26 июля 2007 года
kosfiz
1.6K / / 18.09.2005
nevile, как видно из предыдущего поста с кодом, тебе хоть иногда стоит пользоваться ссылками и рекомендациями данного раздела форума, а точнее http://forum.codenet.ru/showpost.php?p=187898&postcount=10
15K
27 июля 2007 года
osx
78 / / 20.07.2007
Согласен, ибо код из ДВ, за свой не выдаю, помочь хотел...
2.0K
31 июля 2007 года
nevile
138 / / 05.01.2007
помогите. Воспользовался кодом из дв:

Код:
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;



так вот проблема заключается в том что я не знаю как обратиться к нужному мне чекбоксу. кто-нибудь может подсказать?
257
05 августа 2007 года
kosfiz
1.6K / / 18.09.2005
в смысле к нужному? по каким признакам ты хочешь к нему обратиться?
2.0K
09 августа 2007 года
nevile
138 / / 05.01.2007
например по номеру
2.0K
12 августа 2007 года
nevile
138 / / 05.01.2007
ну так что никто не знает? а то я что-то придумать не могу
257
12 августа 2007 года
kosfiz
1.6K / / 18.09.2005
попробуй при создании помещать чекбоксы в массив что ли, а потом будешь к ним обращаться.

P.S. просто я тоже что-то придумать ничего не могу.
2.0K
12 августа 2007 года
nevile
138 / / 05.01.2007
спасибо попробую твою идею тут у меня родилась мысль одна опробую в ближайшее время...
45K
05 декабря 2008 года
otta
1 / / 05.12.2008
В едином для всех CheckBox'ов обработчике
конкретный объект можно определить по Sender

В строку и столбец, в котором находится объект задавать в dgColumnsDrawCell
с помощью глобальных переменных CurRow,CurCol

 
Код:
procedure TfmSettingColumns.CheckBox1Click(Sender: TObject);
var
  NewCheckBox: TCheckBox;
begin
  NewCheckBox:=Sender As TCheckBox;
  if NewCheckBox.Checked then arValues[CurCol,CurRow]:='1'
  else arValues[CurCol,CurRow]:='0';
end;
14
09 декабря 2008 года
Phodopus
3.3K / / 19.06.2008
Внимательнее смотрим на дату последнего сообщения при постинге
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог