![]() |
Form die „BorderStyle := bsNone“ ist, in der Größe ändern?
Hallo Alle!
Kann man eine Form die „BorderStyle := bsNone“ ist, trotzdem in der Größe ändern? Gruß Heike |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Aber ja. Du musst nur den entsprechenden Code selbst schreiben. Wenn du eine randlose Form hast und schon ans Vergrößern denkst, hast du vermutlich schon den Code zum Verschieben geschrieben. Der Code zum Vergrößern ist dann auch nicht viel komplizierter.
|
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Zitat:
Delphi-Quellcode:
Aber mit vergrößern - Verkleinern komme ich nicht weiter.
ReleaseCapture;
SendMessage(Handle, WM_SYSCOMMAND, $F012, 0); Gruß Klaus |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Zitat:
Tipp: Setze Dich mit wParam auseinander... |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Oh, ich dachte jetzt gar nicht an diesen Syscommand-Kram. Wie s-off schreibt, solltest du den Code erstmal verstehen lernen. Was ich jedoch meinte, ist ein popeliger Code, der beim MouseDown Position und IsMoving speichert, beim MouseUp IsMoving aufhebt und im MouseMove im Falle von IsMoving die Koordinaten aktualisiert. Das ist sehr einfach, sobald man es einmal raushat, und dann kannst du es im Prinzip ohne größere Schwierigkeiten auf das Vergrößern erweitern. Ob es auch so ein Syscommand gibt fürs Vergrößern, weiß ich jedoch nicht.
|
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
So gehts:
Delphi-Quellcode:
Und dann die eigentliche Prozedur:
.
. . private { Private-Deklarationen } procedure NCHIT(var Msg : TWMNCHITTEST); message WM_NCHITTEST; . . .
Delphi-Quellcode:
Mit der Konstante a kann eingestellt werden, ab welchem Abstand des Cursors zum Rand vergrößert/verkleinert werden kann. In diesem Beispiel wird nur auf unten, rechts und die Ecke rechts-unten überprüft. Andere Seiten/Ecken gehen äquivalent. (ungetestet, sollte aber gehen) ;-)
procedure TForm1.NCHIT(var Msg : TWMNCHITTEST);
var p : Tpoint; const a = 9; var r,u : integer; begin p.x := msg.XPos; p.y := msg.YPos; p := screentoclient(p); msg.Result := HTCLIENT; {-} r := self.width - a; u := self.height - a; {-} if p.x > r then msg.Result := HTRIGHT; if p.y > u then msg.Result := HTBOTTOM; if PtInRect(Rect(r,u,self.width,self.height),p) then msg.Result := HTBOTTOMRIGHT; end; P@Tti |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Zitat:
Gruß Klaus |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Zitat:
Gruß Klaus |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Zitat:
|
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Zitat:
Der Aufruf, ist der Gleiche, wie auch beim Verschieben der Form. Überprüfen, an welcher Position der Form sich der Cursor gerade befindet, macht man dann, wie schon von patti beschrieben über die WM_NCHITTEST |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
mhm, wie wärs denn damit:
Delphi-Quellcode:
Hast allerdings nen 3d-Rand, wenn dich dieser stören sollte, gibts wohl nur die Möglichkeit mit der manuellen Implementation.
TForm1 = class(TForm)
private { Private-Deklarationen } protected procedure CreateParams(var Params: TCreateParams); override; public { Public-Deklarationen } end; ... procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited; Params.Style:=Params.Style or WS_SIZEBOX; end; HTH Frank |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Zitat:
Zitat:
Delphi-Quellcode:
hat sich das mit der 3D-Border erledigt :zwinker:
Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
|
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
So habe ichs auch mal gemacht. Passt sehr gut...
|
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Zitat:
Gruß Frank |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Zitat:
tolle Möglichkeit, klappt sehr gut. Mal eine dumme Frage, wie kommt man an so ein Code? Wo kann man da nachschauen? Gruß Klaus |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
imho ist die Createparams-Methode da, um vor dem erstellen des Fensters dessen Infos zusammenzutragen.
im MSDN: ![]() Übersicht der ![]() ![]() in jedem dieser Flags ist (im Normalfall) ein Bit gesetzt, somit werden die flags per OR kombiniert. hat man das Struct (oder in delphi record genannt) zusammengebaut wird damit CreateWindow(ex) aufgerufen. der Rest ist probieren und googlen :) gerade die numerischen Werte der Konstanten kann manchmal nervig sein, wenn man nicht den PSDK mit CD-Größe runterladen will, nur um an 1,2 header-Dateien ranzukommen :) imho lassen sich die styles auch per ![]() HTH Frank |
Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
Ne andere Möglichkeit, an gute Code-Schnipsel zu kommen sind z.B. der "Easy Delphi Helper", die "Delphi-Source Library" und ne Delphi-Datenbank für Cuecards (
![]() Einfach mal danch googeln ;-) P@Tti |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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