社区
VCL组件使用和开发
帖子详情
如何拖动窗体上的控件?
mast
2003-01-06 05:22:53
如何拖动窗体上的Image控件,就想用户在C++Builder设计窗口界面一样,可以任意拖动控件.
...全文
123
21
打赏
收藏
如何拖动窗体上的控件?
如何拖动窗体上的Image控件,就想用户在C++Builder设计窗口界面一样,可以任意拖动控件.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jishiping
2003-01-08
打赏
举报
回复
To zjqc:
好好看看我在上面写的,怎么只学到第一点,没有学到第二点啊。
zjqc
2003-01-08
打赏
举报
回复
我在这边试验!发现是可以拖动!不过是把控件变成了一个小窗体一样!就是控件可以关闭的!根本不是正常的拖动哦!大侠!
mustang_zr
2003-01-08
打赏
举报
回复
gz
yuanque
2003-01-08
打赏
举报
回复
呵呵,
我用的就是handler,感觉不错
大大怪老张
2003-01-08
打赏
举报
回复
关注
jishiping
2003-01-07
打赏
举报
回复
一样啊。
static int name=2;
TImage *tmp=new TImage(this);
tmp->Name.printf("Image%d",name++);
//tmp->WindowProc=MyWindowProc;
tmp->OnEndDock =Image1EndDock;
tmp->DragKind= dkDock;
tmp->DragMode= dmAutomatic; //要设成dmAutomatic
tmp->Transparent=true;
tmp->Center=true;
tmp->Stretch=true;
tmp->Canvas->TextOutA(3,5,tmp->Name);
tmp->Picture= Image1->Picture ;
tmp->Parent=this; //注意这儿,尽量用this,而不要用Form1
DockSite = true;
void __fastcall TForm1::Image1EndDock(TObject *Sender, TObject *Target,
int X, int Y)
{
((TControl*)Sender)->HostDockSite = (TWinControl*)0xFFFFFFFF;
}
痞子酷
2003-01-07
打赏
举报
回复
to jishiping(JSP 季世平)
自定义申请得Timage控件怎么实现拖动??
static int name=2;
TImage *tmp=new TImage(this);
tmp->Name.printf("Image%d",name++);
tmp->WindowProc=MyWindowProc;
// tmp->OnEndDock =Image1EndDock;
tmp->DragKind= dkDock;
tmp->DragMode= dmManual;
tmp->Transparent=true;
tmp->Center=true;
tmp->Stretch=true;
tmp->Canvas->TextOutA(3,5,tmp->Name);
tmp->Picture= Image1->Picture ;
tmp->Parent=Form1;
void __fastcall TForm1::MyWindowProc(Messages::TMessage &Message)
{
//怎么写呀,给个提示吧,有源代码更能好,谢谢!!!
}
2001xwc
2003-01-07
打赏
举报
回复
454
yuanque
2003-01-07
打赏
举报
回复
如果想做成像CB里控件托动的样子,JSP的方法不算太好
痞子酷
2003-01-07
打赏
举报
回复
jishiping(JSP 季世平)
更好!!!!
myy
2003-01-07
打赏
举报
回复
真要象BCB的设计Form那样,同意用第三方控件,如 Handler 就不错。
痞子酷
2003-01-07
打赏
举报
回复
谢谢1!!!
是我搞错啦,
我从image1 属性copy时没有注意,copy成啦dmManual而不是dmAutomatic啦
我双击全选,则copy啦dmManual,我还一位是dmAutomatic呢,image1双击时自动选择啦另一个:)
gk0205
2003-01-06
打赏
举报
回复
我记下了
jishiping
2003-01-06
打赏
举报
回复
其实很简单,不需要写什么程序:
1. 设定Image的属性DragKind=dkDock; DragMode=dmAutomatic; 设定Form
的属性DockSite=true。
2. 在Image的事件OnEndDock里写一行代码就可以了:
void __fastcall TForm1::Image1EndDock(TObject *Sender, TObject *Target,
int X, int Y)
{
((TControl*)Sender)->HostDockSite = (TWinControl*)0xFFFFFFFF;
}
RomanticProgrammer
2003-01-06
打赏
举报
回复
对于没有窗口句柄的控件,比如Image,用设置它的坐标的方法来拖动.
而对于有窗口句柄的控件,比如Edit,可以用这样的方法拖动:
在它的OnMouseMove中:
void __fastcall TForm1::Edit1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
ReleaseCapture();
(dynamic_cast<TEdit*>(Sender))->Perform(WM_SYSCOMMAND,0xF012, 1);
}
}
yuanque
2003-01-06
打赏
举报
回复
在mousemove,mouseup,mousedown写基本可以做到,但不如做成一个通用的控件比较好,这有一个外国人用delphi写的,1000行,贴不上,有邮箱可以发给你:)
windcsn
2003-01-06
打赏
举报
回复
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y);
void __fastcall Button1MouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
void __fastcall Button1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
private: // User declarations
POINT CurPos,LastPos;
bool MouseIsDown;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if(MouseIsDown)
{
DoubleBuffered = true;
if(Shift.Contains(ssLeft)==true)
{
GetCursorPos(&CurPos);
if(LastPos.x != CurPos.x ||LastPos.y != CurPos.y)
{
Button1->Top = CurPos.y - LastPos.y +Button1->Top;
Button1->Left = CurPos.x - LastPos.x+Button1->Left;
LastPos.x = CurPos.x;
LastPos.y = CurPos.y;
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button == mbLeft)
{
GetCursorPos(&LastPos);
MouseIsDown = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button == mbLeft)
MouseIsDown = false;
}
//---------------------------------------------------------------------------
实现按牛的移动
yuyulily
2003-01-06
打赏
举报
回复
你怎么提2个一样的问题啊?
yuyulily
2003-01-06
打赏
举报
回复
private:
int iX0 ;
int iY0 ;
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
int iDeltaX, iDeltaY;
if(Shift.Contains(ssLeft))
{
iDeltaX = X - iX0;
iDeltaY = Y- iY0;
if(iDeltaY)
Image1->Left += iDeltaX;
if(iDeltaY)
Image1->Top += iDeltaY;
}
}
netsys2
2003-01-06
打赏
举报
回复
去搜索一下吧,已经解决了。
用OnMouseDown记录鼠标位置,用SetCapture函数使鼠标处于被捕获状态,用OnMouseMove跟踪鼠标移动,一直移动到OnMouseUp事件发生。
int MouseX,MouseY;
bool xCapture;
TFrmMain::Image1MouseDown(...)
{
SetCapture(Image1->Handle);
xCapture = true;
MouseX = x;
MouseY = y;
}
TFrmMain::Image1MouseMove(...)
{
if( xCapture)
{
Image1->Left = Image1->Left-(MouseX - x);
Image1->Top = Image1->Yop-(MouseY - y);
}
}
TFrmMain::Image1MouseUp(...)
{
ReleaseCapture();
xCapture = false;
Image1->Left = Image1->Left-(MouseX - x);
Image1->Top = Image1->Yop-(MouseY - y);
}
加载更多回复(1)
C# winform 运行时用户
拖动
窗体
上
控件
大小位置
C# winform 运行时用户
拖动
窗体
上
控件
大小位置,可用于自定义
窗体
上
控件
排版
vb中
拖动
窗体
或
控件
.txt
使用API函数
拖动
窗体
或
控件
winform
窗体
拖拽
控件
winform
窗体
拖拽,使用详见博客:https://blog.csdn.net/HorseRoll/article/details/86157358
在Visual Basic中如何
拖动
窗体
或
控件
在Visual Basic中如何
拖动
窗体
或
控件
VB技术很实用的源码本人精心收集的VB源码,绝对实用,有问题联系QQ:353502250
C#运行
窗体
可移动
控件
button
控件
是我自己重写过的,因为为了mousedown+mouseup事件不触发click事件,
窗体
内的
控件
可以在
窗体
运行时实时移动他们的位置
VCL组件使用和开发
604
社区成员
13,460
社区内容
发帖
与我相关
我的任务
VCL组件使用和开发
C++ Builder VCL组件使用和开发
复制链接
扫一扫
分享
社区描述
C++ Builder VCL组件使用和开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章