第三章菜單程序的開發和設計(2 / 3)

begin

form1.Memo1.Clear;

//清空文本框

form1.OpenDialog1.InitialDir:='c:\windows';

form1.SaveDialog1.InitialDir:='c:\wondows';

//設置對話框的缺省路徑

form1.OpenDialog1.Filter:='Text Files(*.txt)|*.txt';

form1.SaveDialog1.Filter:='Text Files(*.txt)|*.txt';

//設置文件過濾器

end;

在程序運行的初期,首先執行窗體FormCreate()事件中的代碼,即通過語句form1.Memo1.Clear;來清空文本框中的顯示內容,然後設置OpenDialog控件和SaveDialog控件的缺省路徑為c:\windows,最後通過兩條語句

form1.OpenDialog1.Filter:='Text Files(*.txt)|*.txt';

form1.SaveDialog1.Filter:='Text Files(*.txt)|*.txt';

來設置文件的過濾條件為'Text Files(*.txt)|*.txt';,即在“打開”和“另存為…”對話框中隻能夠顯示以*.txt結尾的文本文件。

經過代碼初始化後的窗體及其控件如圖3-16所示。

圖3-16 初始化後的窗體及其控件

3.響應“文件”菜單

在“文件”菜單下有四個子菜單項——“新文件”、“打開文件”、“保存”和“退出”,它們的功能如下所示:

?“新文件”菜單項:新建一個文本文件,同時清空文本框;

?“打開文件”菜單項:打開一個已經存在的文本文件;

?“保存”菜單項:把當前文本框中的內容存儲到一個文本文件中去;

?“退出” 菜單項:結束程序的運行。

為了能夠實現子菜單項“打開文件”項的功能,在程序的設計過程中用鼠標的左鍵單擊菜單“文件”/“打開文件”,在屏幕上就會彈出一個代碼窗口,在其中可以添加對子菜單項“打開文件”項的響應代碼如下所示:

procedure TForm1.Open1Click(Sender: TObject);

begin

form1.OpenDialog1.Execute;

//打開一個對話框

form1.Memo1.Lines.LoadFromFile(form1.OpenDialog1.FileName);

//打開文本文件

end;

程序說明:

在程序運行的過程中,當用戶用鼠標的左鍵單擊菜單“File”/“Open”時,就會激活菜單的Open1Click()事件,然後程序通過語句form1.OpenDialog1.Execute;來顯示一個“打開”對話框,用戶可以在其中選擇一個有效的文本文件,單擊“打開”按鈕後,在文本框中就會顯示出打開的文本文件的內容,具體的打開文件的操作是通過Memo控件來完成的,實現的語句為form1.Memo1.Lines.LoadFromFile(form1.OpenDialog1.FileName);。

我們在前麵已經講解過類似菜單Open項的代碼添加過程,不再贅述,其餘菜單項的代碼請參見附後的源程序代碼。

4.響應“編輯”菜單

在“編輯”菜單下有五個子菜單項——“剪切”、“拷貝”、“粘貼”、“刪除”和“全選”,它們的功能如下所示:

?菜單項“剪切”:把當前文本框中選中的數據剪貼到剪貼板上;

?菜單項“拷貝”:把當前文本框中選中的數據複製到剪貼板上;

?菜單項“粘貼”:把當前剪貼板上的數據粘貼到文本框的當前位置上;

?菜單項“刪除”:把當前文本框中的選中數據清除;

?菜單項“全選”:選中當前剪貼板上的所有數據

下麵僅以子菜單“拷貝”項來說明“編輯”菜單項的代碼添加過程,其餘子菜單的代碼添加過程請參見附後的源程序代碼。

為了能夠實現子菜單項“拷貝”項的功能,在程序的設計過程中用鼠標的左鍵單擊菜單“編輯”/“拷貝”,在屏幕上就會彈出一個代碼窗口,在其中可以添加對子菜單項“拷貝”項的響應代碼如下所示:

procedure TForm1.Copy1Click(Sender: TObject);

begin

form1.Memo1.CopyToClipboard;

//將選中的數據複製到剪貼板上

end;

程序說明:

在程序運行的過程中,當用戶用鼠標的左鍵單擊菜單“Edit”/“Copy”時,就會激活菜單的Copy1Click ()事件,然後程序通過語句

form1.Memo1.CopyToClipboard;

把當前文本框中的選中數據複製到剪貼板上。

5.響應“格式”菜單

在“格式”菜單下有六個子菜單項——“左對齊 ”、“ 中對齊”、“ 右對齊”、“黑體”、“斜體”和“下劃線”,它們的功能如下所示:

