c++builder/delphi中透明panel及透明窗口的实现方法_delphi教程

可能大多数程序员会问:透明窗口,特别是透明Panel有什么应用价值呢?可别小看它们哦,下面我就来讲讲他们的巨大作用。
(1)透明窗口可以用于软件界面特效。大家可以看到很多软件的窗口出现或退出的时候是渐进或渐出的,而并非象WinArray8那样直接弹出窗口。这就是Win2000下所提供的功能。实现方法很简单:

this->AlphaBlend=true;

this->AlphaBlendValue=100;

代码中this是窗口的指针,当然你不能在数据模块或是其他类里调用(废话)。代码更改了窗口的属性:AlphaBlend及AlphaBlendValue。AlphaBlend为true时窗口为透明状态,false时为不透明状态;AlphaBlendValue值为整型,可以取0~255的范围,0时为全透明,255时为全不透明,当然中间的值为半透明咯(爽)。而窗口渐进或渐出效果只要先将AlphaBlend设为true,然后在窗口显示或关闭时在一个循环语句中逐渐将AlphaBlendValue值改大或改小,就可以了(别忘了改完AlphaBlendValue后要刷新窗口哦:this->Refresh())。注意,窗口透明后,窗口上面的所有控件将跟随窗口透明。

难道透明在窗口中的应用就如此而已吗?NO!!!还有更精彩的。窗口类还有两个属性:TransparentColor和TransparentColorValue。先将TransparentColor(bool型)设为true,然后再将TransparentColorValue(TColor型)设为你想设为透明的颜色,那么窗口上只要有这种颜色的地方将呈现透明状态。(爽爽爽)配合AlphaBlend及AlphaBlendValue属性,可以做出想不到的特效来。怎么做?不用我再写了吧。

(2)透明Panel的实现方法。TPanel类有一大缺点:只能设置其颜色,要是想在上面放一幅bmp图或要透明的话无法实现;而它也有一大优点:因为他是从TWinControl类继承而来的,所以它的上面可以放其他控件,再就是它可以位于同级控件的上面。最后一句话什么意思?你把一个TPanel控件放到窗口上,再把一个TImage控件也放到窗口上,现在这两个控件的父都是窗口,而这两个控件属于同级关系,将Panel拖到Image上面盖住一部分,你会发现,无论你如何操作都无法用Image盖住Panel,即便你用了bring to front 或set to back命令,如果你将Image换成Panel的话,两个Panel无论谁盖住谁都可以了。这是因为TImage继承自TGraphicControl的缘故。而且凡继承自TGraphicControl的控件上面都不能放其他控件。你还可以发现TPanel类没有TCanvas属性,因此无法在上面画东西。

怎么样实现透明,而且还可以显示背景图的Panel呢?答案就是自己重新做一个Panel出来,限与篇幅,我在这里不写代码,你想要的话,发个E-Mail给我:decsentangle@sohu.com 。然后我再把控件代码发给你(别担心,免费的)。C++Builder和Delphi代码都可以。

究竟透明Panel有什么用呢?God save me,用处可大了,例如作为GIS系统中的图层。图层?当然如果你用过Photoshop或Flash的话。首先,透明Panel可以接受控件,那么你可以将点、线、面、图等控件放到它上面,而不是利用TCanvas去画它们,利用OOP(面向对象编程)技术你就可以方便的对他们进行操作,例如用户用鼠标点击一条线的时候,可以利用该线控件的OnMouseClick事件触发它,而如果是用TCanvas画出来的线,你就不得不去确定鼠标点击的坐标是否在这条线上。当然你还可以利用透明Panel代替普通Panel做出很多界面特效来。

