![]() |
bsNone Form verschieben und Größe ändern
Liste der Anhänge anzeigen (Anzahl: 2)
Sobald eine Form der BorderStyle auf bsNone gestellt wird, lässt sich die Form (!) zur Laufzeit (!) nicht so einfach verschieben und vergrößern. Eine Lösungen findet ihr hier:
(Auf die Lösungen bin ich zum Teil durch Mazel ( ![]() Lösung (Mit Form-Designer) An allen Ränder der Form ein TImage positionieren (Align = alTop;alLeft;alRight;alBottom). (Das ganze kann man auch mit Labels machen, hier nur AutoSize auf false; Caption auf '' und transparent auf true) Außerdem noch ein kleineres Image (bzw. Label), was auch alTop ist, aber höher als das 1. ist. (das ist der Rand zum Vergrößern, das andere ist die Titelzeile (falls benötigt)). Die Dicke aller ungefähr auf 5 Pixel einstellen. Die Titelzeile natürlich breiter wählen. Dann noch in alle Ecken ein Image (bzw. Label), welches quadratisch ist und nicht allzu groß (14x14). (Diese Eck-Images müssen im OnResize Ereignis noch in die Ecken gebracht werden!!
Delphi-Quellcode:
)
procedure TForm1.FormResize(Sender: TObject);
begin Rechtsunten.Left := Form1.ClientWidth - Rechtsunten.Width; Rechtsunten.Top := Form1.ClientHeight - Rechtsunten.Height; RechtsOben.Left := Form1.ClientWidth - Rechtsoben.Width; RechtsOben.Top := 0; LinksUnten.Left := 0; LinksUnten.Top := Form1.ClientHeight - LinksUnten.Height; end; Im Ereignis OnMouseDown der Titelzeile:
Delphi-Quellcode:
Beim linken Image in OnMouseDown:
//Fängt alle Mausereignisse ab
ReleaseCapture; // mit TWinCotrol verschieben, $F012 verschiebt die Form Form.Perform(WM_SYSCOMMAND, $F012, 0);
Delphi-Quellcode:
Die Weiteren Werte des zweiten Parameters erklärt Mazel
//Fängt alle Mausereignisse ab
ReleaseCapture; Form1.Perform(WM_SYSCOMMAND, $F001, 0); ![]() Zitat:
Das Optimale an den Images ist, das man gleich ein Bitmap für den Rand (Der Rand ist ja bei bsNone auch verschwunden) und den Maus-Cursor festlegen kann. |
Re: bsNone Form verschieben und Größe ändern
die Lösung mit den Images ist sehr unschön. Denn genau dafür gibt es die Message WM_NCHITTEST. Wenn man diese behandelt kann man bestimmen ob und wo das größe ändern und verschieben möglich sein soll.
Delphi-Quellcode:
begin
DefaultHandler(Msg); with Msg do // TOP if PtInRect(Rect(0, 0, Width, 4), Point((XPos - Left), (YPos - Top))) then RESULT := htTop // LEFT else if PtInRect(Rect(0, 0, 4, Height), Point((XPos - Left), (YPos - Top))) then RESULT := htLeft // BOTTOM else if PtInRect(Rect(0, Height - 4, Width, Height), Point((XPos - Left), (YPos - Top))) then RESULT := htBottom // RIGHT else if PtInRect(Rect((Width - 4), 0, Width, Height), Point((XPos - Left), (YPos - Top))) then RESULT := htRight // TOPLEFT else if PtInRect(Rect(0, 0, 4, 4), Point((XPos - Left), (YPos - Top))) then RESULT := htTopLeft // TOPRIGHT else if PtInRect(Rect((Width - 4), 0, Width, 4), Point((XPos - Left), (YPos - Top))) then RESULT := htTopRight //BOTTOMLEFT else if PtInRect(Rect(0, (Height - 30), 30, Height), Point((XPos - Left), (YPos - Top))) then RESULT := htBottomLeft // BOTTOMRIGHT else if PtInRect(Rect((Width - 30), (Height - 30), Width, Height), Point((XPos - Left), (YPos - Top))) then RESULT := htBottomRight // Bewegen ohne Titlebar //else if RESULT = HTCLIENT then // RESULT := htCaption else inherited; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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