delphi透明组件(控件)开发

原创 2004年10月28日 21:03:00

我的blog开通了:)。今天就谈谈我最近写透明组件(透明控件)的dd吧。

网友提供的方法:

/////////////////////////////////////////////
透明的控件, 一般继承自TGraphicControl的
(就是那些没有handle属性, 不能有focus的控件, 如image)
都有Transparent属性. 对TWinControl类的控件, 要实现透明只要完成以下
四步基本上就成了.
1.在Create中设定ControlStyle :=
ControlStyle - [csOpaque];)
2. override 它的CreateParams方法, exstyle 里加上WS_EX_TRANSPARENT.
3. 修改它的parent的window style, 去掉WS_CLIPCHILDREN.
  inherited CreateParams(Params);
  with Params do
  begin
  { 完全重画 }
    Style := Style and not WS_CLIPCHILDREN;
    Style := Style and not WS_CLIPSIBLINGS;
  { 增加透明 }
    ExStyle := ExStyle or WS_EX_TRANSPARENT;
  end;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


4. 截获WM_ERASEBKGND, 什么都不做直接返回1.(不搽除背景)
一般有上面3步能成. 有些控件比如TPanel, 在它的paint中用了fillrect,
所以要实现透明的话还要override 它的paint方法, 自己画.
按钮透明需要进一步处理.
createparams里加上style := style or BS_OWNERDRAW;
然后在WM_DRAWITEM中自己画吧
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


我的研究发现    Style := Style and not WS_CLIPCHILDREN;
    Style := Style and not WS_CLIPSIBLINGS;
没有作用。
如果你要改变控件位置和颜色,请拦截WM_MOVE,和CN_CTLCOLOREDIT消息,在里面调用invalidate方法,重绘组件。

阅读inside vcl 和 飞思的组件开发书籍。了解如何选择适当的基类去继承然后扩展成自己的类。建议写控件的朋友应先了解这方面的知识,不要从tobject开始写起。ControlStyle :=ControlStyle - [csOpaque];)很关键,看源代码发现它影响了整个控件的画方法。现在已经实现了透明组件,可是用鼠标移动该组件就出现刷新不够,背景混乱的问题。现在正在阅读timage源代码,看它是如何实现。想讨论这方面技术的朋友请email:wenjunwu430@163.com

 

delphi透明组件(控件)开发

/////////////////////////////////////////////透明的控件, 一般继承自TGraphicControl的(就是那些没有handle属性, 不能有focus的控...
  • Rzhghost
  • Rzhghost
  • 2007年01月27日 16:13
  • 2269

delphi中使用透明控件的几种方法

有时需要使用透明控件用于捕获鼠标消息1.调用Windows2000,xp新的API函数实现这一功能的过程。使用SetLayeredWindowAttributes 2.直接设置控件的alphablen...
  • ilvu999
  • ilvu999
  • 2009年09月11日 11:51
  • 1245

DELPHI超级Internet控件集--INDY

DELPHI超级Internet控件集--INDY 你有没有用DELPHI开发Internet程序?是不是常常会烦恼FastNet组件为什么没有源代码?有很多问题,不看源代码,真不知道是什么问题。是不...
  • mm7758521
  • mm7758521
  • 2007年08月18日 11:53
  • 1153

Delphi 组件开发实现类 编辑框

效果如下图: 实现代码: unit Edit1; interface uses   SysUtils, Windows,Classes, Controls, StdCtrls,Graph...
  • zang141588761
  • zang141588761
  • 2016年09月05日 14:47
  • 615

Delphi 如何实现窗口透明,但是窗口上的文字不透明

其实很简单,进行下面的属性设置将窗体的TransparentColor属性设置为true窗体TransparentColorValue属性 设置为clBlack(黑色)窗体中的Label1的Color...
  • webouse
  • webouse
  • 2007年09月03日 11:38
  • 5246

Delphi中如何实现透明按钮 也可用于BCB

各位亲爱的读者,在delphi编程实战中我们可以使用按钮控件来制作程序中的按钮键。但是在使用其它软件时,我们常常可以看到透明按钮的效果。那么如何在delphi中实现透明按钮的效果?笔者在互联网搜索了不...
  • binnygoal
  • binnygoal
  • 2014年02月26日 10:18
  • 1154

用delphi编写图片播放组件

...{ ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  Author:pengyi    Email:pe...
  • xzknet
  • xzknet
  • 2007年04月04日 22:12
  • 1761

VCL组件开发

4.1 TObject分支     下面几部分分别对包含于五个主要分支中的类做出简要地描述,为完整地说明VCL对象的分层结构,引用了包含于产品中的VCL对象分层结构图。     所有的VCL对象都...
  • ghevinn
  • ghevinn
  • 2014年05月13日 11:54
  • 1863

自行实现透明的控件如Panel GroupBox

CSDN的Blog开通了。我想这里的Blog作为今后自己回答别人问题的时候,收藏答案的地方很不错呢。因为社区的贴子早晚都会沉下去,查找起来很不方便,甚至再也找不到呢。Q: http://communi...
  • cker
  • cker
  • 2004年06月23日 16:38
  • 6737

delphi7丢失控件面板的处理方法

delphi7丢失控件面板的处理方法如下: 1、打开注册表(regedit) 2、找到 HKEY_CURRENT_USER\Software\Borland\Delphi\...
  • changjuanfang
  • changjuanfang
  • 2016年12月23日 11:48
  • 466
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi透明组件(控件)开发
举报原因:
原因补充:

(最多只允许输入30个字)