Autor Beitrag
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Mi 06.05.09 16:07 
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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
  private
    { Private-Deklarationen }
    procedure WMWindowPosChanging(var msg: TWMWindowPosChanging);
      message WM_WINDOWPOSCHANGING;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

//Reagiert wenn die Fensterposition/Größe verändert wird
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.

_________________
Gruß
Martin
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 06.05.09 23:29 
Hi, du musst das anders machen:

dX soll der Wert sein, um den das Fenster Breiter gezogen wird.
ausblenden Delphi-Quelltext
1:
2:
Form.Width:=Form.Width+2*dX;
Form.Left:=Form.Left-dX;

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)