第二章Windows 通用對話框(2 / 3)

procedure TForm1.Button1Click(Sender: TObject);

begin

form1.ColorDialog1.Color:=rgb(255,255,0);

//設置對話框初始顏色

form1.ColorDialog1.Options:=[cdFullOpen, cdPreventFullOpen, cdShowHelp, cdSolidColor, cdAnyColor];

//設置對話框風格

form1.ColorDialog1.Execute;

end;

程序說明:

在程序運行的初始階段,單擊按鈕,就會激活按鈕的響應事件,程序首先設置了在“顏色”對話框中可以包括“自定義顏色”按鈕在內的所有顏色設置部分,而且可以在程序運行的過程中為“顏色”對話框設置初始顏色值。

如本示例程序通過語句form1.Color Dialog1.Color:=rgb(255,255,0);設置了“顏色”對話框的初始顏色為黃色,最後通過form1.ColorDialog1.Execute;語句來顯示一個如圖2-8所示的對話框。

圖2-8 經過設置後的“顏色”對話框

2.2.3 “字體”對話框

通過調用FontDialog控件的Execute方法可以顯示一個“字體”對話框,如圖2-9所示即為一個典型的“字體”設置對話框。

圖2-9 “字體”設置對話框

與“字體”對話框有直接關係的屬性有四個,它們是Font屬性、MaxFontSize屬性、MinFontSize屬性和Options屬性,它們的作用如下所示:

?Font屬性:指定在對話框中出現的最初字體,同時也可以指定用戶返回的字體,通過這個屬性還可以設置字體粗體、斜體等屬性;

?MaxFontSize屬性:用於為“字體”對話框指定用戶可以獲得的最大字體尺寸;

?MinFontSize屬性:用於為“字體”對話框指定用戶可以獲得的最小字體尺寸;

?Options屬性:用於為“字體”對話框返回或設置選項。

其中Options屬性對於“字體”對話框的特征設置有重要的作用,同“打開”對話框一樣,該屬性也是一係列設置值的集合,如表2-3所示為Options屬性設置值及其說明。

表2-3 “字體”對話框中常用的Options常數及其說明

常用常數 常數描述

fdAnsiOnly 為真時,對話框隻允許選擇 Windows 字符集的字體。如果該標誌被設置,就不能選擇僅含符號的字體。

fdApplyButton 為真時可以在對話框中顯示“應用”按鈕。

fdNoOEMFonts 為真時,在對話框中隻有非矢量字體出現。

fdEffects 為真時對話框允許刪除線,下劃線,以及顏色效果。

fdFixedPitchOnly 為真時,可以指定對話框隻能選擇固定間距的字體。

fdForceFontExist 為真時,如果用戶試圖選擇一個並不存在的字體或樣式,顯示錯誤信息框。

fdShowHelp 為真時,在對話框中顯示幫助按鈕。

fdLimitSize 為真時,對話框隻能在由 Min 和 Max 屬性規定的範圍內選擇字體大小。

fdNoFaceSel 為真時,在對話框中沒有選擇字體名稱。

fdNoSimulations 為真時,對話框不允許圖形設備接口 (GDI) 字體模擬。

fdNoSizeSel 為真時,對話框沒有選擇字體大小。

fdNoStyleSel 為真時,對話框沒有選擇樣式。

fdNoVectorFonts 為真時,對話框不允許矢量字體選擇。

fdScalableOnly 為真時,對話框隻允許選擇可縮放的字體。

fdTrueTypeOnly 為真時,對話框隻允許選擇 TrueType 型字體。

fdWysiwyg 為真時,對話框隻允許選擇在打印機和屏幕上均可用的字體。

下麵以一個示例程序來說明FontDialog控件屬性設置對“字體”對話框的影響。

首先啟動一個新的項目,向窗體上添加一個按鈕控件,並在控件工具欄上選擇Dialog選項,向窗體上添加一個FontDialog控件,在按鈕的響應事件中添加如下所示的代碼:

procedure TForm1.Button1Click(Sender: TObject);

begin

form1.FontDialog1.Font.Color:=rgb(255,255,0);

//設置字體顏色

form1.FontDialog1.Font.Size:=20;

//設置字體大小

form1.FontDialog1.Font.Style:=[fsBold, fsItalic, fsUnderline, fsStrikeOut];

//設置字體風格

form1.FontDialog1.Options:=[fdLimitSize];

//設置對話框風格

form1.FontDialog1.Device:=fdScreen;

//設置字體使用設備

if form1.FontDialog1.Execute then

form1.Memo1.Font:=form1.FontDialog1.Font;

//設置文本框的字體

end;

在程序運行的初始階段,單擊按鈕,就會激活按鈕的響應事件,程序首先設置了在“字體”對話框中初始化字體的大小、顏色和風格,並且設置了“字體”對話框的風格和使用設備,最後通過form1.FontDialog1.Execute;語句來顯示一個如圖2-10所示的對話框。

圖2-10 經過屬性設置後的“字體”對話框

2.2.4 “查找”對話框

通過調用FindDialog控件的Execute方法可以顯示一個“查找”對話框,如圖2-11所示即為一個典型的“查找”設置對話框。

圖2-11 “查找”設置對話框

與“查找”對話框有直接關係的屬性有兩個,它們是FindText屬性和Options屬性,它們的作用如下所示:

?FindText屬性:存儲欲查找的字符串;

?Options屬性:用於為“字體”對話框返回或設置選項。

其中Options屬性對於“查找”對話框的特征設置有重要的作用,同“打開”對話框一樣,該屬性也是一係列設置值的集合,如表2-4所示為Options屬性設置值及其說明。

表2-4 “查找”對話框中常用的Options常數及其說明

常用常數 常數描述

