【发布时间】:2011-02-24 11:45:11
【问题描述】:
我们有一个处理我们自己的消息的应用程序 - 一个定时程序为他们读取数据库。 找到一条记录,然后我们以模态方式显示一个表格。
这不是一个好的解决方案,因为用户可能会打字、看到任何东西等,并且表单会中止此操作。
我想我有时会看到,对话框、窗口与应用程序分离,它们似乎是另一个任务(这次任务栏有两个元素)。 但是这些事情很少发生,而且它们是错误...
但是我想找到一种方法来引起同样的事情。
计时器正在检查数据库,如果找到记录,那么我们将在后台显示一个表单,这似乎是另一个任务,并且它正在闪烁,并且它正在定期更改它的标题。 当用户点击它时,它会自行销毁,并以模态方式显示原始的“消息”形式。
我们可以用 Win32 技巧来做这件事吗? 怎么做?
谢谢: dd
感谢您的第一个回答。
我尝试创建一个简单的示例。你可以在这里看到:
type
TC = class(TPanel)
private
protected
procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE;
public
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
t : TC;
begin
t := TC.Create(Self);
t.Width := 100;
t.Height := 100;
t.Caption := 'aaaa';
ShowWindow(t.Handle, sw_SHOW);
end;
{ TC }
procedure TC.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopwindow;
end;
procedure TC.WMActivate(var Message: TWMActivate);
begin
if Message.Active <> WA_INACTIVE
then begin
SHowMessage('b');
SHowWindow(Self.Handle, sw_HIDE);
end;
end;
这是可行的,但我有一个问题。 任务的图标与应用程序相同。 如果有人随机点击它,可能点击了错误的项目。 如何重新定义子窗口的图标?
谢谢: dd
【问题讨论】:
-
如果你想在屏幕上显示一些东西,但又不想偷取焦点,那么你需要一个工具提示。
-
我正在做类似的事情。我强烈建议您将所有数据库读取和消息对话框处理移动到单独的线程,因为例如当您的数据库连接发生问题并且您没有停止刷新计时器时,您的主表单将处于连接超时的无限循环中,从用户的角度来看,这是一个程序滞后。
-
而且由于您将它放在单独的线程中,您可以显示您在该线程的同步方法中创建的消息表单。