控件编写:增强 TMEMO (一)(增加对WM_HSCROLL消息的处理)

相信没有什么人对 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

时间: 2024-11-05 11:39:07

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

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

[源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性 作者:webabcd介绍重新想象 Windows 8.1 Store Apps 之控件增强 文本类控件的增强 为一些控件增加了 Header 属性和 HeaderTemplate 属性 为一些控件增加了 PlaceholderText 属性 示例1.演示

详细控件编写

@interface MainViewController : UIViewController @property (strong, nonatomic) UIButton *myBtn; @property (strong, nonatomic) UISlider *mySlider; @property (strong, nonatomic) UISwitch *mySwitch; @property (strong, nonatomic) UISegmentedControl *mySc

DevExpress v15.1:Reporting控件功能增强(二)

<下载最新版DevExpress Reporting v15.1.5> 增强跨平台功能 多值查找参数 现在,您可以创建一个可以存储多个值的参数.在打印预览中默认编辑器的这些参数是一个多选下拉列表,这允许最终用户通过选择复选框所需的值来指定多个参数值. 自动Drill Down 现在您可以创建交互式的drill-down报表,无需编写任何代码. 轻松访问格式规则和样式 在这个版本中,所有的报表格式规则和样式都可以通过报表资源管理器中的相应节点进行访问.您可以使用拖放操作轻松地应用一个格式规则和样

DevExpress v15.1:VCL控件功能增强(三)

<下载最新版DevExpress VCL Controls v15.1.3> VCL Map Control 改进滚动 新版本改进了应用程序激活惯性滚动新地图选项的用户体验--当松开鼠标时地图滚动会逐渐停止.除了使用鼠标,最终用户还可以使用方向键来滚动地图. VCL Pivot Grid 性能增强 在新的版本中,我们改进了Pivot Grid的性能,同时当导出数据时优化了内存的使用.测试研究表明,现在的导出方法比以前快3倍左右,同时使用的内存至少比以前的版本少4倍. 我们的试验表明,大数据集现

DevExpress v15.1:VCL控件功能增强(三)

<下载最新版DevExpress VCL Controls v15.1.3> VCL Map Control 改进滚动 新版本改进了应用程序激活惯性滚动新地图选项的用户体验--当松开鼠标时地图滚动会逐渐停止.除了使用鼠标,最终用户还可以使用方向键来滚动地图. VCL Pivot Grid 性能增强 在新的版本中,我们改进了Pivot Grid的性能,同时当导出数据时优化了内存的使用.测试研究表明,现在的导出方法比以前快3倍左右,同时使用的内存至少比以前的版本少4倍. 我们的试验表明,大数据集现

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

新建CSA控件 1.新建一个纯类,命名空间是: namespace SimPerfect.CSAControlLibrary.CSAControls 2.实现两个构造函数:无参和传Candy参数 public CDealProcess() { InitMe(); } public CDealProcess(Candy parentCandy) { this.ParentCandy = parentCandy; InitMe(); } 3.编写InitMe()方法初始化控件属性: private

DevExpress v15.1:VCL控件功能增强(二)

<下载最新版DevExpress VCL Controls v15.1.3> VCL Ribbon Control 新的Office 2016风格 新版本中发布了新的Ribbon风格,您现在可以引入Office 2016用户体验到您的应用程序中.为了帮助您使用这些风格,我们添加了IDE模板来允许您从头开始创建Office 2016 Ribbon风格的应用程序和Ribbon表单. VCL Layout Control 统一指标的Drag-and-Drop操作 在新的版本中,VCL Layout

Flex 自定义打印控件编写

打印历来是web应用一个比较棘手的问题,幸好flex web应用是运行在flash player上的,flash player可以访问打印机,所以flex 应用可以实现比较强大的打印功能.Flex 自身提供的printjob.flexprintjob相对来说用起来不是很方便,对于有严格纸张设置.翻页等打印需求,略显功能不足,因此需要基于printjob或flexprintjob来完善flex的打印功能,及自定义打印控件. 本控件核心为: 1)PrintManager,打印控制核心类 2)IPri

DevExpress v15.1:VCL控件功能增强(一)

<下载最新版DevExpress VCL Controls v15.1.3> VCL Rich Edit Control Word? Inspired Rich Text编辑器 DevExpress VCL Rich Edit控件首次发布,此次新版本更新标志着正式发布了该控件,它包括以下新功能: 表格 Multi-column和multi-section布局 内置上下文菜单 简单草案文档视图 新的对话框:字体.符号和编号.查找和替换.插入表格.表格属性.标签以及符号等. 水平和垂直标尺 行编号

DevExpress v15.1:VCL控件功能增强(一)

<下载最新版DevExpress VCL Controls v15.1.3> VCL Rich Edit Control Word? Inspired Rich Text编辑器 DevExpress VCL Rich Edit控件首次发布,此次新版本更新标志着正式发布了该控件,它包括以下新功能: 表格 Multi-column和multi-section布局 内置上下文菜单 简单草案文档视图 新的对话框:字体.符号和编号.查找和替换.插入表格.表格属性.标签以及符号等. 水平和垂直标尺 行编号