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
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#1

Form zur Laufzeit verschieben bei BorderStyle: bsNone?

  Alt 25. Jan 2005, 17:49
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
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Benutzerbild von gmarts
gmarts

Registriert seit: 4. Apr 2004
Ort: Templin
290 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Form zur Laufzeit verschieben bei BorderStyle: bsNone?

  Alt 25. Jan 2005, 17:55
Hallo,
dazu gibts sicher hier im Forum schon was, aber das hatte ich gerade bei der Hand: Klick

MfG GM
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Click;
end;
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Form zur Laufzeit verschieben bei BorderStyle: bsNone?

  Alt 25. Jan 2005, 17:57
Ist nicht ganz was ich momentan brauche. Trotzdem danke.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Benutzerbild von gmarts
gmarts

Registriert seit: 4. Apr 2004
Ort: Templin
290 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Form zur Laufzeit verschieben bei BorderStyle: bsNone?

  Alt 25. Jan 2005, 18:04
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.
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Click;
end;
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Form zur Laufzeit verschieben bei BorderStyle: bsNone?

  Alt 25. Jan 2005, 18:07
Sorry, habe ich erst jetzt gesehen. Das löst mein Problem. Danke!!!
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
DukeM

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

AW: Form zur Laufzeit verschieben bei BorderStyle: bsNone?

  Alt 4. Okt 2018, 13: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
 
#7

AW: Form zur Laufzeit verschieben bei BorderStyle: bsNone?

  Alt 4. Okt 2018, 14: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 15: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 01:44 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