如题
如何能让dbgrid1.columns[i].picklist在选中单元格时就自动弹出列表来?

解决方案 »

  1.   


    {搞了一个土方法:
     需要一个Timer
     测试时,点击PickList不为空值的格子的靠右端位置(即应出现小三角的那里),静候0.5秒
    }procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
      if Column.PickList.Count>0 then begin
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUp, 0, 0, 0, 0);
        Timer1.Enabled := True;
      end;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
      mouse_event(MOUSEEVENTF_LEFTUp, 0, 0, 0, 0);
      Timer1.Enabled := False;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Timer1.Interval := 600;
      Timer1.Enabled := False;
    end;
      

  2.   


    {附:用空格键展开DBGrid网格中的PickList的方法}
    {
    作者: creation_zy
    日期: 2006-3-9
    }
    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    var
      i, x, y:Integer;
      MyEdit:TInplaceEdit;
    begin
      if Key=#32 then
      begin
        for i:=0 to Pred(DBGrid1.ComponentCount) do
          if DBGrid1.Components[i] is TInplaceEdit then
          begin
            Key:=#0;
            MyEdit:=TInplaceEdit(DBGrid1.Components[i]);
            x:=MyEdit.BoundsRect.Right-MyEdit.BoundsRect.Left-4;
            y:=4;
            PostMessage(MyEdit.Handle,WM_LBUTTONDOWN,1,x+y shl 16);
            PostMessage(MyEdit.Handle,WM_LBUTTONUP,0,x+y shl 16);
            break;
          end;
      end;
    end;
      

  3.   

    procedure TForm1.DBGridEh1CellClick(Column: TColumnEh);
    var
      X, Y: Integer;
      AEdit: TInplaceEdit;
    begin
      DBGridEh1.EditorMode := True;
      AEdit := DBGridEh1.InplaceEditor;
      X := AEdit.Width - 1;
      Y := AEdit.Height - 1;
      AEdit.Perform(WM_LBUTTONDOWN, 0, MakeLong(X, Y));
      AEdit.Perform(WM_LBUTTONUP, 0, MakeLong(X, Y));
    end;
    在CellClick事件中写上这个。跟源代码看了好久才搞定的
    建议你加上Column的判断
      

  4.   

    哦,才发现楼上也是这样搞的,就是不知道为什么要加Timer
    同时发现在ColEnter事件中也要加上,不过个人认为用按键选中单元格就弹出列表不太友好。
      

  5.   

    连DataSet的AfterScroll也加上吧呵呵
      

  6.   

    我说的是一点击后就把picklist的所有内容都拉出来
    而且第一项选中