VCL组件之公用对话框组件pchmonster

公用对话框是一类非可视的组件,它们都由TDialog类继承而来,存在Dialogs组件面板上。包括:

Dialogs类引入了抽象的Execute函数。在程序运行期间调用各种公用对话框很简单,只需使用Execute方法即可。一般来说,当用户选择了文件并单击“OK”按钮之后,Execute方法就返回True;而如果没有选择文件就关闭了对话框的话,就返回一个False。

除了Find和Replace对话框无模式地显示对话框外,其它的对话框都是模式显示。公用对话框经常如此实现:

ifOpenDialog1.Executethenbegin{用户点击了OK,选择了文件}Memo1.Lines.LoadFromFile(OpenDialog1.FileName);{做一些其它的操作}end;这个代码显示了TOpenDialog对话框并从用户那儿得到了文件名,如果点击OK按钮,在If块中的代码得到执行,文件被装载到了Memo组件中,如果OK没有点击,if块中的代码就被忽略了。

文件选择型对话框组件也是我们最常用的对话框组件了,它包括了OpenDialog、SaveDialog、OpenPictureDialog和SavePictureDialog四种对话框组件,主要被应用程序“文件”菜单下的“打开”、“保存”、命令所调用。该对话框允许你浏览、切换目录,并使用通配符选择一组文件。OpenPictureDialog和SavePictureDialog除了比OpenDialog和SaveDialog多了一个图像预览的区域外,几乎毫无差别。

我们经常要用到定义文件类型的过滤规则。在ObjectInspector中单击Filter属性右侧的“…”符号,弹出“FilterEditor”对话框,如下图所示。

其中,FilterName是对这种文件类型的描述,Filter定义过滤规则,上图中的*.txt代表只有txt扩展名的文件才会出现在文件列表中。

也可以运行期给Filter属性赋值,用管道号(|)把描述和过滤器分开,例如:

OpenDialog1.Filter:='文本文件(*.txt)|*.txt|超文本文件(*.htm)|*.htm|脚本文件(*.asp)|*.asp|所有文件(*.*)|*.*';这行代码和上面的FilterEditor中输入的是一样的。

SaveAs对话框就是Title属性设置为“SaveAs”的SaveDialog组件。

可以不把OpenDialog组件放到窗体上,而通过在运行期间通过建立TOpenDialog类的实例,调用其Execute方法,代码如下:

procedureTForm1.Button1Click(Sender:TObject);varOpenDlg:TOpenDialog;beginOpenDlg:=TOpenDialog.Create(Self);ifOpenDlg.Executethenbegin{dosomethinghere}end;OpenDlg.Free;end;若有必要,在调用Execute前设置OpenDialog组件的属性。

下面我们通过一个简单的字处理程序的设计来介绍如何使用各种公用对话框组件。我们先来做第一步

1)、新建一个工程,放置的组件及其属性如下表

2)、双击MainMenu,设计主菜单菜单内容如下:

具体菜单项属性如下:

3)、现在窗口看起来如下:

4)、为窗体Form1添加OnCreate事件,代码如下:

procedureTForm1.FormCreate(Sender:TObject);begin{为打开和保存对话框建立过滤器}OpenDialog1.Filter:='Textfile(*.txt)|*.txt|RichTypeFiles(*.rtf)|*.rtf';SaveDialog1.Filter:=OpenDialog1.Filter;end;5)、为窗体创建CheckSave函数,用于检查文件是否需要保存。

privatefunctionCheckSave:Boolean;public{Publicdeclarations}end;{...省略一些不必要在此显示的代码,节省空间}functionTForm1.CheckSave:Boolean;varConfirm:Word;beginResult:=True;ifRichEdit1.Modifiedthen{弹出对话框询问用户是否要保存文件}Confirm:=MessageDlg('文件还没有保存,是否保存?',mtWarning,[mbYes,mbNo,mbCancel],0);{如果用户选择了取消按钮,则返回False}ifConfirm=mrCancelthenResult:=False;ifConfirm=mrYesthen{如果用户选择了是按钮,则弹出保存对话框进行保存}ifSaveDialog1.ExecutethenResult:=TrueelseResult:=False;end;6)、为窗体的OnCloseQuery事件建立响应代码,用于在关闭窗体前检查文件是否保存。

procedureTForm1.FormCloseQuery(Sender:TObject;varCanClose:Boolean);begin{调用CheckSave函数检查文件是否经过保存,如果不需要保存或者已经保存,则允许窗体关闭}CanClose:=CheckSave;end;7)、为“新建”菜单项建立事件,代码如下:

