相信没有什么人对 MEMO 陌生了吧。尽管其组件的功能不错。但是,对它进行一些功能的改进,可以更好的使用。

有的时候,我们想要知道,当前的坐标是什么?甚至,想要在 滚动条滚动时触发一些事件。 但,TMemo 本身并没有这样的功能。那我们就要扩展它;

那我们现在就来作:

file -> new -> other -> package

在 dpk 窗口上, Add 。

New component 如下图:

完整的程序源代码如下:

  1. unit JoeMemo;
    1. interface
    2. uses
    3. Windows,Classes, Controls, StdCtrls,Messages ;
    4. type
    5. TJoeMemo = class(TMemo)
    6. private
    7. { Private declarations }
    8. FRow : LongInt;
    9. FCol : LongInt;
    10. FOnHScroll : TNotifyEvent;
    11. FOnVScroll : TNotifyEvent;
    12. procedure WMHScroll(var msg : TWMHScroll);message WM_HSCROLL;
    13. procedure WMVScroll(var msg : TWMVScroll);message WM_VSCROLL;
    14. procedure SetRow(value : LongInt);
    15. procedure SetCol(value : LongInt);
    16. function GetRow : LongInt;
    17. function GetCol : LongInt;
    18. protected
    19. { Protected declarations }
    20. procedure HScroll; dynamic;
    21. procedure VScroll; dynamic;
    22. public
    23. { Public declarations }
    24. property Row : LongInt read GetRow write SetRow;
    25. property Col : LongInt read GetCol write SetCol;
    26. published
    27. { Published declarations }
    28. property OnHScroll : TNotifyEvent read FOnHScroll write FOnHScroll;
    29. property OnVScroll : TNotifyEvent read FOnVScroll write FOnVScroll;
    30. end;
    31. procedure Register;
    32. implementation
    33. procedure Register;
    34. begin
    35. RegisterComponents('JoeTools', [TJoeMemo]);
    36. end;
    37. { TJoeMemo }
    38. function TJoeMemo.GetCol: LongInt;
    39. begin
    40. Result := Perform(EM_LINEINDEX,-1,0);
    41. end;
    42. function TJoeMemo.GetRow: LongInt;
    43. begin
    44. Result := Perform(EM_LINEFROMCHAR,-1,0);
    45. end;
    46. procedure TJoeMemo.HScroll;
    47. begin
    48. if Assigned(FOnHScroll) then FOnHScroll(Self);
    49. end;
    50. procedure TJoeMemo.SetCol(value: Integer);
    51. begin
    52. if FCol > value  then FCol :=value;
    53. SelStart := Perform(EM_LINEINDEX,GetRow,0)+FCol;
    54. end;
    55. procedure TJoeMemo.SetRow(value: Integer);
    56. begin
    57. SelStart := Perform(EM_LINEINDEX,value,0);
    58. FRow := SelStart;
    59. end;
    60. procedure TJoeMemo.VScroll;
    61. begin
    62. if Assigned(FOnVScroll)  then FOnVScroll(Self);
    63. end;
    64. procedure TJoeMemo.WMHScroll(var msg: TWMHScroll);
    65. begin
    66. inherited;
    67. HScroll;
    68. end;
    69. procedure TJoeMemo.WMVScroll(var msg: TWMVScroll);
    70. begin
    71. inherited;
    72. VScroll;
    73. end;
    74. end.

http://blog.csdn.net/aroc_lo/article/details/3075814

