Delphi 包的应用英文Word文件下载.docx
- 文档编号:1392453
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:15
- 大小:41.15KB
Delphi 包的应用英文Word文件下载.docx
《Delphi 包的应用英文Word文件下载.docx》由会员分享,可在线阅读,更多相关《Delphi 包的应用英文Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。
3.DropabuttononForm1andaddthefollowingcodetotheOnClickeventhandler:
4.withTForm2.Create(Application)do
5.begin
6.ShowModal;
7.Free;
end;
8.RemembertoaddUnit2toUnit1'
susesclause.
9.Saveandruntheproject.
Wehavecreatedasimpleapplicationthatshowsaformwithabuttonthatshowsanotherformwhenitisclicked.
ButwhatifwewantedtocreateForm2inareusablemodule?
Theansweris--PACKAGES!
TocreateapackageforForm2wewill:
1.Opentheprojectmanager(View|ProjectManager)
2.Right-clickontheProjectGroupandselect"
AddNewProject..."
3.Select"
Package"
fromthe"
New"
itemslist.
4.YoushouldnowseethePackageeditor.
5.Selectthe"
Contains"
itemandpressthe"
Add"
button.
6.Nowusethe"
Browse..."
buttontoselect"
Unit2.pas."
7.Thepackageshouldnowcontaintheunit"
8.Nowsaveandcompilethepackage.
Thepackageisnowcomplete.Youshouldhaveafilecalled"
package1.bpl"
inyourProjectsBPLdirectory.(TheBPListheBorlandPackageLibrary;
theDCPistheDelphiCompiledPackage--sortofliketheDCUofaPASfile.)
That'
sallthatneedtobedonetothepackage.Wenowneedtocompiletheoriginalapplicationwiththepackageoptionswitchedon.
1.Selecttheproject"
Project1.exe"
fromtheProjectManagerbydouble-clickingonit.
2.Right-clickandselect"
Options..."
(YoucanalsoselectProject|Options...fromthemenu.
3.Selectthe"
Packages"
tab.
4.Checkthe"
Buildwithruntimepackages"
checkbox.
5.Edittheedit-boxinthe"
Runtimepackages"
sectiontoread:
"
Vcl50;
Package1"
andOKtheoptions.
6.NOTE:
DonotremoveUnit2fromtheapplication.
7.Saveandruntheapplication.
Theapplicationwillrunandbehavejustlikebefore--thedifferencecanbeseeninthefilesize.Project1.exeisnowonly14Kasapposedtotheoriginal293K.IfyouusearesourceexplorertoviewthecontentsoftheEXEandtheBPLyouwillfindthatboththeDFMandthecodeforForm2nowresideinthepackage.
Delphiachievesthisbystaticallylinkinginthepackageatcompiletime.(That'
swhyyoushouldn'
tremovetheunitfromtheEXEproject.)
Justthinkofwhatcanbeachievedbydoingthis:
Onecouldcreatedatamodulesinpackagesandquicklymodifytheirsourceandonlydistributethenewpackagewhenourdata-accessruleshavechanged,likewhenwemovefromBDEbasedconnectivitytoADO.Or,wecouldcreateafromthatshow'
sa"
thisoptionisnotavailableinthisversion"
messageinonepackage,andthenasimilarlynamedformthathasfunctionalityinasame-namedpackage.Wewillthenhavea"
Pro"
and"
Enterprise"
versionofourproductwithoutmucheffort.
Dynamicloadandunloadofpackages
StaticallylinkedDLLsandBPLsworkfineinmostcases,butwhatifwedecidenottodeploytheBPL?
Wewouldgeta"
ThedynamiclinklibraryPackage1.bplcouldnotbefoundinthespecifiedpath..."
errorandourapplicationwouldstopfunctioning.Orwhatif,inourmodularapplication,wewantedtohavenumerousplug-inlikemodules?
WeneedawaytodynamicallylinktotheBPLatruntime.
WithDLLsthisisasimpleprocessofusingtheLoadLibraryfunction.
functionLoadLibrary(
lpLibFileName:
PChar):
HMODULE;
stdcall;
OncetheDLLisloadedwecancallexportedfunctionsandprocedureswithintheDLLbyusingtheGetProcAddressfunction.
functionGetProcAddress(hModule:
lpProcName:
LPCSTR):
FARPROC;
WefinallyunloadthedllbyusingtheFreeLibraryfunction.
functionFreeLibrary(hLibModule:
HMODULE):
BOOL;
InthisexamplewewilldynamicallyloadMicrosoft'
sHtmlHelplibrary:
functionTForm1.ApplicationEvents1Help(
Command:
Word;
Data:
Integer;
varCallHelp:
Boolean):
Boolean;
type
TFNHtmlHelpA=function(hwndCaller:
HWND;
pszFile:
PAnsiChar;
uCommand:
UINT;
dwData:
DWORD):
var
HelpModule:
HModule;
HtmlHelp:
TFNHtmlHelpA;
begin
Result:
=False;
HelpModule:
=LoadLibrary('
HHCTRL.OCX'
);
ifHelpModule<
>
0then
begin
@HtmlHelp:
=GetProcAddress(HelpModule,
'
HtmlHelpA'
if@HtmlHelp<
nilthen
=HtmlHelp(Application.Handle,
PChar(Application.HelpFile),
Command,
Data)<
0;
FreeLibrary(HelpModule);
end;
CallHelp:
DynamicallyloadedBPLs
BPLsarejustassimple.Wellalmost.
WedynamicallyloadthepackagebyusingtheLoadPackagefunction.
functionLoadPackage(constName:
string):
WecreateTPersistentClassoftheclasswewishtoinstantiatebyusingtheGetClassfunction.
functionGetClass(constAClassName:
TPersistentClass;
Instantiateanobjectoftheloadedclassanduseit.
Andwhenwearedone,unloadthepackageusingtheUnloadPackageprocedure.
procedureUnloadPackage(Module:
HMODULE);
Letusgobacktoourexampleandmakeafewchanges:
1.Select"
fromtheprojectmanager.
4.Remove"
edit-boxsectionandOKtheoptions.
5.OnDelphi'
stoolbar,clickonthe"
Removefilefromproject"
6.Select"
Unit2|Form2"
fromthelistandthen"
OK."
7.Nowgotothe"
Unit1.pas"
sourceandremoveUnit2fromitsusesclause.(ThesestepsarerequiredtoremoveanylinktoUnit2andthepackagewewishtoloaddynamically.)
8.GotothesourceofButton1'
sOnClickevent.
9.AddtwovariablesoftypeHModuleandTPersistentClass.
10.var
11.PackageModule:
AClass:
12.LoadthepackagePackage1byusingtheLoadPackagefunction.
PackageModule:
=LoadPackage('
Package1.bpl'
13.CheckthatthePackageModuleisnot0(zero).
14.CreateapersistentclassusingtheGetClassfunction,passingitthenameoftheformwithinthepackageasitsparameter:
AClass:
=GetClass('
TForm2'
15.Ifthepersistentclassisnotnil,createanduseaninstanceoftheclassjustabefore.
16.withTComponentClass(AClass).Create(Application)
17.asTCustomFormdo
18.begin
19.ShowModal;
20.Free;
21.Finally,unloadthepackageusingtheUnloadPackageprocedure:
UnloadPackage(PackageModule);
22.Savetheproject.
HereisthecompletelistingoftheOnClickevent:
procedureTForm1.Button1Click(Sender:
TObject);
PackageModule:
ifPackageModule<
ifAClass<
withTComponentClass(AClass).Create(Application)
asTCustomFormdo
ShowModal;
Free;
Unfortunatelythat'
snottheendofit.
TheproblemisthattheGetClassfunctionrequirestheclasstoberegisteredbeforethefunctioncanfindit.Usuallyformclassesandcomponentclassesthatarereferencedinaformdeclaration(instancevariables)areautomaticallyregisteredwhentheformisloaded.Buttheformisn'
tloadedyet.Sowhereshouldweregistertheclass?
Theanswer:
inthepackage.Eachunitinthepackageisinitializedwhenthepackageisloadedandfinalizedwhenthepackageisunloaded.
Let'
sreturntoourexampleandmakeafewchanges:
1.Double-clickon"
Package1.bpl"
intheprojectmanager;
thiswillactivatethepackageeditor.
2.Clickonthe+symbolnextto"
Unit2"
inthe"
section.Thiswillexpandtheunittree.
3.Double-clickon"
Unit2.pas"
toactivatetheunit'
ssourcecode.
4.Scrolldowntotheendofthefileandaddaninitializationsection.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 包的应用英文 应用 英文