mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-05 21:07:27 +02:00
Updates Win32 RemoveStayOnTop
git-svn-id: trunk@25536 -
This commit is contained in:
parent
c86392f301
commit
a72bba258d
@ -511,7 +511,7 @@ end;
|
||||
|
||||
function TWin32WidgetSet.AppRemoveStayOnTopFlags(const ASystemTopAlso: Boolean = False): Boolean;
|
||||
begin
|
||||
RemoveStayOnTopFlags(AppHandle);
|
||||
RemoveStayOnTopFlags(AppHandle, ASystemTopAlso);
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
|
@ -109,7 +109,7 @@ function AllocWindowInfo(Window: HWND): PWin32WindowInfo;
|
||||
function DisposeWindowInfo(Window: HWND): boolean;
|
||||
function GetWin32WindowInfo(Window: HWND): PWin32WindowInfo;
|
||||
|
||||
procedure RemoveStayOnTopFlags(Window: HWND);
|
||||
procedure RemoveStayOnTopFlags(Window: HWND; ASystemTopAlso: Boolean = False);
|
||||
procedure RestoreStayOnTopFlags(Window: HWND);
|
||||
|
||||
procedure AddToChangedMenus(Window: HWnd);
|
||||
@ -142,6 +142,7 @@ type
|
||||
PStayOnTopWindowsInfo = ^TStayOnTopWindowsInfo;
|
||||
TStayOnTopWindowsInfo = record
|
||||
AppWindow: HWND;
|
||||
SystemTopAlso: Boolean;
|
||||
StayOnTopList: TList;
|
||||
end;
|
||||
|
||||
@ -1079,14 +1080,17 @@ begin
|
||||
AStyle := GetWindowLong(Handle, GWL_EXSTYLE);
|
||||
if (AStyle and WS_EX_TOPMOST) <> 0 then // if stay on top then
|
||||
begin
|
||||
// Don't remove system-wide stay on top
|
||||
lWindowInfo := GetWin32WindowInfo(Handle);
|
||||
if (lWindowInfo <> nil) then
|
||||
// Don't remove system-wide stay on top, unless desired
|
||||
if not StayOnTopWindowsInfo^.SystemTopAlso then
|
||||
begin
|
||||
lWinControl := lWindowInfo^.WinControl;
|
||||
if (lWinControl <> nil) and (lWinControl is TCustomForm)
|
||||
and (TCustomForm(lWinControl).FormStyle = fsSystemStayOnTop) then
|
||||
Exit;
|
||||
lWindowInfo := GetWin32WindowInfo(Handle);
|
||||
if (lWindowInfo <> nil) then
|
||||
begin
|
||||
lWinControl := lWindowInfo^.WinControl;
|
||||
if (lWinControl <> nil) and (lWinControl is TCustomForm)
|
||||
and (TCustomForm(lWinControl).FormStyle = fsSystemStayOnTop) then
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
StayOnTopWindowsInfo^.StayOnTopList.Add(Pointer(Handle));
|
||||
@ -1095,7 +1099,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure RemoveStayOnTopFlags(Window: HWND);
|
||||
procedure RemoveStayOnTopFlags(Window: HWND; ASystemTopAlso: Boolean = False);
|
||||
var
|
||||
StayOnTopWindowsInfo: PStayOnTopWindowsInfo;
|
||||
WindowInfo: PWin32WindowInfo;
|
||||
@ -1105,6 +1109,7 @@ begin
|
||||
begin
|
||||
New(StayOnTopWindowsInfo);
|
||||
StayOnTopWindowsInfo^.AppWindow := Window;
|
||||
StayOnTopWindowsInfo^.SystemTopAlso := ASystemTopAlso;
|
||||
StayOnTopWindowsInfo^.StayOnTopList := TList.Create;
|
||||
WindowInfo := GetWin32WindowInfo(Window);
|
||||
WindowInfo^.StayOnTopList := StayOnTopWindowsInfo^.StayOnTopList;
|
||||
|
Loading…
Reference in New Issue
Block a user