AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Platzieren von Formular

Ein Thema von kabuco · begonnen am 3. Sep 2006 · letzter Beitrag vom 5. Sep 2006
Antwort Antwort
kabuco
(Gast)

n/a Beiträge
 
#1

Platzieren von Formular

  Alt 3. Sep 2006, 17:42
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:
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;
Die Prozedur ist eine Timerprozedur. die Variable h ist eine globale Variable! Damit erreiche ich einen Effekt, dass das Formular von unten eingeschoben wird.

Gruß kabuco
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

Re: Platzieren von Formular

  Alt 3. Sep 2006, 18:00
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;
mfg
Helmi

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

n/a Beiträge
 
#3

Re: Platzieren von Formular

  Alt 4. Sep 2006, 18:03
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Platzieren von Formular

  Alt 4. Sep 2006, 18:09
Und was machst du, wenn die Taskleiste oben bzw. links oder rechts ist?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
kabuco
(Gast)

n/a Beiträge
 
#5

Re: Platzieren von Formular

  Alt 5. Sep 2006, 12:48
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
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

Re: Platzieren von Formular

  Alt 5. Sep 2006, 14: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz