Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Positionierung/Verankerung von Buttons usw.


GuaAck - Mi 15.01.14 23:09
Titel: Positionierung/Verankerung von Buttons usw.
Liebe Experten,

ich kämpfe (und umschiffe) seit laengerer Zeit folgendes Problem:

Ein Button (oder was sonst) soll in der linken unteren Ecke meines MainForms sein. Ich habe für den Button den Anchor auf left/bottom gesetzt. Das mainform wird mit windowsstate = wsnormal gestartet. Wenn ich dann oben rechts im Fenster das Maximizefeld anclicke, dann gibt es das Vollbild mit dem Button unten links, bestens.

Wenn ich aber gleich mit Vollbild starten will, also im Delphi Objectinspector windowsstate=wsmaximized setze, dann ist der Button nicht mehr am Rand.

Ich finde schon Work-Arounds, aber wie macht man das richtig?

Grüße GuaAck


Delete - Mi 15.01.14 23:25

Liegt vielleicht an der Taskleiste..
Es macht einen Unterschied, ob die Creationphase des Fensters schon vorbei ist.

Vielleicht so:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormShow(Sender: TObject);
begin
Form1.WindowState:= wsMaximized;
end;


Oder so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
function getHeightOfTaskBar : integer;
var hTaskBar:HWND;
    rect : TRect;
begin
     hTaskbar := FindWindow('Shell_TrayWnd'Nil);
     if hTaskBar<>0 then
        GetWindowRect(hTaskBar, rect);

     Result:=rect.bottom - rect.top;
end;

procedure Maximizer; 
begin
    if Form1.WindowState=wsNormal then
       begin
        Form1.WindowState:=wsMaximized;
        Form1.SetBounds(0,0,screen.Width,screen.Height-getHeightOfTaskBar);
       end
       else
       begin
         Form1.WindowState:=wsNormal;
       end;

   //    ShowTrayWindow;
end;


jaenicke - Mi 15.01.14 23:58

Wenn das bei dir nicht geht, ist das ein Fehler in deiner Delphiversion. Bis Delphi 7 gab es an der Stelle ja immer wieder Probleme durch solche Fehler...

Ein Beispiel, in XE5 kompiliert, liegt inkl. Quelltext im Anhang.


GuaAck - Do 16.01.14 20:33

Danke,

einfach vor dem typischen Application.Run ein Form1.windowsstate :=wsmaximized, und nun geht es prima.

Gruß
GuaAck