zoukankan      html  css  js  c++  java
  • 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: eadme.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);  //删除最后一行空白行
  • 相关阅读:
    oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
    oracle 常用语句
    android udp 无法收到数据 (模拟器中)
    android DatagramSocket send 发送数据出错
    AtCoder ABC 128E Roadwork
    AtCoder ABC 128D equeue
    AtCoder ABC 127F Absolute Minima
    AtCoder ABC 127E Cell Distance
    CodeForces 1166E The LCMs Must be Large
    CodeForces 1166D Cute Sequences
  • 原文地址:https://www.cnblogs.com/jijm123/p/9778916.html
Copyright © 2011-2022 走看看