位於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); //刪除最后一行空白行
