Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2009, 16:02   #1
Lisi4ka
Пользователь
 
Регистрация: 28.09.2008
Сообщений: 31
По умолчанию как узнать положение CheckBox в StringGrid

Здравствуйте все!
по статье из http://forum.sources.ru "запихнула" CheckBox-ы в Гриду, Как при выборе CheckBox в Гриде узнать его положение в данной сетке? пробовала так:
Код:
 procedure TForm1.StringGrid1Click(Sender: TObject);
begin
 //Showmessage(IntToStr(StringGrid1.Col));
 //Showmessage(IntToStr(StringGrid1.Row));
 if (StringGrid1.Objects[StringGrid1.Col,StringGrid1.Row].ClassType =TCheckBox)
  then

   Showmessage('SheckBox');
-это частично работает, если при добавлении Чекбокса делать его ширину поменьше и ухитриться попасть меду границей Чекбокса и оставшимся пространством ячейки
Привожу полный код:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    StringGrid1: TStringGrid;
    CheckBox1: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure CheckBox1Click(Sender: TObject);
    Procedure set_checkbox_alignment;
    Procedure clean_previus_buffer;
    procedure AddCheckBoxes;
    procedure StringGrid1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
Procedure AutoVidth(zagolovok:string;Grid:TstringGrid;Col:Integer);
var i:Integer;
begin
 i:=Length(zagolovok);
 Grid.ColWidths[Col] := i+1;
end;
procedure AutoSizeGridColumn(Grid: TStringGrid; column: integer);
var 
  i: integer; 
  temp: integer; 
  max: integer; 
begin 
  max := 0; 
  for i := 0 to (Grid.RowCount - 1) do 
    begin 
      temp := Grid.Canvas.TextWidth(grid.cells[column, i]);
      if temp > max then max := temp; 
    end; 
  Grid.ColWidths[column] := Max + Grid.GridLineWidth + 3; 
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.AddCheckBoxes;
var
 i: Integer;
 NewCheckBox: TCheckBox;
 NewCheckBox1: 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 := '';
  NewCheckBox.Color := clWindow;
  NewCheckBox.Tag := i;
  NewCheckBox.OnClick := CheckBox1.OnClick; //Ñâÿçûâàåì ïðåäûäóùåå ñîáûòèå OnClick
  NewCheckBox.Parent := Panel1;
  NewCheckBox1:=NewCheckBox;;                                          // ñ ñóùåñòâóþùèì TCheckBox
  StringGrid1.Objects[4,i] := NewCheckBox;
  //StringGrid1.Objects[5,i] := NewCheckBox1;
  StringGrid1.RowCount := i;
 end;
set_checkbox_alignment; // ðàñïîëîæåíèå ÷åêáîêñîâ â ÿ÷åéêàõ òàáëèöû...
end;

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

// Çàïîëíÿåì çàãîëîâîê StringGrid 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
 StringGrid1.Cells[0,0] := 'Ñîîòâåòñòâèÿ';
 AutoSizeGridColumn(StringGrid1,0);
 StringGrid1.Cells[1,0] := '1';
 StringGrid1.Cells[2,0] := '2';
 StringGrid1.Cells[0,1] := '1';
 StringGrid1.Cells[0,2] := '2';
 StringGrid1.Cells[3,0] := 'Òåêñò ñîîòâåòñâèÿ';
 StringGrid1.Cells[4,0] := 'Òåê';
 AutoSizeGridColumn(StringGrid1,3);
 AutoSizeGridColumn(StringGrid1,4);
 AddCheckBoxes; // äîáàâëÿåì ÷åêáîêñû...
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;

end.
Спасибо
Lisi4ka вне форума Ответить с цитированием
Старый 04.05.2009, 20:58   #2
Lisi4ka
Пользователь
 
Регистрация: 28.09.2008
Сообщений: 31
По умолчанию


Код:
for i:=0 to 4 do
  begin
   for j:=0 to 4 do
    begin
     if(StringGrid1.Objects[i,j]<>nil)
      then
       begin
        Showmessage('Object stroka '+IntToStr(j+1)+ ' stolb '+IntToStr(i+1));
         if (StringGrid1.Objects[i,j].ClassName='TCheckBox' ) then
          begin
            NewCheckBox := (StringGrid1.Objects[i,j] as TCheckBox);
            if NewCheckBox.Checked=true then
            Showmessage ('Checked')
          end;
       end;
    end;
  end;
Lisi4ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CheckBox и ComboBox в StringGrid ZeitGeist7 Общие вопросы Delphi 16 22.04.2012 20:22
Как правильно испльзовать CheckBox Pirotexnik Общие вопросы Delphi 9 27.03.2009 16:01
как работать с новыми CheckBox в ListView в режиме vsReport cybopob90 Компоненты Delphi 2 24.03.2009 13:02
Как использовать CheckBox при работе с БД Spy БД в Delphi 1 18.12.2008 14:43
Как узнать какие ячейки у StringGrid-а видимы? Sergey2 Компоненты Delphi 2 04.06.2008 13:57