请问怎样实现“在StringGrid中插入ComboBox下拉选框”?

解决方案 »

  1.   

    请问怎样实现“在StringGrid中插入ComboBox下拉选框”?
    请问怎样动态生成?
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages,stdctrls, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Grids;type
      TForm1 = class(TForm)
        StringGrid1: TStringGrid;
        procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
          var CanSelect: Boolean);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public  end;var
      Form1: TForm1;
       var testcombo:Tcombobox;
    implementation{$R *.DFM}procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
      ARow: Integer; var CanSelect: Boolean);  begin
    if canselect then
    begin testcombo.parent:=self;
     testcombo.left:=stringgrid1.left+acol*stringgrid1.defaultcolwidth+4;
      testcombo.top:=stringgrid1.top+arow*stringgrid1.defaultrowheight+3;
      testcombo.width:=stringgrid1.DefaultColWidth;
     testcombo.Height:=stringgrid1.DefaultRowHeight;
      testcombo.font:=stringgrid1.font;
      testcombo.items.clear;
    testcombo.items.add('1111');
    testcombo.items.add('2222');
    end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
     testcombo:=Tcombobox.create(self);
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    testcombo.Free;
    end;end.
      

  3.   


    请问怎样实现“在StringGrid中插入ComboBox下拉选框”?
    请问怎样动态生成?
    问题还没解决啊。
      

  4.   

    请问怎样实现“在StringGrid中插入ComboBox下拉选框”?
    请问怎样动态生成?
      

  5.   

    我试过了,以下绝对可以
    你编译执行下,点击第一列,combobox出来unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids;type
      TForm1 = class(TForm)
        StringGrid1: TStringGrid;
        ComboBox1: TComboBox;
        procedure ComboBox1Exit(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
          var CanSelect: Boolean);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ComboBox1Exit(Sender: TObject);
    begin
      with sender as TCombobox do begin
        hide;
        if itemindex >= 0 then
          with stringgrid1 do
            cells[col, row] := items[itemindex];
      end;end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      combobox1.visible := false;
    end;procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
      ARow: Integer; var CanSelect: Boolean);
    var
      R: TRect;
      org: TPoint;
    begin
      with Sender as TStringgrid do
        if (ACol = 1) and (ARow >= FixedRows) then begin
    // entered the column associated to the combobox
    // get grid out of selection mode
          perform(WM_CANCELMODE, 0, 0);
    // position the control on top of the cell
          R := CellRect(Acol, Arow);
          org := Self.ScreenToClient(ClientToScreen(R.topleft));
          with combobox1 do begin
            setbounds(org.X, org.Y, r.right - r.left, height);
            itemindex := Items.IndexOf(Cells[acol, arow]);
            Show;
            BringTofront;
    // focus the combobox and drop down the list
            SetFocus;
            DroppedDown := true;
          end;
        end;
    end;end.