AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

nonVCL: Handle des MainForm

Ein Thema von Garfield · begonnen am 3. Mai 2010 · letzter Beitrag vom 7. Mai 2010
Antwort Antwort
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#1

nonVCL: Handle des MainForm

  Alt 3. Mai 2010, 21:51
Ich portiere gerade den OpenDirDialog nach nonVCL. Die Demo ist soweit fertig. Dabei hat mir das Win32API Tutorial von Luckie und Co., insbesondere das TreeView-Sample von Matthias geholfen. Nur beim Tuning habe ich ein paar Probleme.

Delphi-Quellcode:
{ 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;
HInstance scheint nicht das richtige zu sein. Kann man an das Handle kommen oder muss man das per Parameter mitgeben?

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;
Angehängte Dateien
Dateityp: 7z opendirdialog_101.7z (42,5 KB, 8x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: nonVCL: Handle des MainForm

  Alt 3. Mai 2010, 22:07
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#3

Re: nonVCL: Handle des MainForm

  Alt 3. Mai 2010, 22:38
Du musst doch jedes Fenster registrieren:
  RegisterClassEx(WndClass); Sonst bekommst Du es nicht zu sehen!?

Wenn es nicht geht, muss ich halt die Option entfernen und das Handle verlangen.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: nonVCL: Handle des MainForm

  Alt 3. Mai 2010, 22:44
RegisterClassEx registriert die Fenster-Klassen und nicht die Fenster-Instanzen.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#5

Re: nonVCL: Handle des MainForm

  Alt 3. Mai 2010, 23:18
Achso, das wäre dann das CreateWindowExW. Als Owner hatte ich das hwnd aus der Nachrichtenschleife mitgegeben.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#6

Re: nonVCL: Handle des MainForm

  Alt 4. Mai 2010, 00:13
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;
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#7

Re: nonVCL: Handle des MainForm

  Alt 4. Mai 2010, 10:43
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.
Miniaturansicht angehängter Grafiken
getforegroundwindow_190.png  
Angehängte Dateien
Dateityp: 7z opendirdialog_178.7z (42,5 KB, 7x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: nonVCL: Handle des MainForm

  Alt 7. Mai 2010, 19:09
Und warum nicht Delphi-Referenz durchsuchenSHBrowseForFolder? Hat Windows schon alles dabei, da muss man nichts selber machen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz