Wie verschiebe ich ein randloses Formular? Ich habe versucht, im Internet zu suchen, aber nichts. Danke vielmals.Formular ohne Rahmen bewegen
Antwort
Sie können eine Form unter Verwendung eines beliebigen ziehen Steuerelement enthalten, einschließlich sich selbst.
Mithilfe des folgenden Beispiels können Sie ein Formular verschieben, indem Sie auf seine Zeichenfläche klicken und ziehen. Sie können das gleiche mit einem Panel auf dem Formular tun, indem Sie denselben Code in das MouseDown-Ereignis des Panels einfügen, mit dem Sie Ihre eigene Pseudo-Titelleiste erstellen können.
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DRAGMOVE = $F012;
begin
if Button = mbLeft then
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;
end;
Danke, dieser Code ist besser! –
Wenn Sie das Fenster mit der Maus ziehen möchten, können Sie die Nachrichtenbehandlung WM_NCHITTEST
überschreiben und HTCAPTION
für die Ziehregion zurückgeben. Die unten wird das Fenster innerhalb der oberen 30 Pixel für insance ziehen:
type
TForm1 = class(TForm)
private
protected
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
end;
..
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
var
Pt: TPoint;
begin
Pt := ScreenToClient(SmallPointToPoint(Message.Pos));
if Pt.Y < 30 then
Message.Result := HTCAPTION
else
inherited;
end;
+1 dies ist der Weg es zu tun –
@ David: In letzter Zeit bin ich etwas skeptisch zu diesem Ansatz, weil Sie im Grunde sagen, das Betriebssystem * das gesamte Formular ist die Beschriftung des Fensters *, die möglicherweise nicht wirklich sei semantisch wahr. (Nun, in Sertacs Code sind vielleicht die ersten 30 Pixel * tatsächlich die Beschriftung, aber im Allgemeinen ist dies möglicherweise nicht wahr.) –
@andreas Haben Sie einen konkreten Grund, dies abzulehnen? Was sind die Schattenseiten? Dies ist der Standardansatz. –
kann hier sein: http://delphi.about.com/od/windowsshellapi/a/dragnocaption.htm – philnext
Duplizieren von [C++ Builder: Erstellen Sie ein TForm mit Border bsNone, die dennoch beweglich ist und der Größe veränderbar ] (http://stackoverflow.com/questions/7178030/cbuilder-create-a-tform-with-borderstyle-bsnone-that-is-rethe-movable) - dieser Code ist für C++ Builder, aber es ist immer noch der dieselbe VCL! Es sollte trivial sein, zu Delphi zu wechseln. –