弹出菜单不会立即在Delphi中刷新

时间:2014-09-26 07:55:16

标签: delphi popupmenu

我有一个弹出菜单,在单击StringGrid时会在右键单击事件中打开。在这个菜单中,我有一个选项可以为列着色。假设我有一个选项,用蓝色选中所选列。当我点击蓝色时,列颜色设置为蓝色,我有一个bool值表示列已着色。

我的问题是,如果列不是colorod列,我想禁用将列着色为蓝色的选项。我有一个数组,其中我存储了网格中的所有数据,并在我的数组中的标题名称的末尾添加了一个#colored标记。

现在我正在这样做:

在我的弹出菜单的着色选项中。我们只能用一种颜色为蓝色的色彩。

if Pos('#',sourceData[0,grid.col]) <> 0 then
   SourceData[0,grid.col] := COPY(SourceData[0,grid.col],0, Pos('#', SourceData[0,grid.col])-1);

columnColored:= true;

还有一些其他代码会对列进行着色,但这里并不重要。

然后在字符串网格mousedownevent:

if Button = mbRight then
  begin
    if columnColored then
      begin
        if Pos('#colored',SourceData[0,grid.col]) <> 0 then
            pmColorBlue.enabled := true
        else
            pmColorBlue.enabled := false;
      end;
  end;

问题

这是工作的问题是它有一个潜在的。当我右键单击已着色的列时,我希望能够重新点击它并再次设置默认的oclor。但是,如果列与着色的列不同,则该选项应保持禁用状态。

问题是,当我点击彩色列时,我点击另一个没有颜色的列后立即。我的对决菜单中的蓝色选项仍然可用,如果我再次在同一列上重新点击,则禁用蓝色选项。所以我基本上必须在列上单击两次才能从我的opup菜单中禁用颜色opton。

我如何修复它,所以当我点击彩色列时,该选项已启用,但当我点击另一个时,该选项应被禁用。现在要禁用该选项我必须单击两次右键导致第一次该选项仍然可用。如果我首先点击非彩色色谱柱然后点击我的彩色色谱柱,这也是同样的问题。首先禁用该选项,然后单击我的彩色列,该选项仍然保持禁用状态,我在我的彩色列上重新点击并启用该选项。

我不知道为什么这样做。你能帮帮我吗?

1 个答案:

答案 0 :(得分:3)

将StringGridMouseDown事件上的代码移动到弹出菜单的OnPopup事件中。 事件可能会在(对于您的情况)错误的订单中被解雇。