unction GetTopMostWindows(Handle: HWND; Info: Pointer): BOOL; stdcall;
{V}
// Винда в некоторых случаях (замечено на переключении приложений Alt+Esc)
// самостоятельно сносит WS_EX_TOPMOST еще ДО вызова этого метода
// поэтому дополнительно проверяем TCustomForm.FormStyle
function lIsTopMostWindow(Handle: HWND) : boolean;
var
lControl : TWinControl;
begin
Result := (GetWindowLong(Handle, GWL_EXSTYLE) and WS_EX_TOPMOST <> 0);
if not Result then
begin
lControl := FindControl(Handle);
Result := (lControl is TCustomForm) and
(TCustomForm(lControl).FormStyle = fsStayOnTop);
end;
end;
begin
Result := True;
if GetWindow(Handle, GW_OWNER) = Application.Handle then
if lIsTopMostWindow(Handle) and
((Application.MainForm = nil) or PTopMostEnumInfo(Info)^.IncludeMain or
(Handle <> Application.MainForm.Handle)) then
Application.FTopMostList.Add(Pointer(Handle))
else
begin
PTopMostEnumInfo(Info)^.TopWindow := Handle;
Result := False;
end;
end;
Комментариев нет:
Отправить комментарий