2016-08-25 18 views
1

TDBGridの一部のセルをマウスでクリックすると、どのようにシミュレーションできますか?TDBGridのセルをマウスでクリックするとシミュレートする

+1

@RBA:OPの特定の点には答えられないようですね。 – MartynA

+0

なぜセル内をクリックしてシミュレートする必要がありますか?操作する行と列がわかっている場合は、コードを記述してください。次に、セルが実際にクリックされたときに同じことが起こるようにするには、そのコードをOnCellClickハンドラで呼び出します。あるいは、あなたはそれをどうやって行うのか不明ですか? – MartynA

+0

@MartynA時には、私はレコードを削除しようとすると問題があります。しかし、私は現在の行のいくつかのセルを選択すると、削除が実行されます! .. – userPro

答えて

2

更新:

このコードは、あなたが望むように見える何をすべき:

type 
    TMyDBGrid = class(TDBGrid); 

function TForm1.GetCellRect(ACol, ARow : Integer) : TRect; 
begin 
    Result := TmyDBGrid(DBGrid1).CellRect(ACol, ARow); 
end; 

procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: 
    TShiftState; X, Y: Integer); 
var 
    Coords : TGridCoord;  
begin 
    Coords := DBGrid1.MouseCoord(X, Y); 
    Caption := Format('Col: %d, Row: %d', [Coords.X, Coords.Y]); 
end; 

procedure TForm1.SimulateClick(ACol, ARow : Integer); 
type 
    TCoords = packed record 
    XPos : SmallInt; 
    YPos : SmallInt; 
    end; 
var 
    ARect : TRect; 
    Coords : TCoords; 
begin 
    ARect := GetCellRect(ACol, ARow); 
    Coords.XPos := ARect.Left; 
    Coords.YPos := ARect.Top; 
    DBGrid1.Perform(WM_LButtonUp, 0, Integer(Coords)); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    SimulateClick(StrToInt(edX.Text), StrToInt(edY.Text)); 
end; 

のTDBGridのMouseCoord機能は、列番号(TGridCoordに座標(X、Y)のペアに変換します.X)とRow番号((TGridCoord.Y)。

OnMouseUpイベントは、X & Y入力のargumにDBGrid1.MouseCoordを呼び出した結果を表示しますents。

SimulateClickは、グリッドのセルのクリックをシミュレートします。 GetCellRectを使用して、指定されたセルの頂点の座標(DBGrid内)を取得し、DBGridでPerform(WM_LButtonUp、...)を呼び出し、LParam引数に座標を渡します。

最後にButton1ClickはTEditのペアからCol値とRow値を使用してSimulateClickを呼び出します。 OnMouseUpイベントが発生し、ColとRowの番号が表示されるため、対応するセルをマウスでクリックするのと同じ効果を得ることができます。

+0

ありがとう! – userPro

+0

私はDBGrid1.Perform(WM_LButtonDown、0、Integers(Coords));を使用すると、 'UP'の前に、私は必要なものを取得します。_Coords_を持つセルが選択され、 'focused' ..thx! – userPro

+0

@userPro:あなたがそれを並べ替えてうれしいです。実際には、私はレコードの削除についてあなたのqに戻って、私たちがそれを解決できるかどうかを見たいと思います - 私はあなたのqについてのいくつかの提案/クエリで私の答えに何かを投稿します。 – MartynA

関連する問題