Hello Micha,

Today is day 3 of my LCL experience, so sorry about all the issues. Now that you are assigned to the bug I think it should be fixed quite fast.
+function GetTopMostWindows(Handle: HWND; Info: LongInt): BOOL; stdcall;
    

Shouldn't that be PtrInt for 64 bit compatibility ?
  
Om, I only have Win32 here on my desktop and I haven't got any experience with x64. Short explanation please.
+begin
+  Result := True;
+  if GetWindow(Handle, GW_OWNER) = PTopMostEnumInfo(Info)^.W32Widget.AppHandle then
    

W32Widget does not need to be in that Info, TWin32WidgetSet(WidgetSet)
is global, and exists only once.
  
Ok, I didn't know that. Then it's just like with Delphi. There exists a global instance of TApplication as well.
+    if (GetWindowLong(Handle, GWL_EXSTYLE) and WS_EX_TOPMOST <> 0) and
+      (PTopMostEnumInfo(Info)^.IncludeMain {or (Application.MainForm = nil) or
+      (Handle <> Application.MainForm.Handle)}) then
+      PTopMostEnumInfo(Info)^.W32Widget.FTopMostList.Add(Pointer(Handle))
    

Why not put the list in PTopMostEnumInfo(Info) ?
  
Good idea.
+    else
+    begin
+      PTopMostEnumInfo(Info)^.TopWindow := Handle;
+      Result := False;
    
Why these two lines ?
  
A similar passage was there in the VCL code and I thought that it must make any sense, but in fact I don't know.
+        if GetWindowLong(Info.TopWindow, GWL_EXSTYLE) and WS_EX_TOPMOST <> 0 then
+          Info.TopWindow := HWND_NOTOPMOST;
+        for I := FTopMostList.Count - 1 downto 0 do
    

Why reverse order ?
  
Same reason as above. But know that I think about it, it makes more sense if it is reversed.

Thanks for doing the final steps,

    Christian


Reply via email to