DELPHI的MEMO组件
位于Standard选项卡上,它是对EDIT控件的扩展,可以对多行文本进行显示、输入 和编辑.
Lines属性:
该属性实际上为TStrings类型的对象,用来存放Memo对象的文本 TStrings有一个缺省的属性Strings,
它的定义为: property strings[index:integer]:string;
其中,Index表示字符串的索引值,从0开始,到TStrings对象中字符串的最大行 数减1为止。
TStrings的主要方法:
procedure add(const s:string);//在尾部添加一个字符串
procedure delete(index:integer);//删除索引值为INDEX的字符串
procedure insert(index:integer;const s:string);//在INDEX位置处插入一个 字符串
procedure clear;//清除所有的字符串
procedure loadfromfile(const filename:string);//从文本文件中装载字符串 组
procedure savetofile(const filename:string);//将字符串组存为一个文件
由于属性Lines的类型为TStrings,所以了解了TStrings的主要属性和方法后,就 可以使用Lines属性组管理Memo的文本了
memo1.lines[0]:='this is first line';//将首行的内容改为 'this is first line'
memo1.lines.add('add line');//在最后添加一行,内容为 'add line' memo1.lines.delete(0);//将第一行删除
memo1.lines.insert(1,'inert one line');//在第二行处添加
memo1.lins.loadfromfile('c:\readme.txt');//从文本文件中装载字符串组
Text属性:
该属性的类型为字符串型,内容为Memo的文本,该属性与Lines的不同之处在于它 是一个字符串存放了Memo的所有内容。
MaxLength属性:
该属性用来确定Memo所能接受的最大字符数,缺省时为0,表示不限制
WordWrap属性:
该属性用来设置Memo的文本是否可以自动换行。如果设为TRUE,则文本可以自动 换行,同时应将水平滚动条设为无效。
Modified属性:
该属性用来确定文本是否被改动过,如果为TRUE,则表示被改动过
SelText属性:
该属性可以用来获得被选中的文本
SelLength属性:
该属性可以用来获得被选中的文本的长度。
-------------------------------------------------------------------------------
多行编辑框组件(TMemo)TMemo组件可以显示、编辑多行文本,是一个标准的Windows多行编辑组件。对一些比较多的文本内容可以利用TMemo组件来显示、编辑。
1.TMemo组件的典型用法
TMemo组件主要用于输入备注型的字符串,它不能进行文字格式的设置。利用TMemo组件Lines属性的LoadFromFile方法打开文本文件,对文本文件进行编辑。编辑完成后再利用Lines属性的SaveToFile方法将编辑后的文本进行保存。
例如下面的代码,在拥有一个Memo1组件和两个Button组件的窗体上,实现了文本文件的打开和保存功能:
procedure TForm1.OpenBtnClick(Sender: TObject); begin
Memo1.Lines.LoadFromFile(’C:\a.txt’); //打开C:\a.txt文件 end;
procedure TForm1.SaveBtnClick(Sender: TObject); begin
Memo1.Lines.SaveToFile(’C:\a.txt’); //保存为C:\a.txt文件 end;
TMemo组件主要是利用Lines属性进行控制,它的取值类型为TStringList属性。
2.TMemo组件的重要属性
Lines---------------可以访问多行文本中的每一行
ScrollBars----------此属性用于设置是否要加上滚动条
WantReturn----------用于解决按下“enter”键是用于换行还是作用于按钮WantTabs每按一次Tab键,将使光标在多行文本编辑器中移动一个制表位WordWrap当输入文字到了多行文本编辑器的右边界时,文字自动换行下面介绍程序中TMemo组件常用的属性。
(1)Lines属性
单击Lines属性后边的“...”按钮打开编辑框,可以对Memo组件的内容进行编辑,通过此属性可以对Memo组件内的每一行进行访问。例如取出Memo1组件第2行的内容显示为Form1的标题:
Form1.Caption:=Memo1.Lines.Strings[1];
利用Line属性的Add方法和Delete方法可以对Memo的内容进行动态地添加和删除。如下代码的功能是向Memo1组件中添加一行内容:
Memo1.Lines.Add(’在Memo的末尾添加一行内容’); 删除Memo的第1行内容可以这样写: Memo1.Lines.Delete(0);
(2)ScrollBars属性
ScrollBars属性用于设置是否要加上滚动条(因为需要输入多行文字)。本属性设定了以下4个用户可选值。
. ssNone:不加上滚动条。
. ssHorizontal:加上水平滚动条。 . ssVertical:加上垂直滚动条。
. ssBoth:水平和垂直滚动条都加上。
(3)WantReturn属性
假如Form上有一个按钮,并且按钮的Default属性设为True,当用户按下“Enter”键时即相当于单击这个按钮,因为这个按钮是默认按钮。这就带来一个问题—在多行文本编辑器中输入文字时按下Enter键,究竟是换行还是作用于按钮呢? WantReturns属性用于解决这个问题。如果WantReturn设为True,按下“Enter”键就是换行。如果WantReturns设为False,按下Enter键就不是换行而是作用于按钮,这时候要换行必须按“Ctrl+Enter”组合键。
(4)WantTabs属性
如果WantTabs属性设为True,每按一次“Tab”键,将使光标在多行文本编辑器中移动一个制表位。如果
WantTabs属性设为False,按下“Tab”键使输入焦点在同一个Form的组件之间依次切换,这时候,要在多行文本编辑器中移动一个制表位,必须按“Ctrl+Tab”组合键。
(5)WordWrap属性
如果此属性设为True,当输入的文字到了多行文本编辑器的右边界时,文字自动换行。当编辑器的水平尺寸改变时,编辑器中的文字也将自动调整。个用户可选值。
. ssNone:不加上滚动条。
. ssHorizontal:加上水平滚动条。 . ssVertical:加上垂直滚动条。
. ssBoth:水平和垂直滚动条都加上。
(3)WantReturn属性
假如Form上有一个按钮,并且按钮的Default属性设为True,当用户按下“Enter”键时即相当于单击这个按钮,因为这个按钮是默认按钮。这就带来一个问题—在多行文本编辑器中输入文字时按下Enter键,究竟是换行还是作用于按钮呢? WantReturns属性用于解决这个问题。如果WantReturn设为True,按下“Enter”键就是换行。如果WantReturns设为False,按下Enter键就不是换行而是作用于按钮,这时候要换行必须按“Ctrl+Enter”组合键。
(4)WantTabs属性
如果WantTabs属性设为True,每按一次“Tab”键,将使光标在多行文本编辑器中移动一个制表位。如果
WantTabs属性设为False,按下“Tab”键使输入焦点在同一个Form的组件之间依次切换,这时候,要在多行文本编辑器中移动一个制表位,必须按“Ctrl+Tab”组合键。
(5)WordWrap属性
如果此属性设为True,当输入的文字到了多行文本编辑器的右边界时,文字自动换行。当编辑器的水平尺寸改变时,编辑器中的文字也将自动调整。
- procedure TForm1.N1Click(Sender: TObject);
- begin
- memo1.Lines.Clear; //清除
- end;
- procedure TForm1.C1Click(Sender: TObject);
- begin
- Memo1.CopyToClipboard; //复制
- memo1
- end;
- procedure TForm1.X1Click(Sender: TObject);
- begin
- Memo1.CutToClipboard; //剪切
- end;
- procedure TForm1.N5Click(Sender: TObject);
- begin
- Memo1.PasteFromClipboard; //粘贴
- end;
- procedure TForm1.D1Click(Sender: TObject);
- begin
- Memo1.ClearSelection; //删除
- end;
- procedure TForm1.N6Click(Sender: TObject);
- begin
- if FontDialog1.Execute then
- memo1.Font:=FontDialog1.Font; //打开字体对话框
- end;
- procedure TForm1.N2Click(Sender: TObject);
- begin
- if SaveDialog1.Execute then
- memo1.Lines.SaveToFile(SaveDialog1.FileName); //保存
- end;
- --------------Start--------------------
- uses Messages;
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- if Memo1.Perform(EM_SCROLL,SB_LINEDOWN,)= then
- begin
- Memo1.Perform(WM_VSCROLL,SB_TOP,);
- end
- else
- begin
- SendMessage(Memo1.Handle,WM_VSCROLL,SB_LINEDOWN,);
- end;
- end;
- --------------End--------------------
- ---希望对做屏幕滚动的朋友,有实际的使用价值.
- // 执行到底 SendMessage(Memo1.Handle, EM_SCROLL, SB_BOTTOM, 0);
- //一步一步往下走 SendMessage(Memo1.Handle,WM_VSCROLL,SB_LINEDOWN,0);
- // 往下走 SendMessage(Memo1.Handle,EM_SCROLL,SB_PAGEDOWN,0);
- if Memo1.Perform(EM_SCROLL, SB_LINEDOWN, )= then//下滚
- button2.Enable := False;
- if Memo1.Perform(EM_SCROLL, SB_LINEUP, )= then//上滚
- button1.Enable := False;
- 如何编程使Memo的滚动条滚到行首?
- 发送消息:
- WPARAM para = MAKELONG(SB_THUMBPOSITION,);//将滚动条移动到0
- SendMessage(Memo1->Handle,WM_VSCROLL,para,);
- Memo1->Perform(EM_SCROLL, SB_TOP, ); //第一行
- Memo1->Perform(EM_SCROLLCARET,,); //自动滚动到最后一行
- 改进一下:
- Memo1->Lines->BeginUpdate();
- Memo1->Perform(WM_VSCROLL,SB_TOP,); //先回到顶部
- for(int i=; i<; ++i) //向下滚1500行
- Memo1->Perform(WM_VSCROLL,SB_LINEDOWN,);
- Memo1->Lines->EndUpdate();
- 移到指定位置,发送消息 吧
- WPARAM para = MAKELONG(SB_THUMBPOSITION,);//将滚动条移动到50 Position
- //具体参数请看win32帮助有关于WM_VSCROLL的帮助
- // Memo1->Perform(WM_VSCROLL,para,0); //这个也行
- SendMessage(Memo1->Handle,WM_VSCROLL,para,);
- memo1.Perform(EM_SCROLL, SB_TOP, ); //memo1光标移至首行
- memo1.Text := Trim(memo1.Text); //删除最后一行空白行
DELPHI的MEMO组件的更多相关文章
- 转Delphi中Memo显示行号列号
http://www.alonely.com.cn/Delphi/20160814/8912.html 实例说明本例是个光标应用的简单技巧,希望通过这个例子的学习后能举一反三.Delphi中像这样简单 ...
- Delphi 利用TComm组件 Spcomm 实现串行通信
Delphi 利用TComm组件 Spcomm 实现串行通信 摘要:利用Delphi开发工业控制系统软件成为越来越多的开发人员的选择,而串口通信是这个过程中必须解决的问题之一.本文在对几种常用串口通信 ...
- Delphi各种Socket组件的模式和模型
Delphi各种Socket组件的模式和模型 Delphi的大多数书籍里面都没有提到delphi的各种socket通信组件的模式和模型,有的书只讲解了windows的socket模式和模型,并没有归纳 ...
- Delphi Memo组件
- 转:Delphi各种Socket组件的模式和模型
Delphi的大多数书籍里面都没有提到delphi的各种socket通信组件的模式和模型,有的书只讲解了windows的socket模式和模型,并没有归纳各种组件采用的模型,所以我们的程序员并不知道如 ...
- Delphi的VCL组件库
Visual Component Library的缩写(可视组件库)VCL是Visual Component Library的缩写,即可视组件库,它是Delphi,C++Builder等编程语言的基本 ...
- delphi 08 HTML组件
///HTML组件///后面的字符串为这个控件的ID号///直线 Line (WebBrowser1.Document as IHTMLDocument2).exec ...
- Delphi动态创建组件,并释放内存
开发所用delphi版本是xe2,效果图如下: 代码如下: ---------------------------------------------------------------------- ...
- Delphi HTML5 Canvas组件
最近去sourceforge瞎转悠,突然发了一个组件,关于Delphi下Html5的canvas的组件,大概浏览了一下源码,竟然是纯粹的Pascal代码,也就说完全的Delphi代码.不敢独享,现在上 ...
随机推荐
- linux 网络编程 2---(TCP编程)
流程 服务器:server 创建套接字 socket( ) 填充服务器网络信息结构体 sockaddr_in 将套接字与服务器网络信息结构体绑定 bind( ) 将套接字设置为被动监听状态 liste ...
- 北京Uber优步司机奖励政策(11月30日~12月4日)
用户组:人民优步(适用于12月1日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:htt ...
- 在线tidb+tipd+tikv扩容,迁移,从UC到阿里云
集群现状: 共有五个节点,配置为16核32g内存,数据节点为1T ssd盘,非数据节点为100g ssd盘: 角色规划: node1 tidb tipd node2 tidb tipd node3 t ...
- 海思NB-IOT模块HI2115芯片I2C通信
1. 首先确定硬件上I2C的引脚,手册上并没有,海思技术支持说是14和15脚,我们用的是12和13脚,问题在于,如果是硬件I2C应该不能随便换个引脚吧,难道是模拟的时序? 2. 下一个奇怪的地方,这个 ...
- Ceph性能优化
几个 Ceph 性能优化的新方法和思路(2015 SH Ceph Day 参后感) 一周前,由 Intel 与 Redhat 在10月18日联合举办了 Shanghai Ceph Day.在这次会议上 ...
- 创建并运行第一个Django项目
首先, 添加Django模块: 在CMD命令行输入 python -m django --version 查看Django版本: 创建第一个Django项目: 整个工程的目录结构: mysite目录是 ...
- MySQL连接本地数据库时报1045错误的解决方法
navicat for MySQL 连接本地数据库出现1045错误 如下图: 说明连接mysql时数据库密码错误,需要修改密码后才可解决问题: 解决步骤如下: .首先打开命令行:开始->运行 ...
- Android Test和Logcat
一 测试相关概念 是否有源码 黑盒测试: 测试工具 白盒测试: 对所有的源码特别熟悉 对特定的代码进行测试 都是编程 时间 单元测试(程序员) 模块测试 集成测试 系统测试 回归测试(改bug) 压力 ...
- ubuntu 执行Python脚本出现: /usr/bin/env: ‘python\r’: No such file or directory
原因: #!/usr/bin/env python 在ubuntu会变成 #!/usr/bin/env python\r 而\r 会被shell 当成参数 所以出现: /usr/bin/env: ‘ ...
- [JSON].value( keyPath )
语法:[JSON].value( keyPath ) 返回:[String | Null] 说明:获取指定键名路径值的字符串格式 示例: Set jsonObj = toJson("{bod ...