Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Vergrößern der Form (https://www.delphipraxis.net/77988-vergroessern-der-form.html)

Andreas L. 27. Sep 2006 17:54


Vergrößern der Form
 
Hi,
ich habe mein Form auf BorderStyle:=bsNone. In der rechten, unteren Ecke habe ich ein kleines Bild. Wenn man drauf klickt und mit der Maus draufbleibt und diese bewegt soll sich das Form vergrößern. Ich wollte das im OnmouseDown-Ereignis so machen, geht aber nicht:
Delphi-Quellcode:
 Width := X - Left;
 Height := Y - Top;
Welche Möglichkeiten gibt noch?

Zacherl 27. Sep 2006 17:58

Re: Vergrößern der Form
 
Hi,

Delphi-Quellcode:
Top := Top - 100;
Left := Left - 100;
Width := Width + 100;
Hegiht := Height + 100;
Florian

Andreas L. 27. Sep 2006 18:23

Re: Vergrößern der Form
 
Zitat:

Zitat von Florian Bernd
Hi,

Delphi-Quellcode:
Top := Top - 100;
Left := Left - 100;
Width := Width + 100;
Hegiht := Height + 100;
Florian

Ähhhhhhh, hast du die Frage genau gelesen? Ich möchte die Form anhand der Cursor-Position vergrößern.

DGL-luke 27. Sep 2006 18:43

Re: Vergrößern der Form
 
Naja... dann musst du eben im OnMouseMove-Ereignis deines Sizegrip (btw ich bin mir zu 100% sicher dass es sowas schon gibt, inkl. frei auswählbarem bild) den Shiftstate auf vorhandensein von ssLeft überprüfen und falls alles zu deiner zufriedenheit ausfällt das hier machen:

Delphi-Quellcode:
Width := (Sender as TControl).ClientToParent(X,0).X + (Sender as TControl).Width - X;
Height := (Sender as TControl).CLientToParent(0,Y).Y +(Sender as TControl).Height - Y;
So sollte das hinhauen, und das hätte man auch selber rausfinden können sollen... extl. musst du beim clienttoparent die parameter noch durch point() jagen.

Zacherl 27. Sep 2006 18:52

Re: Vergrößern der Form
 
Zitat:

Ähhhhhhh, hast du die Frage genau gelesen?
Ja, aber deine Frage ging nicht so wirklich daraus hervor ...

Andreas L. 27. Sep 2006 19:00

Re: Vergrößern der Form
 
@Lukas: Erstmal Danke. Ich werde das gleich mal ausprobieren.

Ich habe jetzt das MSDN und die Delphi-Sources durchsucht. Ich habe ja bereits den folgenden Code:

Delphi-Quellcode:
   ReleaseCapture;
   perform(WM_SysCommand, $F012, 0);
Dieser lässt ja das Formular verschieben. Es gibt doch bestimmt aucht eine Message für Resize, oder? Leider habe ich bei den Konstanten in Controls.pas nicht finden können. Weiß die jemand? Das wäre wohl einfach und übersichtlicher... Danke

Andreas L. 27. Sep 2006 19:14

Re: Vergrößern der Form
 
Delphi-Quellcode:
 Width := (Sender as TControl).ClientToParent(point(X,0)).X + (Sender as TControl).Width - X;
 Height := (Sender as TControl).CLientToParent(point(0,Y)).Y +(Sender as TControl).Height - Y;
Wenn ich das ins OnMouseDown packe und während der Laufzeit am Eck ziehe passiert nichts. Hab ich was vergessen?

uligerhardt 27. Sep 2006 19:25

Re: Vergrößern der Form
 
Ich hab da was mit WM_HITTEST oder WM_NCHITTEST im Hinterkopf, wo man der Form vorgaukeln kann, der User hätte auf ihre Titelleiste oder Border geklickt. Die Form reagiert dann auch entsprechend mit Verschiebdn/Vergrößern. Googel halt mal.

HTH, Uli.

Andreas L. 27. Sep 2006 19:42

Re: Vergrößern der Form
 
Den Code von Lukas habe ich jetzt mal im OnMouseMove probiert. Dort geht er auch nicht.

Die Konstante WM_HITTEST ist ein undefinierter Bezeichner. Mit WM_NCHITTEST kompiliert Delphi. Jedoch funktioniert das resizen weder in OnMouseDown noch OnMouseOver. Ich google mal...

Schon seltsam, habe mir innerhalb 30 min. eine komplette Skinfähige GUI "from scratch" gebastelt. Alles funktioniert, nur nicht das SizeGrip. Muss ich wohl noch ein bisschen üben :???:

Andreas L. 27. Sep 2006 20:02

Re: Vergrößern der Form
 
Über Google habe ich nichts gefunden. Also habe ich jetzt im MSDN gesucht. Über WM_SYSCOMMAND werden sämtliche Fensteraktivitäten gesteuert. Ich bin auf den wParam SC_SIZE gestoßen. Habe mal fix folgendes im OnMouseDown des images eingebaut
Delphi-Quellcode:
   ReleaseCapture;
   perform(WM_SYSCOMMAND, SC_SIZE, 0);
Wenn ich dann klicke springt der Mauszeiger in die Mitte der Form und nichts passiert. Was habe ich da vergessen? Oder ist SC_SIZE gar der falsche wParam?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.
Seite 1 von 2  1 2      

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