스트링그리드에 버튼을 집어 넣는거 까지는 돼는데....
버튼이 위치한 (0,row)에 값을 뽑아내기가 힘드네요!
다음 소스를 봐주세요!...
첫번째 버튼을 클릭하면 '강아지'
두버째 버튼을 클리하면 '고양이'
세번째 버튼을 클릭하면 '병아리'
라는 메세지가 뜨게 할려고 하는데요.....
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, Buttons, ComCtrls;
type
TForm1 = class(TForm)
SpeedButton1: TSpeedButton;
StringGrid1: TStringGrid;
//StatusBar1: TStatusBar;
procedure SpeedButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CheckBoxMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.CheckBoxMouseUp(Sender: TObject; Button:
TMouseButton; Shift: TShiftState; X, Y: Integer);
var
i:string;
begin
i:=stringgrid1.Cells[0,stringgrid1.row];
showmessage(i);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var Y : integer;
i:string;
begin
for y := 0 to stringgrid1.rowcount - 1 do
begin
StringGrid1.Objects[1, y] := Tbutton.Create(StringGrid1);
with Tbutton(StringGrid1.Objects[1, y]) do
begin
OnMouseUp := CheckBoxMouseUp;
Parent := StringGrid1;
BoundsRect := StringGrid1.CellRect(1, y);
Width := StringGrid1.ColWidths[1];
Height := StringGrid1.RowHeights[1];
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
stringgrid1.cells[0,1]:='강아지';
stringgrid1.cells[0,2]:='고양이';
stringgrid1.cells[0,3]:='병아리';
end;
end.
자꾸 어떤걸 클릭해도 강아지만 나와여... 흑흑흑
> i:=stringgrid1.Cells[0,stringgrid1.row];
> showmessage(i);
이 문장에 오해가 있으시네요
stringgrid1.row 이 당연히 클릭하는 그리드의 행을 반환할 거라 생각 하신거죠
그러나 그렇지 않습니다.
그냥 1만 들어 있을 뿐입니다. 그러니 계속 강아지만 나오겠죠 ^^
이때에는 뭐를 써야 하냐면요 TComponent에서 상속받은 Tag를 이용하세요
> StringGrid1.Objects[1, y] := Tbutton.Create(StringGrid1);
> with Tbutton(StringGrid1.Objects[1, y]) do
> begin
>
> OnMouseUp := CheckBoxMouseUp;
> Parent := StringGrid1;
> BoundsRect := StringGrid1.CellRect(1, y);
> Width := StringGrid1.ColWidths[1];
> Height := StringGrid1.RowHeights[1];
문장내에
Tag := y 문장을 삽입시켜준후에
procedure TForm1.CheckBoxMouseUp(Sender: TObject; Button:
TMouseButton; Shift: TShiftState; X, Y: Integer);
var
i:string;
Button : TButton;
begin
Button := Sender as TButton;
if ( Button not nill ) then
begin
i:=stringgrid1.Cells[0,Button.Tag];
showmessage(i);
end;
end;
하면 될 겁니다. 지금 허접하게 작성한거라 컴파일 에러가 날 수도 ^^
델초봅니다. wrote:
> 스트링그리드에 버튼을 집어 넣는거 까지는 돼는데....
>
> 버튼이 위치한 (0,row)에 값을 뽑아내기가 힘드네요!
>
> 다음 소스를 봐주세요!...
>
> 첫번째 버튼을 클릭하면 '강아지'
> 두버째 버튼을 클리하면 '고양이'
> 세번째 버튼을 클릭하면 '병아리'
> 라는 메세지가 뜨게 할려고 하는데요.....
>
> unit Unit1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> StdCtrls, Grids, Buttons, ComCtrls;
>
> type
> TForm1 = class(TForm)
> SpeedButton1: TSpeedButton;
> StringGrid1: TStringGrid;
> //StatusBar1: TStatusBar;
> procedure SpeedButton1Click(Sender: TObject);
>
> procedure FormCreate(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> procedure CheckBoxMouseUp(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: integer);
>
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
>
> procedure TForm1.CheckBoxMouseUp(Sender: TObject; Button:
> TMouseButton; Shift: TShiftState; X, Y: Integer);
> var
> i:string;
> begin
>
>
> i:=stringgrid1.Cells[0,stringgrid1.row];
> showmessage(i);
> end;
>
>
>
>
>
> procedure TForm1.SpeedButton1Click(Sender: TObject);
> var Y : integer;
> i:string;
> begin
> for y := 0 to stringgrid1.rowcount - 1 do
> begin
>
> StringGrid1.Objects[1, y] := Tbutton.Create(StringGrid1);
> with Tbutton(StringGrid1.Objects[1, y]) do
> begin
>
> OnMouseUp := CheckBoxMouseUp;
> Parent := StringGrid1;
> BoundsRect := StringGrid1.CellRect(1, y);
> Width := StringGrid1.ColWidths[1];
> Height := StringGrid1.RowHeights[1];
> end;
> end;
> end;
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> stringgrid1.cells[0,1]:='강아지';
> stringgrid1.cells[0,2]:='고양이';
> stringgrid1.cells[0,3]:='병아리';
> end;
>
> end.
>
> 자꾸 어떤걸 클릭해도 강아지만 나와여... 흑흑흑