請教當timer到達時間時,要秀出另一個原本沒focus的form?? |
尚未結案
|
mini88888
一般會員 發表:6 回覆:4 積分:2 註冊:2005-06-06 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
mini88888
一般會員 發表:6 回覆:4 積分:2 註冊:2005-06-06 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
mini88888
一般會員 發表:6 回覆:4 積分:2 註冊:2005-06-06 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
轉貼自
Torry's Delphi Pages
http://www.swissdelphicenter.ch/torry/showcode.php?id=261
{ Windows 98/2000 doesn't want to foreground a window when some other window has the keyboard focus. ForceForegroundWindow is an enhanced SetForeGroundWindow/bringtofront function to bring a window to the front. } { Manchmal funktioniert die SetForeGroundWindow Funktion nicht so, wie sie sollte; besonders unter Windows 98/2000, wenn ein anderes Fenster den Fokus hat. ForceForegroundWindow ist eine "verbesserte" Version von der SetForeGroundWindow API-Funktion, um ein Fenster in den Vordergrund zu bringen. } function ForceForegroundWindow(hwnd: THandle): Boolean; const SPI_GETFOREGROUNDLOCKTIMEOUT = $2000; SPI_SETFOREGROUNDLOCKTIMEOUT = $2001; var ForegroundThreadID: DWORD; ThisThreadID: DWORD; timeout: DWORD; begin if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE); if GetForegroundWindow = hwnd then Result := True else begin // Windows 98/2000 doesn't want to foreground a window when some other // window has keyboard focus if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and (Win32MinorVersion > 0)))) then begin // Code from Karl E. Peterson, www.mvps.org/vb/sample.htm // Converted to Delphi by Ray Lischner // Published in The Delphi Magazine 55, page 16 Result := False; ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil); ThisThreadID := GetWindowThreadPRocessId(hwnd, nil); if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then begin BringWindowToTop(hwnd); // IE 5.5 related hack SetForegroundWindow(hwnd); AttachThreadInput(ThisThreadID, ForegroundThreadID, False); Result := (GetForegroundWindow = hwnd); end; if not Result then begin // Code by Daniel P. Stasinski SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0), SPIF_SENDCHANGE); BringWindowToTop(hwnd); // IE 5.5 related hack SetForegroundWindow(hWnd); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE); end; end else begin BringWindowToTop(hwnd); // IE 5.5 related hack SetForegroundWindow(hwnd); end; Result := (GetForegroundWindow = hwnd); end; end; { ForceForegroundWindow } // 2. Way: //********************************************** procedure ForceForegroundWindow(hwnd: THandle); // (W) 2001 Daniel Rolf // http://www.finecode.de // rolf@finecode.de var hlp: TForm; begin hlp := TForm.Create(nil); try hlp.BorderStyle := bsNone; hlp.SetBounds(0, 0, 1, 1); hlp.FormStyle := fsStayOnTop; hlp.Show; mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); SetForegroundWindow(hwnd); finally hlp.Free; end; end; // 3. Way: //********************************************** // by Thomas Stutz { As far as you know the SetForegroundWindow function on Windows 98/2000 can not force a window to the foreground while the user is working with another window. Instead, SetForegroundWindow will activate the window and call the FlashWindowEx function to notify the user. However in some kind of applications it is necessary to make another window active and put the thread that created this window into the foreground and of course, you can do it using one more undocumented function from the USER32.DLL. void SwitchToThisWindow (HWND hWnd, // Handle to the window that should be activated BOOL bRestore // Restore the window if it is minimized ); } procedure SwitchToThisWindow(h1: hWnd; x: bool); stdcall; external user32 Name 'SwitchToThisWindow'; {x = false: Size unchanged, x = true: normal size} procedure TForm1.Button2Click(Sender: TObject); begin SwitchToThisWindow(FindWindow('notepad', nil), True); end;努力會更接近成功
------
努力會更接近成功 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |