我以下代碼是想當滑鼠拖拽ShpST1是,松開滑鼠后ShpST1在 滑鼠當前位置 ,可是當我僅在ShpST1內拖拽時,會跑到莫名奇妙的位置,當拖拽在ShpST1外部時,則能滿足要求?這是什么原因?怎樣解決?
在ShpST1內拖拽時得到的位置X,Y不是Form1的X,Y嗎?
procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if (Sender is TShape) then
accept:=true;
end;
procedure TForm1.ShpST1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if (Source is TShape) then
accept:=true;
end;
procedure TForm1.ShpST1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
ShpST1.Brush.Color:=clHighLight;
ShpST1.Left:=X-ShpST1.Width div 2;
ShpST1.Top:=Y-ShpST1.Height div 2;
end;
procedure TForm1.ShpST1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbLeft then
(Sender as TShape).BeginDrag(false);
end;
uj5u.com熱心網友回復:
試試這個代碼,BCB的,可以拖動Button1://---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
ReleaseCapture();
SendMessage( Button1->Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
//---------------------------------------------------------------------------
uj5u.com熱心網友回復:
procedure TForm1.ShpST1EndDrag(Sender, Target: TObject; X, Y: Integer);begin
ShpST1.Brush.Color:=clHighLight;
ShpST1.Left:=X-ShpST1.Width div 2;
ShpST1.Top:=Y-ShpST1.Height div 2;
end;
這個中的X和Y是螢屏的坐標,不是Form的坐標
uj5u.com熱心網友回復:
那怎么變成 Form的X,Y坐標呢?uj5u.com熱心網友回復:
varP: TPoint;
begin
P := Form1.ScreenToClient(Point(X, Y));
ShpST1.Left:=P.X-ShpST1.Width div 2;
ShpST1.Top:=P.Y-ShpST1.Height div 2;
//...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/44368.html
標籤:VCL組件開發及應用
