我試圖在屏幕上拖出一個表格,即我可以抓住它並在屏幕上移動它。它的透明並且沒有邊界,但是圖像可以作爲其他控制的背景。我想使用圖像的事件來控制窗體的拖動。我怎樣才能做到這一點?如何通過另一個對象在屏幕上拖動無邊界FMX表單?
我找到了具有此TDragObject參數的DragEnter,DragLeave,DragStart方法,我不知道。
有人可以幫忙嗎?
我試圖在屏幕上拖出一個表格,即我可以抓住它並在屏幕上移動它。它的透明並且沒有邊界,但是圖像可以作爲其他控制的背景。我想使用圖像的事件來控制窗體的拖動。我怎樣才能做到這一點?如何通過另一個對象在屏幕上拖動無邊界FMX表單?
我找到了具有此TDragObject參數的DragEnter,DragLeave,DragStart方法,我不知道。
有人可以幫忙嗎?
基本上你必須手動完成。
下面是從一種形式的一些德爾福/ Windows代碼上有一個透明的圖片(TransImage),無國界等 的事件是在形式的圖像,最&左指TMainScanForm.Top/Left。
這會拖累你的周圍形成使用圖像事件檢測點擊和移動
...
// Mouse Drag Control
MouseDown: Boolean;
TopLeft,
MouseStart: TPoint;
...
procedure TMainScanForm.TransImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseDown := (Button = mbLeft);
if MouseDown then
begin
MouseStart.X := X;
MouseStart.Y := Y;
TopLeft := ClientToScreen(MouseStart);
TopLeft.X := TopLeft.X - X;
TopLeft.Y := TopLeft.Y - Y;
end;
end;
procedure TMainScanForm.TransImageMouseMove(Sender: TObject;
Shift: TShiftState;
X, Y: Integer);
var
NewPoint: TPoint;
begin
if MouseDown then
begin
NewPoint.X := X;
NewPoint.Y := Y;
NewPoint := ClientToScreen(NewPoint); // On Screen
NewPoint.Y := NewPoint.Y - MouseStart.Y; // New Onscreen
NewPoint.X := NewPoint.X - MouseStart.X;
Top := NewPoint.Y;
Left := NewPoint.X;
Refresh;
end;
end;
procedure TMainScanForm.TransImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseDown := False;
end;
非常聰明,我會在幾天內嘗試一下。 –
爲什麼在您更改表單的位置後有'刷新'調用? FMX表格的某些特性是否需要在其位置發生變化時被迫重新繪製? – TLama
此代碼是爲VCL編寫的。對於Firemonkey來說這不是一個好的解決方案。它在快速鼠標移動時失敗,如果鼠標光標靠近窗體邊緣則失敗。 Firemonkey中的鼠標事件(向下/移動/向上)與VCL幾乎不同。 –
這也正是執行包含爲單位的不WinAPI.Windows,WinAPI.Messages也不在Windows中。 –
Perform是TControl的一種方法。與SendMessage類似,但它直接將消息傳遞給WindowProc。 –
好吧,但我似乎無法在FMX中找到它的單元...我有這些用途; WinAPI.Windows,WinAPI.Messages,Windows,System.SysUtils,System.Types,System.Rtti,System.Classes,System.UITypes,System.Variants,System.Math,FMX.Types,FMX.Controls,FMX.Forms, FMX.Dialogs,FMX.Layouts,FMX.Objects,FMX.ListBox,FMX.Edit,FMX.Effects,FMX.TreeView,FMX.Grid,FMX.TabControl,FMX.Memo,Data.Bind.EngExt,Fmx.Bind。 DBEngExt,Data.Bind.Components,FMX.Ani; –