![]() |
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:
Welche Möglichkeiten gibt noch?
Width := X - Left;
Height := Y - Top; |
Re: Vergrößern der Form
Hi,
Delphi-Quellcode:
Florian
Top := Top - 100;
Left := Left - 100; Width := Width + 100; Hegiht := Height + 100; |
Re: Vergrößern der Form
Zitat:
|
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:
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.
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; |
Re: Vergrößern der Form
Zitat:
|
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:
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
ReleaseCapture;
perform(WM_SysCommand, $F012, 0); |
Re: Vergrößern der Form
Delphi-Quellcode:
Wenn ich das ins OnMouseDown packe und während der Laufzeit am Eck ziehe passiert nichts. Hab ich was vergessen?
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; |
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. |
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 :???: |
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:
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?
ReleaseCapture;
perform(WM_SYSCOMMAND, SC_SIZE, 0); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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 by Thomas Breitkreuz