![]() |
nonVCL: Handle des MainForm
Liste der Anhänge anzeigen (Anzahl: 1)
Ich portiere gerade den
![]()
Delphi-Quellcode:
HInstance scheint nicht das richtige zu sein. Kann man an das Handle kommen oder muss man das per Parameter mitgeben?
{ Mittig über dem Hauptformular der Anwendung. }
poMainFormCenter: begin GetWindowRect(HInstance, ParentRect); nLeft := ParentRect.Left + ((ParentRect.Right - ParentRect.Left) - fWidth) div 2; nTop := ParentRect.Top + ((ParentRect.Bottom - ParentRect.Top) - fHeight) div 2; MoveWindow(aWnd, nLeft, nTop, fWidth, fHeight, true); end;
Delphi-Quellcode:
{ Mittig über dem als Owner angegebenen Formular. }
poOwnerFormCenter: if ods.Owner <> 0 then begin GetWindowRect(ods.Owner, ParentRect); nLeft := ParentRect.Left + ((ParentRect.Right - ParentRect.Left) - fWidth) div 2; nTop := ParentRect.Top + ((ParentRect.Bottom - ParentRect.Top) - fHeight) div 2; MoveWindow(aWnd, nLeft, nTop, fWidth, fHeight, true); end; |
Re: nonVCL: Handle des MainForm
Es gibt nicht die Mainform.
Die Mainform ist irgendeines der Fenster, welches der "Programmierer" als dieses ansieht. Bei der VCL ist es so, daß dieses standardmäßig das erste, bei Application registrierte, Fenster ist. Wenn du also in nonVCL keine Registrierung hast, dann kann man dieses Programmseitig nicht unterscheiden. Lass deinem Dialodaufruf ein Handle mitgeben, welches dann quasi als Mainform verwendet wird. PS: HInstance deiner Anwendung ist im aktuellen Windows die EXE, bzw. deren Image und bei einer DLL ist es analog das DLL-Handle. |
Re: nonVCL: Handle des MainForm
Du musst doch jedes Fenster registrieren:
Delphi-Quellcode:
Sonst bekommst Du es nicht zu sehen!?
RegisterClassEx(WndClass);
Wenn es nicht geht, muss ich halt die Option entfernen und das Handle verlangen. |
Re: nonVCL: Handle des MainForm
RegisterClassEx registriert die Fenster-Klassen und nicht die Fenster-Instanzen. :zwinker:
|
Re: nonVCL: Handle des MainForm
Achso, das wäre dann das CreateWindowExW. Als Owner hatte ich das hwnd aus der Nachrichtenschleife mitgegeben.
|
Re: nonVCL: Handle des MainForm
Solange kein Fenster StayOnTop ist und das Öffnen des Dialogfensters nicht zu lange dauert, dürfte dies gehen:
Delphi-Quellcode:
{ Mittig über dem Hauptformular der Anwendung. }
poMainFormCenter: begin GetWindowRect(GetForegroundWindow, ParentRect); nLeft := ParentRect.Left + ((ParentRect.Right - ParentRect.Left) - fWidth) div 2; nTop := ParentRect.Top + ((ParentRect.Bottom - ParentRect.Top) - fHeight) div 2; MoveWindow(aWnd, nLeft, nTop, fWidth, fHeight, true); end; |
Re: nonVCL: Handle des MainForm
Liste der Anhänge anzeigen (Anzahl: 2)
Das sieht dann jetzt wie im Anhang aus. Vielleicht hat jemand doch noch eine bessere Lösung?
Nachtrag: Ich habe testweise ein Formular mit fsStayOnTop erstellt. GetForegroundWindow funktioniert damit wie gewünscht und liefert das Handle zur MainForm oder zumindest zur aufrufenden Form. Je nachdem wie man die MainForm definiert. |
Re: nonVCL: Handle des MainForm
Und warum nicht
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz