Thema: Delphi Titelleiste!

Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3
  Alt 17. Feb 2003, 09:18
Möglich ist alles. Die Farbe und Größe kannst du nur global über die Bildschirmeinstellungen ändern. Das ist aber sicherlich nicht dein Ziel.

Die andere Möglichkeit mit der eigenen Titelleiste ist da schon besser.

Hier mal ein kleiner Code:
Delphi-Quellcode:
  TForm1 = class(TForm)
    PanelFormMover: TPanel;
...
    { Private-Deklarationen }
    FMoveStartPos: TPoint;
    FFormMoving: Boolean;
  end;

...

procedure TForm1.PanelFormMoverMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    FFormMoving := True;
    FMoveStartPos := Point(X, Y);
  end;
end;

procedure TForm1.PanelFormMoverMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if FFormMoving then
    SetWindowPos(Handle, 0,
                 Left + (X - FMoveStartPos.X),
                 Top + (Y - FMoveStartPos.Y),
                 0, 0, SWP_NOSIZE or SWP_NOZORDER);
end;

procedure TForm1.PanelFormMoverMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    FFormMoving := False;
end;
Das Panel PanelFormMover kannst du an jeder beliebigen Stelle des Formulars setzen. Du kannst anstatt eines Panels auch jede andere Komponente verwenden, die die Ereignisse OnMouseDown, OnMouseMove und OnMouseUp unterstützt.


Die Lösung über die Botschaft WM_NCHITTEST funktioniert nicht im Zusammenhang mit Controls, die das Verschieben möglich machen sollen, da WM_NCHITTEST nur gesendet wird, wenn der Mousecursor direkt über dem Formular ist, und das ist er bei einer darauf liegenden Komponente eben nicht.
  Mit Zitat antworten Zitat