Einzelnen Beitrag anzeigen

Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#1

bsNone Form verschieben und Größe ändern

  Alt 25. Mär 2007, 12:27
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 (hier gekommen)

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:
//Fängt alle Mausereignisse ab
  ReleaseCapture;
  // mit TWinCotrol verschieben, $F012 verschiebt die Form
  Form.Perform(WM_SYSCOMMAND, $F012, 0);
Beim linken Image in OnMouseDown:
Delphi-Quellcode:
  //Fängt alle Mausereignisse ab
  ReleaseCapture;
  
  Form1.Perform(WM_SYSCOMMAND, $F001, 0);
Die Weiteren Werte des zweiten Parameters erklärt Mazel hier.
Zitat von Mazel:
$F001 - ändert Größe nach Links
$F002 - ändert Größe nach Rechts
$F003 - ändert Größe nach Oben
$F006 - ändert Größe nach Unten

$F004 - ändert Größe nach Links, Oben
$F005 - ändert Größe nach Rechts, Oben
$F007 - ändert Größe nach Links, Unten
$F008 - ändert Größe nach Rechts, Unten
Somit die anderen Images das Ereignis OnMouseDown abändern.

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.
Angehängte Dateien
Dateityp: zip beispielprojekt_141.zip (4,6 KB, 100x aufgerufen)
Dateityp: zip beispielprojekt__exe__881.zip (202,7 KB, 106x aufgerufen)
  Mit Zitat antworten Zitat