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 主菜單和彈出菜單綜合應用