Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fenster am Rand andocken (https://www.delphipraxis.net/120418-fenster-am-rand-andocken.html)

Christian18 10. Sep 2008 20:59


Fenster am Rand andocken
 
Hallo,

ich habe da mal eine Frage. Wie kann ich ein Fenster am Rand andocken? Also ganz konkret meine ich, dass man das Fenster nicht über den Rand oben und links hinaus ziehen kann.

Ich hoffe ich kommte kurz erklären, was ich meine.

MFG Christian18

Meflin 10. Sep 2008 21:01

Re: Fenster am Rand andocken
 
Andocken kannst du ein Fenster einfach über die eigenschaft ScreenSnap von TForm. Ich glaube über SnapBuffer kann man definieren, ab welchem Abstand das Formular andockt. Bin mir aber jetzt nicht ganz sicher wie das heißt ;)

Dann kann man das Formular aber trotzdem noch außerhalb des Desktops schieben... Da musst du wohl eine manuelle überprüfung vornehmen :gruebel:

Christian18 10. Sep 2008 21:44

Re: Fenster am Rand andocken
 
Hallo,

ok, das funktioniert schon mal super. Und wie kann mache ich dass, damit ich ein fenster nicht über den rand hinaus schieben kann?

Wenn ich folgendes mache, dass bilkt das fenster immer.
Delphi-Quellcode:
if Form1.Left <= 0 then Form1.Left:=0;

MFG Christian18

toms 10. Sep 2008 22:01

Re: Fenster am Rand andocken
 
Zitat:

Zitat von Christian18
Hallo,

Und wie kann mache ich dass, damit ich ein fenster nicht über den rand hinaus schieben kann?

Wenn ich folgendes mache, dass bilkt das fenster immer.
Delphi-Quellcode:
if Form1.Left <= 0 then Form1.Left:=0;



Delphi-Quellcode:
  private
    { Private declarations }
    procedure WMMoving(var msg: TWMMoving); message WM_MOVING;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMMoving(var msg: TWMMoving);
var
  screenArea: TRect;
begin
  screenArea := Screen.WorkareaRect;
  if msg.lprect^.Left < screenArea.left then
    OffsetRect(msg.lprect^, screenArea.Left - msg.lpRect^.Left, 0);
  if msg.lprect^.Top < screenArea.top then
    OffsetRect(msg.lprect^, 0, screenArea.Top - msg.lprect^.Top);
  if msg.lprect^.Right > screenArea.Right then
    OffsetRect(msg.lprect^, screenArea.right - msg.lprect^.Right, 0);
  if msg.lprect^.Bottom > screenArea.Bottom then
    OffsetRect(msg.lprect^, 0, screenArea.bottom - msg.lprect^.Bottom);
  inherited;
end;

Falls dein Delphi TWMMoving nicht erkennt dieses so deklarieren:

Delphi-Quellcode:
type
 TWMMoving = record
    Msg: Cardinal;
    fwSide: Cardinal;
    lpRect: PRect;
    Result: Integer;
  end;
( Quellangabe )

_frank_ 11. Sep 2008 18:23

Re: Fenster am Rand andocken
 
bedenke die mögliche Existenz von mehreren Monitoren :evil:

mit der von Toms genannten Methode kann ich das Fenster nämlich nur auf dem einem (den Primär-) Monitor verwenden.

screen-area bildet nur den ersten Monitor ab...da mein Primärmonitor rechts steht, sind die Positionswerte auf dem zweitmonitor negativ.

Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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