Bringing window to front

Simple question, but I couldnt find the answer :o(

How do I bring a window to front, when it is overlapped by system windows?

Application.BringToFront;
Form2.BringToFront;

This works if an application like Outlook is in front, but if a dos- or folder window is overlapping form2, then it doesnt come to front!

LVL 1
pedeAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
freshman3kConnect With a Mentor Commented:
Hello!

Call This instead of your code,that you showed above:
SetWindowPos(Form1.handle, HWND_TopMost,0,0,0,0,SWP_NOMove or SWP_NOSize);
SetWindowPos(Form2.handle, HWND_TopMost,0,0,0,0,SWP_NOMove or SWP_NOSize);

Good Luck!

0
 
God_AresCommented:
formstyle := fsStayOnTop;
0
 
intheCommented:
try:

SetForegroundWindow(Form1.handle);
it depends on what operating system your using as there are big diference in how 98/nt/2k handle doing this

this is cut from a question the other day about same topic

<start paste>

ok the following is getting silly but im guesssing your using 2k or something else setforegroundwindow
would be working.
its not small but is nessesary ,it came form the borland newsgroups with parts from different sources.
http://groups.google.com/groups?q=forceforegroundwindow+delphi+ray&hl=en&selm=3A62F81B.7790A088%40ia.comweb.nl&rnum=1

so you can call

 ForceForeground(handle);

function ForceForeground(AppHandle:HWND): boolean;
const
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
ForegroundThreadID: DWORD;
ThisThreadID      : DWORD;
timeout           : DWORD;
OSVersionInfo     : TOSVersionInfo;
Win32Platform     : Integer;
begin
if IsIconic(AppHandle) then ShowWindow(AppHandle, SW_RESTORE);
if (GetForegroundWindow = AppHandle) then Result := true else
begin
 Win32Platform := 0;
 OSVersionInfo.dwOSVersionInfoSize := SizeOf(OSVersionInfo);
 if GetVersionEx(OSVersionInfo) then Win32Platform := OSVersionInfo.dwPlatformId;

 { Windows 98/2000 doesn't want to foreground a window when some other window has keyboard focus}

 if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (OSVersionInfo.dwMajorVersion > 4)) or
    ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and ((OSVersionInfo.dwMajorVersion > 4) or
    ((OSVersionInfo.dwMajorVersion = 4) and (OSVersionInfo.dwMinorVersion > 0)))) then
 begin
   Result := false;
   ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow,nil);
   ThisThreadID := GetWindowThreadPRocessId(AppHandle,nil);
   if AttachThreadInput(ThisThreadID, ForegroundThreadID, true) then
   begin
     BringWindowToTop(AppHandle);
     SetForegroundWindow(AppHandle);
     AttachThreadInput(ThisThreadID, ForegroundThreadID, false);
     Result := (GetForegroundWindow = AppHandle);
   end;
   if not Result then
   begin
     SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
     SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0), SPIF_SENDCHANGE);
     BringWindowToTop(AppHandle);
     SetForegroundWindow(AppHandle);
     SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
     Result := (GetForegroundWindow = AppHandle);
     if not Result then
       begin
       ShowWindow(AppHandle,SW_HIDE);
       ShowWindow(AppHandle,SW_SHOWMINIMIZED);
       ShowWindow(AppHandle,SW_SHOWNORMAL);
       BringWindowToTop(AppHandle);
       SetForegroundWindow(AppHandle);
       end;
   end;
 end else
 begin
   BringWindowToTop(AppHandle);
   SetForegroundWindow(AppHandle);
 end;
 Result := (GetForegroundWindow = AppHandle);
end;
end;



see here for details of a new win2k api allowsetforegroundwindow:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/windows_5fw7.asp

<end paste>
0
 
pedeAuthor Commented:
Having a look at it, thank you!
0
 
pedeAuthor Commented:
Freshman3k's solution works with very little code, so I gave him the points. But thanks for all comments!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.