`

delphi无标题栏窗口---类似于千千静听

阅读更多

 

思路:(1) 如果用图片做背景。可以根据图片设置窗体的形状;

         (2) 再加写代码;

 

 

 

转自:http://blog.sina.com.cn/s/blog_495671f50100dkvz.html

 

 

为了使标题栏不显示,我们可以在窗体BorderStyle特性中选取bsNone值即可。但选取bsNone值后,窗体周围什么也没有。当我们只想去掉标题栏时又怎么办呢?    
    实际上窗体的位置、大小、显示风格等均由Windows API的CreateWindowEx函数所指定,这个API的参数是在Delphi的CreateParams过程中被初始化的。Delphi是依据以下的TCreateParams记录的值生成窗体的。TCreateParams记录包含窗体的位置、大小以及其他各种特性,在Delphi的 Control.Pas单元中记录的定义为:      
   TCreateParams    =    record      
        Caption:    PChar;    //标题      
        Style:      DWORD;    //窗体的显示风格      
        ExStyle:    DWORD;    //窗体的扩展显示风格      
        X,    Y:    Integer;   //显示位置      
        Width,Height:Integer; //窗体的大小      
        WndParent:   HWnd;     //父窗体      
        Param:      Pointer;   //指向窗口生成参数(WM_CREATE消息的    //LParam)的指针      
        WindowClass:    TWndClass;    //窗体的类别      
        WinClassName:    array[0..63]    of    Char;    //类别名      
   end;    
        该记录中包含窗体的位置、大小和窗体显示风格的标志。因此,一般通过其值的改变来控制生成窗体的位置、大小和窗体显示风格。由于我们要设置窗体初始的风格,所以在Params.Style变量中设定窗体的风格。又因为该变量是取标志形式,所以使用and或or布尔运算来演算,从而完成各个位的on或 off。    
        例如,当BorderStyle特性为bsNone时,再给窗体加上可变更大小的粗框架,则对CreateParams方法进行重载。处理过程如下即可:    
   Procedure    TForm1.CreateParams(var    Params:TCreateParams);    
   begin    
        inherited    CreateParams(Params);    
        if    BorderStyle    =    bsNone    then    
         with    Params    do    Style:=    Style    or    WS_THICKFRAME;    
   end;    
        需要注意,一般情况下的继承关系,单纯使用inherited,则派生类的方法即可被调出执行;但继承使用了CreateParams方法时,必须明确按inheritedCreateParams(Params)编制程序。    
        关于窗体风格标志值用以下定量来指定,这里列举的只是具有代表性的一部分。详情请参考Windows    API的CreateWindow的help。    
   WS_BORDER边框    
   WS_CAPTION标题栏      
   WS_CHILD子窗体      
   WS_HSCROLL水平滚动条      
   WS_MAXIMIZE全屏化窗体      
   WS_MAXIMIZEBOX全屏按钮      
   WS_MINIMIIE图标化窗体      
   WS_MINIMIZEBOX图标化按钮      
   WS_SYSMENU系统菜单      
   WS_THICKFRAME可变更窗体大小的粗边框    
   WS_VISIBLE初始为可视的窗体    
        到此,没有标题栏的,大小可以变更的窗体已完成。    
     此窗体由于没有标题栏所以关闭、全屏化等按钮的操作均不可能,并且想通过拉拖标题栏移动窗体也不可能,下面我们先讨论关于移动的问题。    
        关于WM_NCHITTEST消息前面已经作了解说。当拖拉标题栏移动窗体时,窗体伴随鼠标器的移动,系统向窗体传送WM_NCHITTEST消息,当确认光标在标题栏上,并同时检测出鼠标器左按钮被按下时,移动成开始状态。    
        只要光标在窗体,则使窗体的移动成为可能。为此,WMNCHitTest处理过程如下。    
   porcedure    TForm1.WMNCHitTest(var    Msg:TWMNCHitTest);    
   begin    inherited;    //当标题栏非显示时,光标在窗体领域即可移动      
        if    (BorderStyle    =    brNone)    and      
        (Msg.Result    =    HTCLIENT)    then      
         Msg.Result:=    HTCAPTION;    
   end;    
        当鼠标光标在窗体领域内时,并且无标题栏,WM_NCHITTEST消息传回值为HTCLIENT时,将传回值作为HTCAPTION处理,系统则判断鼠标光标在标题栏上,这样就完成了窗体领域可移动的处理。这里再次给Windows系统一个骗局。    
        另外,讨论一下标题栏的消除和追加的方法。从而解决关闭、全屏化、图标化的问题。首先想到的方法是在窗体(Form)被单击或双击后,改变 BorderStyle特性的值。就是说对Form的OnClick事件进行定义,创建子程序将bsNone变为bsSizeable。    
        可是我们测试一下,它并不动作。实际上这是因为在前面为了处理移动,在WMNCHitTest过程中,将窗体领域的返回值变更成了标题栏的返回值,因此系统只判断鼠标光标在标题栏上单击。    
        要想移动和单击同时起作用需要下一点功夫。当用WinSight32来确认显示正常的窗体返回给系统的消息时,与通常窗体领域返回WM_LBUTTONDOWN消息相对,在标题上单击时返回WM_NCLBUTTONDOWN消息。    
        这里不使用窗体(Form)的OnClik事件,而是通过WM_NCLBUTTONDOWN消息的处理来得到希望的动作。如下编程即可    :    
   interface      
   

--------------------------------------------------------------------------------

type    
        TForm1    =    Class(TForm);    
        :    
        protected    WMNCLButtonDown(var    Msg:TWMNCLButtonDown);    
         message    WM_NCLBUTTONDOWN;      
    implemention    //鼠标单击窗体追加标题栏      
        porcedure    TForm1.WMNCLButtonDown(var    Msg:TWMNCLButtonDown);     
        begin    
         if    BorderStyle    =    bsNone    then    
       borderStyle    =    bsSizeble;    
        end;    
        当然,如果在窗体上配置其他可视构件,从而可以简单地通过对构件的单击来完成以上动作。

分享到:
评论

相关推荐

    delphi无标题栏窗口的拖动

    delphi无标题栏窗口的拖动 一般情况下,移动一个窗体需要将鼠标放置在标题栏上才能拖动窗体,为什么非要使用标题栏呢?其实我们可以使用一个巧妙的方法来实现将鼠标放置在窗体上按下就可拖动窗体

    Delphi无标题栏改变窗口大小..rar

    "Delphi无标题栏改变窗口大小"这个主题主要涉及到以下几个核心知识点: 1. **窗体样式设置**: Delphi中的窗体(TForm)有一个属性叫做BorderStyle,它决定了窗体的边框类型。要实现无标题栏的效果,我们需要将...

    Delphi美化窗口标题栏和右上角按钮..rar

    在Delphi编程中,窗口标题栏和右上角按钮的美化是提升应用程序视觉效果的关键步骤。这个名为"Delphi美化窗口标题栏和右上角按钮..rar"的压缩包很可能包含了一些示例代码或组件,用于帮助开发者实现这一目标。在...

    ffmpeg-delphi-pascal-headers-3.0.2.zip_FFVCL_delphi vlc_ffmpeg_f

    "ffmpeg-delphi-pascal-headers-3.0.2.zip" 是一个针对 Delphi 用户的 FFmpeg 头文件包,包含了 FFmpeg 3.0.2 版本的 Pascal 头文件,适用于 Delphi 的 FFVCL 库。 FFVCL (FFmpeg Video Component Library) 是一个 ...

    Delphi-OpenCV-Class-main

    Delphi binding for OpenCV Experimental Delphi binding for OpenCV 4.7.0 Development environment - Delphi 10.4, 11 x64 platform only

    Delphi无标题栏窗体拖动的方法 源码例子.rar

    本示例提供的"Delphi无标题栏窗体拖动的方法 源码例子.rar"正是为了展示如何实现这一功能。 首先,我们需要理解Delphi中的TForm组件。TForm是Delphi中用于创建窗口的基础类,它包含了窗体的基本属性、方法和事件。...

    delphi-modbus-develop.zip_delphi_delphi-modbus-1.6.7_modbus_modb

    最新版 delphi-modbus-develop 1.6.7

    delphi-modbus-tcp-indy.7z

    总的来说,"delphi-modbus-tcp-indy.7z"是一个实用的工具包,为Delphi开发者提供了实现Modbus TCP通信的便捷途径,尤其适用于那些需要与工业设备进行网络交互的应用场景。通过深入理解Delphi、Modbus TCP和Indy的...

    DELPHI 10.3编码转换 iso-8859-1转GBK,GBK转iso-8859-1

    本文将深入探讨标题提及的“DELPHI 10.3编码转换:iso-8859-1转GBK,GBK转iso-8859-1”,以及在二维码生成中的应用,以解决乱码问题。 首先,我们需要理解两种编码系统的基础知识。`ISO-8859-1`是一种单字节编码...

    delphi 无标题窗体加边框可拖拽调整大小

    在Delphi编程中,创建一个无标题窗体(BorderStyle属性设置为bsNone)时,确实会遇到无法拖动和调整大小的问题。标题栏通常提供了这些功能,但当我们选择不显示标题栏时,就需要自定义代码来实现这些行为。本资源...

    delphi 无标题调整大小

    无标题栏的窗体需要自定义代码来实现调整大小的功能。这通常涉及到处理鼠标消息,特别是`WM_NCHITTEST`和`WM_SIZE`消息。`WM_NCHITTEST`消息用于检测鼠标位置,判断用户是否在窗体边界上;`WM_SIZE`消息则在窗体大小...

    Delphi窗口快速通道-标题栏显示按钮.rar

    Delphi窗口快速通道-标题栏显示按钮,很久以前的东西了,具体细节不太记得了,自己看代码,这里只给一些简单的说明。程序启动hook,获取当前激活窗口和窗口的移动事件。将自己的窗口位置/大小设置为当前激活窗口的...

    gdi+实现无标题栏无边框半透明阴影窗口

    使用UpdateLayerWindow,gdi+实现无标题栏无边框半透明阴影窗口使用UpdateLayerWindow,gdi+实现无标题栏无边框半透明阴影窗口使用UpdateLayerWindow,gdi+实现无标题栏无边框半透明阴影窗口使用UpdateLayerWindow,...

    不用标题栏就可实现Delphi窗口拖动..rar

    通过以上步骤,我们就实现了无标题栏的Delphi窗体的拖动功能。请注意,这只是一个基础示例,实际应用中可能需要考虑更多的细节,比如防止窗口移动到屏幕之外、在拖动过程中禁用其他窗体的交互等。在Delphi编程中,...

    delphi 无标题窗体加边框可拖拽调整大小及移动窗体

    在Delphi编程环境中,开发人员有时会遇到需要创建无标题窗体的需求,通常是出于界面设计的特殊考虑。然而,无标题窗体(BorderStyle=bsNone)存在一个问题,即它缺少标准边框,使得用户无法方便地移动或调整窗体大小...

    如何在Delphi窗口的标题栏上添加菜单项.rar

    Delphi菜单实例,在Delphi窗口的标题栏上添加菜单项,如果看懂本示例的话,添加无限制的菜单就很容易,不过这种用法不多见哦。看到了吗?鼠标右键点击窗口的标题栏,在弹出的菜单中,“我的系统菜单项”即为添加的...

    Delphi7版本 - X-Superobject

    X-SuperObject 是一个在 Delphi 开发环境中广泛使用的 JSON 库,特别适用于 Delphi 7 这样的较早版本。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁、易读和易于机器解析而被广泛应用。...

    不错的delphi课程设计项目-delphi人才信息管理系统.rar

    不错的delphi课程设计项目--delphi人才信息管理系统 不错的delphi课程设计项目--delphi人才信息管理系统 不错的delphi课程设计项目--delphi人才信息管理系统 不错的delphi课程设计项目--delphi人才信息管理系统 不错...

    MAC虚拟机-升级-加载开发者设备-获取证书-XCode-Delphi XE10安装破解-网络环境配置详解

    网络上没有一篇文章是如此详细描述了安装MAC虚拟机到Delphi XE进行IOS开发的 MAC虚拟机安装 ----> MAC系统升级 ---->VMWare Tools安装 ---->获取证书 ---->加载开发者设备 ---->下载安装XCode ---->Delphi XE...

    Delphi实现拖动按钮移动无标题栏窗口

    无标题栏的窗体的拖动功能实现,Delphi添加一个可拖动窗体的按钮,通过对此按钮的控制可移动窗体,实现按住标题栏移动窗口的功能,无标题栏也就不能显示最大化、最小化和关闭窗口的功能,因此本程序自定义了一个关闭...

Global site tag (gtag.js) - Google Analytics