An diesem Problem bin ich schon Jahre dran, ich kriege es nicht hin. Wobei Jahre nicht bedeutet, daß ich täglich seit Jahren daran arbeite, sondern seit Jahren mich gelegentlich des Problem annehme und immer wieder scheitere.
Es geht drum, daß ich ein Fenster ständig zentriert auf dem Monitor haben will, es aber auch möglich sein soll die Größe des Fensters zu ändern. Das hört sich einfacher an als es ist. Inzwischen habe ich mehrere Duzend Berechnungen geschrieben. Es funktioniert entweder nicht oder das Ergebnis ist katastrophal. Ich glaube ich bin inzwischen zu sehr drin verfangen und habe die Übersicht verloren. Vielleicht ist die Lösung auch einfach, ich sehe sie nur nicht.
Hier ein kleiner Quellcode der mein Problem zeig. Jeder kann ein neues Projekt erstellen und es testen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| private procedure WMWindowPosChanging(var msg: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING; public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMWindowPosChanging(var Msg: TWMWindowPosChanging); begin Msg.WindowPos^.x := (Screen.Width - Width) div 2; inherited; end; |
Nun versuchen die Breite zu ändern.
Dieser Code verdeutlicht mein Problem am besten. Das Fenster bleibt waagerecht zentriert und läßt sich auch in der Breite ändern. Allerdings bleibt der Mauszeiger nicht synchron am Rand des Fensters, sondern vergrößert immer den Abstand. Der Grund ist mir bekannt. Da ich dafür sorge, daß das Fenster immer zentriert ist, bekommt die andere Seite ein Tel der Fensteränderung ab. Dadurch wird die Maus asynchron zum Rand.
Ich kriege das irgendwie nicht ausgeglichen.