![]() |
Form dockt on Screen
Hallo Coders !
Ich benutze diesen Code um meine Form an den Screen zu docken. Funzt auch super auf jeder Auflösung, doch möchte ich jetzt die Procedur mit einem Button aktivieren und deaktivieren können und weiss nicht wie.. ...oder geht denn das überhaupt.? Hilfe Leute...
Delphi-Quellcode:
private
{ Private-Deklarationen } procedure OnMove(var aMsg:TWMMove);message WM_MOVE;
Delphi-Quellcode:
procedure TForm1.OnMove(var aMsg:TWMMove);
begin if Form1.Left < 20 then Form1.Left:=0; if Form1.Top < 20 then Form1.Top:=0; if Form1.Left+Form1.Width > Screen.Width-20 then Form1.Left:=Screen.Width-Form1.Width; if Form1.Top+Form1.Height > Screen.Height-20 then Form1.Top:=Screen.Height-Form1.Height; end; |
AW: Form dockt on Screen
Du brauchst einfach eine Boolean-Variable (im Bereich private deines Form)
mit dem du das "Magnetic-Snap" Verhalten an- und abschalten kannst. Wichtig ist auch, dass du nicht über die globale Variable Form1 auf die Daten zugreifst.
Delphi-Quellcode:
procedure TForm1.OnMove(var aMsg:TWMMove);
begin if not FMagneticSnap then Exit; if Left < 20 then Left:=0; if Top < 20 then Top:=0; if Left+Width > Screen.Width-20 then Left:=Screen.Width-Width; if Top+Height > Screen.Height-20 then Top:=Screen.Height-Height; end; |
AW: Form dockt on Screen
Die Form bekommt ein boolesches property.
Der Button verändert dieses property. Die OnMove-Prozedur nimmt auf dieses property Rücksicht. Oder? Ups, zu spät ;-) |
AW: Form dockt on Screen
@ConnorMcLeod .. ich glaube ich bin mir nicht sicher.
@shmia.. sieht gut aus aber wie kann ich diese Procedur für ein Button anwenden.? |
AW: Form dockt on Screen
Also: Die Form hat schon diese Funktion: Das nennt sich dann ScreenSnap.
Für den Button könntest du es mit Button.Parent versuchen. Bernhard |
AW: Form dockt on Screen
@Bernhard...
mit Button.Parent .. kenne ich mich leider nicht aus. Man jetzt bin ich überfordert. :( Hast du vieleicht ein Beispiel für mich.? |
AW: Form dockt on Screen
Du willst doch wissen, ob dein Button sich dem Rand von der Form befindet. Da jetzt die Form nicht unbedingt das Elter von dem Button sein muss, sondern dass z.B. auch ein Panel Elter sein darf, müsste man sich mit Hilfe von Button.Parent das TControl holen, gegen welches man prüfen muss.
Heißt: Du ersetzt in deinem Code die Form mit dem Button und weil du nicht unbedingt wissen musst, wo der Button drauf liegt, ersetzt du Screen mit "Button.Parent". Das sollte dann schon reichen. Bernhard |
AW: Form dockt on Screen
@Bernhard
Missverständniss .. ich will nur mit dem Button die Dock on Screen funktion ausschalten, so das die Form wieder über de screen gezogen werden kann mehr nicht.! |
AW: Form dockt on Screen
In dein Buttonclick Shimas
FMagneticSnap := not FMagneticSnap; rein und beim Initialisieren der Form entweder FMagneticSnap := true oder FMagneticSnap := false rein. |
AW: Form dockt on Screen
@Gustav.R ... goil jau.
jetzt kann ich den Button anwenden. Und das auch noch mit dein ersten Beitrag cool. :thumb: |
AW: Form dockt on Screen
Wäre das alles nicht durch die sowieso vorhandene Eigenschaft TForm.ScreenSnap einfacher zu lösen gewesen?
|
AW: Form dockt on Screen
Zitat:
|
AW: Form dockt on Screen
Zitat:
Daher bitte Problemlösungen auf gestellte Fragen nur noch für Leute, die mindestens D2010 Architect oder höher haben... |
AW: Form dockt on Screen
Zitat:
2) Der hinterhergeworfene Gegenvorschlag passt zu seinem BS DS (Delphi 7) 3) Ich glaube ich verstehe den Post, auf den ich gerade antworte, nicht wirklich. |
AW: Form dockt on Screen
Such(t)e gerade in meine D7 Personal nach "SnapBuffer".
Hast recht, verstehe es auch nicht! |
AW: Form dockt on Screen
@shmia .. du hast recht gehabt!!
Zitat:
sehr wichtiger satz den du mir da geschickt hast [Danke].!! ..sobal ich compiliere gibt es ein crash, aber ich hab es mit ein String gelöst. Beim start prüf ich einfach einen String in einer EditBox oder einer anderen Componenten Box und dann ging es wunderbar.. :wink: danke noch mal. |
AW: Form dockt on Screen
Zitat:
Was hier gemeint wurde, ist eine private Variable für das Formular und das geht so:
Delphi-Quellcode:
type
TForm1 = class( TForm) ... private FMagneticSnap : Boolean; public // Falls man von aussen das auch steuern möchte dann als Property veröffentlichen property MagneticSnap : Boolean read FMagneticSnap write FMagneticSnap; end; procedure TForm1.Button1OnClick( Sender : TObject ); begin // property benutzen MagneticSnap := not MagneticSnap; // oder wenn die property nicht benutzt gewünscht ist, dann direkt auf die Variable zugreifen FMagneticSnap := not FMagneticSnap; // aber eins von beiden reicht :o) end; procedure TForm1.OnCreate( Sender : TObject ); begin FMagneticSnap := True; // oder auch False, je nachdem, was halt default gewünscht ist Schnappi oder nicht end; procedure TForm1.OnMove(var aMsg:TWMMove); begin if FMagneticSnap then begin // hier kommt jetzt Schnappi rein end; end; |
AW: Form dockt on Screen
Zitat:
![]() Zitat:
|
AW: Form dockt on Screen
@Sir Rufo...
...goil man das ist sogar noch besser.! big thx an dich. |
AW: Form dockt on Screen
Zitat:
|
AW: Form dockt on Screen
Zitat:
ja.. das wahr auch nötig bin neu im Thema MagnetSnap. :-D |
AW: Form dockt on Screen
Zitat:
...einige verstehen nicht, warum man eine bestehende Funktion nochmal einführen will ;) |
AW: Form dockt on Screen
Zitat:
Über eine bestehende funktion wusste ich leider nicht bescheid. :( ..und würde gern mehr davon wissen. :? Sir Rufo nochmals danke. :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 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