程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi編寫一個寫字板文本編輯器

Delphi編寫一個寫字板文本編輯器

編輯:Delphi

Delphi寫字板程序代碼,使用Windows 的記事本時,你會被它快速、方便、小巧的特性而吸引,但是它過於小巧了,少了許多基本的文字處理和編輯的功能。而Microsoft Word 雖然文字處理功能強大,但是它不僅啟動速度慢,而且文件比較龐大,另外,許多時候,我們也用不到它的多數功能。所以本例我們將制作一個介於記事本和Word之間的文本編輯器。程序大部分菜單都在窗體中對應有一個快捷圖標。包括新建、打開、保存、剪切、復制、粘貼、左對齊、右對齊、居中、文字加粗、文字傾斜、文字加下劃線和文字大小等命令,在菜單中還包括字體顏色、窗體背景顏色等命令。利用這些基本命令,可以很方便地處理很多文本文檔。該程序界面友好,當把鼠標放在快捷工具欄上時,程序會給出快捷菜單提示,同時,在窗體下方的中間,也有該快捷命令的說明文字。這個寫字板文字編輯器的界面如下示:

文本編輯器-實戰delphi寫字板

本例用到了Delphi 6.0 的許多控件和編程技術。使用的控件包括:MainMenu 菜單控件、ImageList 控件、ColorDialog 控件、OpenDialog 控件、SaveDialog 控件、FontDialog控件、ToolBar 控件、SpeedButton 控件、Memo 控件和StatusBar 控件等。其中ImageList、ToolBar 和SpeedButton 三個控件聯合起來使用,可以制作出精美直觀的快捷工具欄,而利用StatusBar 控件,可以制作出通用的窗體底部說明欄。ColorDialog 和FontDialog 控件一般都用來控制字體和顏色的,它們包含了字體和顏色的各種基本選項。OpenDialog 和SaveDialog 控件經常用來打開和保存文件。另外,本程序的窗體布局涉及到Delphi 編程中最常用的技術,值得好好體會。

Delphi寫字板的編寫步驟:

首先要解決窗體的布局和設計問題。然後給各個菜單和快捷工具欄中的按鈕添加相關程序代碼。這個文本編輯器與一般的簡易的文字編輯程序的制作有所不同。首先,必須設置好菜單的屬性及功能;其次,當所有的菜單都設計好之後,還必須對工具欄進行設計,工具欄的開發與設計是最具挑戰性的工作,因為整個界面的美觀都取決於工具欄的制作,而整個程序使用是否方便、快捷,也取決於工具欄的安排和屬性的設置。然後,還需進行一些細部的修飾,例如底部任務欄上的提示用語以及幫助菜單的設計等。

1.新建工程

