1

TDBGridイベントTitleClick(Column:TColumn)でクリックされたTitleセルの画面座標を特定したいと思います。

ColWidthsプロパティ(TDBGrid = class(DBGrids.TDBGrid)型宣言を介して公開)を使用できますが、TDBGridの水平スクロールと組み合わせて、列がユーザーによって並べ替えられたかどうかを判断するのが困難です。また、この列がグリッドからスクロールアウトされる可能性があることにも注意して、後続の移動およびサイズ変更中にこの列がどこにあるかを追跡したいと思います。

私はこの問題に長い間費やしてきましたが、Delphiはかなり得意なので、これは怠惰な質問ではありません。

4

2 に答える 2

4

DBGrid セルの画面座標を取得する方法 のトリックを使用して、次のように書きました。

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 の座標は、グリッドに相対的です。

于 2012-07-22T04:29:54.130 に答える
0

私は昨日仕事で非常によく似たグリッドで作業を始めました。あなたが言ったように、私はグリッドの固定行にコントロールをオーバーレイし、右クリックでそれをアクティブにします。これは私がこれまで行ってきたことであり、データセットにフィルターを設定します。ただし、コンボで複数選択を使用すると問題が発生します。前回の投稿以降、あなたが何を成し遂げたかを知りたいと思います。

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;
于 2012-08-19T03:07:27.830 に答える