procedureTForm1.FileOpenClick(Sender:TObject);beginifCheckSavethen{检查文件是否保存}withOpenDialog1dobegin{对话框中不显示只读文件,没有快速位置栏}Options:=[ofHideReadOnly,ofFileMustExist];OptionsEx:=[ofExNoPlacesBar];ifExecutethen{如果文件扩展名不符合,则显示出错信息}ifofExtensionDifferentinOptionsthenShowMessage('打开文件类型错误')else{利用TStrings类的LoadFromFile方法,将文本文件读取到RichEdit1中}RichEdit1.Lines.LoadFromFile(FileName);end;end;9)、双击“保存”菜单项,编写如下代码:

procedureTForm1.FileSaveClick(Sender:TObject);beginwithSaveDialog1dobegin{当用户试图覆盖已有文件时,弹出警告窗口}Options:=[ofOverwritePrompt];OptionsEx:=[ofExNoPlacesBar];ifExecutethenRichEdit1.Lines.SaveToFile(FileName);end;end;10)、保存该程序,现在程序已经实现了打开文件,保存文件,新建文件的功能。接下讲解中里还将用到这个程序。

ColorDialog对话框使用户能选择颜色。当点击OK按钮时,Color属性包含颜色信息。Color对话框没有响应事件。颜色对话框如下:

我们仍然通过上面您的程序例子,来说明颜色对话框的使用。

1)、在主窗体上放置一个ColorDialog组件,设置其cdFullOpen选项为True

2)、双击“背景色”菜单项,编写代码如下:

procedureTForm1.EditColorClick(Sender:TObject);beginifColorDialog1.ExecutethenRichEdit1.Color:=ColorDialog1.Color;end;3)、运行程序后可以通过“背景色”菜单,改变文本的颜色。如下:

FontDialog对话框提供了对应用程序中文字的字体、字形、大小和颜色进行设置的方法。一个完整的字体对话框如下:

字体对话框组件的主要属性

Device——指定得到可用字体列表的设备。Device属性属于FontDialogDevice类,有三种取值:fdScreen代表从屏幕设备得到可用字体列表;fdPrinter代表从打印设备得到;fdBoth表示从两者共同得到。

Font——可在设计期指定默认字体,也可在运行期用来传递用户选择的字体

MaxFontSize、MinFontSize——决定了最大和最小可用的字号,只有当Options属性中fdLimitSize选项设置为True时才起作用

Options——一些选项的集合

Font对话框有一个OnApply事件,当用户点击Font对话框上的Apply按钮时,会出现OnApply事件。Apply按钮不会出现在Font对话框上,除非事先为OnApply事件建立了有效(非空)事件处理程序。

我们在上面的例子的基础上进一步加工,来熟悉字体对话框的用法。

1)、在窗体上放置一个FontDialog组件,并为其添加OnApply事件,代码如下:

procedureTForm1.FontDialog1Apply(Sender:TObject;Wnd:HWND);begin{如果存在选区,则仅仅改变选区的文本字体}ifRichEdit1.SelLength>0thenbeginRichEdit1.SelAttributes.Color:=FontDialog1.Font.Color;RichEdit1.SelAttributes.Name:=FontDialog1.Font.Name;RichEdit1.SelAttributes.Size:=FontDialog1.Font.Size;RichEdit1.SelAttributes.Style:=FontDialog1.Font.Style;endelse{不存在选区则所有文本字体都要改变}RichEdit1.Font:=FontDialog1.Font;end;当用户双击对话框中的“应用”按钮时,将字体设置应用到选区文字或全部文字。

2)、为“字体”菜单项添加代码:

procedureTForm1.EditFontClick(Sender:TObject);beginifFontDialog1.Executethen{重用字体对话中的“应用”按钮的代码}FontDialog1Apply(Form1,Handle);end;3)、保存程序,运行后测试字体功能,如下:

查找对话框FindDialog组件主要用来在字处理一类的软件中,查找指定字符串,是非模式对话框,如下:

查找对话框和替换对话框的Execute方法与其他公用对话框组件不太一样,首先Find和Replace对话框是非模式的,对话框显示出来后,Execute方法就返回。由于对话框是非模式的,返回值没有意义总是True。而且查找与替换对话框使用OnFind与OnReplace事件,与Options属性一起确定对话框发生了什么。点击“查找下一个”按钮时出现OnFind事件,ReplaceDialog对话框有OnFind事件,也有OnReplace事件,在点击“替换”和“全部替换”按钮时就被触发。

