![]() |
Platzieren von Formular
Hallo,
ich melde mich mal wieder! Ich möchte mein Formular rechts über der Taskleiste platzieren. Die erforderlichen Werte, sprich Höhe der Taskleiste und Formular usw., habe ich schon. Mir fehlt nur noch eine Formel, wie ich herausfinden kann, bis auf welche Pixelzahl das Formular heraufgeschoben werden muss, das es Pixelgenau mit der Taskleiste abschließt. Hier mal mein bisheriger Code:
Delphi-Quellcode:
Die Prozedur ist eine Timerprozedur. die Variable h ist eine globale Variable! Damit erreiche ich einen Effekt, dass das Formular von unten eingeschoben wird.
procedure TForm6.TimerTimer(Sender: TObject);
var tl: HWnd; rah: TRect; begin tl := FindWindow('Shell_TrayWnd', nil); GetWindowRect(tl, rah); Form6.Left := Screen.Width - Form6.Width - 5; Form6.Top := Screen.Height - h; h := h+10; //Pixelanzahl, die nach oben gehen if Form6.Top >= Form6.Height+rah.Top then Timer.Enabled := false; end; Gruß kabuco |
Re: Platzieren von Formular
Hallo,
ich hab das selbe mal gemacht, nämlich so:
Delphi-Quellcode:
//Fenster an die rechte untere ecke positionieren
with MainForm do begin Left := Screen.WorkAreaWidth - Width; Top := Screen.WorkAreaHeight - Height; end; |
Re: Platzieren von Formular
Hallo Helmi,
die Positionierung des Formulars funktioniert schon. Ich bräuchte nur eine funktionierende If-Abfrage, die mir den Timer anhält, wenn das Formular die gewünschte Position erreicht hat. Mir ist nur leider bis jetzt noch nicht klar, wie ich diesen Wert abfragen muss, damit es funktioniert. Gruß kabuco |
Re: Platzieren von Formular
Und was machst du, wenn die Taskleiste oben bzw. links oder rechts ist? ;)
|
Re: Platzieren von Formular
Tja darüber habe ich mir noch keine gedanken gemacht. Das kann ich ja mit WorkArea machen!
Wie kann ich denn berechnen, auf wieviele Pixel ich das Formular hochschieben muss, dass es mit der WOrkArea abschließt und dies dann noch in eine if-Abfrage setze? Gruß kabuco |
Re: Platzieren von Formular
Hallo,
vielleicht helfen dir der folgende Link weiter: ![]() Laut meines Wissens gibt "Screen.WorkAreaWidth" bzw. "Screen.WorkAreaHeight" immer nur die mögliche Breite und Höhe des Desktop an (Taskbar ist schon abgezogen). du müsstest halt rausfinden, wo sich die Taskbar befindet (siehe link) und dann halt dann deine Form, je nach Position der TaskBar, an die dementsprechende (von dir gewollte) Stelle positionieren. so in etwa:
Delphi-Quellcode:
with Form1 do
begin case TaskbarPosition of unten: begin Left := Screen.WorkAreaWidth - Width; Top := Screen.WorkAreaHeight - Height; end; oben: begin Left := 0; Top := 0; end; links: begin //Variante 1 (Form links oben) Left := 0; Top := 0; //Variante 2 (Form links unten) Left := 0; Top := Screen.WorkAreaHeight - Height; end; rechts: begin //Variante 1 (Form links oben) Left := Screen.WorkAreaWidth - Width; Top := 0; //Variante 2 (Form rechts unten) Left := Screen.WorkAreaWidth - Width; Top := Screen.WorkAreaHeight - Height; end; end; [edit] Da ich heute meinen guten Tag habe, hab ich mal etwas weiter gearbeitet. Vielleicht hilft dir ja folgender Code. Du brauchst dafür nen Timer, im OI Enabled = false und dann der Code:
Delphi-Quellcode:
Der Code zum bewegen musst selber einfügen.
type
TTaskBarPos = (_TOP, _BOTTOM, _LEFT, _RIGHT, _NONE); function GetTaskBarPos: TTaskBarPos; var hTaskbar: HWND; T: TRect; scrW, scrH: Integer; begin hTaskBar := FindWindow('Shell_TrayWnd', nil); If hTaskbar <> 0 then begin GetWindowRect(hTaskBar, T); ScrW := Screen.Width; ScrH := Screen.Height; If (T.Top > scrH div 2) and (T.Right >= scrW) then Result := _BOTTOM else If (T.Top < scrH div 2) and (T.Bottom <= scrW div 2) then Result := _TOP else If (T.Left < scrW div 2) and (T.Top <= 0) then Result := _LEFT else // the last "if" is not really needed If T.Left >= ScrW div 2 then Result := _RIGHT; end; end; procedure TForm1.Timer1Timer(Sender: TObject); var TaskBarPos: TTaskBarPos; Form_Left, Form_Top: Integer; begin TaskBarPos := GetTaskBarPos; case TaskBarPos of _LEFT : begin //Variante 1 (Form links oben) Form_Left := 0; Form_Top := 0; //Variante 2 (Form links unten) //Form_Left := 0; //Form_Top := Screen.WorkAreaHeight - Height; //Form bewegen {*** HIER FEHLT CODE ***} //Position überprüfen If (Form1.Top <= Form_Top) and (Form1.Left <= Form_Left) then Timer1.Enabled := false; end; _TOP : begin Form_Left := 0; Form_Top := 0; //Form bewegen {*** HIER FEHLT CODE ***} //Position überprüfen If (Form1.Top <= Form_Top) and (Form1.Left <= Form_Left) then Timer1.Enabled := false; end; _RIGHT : begin //Variante 1 (Form links oben) Form_Left := Screen.WorkAreaWidth - Width; Form_Top := 0; //Variante 2 (Form rechts unten) //Form_Left := Screen.WorkAreaWidth - Width; //Form_Top := Screen.WorkAreaHeight - Height; //Form bewegen {*** HIER FEHLT CODE ***} //Position überprüfen If (Form1.Top <= Form_Top) and (Form1.Left >= Form_Left) then Timer1.Enabled := false; end; _BOTTOM : begin Form_Left := Screen.WorkAreaWidth - Form1.Width; Form_Top := Screen.WorkAreaHeight - Form1.Height; //Form bewegen {*** HIER FEHLT CODE ***} //Position überprüfen If (Form1.Top >= Form_Top) and (Form1.Left >= Form_Left) then Timer1.Enabled := false; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 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-2025 by Thomas Breitkreuz