⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wizards_1.htm

📁 对于学习很有帮助
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>怎样编写DELPHI向导(一)</title>
</head>

<body bgcolor="#FFFFFF" text="#000000">

<p align="center"><big><big><big>怎样编写DELPHI向导(一)</big></big></big></p>

<p>发信人:&nbsp;strayli&nbsp;(stray),&nbsp;信区:&nbsp;Delphi&nbsp;<br>
标&nbsp;&nbsp;题:&nbsp;&nbsp;How&nbsp;To&nbsp;Write&nbsp;Delphi&nbsp;Wizards(1)&nbsp;<br>
发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Thu&nbsp;Nov&nbsp;&nbsp;5&nbsp;21:59:25&nbsp;1998)&nbsp;<b><font
color="#00ff00">WWW-POST</font></b>&nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;How&nbsp;To&nbsp;Write&nbsp;Delphi&nbsp;Wizards &nbsp;<br>
------------------------------------------------------------------------------&nbsp;<br>
-- &nbsp;<br>
&nbsp;Delphi&nbsp;and&nbsp;C++Builder&nbsp;are&nbsp;truly&nbsp;open&nbsp;development&nbsp;environments,&nbsp;in&nbsp;that&nbsp;they&nbsp;&nbsp;<br>
have&nbsp;interfaces&nbsp;to&nbsp;enable&nbsp;us&nbsp;to&nbsp;integrate&nbsp;our&nbsp;own&nbsp;tools&nbsp;and&nbsp;experts&nbsp;within&nbsp;&nbsp;<br>
their&nbsp;IDE.&nbsp;This&nbsp;article&nbsp;will&nbsp;focus&nbsp;on&nbsp;writing&nbsp;and&nbsp;integrating&nbsp;Wizards&nbsp;&nbsp;<br>
(previously&nbsp;called&nbsp;Experts)&nbsp;with&nbsp;Delphi.&nbsp;The&nbsp;resulting&nbsp;(32-bits)&nbsp;Wizards&nbsp;will&nbsp;&nbsp;<br>
be&nbsp;compatible&nbsp;with&nbsp;Delphi&nbsp;2.0x,&nbsp;Delphi&nbsp;3&nbsp;and&nbsp;C++Builder. 
&nbsp;&nbsp; &nbsp;<br>
Delphi&nbsp;has&nbsp;four&nbsp;kinds&nbsp;of&nbsp;Wizards:&nbsp;Project&nbsp;Experts,&nbsp;Form&nbsp;Experts,&nbsp;Standard&nbsp;&nbsp;<br>
Experts&nbsp;and&nbsp;(32-bits&nbsp;only)&nbsp;AddIn&nbsp;Experts.&nbsp;The&nbsp;first&nbsp;two&nbsp;can&nbsp;be&nbsp;found&nbsp;in&nbsp;the&nbsp;&nbsp;<br>
Repository,&nbsp;Standard&nbsp;Experts&nbsp;can&nbsp;be&nbsp;found&nbsp;under&nbsp;the&nbsp;Help&nbsp;menu&nbsp;(like&nbsp;the&nbsp;&nbsp;<br>
Database&nbsp;Form&nbsp;Expert),&nbsp;while&nbsp;AddIn&nbsp;Experts&nbsp;have&nbsp;to&nbsp;provide&nbsp;their&nbsp;own&nbsp;&nbsp;<br>
menu-interface&nbsp;with&nbsp;the&nbsp;Delphi&nbsp;IDE&nbsp;(typicaly&nbsp;anywhere&nbsp;in&nbsp;the&nbsp;menu&nbsp;except&nbsp;for&nbsp;&nbsp;<br>
the&nbsp;Help&nbsp;Menu,&nbsp;which&nbsp;seems&nbsp;to&nbsp;be&nbsp;reserved&nbsp;for&nbsp;Standard&nbsp;Experts&nbsp;only). 
&nbsp;&nbsp; &nbsp;<br>
&nbsp;<br>
&nbsp;<br>
&nbsp; &nbsp;<br>
Project&nbsp;and&nbsp;Form&nbsp;Experts&nbsp;can&nbsp;be&nbsp;activated&nbsp;whenever&nbsp;you&nbsp;create&nbsp;a&nbsp;new&nbsp;Project&nbsp;&nbsp;<br>
or&nbsp;Form&nbsp;(just&nbsp;like&nbsp;Project&nbsp;and&nbsp;Form&nbsp;Templates).&nbsp;Standard&nbsp;and&nbsp;AddIn&nbsp;Experts&nbsp;&nbsp;<br>
are&nbsp;the&nbsp;other&nbsp;kind&nbsp;of&nbsp;Wizards&nbsp;that&nbsp;generally&nbsp;do&nbsp;not&nbsp;create&nbsp;a&nbsp;new&nbsp;project&nbsp;or&nbsp;&nbsp;<br>
form,&nbsp;but&nbsp;provide&nbsp;some&nbsp;kind&nbsp;of&nbsp;information,&nbsp;or&nbsp;only&nbsp;create&nbsp;a&nbsp;new&nbsp;file&nbsp;or&nbsp;&nbsp;<br>
unit.&nbsp; &nbsp;<br>
If&nbsp;you've&nbsp;ever&nbsp;tried&nbsp;an&nbsp;Wizard,&nbsp;you&nbsp;know&nbsp;what&nbsp;power&nbsp;and&nbsp;ease&nbsp;they&nbsp;can&nbsp;bring&nbsp;&nbsp;<br>
to&nbsp;you.&nbsp;The&nbsp;Project&nbsp;Expert&nbsp;develops&nbsp;an&nbsp;entire&nbsp;project&nbsp;for&nbsp;you&nbsp;based&nbsp;on&nbsp;your&nbsp;&nbsp;<br>
specific&nbsp;preferences&nbsp;(like&nbsp;for&nbsp;example&nbsp;the&nbsp;Application&nbsp;Wizard).&nbsp;The&nbsp;Form&nbsp;&nbsp;<br>
Experts&nbsp;develop&nbsp;custom&nbsp;forms&nbsp;that&nbsp;are&nbsp;added&nbsp;to&nbsp;your&nbsp;current&nbsp;project.&nbsp;The&nbsp;&nbsp;<br>
Database&nbsp;Form&nbsp;Expert,&nbsp;for&nbsp;example,&nbsp;generates&nbsp;a&nbsp;form&nbsp;that&nbsp;displays&nbsp;data&nbsp;from&nbsp;&nbsp;<br>
an&nbsp;external&nbsp;database.&nbsp;These&nbsp;example&nbsp;Wizards&nbsp;are&nbsp;not&nbsp;just&nbsp;external&nbsp;tools&nbsp;that&nbsp;&nbsp;<br>
can&nbsp;be&nbsp;started&nbsp;from&nbsp;Delphi,&nbsp;they&nbsp;actually&nbsp;communicate&nbsp;with&nbsp;Delphi&nbsp;and&nbsp;are&nbsp;an&nbsp;&nbsp;<br>
integrated&nbsp;part&nbsp;of&nbsp;the&nbsp;development&nbsp;environment.&nbsp;While&nbsp;this&nbsp;is&nbsp;not&nbsp;so&nbsp;strange&nbsp;&nbsp;<br>
for&nbsp;the&nbsp;existing&nbsp;Delphi&nbsp;Experts&nbsp;(after&nbsp;all,&nbsp;they&nbsp;were&nbsp;developed&nbsp;and&nbsp;added&nbsp;by&nbsp;&nbsp;<br>
the&nbsp;same&nbsp;team&nbsp;that&nbsp;developed&nbsp;Delphi&nbsp;in&nbsp;the&nbsp;first&nbsp;place,&nbsp;and&nbsp;we&nbsp;all&nbsp;know&nbsp;&nbsp;<br>
Delphi's&nbsp;IDE&nbsp;is&nbsp;written&nbsp;in&nbsp;Delphi),&nbsp;it&nbsp;sounds&nbsp;intriguing&nbsp;at&nbsp;least&nbsp;to&nbsp;know&nbsp;&nbsp;<br>
that&nbsp;we,&nbsp;too,&nbsp;can&nbsp;write&nbsp;a&nbsp;Delphi&nbsp;Wizard&nbsp;that&nbsp;is&nbsp;able&nbsp;to&nbsp;communicate&nbsp;with&nbsp;&nbsp;<br>
Delphi&nbsp;in&nbsp;the&nbsp;same&nbsp;way.&nbsp;Could&nbsp;we&nbsp;actually&nbsp;write&nbsp;an&nbsp;Wizard&nbsp;that&nbsp;also&nbsp;opens&nbsp;&nbsp;<br>
files&nbsp;in&nbsp;the&nbsp;IDE,&nbsp;that&nbsp;can&nbsp;be&nbsp;used&nbsp;to&nbsp;start&nbsp;a&nbsp;new&nbsp;project&nbsp;from&nbsp;scratch?&nbsp;Yes,&nbsp;all&nbsp;this&nbsp;is&nbsp;possible,&nbsp;and&nbsp;more,&nbsp;as&nbsp;we&nbsp;will&nbsp;see&nbsp;&nbsp;<br>
shortly!&nbsp; &nbsp;<br>
&nbsp;<br>
1.&nbsp;TIExpert&nbsp;Interface &nbsp;<br>
The&nbsp;major&nbsp;reason&nbsp;why&nbsp;everybody&nbsp;thinks&nbsp;writing&nbsp;custom&nbsp;Wizards&nbsp;is&nbsp;difficult,&nbsp;is&nbsp;&nbsp;<br>
because&nbsp;they&nbsp;are&nbsp;not&nbsp;documented.&nbsp;Not&nbsp;in&nbsp;the&nbsp;manuals&nbsp;or&nbsp;on-line&nbsp;Help,&nbsp;that&nbsp;is&nbsp;&nbsp;<br>
(they&nbsp;are&nbsp;documented&nbsp;in&nbsp;my&nbsp;book&nbsp;The&nbsp;Revolutionary&nbsp;Guide&nbsp;to&nbsp;Delphi&nbsp;2&nbsp;and&nbsp;in&nbsp;my&nbsp;&nbsp;<br>
column&nbsp;in&nbsp;The&nbsp;Delphi&nbsp;Magazine).&nbsp;If&nbsp;you&nbsp;take&nbsp;a&nbsp;look&nbsp;at&nbsp;the&nbsp;documentation&nbsp;and&nbsp;&nbsp;<br>
source&nbsp;code&nbsp;on&nbsp;your&nbsp;harddisk,&nbsp;you'll&nbsp;find&nbsp;some&nbsp;important&nbsp;files&nbsp;and&nbsp;even&nbsp;two&nbsp;&nbsp;<br>
example&nbsp;Wizards&nbsp;that&nbsp;are&nbsp;installed&nbsp;automatically&nbsp;by&nbsp;Delphi&nbsp;itself.&nbsp;The&nbsp;&nbsp;<br>
important&nbsp;example&nbsp;files&nbsp;can&nbsp;be&nbsp;found&nbsp;in&nbsp;the&nbsp;DOC,&nbsp;SOURCE\VCL&nbsp;or&nbsp;&nbsp;<br>
SOURCE\TOOLSAPI&nbsp;subdirectories,&nbsp;and&nbsp;the&nbsp;main&nbsp;files&nbsp;are&nbsp;EXPTINTF.PAS,&nbsp;&nbsp;<br>
TOOLINTF.PAS,&nbsp;VIRTINTF.PAS&nbsp;and&nbsp;SHAREMEM.PAS.&nbsp;The&nbsp;first&nbsp;one&nbsp;shows&nbsp;how&nbsp;to&nbsp;&nbsp;<br>
derive&nbsp;and&nbsp;register&nbsp;our&nbsp;own&nbsp;Wizard,&nbsp;while&nbsp;the&nbsp;second&nbsp;one&nbsp;shows&nbsp;how&nbsp;to&nbsp;use&nbsp;the&nbsp;&nbsp;<br>
tool-services&nbsp;of&nbsp;Delphi&nbsp;to&nbsp;make&nbsp;the&nbsp;integration&nbsp;with&nbsp;the&nbsp;IDE&nbsp;complete. 
&nbsp;&nbsp; &nbsp;<br>
&nbsp;<br>
In&nbsp;order&nbsp;to&nbsp;start&nbsp;working&nbsp;on&nbsp;a&nbsp;custom&nbsp;wizard,&nbsp;we&nbsp;have&nbsp;to&nbsp;take&nbsp;a&nbsp;look&nbsp;at&nbsp;the&nbsp;&nbsp;<br>
abstract&nbsp;base&nbsp;class&nbsp;definition&nbsp;TIExpert&nbsp;in&nbsp;EXPTINTF.PAS,&nbsp;which&nbsp;is&nbsp;as&nbsp;follows&nbsp;&nbsp;<br>
for&nbsp;the&nbsp;32-bits&nbsp;versions&nbsp;of&nbsp;Delphi:&nbsp; &nbsp;<br>
&nbsp;<br>
&nbsp;<br>
Type &nbsp;<br>
&nbsp;&nbsp;TExpertStyle&nbsp;=&nbsp;(esStandard,&nbsp;esForm,&nbsp;esProject,&nbsp;esAddIn); 
&nbsp;<br>
&nbsp;&nbsp;TExpertState&nbsp;=&nbsp;set&nbsp;of&nbsp;(esEnabled,&nbsp;esChecked); &nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;TIExpert&nbsp;=&nbsp;class(TInterface) &nbsp;<br>
&nbsp;&nbsp;public &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Expert&nbsp;UI&nbsp;strings&nbsp;} &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetIDString:&nbsp;string;&nbsp;virtual;&nbsp;stdcall;&nbsp;abstract; 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetName:&nbsp;string;&nbsp;virtual;&nbsp;stdcall;&nbsp;abstract; 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetAuthor:&nbsp;string;&nbsp;virtual;&nbsp;stdcall;&nbsp;abstract; 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetStyle:&nbsp;TExpertStyle;&nbsp;virtual;&nbsp;stdcall;&nbsp;abstract; 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetMenuText:&nbsp;string;&nbsp;virtual;&nbsp;stdcall;&nbsp;abstract; 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetState:&nbsp;TExpertState;&nbsp;virtual;&nbsp;stdcall;&nbsp;abstract; 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetGlyph:&nbsp;HICON;&nbsp;virtual;&nbsp;stdcall;&nbsp;abstract; 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetComment:&nbsp;string;&nbsp;virtual;&nbsp;stdcall;&nbsp;abstract; 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetPage:&nbsp;string;&nbsp;virtual;&nbsp;stdcall;&nbsp;abstract; 
&nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Launch&nbsp;the&nbsp;Expert&nbsp;} &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;Execute;&nbsp;virtual;&nbsp;stdcall;&nbsp;abstract; 
&nbsp;<br>
&nbsp;&nbsp;end; &nbsp;<br>
&nbsp;<br>
2.&nbsp;TGenericExpert:&nbsp;Hello,&nbsp;World! &nbsp;<br>
If&nbsp;we&nbsp;want&nbsp;to&nbsp;derive&nbsp;our&nbsp;own&nbsp;Wizard,&nbsp;say&nbsp;TGenericExpert,&nbsp;we&nbsp;have&nbsp;to&nbsp;derive&nbsp;it&nbsp;&nbsp;<br>
from&nbsp;the&nbsp;abstract&nbsp;base&nbsp;class&nbsp;TIExpert,&nbsp;which&nbsp;has&nbsp;seven&nbsp;or&nbsp;nine&nbsp;abstract&nbsp;&nbsp;<br>
member&nbsp;functions&nbsp;(GetStyle,&nbsp;GetName,&nbsp;GetComment,&nbsp;GetGlyph,&nbsp;GetState,&nbsp;&nbsp;<br>
GetIDString&nbsp;and&nbsp;GetMenuText,&nbsp;and&nbsp;for&nbsp;the&nbsp;32-bits&nbsp;versions&nbsp;of&nbsp;Delphi&nbsp;also&nbsp;&nbsp;<br>
GetAuthor&nbsp;and&nbsp;GetPage)&nbsp;and&nbsp;one&nbsp;member&nbsp;procedure&nbsp;Execute.&nbsp;Since&nbsp;TIExpert&nbsp;is&nbsp;an&nbsp;&nbsp;<br>
abstract&nbsp;base&nbsp;class,&nbsp;we&nbsp;need&nbsp;to&nbsp;override&nbsp;every&nbsp;function&nbsp;we&nbsp;need&nbsp;for&nbsp;any&nbsp;&nbsp;<br>
particular&nbsp;Wizard.&nbsp; &nbsp;<br>
&nbsp;<br>
&nbsp;<br>
unit&nbsp;Generic; &nbsp;<br>
interface &nbsp;<br>
uses &nbsp;<br>
&nbsp;&nbsp;Windows,&nbsp;ExptIntf; &nbsp;<br>
&nbsp;<br>
Type &nbsp;<br>
&nbsp;&nbsp;TGenericExpert&nbsp;=&nbsp;class(TIExpert) &nbsp;<br>
&nbsp;&nbsp;public &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Expert&nbsp;Style&nbsp;} &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetStyle:&nbsp;TExpertStyle;&nbsp;override; &nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Expert&nbsp;Strings&nbsp;} &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetIDString:&nbsp;string;&nbsp;override; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetName:&nbsp;string;&nbsp;override; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetAuthor:&nbsp;string;&nbsp;override; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetMenuText:&nbsp;string;&nbsp;override; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetState:&nbsp;TExpertState;&nbsp;override; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetGlyph:&nbsp;HICON;&nbsp;override; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetComment:&nbsp;string;&nbsp;override; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetPage:&nbsp;string;&nbsp;override; &nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Expert&nbsp;Action&nbsp;} &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;Execute;&nbsp;override; &nbsp;<br>
&nbsp;&nbsp;end; &nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;procedure&nbsp;Register; &nbsp;<br>
&nbsp;<br>
implementation &nbsp;<br>
uses &nbsp;<br>
&nbsp;&nbsp;Dialogs; &nbsp;<br>
&nbsp;<br>
{&nbsp;The&nbsp;implementation&nbsp;details&nbsp;of&nbsp;TGenericExpert&nbsp;will&nbsp;follow&nbsp;in&nbsp;the&nbsp;text&nbsp;} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -