我想识别在TDBGrid事件TitleClick(列:TColumn)上单击的标题单元格的屏幕坐标。
我可以使用ColWidths属性(通过TDBGrid = class(DBGrids.TDBGrid)类型声明公开)但是我很难确定用户是否重新排序了列,并结合了TDBGrid的水平滚动。我还想跟踪此列在后续移动和调整期间的位置,同时注意到此列可以滚动到网格之外。
我在这个问题上花了很长时间,而且我对Delphi相当擅长,所以这不是一个空闲的问题。
答案 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;