Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Form erneut zentrieren (https://www.delphipraxis.net/166522-form-erneut-zentrieren.html)

PhilmacFLy 16. Feb 2012 15:25

Form erneut zentrieren
 
Hey Dp'ler

Ich hab folgendes Problem, ich rufe über mein Programm das Game TuxRacer auf.
Dieser hat nun eine gewisse Auflösung. Wenn jetzt der TuxRacer beendet wird hab ich das Problem das alle Forms die
Delphi-Quellcode:
postition := poDesktopCenter
eingestellt haben links unten im eck sind. Nun könnte ich natürlich folgendes machen:
Delphi-Quellcode:
procedure Tfrm_gui_training_vorhanden.FormPaint(Sender: TObject);
begin
if left <> round((screen.Width - width)/2)) then
  position := poDesktopCenter;
end;
Das finde ich allerdings recht unschön wegen dem Rechenaufwand (ja is nur 1 Flop aber den braucht es ja nicht).
Hat jemand eine Idee wie ich das schöner lösen könnte.

himitsu 16. Feb 2012 16:17

AW: Form erneut zentrieren
 
Wenn sich die Monitorauflösung ändert, dann wird vom windows ganz bestimmt eine entsprechende Message versendet.

eventuell sowas wie MSDN-Library durchsuchenWM_SETTINGCHANGE ? :stupid:


Tipp: Ich weiß zwar nicht ab welcher Delphi-Version es das gibt, aber bei mir gibt es Delphi-Referenz durchsuchenApplication.OnSettingChange, welches vom WM_SETTINGCHANGE ausgelöst wird.

PhilmacFLy 17. Feb 2012 10:50

AW: Form erneut zentrieren
 
Wie fang ich den ein WM_settingchange ab?

DeddyH 17. Feb 2012 11:22

AW: Form erneut zentrieren
 
Ich denke, so wie andere Messages auch:
Delphi-Quellcode:
type
  TDeinForm = class(TForm)
  private
    ...
    procedure WMSettingChange(var Msg: TWmSettingChange); message WM_SETTINGCHANGE;
Falls es TWmSettingChange nicht geben sollte, dann halt TMessage.

PhilmacFLy 17. Feb 2012 11:40

AW: Form erneut zentrieren
 
Ja das dachte ich mir eben, und hab in die Form gepackt die ich nochmal zentrieren will aber das hat überhaupt keinen Effekt gehabt. Ich habs auch versucht indem ichs in die Hauptform des Projekt gepackt hab, hatte aber auch keine Auswirkung, will sagen die Funktion sprang garnicht an.

himitsu 17. Feb 2012 12:19

AW: Form erneut zentrieren
 
Windows sendet sowas nur an bestimmte Toplevelfenster.

Ob die MainForm dazu zählt, weiß ich jetzt nicht genau.

Mit MainFormOnTaskBar könnte die Mainform es bekommen. Ansonsten kommt sowas bei der versteckten Application-Message-Form an.
Gibt es denn bei dir schon das OnSettingChange?

Häng dich mal in Application.OnMessage rein und schau ob es dort vorbei kommt.



Wie gesagt, ob nun wirklich WM_SETTINGCHANGE oder nicht doch etwas Anderes versendet wird, weiß ich auch nicht.
WM_SETTINGCHANGE ist halt bei vielen Systemänderungen, dieser Art, erfahrungsgemäß mit im Spiel. Mußt du halt ausprobieren.
PS: Es gibt Programme, welche alle Messages auflisten, welches so rumwandern. (u.a. von SysInternals)

PhilmacFLy 17. Feb 2012 12:49

AW: Form erneut zentrieren
 
Ich habs jetzt mit
Delphi-Quellcode:
Application.OnSettingChange := AppChange;
probiert, aber das wird auch nicht ausgelöst.

Wegen dem Programm ich hab mal schnell gegoogelt aber nichts in den bei SySinternals gefunden. Kannst du mir vllt schnell nen Link posten?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05: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