⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 本书《C++Builder与WindowsAPI经典范例》附含配套光盘包括132个WindowsAPI函数及206个完整、可执行的实例
💻 CPP
字号:
//---------------------------------------------------------------------------
//目的:按住Image1拖曳时,实际是捕捉到Image1下的动态Panel1对象
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{//默认背景颜色,以利显示效果
Color = (TColor)RGB(200,255,200);
//给Image1建立一可拖曳的新平台
panel = new TPanel(this);
panel->Parent = Form1;
//panel边框加强
panel->BevelInner = bvLowered;
panel->BevelOuter = bvLowered;
//将新建Panel先隐藏起来
panel->Hide();
//更替panel的 WM_ERASEBKGND 信息处理
OldPanelWP = panel->WindowProc;
panel->WindowProc = NewPanelWP;
}
//---------------------------------------------------------------------------
//当程序被摧毁时,释放panel内存
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
panel->WindowProc = OldPanelWP;
delete panel;
}
//---------------------------------------------------------------------------
//排除WM_ERASEBKGND信息
void __fastcall TForm1::NewPanelWP(TMessage &Msg)
{
if (Msg.Msg != WM_ERASEBKGND)
     OldPanelWP(Msg);
}
//---------------------------------------------------------------------------
//鼠标按住Image1时,即显现panel
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
//显现panel
panel->Show();
oldX = X;
oldY = Y;
//设置panel显现状态
panel->Left = Image1->Left-2;
panel->Top = Image1->Top-2;
panel->Height = Image1->Height+4;
panel->Width = Image1->Width+4;
panel->Visible = true;

//当鼠标按住Image1时,实际上是按住panel
::SetCapture(panel->Handle);
Image1->Parent = panel;
Image1->Left = 2;
Image1->Top = 2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
//当鼠标左键按住Image1移动时,实际上是按住panel移动
if (Shift.Contains(ssLeft))
    {
    panel->Left = panel->Left + (X - oldX);
    panel->Top = panel->Top + (Y - oldY);
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
//释放panel的鼠标捕捉
::ReleaseCapture();
//隐藏panel在Image1下
panel->Visible = false;
Image1->Left = panel->Left;
Image1->Top = panel->Top;
Image1->Parent = this;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -