S shirly Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-21 #1 我的程序要与其他人的程序配合使用,流程是这样的,先启动我程序,将其最小化,然后启动其他的程序向我的程序发送数据,我来校验发送的是否正确,如果不对,要报错,现在问题时,报错时,怎么才能将我的程序置于其他程序的前面呢?让用户不用点一下才能看到报的错误。
我的程序要与其他人的程序配合使用,流程是这样的,先启动我程序,将其最小化,然后启动其他的程序向我的程序发送数据,我来校验发送的是否正确,如果不对,要报错,现在问题时,报错时,怎么才能将我的程序置于其他程序的前面呢?让用户不用点一下才能看到报的错误。
D dedema Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-21 #2 SetWindowPos(Application.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);<br> SetWindowPos(Self.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);<br>
SetWindowPos(Application.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);<br> SetWindowPos(Self.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);<br>
C cnaoszh Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-21 #3 取得Application.Handle后,<br> SetForegroundWindow(AppWnd);<br>
B bjaman Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-21 #6 procedure TForm1.FormShow(Sender: TObject);<br>begin<br> SetWindowPos(handle, HWND_TopMost, 0,0,0,0,SWP_NoMove or SWP_NoSize or SWP_ShowWindow); //保证此窗体无论何时都处于最上层<br>end;
procedure TForm1.FormShow(Sender: TObject);<br>begin<br> SetWindowPos(handle, HWND_TopMost, 0,0,0,0,SWP_NoMove or SWP_NoSize or SWP_ShowWindow); //保证此窗体无论何时都处于最上层<br>end;
S shirly Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-21 #7 是的,我的主窗口是个MDIForm,我想将我的程序在出错的时候提到最前面,然后再ShowMessage提示错误,但是没有实现,请赐教!
S shangshang Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-21 #8 function SetSysFocus(hwnd: integer): integer;<br>var<br> hOtherWin, OtherTHreadID, hFocusWin: integer;<br>begin<br> hOtherWin := GetForegroundWindow;<br> OtherThreadID := GetWindowThreadProcessID(hOtherWin, nil);<br> if AttachThreadInput(GetcurrentThreadID, OtherThreadID, True) then<br> begin<br> hFocusWin := GetFocus;<br> result := SetFocus(hwnd);<br> if hFocusWin <> 0 then<br> try<br> finally<br> AttachThreadInput(GetCurrentTHreadID, OtherTHreadID, False);<br> end;<br> end<br> else<br> result := SetFocus(hwnd);<br>end;<br><br>然后用<br> SetSysFocus(Self.Handle);<br> ShowWindow(Self.Handle, sw_normal);<br>这个self就是你要显示的窗口啦。
function SetSysFocus(hwnd: integer): integer;<br>var<br> hOtherWin, OtherTHreadID, hFocusWin: integer;<br>begin<br> hOtherWin := GetForegroundWindow;<br> OtherThreadID := GetWindowThreadProcessID(hOtherWin, nil);<br> if AttachThreadInput(GetcurrentThreadID, OtherThreadID, True) then<br> begin<br> hFocusWin := GetFocus;<br> result := SetFocus(hwnd);<br> if hFocusWin <> 0 then<br> try<br> finally<br> AttachThreadInput(GetCurrentTHreadID, OtherTHreadID, False);<br> end;<br> end<br> else<br> result := SetFocus(hwnd);<br>end;<br><br>然后用<br> SetSysFocus(Self.Handle);<br> ShowWindow(Self.Handle, sw_normal);<br>这个self就是你要显示的窗口啦。
M mystudy Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-21 #9 要是提示的话,你直接用messagebox好了,这个有topmost
H hygsxy Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-21 #10 formstyle:=fsStayOnTop难道不可以么?判断有错时,把你窗体的formstyle属性修改成fsStayOnTop不就得了.完后再次修改回去。
S shirly Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-21 #11 接受了myStudy的答案,我只需要让其能看到错误提示就好了。<br>bjaman:不能这样做,因为这样的话,其他的程序就用不了了。<br>