FindDialog与ReplaceDialog对话框主要属性包括FindText(要找的文本)、ReplaceText(用来替换找到文本的文本)及Options选项。显然FindDialog没有ReplaceText属性。Options属性包含了用户点击“查找下一个”与“全部替换”按钮时设置的各种选项的各种信息。

让我们继续来完善上面的例子。

1)、在窗体上放置一个FindDialog组件,编写它的OnFind事件:

procedureTForm1.FindDialog1Find(Sender:TObject);varFoundAt:Integer;StartPos,ToEnd:Integer;beginwithRichEdit1dobeginifSelLength<>0thenStartPos:=SelStart+SelLengthelseStartPos:=0;{toEnd是RichEdit1中从开始查找位置到结束位置的距离}ToEnd:=Length(Text)-StartPos;FoundAt:=FindText(FindDialog1.FindText,StartPos,ToEnd,[]);ifFoundAt<>-1thenbeginSetFocus;SelStart:=FoundAt;SelLength:=Length(FindDialog1.FindText);end;end;end;如果RichEdit1中存在一个选择区域,那么就从选区结束处开始查找,否则就从头开始查找(如果从选区开始处查找的话,第一次查找到的字符串会自动选中,造成无法进行第二次查找)

2)、为“编辑”菜单下的“查找”命令建立OnClick事件:

procedureTForm1.EditFindClick(Sender:TObject);beginwithFindDialog1dobegin{隐藏“区分大小写”和“全字匹配”复选框}Options:=[frDown,frHideMatchCase,frHideWholeWord];Execute;end;end;3)、运行程序,打开一个文件,单击“查找”菜单项弹出“查找”对话框,输入要查找的字符串后,单击“查找下一个”按钮,就会立刻找到符合要求的第一个字符串并选定。如下图:

替换对话框TReplaceDialog组件也是非模式对话框,用于将查找到的匹配字符串用指定的字符串来替换,如下图:

替换对话框的主要属性就是ReplaceText属性,用来替换的文本。

下面我们给前面的例子加上替换对话框:

1)、在主窗体上放置一个ReplaceDialog组件,在该组件的OnReplace事件中完成替换功能的代码:

procedureTForm1.ReplaceDialog1Replace(Sender:TObject);varSelPos:Integer;beginwithTReplaceDialog(Sender)dobegin{在RichEdit1中进行区分大小写的完全查找}SelPos:=Pos(FindText,RichEdit1.Lines.Text);ifSelPos>0thenbeginRichEdit1.SelStart:=SelPos-1;RichEdit1.SelLength:=Length(FindText);{替换字符串}RichEdit1.SelText:=ReplaceText;endelseMessageDlg(concat('找不到“',FindText,'”!'),mtError,[mbOK],0);end;end;2)、单击“替换”菜单项,为此菜单项添加事件响应:

procedureTForm1.EditReplaceClick(Sender:TObject);beginwithReplaceDialog1dobeginOptions:=[frDown,frHideMatchCase,frHideWholeWord];Execute;end;end;因为上面的查找算法区分大小写并且不能修改,所有这里我们隐藏了“区分大小写”和“全字匹配”复选框。

3)、运行程序,测试下替换功能,如下:

打印对话框TPrintDialog组件通常用来给打印机分配一项打印显示内容的作业。在字处理类软件和图像处理类软件中使用非常普遍。打印对话框也属于模式对话框,如下图:

打印对话框常用属性见下表,默认情况下,所有选项都设为False。

下面我们给对话框演示程序添加打印功能:

1)、在窗体上添加一个PrintDialog组件,设置其poPageNums、poPrintToFile、poSelection均为False,即不允许用户选择打印范围和使用打印到文件功能。

2)、为“文件”菜单下的“打印”命令添加事件响应:

procedureTForm1.FilePrintClick(Sender:TObject);vari:Integer;beginifPrintDialog1.Executethen{利用RichEdit对象的Print方法打印指定份数的文档}fori:=1toPrintDialog1.CopiesdoRichEdit1.Print('默认打印文档');end;3)、执行该程序。至此,我们就利用各种公共对话框完成了一个简单的字处理程序。

