[
]不要骂我灌水啊,下面是常用duihuadui对话框
使用对话框
一 消息对话框
在程序运行的过程中,经常需要给用户显示一些简单的提示信息,这时就可以通过信息对话框来实现。
下面的这些过程和函数可以方便地显示信息对话框:
(1) ShowMessage
过程ShowMessage的定义如下:
procedure ShowMessage(const Msg: string);
它显示一个简单的信息对话框。其中有提示信息和一个OK按钮。这种类型的信息对话框非常简单,可以在系统调试期间显示给开发人员一些过程信息。但由于过于简单,所以建议在软件的定型版本中不要使用这种类型的信息对话框。
(2) ShowMessageFmt
过程ShowMessageFmt的定义如下:
procedure ShowMessageFmt(const Msg: string; Params: array of const);
过程ShowMessageFmt可以在信息对话框上显示一个格式化串,例如:
ShowMessageFmt('文件%s 共有%d 字节。' , ['MyDoc.txt',4621925]) ;
(3) MessageDlg
函数MessageDlg的定义如下:
function MessageDlg(const Msg: string; AType: TMsgDlgType;
AButtons: TMsgDlgButtons; HelpCtx: Longint): Word ;
MessageDlg函数可以显示比较丰富的提示信息,还可以获取用户的响应。参数AType可以在信息对话框中显示一定的图标表达不同的意义,取值如表4-3所示;参数AButtons设置信息对话框上显示的按钮,取值如表4-4所示;函数的返回值如表4-5所示。
表4-3 TMsgDlgType类型参数的取值
TMsgDlgType信息 对话框类型
mtWarning 显示一个黄颜色的惊叹号图标
mtError 显示一个红色的s t o p标志的图标
mtInformation 显示一个蓝色的"i"标志的图标
mtConfirmation 显示一个绿色的问号图标
mtCustom 不显示图标,信息对话框的标题是应用程序可执行文件的文件名
表4-4 TMsgDlgButtons类型参数的取值
TMsgDlgButtons 信息对话框的按钮类型
MbYes 是(Yes)按钮
MbNo 否(No)按钮
MbOK 确定(OK)按钮
mbCancel 取消(Cancel)按钮
MbHelp 帮助(Help)按钮
mbAbort 放弃(Abort)按钮
mbRetry 重试(Retry)按钮
MbIgnore 忽略(Ignore)按钮
MbAll 所有(All)按钮
mbNoToAll 所有都不(No、ToAll )按钮
mbYesToAll 所有都是(Yes、ToAll)按钮
mbYesNoCancel 是、否和取消(Yes、No和Cancel)按钮
mbOKCancel 确定和取消(OK、Cancel)按钮
mbAbortRetryIgnore 放弃、重试和忽略(Abort、Retry、Ignore)按钮
表4-5 信息对话框的返回值
信息对话框的返回值 返回值含义
mrNone 在用户退出前作为一个默认值, 数值为0
MrOk 按下了确定(Ok)按钮
MrCancel 按下了取消(Cancel)按钮
MrAbort 按下了放弃(Abort)按钮
mrRetry 按下了重试(Retry)按钮
mrYes 按下了是(Yes)按钮
MrNo 按下了否(No)按钮
mrIgnore 按下了忽略(Ignore)按钮
mrAll 用来检测最后预定义的常数, 数值为mrNo+1
例程S4-5:对话框的应用
该例程说明了信息对话框的用法。
在窗体Form1中有一个Name属性为Button1的按钮,在其OnClick事件的处理过程中有下面一些代码:
procedure TForm1.Button1Click(Sender: TObject) ;
begin
// 询问是否退出
if MessageDlg('欢迎使用。确定退出吗? ',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
MessageDlg( '退出本软件。', mtInformation, [mbOk], 0);
Close; // 退出
end ;
end ;
(4) MessageDlgPos
函数MessageDlgPos的定义如下:
function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Word;
其中,参数Msg为一个字符串常量;参数DlgType指定对话框的样式,如表4-3所示;参数B uttons指定信息对话框上按钮的类型,如表4-4所示;参数HelpCtx指定联机帮助的ID号;X、Y为信息对话框左上角在屏幕上的坐标。通过函数的返回值可以判断用户的输入命令,如表4-5所示。
例如:
MessageDlgPos('是否继续执行? ',mtConfirmation, mbYesNoCancel, 0, 200, 200);
(5) MessageDlgPosHelp
在函数MessageDlgPosHelp显示的信息对话框中可以单独指定一个帮助文件。函数定义如下:
function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
const HelpFileName: string): Word ;
其中,参数HelpFileName为指定的帮助文件的文件名。
(6) 调用Windows API 函数
调用函数MessageBox,函数定义如下:
int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType) ;
参数hWnd指定父窗口,如果设置为NULL,则信息对话框没有父级窗口;
参数lpText为一个指向字符串的指针,字符串中的内容是要显示的信息;
参数lpCaption为一个指向字符串的指针,字符串中的内容是在信息对话框标题上显示的文字。
参数uType指定信息对话框的风格,可以是表3-6和表3-7中数值的组合,使用“+”或“|”将两个或两个以上的设置组合在一起。另外,参数uType中还可以组合下面的一些设置:
① 默认按钮的设置
• MB_DEFBUTTON1 第一个按钮是默认按钮,即信息对话框出现后,当前焦点位于第一个按钮上。
• MB_DEFBUTTON2 第二个按钮是默认按钮。
• MB_DEFBUTTON3 第三个按钮是默认按钮。
• MB_DEFBUTTON4 第四个按钮是默认按钮。
② 其他设置
• MB_APPLMODAL 信息对话框以模态对话框形式出现。必须在响应了信息对话框后才可以继续本应用程序。
• MB_SYSTEMMODAL 信息对话框以模态对话框形式出现,同时在响应前,始终显示在桌面的最前端。
• MB_TASKMODAL 同MB_APPLMODAL类似。
• MB_HELP 添加一个帮助按钮。
• MB_RIGHT 文本显示时右对齐。
• MB_TOPMOST 信息对话框始终显示在桌面最前面。
例如:
MessageBox(Form1.Handle,'找不到指定的文件。是否继续?' , '警告',MB_YESNO+MB_ICONWARNING+MB_DEFBUTTON2+MB_SYSTEMMODAL);
运行结果如图4-10所示。
注意:当利用信息对话框显示与“内存不足”有关的信息时,不要从资源中为lpText和lpCaption参数读取字符串,因为这时尝试装入资源可能会失败。
(7) CreateMessageDialog
函数CreateMessageDialog的定义如下:
function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons): TForm;
参数Msg为显示的文本信息;参数DlgType为对话框的类型,如表4-3所示;参数Buttons设置信息对话框上的按钮类型,如表4-4所示;返回值为TForm类型。调用了CreateMessageDialog函数后并不立即显示信息对话框窗体,必须由程序主动地将窗口显示。
二 常用对话框的应用
1.查找对话框
在FindDialog1的OnFind事件中添加FindDialog1Find函数,用于添加查找代码。
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;
2.替换对话框
在replacedialog1的onfind事件中添加replacedialog1find,用于添加查找代码。
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(replacedialog1.findtext,startpos,toend,[stmatchcase]);
If foundat<>-1 then
Begin
Setfocus;
Selstart:=foundat;
Sellength:=length(replacedialog1.findtext);
End;
End;
End;
在replacedialog1的onreplace事件中添加replacedialog1replace函数,用于添加替换代码。
Var
Selpos:integer;
Begin
With treplacedialog(sender) do
Begin
Selpos:=pos(findtext,richedit1.lines.text);
If selpos >0 then
Begin
Richedit1.selstart:=selpos-1;
Richedit1.sellength:=length(findtext);
Richedit1.seltext:=replacetext;
End
Else
Messagedlg(concat(‘没有找到”’,findtext,’”在文档中’),mterror,[mbok],0);
End;
End;
3.打印设置对话框
注意,在使用前一定要引用“printers”
Procedure TForm1.Button1click(sender:TOBject);
Begin
If printersetupdialog1.execute then
Begin
Printer.begindoc;
Printer.printers.Add(Richedit1.lines.text);
Printer.enddoc;
End;
End;.
4.FONTDIALOG对话框
Begin
If colordialog1.execute then
Begin
Richedit1.selattributes.color:=colordialog1.color;
End;
End;