Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Form dockt on Screen (https://www.delphipraxis.net/160831-form-dockt-screen.html)

barese 3. Jun 2011 09:08

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;

shmia 3. Jun 2011 09:19

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;

ConnorMcLeod 3. Jun 2011 09:20

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 ;-)

barese 3. Jun 2011 09:25

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.?

rollstuhlfahrer 3. Jun 2011 09:33

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

barese 3. Jun 2011 09:38

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.?

rollstuhlfahrer 3. Jun 2011 09:45

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

barese 3. Jun 2011 09:50

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.!

Gustav.R 3. Jun 2011 10:12

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.

barese 3. Jun 2011 10:14

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:

Satty67 3. Jun 2011 12:08

AW: Form dockt on Screen
 
Wäre das alles nicht durch die sowieso vorhandene Eigenschaft TForm.ScreenSnap einfacher zu lösen gewesen?

Stevie 3. Jun 2011 12:19

AW: Form dockt on Screen
 
Zitat:

Zitat von Satty67 (Beitrag 1104424)
Wäre das alles nicht durch die sowieso vorhandene Eigenschaft TForm.ScreenSnap einfacher zu lösen gewesen?

Und das gabs auch in Delphi 7 schon. Und mit SnapBuffer kannst einstellen, ab wievielen Pixeln es zuschnappt.

Gustav.R 3. Jun 2011 12:50

AW: Form dockt on Screen
 
Zitat:

Zitat von Stevie (Beitrag 1104432)
Zitat:

Zitat von Satty67 (Beitrag 1104424)
Wäre das alles nicht durch die sowieso vorhandene Eigenschaft TForm.ScreenSnap einfacher zu lösen gewesen?

Und das gabs auch in Delphi 7 schon. Und mit SnapBuffer kannst einstellen, ab wievielen Pixeln es zuschnappt.

Ganz genau!

Daher bitte Problemlösungen auf gestellte Fragen nur noch für Leute, die mindestens D2010 Architect oder höher haben...

Satty67 3. Jun 2011 12:56

AW: Form dockt on Screen
 
Zitat:

Zitat von Gustav.R (Beitrag 1104442)
Ganz genau!

1) Das Problem wurde ja anhand des Ansatzes des TS gelöst.
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.

Gustav.R 3. Jun 2011 13:05

AW: Form dockt on Screen
 
Such(t)e gerade in meine D7 Personal nach "SnapBuffer".

Hast recht, verstehe es auch nicht!

barese 4. Jun 2011 09:22

AW: Form dockt on Screen
 
@shmia .. du hast recht gehabt!!

Zitat:

Wichtig ist auch, dass du nicht über die globale Variable Form1 auf die Daten zugreifst.

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.

Sir Rufo 4. Jun 2011 11:20

AW: Form dockt on Screen
 
Zitat:

Zitat von barese (Beitrag 1104552)
@shmia .. du hast recht gehabt!!

Zitat:

Wichtig ist auch, dass du nicht über die globale Variable Form1 auf die Daten zugreifst.

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.

Verstehe ich zwar nicht wozu das gut sein soll einen rein intern benötigten Wert (boolean sollte auch reichen) in einem Edit-Feld auf dem Formular zu speichern.
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;

Stevie 4. Jun 2011 14:58

AW: Form dockt on Screen
 
Zitat:

Zitat von Gustav.R (Beitrag 1104448)
Such(t)e gerade in meine D7 Personal nach "SnapBuffer".

Hast recht, verstehe es auch nicht!

Zitat aus What's new in Delphi 7:
Zitat:

The VCL version of TCustomForm has two new properties, ScreenSnap and
SnapBuffer, which control whether a form snaps to the edge of the screen when
the form is moved.

barese 5. Jun 2011 09:33

AW: Form dockt on Screen
 
@Sir Rufo...

...goil man das ist sogar noch besser.!

big thx an dich.

Sir Rufo 5. Jun 2011 09:43

AW: Form dockt on Screen
 
Zitat:

Zitat von barese (Beitrag 1104645)
@Sir Rufo...

...goil man das ist sogar noch besser.!

big thx an dich.

Davon haben alle die ganze Zeit gesprochen, ich habe nur deine Nase stärker heruntergedrückt :mrgreen:

barese 5. Jun 2011 09:49

AW: Form dockt on Screen
 
Zitat:

Davon haben alle die ganze Zeit gesprochen, ich habe nur deine Nase stärker heruntergedrückt

ja.. das wahr auch nötig bin neu im Thema MagnetSnap. :-D

Satty67 5. Jun 2011 18:24

AW: Form dockt on Screen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1104647)
Davon haben alle die ganze Zeit gesprochen

Nicht alle...

...einige verstehen nicht, warum man eine bestehende Funktion nochmal einführen will ;)

barese 6. Jun 2011 09:27

AW: Form dockt on Screen
 
Zitat:

...einige verstehen nicht, warum man eine bestehende Funktion nochmal einführen will
..Sir Rufos Beispiel war das einzige was mir wirklich geholfen hat.

Ü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 16:47 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