5

Windows 10 で Delphi Berlin を使用しています。tStringGrid ベースの tForm で tOpenDialog を使用する必要があります。

開いているダイアログの固定列または行に重なっているファイルをダブルクリックすると、開いているダイアログが消えた直後に onFixedCellClick イベントが自動的に発生します。次の画像では、ファイルは最初の行である固定行の同じ位置にあります。

ここに画像の説明を入力

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    OpenDialog1: TOpenDialog;
    procedure FormClick(Sender: TObject);
    procedure StringGrid1FixedCellClick(Sender: TObject; ACol, ARow: Integer);
    procedure FormCreate(Sender: TObject);
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Options := StringGrid1.Options + [goFixedColClick, goFixedRowClick];
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  OpenDialog1.Execute;
end;

procedure TForm1.StringGrid1FixedCellClick(Sender: TObject; ACol, ARow: Integer);
begin
  Caption := '';
end;

ほとんどの場合、ダイアログ ウィンドウを移動するか、ファイルを 1 回クリックして [開く] ボタンをクリックすることでこれを処理できますが、これを使用する他の人がそうするかどうかは保証できません。

その理由と、この問題を解決するにはどうすればよいですか?

4

1 に答える 1

5

これは、対応するマウスダウン メッセージ ( ) があるかどうかを確認せずに、マウスアップ メッセージ (オーバーライドされたメソッド) でイベントをTCustomGridトリガーする方法に問題があると思います。簡単な修正(コピーして変更できる場合):ベルリンの4564行目(メソッドでチェックする別の条件を追加し、FixedCellClickへの呼び出しにつながります):OnFixedCellClickMouseUpFHotTrackCell.PressedVcl.GridsTCustomGrid.MouseUp

if ... and FHotTrackCell.Pressed then
  FixedCellClick(Cell.X, Cell.Y);

FixedCellClickつまり、対応するマウスダウンがない状態でマウスアップが発生した場合は、呼び出さないでください。

于 2016-09-02T13:05:09.397 に答える