控件编写:增强 TMEMO (一)(增加对WM_HSCROLL消息的处理)的更多相关文章

  1. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

    [源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...

  2. DevExpress WinForms v19.1新版亮点:Tree List等控件性能增强

    行业领先的.NET界面控件DevExpress v19.1终于正式发布,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WinForms v19.1中新增的一些控 ...

  3. DevExpress WinForms v19.1新版亮点:Spreadsheet/Sunburst控件功能增强

    行业领先的.NET界面控件DevExpress v19.1终于正式发布,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WinForms v19.1中新增的一些控 ...

  4. SharePoint用户控件编写的简单介绍

    转:http://www.it165.net/design/html/201204/1131.html 我们开发中,通常需要写各种各样的部件来实现我们的展示或者功能,下面就介绍下刚刚接触的QuickP ...

  5. 【C#基础】CSA控件编写秘籍

    新建CSA控件 1.新建一个纯类,命名空间是: namespace SimPerfect.CSAControlLibrary.CSAControls 2.实现两个构造函数:无参和传Candy参数 pu ...

  6. SharePoint 用户控件编写的简单介绍

    我们开发中,通常需要写各种各样的部件来实现我们的展示或者功能,下面就介绍下刚刚接触的QuickPart+用户控件的方式,算是自己的学习笔记,也和大家交流下心得. 1. 新建Web应用程序 2. 在项目 ...

  7. DevExpress WPF v19.2图表图形控件功能增强?速速种草

    通过DevExpress WPF Controls,你能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案. 无论是Office办公软件的衍 ...

  8. DevExpress WPF v19.1:Data Grid/Tree List等控件功能增强

    行业领先的.NET界面控件DevExpress 日前正式发布v19.1版本,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WPF v19.1中新增的一些控件及部 ...

  9. 扩展 easyui 控件系列:为datagrid 增加过滤行

    此功能还为真正完成,起到抛砖引玉的效果,发动大家的力量把这个功能完善起来,效果图如下: 基本上就是扩展了 datagrid.view 中的onAfterRender 这个事件,具体代码如下: $.ex ...

  10. Flex 自定义打印控件编写

    打印历来是web应用一个比较棘手的问题,幸好flex web应用是运行在flash player上的,flash player可以访问打印机,所以flex 应用可以实现比较强大的打印功能.Flex 自 ...

随机推荐

  1. Android:设置背景图和标题

    在MainActivity.onCreate(Bundle savedInstanceState){}设置背景图和标题. setTitle("wyl的diary");//标题,即左 ...

  2. 断开/删除 SVN 链接(.svn)的几种方法

    上传到正式的服务器时需要去掉这些不必要的文件,找到了几种方法: 1.windows下: xcopy project_dir project_dir_1 /s /i (从project_dir 复制文件 ...

  3. Android 中 GridView 常用属性合集

    GridView的一些常用属性: android:numColumns=”auto_fit” //GridView的列数设置为自动 android:columnWidth=”90dp " / ...

  4. POJ1273 最大流 EK算法

    套了个EK的模板 //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdi ...

  5. oracle数据库连接无响应的解决

    昨天中午时,查询到服务器的数据流水最晚记录是早上8点的,现场查看服务日志很奇怪,日志输出显示挂死在数据库连接这一步.多次调试无果,随后百度发现有资料显示oracle 10.2.1的版本有登录无响应的B ...

  6. u-boot分析——struct gd_t与struct bd_t

    gd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递.分别定义在./include/asm/global_data.h和./include/asm/u ...

  7. larbin是一种开源的网络爬虫/网络蜘

    larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien Ailleret独立开发.larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源.Lar ...

  8. 插件化—配置xml的辅助测试

    1.xml文件,xml文件在res/xml目录下 <?xml version="1.0" encoding="utf-8"?> <infos& ...

  9. First_1

    #region 练习题 1.4 (1) ///*求一个N阶方阵所有原素的和.(改进:二维数组的大小可以自己输入)*/ //Console.WriteLine("请输入i和j的值:" ...

  10. Steve Yegge:Google面试秘籍

    我憋了很长时间想写点关于去Google面试的秘籍.不过我总是推迟,因为写出来的东西会让你抓狂.很可能是这样.如果按统计规律来定义"你"的话,这文章很可能让你不爽. 为啥呢?因为啊- ...