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

📄 wizards_3.htm

📁 对于学习很有帮助
💻 HTM
📖 第 1 页 / 共 2 页
字号:
EnumProjectUnits &nbsp;<br>
Calls&nbsp;EnumProc&nbsp;once&nbsp;for&nbsp;each&nbsp;unit&nbsp;in&nbsp;the&nbsp;project.&nbsp; 
&nbsp;<br>
Editor&nbsp; &nbsp;<br>
&nbsp;<br>
GetModuleInterface &nbsp;<br>
Return&nbsp;an&nbsp;module&nbsp;interface&nbsp;associated&nbsp;with&nbsp;the&nbsp;given&nbsp;file.&nbsp;This&nbsp;function&nbsp;&nbsp;<br>
returns&nbsp;the&nbsp;same&nbsp;interface&nbsp;instance&nbsp;for&nbsp;a&nbsp;given&nbsp;module,&nbsp;only&nbsp;the&nbsp;reference&nbsp;&nbsp;<br>
count&nbsp;is&nbsp;adjusted.&nbsp;The&nbsp;user&nbsp;of&nbsp;this&nbsp;interface&nbsp;owns&nbsp;it&nbsp;and&nbsp;must&nbsp;call&nbsp;release&nbsp;&nbsp;<br>
when&nbsp;finished.&nbsp; &nbsp;<br>
GetFormModuleInterface &nbsp;<br>
returns&nbsp;an&nbsp;module&nbsp;interface&nbsp;associated&nbsp;with&nbsp;the&nbsp;given&nbsp;form.&nbsp; 
&nbsp;<br>
Menu&nbsp; &nbsp;<br>
&nbsp;<br>
GetMainMenu &nbsp;<br>
Returns&nbsp;an&nbsp;interface&nbsp;to&nbsp;the&nbsp;IDE's&nbsp;main&nbsp;menu.&nbsp;See&nbsp;TIMainMenuIntf&nbsp;for&nbsp;details.&nbsp;&nbsp;<br>
&nbsp;<br>
Notification&nbsp; &nbsp;<br>
&nbsp;<br>
AddNotifier &nbsp;<br>
Registers&nbsp;an&nbsp;instance&nbsp;of&nbsp;a&nbsp;descendant&nbsp;to&nbsp;TIAddIn-&nbsp;Notifier.&nbsp; 
&nbsp;<br>
RemoveNotifier &nbsp;<br>
Removes&nbsp;a&nbsp;registered&nbsp;instance&nbsp;of&nbsp;a&nbsp;TIAddInNotifier.&nbsp; 
&nbsp;<br>
Configuration&nbsp;Access&nbsp; &nbsp;<br>
&nbsp;<br>
GetBaseRegistryKey &nbsp;<br>
returns&nbsp;a&nbsp;string&nbsp;representing&nbsp;the&nbsp;full&nbsp;path&nbsp;to&nbsp;Delphi's&nbsp;base&nbsp;registry&nbsp;key.&nbsp;&nbsp;<br>
This&nbsp;key&nbsp;is&nbsp;relative&nbsp;to&nbsp;HKEY_CURRENT_USER.&nbsp; &nbsp;<br>
Virtual&nbsp;File&nbsp;System&nbsp; &nbsp;<br>
&nbsp;<br>
The&nbsp;RegisterFileSystem&nbsp;and&nbsp;UnRegisterFileSystem&nbsp;methods&nbsp;seem&nbsp;to&nbsp;be&nbsp;present&nbsp;to&nbsp;&nbsp;<br>
prepare&nbsp;for&nbsp;future&nbsp;porting&nbsp;and&nbsp;operating/filesystem&nbsp;specific&nbsp;issues.&nbsp;Nice&nbsp;to&nbsp;&nbsp;<br>
know&nbsp;Borland&nbsp;is&nbsp;working&nbsp;on&nbsp;that&nbsp;as&nbsp;well!&nbsp; &nbsp;<br>
Pascal&nbsp;String&nbsp;Handling&nbsp; &nbsp;<br>
&nbsp;<br>
The&nbsp;Pascal&nbsp;string&nbsp;handling&nbsp;functions&nbsp;are&nbsp;provided&nbsp;for&nbsp;IDE&nbsp;add-in&nbsp;writers&nbsp;to&nbsp;&nbsp;<br>
use&nbsp;a&nbsp;language&nbsp;other&nbsp;than&nbsp;Pascal.&nbsp;(C&nbsp;or&nbsp;C++,&nbsp;for&nbsp;example).&nbsp;Add-in&nbsp;writers&nbsp;&nbsp;<br>
using&nbsp;Delphi&nbsp;will&nbsp;never&nbsp;need&nbsp;to&nbsp;use&nbsp;these&nbsp;functions,&nbsp;but&nbsp;we'll&nbsp;focus&nbsp;on&nbsp;them&nbsp;&nbsp;<br>
for&nbsp;the&nbsp;sake&nbsp;of&nbsp;completeness:&nbsp; &nbsp;<br>
NewPascalString:&nbsp;Allocates&nbsp;and&nbsp;returns&nbsp;a&nbsp;pascal&nbsp;long&nbsp;string&nbsp;from&nbsp;the&nbsp;provided&nbsp;&nbsp;<br>
PChar&nbsp;(char*,&nbsp;in&nbsp;C).&nbsp;Passing&nbsp;an&nbsp;empty&nbsp;string&nbsp;or&nbsp;nil&nbsp;for&nbsp;the&nbsp;PChar&nbsp;will&nbsp;return&nbsp;&nbsp;<br>
nil&nbsp;for&nbsp;the&nbsp;string&nbsp;(Pascal's&nbsp;equivalent&nbsp;of&nbsp;an&nbsp;empty&nbsp;string).&nbsp; 
&nbsp;<br>
FreePascalString:&nbsp;Attempts&nbsp;to&nbsp;free&nbsp;the&nbsp;given&nbsp;Pascal&nbsp;string&nbsp;by&nbsp;decrementing&nbsp;&nbsp;<br>
the&nbsp;internal&nbsp;reference&nbsp;count&nbsp;and&nbsp;releasing&nbsp;the&nbsp;memory&nbsp;if&nbsp;the&nbsp;count&nbsp;returns&nbsp;to&nbsp;&nbsp;<br>
zero.&nbsp; &nbsp;<br>
ReferencePascalString:&nbsp;Increments&nbsp;the&nbsp;reference&nbsp;count&nbsp;of&nbsp;the&nbsp;given&nbsp;Pascal&nbsp;&nbsp;<br>
string.&nbsp;This&nbsp;allows&nbsp;the&nbsp;calling&nbsp;function&nbsp;to&nbsp;manually&nbsp;extend&nbsp;the&nbsp;lifetime&nbsp;of&nbsp;&nbsp;<br>
the&nbsp;string.&nbsp;A&nbsp;corresponding&nbsp;call&nbsp;to&nbsp;FreePascalString&nbsp;must&nbsp;be&nbsp;made&nbsp;in&nbsp;order&nbsp;to&nbsp;&nbsp;<br>
actually&nbsp;release&nbsp;the&nbsp;string's&nbsp;memory.&nbsp; &nbsp;<br>
AssignPascalString:&nbsp;Assigns&nbsp;one&nbsp;Pascal&nbsp;string&nbsp;to&nbsp;another.&nbsp;Never&nbsp;directly&nbsp;&nbsp;<br>
assign&nbsp;Pascal&nbsp;strings&nbsp;to&nbsp;each&nbsp;other.&nbsp;Doing&nbsp;so&nbsp;will&nbsp;orphan&nbsp;memory&nbsp;and&nbsp;cause&nbsp;a&nbsp;&nbsp;<br>
memory&nbsp;leak.&nbsp;The&nbsp;destination&nbsp;may&nbsp;be&nbsp;referencing&nbsp;another&nbsp;string,&nbsp;so&nbsp;the&nbsp;&nbsp;<br>
reference&nbsp;count&nbsp;of&nbsp;that&nbsp;string&nbsp;must&nbsp;be&nbsp;decremented.&nbsp;Likewise,&nbsp;the&nbsp;reference&nbsp;&nbsp;<br>
count&nbsp;of&nbsp;the&nbsp;source&nbsp;string&nbsp;must&nbsp;be&nbsp;incremented.&nbsp; 
&nbsp;<br>
5.&nbsp;TFileOpenDialogExpert &nbsp;<br>
Well,&nbsp;with&nbsp;the&nbsp;TIToolServices&nbsp;class&nbsp;we&nbsp;sure&nbsp;have&nbsp;a&nbsp;lot&nbsp;of&nbsp;information&nbsp;and&nbsp;&nbsp;<br>
power&nbsp;at&nbsp;our&nbsp;disposal,&nbsp;don't&nbsp;we!?&nbsp;Let's&nbsp;try&nbsp;to&nbsp;do&nbsp;something&nbsp;easy&nbsp;that&nbsp;doesn't&nbsp;&nbsp;<br>
get&nbsp;us&nbsp;into&nbsp;trouble&nbsp;right&nbsp;away.&nbsp;The&nbsp;API&nbsp;that&nbsp;I'm&nbsp;looking&nbsp;for&nbsp;that&nbsp;will&nbsp;allow&nbsp;&nbsp;<br>
me&nbsp;to&nbsp;open&nbsp;any&nbsp;file&nbsp;as&nbsp;a&nbsp;new&nbsp;project&nbsp;seems&nbsp;to&nbsp;be&nbsp;OpenProject,&nbsp;which&nbsp;takes&nbsp;a&nbsp;&nbsp;<br>
fully&nbsp;qualified&nbsp;filename&nbsp;as&nbsp;only&nbsp;argument.&nbsp; &nbsp;<br>
&nbsp;<br>
The&nbsp;engine&nbsp;for&nbsp;the&nbsp;first&nbsp;version&nbsp;of&nbsp;the&nbsp;TFileOpenExpert&nbsp;is&nbsp;as&nbsp;follows:&nbsp; 
&nbsp;<br>
&nbsp;<br>
&nbsp;<br>
TFileOpenExpert&nbsp; &nbsp;<br>
GetStyle:&nbsp;esStandard&nbsp; &nbsp;<br>
GetIDString:&nbsp;DrBob.TFileOpenExpert.standard&nbsp; &nbsp;<br>
GetName:&nbsp;FileOpen&nbsp;Wizard&nbsp; &nbsp;<br>
GetAuthor&nbsp;(win32):&nbsp;Bob&nbsp;Swart&nbsp;(aka&nbsp;Dr.Bob)&nbsp; &nbsp;<br>
GetMenuText:&nbsp;&amp;FileOpen&nbsp;Wizard...&nbsp; &nbsp;<br>
GetState:&nbsp;[esEnabled]&nbsp; &nbsp;<br>
GetGlyph:&nbsp;0&nbsp; &nbsp;<br>
GetPage&nbsp;(win32):&nbsp;&nbsp;&nbsp; &nbsp;<br>
GetComment:&nbsp;&nbsp;&nbsp; &nbsp;<br>
&nbsp;<br>
So,&nbsp;all&nbsp;we&nbsp;need&nbsp;to&nbsp;do&nbsp;in&nbsp;the&nbsp;Execute&nbsp;procedure,&nbsp;is&nbsp;somehow&nbsp;get&nbsp;the&nbsp;fully&nbsp;&nbsp;<br>
qualified&nbsp;filename,&nbsp;and&nbsp;call&nbsp;ToolServices.OpenProject&nbsp;with&nbsp;it.&nbsp;The&nbsp;easiest&nbsp;&nbsp;<br>
way&nbsp;seems&nbsp;to&nbsp;be&nbsp;using&nbsp;a&nbsp;TOpenDialog,&nbsp;which&nbsp;we&nbsp;can&nbsp;create&nbsp;and&nbsp;execute&nbsp;on&nbsp;the&nbsp;&nbsp;<br>
fly,&nbsp;so&nbsp;the&nbsp;code&nbsp;of&nbsp;Execute&nbsp;looks&nbsp;as&nbsp;follows&nbsp;now:&nbsp; 
&nbsp;<br>
&nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;procedure&nbsp;TFileOpenExpert.Execute; &nbsp;<br>
&nbsp;&nbsp;begin &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;TOpenDialog.Create(nil)&nbsp;do &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Execute&nbsp;then &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ToolServices.OpenProject(FileName); &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Free &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;<br>
&nbsp;&nbsp;end&nbsp;{Execute}; &nbsp;<br>
&nbsp;<br>
Well,&nbsp;it's&nbsp;almost&nbsp;what&nbsp;we&nbsp;want.&nbsp;We&nbsp;forgot&nbsp;to&nbsp;initialise&nbsp;the&nbsp;filter&nbsp;of&nbsp;the&nbsp;&nbsp;<br>
TOpenDialog,&nbsp;so&nbsp;we&nbsp;need&nbsp;to&nbsp;do&nbsp;that&nbsp;as&nbsp;well.&nbsp;Other&nbsp;than&nbsp;that,&nbsp;we&nbsp;can&nbsp;indeed&nbsp;&nbsp;<br>
open&nbsp;up&nbsp;new&nbsp;projects,&nbsp;but&nbsp;we&nbsp;don't&nbsp;close&nbsp;the&nbsp;files&nbsp;of&nbsp;any&nbsp;previous&nbsp;projects&nbsp;&nbsp;<br>
that&nbsp;were&nbsp;loaded.&nbsp;So,&nbsp;we&nbsp;need&nbsp;to&nbsp;call&nbsp;SaveProject&nbsp;and&nbsp;CloseProject&nbsp;prior&nbsp;to&nbsp;&nbsp;<br>
calling&nbsp;our&nbsp;OpenProject.&nbsp; &nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;procedure&nbsp;TFileOpenExpert.Execute; &nbsp;<br>
&nbsp;&nbsp;begin &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;TOpenDialog.Create(nil)&nbsp;do &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Title&nbsp;:=&nbsp;GetName;&nbsp;{&nbsp;name&nbsp;of&nbsp;Wizard&nbsp;as&nbsp;OpenDialog&nbsp;caption&nbsp;} 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filter&nbsp;:=&nbsp;'All&nbsp;Files&nbsp;(*.*)|*.*'; 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;+&nbsp;[ofShowHelp,&nbsp;ofPathMustExist,&nbsp;ofFileMustExist]; 
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelpContext&nbsp;:=&nbsp;0; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Execute&nbsp;then &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ToolServices.SaveProject; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ToolServices.CloseProject; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ToolServices.OpenProject(FileName) &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Free &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;<br>
&nbsp;&nbsp;end&nbsp;{Execute}; &nbsp;<br>
</p>
</body>
</html>

⌨️ 快捷键说明

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