代码之家  ›  专栏  ›  技术社区  ›  durumdara

德尔菲:如何制作我自己的提示窗口?

  •  1
  • durumdara  · 技术社区  · 15 年前

    D6教授。

    当您将鼠标移到一个单元格时,它将等待2秒钟,并显示信息。

    正常的提示正在出现,在这些情况下它们正在消失: -显示时间的提示消失了 -激活窗体已停用 -显示一个新窗体

    但是我们的HintWindow无法检测到新的表单显示,或者应用程序发生了更改-它将保留在顶部,直到消失。时间。。。:-(

    我们使用“MouseMove”检测鼠标变化的另一个问题是启动提示。

    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
        Caption := INtTOStr(X) + ' ' + IntToStr(Y) + ' ' + IntToStr(GetTickCount);
        // If same coordinate I don't show it again
        if (LX <> X) or (LY <> Y) then begin
            miHint.DoActivateHint(Self, 'Anytext', 2000, 2000);
            LX := X; LY := Y;
        end;
    end;
    

    没有这个LX,HintWindow周期性地出现和消失。

    所以:我们需要知道如何创建一个HintWindow,该HintWindow使用与应用程序“Hint”相同的方法,但仅限于此网格。 它必须紧扣“任务变化”、“形式变化”。怎么做?

    感谢您的帮助: dd公司

    1 回复  |  直到 15 年前
        1
  •  2
  •   Sertac Akyuz    15 年前

    您最好通过替换 HintWindowClass HintInfo 参数传递给应用程序的 OnShowHint 每当您需要显示自定义提示时都会发生。也许您可以在下面找到一些有用的实现细节。


    在一个旧的应用程序中,我对列表框和网格使用了不同的提示类。行为有点分散,但基本上可以归结为:;

    OnShowHint公司 如果传递的“HintInfo”的“HintControl”是“TCustomDBGrid”,则事件测试,如果传递的是“HintInfo”,则调用传递“HintInfo”的过程。

    此过程使用Grid的MouseCoord方法查找提示应该位于的单元格HintInfo.CursorPos公司,通过临时更改网格的数据链接获取单元格的显示文本。然后,该过程创建一个TCanvas并为其句柄分配一个为网格检索的DC,将网格的字体分配给画布,并测试网格单元的边界是否足以显示文本。如果它决定显示提示,则将单元格文本指定给HintInfo.HintStr文件以及派生的提示窗口类 HintInfo.HintWindowClass

    那么 OnShowHint公司

    我不确定这样描述是否有帮助,但这里是尝试。。。

    推荐文章