(转载)c++builder/delphi中透明panel及透明窗口的实现方法_delphi教程的更多相关文章

  1. 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)

    Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...

  2. (转载)在Delphi中利用MSDASC来配置数据库链接

    在Delphi中利用MSDASC来配置数据库链接 在运行期进行数据库的连接是一个问题,自己写一个窗体配置吧,数据库不一样,所用的参数也不一样,还有那讨厌的连接字符串,有时真不知该写什么好.那天无意中发 ...

  3. 【转载】C#编程中两个List集合使用Intersect方法求交集

    在C#语言程序设计中,List集合是常用的集合数据类型,在涉及集合类型的运算中,有时候我们需要计算2个List集合中共有的数据,即对2个List集合求交集运算.此时可以使用C#语言提供的Interse ...

  4. 【转载】取得系统中网卡MAC地址的三种方法

    From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...

  5. Delphi中取得汉字的首字母简单方法(十分巧妙)

    //从朝闻道的博客里转载,原文定义AHzStr: String,发现结果为空,后来改成AHzStr: AnsiString就可以了 function GetHzPy(const AHzStr: Ans ...

  6. 在 Delphi 中判断一个字符是中文的方法

    http://blog.163.com/l1_jun/blog/static/143863882011741124581/ 由于 Delphi2005 支持中文标识符,在编写 PASCAL 词法分析器 ...

  7. 【2016-08-18】转载:总结C++中几种结构体初始化的方法

    作者:Ac_Von 博客地址:http://www.cnblogs.com/vongang/ 文章地址:http://www.cnblogs.com/vongang/archive/2011/07/3 ...

  8. 转载:简单介绍Python中的try和finally和with方法

    用 Python 做一件很平常的事情: 打开文件, 逐行读入, 最后关掉文件; 进一步的需求是, 这也许是程序中一个可选的功能, 如果有任何问题, 比如文件无法打开, 或是读取出错, 那么在函数内需要 ...

  9. Delphi中的GetEnumName和GetEnumValue的使用方法

    利用TypInfo单元的GetEnumName和GetEnumValue可以遍历任意枚举类型,并获取其名称和值.下面是示例Demo. uses TypInfo; ... procedure TForm ...

随机推荐

  1. android124 zhihuibeijing 新闻中心-新闻 -北京页签 下拉刷新

    缓存工具类:以url为key,json数据为value, package com.itheima.zhbj52.utils; import com.itheima.zhbj52.global.Glob ...

  2. qt-vs-addin-版本支持

    qt-vs-addin-1.2.0-opensource.exe         VS200X qt-vs-addin-1.2.1-opensource.exe         VS200X qt-v ...

  3. Android之UI--重绘EditText以及实现Button的渐变色

    在本文中实现的是比较普遍的一个对EditText的重绘以及对于按钮或窗口添加渐变色. 因为EditText是继承于TextView的,所以可以实现对EditText的重绘,在重绘的时候只需要继承Edi ...

  4. 分布式 ES 操作流程解析

    概念解析 CURD 操作 CURD 操作都是针对具体的某个或某些文档的操作,每个文档的 routing 都是确认的,所以其所在分片也是可以事先确定的.该过程对应 ES 的 Document API. ...

  5. posix thread内存可视性

    线程间的内存可视性 当线程调用怕thread——create时, 它所能看到的内存值也是它建立的线程能够看到的.任何在调用怕thread_create之后写入的数据,可能不会被建立的线程看到,即使写操 ...

  6. jqzoom基于jQuery的图片放大镜

    1.引入jQuery和jqzoom插件 <script src="/js/common/jquery-1.6.2.js" type="text/javascript ...

  7. jQuery 判断div是否shown

    // Checks for display:[none|block], ignores visible:[true|false] $(element).is(":visible") ...

  8. HTTP层 —— 路由

    1.基本路由 最基本的 Laravel 路由只接收一个 URI 和一个闭包,并以此提供一个非常简单且优雅的定义路由方法: Route::get('foo', function () { return ...

  9. 史上最全的phpstorm常用配置

    取消自动保存并标识修改的文件为星星标记 1.取消自动保存 进入 File -> Settings -> General,取消下面两选项的勾选: 2.星星标记 进入 File -> S ...

  10. ajax.abort 终止AJAX请求

                               $(document).ready(function () { var ajax; $('#choice').change(function() ...