如何才能让我的表格始终处于最佳状态?

时间:2010-07-14 02:19:46

标签: delphi

我有这些小光标形状的形状,我需要一直在所有的一切,... ... FormStyle已经fsStayOnTop了 我使用这段代码:

 SetWindowPos(tempCursor.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE );

和这(虽然我不知道它的作用):

procedure TCursorFrm.CreateParams(var Params: TCreateParams);
const
   WS_EX_NOACTIVATE = $8000000;
begin
   inherited;
   Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE;
end;

但我仍然无法将我的表格放在TMenuItems之上。 如何让我的表格保持在一切之上?

5 个答案:

答案 0 :(得分:4)

我认为这会和你一样好。如果您的表单停留在菜单的顶部,则用户在打开菜单时将无法看到菜单。做这样的事情,特别是当系统没有通过任何简单的手段使其可用时,与恶意接壤,或至少感觉到这种方式。你不希望你的用户认为你的程序是恶意的,所以我的建议是不要试图这样做。

答案 1 :(得分:4)

这必须是我要发布的最终或最糟糕的hackery。

  1. 将FormStyle设置为fsStayOnTop(实际上可能不需要此步骤)
  2. 在表单上删除TTimer并将其间隔设置为100
  3. 在OnTimer事件中,输入以下代码:

    如果可见的话   SetWindowPos(Self.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE或SWP_NOMOVE或SWP_NOACTIVATE);

  4. 我在我的一个项目中使用它,似乎工作正常。

答案 2 :(得分:2)

快速,轻微修复:从计时器中调用,每秒10次:

BringWindowToTop(Handle)

试了一下就可以了!也许你可以找到一种方法让它不那么“蛮力”,但我不确定如何。

答案 3 :(得分:2)

我认为您可以查看DirectX。我相信它允许覆盖主图像。您可以在非exlusive模式下打开它,并在桌面上绘制叠加层。但我不确定。只是一个猜测。

答案 4 :(得分:0)

或代替SetWindowPos命令 - 试试这个:

if visible then form1.SetFocus;