Thema: Delphi Platzieren von Formular

Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Platzieren von Formular

  Alt 5. Sep 2006, 15:19
Hallo,

vielleicht helfen dir der folgende Link weiter:

Position der Taskbar rausfinden

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:
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;
Der Code zum bewegen musst selber einfügen.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat