2013-03-13 3 views
0

Dans les formulaires VCL j'utilise WM_SYSCOMMAND, mais dans firemonkey il n'est pas déclaré.Déplacer la forme sans bordure dans Firemonkey

je teste ce code:

procedure TForm4.dragPanelMouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Single); 
begin 
    isDraging := true; 
    X0 := X; 
    Y0 := Y; 
end; 

procedure TForm4.dragPanelMouseMove(Sender: TObject; Shift: TShiftState; 
    X, Y: Single); 
begin 
    if isDraging then 
    begin 
    Form4.Left := Trunc(Form4.Left + X - X0); 
    Form4.Top := Trunc(Form4.Top + Y - Y0); 
    end; 
end; 

procedure TForm4.dragPanelMouseUp(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Single); 
begin 
    isDraging := False; 
end; 

cela fonctionne, mais juste pour les mouvements lents !!! Comment puis-je déplacer le formulaire dans Firemonkey?

+1

Vous pouvez aussi utiliser 'WM_SYSCOMMAND'. Ce n'est pas défini, définissez-le. –

+0

Comment puis-je définir 'WM_SYSCOMMAND'? – sma6871

+1

'WM_SYSCOMMAND = $ 0112' http://msdn.microsoft.com/fr-fr/library/windows/desktop/ms646360.aspx –

Répondre

1

Si le code VCL que vous souhaitez répliquer est:

SendMessage(MyForm.Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0); 

alors l'équivalent FMX serait:

SendMessage(FmxHandleToHWND(MyForm.Handle), WM_SYSCOMMAND, SC_DRAGMOVE, 0); 

La raison est que MyForm.Handle est une poignée de FMX. Ce n'est pas la même chose qu'une poignée de fenêtre. Vous convertissez en une poignée de fenêtre avec FmxHandleToHWND().

Vous devrez peut-être déclarer deux constantes:

const 
    WM_SYSCOMMAND = $0112; 
    SC_DRAGMOVE = $F012; 
+0

Merci et la dernière chose est 'utilise FMX.Platform.Win' ;-) – sma6871

+0

$ F012 = (SC_MOVE ou HTCAPTION) – pani

5

Qu'est-ce plus facile est juste d'utiliser la méthode StartWindowDrag du formulaire. De cette façon, il fonctionnera dans Windows et MacOS et sa seule ligne de code. Comme si:

procedure TForm4.dragPanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); 
begin 
    Self.StartWindowDrag; 
end; 
Questions connexes