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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM