Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form die „BorderStyle := bsNone“ ist, in der Größe ändern? (https://www.delphipraxis.net/100905-form-die-%84borderstyle-%3D-bsnone%93-ist-der-groesse-aendern.html)

Code 5. Okt 2007 11:18


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

OregonGhost 5. Okt 2007 11:26

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.

Code 5. Okt 2007 11:33

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
Zitat:

Zitat von OregonGhost
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.

Ja, zum verschieben habe ich:
Delphi-Quellcode:
  ReleaseCapture;
  SendMessage(Handle, WM_SYSCOMMAND, $F012, 0);
Aber mit vergrößern - Verkleinern komme ich nicht weiter.

Gruß
Klaus

s-off 5. Okt 2007 11:50

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
Zitat:

Zitat von Code
Ja, zum verschieben habe ich:
Delphi-Quellcode:
  ReleaseCapture;
  SendMessage(Handle, WM_SYSCOMMAND, $F012, 0);
Aber mit vergrößern - Verkleinern komme ich nicht weiter.

Weil Du den Code, den Du zum Verschieben nutzt, irgendwo kopiert, aber nicht verstanden hast, was er eigentlich tut.

Tipp: Setze Dich mit wParam auseinander...

OregonGhost 5. Okt 2007 11:52

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.

patti 5. Okt 2007 11:53

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
So gehts:

Delphi-Quellcode:
.
.
.
private
    { Private-Deklarationen }
    procedure NCHIT(var Msg : TWMNCHITTEST); message WM_NCHITTEST;
.
.
.
Und dann die eigentliche Prozedur:

Delphi-Quellcode:
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;
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) ;-)

P@Tti

Code 5. Okt 2007 12:24

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
Zitat:

Zitat von s-off
Weil Du den Code, den Du zum Verschieben nutzt, irgendwo kopiert, aber nicht verstanden hast, was er eigentlich tut.

Tipp: Setze Dich mit wParam auseinander...

Das habe ich mir aus der MSM gesucht. Was sollte ich daran verstehen? Es verschiebt Fenster, mehr brauche ich nicht wissen. Wenn ich mir einen Button auf eine Form ziehe, muss ich auch nicht unbedingt verstehen wie Delphi das macht. Das ist ja einer der Gründe warum ich mir Delphi zugelegt habe. Ich kenne mich allerdings noch nicht so gut aus wie Ihr und muss noch viel Erfahrungen sammeln.

Gruß
Klaus

Code 5. Okt 2007 12:26

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
Zitat:

Zitat von OregonGhost
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.

Habe ich versucht, ist zu abgehackt. Ruckelt beim ziehen.

Gruß
Klaus

OregonGhost 5. Okt 2007 12:27

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
Zitat:

Habe ich versucht, ist zu abgehackt. Ruckelt beim ziehen.
Ich hab das schon öfter in verschiedenen Fenstersystemen eingesetzt. Da ruckelt überhaupt nichts.

s-off 5. Okt 2007 12:27

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
Zitat:

Zitat von OregonGhost
Ob es auch so ein Syscommand gibt fürs Vergrößern, weiß ich jedoch nicht.

Wie bereits gesagt genügt es vollkommen, sich mit den Werten von wParam auseinander zu setzen.
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

_frank_ 5. Okt 2007 12:36

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
mhm, wie wärs denn damit:

Delphi-Quellcode:
  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;
Hast allerdings nen 3d-Rand, wenn dich dieser stören sollte, gibts wohl nur die Möglichkeit mit der manuellen Implementation.

HTH Frank

s-off 5. Okt 2007 12:50

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
Zitat:

Zitat von _frank_
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style:=Params.Style or WS_SIZEBOX;
end;
[/delphi]

Auch ne nette Möglichkeit :thumb:

Zitat:

Zitat von _frank_
Hast allerdings nen 3d-Rand, wenn dich dieser stören sollte, gibts wohl nur die Möglichkeit mit der manuellen Implementation.

Das stimmt allerdings nur zur Hälfte - setzt Du vorher noch
Delphi-Quellcode:
Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
hat sich das mit der 3D-Border erledigt :zwinker:

brinkee 5. Okt 2007 12:53

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
So habe ichs auch mal gemacht. Passt sehr gut...

_frank_ 5. Okt 2007 12:59

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
Zitat:

Zitat von s-off
Das stimmt allerdings nur zur Hälfte - setzt Du vorher noch
Delphi-Quellcode:
Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
hat sich das mit der 3D-Border erledigt :zwinker:

gut, hatte nur die normalen Styles durchsucht und probiert, aber so ists auch ok, auch wenns "sunken" ist

Gruß Frank

Code 5. Okt 2007 13:34

Re: Form die „BorderStyle := bsNone“ ist, in der Größe änder
 
Zitat:

Zitat von _frank_
Zitat:

Zitat von s-off
Das stimmt allerdings nur zur Hälfte - setzt Du vorher noch
Delphi-Quellcode:
Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
hat sich das mit der 3D-Border erledigt :zwinker:

gut, hatte nur die normalen Styles durchsucht und probiert, aber so ists auch ok, auch wenns "sunken" ist

Gruß Frank

Hi,

tolle Möglichkeit, klappt sehr gut. Mal eine dumme Frage, wie kommt man an so ein Code? Wo kann man da nachschauen?

Gruß
Klaus

_frank_ 5. Okt 2007 14:03

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: http://msdn2.microsoft.com/en-us/library/ms632603.aspx
Übersicht der window-Styles und der extended Styles.
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 MSDN-Library durchsuchenSetWindowLong manipulieren, klappt aber nicht beim WS_SIZEBOX (evtl ReCreate notwendig).

HTH Frank

patti 6. Okt 2007 11:36

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 (Programm selber gibts hier). Da stehen manchmal wirklich gute Tips und Tricks für alle Bereiche rund um Delphi (Multimedia, System, Grafik, Algorithmen,...).
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