Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
12
返回列表 发新帖

[Lazarus实战宝典] 开源控件大家做(1) 闪烁的LED灯

[复制链接]

该用户从未签到

 楼主| 发表于 2011-12-30 15:57:27 | 显示全部楼层
接续4
===================================================
这里是关键点了,看好:

添加:  
  1. procedure paint; override;  
复制代码
放到   public  关键字下

添加代码:
  1. procedure Tled.paint;      
  2. begin
  3.   with canvas do
  4.   begin
  5.     Brush.Style := FBackStyle;
  6.     Brush.Color := FBackColor;
  7.     Pen.Color   := FBackColor;
  8.     EllipseC(self.Width div 2,self.Height div 2,self.Width div 2, self.Height div 2);
  9.     Brush.Style := FForeStyle;
  10.     Brush.Color := FForeColor;
  11.     Pen.Color   := FForeColor;
  12.     EllipseC(self.Width div 2,self.Height div 2,self.Width div 3, self.Height div 3);
  13.   end;
  14.   inherited Paint;
  15. end;
复制代码
=================================================================
然后 compile -- install ..................

弄几个效果图:


讲到这里,也该有人交作业了吧?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-2-3 09:32:56 | 显示全部楼层
接续5
===================================================
让灯闪烁起来:

添加:  
  1.            LedTimer   : TTimer;
  2.            fInterval  : longint;
  3.            fflash     :  boolean;
  4.    
  5.           procedure SetInterval(CValue : longint);
  6.           procedure SetFlash(CValue : boolean);
  7.           procedure TOnLedTimer(Sender: TObject);
复制代码
      
          放到 private 关键字下;

添加:
  1.              procedure CreateTimer;
  2.              procedure FreeTimer;
复制代码
            放到 protected 关键字下;

添加属性:
  1.                 property Interval : longint read fInterval write SetInterval;
  2.                 property flash     : boolean read fflash write SetFlash;
复制代码
             放到 published 关键字下;

在控件的构建里添加:
  1.             fInterval:=1000;
  2.             fflash:=false;
  3.             CreateTimer;
复制代码
在控件的析构里添加:
  1.             FreeTimer;
复制代码
添加代码:
  1.    procedure TLed.CreateTimer;
  2. begin
  3.     LedTimer := TTimer.Create(Self);
  4.     LedTimer.Interval := fInterval;
  5.     LedTimer.Enabled:=false;
  6.     LedTimer.OnTimer:=@TOnLedTimer;
  7. end;
  8. procedure TLed.FreeTimer;
  9. begin
  10.     LedTimer.Enabled:=false;
  11.     LedTimer.Free;
  12. end;
  13. procedure TLed.TOnLedTimer(Sender: TObject);
  14. begin
  15.   FForeColor:=not FForeColor;
  16.   Refresh;
  17. end;
  18. procedure TLed.SetInterval(CValue: longint);
  19. begin
  20.      fInterval := CValue;
  21.      if (Assigned(LedTimer)) then LedTimer.Interval := CValue;
  22. end;
  23. procedure TLed.SetFlash(CValue: boolean);
  24. begin
  25.      fflash := CValue;
  26.      if (Assigned(LedTimer)) then LedTimer.Enabled := fflash;
  27. end;
复制代码
====================================================
控件的代码基本完成,对控件包进行 “Compile” 和 “install” 。

成品的构件放到form上后显示的特性:



        设置属性 flash:=true; 即可让LED闪烁;
        设置属性 flash:=false; 即可让LED停止闪烁。

=======================================================
本控件的创建讲解完毕,如果感兴趣的话,可以自行添加新的特性。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2021-8-26 17:08
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2012-2-18 13:41:06 | 显示全部楼层
    没人交作业,我来交作业吧,这个是已经完成的控件。在lazarus 0.9.30.2+fpc2.4.4中测试通过。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2012-9-15 07:14:46 | 显示全部楼层
    包里的lrs文件是怎么做的?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2012-9-15 22:27:58 | 显示全部楼层

    回 13楼(hjfdark) 的帖子

    hjfdark:包里的lrs文件是怎么做的? (2012-09-15 07:14) 
    《LAZARUS实战宝典》有详细的讲解。
    回复 支持 反对

    使用道具 举报

    *滑块验证:

    本版积分规则

    QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

    GMT+8, 2025-5-2 23:09 , Processed in 0.023078 second(s), 7 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表