?子菜單“左對齊”:將當前文本框中的文本以左對齊方式顯示;

?子菜單“中對齊”:將當前文本框中的文本以居中對齊方式顯示;

?子菜單“右對齊”:將當前文本框中的文本以右對齊方式顯示;

?子菜單“黑體”:當前文本框中的文本以黑體顯示;

?子菜單“斜體”:當前文本框中的文本以斜體顯示;

?子菜單“下劃線”:當前文本框中的文本以下劃線形式顯示。

下麵僅以子菜單“中對齊”項和“黑體”來說明“格式”菜單項的代碼添加過程,其餘子菜單的代碼添加過程請參見附後的源程序代碼。

為了能夠實現子菜單項“中對齊”項的功能,在程序的設計過程中用鼠標的左鍵單擊菜單“格式”/“中對齊”,在屏幕上就會彈出一個代碼窗口,在其中可以添加對子菜單項“中對齊”項的響應代碼如下所示:

procedure TForm1.Center1Click(Sender: TObject);

begin

form1.Memo1.Alignment:=taCenter;

//設置文本居中對齊

end;

程序說明:

在程序運行的過程中,當用戶用鼠標的左鍵單擊菜單“格式”/“中對齊”時,就會激活菜單的Center1Click ()事件,然後程序通過語句form1.Memo1.Alignment:=taCenter;來設置文本框中的文本為居中對齊方式。

為了能夠實現子菜單項“黑體”項的功能,在程序的設計過程中用鼠標的左鍵單擊菜單“格式”/“黑體”,在屏幕上就會彈出一個代碼窗口,在其中可以添加對子菜單項“黑體”項的響應代碼如下所示:

procedure TForm1.Bold1Click(Sender: TObject);

begin

form1.Bold1.Checked:=not form1.Bold1.Checked;

//設置複選狀態

if form1.Bold1.Checked then

form1.Memo1.Font.Style:=form1.Memo1.Font.Style+ [fsBold]

else

form1.Memo1.Font.Style:=form1.Memo1.Font.Style- [fsBold];

//設置字體是否以黑體顯示

end;

程序說明

在程序運行的過程中,當用戶用鼠標的左鍵單擊菜單“Style”/“Bold”時,就會激活菜單的Bold 1Click ()事件,首先通過語句

form1.Bold1.Checked:=not form1.Bold1.Checked;

來設置子菜單項“黑體”的複選狀態,這樣當用鼠標的左鍵單擊子菜單“黑體”時,就會轉換子菜單項的複選狀態。

然後程序通過語句form1.Bold1.Checked來判斷子菜單“格式”的複選狀態,如果處於複選狀態,那麼通過語句form1.Memo1.Font.Style:=form1.Memo1.Font.Style+ [fsBold]使得文本框中的文本以黑體顯示,否則將通過語句

form1.Memo1.Font.Style:=form1.Memo1.Font.Style- [fsBold];

在文本框中正常的顯示文本。

6.運行程序

按照附後的源程序,添加剩餘的程序代碼後,選擇菜單“File”中的“Save All”選項,在彈出的對話框中選擇合適的文件名保存文件(這裏我們保存項目文件為App4_1,單元文件為notepad);

圖3-17 程序運行中的“Style”菜單

然後按鍵盤上的功能鍵F9運行程序,在程序運行的初始畫麵中,首先選擇菜單“文件”/“打開文件”,在彈出的“打開文件”對話框(如圖3-17所示)中選擇一個有效的文本文件後,單擊“打開”按鈕,在程序運行的窗體中就顯示了這個文本文件的內容,如圖3-18所示;

圖3-18 打開的一個文本

然後,選擇“編輯”/“全選”選項,然後選擇“格式”/“斜體”和“下劃線”,文本變為運行的結果如圖3-19所示。

圖3-19 文本編輯效果

附程序完整的源代碼如下所示:

程序清單

unit notepad;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Menus, ComCtrls, ImgList, ToolWin, StdCtrls;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

File1: TMenuItem;

New1: TMenuItem;

Open1: TMenuItem;

Save1: TMenuItem;

Exit1: TMenuItem;

N1: TMenuItem;

N2: TMenuItem;

Style1: TMenuItem;

Bold1: TMenuItem;

Italic1: TMenuItem;

Underline1: TMenuItem;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Edit1: TMenuItem;

Cut1: TMenuItem;

Copy1: TMenuItem;

Paste1: TMenuItem;

Delete1: TMenuItem;

Selectall1: TMenuItem;

N3: TMenuItem;

Left1: TMenuItem;

