程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi MainMenu菜單控件、Memo、Edit等控件實現統計字數(字符統計)

Delphi MainMenu菜單控件、Memo、Edit等控件實現統計字數(字符統計)

編輯:Delphi

Delphi統計字數。許多讀者朋友都使用過Windows 的記事本,遺憾的是它沒有統計字數的重要功能,而實現這一功能並不困難,本例制作的即是一個字數統計工具。我們可以直接在左邊的文字區域輸入文字,然後開始統計相關字數,也可以將要統計的文本粘貼到該程序中,然後進行統計。點擊“開始統計”按鈕後,對應文本的字母字數和漢字字數就可以在窗口中的編輯框中顯示出來。

設計思想:本程序利用的主要控件是MainMenu 菜單控件、Memo 控件、Edit 控件和Label 控件。在Delphi 中,每個字符都可以轉換為數值,鍵盤可輸入的字符數值為33~126,數值為127以上的則為未知字符,在本例中可以當作是漢字。每個英文字符占一個字節,每個中文字符占兩個字節,通過對這些數值范圍的統計以及對字節數的統計來完成對中、英文字符個數的統計。

設計步驟:本例中首先為窗體添加各種合適的控件。然後通過Ord()函數將Memo 控件中的所有字符轉換為對應的數值。通過Length()函數獲得Memo 控件中所有字符的字節數。然後通過for I:=1 to length(s) do 的循環來判別各個字節所對應的字符的數值是否在33 至126 之間來確定是否為英文字符,並求出英文字符的總數和中文字符所占字節的總數,中文字符的個數即為它們所占字節數除以2。

1.新建工程:
(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。
(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。
(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。

2.修改窗口:

(1)激活Form1 窗口,在“屬性”中設置該窗體的Caption 屬性為“字數統計工具”,Color 屬性設置為“clSkyBlue”。

(2)在構件選項板上選擇“標准”頁上的MainMenu 選項,將鼠標移到窗口中點擊,生成菜單MainMenu 控件,用鼠標雙擊該控件,進入菜單編輯窗口。設計如下圖(左圖)所示菜單,並為相關菜單添加熱鍵。

(3)選擇“標准”頁上的Label 選項,在窗體中添加三個Label 標簽,調整其合適的大小和位置。在“屬性”中設置Color 屬性為ClBlack,用鼠標點擊Font 屬性,從其選項列表中設置Color 屬性為clBlack,Caption 屬性分別為“請輸入文字”、“字母字數”和“漢字字數”。

(4)選擇“標准”頁上的Memo 選項,在窗體中添加Memo 控件,調整其合適的大小和位置。在“屬性”面板中設置其Color 屬性為ClMoneyGreen,Name 屬性為“Memo1”,ScrollBars 屬性設置為ssVertical,使得Memo 控件在豎直方向有滾動條。

(5)選擇“標准”頁上的Button 選項,在窗體中合適位置添加三個Button 控件,在“屬性”中設置其Caption 屬性分別為“粘貼文字”、“開始統計”和“退出”。按住Shift鍵,同時選中三個Button 控件,選擇“編輯”菜單下的“對齊”命令,為Button 控件選擇合適的排列對齊方式。

(6)選擇“標准”頁上的Edit 選項,在窗體中合適位置添加兩個Edit 控件。在“屬性”面板中設置其Color 屬性為ClMoneyGreen,Name 分別為“Edit1”和“Edit2”。控件添加完畢後的窗體如右圖所示。

Delphi字符統計

代碼分析:
(1)該程序的關鍵部分是統計Memo 控件中的英文字符和中文字符的個數。這裡首先利用length()函數統計Memo 中文本的字節數,然後利用Ord()函數將Memo 控件中的字符轉換成對應的數值,再對轉換後的數值進行統計。下面是“開始統計”菜單相應的響應事件代碼。

procedure TForm1.N3Click(Sender: TObject);
var s:string;
i,e,c:integer;
begin
s:=memo1.Text;
e:=0;c:=0;
for i:=1 to length(s) do
begin
if (ord(s[i])>=33)and(ord(s[i])<=126) then //當文本為英文字符時
begin
inc(e); //英文字符個數求和
Edit1.Text:=inttostr(e);
end
else
if (ord(s[i])>=127) then //當文本為中文字符時
begin
inc(c);
Edit2.Text:=inttostr(c div 2); //每個漢字占2 個字節
end;
end;
end;

(2)接著為“粘貼文字”菜單添加代碼,這只需要將剪貼板上的文本粘貼到Memo控件中即可:

procedure TForm1.N2Click(Sender: TObject);
begin
memo1.PasteFromClipboard;
end;

(3)菜單中的“關於”和“退出”事件的代碼很簡單:

procedure TForm1.A1Click(Sender: TObject); //關於
begin
messagedlg(’歡迎使用石氏字數統計工具※網垠工作室※2003 年’,mtinFormation,
[mbok],0);
end;
procedure TForm1.N4Click(Sender: TObject); //退出
begin
close;
end;

(4)窗體中各個Button 按鈕的響應事件,只要設置成對應各自的菜單即可。

vIEw source print? 01 //程序完整代碼 02 unit Unit1; 03 interface 04 uses 05 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 06 StdCtrls, Menus; 07 type 08 TForm1 = class(TForm) 09 Memo1: TMemo; 10 Button1: TButton; 11 Label1: TLabel; 12 Label2: TLabel; 13 Label3: TLabel; 14 Button2: TButton; 15 Button3: TButton; 16 Edit1: TEdit; 17 Edit2: TEdit; 18 MainMenu1: TMainMenu; 19 N1: TMenuItem; 20 N2: TMenuItem; 21 N3: TMenuItem; 22 N4: TMenuItem; 23 H1: TMenuItem; 24 A1: TMenuItem; 25 procedure A1Click(Sender: TObject); 26 procedure N2Click(Sender: TObject); 27 procedure N3Click(Sender: TObject); 28 procedure N4Click(Sender: TObject); 29 private 30 { Private declarations } 31 public 32 { Public declarations } 33 end; 34 var 35 Form1: TForm1; 36 implementation 37 {$R *.DFM} 38 procedure TForm1.A1Click(Sender: TObject); 39 begin 40 messagedlg(’歡迎使用石氏字數統計工具※網垠工作室※2001 年’,mtinFormation, 41 [mbok],0); 42 end; 43 procedure TForm1.N2Click(Sender: TObject); 44 begin 45 memo1.PasteFromClipboard; 46 end; 47 procedure TForm1.N3Click(Sender: TObject); 48 var s:string; 49 i,e,c:integer; 50 begin 51 s:=memo1.Text; 52 e:=0;c:=0; 53 for i:=1 to length(s) do 54 begin 55 if (ord(s[i])>=33)and(ord(s[i])<=126then //當為英文字符時 56 begin 57 inc(e); //英文字符個數求和 58 Edit1.Text:=inttostr(e); 59 end 60 else 61 if (ord(s[i])>=127then //當為中文字符時 62 begin 63 inc(c); 64 Edit2.Text:=inttostr(c div 2); //每個漢字占2 個字節 65 end; 66 end; 67 end; 68 procedure TForm1.N4Click(Sender: TObject); 69 begin 70 close; 71 end; 72 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved