TShape的拖放问题200分大送!!!! (200分)

  • 主题发起人 主题发起人 hongdo
  • 开始时间 开始时间
H

hongdo

Unregistered / Unconfirmed
GUEST, unregistred user!
我在实现一个拖放的程序:
设置如下:
Form1.DockSite := true;
Form1.DragKind := dkDrag;
Form1.DragMode := dmManual;
Shape1.DragKind := dkDock;
Shape1.DragMode := dmAutomatic;
这样能实现对Shape1拖放,可问题是,拖放中Shape1有时会出现边框,
我希望消除这个边框??????
希望各位大虾指教
谢谢!!!!!!
 
你是否是指拖放时有时会让这个shape变成一个toolwindows?
看你的要求好象只是希望在这个form里拖放,那么完全没有必要用dock
直接编写鼠标事件即可方便实现,只需改一个位置,如果form上有不同
的容器控件,就把parent也改一下即可。
 
flier 你介绍的方法我已经试过了,可我希望用拖放来实现!!!!!!
 
// 首先要说明的是你用Shape1.DragKind := dkDock;来实现拖放不是太好!
//要解决你因此而产生的问题可以这样做:(有点小问题,我先发出来!)
procedure TForm1.Shape1EndDock(Sender, Target: TObject;
X, Y: Integer);
var
pt :TPoint;
begin
if Shape1.Floating then
begin
pt := Point(Shape1.top,shape1.left);
pt := Shape1.ClientToScreen(pt);
pt := Self.ScreenToClient(pt);
Shape1.parent := self;
Shape1.Top := pt.x;
Shape1.Left := pt.y;
end;
end;
 
柳五公子你的方法我刚才用了一下,出现的问题还是隐约可见toolwindows,
而且Shape的拖动十分没有规律.你在上面说"用Shape1.DragKind := dkDock;来实现拖放不是太好!" ,请问我想实现在许多图像中移动选中的图元,用flier的方法
(我开始用的方法)会出现图像闪动,请问怎么解决???????
谢谢 柳五公子和flier,红包等下一起送上!!!!!
 
不好意思,刚才的程序果然有问题!我改了一下:
//Shape1的OnEndDock Event
procedure TForm1.Shape1EndDock(Sender, Target: TObject;
X, Y: Integer);
var
pt :TPoint;
begin
if Shape1.Floating then
begin
pt := self.ScreenToClient(Shape1.ClientToScreen(Point(0,0)));
Shape1.parent := self;
Shape1.Top := pt.y;
Shape1.Left := pt.x;
end;
end;
你会发现有点问题,但如果不用这段程序,然后一直在Shape上按鼠标的左键,
Shape在切换的同时也会产生偏移!
最后我还是不推荐你用这中方法来实现拖放!
 
谢谢 柳五公子和flier,红包一起送上!!!!!
柳五公子名字好听,又加上乐于助人,在下谢谢了!!!!!!
本人还有一问题是,你的程序我移植到builder下,
程序如下:
void __fastcall TForm1::FormEndDock(TObject *Sender, TObject *Target,
int X, int Y)
{
TPoint pt;
if (Shape1->Floating)
{
pt = Point(Shape1->Top,Shape1->Left);
pt = Form1->ScreenToClient(Shape1->ClientToScreen(pt));
Shape1->Parent = Form1;
Shape1->Top = pt.x;
Shape1->Left = pt.y;
}
}
delphi中的程序
procedure TForm1.Shape1EndDock(Sender, Target: TObject;
X, Y: Integer);
var pt :TPoint;
begin
if Shape1.Floating then
begin
pt := Point(Shape1.top,shape1.left);
pt := Shape1.ClientToScreen(pt);
pt := Self.ScreenToClient(pt);
Shape1.parent := Form1;
Shape1.Top := pt.x;
Shape1.Left := pt.y;
end;
end;
这一程序跟柳五公子的一样!!!
结果与delphi种的结果不一样.另外就是还是隐约可见toolwindows,这一问题
在delphi中会出现????
能解决吗?????
我等你和大家的指教!!!!!!!
 
hongdo,你好!
要不是发现我的积分猛涨,跑过来看看,我就看不到你刚刚发的条子了!
我对C++Builder不熟,所以也不大清楚问题所在,但我想提醒你一下,你最好用我的第二种方法!第一种方法有点问题(你比较一下!)
 
后退
顶部