AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Form zur Laufzeit verschieben bei BorderStyle: bsNone?
Thema durchsuchen
Ansicht
Themen-Optionen

Form zur Laufzeit verschieben bei BorderStyle: bsNone?

Ein Thema von mlspider · begonnen am 25. Jan 2005 · letzter Beitrag vom 4. Okt 2018
Antwort Antwort
DukeM

Registriert seit: 1. Feb 2011
32 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Form zur Laufzeit verschieben bei BorderStyle: bsNone?

  Alt 4. Okt 2018, 12:44
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.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Form zur Laufzeit verschieben bei BorderStyle: bsNone?

  Alt 4. Okt 2018, 13:43
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;
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 4. Okt 2018 um 14:12 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16: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