社区
C++ Builder
帖子详情
如何拖动窗体上的Image控件?
mast
2003-01-06 05:22:06
如何拖动窗体上的Image控件,就想用户在C++Builder设计窗口界面一样,可以任意拖动控件.
...全文
98
8
打赏
收藏
如何拖动窗体上的Image控件?
如何拖动窗体上的Image控件,就想用户在C++Builder设计窗口界面一样,可以任意拖动控件.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wsdgs
2003-01-06
打赏
举报
回复
收藏了,CSDN真好,我才来不久就给了我很多帮助,可惜就是可用分太少了
jishiping
2003-01-06
打赏
举报
回复
我也是查找源程序才知道这个(TWinControl*)0xFFFFFFFF的。在源程序里,定义了一个常量 NullDockSite = TWinControl($FFFFFFFF); 表示控件的DockSite为空白的。如果没有上面的一行代码,用户也可以拖动控件,第一次和现在的一样,但是再次拖动时,控件会出现在一个窗口里。上面的代码,就是避免出现上面的情况。
Dock 就是控件可以拖拉到别的DockSite=true的控件上。拖拉时有被拖拉控件的外形。而Drag类似于资源管理器里的拖拉文件的情形。
weibz0525
2003-01-06
打赏
举报
回复
还是斑竹狠,佩服!能解释一下?
Image1->HostDockSite = (TWinControl*)0xFFFFFFFF;//???
另外Dock和Drag什么区别啊?
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)
{
Image1->HostDockSite = (TWinControl*)0xFFFFFFFF;
}
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;
}
//---------------------------------------------------------------------------
将Button1改为Image1即可
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);
}
牧牛人软件
2003-01-06
打赏
举报
回复
同意
yuyulily
2003-01-06
打赏
举报
回复
rivate:
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;
}
}
Delphi7 Png
Image
控件
PNG
image
for Delph7
3、
窗体
中插入
image
1
控件
4、在调用位置,加入如下代码就OK啦! var png: tpng
image
; begin png := tpng
image
.Create; png.LoadFromFile(getcurrentdir() + '\pic.png');
Image
1.Picture.Bitmap.Assign(png...
Delphi7可用的Png
Image
控件
PNG Delphi v.1.564
Delphi7可用的Png
Image
控件
PNG Delphi v.1.564,可用于D7显示Png图片。 使用方法:(Delphi 7 使用成功案例) 1、将本包中所有文件复制到开发文件保存的目录中 2、在USES单元中加入png
image
3、
窗体
中插入
image
1...
PNG透明
窗体
(
控件
不透明)
接下来,为了使
窗体
上的
控件
不透明,我们需要在
控件
的Paint事件中进行特殊处理。通常,
控件
会自动覆盖其父
窗体
的背景,因此我们需要在
控件
的Paint事件中绘制一个与
控件
大小相同的全透明矩形,然后再绘制
控件
本身。...
png
image
控件
在Windows编程环境中,例如使用Visual Studio或Delphi,PNG
Image
控件
通常作为一个第三方组件提供,允许开发者在
窗体
上直接添加和显示PNG图像,而不仅仅是传统的BMP或JPEG格式。这些
控件
通常包含一系列属性、方法和...
VB图片浏览器(练习FileListbox、
Image
控件
的使用)
Image
控件
则用于在
窗体
上显示图像。当你从FileListbox中选择一个文件后,可以通过读取该文件的内容并将其加载到
Image
控件
中来显示图片。VB中可以使用`PictureBox`
控件
代替`
Image
`
控件
,因为`PictureBox`提供了更多的...
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章