博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Delphi中编写控件的基本方法 (转)
阅读量:2501 次
发布时间:2019-05-11

本文共 2920 字,大约阅读时间需要 9 分钟。

在Delphi中编写控件的基本方法 (转)[@more@]在 中编写 的基本方法
  作为Delphi 员,要想进一步提高 水平就必须掌握控件的编写方法,本篇文章将通过一个简单的例子来为初学者介绍编写控件的一些基本方法和 。
  这个例子控件叫TLeiLabel,是在TLabel的基础上增加两个实用的功能:一是使文字具有立体形状,二是使文字具有超链接属性。下面就让我们一步步来实现这些功能。
  一、使文字具有立体形状
  首先定义类型T3DEffect和属性Style3D分别如下:
  T3DEffect=(Normal,Raised,Lowered, Shadowed);
  property Style3D:T3DEffect read FStyle3D write SetStyle3D default Normal;
  再在private中定义变量:“FStyle3D:T3DEffect;”,并设置SetStyle3D()方法如下,这也是写方法的一般格式:
  procedure TLeiLabel.SetStyle3D(Value: T3DEffect);
   begin
   if FStyle3D <> value then
   begin
   FStyle3D := value;
   invalidate; //表示控件将重画
   end;
   end;
  另外对于带阴影的文字还要定义阴影的偏移量ShadeXOffSet和ShadeYOffSet:
  property ShadowXOffSet: integer read FXOffSet write SetFXOffSet default 5;
  property ShadowYOffSet: integer read FYOffSet write SetFYOffSet default -5;
  写方法SetFXOffSet()、SetFYOffSet()和上面的SetStyle3D()类似。
  要重画控件一般要重载Paint方法,此处只是重画文字,我们只需重载DoDrawText方法。
  DoDrawText的声明放在Protected中:
  procedure DoDrawText(var Rect: TRect; Flags: Longint); overr ;
  此处DoDrawText()根据四种类型(正常、凸起、凹进和阴影)分别画出不同的文字。
二、使文字具有超链接属性
  定义一个属性URL表示要链接的网址或E 地址。
  Property URL : String read FURL write SetURL;
  写方法SetURL如下:
  procedure TLeiLabel.SetURL(Value: String);
  Begin
  if FURL <> Value then FURL := Value ;
  if FURL <> '' then
  Cursor := crHandPoint;
  end;
  当点击此Label时要打开 或收发 工具,这便要重载Click方法。
   Procedure Click; Override;
   procedure TLeiLabel.Click;
   var s: string;
   Begin
   Inherited Click;
   if FURL = '' then exit;
   if LowerCase(Copy(FURL,1,7)) = 'http://' then
   s := FURL
   else if Pos('@',FURL) <> 0 Then
   s := 'mailto:' + FURL
   else
   s := 'http://' + FURL;
   Execute(Application.Handle, 'open', PChar(s), NIL, NIL, SW_SHOWNORMAL);
   end;
  一般的超链接当鼠标移入时文字的颜色发生变化。为此加上属性HoverColor,表示鼠标移入时文字的颜色。
  Property HoverColor : TColor Read FHoverColor Write SetHoverColor default clRed;
  还要定义两个接收 消息CM_MOUSEENTER和CM_MOUSELEAVE(鼠标移进和移出)的过程:
  Procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  Procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  Procedure TLeiLabel.CMMouseEnter (Var Message: TMessage);
   begin
   If Enabled and Visible and getParentForm(Self).Active then
   begin
   FFontColor := Font.Color;
  //将文字的颜色保存起来
   Font.Color := FHoverColor;
  //改变文字颜色
   End;
   end;
  Procedure TLeiLabel.CMMouseLeave (Var Message: TMessage);
   begin
   Font.Color:=FFontColor;
  //恢复文字原来的颜色
   end;
  为设置属性的默认值,我们还需要重载构造Create(),注意,重载构造时必须首先 祖先类的构造。重载构造Create()的程序如下:
   constructor TLeiLabel.Create(AOwner: TComponent);
   begin
   inherited Create(AOwner);
  //必须首先调用祖先类的构造
   FStyle3D := Normal;
   FXOffSet := 5;
   FYOffSet := -5;
   FHoverColor := clRed;
   end;
  最后,还必须为这个控件加上图标。我们可以用Delphi中的Image Editor来创建一个24×24的Bitmap位图,保存为一个DCR ,文件名必须与控件的Pas文件名相同,位图名必须与控件名相同且全部大写。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-975751/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10748419/viewspace-975751/

你可能感兴趣的文章
sdc时序约束
查看>>
Xilinx Jtag Access/svf文件/BSCANE2
查看>>
NoC片上网络
查看>>
开源SoC整理
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
已知子网掩码,确定ip地址范围
查看>>
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Docker(一)使用阿里云容器镜像服务
查看>>
Docker(三) 构建镜像
查看>>
FFmpeg 是如何实现多态的?
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>