frDisableMatchCase 為真時,大小寫匹配複選框不可用。

frDisableUpDown 為真時,向上和向下兩個按鈕不可用。

frDisableWholeWord 為真時,全字匹配複選框不可用。

frDown 為真時,對話框中的向下按鈕被選中,同時設置程序向下搜索

字符串。

frFindNext 為真時,用戶已經選中尋找下一個按鈕。

frHideMatchCase 為真時,大小寫匹配複選框不可見。

frHideWholeWord 為真時,全字複選框不可見。

frHideUpDown 為真時,隱藏向上和向下的按鈕。

frMatchCase 為真時,大小寫匹配複選框已經被檢查過。

續 表

常用常數 常數描述

frReplace 為真時,一個係統設置的令程序用替換字符串去替換字符串的標誌,僅對ReplaceDialog控件有效。

frReplaceAll 為真時,一個係統設置的令程序用替換字符串去替換所有查找

字符串的標誌,僅對ReplaceDialog控件有效。

frShowHelp 為真時,在對話框中顯示一個幫助按鈕。

FrWholeWord 為真時,全字匹配複選框可見。

下麵以一個示例程序來說明FindDialog控件屬性設置對“查找”對話框的影響。

1.創建項目

首先啟動一個新的項目,向窗體上添加一個Button控件,並在控件工具欄上選擇Win32選項,並且把其中的RichEdit控件添加到窗體上,然後選中控件工具欄上的Dialog選項,向窗體上添加一個FindDialog控件。添加完控件後的窗體如圖2-12所示。

圖2-12 添加完控件後的窗體

2.添加代碼

設計完上麵的項目窗體,然後按照下麵程序清單的提示添加完程序響應代碼:

程序清單

unit FindString;

interface

uses

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

StdCtrls, ComCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

RichEdit1: TRichEdit;

FindDialog1: TFindDialog;

procedure Button1Click(Sender: TObject);

procedure FindDialog1Find(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin

FindDialog1.Execute;

//顯示對話框

end;

procedure TForm1.FindDialog1Find(Sender: TObject);

var

FoundAt: LongInt;

StartPos, ToEnd: integer;

//變量聲明

begin

with RichEdit1 do

begin

if SelLength <> 0 then

StartPos := SelStart + SelLength

else

StartPos := 0;

ToEnd := Length(Text) - StartPos;

FoundAt:=FindText(FindDialog1.FindText,StartPos,ToEnd,[stMatchCase]);

if FoundAt <> -1 then

begin

SetFocus;

SelStart := FoundAt;

SelLength := Length(FindDialog1.FindText);

end;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

form1.FindDialog1.FindText:='對話框';

//設置查找字符串

form1.FindDialog1.Options:=[frDown,frFindNext, frMatchCase, frWholeWord];

//設置對話框風格

end;

end.

程序說明:

在程序運行的初始階段,首先執行窗體的初始化事件FormCreate,程序通過語句form1.FindDialog1.FindText:='Wangxingjing';和form1.FindDialog1.Options:=[frDown, frFind

Next, frMatchCase, frWholeWord];設置了待查找的字符串和對話框的顯示風格,如果用戶單擊了Button1控件,那麼就會調用FindDialog控件的Execute方法來顯示一個對話框執行查找的操作,如果在用戶指定的位置找到了指定的字符串,那麼就會調用控件的FindDialog1Find方法選中找到的字符串。

程序運行結果如圖2-13所示。

圖2-13 程序運行結果

其它的係統控件,如“打印”對話框、“打印設置”對話框、“替換”對話框、“打開圖片”對話框和“存儲圖片”對話框,以及Windows幫助引擎等由於與“打開”等對話框的原理大致相同,在這裏就不多加敘述,請讀者自己在程序設計的過程加以體會。

2.3 標準對話框的使用

在Delphi中為了方便用戶的開發工作,提供了十種標準的對話框控件——打開文件對話框、存儲文件對話框、打開圖片對話框、存儲文件對話框、打印對話框、打印設置對話框、字體設置對話框、顏色設置對話框、查找對話框和替換對話框。

以上這十種標準對話框的屬性和用法在這裏就不多加敘述了,下麵通過一個示例程序來說明打開文件對話框、字體設置對話框和顏色設置對話框的使用方法和各自所能夠實現的功能。

注意:

?在下麵的這個示例程序中,用戶在程序的運行過程中,可以有選擇的打開一個以*.txt為文件後綴的文本文件,並且在程序的運行過程中,還可以改變文本的顯示形式,如字體和顏色的設置等。

程序製作的具體步驟如下所示:

1.開始工作

首先啟動一個新的項目,選擇菜單“File”中的“New Application”項;

在Delphi的集成開發環境中就會彈出一個新建的窗體,在控件工具欄上的Standard選項和Dialogs選項中分別的選取Button按鈕控件(四個)、Memo控件、打開文件對話框控件、保存文件對話框控件、字體設置對話框控件和顏色設置對話框控件,並且把它們放置到空白的窗體上。添加控件後的窗體如圖2-14所示。

圖2-14 添加控件後的窗體

其中窗體和控件的屬性設置如下所示:

object Form1: TForm1

Caption = 'Form1'

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'MS Sans Serif'

Font.Style = []

OldCreateOrder = False

OnCreate = FormCreate

PixelsPerInch = 96

TextHeight = 13

object Memo1: TMemo

Left = 8

Top = 48

Width = 361

Height = 281

Lines.Strings = ('Memo1')

TabOrder = 0

end

object Button1: TButton

Left = 8

Top = 8

Width = 75

Height = 25

Caption = '打開文件'

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Name = 'MS Sans Serif'

Font.Style = []

ParentFont = False

TabOrder = 1

OnClick = Button1Click

end

object Button2: TButton