程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第四章-文本編輯器的設計(二)(2)

第四章-文本編輯器的設計(二)(2)

編輯:Delphi

例程中TEditForm.Replace方法響應OnReplace事件,Replace方法首先判斷控制中被

選中字符串是否與替換字符串相等,如果不等則進行替換。而後根據Options中的方式循

環進行查找替換。直至無匹配字符串為止。其代碼如下: 

  procedure TEditForm.Replace(Sender: TObject);

var

Found: Boolean;

begin

with ReplaceDialog1 do

begin

if AnsiCompareText(Memo1.SelText, FindText) = 0 then

Memo1.SelText := ReplaceText;

Found := SearchMemo(Memo1, FindText, Options);

while Found and (frReplaceAll in Options) do

begin

Memo1.SelText := ReplaceText;

Found := SearchMemo(Memo1, FindText, Options);

end;

if (not Found) and (frReplace in Options) then

ShowMessage('Cannot find "' + FindText + '".');

end;

end; 

4.4.4 打開對話框部件 

打開對話框部件為應用程序顯示打開對話框。使用Execute方法可顯示打開對話框用戶通過選擇文件類型下拉框中的文件類型,可以確定顯示在文件列表中的文件。 例如,如果用戶選擇*.txt文件類型,那麼只有在當前目錄下的文本文件才會顯示在文件列表中。文件擴展名通常也稱為過濾器。

打開對話框包含一個Filters(過濾器)的屬性,它可確定文件類型和在文件類型下拉框中的順序。應用程序可以為打開對話框定義多個過濾器,對話框的FilterIndex 屬性可以決定哪個過濾器是文件類型下拉框中的缺省過濾器。如FilterIndex等於2,表示程序運行時出現在文件類型下拉框的過濾器是第2個過濾器。

例程中關於文件打開的代碼如下: 

  procedure TEditForm.Open/Click(Sender : TObject);

begin

if OpenDialog/.Execult then

begin

 …

  Open(Open Dialog/.FileName)

end

end;

打開,保存對話框中的Options屬性值見表4.4 

表4.4 打開、保存對話框的Options屬性取值及含義

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

值               含義

──────────────────────────────────────

ofAllowMultiSelect 如果是真值,則允許在文件名列表中選擇多個文件。

ofCreatePrompt 如果是真值,當用戶在文件編輯框中輸入一不存在的文件名,

          並選擇OK按鈕,則會出現消息框, 提示用戶此文件不存在並

          詢問是否以此文件名創建一新文件。

ofExiengronDifferent 如果是真值,從對話框中返回的文件擴展名將不同於缺省擴展名。

其值存入DefaultExt屬性中。

ofFileMustExist   如果是真值, 當用戶在文件編輯框中輸入一個不存在的文件名時,

並選擇OK按鈕, 則會出現一消息框提示用戶此文件不存,並詢

問是否輸入了正確的路徑和文件名。

ofNoChangeDir 如果是真值,當前目錄將設置成對話框第一次出現的目錄,並忽

略任何目錄改變。

ofOverWritePrompt 如果是真值,當用戶試圖保存一個已存在的文件時, 將出現一消息

框,提示用戶此文件已存在,並詢問是否覆蓋。

ofPathMastExit 如果是真值,用戶在文件名編輯框只能輸入有效路徑名, 否則出

現消息框,提示用戶路徑無效。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

表4.4 打開、保存對話框中的Options屬性取值及含義

文件保存對話框與打開對話框類似,如圖4.11。它的Option屬性見上表。例程在保存文件前先對文件進行讀寫判斷,如果文件是只讀文件或未指定文件名的新文件, 則程序對文件不保存,否則備份文件。代碼如下:

procedure TEditForm.Save1Click(Sender: TObject);

procedure CreateBackup(const Filename: string);

var

BackupFilename: string;

begin

BackupFilename := ChangeFileExt(Filename, BackupExt);

DeleteFile(BackupFilename);

RenameFile(Filename, BackupFilename);

end; 

function IsReadOnly(const Filename: string): Boolean;

begin

Result := Boolean(FileGetAttr(Filename) and faReadOnly);

if Result then MessageDlg(Format('%s is read only.',

[ExtractFilename(Filename)]), mtWarning, [mbOK], 0);

end; 

begin

if (Filename = '') or IsReadOnly(Filename) then

SaveAs1Click(Sender)

else

begin

CreateBackup(Filename);

Memo1.Lines.SaveToFile(Filename);

Memo1.Modified := False;

end;

end;

其中CreateBackup過程用以改變需備份文件的擴展名。IsReadOnly 用以判斷文件屬性。 

