首页 > 其他分享 >按住panel 拖动窗体的方法

按住panel 拖动窗体的方法

时间:2024-06-09 09:15:26浏览次数:25  
标签:TShiftState end Sender 拖动 Shift TObject 窗体 Integer panel

有些时候,我们的窗体没有 顶部栏,比如:窗体的borderstyle = bsNone; 我们想在顶部放置一个panel,来拖动窗体,方法如下,直接上代码了:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
    /// <summary>
    /// 鼠标左键是否按下了
    /// </summary>
    leftDown: Boolean;

    /// <summary>
    /// 鼠标左键按下时,鼠标的位置
    /// </summary>
    oldX: Integer;
    oldY: Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    leftDown := True;
    oldX := x;
    oldY := y;
  end;
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if leftDown then
  begin
    Left := Left + (x - oldX);
    Top := Top + (y - oldY);
  end;
end;

procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  leftDown := False;
end;

end.

效果如下:
image

标签:TShiftState,end,Sender,拖动,Shift,TObject,窗体,Integer,panel
From: https://www.cnblogs.com/del88/p/18239215

相关文章

  • SuperPanel不只是母排设计软件,还是母排管理软件!
    盘厂的铜排成本约有20%,以1亿产值客户为例,约有2000万的铜排成本。铜价不断高涨,有效的管理铜排,可以达到节约母排,精准报价,精准确定采购时间,减少资金占用等效果。盘厂铜排管理现状01 只知道年度采购费用,不知道实际母排用量02 项目铜排用量只有估计值,无准确用量03 大......
  • React Native:尝试使用手势处理使文本组件可拖动时出现渲染错误
    我正在ReactNative应用程序中开发一项照片编辑功能,用户可在其中添加可拖动的文本覆盖。我使用钩子来管理文本块的位置,并通过手势处理来更新它们。但是,当我尝试在手势过程中更新这些文本元素的位置(例如拖动)时、我遇到了一个呈现错误:"呈现的钩子比上一次呈现时多。我怀......
  • C#窗体学生管理系统①
    效果:使用dataGridView展示http里的姓名,年龄,性别,手机而且可以编辑,删除;有添加按钮查询,刷新,页数功能窗体Framework搭建窗口(要将dataGridView里的数据和类对应)编辑和删除设置图片(有内容图片才会显示)页数是使用flowLayoutPanel代码双击Form1桌面privatevoidForm1_Loa......
  • delphi 实现登陆窗体 与 主窗体的过程,启动窗口
    登录窗体:typeTfrmLogin=class(TForm)btn1:TButton;procedurebtn1Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varfrmLogin:TfrmLogin;implementation{$R*.dfm}procedureTfrm......
  • 初学者使用1Panel面板快速搭建WordPress网站
    之前介绍了宝塔面板以及如何搭建wordpress网站,这篇文章我们来学习如何使用1Panel面板搭建wordpress网站。一、1Panel面板介绍1.介绍1Panel是一个现代化、开源的基于Docker的Linux服务器运维管理面板。1Panel的功能和优势包括:快速建站:深度集成WordPress和 Halo,域名绑......
  • JPanel的GridLayout布局添加网格线
        之前从网上找了许多添加网格线的方法,比如添加JLable,设置JLable文本框线实现添加网格线://初始化显示界面JFramejf=newJFrame("数独游戏");//设置窗口可视化jf.setVisible(true);//设置窗口大小jf.setSize(900,810);//将窗口显示在屏幕中央jf.setLocatio......
  • C#的移出窗体关闭操作 - 开源研究系列文章
          整理以前的代码。这次想到上次的一个例子,就是一个屏幕右下角显示的提示窗体,定时3秒自动关闭,如果鼠标移动到窗体上则停止关闭,鼠标移出后再定时关闭。这个效果笔者想到了方法,于是就记录在这个博文中。下面是提示窗体的那个解决方案。 1、项目目录;  ......
  • Winform 知道一个窗体的句柄,如何获取这个窗体,并添加控件
    Winform知道一个窗体的句柄,如何获取这个窗体,并添加控件varfrm=(Control)Form.FromHandle(h);h为句柄,我这里强转成control了,你可以自己看情况改动我原来写过一个例子,调用cmd.exe窗口,并嵌入到自己的窗体内,你可以参考一下usingSystem;usingSystem.Collections;usingSy......
  • (一)C#窗体应用程序打包发布安装到桌面全过程
    一、首先安装好VS2022(可以参考如下安装教程),其次在里面扩展添加VisualStudioInstallerProjects1.VS2022安装教程参考:VisualStudio2022下载安装与使用超详细教程-编程宝库(codebaoku.com)2.在VisualStudio里面安装插件二、......
  • C#应用的用户配置窗体方案 - 开源研究系列文章
          这次继续整理以前的代码。本着软件模块化的原理,这次笔者对软件中的用户配置窗体进行剥离出来,单独的放在一个Dll类库里进行操作,这样在其它应用程序里也能够快速的复用该类库,达到了快速开发软件的效果。      笔者其它模块化应用的例子:      C#的关于......