(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。

(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。

(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。

2.修改窗口:

(1)激活Form1 窗口,在“屬性”面板中設置該窗體的Caption 屬性為“文本編輯器”,Color 屬性設置為“clBtnFace”。

(2)選擇“標准”頁上的MainMenu 選項,在窗體中添加MainMenu 控件。雙擊MainMenu 控件,進入如圖2-11 所示菜單編輯器。菜單設計如下:文件(新建、打開、保存、退出),編輯(剪切、復制、粘貼、自動換行、全選),格式(對齊(左對齊、居中、右對齊),字體(加粗、傾斜、下劃線、顏色),背景),幫助(關於)。

(3)依次選中各個菜單,在“屬性”面板上設置其Name 屬性如下:文件(filen1)、新建(filenew)、打開(fileopen)、保存(filesave)、退出(fileexit)、編輯(Editn2)、剪切(Editcut)、復制(Editcopy)、粘貼(Editpaste)、自動換行(auto1)、全選(selectall1)、格式(Formatn3)、對齊(align)、左對齊(leftalign)、居中(centeralign)、右對齊(rightalign)、字體(Font1)、加粗(bold1)、傾斜(italic)、下劃線(underline1)、顏色(color1)、背景(background)、幫助(helpn4)、關於(aboutnotebook)。

(4)選擇Win 32 頁上的ToolBar 選項,在窗體中添加ToolBar 控件,調整其合適的大小和位置。在“屬性”面板上設置其Color 屬性為“clBtnFace”、設置其Align 屬性為“alTop”,使其居於窗體的最上方。

(5)選擇“附加”頁上的SpeedButton 選項,在窗體中的ToolBar 上添加12 個SpeedButton 控件。選擇Win 32 頁上的ImageList 選項,在窗體中添加ImageList 控件。用鼠標雙擊該控件,打開如圖2-12 所示ImageList 編輯框,用鼠標點擊“加載”按鈕,從彈出的對話框中選擇合適的BMP 文件作為圖標,然後點擊OK 按鈕返回。在“屬性”面板上設置ImageList 的Name 屬性為ImageList1。

(6)選中窗體中的ToolBar 控件,在“屬性”面板上設置其Images 屬性為“ImageList1”,Indent 屬性設置為1,這樣就為ToolBar 上的各個SpeedButton 控件添加了形象的圖標。

Delphi寫字板ImageList編輯器

(7)分別選中各個SpeedButton 控件,在“屬性”面板上設置其ShowHint 屬性均為“True”。然後依次設置各個SpeedButton 控件的Hint 屬性為“新建|新建文件”、“打開|打開文件”、“保存|保存文件”、“剪切|剪切所選對象”、“復制|復制所選對象”、“粘貼|粘貼對象”、“左對齊|文字左對齊”、“居中|文字居中”、“右對齊|文字右對齊”、“加粗|字體加粗”、“傾斜|字體傾斜”和“下劃線|文字下劃線”。

(8)選擇Win 32 頁上的StatusBar 選項,在窗體中添加StatusBar 控件,在“屬性”面板上設置其Align 屬性為“alBottom”,使其居於窗體的底部。用鼠標點擊其Panel 屬性右邊的文本框,打開StatusBar.Panels 編輯框,在其中點擊新建圖標,依次新建提示文字“0-筆記本”、“1-TstatusPanel”和“李氏筆記本※愛媛工作室※2001 年”,這將為窗體底部的任務欄添加提示文字。

(9)選擇“對話框”頁上的ColorDialog 選項,在窗體中添加ColorDialog 控件,在“屬性”面板上設置其Name 屬性為“ColorDialog1”。

(10)選擇“對話框”頁上的FontDialog 選項,在窗體中添加FontDialog 控件,在“屬性”面板上設置其Name 屬性為“FontDialog1”,Options 屬性為“fdEffects”。

(11)選擇“對話框”頁上的OpenDialog 選項,在窗體中添加OpenDialog 控件,在“屬性”面板上設置其Name 屬性為“OpenDialog1”,設置其Filter 屬性為“文本文件(*.txt)|*.txt”,設置其Options 屬性為“[ofHideReadOnly,ofEnableSizing]”。

(12)選擇“對話框”頁上的SaveDialog 選項,在窗體中添加SaveDialog 控件,在“屬性”面板上設置其Name 屬性為“SaveDialog1”,設置其Filter 屬性為“文本文件(*.txt)|*.txt”,設置其Options 屬性為“[ofHideReadOnly,ofEnableSizing]”。

(13)選擇“標准”頁上的Memo 選項,在窗體中添加Memo 控件,在“屬性”面板上設置其Name 屬性為“Memo1”,Color 屬性為“clWindow”,對齊方式Align 屬性為“alClIEnt”,使其占據窗體剩下空間。

詳細的代碼分析:

(1)當把鼠標放在快捷工具欄上時,程序會給出快捷菜單提示,同時,在窗體下方的中間,也有該快捷命令的說明文字。這需要添加相關代碼:

procedure TForm1.showhint(sender:tobject); //窗體底部提示語言
begin
statusbar1.Panels[1].Text:=application.Hint;
end;

(2)選擇文件菜單下的新建命令,則新建一個文本文件,並將所有相關屬性初始化。代碼如下:

procedure TForm1.filenewClick(Sender: TObject); //新建文件
begin
memo1.Clear;
memo1.setfocus;
memo1.color:=clwhite;
memo1.Font.Color:=clblack;
memo1.Font.Size:=10;
end;

(3)打開文件和保存文件的代碼如下:

procedure TForm1.fileopenClick(Sender: TObject); //打開文件
begin
if OpenDialog1.execute then
memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
procedure TForm1.filesaveClick(Sender: TObject); //保存文件
begin
if savedialog1.execute then
memo1.Lines.SaveToFile(savedialog1.FileName);
end;

(4)因為利用了ColorDialog 和FontDialog 控件,相關的字體編輯部分的代碼很簡單,具體代碼如下:

procedure TForm1.EditcutClick(Sender: TObject); //剪切
begin
memo1.CutToClipboard;
end;
procedure TForm1.EditcopyClick(Sender: TObject); //復制
begin
memo1.CopyToClipboard;
end;
procedure TForm1.EditpasteClick(Sender: TObject); //粘貼
begin
memo1.PasteFromClipboard;
end;
procedure TForm1.selectall1Click(Sender: TObject); //全選
begin
memo1.SelectAll;
end;
procedure TForm1.auto1Click(Sender: TObject); //自動換行
begin
auto1.Checked:=not auto1.Checked;
if auto1.Checked then
memo1.WordWrap:=true
else
memo1.WordWrap:=False;
end;
procedure TForm1.leftalignClick(Sender: TObject); //左對齊
begin
leftalign.Checked:=not leftalign.Checked;
if leftalign.Checked then
memo1.Alignment:=taleftjustify;
end;
procedure TForm1.centeralignClick(Sender: TObject); //居中
begin
centeralign.Checked:=not centeralign.Checked;
if centeralign.Checked then
memo1.Alignment:=tacenter;
end;
procedure TForm1.rightalignClick(Sender: TObject); //右對齊
begin
rightalign.Checked:=not rightalign.Checked;
if rightalign.Checked then
memo1.Alignment:=tarightjustify;
end;
procedure TForm1.bold1Click(Sender: TObject); //字體加粗
begin
bold1.Checked:=not bold1.Checked;
if bold1.Checked then
memo1.Font.Style:=memo1.Font.Style+[fsbold]
else
memo1.Font.Style:=memo1.Font.Style-[fsbold];
end;
procedure TForm1.italicClick(Sender: TObject); //字體傾斜
begin
italic.Checked:=not italic.Checked;
if italic.Checked then
memo1.Font.Style:=memo1.Font.Style+[fsitalic]
else
memo1.Font.Style:=memo1.Font.Style-[fsitalic];
end;
procedure TForm1.underline1Click(Sender: TObject); //字體加下劃線
begin
underline1.Checked:=not underline1.Checked;
if underline1.Checked then
memo1.Font.Style:=memo1.Font.Style+[fsunderline]
else
memo1.Font.Style:=memo1.Font.Style-[fsunderline];
end;
procedure TForm1.color1Click(Sender: TObject); //字體顏色
begin
if colordialog1.execute then
memo1.Font.Color:=colordialog1.Color;
end;
procedure TForm1.backgroundClick(Sender: TObject); //窗體背景顏色
begin
if colordialog1.execute then
memo1.Color:=colordialog1.Color;
end;

(5)當點擊窗體上的SpinEdit 控件,可以改變文本中文字的大小:

procedure TForm1.SpinEdit1Change(Sender: TObject); //改變字體大小
begin
memo1.Font.Size:=spinEdit1.Value;
end;

(6)窗體中的快捷工具欄無需填寫代碼,只需在“屬性”面板上“事件”頁中設置其OnClick 事件為對應菜單即可。

vIEw source print? 001 unit Unit1; 002 interface 003 uses 004 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 005 ImgList, ComCtrls, ToolWin, Menus, StdCtrls, Spin; 006 type 007 TForm1 = class(TForm) 008 MainMenu1: TMainMenu; 009 filen1: TMenuItem; 010 Editn2: TMenuItem; 011 Formatn3: TMenuItem; 012 helpn4: TMenuItem; 013 filenew: TMenuItem; 014 fileopen: TMenuItem; 015 filesave: TMenuItem; 016 N1: TMenuItem; 017 fileexit: TMenuItem; 018 Editcut: TMenuItem; 019 Editcopy: TMenuItem; 020 Editpaste: TMenuItem; 021 auto1: TMenuItem; 022 selectall1: TMenuItem; 023 align: TMenuItem; 024 Font1: TMenuItem; 025 background: TMenuItem; 026 leftalign: TMenuItem; 027 centeralign: TMenuItem; 028 rightalign: TMenuItem; 029 bold1: TMenuItem; 030 italic: TMenuItem; 031 underline1: TMenuItem; 032 color1: TMenuItem; 033 aboutnotebook: TMenuItem; 034 ToolBar1: TToolBar; 035 ToolButton1: TToolButton; 036 ToolButton2: TToolButton; 037 ToolButton3: TToolButton; 038 ToolButton5: TToolButton; 039 ToolButton6: TToolButton; 040 ToolButton7: TToolButton; 041 ToolButton9: TToolButton; 042 ToolButton10: TToolButton; 043 ToolButton11: TToolButton; 044 ToolButton12: TToolButton; 045 ToolButton13: TToolButton; 046 ToolButton14: TToolButton; 047 ImageList1: TImageList; 048 Label1: TLabel; 049 SpinEdit1: TSpinEdit; 050 OpenDialog1: TOpenDialog; 051 SaveDialog1: TSaveDialog; 052 FontDialog1: TFontDialog; 053 ColorDialog1: TColorDialog; 054 Memo1: TMemo; 055 StatusBar1: TStatusBar; 056 StatusBar2: TStatusBar; 057 procedure filenewClick(Sender: TObject); 058 procedure fileopenClick(Sender: TObject); 059 procedure filesaveClick(Sender: TObject); 060 procedure fileexitClick(Sender: TObject); 061 procedure EditcutClick(Sender: TObject); 062 procedure EditcopyClick(Sender: TObject); 063 procedure EditpasteClick(Sender: TObject); 064 procedure selectall1Click(Sender: TObject); 065 procedure auto1Click(Sender: TObject); 066 procedure leftalignClick(Sender: TObject); 067 procedure centeralignClick(Sender: TObject); 068 procedure rightalignClick(Sender: TObject); 069 procedure bold1Click(Sender: TObject); 070 procedure italicClick(Sender: TObject); 071 procedure underline1Click(Sender: TObject); 072 procedure color1Click(Sender: TObject); 073 procedure backgroundClick(Sender: TObject); 074 procedure aboutnotebookClick(Sender: TObject); 075 procedure SpinEdit1Change(Sender: TObject); 076 procedure FormCreate(Sender: TObject); 077 private 078 { Private declarations } 079 procedure showhint(sender:tobject); 080 public 081 { Public declarations } 082 end; 083 var 084 Form1: TForm1; 085 implementation 086 {$R *.DFM} 087 procedure TForm1.filenewClick(Sender: TObject); //新建文件 088 begin 089 memo1.Clear; 090 memo1.setfocus; 091 memo1.color:=clwhite; 092 memo1.Font.Color:=clblack; 093 memo1.Font.Size:=10; 094 end; 095 procedure TForm1.fileopenClick(Sender: TObject); //打開文件 096 begin 097 if OpenDialog1.execute then 098 memo1.Lines.LoadFromFile(OpenDialog1.FileName); 099 end; 100 procedure TForm1.filesaveClick(Sender: TObject); //保存文件 101 begin 102 if savedialog1.execute then 103 memo1.Lines.SaveToFile(savedialog1.FileName); 104 end; 105 procedure TForm1.fileexitClick(Sender: TObject); //退出程序 106 begin 107 close; 108 end; 109 procedure TForm1.EditcutClick(Sender: TObject); //剪切 110 begin 111 memo1.CutToClipboard; 112 end; 113 procedure TForm1.EditcopyClick(Sender: TObject); //復制 114 begin 115 memo1.CopyToClipboard; 116 end; 117 procedure TForm1.EditpasteClick(Sender: TObject); //粘貼 118 begin 119 memo1.PasteFromClipboard; 120 end; 121 procedure TForm1.selectall1Click(Sender: TObject); //全選 122 begin 123 memo1.SelectAll; 124 end; 125 procedure TForm1.auto1Click(Sender: TObject); //自動換行 126 begin 127 auto1.Checked:=not auto1.Checked; 128 if auto1.Checked then 129 memo1.WordWrap:=true 130 else 131 memo1.WordWrap:=False; 132 end; 133 procedure TForm1.leftalignClick(Sender: TObject); //左對齊 134 begin 135 leftalign.Checked:=not leftalign.Checked; 136 if leftalign.Checked then 137 memo1.Alignment:=taleftjustify; 138 end; 139 procedure TForm1.centeralignClick(Sender: TObject); //居中 140 begin 141 centeralign.Checked:=not centeralign.Checked; 142 if centeralign.Checked then 143 memo1.Alignment:=tacenter; 144 end; 145 procedure TForm1.rightalignClick(Sender: TObject); //右對齊 146 begin 147 rightalign.Checked:=not rightalign.Checked; 148 if rightalign.Checked then 149 memo1.Alignment:=tarightjustify; 150 end; 151 procedure TForm1.bold1Click(Sender: TObject); //字體加粗 152 begin 153 bold1.Checked:=not bold1.Checked; 154 if bold1.Checked then 155 memo1.Font.Style:=memo1.Font.Style+[fsbold] 156 else 157 memo1.Font.Style:=memo1.Font.Style-[fsbold]; 158 end; 159 procedure TForm1.italicClick(Sender: TObject); //字體傾斜 160 begin 161 italic.Checked:=not italic.Checked; 162 if italic.Checked then 163 memo1.Font.Style:=memo1.Font.Style+[fsitalic] 164 else 165 memo1.Font.Style:=memo1.Font.Style-[fsitalic]; 166 end; 167 procedure TForm1.underline1Click(Sender: TObject); //字體加下劃線 168 begin 169 underline1.Checked:=not underline1.Checked; 170 if underline1.Checked then 171 memo1.Font.Style:=memo1.Font.Style+[fsunderline] 172 else 173 memo1.Font.Style:=memo1.Font.Style-[fsunderline]; 174 end; 175 procedure TForm1.color1Click(Sender: TObject); //字體顏色 176 begin 177 if colordialog1.execute then 178 memo1.Font.Color:=colordialog1.Color; 179 end; 180 procedure TForm1.backgroundClick(Sender: TObject); //窗體背景顏色 181 begin 182 if colordialog1.execute then 183 memo1.Color:=colordialog1.Color; 184 end; 185 procedure TForm1.aboutnotebookClick(Sender: TObject); //關於 186 begin 187 messagedlg(’歡迎使用李氏筆記本※ 愛媛工作室※ 2001 年’,mtinFormation, 188 [mbok],0); 189 end; 190 procedure TForm1.SpinEdit1Change(Sender: TObject); //改變字體大小 191 begin 192 memo1.Font.Size:=spinEdit1.Value; 193 end; 194 procedure TForm1.showhint(sender:tobject); //窗體底部提示語言 195 begin 196 statusbar1.Panels[1].Text:=application.Hint; 197 end; 198 procedure TForm1.FormCreate(Sender: TObject); //運行提示語言 199 begin 200 application.OnHint:=showhint; 201 end; 202 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved