主窗口setWindowPos后痛的问题 主窗口setWindowPos后,正常情况下显示子窗口,提示框都会在主窗口前面的。可有时不明原因执行了SetForegroundWindow(主窗口句柄),子窗口或提示就被主窗口盖住了,这时,由于主窗口在前面,程序就象是程序死了一样,鼠标点不动,有什么办法检查到这种情况时自动把子窗口或提示窗口恢复到前面? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 演示程序:uunit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementationuses Unit2;{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);begin Timer1.Enabled:=true; showmessage('OK');end;procedure TForm1.FormCreate(Sender: TObject);beginSetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)end;procedure TForm1.Timer1Timer(Sender: TObject);beginTimer1.Enabled:=false;SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)end;procedure TForm1.Button2Click(Sender: TObject);begin Timer1.Enabled:=true; with TForm2.Create(self) do begin ShowModal; Free; end;end;procedure TForm1.Button3Click(Sender: TObject);begin Timer1.Enabled:=true; messagebox(self.handle,'ÌáʾÐÅÏ¢','Ìáʾ£º',mb_ok);end;end.任意点一个按钮,程序就会象死掉一样。有什么办法检查到这种情况时自动把子窗口或提示恢复到前面? Timer1Timer只是演示,在实际中不可预料 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)这个要不得 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) 好像少了一句,真的!很久以前碰到过的!你看一下WINDOWS大全 DELPHI版的! 关于线程与FORM的郁闷问题 TNativeXml使用的一个小问题,修改某一个值 delphi中的tmscomm为何不能用? 请教:TRect 记录类型定义 各位大哥,大姐,我已经等两天了,还没有解决。在线等。 各位在软件公司工作的朋友每天能抽出多长时间看书学习? 请问如何才能将PCHAR类型的值转换为STRING类型的值 控制excel 如何用文件存取文件 时间字段怎样赋空值 请问,使用GetExitCodeThread()函数应该调用那个单元? 初学者,问个问题,一个程序2个窗口如何关闭一个的时候不是仅仅关闭窗口啊?
uunit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses Unit2;
{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
showmessage('OK');
end;procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=false;
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)end;procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=true;
with TForm2.Create(self) do
begin
ShowModal;
Free;
end;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
Timer1.Enabled:=true;
messagebox(self.handle,'ÌáʾÐÅÏ¢','Ìáʾ£º',mb_ok);
end;end.
任意点一个按钮,程序就会象死掉一样。有什么办法检查到这种情况时自动把子窗口或提示恢复到前面?
这个要不得