Center1: TMenuItem;

Right1: TMenuItem;

Memo1: TMemo;

procedure FormCreate(Sender: TObject);

procedure Open1Click(Sender: TObject);

procedure Copy1Click(Sender: TObject);

procedure Center1Click(Sender: TObject);

procedure Bold1Click(Sender: TObject);

procedure Left1Click(Sender: TObject);

procedure Right1Click(Sender: TObject);

procedure Italic1Click(Sender: TObject);

procedure Underline1Click(Sender: TObject);

procedure Cut1Click(Sender: TObject);

procedure Paste1Click(Sender: TObject);

procedure Delete1Click(Sender: TObject);

procedure Selectall1Click(Sender: TObject);

procedure Save1Click(Sender: TObject);

procedure Exit1Click(Sender: TObject);

procedure New1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

form1.Memo1.Clear;

//清空文本框

form1.OpenDialog1.InitialDir:='c:\windows';

form1.SaveDialog1.InitialDir:='c:\windows';

//設置對話框的缺省路徑

form1.OpenDialog1.Filter:='Text Files(*.txt)|*.txt';

form1.SaveDialog1.Filter:='Text Files(*.txt)|*.txt';

//設置文件過濾器

end;

procedure TForm1.Open1Click(Sender: TObject);

begin

form1.OpenDialog1.Execute;

//打開一個對話框

form1.Memo1.Lines.LoadFromFile(form1.OpenDialog1.FileName);

//打開文本文件

end;

procedure TForm1.Copy1Click(Sender: TObject);

begin

form1.Memo1.CopyToClipboard;

//將選中的數據複製到剪貼板上

end;

procedure TForm1.Center1Click(Sender: TObject);

begin

form1.Memo1.Alignment:=taCenter;

//設置文本居中對齊

end;

procedure TForm1.Bold1Click(Sender: TObject);

begin

form1.Bold1.Checked:=not form1.Bold1.Checked;

//設置複選狀態

if form1.Bold1.Checked then

form1.Memo1.Font.Style:=form1.Memo1.Font.Style+ [fsBold]

else

form1.Memo1.Font.Style:=form1.Memo1.Font.Style- [fsBold];

//設置字體是否以黑體顯示

end;

procedure TForm1.Left1Click(Sender: TObject);

begin

form1.Memo1.Alignment:=taLeftJustify;

//設置文本左對齊方式

end;

procedure TForm1.Right1Click(Sender: TObject);

begin

form1.Memo1.Alignment:=taRightJustify;

//設置文本右對齊方式

end;

procedure TForm1.Italic1Click(Sender: TObject);

begin

form1.Italic1.Checked:=not form1.Italic1.Checked;

//設置複選狀態

if form1.Italic1.Checked then

form1.Memo1.Font.Style:=form1.Memo1.Font.Style+ [fsItalic]

else

form1.Memo1.Font.Style:=form1.Memo1.Font.Style- [fsItalic];

//設置字體是否以斜體顯示

end;

procedure TForm1.Underline1Click(Sender: TObject);

begin

form1.UnderLine1.Checked:=not form1.UnderLine1.Checked;

//設置複選狀態

if form1.UnderLine1.Checked then

form1.Memo1.Font.Style:=form1.Memo1.Font.Style+ [fsUnderLine]

else

form1.Memo1.Font.Style:=form1.Memo1.Font.Style- [fsUnderLine];

//設置字體是否以下劃線形式顯示

end;

procedure TForm1.Cut1Click(Sender: TObject);

begin

form1.Memo1.CutToClipboard;

//將選中的數據剪切到剪貼板上

end;

procedure TForm1.Paste1Click(Sender: TObject);

begin

form1.Memo1.PasteFromClipboard

//將當前剪貼板上的數據粘貼到當前位置上

end;

procedure TForm1.Delete1Click(Sender: TObject);

begin

form1.Memo1.ClearSelection;

//清除當前選中的數據

end;

procedure TForm1.Selectall1Click(Sender: TObject);

begin

form1.Memo1.SelectAll;

//選中控件上的全部數據

end;

procedure TForm1.Save1Click(Sender: TObject);

begin

form1.SaveDialog1.Execute;

//打開一個對話框

form1.Memo1.Lines.SaveToFile(form1.SaveDialog1.filename);

//存儲到文本文件中

end;

procedure TForm1.Exit1Click(Sender: TObject);

begin

close;

//結束程序的運行

end;

procedure TForm1.New1Click(Sender: TObject);

begin

form1.Memo1.Clear;

//清空文本框

end;

end.

3.3 主菜單和彈出菜單綜合應用