在Delphi的TDBGrid上点击标题的矩形是什么?

时间:2012-07-22 03:16:21

标签: delphi coordinates tdbgrid

我想识别在TDBGrid事件TitleClick(列:TColumn)上单击的标题单元格的屏幕坐标。

我可以使用ColWidths属性(通过TDBGrid = class(DBGrids.TDBGrid)类型声明公开)但是我很难确定用户是否重新排序了列,并结合了TDBGrid的水平滚动。我还想跟踪此列在后续移动和调整期间的位置,同时注意到此列可以滚动到网格之外。

我在这个问题上花了很长时间,而且我对Delphi相当擅长,所以这不是一个空闲的问题。

2 个答案:

答案 0 :(得分:4)

使用How do I get screen coordinates of the DBGrid cell中的技巧,我写道:

type
...
  THackedGrid = class(TDBGrid);
...
implementation
...
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
  currRow : Integer;
  rect : TRect;
begin
  currRow := THackedGrid(DBGrid1).Row;
  rect := THackedGrid(DBGrid1).CellRect(Column.Index+1,currRow);
end;
这是你想要的吗? rect中的坐标是相对于网格的。

答案 1 :(得分:0)

昨天我开始在一个非常相似的网格上工作。我正如你所提到的那样在网格固定行上覆盖一个控件,右键单击激活它。这是我到目前为止所做的,然后在我的数据集上设置过滤器。但是在组合上使用multiselect时我遇到了问题。我很想知道自上一篇文章以来你所取得的成就。

procedure Tf_well.dbWellGridMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
var cell  : TGridCoord;
begin
    if Button = mbRight then
    begin
        Cell := dbWellGrid.MouseCoord(X, Y);
        //  showmessage(dbWellGrid.Columns[Cell.X-1].DisplayName);

        case Cell.X-1 of
            0:  begin
                    fieldComboWellName.Visible:=True;
                    fieldComboWellName.DroppedDown:=True;
                    fieldComboWellName.SetFocus;
                end;