给出以下代码供参考:
一、程序控件说明:
1、窗体 Form1
2、窗体上一Panl控件 Panel1 (如你的容器为其它也可,只要知道它的宽Width便可)。备档如
3、Image控件 Image1。
二、程序目标:
使Image1在鼠标拖动下左右移动,但不能移出控件Panel1。
三、具体代码:
1、头文件代码:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1
TImage *Image1
void __fastcall Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
void __fastcall Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
void __fastcall Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner)
bool MouseDownBZ//鼠标按下标志(自行加入)
int MouseX//鼠标坐标(自行加入)
}
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1
//---------------------------------------------------------------------------
#endif
2、仿启cpp文件中蠢带:
//---------------------------------------------------------------------------
#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::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
MouseDownBZ = true
MouseX = X
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
MouseDownBZ = false
MouseX = X
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
int MinMove = 0
int MaxMove = Panel1->Width - Image1->Width
int LSMove = Image1->Left+(X-MouseX)
if(MouseDownBZ == true){
if((LSMove >= MinMove)&&(LSMove <= MaxMove))
{
Image1->Left = LSMove
}
}
}
//---------------------------------------------------------------------------
代码非常简单,希望是你要的。
我想如果你是会BCB的人,我这样写出来应该能看懂了。
此外,在窗体构成时,以上代码中加入:
Image1->Parent->DoubleBuffered = true
可以减低Image1在移动过程中的闪动感,特别是Imgae1图片大的时候。
WM_MOUSELEAVE和WM_MOUSEHOVER不是标准的Windows消息函数,它们不能通过类向导来添加,行旅所有的添加工作都需要通过手工输入代码来完成。你可以先添加一个WM_MOUSEMOVE消息,看它生成了哪些代码,然后模仿。
其实手动添加WM_MOUSELEAVE和WM_MOUSEHOVER也不难汪颂。
1,在要相困带郑应这两个消息的类的头文件中加入
afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam)
afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam)
(其实就是函数原型声明)
2,在该类的源文件的消息映射(BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间)加入
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
3,源文件中实现OnMouseLeave和OnMouseHover两个函数的功能。
有什么问题再交流。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)