4.5 文件打印 

在Delphi中,文件打印有兩種方式:

1. 將文件變量分配給打印機,用此變量名創建或打開文件後, 往此文件變量寫入的任何文本都視為向打印機輸出,以下過程可實現文件的打印。 

procedure TEditForm,Print1Click(Sender: TObject);

var

Line: Integer;

PrintText: System.Text;

begin

if PrintDialog1.Execute then

begin

AssignPrn(PrintText)

Rewrite(PrintText);

Print.CanvasFont := Memo1.Font;

For Line := 0 to Memo1.Lines.Count - 1 do

Writeln(PrintText,Memo1.Line[line];

System.Close(PrintText);

end;

end; 

2. 利用Printers單元中定義的TPrinter對象進行文件打印,本章例程采用這種方法打印文件。 

4.5.1 TPrinter對象 

TPrinter對象可調用Windows的打印機,在Printer 單元中定義了TPrinter 的實例Printer,用戶可直接使用。

調用TPrinter的BeginDoc方法可開始一項打印工作,調用EndDoc 方法可結束一項已成功發送給打印機的工作。如果在發送過程中出現問題或用戶想中途終止打印工作,可調用Abort方法。

通過檢查Printing屬性可測試當前是否有打印工作,如果打印工作被終止,Abort屬性為真。

Canvas屬性代表打印表面,Brush,Font,Pen屬性可決定打印字體或圖像的特征。

Printers屬性中包含著已安裝的打印機列表,PrinterIndex 屬性是當前選擇的打印

機,Fonts屬性中有當前打印機支持的字體。Orientertion屬性可決定打印方向。

PageHeight,PageWith中包含著當前的高度和寬度。PageNanber為當前頁的值。

設置Title屬性可決定在Windows打印管理器或網絡中出現的文本。 

4.5.2 TPrintDialog打印對話框 

TPrintDialog部件顯示一打印對話框。用戶在對話框中,可以選擇打印機、打印頁數、打印份數。當用戶選擇對話框中的Setup按鈕,則出現打印設置對話框。

調用Execute方法顯示打印對話框。如圖4.12。使用Option屬性可設置打印對話框顯示的形式。Options的設置如表4.5所示。

PrintRange屬性可定義打印的范圍。如果PrintPage的值是prPageNums,則可以設置FromPage和ToPage屬性來確定打印范圍。設置MinPage,MaxPage屬性可限制用戶的打印范圍。 

表4.5 打印對話框的Option屬性的取值及含義

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

取值              含義

──────────────────────────────────────

PoHelp 如果是真值,對話框出現幫助按鈕。

PoPageNums 如果是真值,頁數按鈕有效,用戶可以設置打印范圍。

PoPrintToFile 如果是真值,文件打印檢查框將出現在對話框中,用戶可以選

擇文件打印。

PoSelection 如果是真值,選擇按鈕有效, 用戶可打印文件中所選擇的文本。

PoWarning 如果是真值,在打印機尚未安裝時,用戶選擇OK 按按鈕將出

現警告信息。

PoDisablePrinttoToFile 如果是真值,而PoPrintToFile亦是真值時,當對話框出現時,文

件打印對話框將無效。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

本章例程是利用Printer的畫布進行文本打印的。用戶選擇打印菜單後,將彈出打印對話框,用戶可設置各種參數。當用戶選擇打印按鈕後,打印工作進行發送,此時將彈出打印取消對話框,見圖4.13, 用戶可中止打印工作。有關打印和打印取消的代碼如下:  

procedure TEditForm.Print1Click(Sender: TObject);

var

DistanceLine,Line: Integer;

PrintText: System.Text;

begin

if PrintDialog1.Execute then

begin

Printer.Canvas.font := Memo1.Font;

DistanceLine := Trunc(1.5*FontDialog1.font.size);

OpenPrintCancelDialog;

Printer.BeginDoc;

for line := 0 to Memo1.Lines.Count - 1 do

begin

Printer.canvas.textout(0,DistanceLine*Line,Memo1.lines[Line]);

end;

Printer.EndDoc;

BtnBottomDlg.free;

end;

end;

procedure TEditForm.OpenPrintCancelDialog;

begin

BtnBottomDlg := TBtnBottomDlg.Create(Application);

BtnBottomDlg.show;

BtnBottomDlg.canvas.Brush.Color := clActiveBorder;

BtnBottomDlg.canvas.TextOut(50,20,'Print'+FileName);

BtnBottomDlg.canvas.TextOut(30,40,'if you want to

stop, please choice Cancel Button.');

end;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved