DragMode属性怎么用?谢谢!

echocheng 2003-08-01 02:23:14
譬如一个按钮我把它的DragMode属性设成自动或手动,有什么差别?能举例说明吗?
...全文
558 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
echocheng 2003-08-05
  • 打赏
  • 举报
回复
谢谢季大哥的回答!
我现在还有一些疑问!
你这句话:
当他是true时,执行BeginDrag后鼠标指针立刻改变,........
鼠标指针立刻改变的形状有谁决定?
我发现:
我把BeginDrag的第一个参数设成true时,当我在Edit1中按下鼠标左键时,鼠标形状立刻发生改变,但是改变的形状却是crNoDrop。这个鼠标形状一直保持到鼠标进入Memo1才改变。鼠标进入Memo1以后,鼠标形状才变为我在Edit1的DragCursor属性中的设置。
但是从帮助中说的内容,我觉得当我在Edit1中按下鼠标左键时,鼠标形状立刻发生改变,鼠标改变的形状应该和我在Edit1的DragCursor属性中的设置一直,而不是直到我鼠标进入Memo1以后,鼠标形状才变为我在Edit1的DragCursor属性中的设置。
我上面的理解有错误吗?
谢谢!
echocheng 2003-08-05
  • 打赏
  • 举报
回复
我一直在这边试,试出的结果并不能解释我的疑问呀!
本来按我的理解,我觉得如果BeginDrag的第一个参数为真,从鼠标按下的那刻起,鼠标的形状就应该变成Edit1中设的鼠标形状(帮助里就是这么说的,它并没有再说什么其他的条件),可是事实证明却不是。
如果你没有什么再说的,我就准备接贴了,呵呵
xuv2002 2003-08-05
  • 打赏
  • 举报
回复
这个嘛

你自己有程序可以调试嘛

试试看咯,我说的也不一定就是对的,各人对于BCB帮助讲的理解也不尽相同呀

echocheng 2003-08-05
  • 打赏
  • 举报
回复
你对自己的说法把握大吗?
我是觉得帮助里说的不是太清楚,所以就把我搞得比较胡涂!
我觉得自己都有些钻牛角尖了,呵呵!
xuv2002 2003-08-05
  • 打赏
  • 举报
回复
是响应 , 拼错字了

就像你上边例子里面 只有Memo1 能响应 Edit1 的拖动

所以鼠标只会在Memo1的区域内改变形状 (改成Edit1->DragCursor)

其他不能接收Drag 的只是 crNoDrop 吧
xuv2002 2003-08-05
  • 打赏
  • 举报
回复
是响应 , 拼错字了

就像你上边例子里面 只有Memo1 能响应 Edit1 的拖动

所以鼠标只会在Memo1的区域内改变形状 (改成Edit1->DragCursor)

其他不能接收Drag 的只是 crNoDrop 吧
echocheng 2003-08-05
  • 打赏
  • 举报
回复
“我想是根据当时控件所在的位置能否相应DragDrop 来决定吧”
上面这句是什么意思,我不太明白,能说的清楚些吗?
谢谢了!
xuv2002 2003-08-05
  • 打赏
  • 举报
回复
呵呵
明白你的意思了
补充一下
看BeginDrag 的帮助
If Immediate is false, the mouse pointer doesn't change to the value of the DragCursor property and dragging doesn't begin until the user moves the mouse pointer the number of pixels specified by the Threshold parameter.

当Immediate 为false 这时Threshold 就有作用了

只有当鼠标按下时,移动了和Thresshold相等的距离(按象素算)
的时候鼠标形状才会发生改变
其他的跟季老大说的一样

对于你说的鼠标形状改变由谁决定
我想是根据当时控件所在的位置能否相应DragDrop 来决定吧
假如不能Drop 形状就四crNoDrop
能drop 就是控件指定的DragCursor 吧


zxcdewq 2003-08-05
  • 打赏
  • 举报
回复
当你设置为true时,鼠标按下后就变成了crNoDrop,
如果你设置false,鼠标按下后没有改变,还是原来edit的cursor里设置的形状
所以设置true时已经改变了,只不过响应了drag,鼠标自动变成了crNoDrop。这是的形状在那设置我也不知道,
jishiping 2003-08-04
  • 打赏
  • 举报
回复
BeginDrag 的第一个参数的含义是:当他是true时,执行BeginDrag后鼠标指针立刻改变,而
它的值为false时,鼠标指针不会立刻改变,只有当用户拖动鼠标后鼠标指针才会改变。至于
拖动时的鼠标指针形状,是由控件(这儿就是Edit1)的属性DragCursor决定的。
echocheng 2003-08-04
  • 打赏
  • 举报
回复
上面问的问题,大家都没有遇到过吗?
再等等!
echocheng 2003-08-02
  • 打赏
  • 举报
回复
up一下吧!
echocheng 2003-08-01
  • 打赏
  • 举报
回复
对于BeginDrag()这个函数,它的第一个参数在帮助里说:
void __fastcall BeginDrag(bool Immediate, int Threshold)
If Immediate is false, the mouse pointer doesn't change to the value of the DragCursor property and.....
可是我在操作的时候觉得并不是这样,当Immediate为false是,鼠标的形状也改变了!和Immediate为true的时候一样!
下面是例子:
Form1中有一个Edit1,一个Memo1。Edit的DragMode设为dmManual,DragCursor 为crCross。
void __fastcall TForm1::Edit1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Edit1->BeginDrag(false,-1);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Memo1DragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
if(Source->ClassNameIs("TEdit"))
Accept = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1DragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
if((Sender->ClassNameIs("TMemo"))&&(Source->ClassNameIs("TEdit")))
((TMemo*)(Sender))->Lines->Add(((TEdit*)(Source))->Text);
}
运行后,通过鼠标拖动可以把Edit1中的内容拖动到Memo1中!但是不管BeginDrag()第一个的参数设成true或是false,鼠标的形状都变化为十字的形状!
这是怎么回事?
谢谢!
jiangchun_xn 2003-08-01
  • 打赏
  • 举报
回复
((TButton*)Sender)->BeginDrag(false,-1);

最好用上dynamic_cast
FlySky01 2003-08-01
  • 打赏
  • 举报
回复
如楼上所说

你把这两个 的4种组合分别选择
运行看看结果
就明白了
echocheng 2003-08-01
  • 打赏
  • 举报
回复
谢谢!
我想如果Button1的DragMode设为dmManual,dragkind为dkDrok,为了让Button1可以拖动,必须在Button1MouseDown事件中写代码,调用BeginDrag函数,是吧?

void __fastcall TForm1::Button1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
((TButton*)Sender)->BeginDrag(false,-1);
}
zxcdewq 2003-08-01
  • 打赏
  • 举报
回复
dragkind配合使用,
如果dragkind为dkDrok
dragmode 为自动,运行可以移动,

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