Q&A

  • 스트링그리드에 체크박스를 넣고 싶어요.
스트링그리드에 체크박스를 넣고 싶어요.

꼭부탁드립니다. 빨리 갈쳐주세요

3  COMMENTS
  • Profile
    윤유섭 2000.08.22 18:42
    에고 이벤트 몇개가 빠졌네요



    새로운 Form위에 Button 3개와 StringGrid 1개를 올려놓으세요



    1번째 버튼(SppedButton1Click)은 동적으로 CheckBox와 RadioButton을

    생성시키는 것입니다.



    그러면 StringGrid에 CheckBox와 RadioButton이 보일껍니다.



    2번째 버튼(...2Click)은 CheckBox의 Checked상태를 검사해주는 이벤트입니다.



    3번째 버튼(...3Click)은 동적으로 생성시킨 CheckBox와 RadioButton을 메모리에서

    해제시키는 이벤트입니다.





    Public부분에 있는 Event 4개를 직접 코딩해주시면 됩니다.

    이부분은 CheckBox / RadioButton의 이벤트입니다.

    동적으로 생성되니까 이벤트는 직접만들어서 연결해줘야합니다.





    이 예제는 StringGird에 Objects속성을 이용하는 것입니다.





    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, Grids, Buttons, ComCtrls;



    type

    TForm1 = class(TForm)

    SpeedButton1: TSpeedButton;

    StringGrid1: TStringGrid;

    SpeedButton2: TSpeedButton;

    SpeedButton3: TSpeedButton;

    StatusBar1: TStatusBar;

    procedure SpeedButton1Click(Sender: TObject);

    procedure SpeedButton2Click(Sender: TObject);

    procedure SpeedButton3Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    procedure CheckBoxMouseUp(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: integer);

    procedure CheckBoxKeyUp(Sender: TObject; var Key: Word;

    Shift: TShiftState);

    procedure RadioButtonMouseUp(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: integer);

    procedure RadioButtonKeyUp(Sender: TObject; var Key: Word;

    Shift: TShiftState);

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.CheckBoxMouseUp(Sender: TObject; Button:

    TMouseButton; Shift: TShiftState; X, Y: Integer);

    begin

    with TCheckBox(Sender) do

    Checked := not Checked;

    end;



    procedure TForm1.CheckBoxKeyUp(Sender: TObject; var Key: Word;

    Shift: TShiftState);

    begin

    if Key = VK_SPACE then

    with TCheckBox(Sender) do

    Checked := not Checked;

    end;



    procedure TForm1.RadioButtonMouseUp(Sender: TObject; Button:

    TMouseButton; Shift: TShiftState; X, Y: Integer);

    begin

    with TRadioButton(Sender) do

    Checked := not Checked;

    end;



    procedure TForm1.RadioButtonKeyUp(Sender: TObject; var Key: Word;

    Shift: TShiftState);

    begin

    if Key = VK_SPACE then

    with TRadioButton(Sender) do

    Checked := not Checked;

    end;



    // CheckBox, RadioButton 동적으로 생성시키는 부분

    procedure TForm1.SpeedButton1Click(Sender: TObject);

    var Y : integer;

    begin

    for y := 1 to stringgrid1.rowcount - 1 do

    begin

    --> CheckBox생성

    StringGrid1.Objects[1, y] := TCheckBox.Create(StringGrid1);

    with TCheckBox(StringGrid1.Objects[1, y]) do

    begin

    OnKeyUp := CheckBoxKeyUp; --> CheckBox이벤트 연결부분

    OnMouseUp := CheckBoxMouseUp;

    Parent := StringGrid1;

    BoundsRect := StringGrid1.CellRect(1, y);

    Width := StringGrid1.ColWidths[1];

    Height := StringGrid1.RowHeights[1];

    Caption := '이것은 체크박스';

    Checked := false;

    end;



    StringGrid1.Objects[2, y] := TRadioButton.Create(StringGrid1);

    with TCheckBox(StringGrid1.Objects[2, y]) do

    begin

    OnKeyUp := RadioButtonKeyUp;

    OnMouseUp := RadioButtonMouseUp;

    Parent := StringGrid1;

    BoundsRect := StringGrid1.CellRect(2, y);

    Width := StringGrid1.ColWidths[2];

    Height := StringGrid1.RowHeights[2];

    Caption := '이것은 체크박스';

    Checked := false;

    end;

    end;

    end;



    // CheckBox가 Check되어있는지 검사.

    procedure TForm1.SpeedButton2Click(Sender: TObject);

    var y : integer;

    begin

    for y := 1 to stringgrid1.rowcount - 1 do

    begin

    with TCheckBox(StringGrid1.Objects[1, y]) do

    begin

    if checked then stringgrid1.cells[0, y] := 'Checked' else

    stringgrid1.cells[0, y] := 'UnChecked';

    end;

    end;

    end;



    // 동적생성된 CheckBox, RadioButton 해제

    procedure TForm1.SpeedButton3Click(Sender: TObject);

    var y : integer;

    begin

    for Y := 1 to stringgrid1.rowcount - 1 do

    begin

    TCheckBox(StringGrid1.Objects[1, y]).Free;

    TRadioButton(StringGrid1.Objects[2, y]).Free;

    end;

    end;



    end.





  • Profile
    윤유섭 2000.08.21 20:15
    어딘가서 본 자료인데 도움이 될련지...



    // StringGrid에 CheckBox와 RadioButton을 만들어 주는 부분.

    procedure TForm1.SpeedButton1Click(Sender: TObject);

    var Y : integer;

    begin

    for y := 1 to stringgrid1.rowcount - 1 do

    begin

    StringGrid1.Objects[1, y] := TCheckBox.Create(StringGrid1);

    with TCheckBox(StringGrid1.Objects[1, y]) do

    begin

    OnKeyUp := CheckBoxKeyUp;

    OnMouseUp := CheckBoxMouseUp;

    Parent := StringGrid1;

    BoundsRect := StringGrid1.CellRect(1, y);

    Width := StringGrid1.ColWidths[1];

    Height := StringGrid1.RowHeights[1];

    Caption := '이것은 체크박스';

    Checked := false;

    end;



    StringGrid1.Objects[2, y] := TRadioButton.Create(StringGrid1);

    with TCheckBox(StringGrid1.Objects[2, y]) do

    begin

    OnKeyUp := RadioButtonKeyUp;

    OnMouseUp := RadioButtonMouseUp;

    Parent := StringGrid1;

    BoundsRect := StringGrid1.CellRect(2, y);

    Width := StringGrid1.ColWidths[2];

    Height := StringGrid1.RowHeights[2];

    Caption := '이것은 체크박스';

    Checked := false;

    end;

    end;

    end;

    // Check가 되었는지 찾아주는 부분

    procedure TForm1.SpeedButton2Click(Sender: TObject);

    var y : integer;

    begin

    for y := 1 to stringgrid1.rowcount - 1 do

    begin

    with TCheckBox(StringGrid1.Objects[1, y]) do

    begin

    if checked then stringgrid1.cells[0, y] := 'Checked' else

    stringgrid1.cells[0, y] := 'UnChecked';

    end;

    end;

    end;



    // 동적으로 생성된 부분을 없애주는 부분

    procedure TForm1.SpeedButton3Click(Sender: TObject);

    var y : integer;

    begin

    for Y := 1 to stringgrid1.rowcount - 1 do

    begin

    TCheckBox(StringGrid1.Objects[1, y]).Free;

    TRadioButton(StringGrid1.Objects[2, y]).Free;

    end;

    end;



    위의 예제를 잘 이용해보세요











    윤준호 wrote:

    > 스트링그리드에 체크박스를 넣고 싶어요.

    > 꼭부탁드립니다. 빨리 갈쳐주세요

  • Profile
    윤준호 2000.08.22 06:16
    안되는데요.

    다시 한번 갈쳐주셨으면 감사하겠구요,

    그 원리도 설명해 주세여