THE END
1.点菜菜单设计点菜菜单模板点菜菜单图片觅知网为您找到133个原创点菜菜单设计图片,包括点菜菜单图片,点菜菜单素材,点菜菜单海报,点菜菜单背景,点菜菜单模板源文件下载服务,包含PSD、PNG、JPG、AI、CDR等格式素材,更多关于点菜菜单素材、图片、海报、背景、插画、配图、矢量、UI、PS、免抠,模板、艺术字、Phttps://m.51miz.com/so-sucai/3772690.html
2.菜单菜单专题模板菜单菜单图片素材下载我图网菜单菜单专题为您整理了23129个原创高质量菜单菜单图片素材供您在线下载,PSD/JPG/PNG格式菜单菜单模板下载、高清菜单菜单图片大全等,下载图片素材就上我图网。https://so.ooopic.com/search-b2cbb5a5b2cbb5a5-47-504_3601__0_2_0_ooo_0_1_0_0_0_0_0_0_0_320~200__0__0.html
3.菜单素材菜单图片菜单素材图片下载熊猫办公为您找到400个菜单素材图片,包括菜单图片,菜单素材,菜单背景,菜单模板源文件下载服务,包含PSD、PNG、JPG、AI、CDR等多种格式的素材,更多关于菜单素材、图片、背景、矢量、UI、PS、免抠,艺术字、插画、配图等设计素材模板https://www.tukuppt.com/speciall/caidan1546.html
4.菜单解释菜单拼音菜单造句查字典组词频道为广大网友提供菜单的解释,菜单怎么组词,菜单的拼音,菜单什么意思,菜单的含义,释义,造句,成语,迷语,书写,汉语词典,在线现代汉,语词典查找词语解释就上查字典组词频道。https://www.chazidian.com/zuci-%E8%8F%9C%E5%8D%95/
5.菜单菜谱,菜单菜谱图片/素材/模板,免费菜单菜谱图库下载图品汇是领先中国万千菜单菜谱素材图库网中免费设计素材模板网,提供免费菜单菜谱素材,模板,高清原创正版图片下载,为您优选原创菜单菜谱模板下载,菜单菜谱素材。精品原创,作品严格审核,高速免费下载。https://m.88tph.com/caidan/
6.菜单的英文菜单翻译菜单英语怎么说海词词典,最权威的学习词典,专业出版菜单的英文,菜单翻译,菜单英语怎么说等详细讲解。海词词典:学习变容易,记忆很深刻。http://dict.cn/%E8%8F%9C%E5%8D%95
7.中餐菜单中餐菜单图片中餐菜单设计模板红动中国素材网提供185个中餐菜单、中餐菜单图片、中餐菜单素材、中餐菜单模板下载,包含了psd、ai、png,jpg、cdr等格式中餐菜单,更多精品中餐菜单下载,就来红动中国,最后更新于2024-03-04 11:27:23。https://so.redocn.com/caipu/d6d0b2cdb2cbb5a5.htm
8.菜单设计制作菜单模板图片这是一个关于菜单设计的专题页面,包含了菜单设计的基本原则、技巧,以及相关的在线设计工具、设计模板等内容。通过本专题,您可以学习如何快速创建专业的菜单设计,并打造与众不同的独特菜单设计。无论您是餐厅、咖啡馆还是其他行业,都能从中获取灵感并提升您的菜单设计水https://www.gaoding.com/features/4
9.菜单简约图片菜单简约素材菜单简约模板免费下载六图网为您提供221183张菜单简约设计作品免费下载服务,您还可以找到菜单简约图片、菜单简约素材、菜单简约模板等设计素材,我们为您提供菜单简约图片下载,菜单简约模板下载、菜单简约素材下载等服务!https://m.16pic.com/sucai/6128737.html?from=singlemessage
10.婚宴菜单婚宴菜谱婚宴菜单大全喜酒菜谱喜宴菜单婚礼宴席上的婚宴菜式花样繁多,准新人们挑花了眼也无法做出选择,不要紧,这里就为大家推荐各种婚宴菜单大全,婚宴菜谱,喜宴菜谱,不管你想要西式还是中式的,都能找到你想要的喜宴菜单。一起来看看酒店酒席上都有哪些诱人的美食吧。https://m.wed114.cn/wiki/bentry_406.h
11.游戏菜单下载电脑版游戏菜单软件专题戏菜单官方下载游戏菜单软件合集,为您提供游戏菜单官方下载、游戏菜单家庭版下载、游戏彩蛋等内容。更多游戏菜单内容,请到华军软件园游戏菜单软件合集!http://www.onlinedown.net/zt/5716/
12.菜单的解釋菜单的意思漢典“菜单”詞語的解釋“菜单”的解釋,成語解釋,國語辭典,網路解釋https://www.zdic.net/hant/%E8%8F%9C%E5%8D%95
13.菜单设计图片免费下载菜单设计素材菜单设计模板千图网为您找到79048张菜单设计相关素材,千图网还提供菜单设计图片,菜单设计素材, 菜单设计模板等免费下载服务,千图网是国内专业创意营销服务交易平台,一站式解决企业营销数字化、协同化,实现营销转化效果增长!https://www.58pic.com/tupian/caidansheji.html
14.开始菜单快捷键开始菜单软件合集win7开始菜单图标下载开始菜单是电脑上必备快捷键,开始菜单软件合集给大家带来多款win10、win7、win8经典菜单键,大家根据自己的喜好随意设置图标,开始菜单软件合集给你不一样的体验。https://www.itmop.com/key/kaishicaidan/
15.内置菜单的游戏合集内置菜单mod版游戏大全内置菜单的游戏是在游戏中有着菜单可以让游戏变得更加轻松的游戏,在内置菜单的游戏中你将能够变得非常强力,不管什么关卡都是难不倒你的,有了内置菜单,你将能够轻松享受游戏的乐趣,快来下载试试吧.http://www.qqtf.com/k/nzcddyx/
16.内置菜单游戏合集内置菜单游戏盒子大全下载内置菜单游戏大全2024最新版是以一系列拥有内置菜单功能的游戏资源而组成的合集,这里将为您带来极为丰富且有趣的手机游戏,无论是游戏盒,还是修改器等等,这里统统能找到哦!热烈欢迎对此感兴趣的用户前来下载体验!点击下方即可哦体验哦!.http://m.2265.com/k/neizhicaidanyouxi?ivk_sa=1024320u
17.厨房无小事——《菜单》(菜单)影评《菜单》就像把《资产阶级的审慎魅力》(Le Charme discret de la bourgeoisie ,1972)《厨师、大盗、他的太太和她的情人》(The Cook, the Thief, His Wife & Her Lover ,1989)《悲情三角》(Triangle of Sadness ,2022)等影片中用餐场景扩展化一样,同时对艺术家和观众提出批评,在完美无瑕的外表下是一个不完整https://movie.douban.com/review/14937409/
18.菜单模板菜单设计模板浏览我们海量的菜单模板,即使你不是设计师,也能创建令人惊艳的设计。免费个性化。https://www.canva.cn/learn/menu-template/
19.菜单是什么意思菜单的翻译音标读音用法例句爱词霸权威在线词典,为您提供菜单的中文意思,菜单的用法讲解,菜单的读音,菜单的同义词,菜单的反义词,菜单的例句等英语服务。https://www.iciba.com/%E8%8F%9C%E5%8D%95
20.宴席菜单16道菜宴席菜单名称接亲网不过在不同酒店宴席菜谱是不一样的,不过里面的寓意却是一样的,在婚宴菜单的选择上尽量显得比较的大气,一定要让客人们吃饱喝足了,不然的话,就会显得自己特别的小气。以上就是接亲网小编今日为大家整理的关于宴席菜单16道菜和婚宴菜单名称的全部内容了,希望对大家有一些小小的帮助哟!https://www.jieqinwang.com/baike/71730.html
21.家庭聚会,朋友聚餐,一个菜单都搞定精选菜单周末同事到家里做客,一顿可口的家宴总是能体现主人的好客和真诚。无奈众口难调,时间又紧总是一下想不到那么多,为您准备了一份家宴菜单,适合八到十人的规模。https://m.xiangha.com/caipu/caidan/347596/
22.家常菜谱菜谱大全家常菜做法大全2019年夜饭菜单 年夜饭 初一菜单 初二菜单 初三菜单 初四菜单 初五菜单 初六菜单 初七菜单 今日美食 食谱大全 > 解毒生津 凉拌萝卜丝 补肾理气 红油豉香墨鱼条 薄荷绿茶 强筋壮骨 西芹炒牛肉 降糖降脂 土豆焖排骨 美容养颜 花生牛奶大米汁 坚果情节之腰果酥 http://caipu.chinabeer.com/
23.Bandizip无法注册 Bandizip 无法访问用于购买 Bandizip 的电子邮件帐户 代码自动检测功能无法正常工作 如何排除“当我在浏览器上下载压缩文件时,Bandizip 会自动打开它们”问题 压缩图标在文件资源管理器中不能正确显示 文件资源管理器不显示Bandizip的右键菜单。 Bandizip的右键菜单(上下文菜单)无法正常显示 解/压缩速度过慢 “错误https://www.bandisoft.com/bandizip/help/how-to-unzip/