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,0)=0 then
begin
Memo1.Perform(WM_VSCROLL,SB_TOP,0);
end
else
begin
SendMessage(Memo1.Handle,WM_VSCROLL,SB_LINEDOWN,0);
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, 0)=0 then//下滚
button2.Enable := False;
if Memo1.Perform(EM_SCROLL, SB_LINEUP, 0)=0 then//上滚
button1.Enable := False;

如何编程使Memo的滚动条滚到行首?

发送消息:
WPARAM para = MAKELONG(SB_THUMBPOSITION,0);//将滚动条移动到0
SendMessage(Memo1->Handle,WM_VSCROLL,para,0);

Memo1->Perform(EM_SCROLL, SB_TOP, 0); //第一行
Memo1->Perform(EM_SCROLLCARET,0,0); //自动滚动到最后一行

改进一下:
Memo1->Lines->BeginUpdate();
Memo1->Perform(WM_VSCROLL,SB_TOP,0); //先回到顶部
for(int i=0; i<1500; ++i) //向下滚1500行
Memo1->Perform(WM_VSCROLL,SB_LINEDOWN,0);
Memo1->Lines->EndUpdate();

移到指定位置,发送消息 吧
WPARAM para = MAKELONG(SB_THUMBPOSITION,50);//将滚动条移动到50 Position
//具体参数请看win32帮助有关于WM_VSCROLL的帮助
// Memo1->Perform(WM_VSCROLL,para,0); //这个也行
SendMessage(Memo1->Handle,WM_VSCROLL,para,0);
memo1.Perform(EM_SCROLL, SB_TOP, 0); //memo1光标移至首行
memo1.Text := Trim(memo1.Text);  //删除最后一行空白行

原文地址:https://www.cnblogs.com/jijm123/p/9778916.html

时间: 2024-09-30 06:25:55

DELPHI的MEMO组件的相关文章

delphi 08 HTML组件

///HTML组件///后面的字符串为这个控件的ID号///直线          Line         (WebBrowser1.Document as IHTMLDocument2).execCommand('InsertHorizontalRule', True, '');///按钮          Button      (WebBrowser1.Document as IHTMLDocument2).execCommand('InsertButton', True, '');//

转Delphi中Memo显示行号列号

http://www.alonely.com.cn/Delphi/20160814/8912.html 实例说明本例是个光标应用的简单技巧,希望通过这个例子的学习后能举一反三.Delphi中像这样简单而又实用的例子还有很多,只要平时多注意积累就能写出简洁.执行效率高的代码.编程思路直接向Memo组件发送消息EM_LineFromChar并检测返回值,即可获知此组件中光标所在的行号,向Memo组件发送消息EM_LineIndex并检测返回值即可获知此组件中光标所在的列号 实例说明 本例是个光标应用

Delphi 利用TComm组件 Spcomm 实现串行通信

Delphi 利用TComm组件 Spcomm 实现串行通信 摘要:利用Delphi开发工业控制系统软件成为越来越多的开发人员的选择,而串口通信是这个过程中必须解决的问题之一.本文在对几种常用串口通信方法分析比较的基础上,着重讨论了Delphi开发环境下利用Spcomm控件实现PC机与单片机之间串口通信的方法,研究了Spcomm串口通信的关键技术问题,并通过一个实例给出了Spcomm控件在Delphi7.0串口通信中的应用. 1 引言目前, 随着现代信息技术的发展,计算机串口通信技术已日趋成熟.

Delphi笔记-自定义组件

Delphi笔记-自定义组件 (2010-09-08 16:46:34) 转载▼ 标签: it 分类: delphi 凡是从TComponent继承下来的对象能够被窗体设计器所操纵. 创建一个组件时应该注意的几个方面:1.首先,要确定是否需要创建一个独特的新组件.2.来好好规划一下组件的工作方式.3.做好了准备工作,不要急于实际创建组件,得先问问自己:到底需要这个组件干什么?4.把组件从逻辑上分为几个部分.这样,不仅有利于组件的模块化.简单化,而且能使代码精炼.组织良好.设计组件时,要考虑到可能

Delphi HTML5 Canvas组件

最近去sourceforge瞎转悠,突然发了一个组件,关于Delphi下Html5的canvas的组件,大概浏览了一下源码,竟然是纯粹的Pascal代码,也就说完全的Delphi代码.不敢独享,现在上传到我的博客上以供有需要的人下载研究.  点击下载此文件(21.49 KB) http://www.lsworks.net/article/65.html

转:Delphi各种Socket组件的模式和模型

Delphi的大多数书籍里面都没有提到delphi的各种socket通信组件的模式和模型,有的书只讲解了windows的socket模式和模型,并没有归纳各种组件采用的模型,所以我们的程序员并不知道如何进行选择,只知道某组件好,为什么好,如何运用就不知道了. 笔者对这些组件进行了一个归纳,如下: 组件 单元 依赖 模式 模型 WebApp/CGI sockapp.pas Indy 阻塞/非阻塞 select Indy 阻塞/非阻塞 select ICS OverbyteIcsWSocket.pa

Delphi动态创建组件,并释放内存

开发所用delphi版本是xe2,效果图如下: 代码如下: ----------------------------------------------------------------------------------------------------------------- unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Class

delphi 从 TWebbrowse组件中获取图片

在 delphi 中使用 TWebbrowse 组件,虽然效率不如用(idhttp之类)模拟操作效率高.但其难度低,上手快,简单粗暴有效. 从网上搜到的处理此问题的文章大多是 ctrl + c 复制到剪贴板的方法,但在 win7 64中,此法几乎没法使用,随时报剪贴板错误. 本方法利用 IHTMLElementRender 接口,完美地解决了问题.同时,也可以加深对接口的进一步理解. delphi7源码下载 unit Unit1; interface uses Windows, Messages

delphi+mysql做的图书管理系统,怎么把mysql数据库也一起打包进去?我用的是delphi的Express组件。

sqlconnection,sqlquery1这些组件,我连接数据库的时候是用对象编辑器里的属性进行连接的,在sqlconnection中指定了字符集utf8,有些人做的方法是利用代码连接的数据库,如果我用代码连接mysql数据库怎么做??使用sqlconnecion连接数据库.说清楚点的话就是怎么用代码实现连接mysql数据库,并且指定字符集utf8(不这么做的话就出现乱码). 2011-05-04 11:24提问者采纳1.下载此文件http://www.justsoftwaresolutio