社区
C++ Builder
帖子详情
怎样得到拖拽Form的事件,或者说判断Form被拖动的事件是什么?
chensy0626
2002-09-13 05:26:19
怎样得到拖拽Form的事件,或者说判断Form被拖动的事件是什么?
...全文
90
10
打赏
收藏
怎样得到拖拽Form的事件,或者说判断Form被拖动的事件是什么?
怎样得到拖拽Form的事件,或者说判断Form被拖动的事件是什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bcb_fans
2002-09-16
打赏
举报
回复
不能使用消息WM_MOVE,窗口移动之后才触发这个消息,
SDK:
The WM_MOVE message is sent after a window has been moved.
bcb_fans
2002-09-16
打赏
举报
回复
1、重载窗口过程WndProc
2、检测消息WM_MOVING
chensy0626
2002-09-16
打赏
举报
回复
多谢大家解答,我现在拖拽Form的标题栏好像Form的事件都不起作用,比如:FormMouseDown事件就不好使,为什么?
shclhs
2002-09-13
打赏
举报
回复
我人为应该是在FormMouseDown中记录下你的Form的位置在转化为屏幕坐标用
ClientToScreen(...)函数,再在FormMouseMove中对Form的位置进行计算
Hawk_sun
2002-09-13
打赏
举报
回复
通过捕获WM_MOVE事件你可以检测到!
在Form1上放置TApplicationEvent,
在OnMessage()中:
bool DragAlreadyStart=false;
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
bool &Handled)
{
if(Msg.message==WM_MOVE&&Msg.hWnd==Form1->Handle&&!DragAlreadyStart)
{
DragAlreadyStart=true;
ShowMessage("Begin Drag Form1");
Handled=false;//让系统接着处理这个消息
}
}
最后别忘了在Drag事件结束的时候将DragAlreadyStart=false,这样才不影响下一次要发生的Drag动作的捕获!
Hawk_sun
2002-09-13
打赏
举报
回复
TO :kingcaiyao(AKing)
有问题吧,人家问的是怎样判断自己程序的某个FORM被drag这个事件怎么检出来!你的例子是你的Form怎么接受别人Drag过来的File的个数的,有区别哦!
kingcaiyao
2002-09-13
打赏
举报
回复
.h File
//---------------------------------------------------------------------------
#ifndef dragdropH
#define dragdropH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMemo *Memo1;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall DragDropFiles(TMessage &Message);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_DROPFILES,TMessage,DragDropFiles);
END_MESSAGE_MAP(TForm);
protected:
virtual void __fastcall WndProc(TMessage &Message);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
.cpp File
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "dragdrop.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DragAcceptFiles(Handle,true);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WndProc(TMessage &Message)
{
if(Message.Msg==WM_SYSCOMMAND)
{
if(Message.WParam==SC_CLOSE || Message.WParam==SC_SCREENSAVE)
{
Message.WParam=0;
}
}
TForm::WndProc(Message);
}
//-------------------------DragDropFiles Function-------------------------------------------
void __fastcall TForm1::DragDropFiles(TMessage &Message)
{
char FileName[512];
int i,Sum;
Sum=DragQueryFile(HDROP(Message.WParam),0xFFFFFFFF,NULL,0);
Memo1->Lines->Add("Total Drag and Drop Files:"+IntToStr(Sum));
Memo1->Lines->Add("____________________________________________");
//enum filename
for(i=0;i<Sum;i++)
{
DragQueryFile(HDROP(Message.WParam),i,FileName,512);
Memo1->Lines->Add(FileName);
Memo1->Lines->Add("_______________________________________________________");
}
DragFinish(HDROP(Message.WParam));
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int button;
button=Application->MessageBox("Do you want to exit thisform?","Confirmation",MB_YESNO+MB_ICONQUESTION);
if(button==IDYES)
{
Application->Terminate();
}
}
//---------------------------------------------------------------------------
tongzhenhua
2002-09-13
打赏
举报
回复
我的一个浮动回收站的源码。(拖窗口的程序一下子不知放到哪里去了。^_^0)
void TForm1::WMDropFiles(TMessage& Msg)//消息拦截函数的定义
{
//TODO: Add your source code here
char FileName[128];
int i,sum;
//当第二个参数为0xFFFFFFFF时,DragQueryFile函数返回的是拖动文件的个数
sum=DragQueryFile(HDROP(Msg.WParam),0xFFFFFFFF,NULL,0);
for(i=0;i<sum;i++)
{
DragQueryFile(HDROP(Msg.WParam),i,FileName,128);//获取第i个文件名
if(MessageBox(Handle,("是否将"+AnsiString(FileName)+"删除?").c_str (),"删除警告",MB_DEFBUTTON1|MB_OKCANCEL|MB_ICONWARNING==IDOK))
DeleteFile(AnsiString(FileName));//直接删除文件,不是把文件移到回收站
}
DragFinish(HDROP(Msg.WParam));//拖动操作完成
}
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
Drawing=true;
xx=X;
yy=Y;
}
//-------------------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(Drawing)
{
Left+=X-xx;
Top+=Y-yy;
}
}
//-----------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
Drawing=false;
}
//------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
Canvas->Brush->Color=clRed;
Canvas->Pen->Width=2;
Canvas->Pen->Color=clBlack;
Canvas->MoveTo(1,1);//将当前点移动到(1,1)位置;
Canvas->LineTo(59,1);//画直线;
Canvas->LineTo(59,59);
Canvas->LineTo(1,59);
Canvas->LineTo(1,1);
}
//----------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Width=60;//设置拖放窗体的宽
Height=60;//设置拖放窗体的高
DragAcceptFiles(Handle,true);//将窗体设置成为接受拖动文件状态
}
//-----------
void __fastcall TForm1::exit1Click(TObject *Sender)
{
this->Close();
}
//--------------------------------------------------------
gfh21cn
2002-09-13
打赏
举报
回复
具体的就记不情了
gfh21cn
2002-09-13
打赏
举报
回复
好像是重载wndproc,然后好像是几个消息组合起来判断的
form
表单
拖拽
功能
这时可以使用
事件
委托,将
事件
监听器添加到父容器上,通过
判断
事件
的目标元素来处理
拖拽
行为,避免为每个表单元素都添加单独的
事件
监听器,提高性能。 4. **防抖与节流**:在处理`mousemove`
事件
时,频繁的更新可能...
Delphi
Form
界面元素
拖动
设计器插件附Demo
Delphi
Form
界面元素
拖动
设计器插件是一种强大的开发工具,它极大地增强了Delphi IDE的界面设计能力。在Delphi中,
Form
是应用程序的基础,用于构建用户界面,而这个插件则允许开发者更自由、更直观地调整
Form
上的...
C# Win
Form
实现窗体上控件自由
拖动
功能示例
在
Form
1_Paint
事件
中,我们
判断
了rect变量是否为空,如果不为空,则绘制一个矩形,用于显示控件的
拖动
效果。 四、示例代码分析 在示例代码中,我们使用了多种技术来实现控件的自由
拖动
功能,包括: 1. 使用...
Delphi
拖动
Form
上的控件
在Delphi编程环境中,
拖动
Form
上的控件是一项基本但重要的功能,这使得用户界面能够更加灵活和交互性更强。本篇文章将详细讲解如何实现这一功能,主要关注于通过发送消息来实现控件的
拖动
。 首先,我们需要理解...
C# Win
Form
工作流设计 工作流程图
拖拽
设计 +GDI 绘制工作流程图 大概功能说明一下: 1.支持
拖动
绘制工作节点
C# Win
Form
工作流设计 工作流程图
拖拽
设计 +GDI 绘制工作流程图 大概功能说明一下: 1.支持
拖动
绘制工作节点 2.支持移动每个节点的移动 3.支持直线连接节点 4.支持节点移动连接线自动跟随 5.支持高亮显示...
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章