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;

在大多数情况下,我可以通过移动对话框窗口或单击文件并单击打开按钮来处理此问题,但我不能保证其他将使用它的人会这样做。

是什么原因,我该如何解决这个问题?

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 回答