Lazarus中文社区

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

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 6377|回复: 14

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

[复制链接]

该用户从未签到

发表于 2011-12-22 14:01:09 | 显示全部楼层 |阅读模式
先从简单的开始做吧,就选LED灯。
==========================================
功能需求:
               1、能够变化灯的颜色
               2、可以定时闪烁,定时的长短可以动态调整
===========================================
提供的属性:
              1、前景色
               2、背景色
               3、定时长短
               4、开始、停止闪烁
============================================
郑重声明: 本开源控件可以任意使用。
                     但该控件及相关文字表述仅授权《LAZARUS实战宝典》用于文字出版,其它出版物不得登载。
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-12-22 17:13:45 | 显示全部楼层
上模型。
该模型只是在Lazarus里注册了LED灯控件,具体的代码,接续。。。。



注意;这个是更新过的,请重新下载。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-12-22 19:38:31 | 显示全部楼层
这个工程是如何建立的?能给个教程么?laz网站有控件制作的教程么?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-12-23 09:41:48 | 显示全部楼层
很快就放出做控件的教程了,是《LAZARUS实战宝典》其中的章节。

当然,官方网站也有介绍,但我看那些还不能够很好做出控件。后来根据自己的实战经验,
写了这个章节,感觉做控件比较容易了。

如果你参加这个控件的设计,能获得更多的实际体验。
这些项目,其实也是在教授如何制作控件。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-12-23 11:15:31 | 显示全部楼层
实现方式的思考
===================================
大致有以下的方法可以实现LED灯的显示:
  1、动态绘制
  2、通过图片显示
===================================
上面的显示的载体形式:
    1、继承Timage
    2、创建画布

上面的模型选择了形式2,故接续的内容均默认该形式。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-12-23 14:18:04 | 显示全部楼层
接续1
===================================================
添加控件的基本函数,
放在控件的public 关键字下面进行声明 :
    (1) 构建函数
  1.                constructor Create(AOwner: TComponent); override;
复制代码
    (2) 析构函数
  1.                destructor Destroy; override;
复制代码
放在控件的 protected 关键字下面进行声明 :
    (3) 画布载体的创建
  1.                 procedure Createmap;
复制代码
    (4) 画布载体的释放
  1.                 procedure Freemap;
复制代码
-----------------------------------------------------------------------------------------
在 implementation   关键字 和 procedure Register 过程中间添加:
  1. constructor Tled.Create(AOwner:TComponent);
  2. begin
  3.   inherited Create(AOwner);
  4. end;
  5. destructor TLed.Destroy;
  6. begin
  7.   inherited;
  8. end;
  9. procedure Tled.Createmap;
  10. begin
  11. end;
  12. procedure Tled.Freemap;
  13. begin
  14. end;
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-12-23 22:46:01 | 显示全部楼层
运行不了,我的工程扩展名是lpi,怎么回事
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-12-24 00:55:13 | 显示全部楼层
前面的是控件包,解压缩后,需要这样调入:




本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-12-26 17:50:31 | 显示全部楼层
接续2
===================================================
给LED加点特性:
  1.     FBackColor :Tcolor;       // 前景色
  2.     FForeColor :Tcolor;       //  背景色
  3.     FBackStyle : TFPBrushStyle;    // 前景填充模式
  4.     FForeStyle : TFPBrushStyle;    // 背景填充模式
复制代码
改变以上特性的函数:
  1.    procedure SetBackColor(CValue: TColor);         // 改变前景色
  2.     procedure SetForeColor(CValue: TColor);        // 改变背景色
  3.     procedure SetBackStyle(CValue: TFPBrushStyle);  // 改变前景填充模式
  4.     procedure SetForeStyle(CValue: TFPBrushStyle);  // 改变背景填充模式
复制代码
   以上的内容都放在关键字:private  的下面。
-------------------------------------------------------------------------
   再把以上的特性加入到IDE,方便看到即时的效果:
  1.     property BackColor: TColor Read FBackColor Write SetBackColor default clWhite;
  2.     property ForeColor: TColor Read FForeColor Write SetForeColor default clBlack;
  3.     property BackStyle: TFPBrushStyle Read FForeStyle Write SetBackStyle default bsSolid;
  4.     property ForeStyle: TFPBrushStyle Read FForeStyle Write SetForeStyle default bsSolid;
复制代码
    以上这些放到关键字: published 的下面。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-12-29 16:15:39 | 显示全部楼层
接续3
===================================================
添加改变特性的函数:
  1. procedure Tled.SetBackColor(CValue: TColor);
  2. begin
  3.   if CValue <> FBackColor then
  4.   begin
  5.     FBackColor := CValue;
  6.     Refresh;
  7.   end;
  8. end;
  9. procedure Tled.SetForeColor(CValue: TColor);
  10. begin
  11.   if CValue <> FForeColor then
  12.   begin
  13.     FForeColor:= CValue;
  14.     Refresh;
  15.   end;
  16. end;
  17. procedure Tled.SetBackStyle(CValue: TFPBrushStyle);
  18. begin
  19.   if CValue <> FBackStyle then
  20.   begin
  21.     FBackStyle := CValue;
  22.     Refresh;
  23.   end;
  24. end;
  25. procedure Tled.SetForeStyle(CValue: TFPBrushStyle);
  26. begin
  27.   if CValue <> FForeStyle then
  28.   begin
  29.     FForeStyle := CValue;
  30.     Refresh;
  31.   end;
  32. end;         
复制代码
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

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

GMT+8, 2025-5-2 23:13 , Processed in 0.105139 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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