Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form zur Laufzeit verschieben bei BorderStyle: bsNone? (https://www.delphipraxis.net/38883-form-zur-laufzeit-verschieben-bei-borderstyle-bsnone.html)

mlspider 25. Jan 2005 16:49


Form zur Laufzeit verschieben bei BorderStyle: bsNone?
 
Hallo,

wieder mal ne dämliche Frage. Wie kann mann ein Fenster das die Eigenschaft BorderStyle: bsNone hat, zur Laufzeit mit der Maus hin und her ziehen?

Danke

gmarts 25. Jan 2005 16:55

Re: Form zur Laufzeit verschieben bei BorderStyle: bsNone?
 
Hallo,
dazu gibts sicher hier im Forum schon was, aber das hatte ich gerade bei der Hand: Klick

MfG GM

mlspider 25. Jan 2005 16:57

Re: Form zur Laufzeit verschieben bei BorderStyle: bsNone?
 
Ist nicht ganz was ich momentan brauche. Trotzdem danke.

gmarts 25. Jan 2005 17:04

Re: Form zur Laufzeit verschieben bei BorderStyle: bsNone?
 
Hast du auch ganz unten gelesen?:

Zitat:

Um ein Formular ohne Titelleiste noch mit der Maus verschieben zu können, muß man diesem einen Klick auf die (nicht vorhandene) Titelzeile vorgaukeln, wenn der Anwender auf eine beliebige Stelle im Formular klickt. Dazu fügt man folgenden Code in die "OnMouseDown"-Methode des Formulars ein:


Delphi-Quellcode:
if ssLeft in Shift then begin
  ReleaseCapture;
  Self.Perform(WM_NCLBUTTONDOWN, HTCAPTION, varEmpty);
end;

Wenn das Form eine Titelleiste hat, funktioniert das natürlich auch.

mlspider 25. Jan 2005 17:07

Re: Form zur Laufzeit verschieben bei BorderStyle: bsNone?
 
Sorry, habe ich erst jetzt gesehen. Das löst mein Problem. Danke!!!

DukeM 4. Okt 2018 12:44

AW: Form zur Laufzeit verschieben bei BorderStyle: bsNone?
 
Hallo, unter FMX funktioniert das ja nicht mehr :-/

Gibt es eine allgemeine Lösung?
Problem ist ja, dass wenn die Maus die Componente zu schnell verlässt, kommt man zB mit "screen.MousePos" nicht mehr hinterher.

KodeZwerg 4. Okt 2018 13:43

AW: Form zur Laufzeit verschieben bei BorderStyle: bsNone?
 
Mit Windows Vcl mach ich es per "Non Client Hit - Abfrage"
Wie ein Fmx damit klar kommt ist mir unbekannt.

Delphi-Quellcode:
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 // hier legst du fest wie hoch eine selbstgemalte titelzeile hoch ist, entferne das wenn du alles als drag fläche willst
    Message.Result := HTCAPTION
  else
    inherited;
end;
Zweite Möglichkeit, ähnelt dem oben beschriebenen, mit einer OnMouse procedure
Delphi-Quellcode:
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;
oder Non-Vcl
Delphi-Quellcode:
function DlgProc(hWin: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): bool; stdcall;

...

   WM_LBUTTONDOWN:
    begin
     Result := BOOL(DefWindowProc(hWin, uMsg, wp, lp));
     PostMessage(hWin, WM_SYSCOMMAND, $f012, 0);
    end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz