compfaq Delphi 元件撰写常问问题.docx

上传人:p** 文档编号:1022591 上传时间:2024-06-15 格式:DOCX 页数:25 大小:45.28KB
下载 相关 举报
compfaq Delphi 元件撰写常问问题.docx_第1页
第1页 / 共25页
compfaq Delphi 元件撰写常问问题.docx_第2页
第2页 / 共25页
compfaq Delphi 元件撰写常问问题.docx_第3页
第3页 / 共25页
compfaq Delphi 元件撰写常问问题.docx_第4页
第4页 / 共25页
compfaq Delphi 元件撰写常问问题.docx_第5页
第5页 / 共25页
compfaq Delphi 元件撰写常问问题.docx_第6页
第6页 / 共25页
compfaq Delphi 元件撰写常问问题.docx_第7页
第7页 / 共25页
compfaq Delphi 元件撰写常问问题.docx_第8页
第8页 / 共25页
compfaq Delphi 元件撰写常问问题.docx_第9页
第9页 / 共25页
compfaq Delphi 元件撰写常问问题.docx_第10页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《compfaq Delphi 元件撰写常问问题.docx》由会员分享,可在线阅读,更多相关《compfaq Delphi 元件撰写常问问题.docx(25页珍藏版)》请在第壹文秘上搜索。

1、WolfgangChien,sHomepageDelphi学习笔记-典藏篇Delphi元件撰写常问问题版本:5译者:陈宽达原作者:JohnM.MianOCopyright1996-JohnMiano协助:GlenBoydStefanHoffmeisterRayKonopkaRay1.ischnerMaxNilson最近修改日期:1997年1月1日最近修改章节:6.1译稿更新日期1997年3月3日目次第一部分简介 1.l此份文件的目的为何?第二部份合环境 2.1在合环境中如何找出元件所产生的问题? 2.2如何检视DeIPhi所产生的组合语言码? 2.3我可以在执行时期动态建立元件,但在设计时期就

2、会发生错误。为什麽? 2.4如何撰写一个无法放置到表格上的元件? 2.5在程式码编辑器中快速切换程式区段最简单的方法是什麽? 2.6如何使我的元件在按下滑鼠右键时出现快速功能选单? 2.7为什麽元件在设计时期会出现I/O103的错误? 2.8为什麽元件编辑器不会将元件属性的变动储存起来?第三部分在元件中使用其它元件 3.1如何在元件中加入卷轴元件并让它在设计时期能动作? 3.2如何建立Windovs95式样的卷轴?第四部分BoundControls 4.1哪里可以找得到有关TData1.ink类别的说明文件? 4.2如何得知个dataset中有几笔记录?第五部分VC1. 5.1使用“合环境除错

3、时如何追踪检视VC1.元件的程式码? 5.2我的元件参考到其它元件,如何得到参考元件被消灭的讯息? 5.3什麽是元件讯息? 5.4我的元件得到输入焦点彳菱仍不能接受键盘讯息,为什麽?第六部分其它资讯 6.1有哪些书介绍或讲解如何撰写元件? 6.2有哪些Web站台可以取得撰写元件的资讯?第七部分元件的储存与载入 7.1如何将包含其它物件的物件一起存入DFM档? 7.2如何得知元件是否正从资料流中读出? 7.3如何确定元件的屈性是否被正确地储存?第八部分工具程式 8.1有没有DelPhi版本的YACC及1.EX? 8.2如何秀出JPEG格式图形档?第九部分基本程式设计技巧 9.1如何建立不定数目的

4、物件阵列? 9.2DeIPhi2.O的WinCrt单元到哪去了? 9.3自制元件时该从哪个类别继承?第十部分进阶程式设计技巧 10.1DeIPhi有与C+样的I/OSlream类别吗? 10.2如何取得列举型态变数的文字表示?第十一部分元件虚拟方法 11.1如何得知元件的WineIowhandle是何时建立的? 11.2如何得知是否表格上所有元件都已载入完成? 11.3在哪里绘制元件最适合? 11.4如何改变元件的视窗式样?第十二部分WindowsAPI 12.1元件卷动时闪动的很厉害,如何克服这种情况?.12.2如何重新启动WindOWs? 12.3如何快速大量地更改元件资料?第十三部分控制

5、项边框 13.1为什麽我的元件的Ctl3D属性设为TrUe之彳及,它依然没有3D的边框呢? 13.2如何实作BOrderStyIe屈性?第十四部分控制项式样 14.1当元件重绘时如何防止闪动的情况?第十五部分视窗讯息 15.1为什麽我的元件得不到方向键的讯息? 15.2有没有与ViSUalBaSiCDoEventsJI同样功能的函式?第一部分简介1.1此份文件的目的为何?这份文件的目的是为了解答有关撰写Delphi元件时常见或文件上找不到的问题。我曾经花了一段很长的时间来了解探索TData1.ink类别,这让我觉得应该将撰写元件时常遇到的问题及经验心得写下来,分享给大家。不过我并不能保证写在这

6、份文件里头的解答完全正确。如果你对其中的任何问题有更好的解决方法,或认为有什麽资讯适合放在这份文件里的话,请告知作者。有任何错误或缺漏也欢迎指正。除了再加上更多的问题及解答外,我试著再补充两个部分:1 .进阶程式设计师喜爱的工具:这也许跟元件设计没有直接的关系但至少它们跟DeIPhi有关系。2 .值得参考的文件刊物:由於空间的关系,这份文件不能放置太多的范例程式,因此参考其它文件是十分需要的。这不是一份教材式的文件,我不会做太多条理式的说明,但会试著将最具有参考价值的文献列出。如果你有任何意见或建,欢迎来信告诉我。第二部份合环境2.1 在合环境中如何找出元件所产生的问题?我发现唯一能找出问题的

7、方法只有:1 .在DelPhi”合环境的ToolslOptions对话框的1.ibrary页中将(Compilewithdebuginfoj选项打勾。2 .选ComponentRebuild1.ibrary重新编译元件库。3 .从TurboDebugger中执行Delphio4 .选FilelChangeDir移至包含元件程式码的目录下。如果你的元件发生GPF时就可以检视堆叠然彳爰得知到底是哪些发生问题了。2.2 如何检视Delphi所产生的组合语言码?GlenBoyd的回答:开启登录编辑程式(REGEDn.EXE),接著到HKEY_CURRENT_USERSoftwareBorlandDel

8、phi2.ODebugging下新届一个字电机码EnableCPU,将它的字串值设为11J0此彳菱DeIPhi合环境的View选单下就会多一个CPU选项,它会开启一个视窗来检视目前程式指令的记忆体及组合语言。你可以在侦错时利用单步追踪或其它方法来观察它。2.3 我可以在执行时期动态建立元件,但在设计时期就会发生错误。为什麽?5 .你的元件必须继承自TCOmPOnent类别或其衍生类别。6 .你的元件建构函式及灭构函式宣告必须看起来像这样:constructorCreate(AOwner:TComponent);override;destructorDestroy;override;7 .所有在

9、published区段宣告的栏位型态必须是ordinal、single、double、extended、comp、currencystringsmallset(译注:指元素编号不超过0.31这个范围的集合;平常的集合可容许的范围为0.255)、methodpointer或class其中一种。如果你宣告了其它型态的栏位,Delphi编译器并不会检查出错误。然而当你使用这个元件时依然会得到一个GPF0如果你想让TMyComponent元件可以在设计时期操作,注意下面的宣告会引发十分严重的问题:typeTComplex二recordRealPart:Double;Comp1exPart:Doub1e

10、;end;classTMyComponent=Class(!Component)privateFl:TComplex;publishedpropertyPl:TComplexreadFlwriteFl;end;1.4 如何撰写一个无法放置到表格上的元件?Ray1.ischner的回答:如果你不想让使用者将元件拉曳至表格上的话,使用RegisterNoIcon及RegisterClass程序来注册元件。1.5 在程式码编辑器中快速切换程式区段最简单的方法是什麽?RayKonopka的回答:在探索VC1.原始程式码时,强烈建你最好熟悉程式码编辑器里的书签功能。使用方法很简单:Ctrl-Shift-

11、N,N是从0至9的数字,用来设定一个书签。此彳爰就可以使用Ctrl-N来跳跃至书签处。(译注:使用这项功能真的可以节省你许多来回卷动程式及找寻函式的时间,别迟疑了,快学吧!)1.6 如何使我的元件在按下滑鼠右键时出现快速功能选单?你必须要建立一个元件编辑器。元件编辑器决定了元件在设计时期时对滑鼠键的反应及动作,你可以为元件定义它自己的快速功能选单。建立元件编辑器的步骤大致如下:8 .从TComponentEditor类别继承一个新的类别。9 .改写类别的GetVerbCountGetVerb及EXeCUteVerb方法。10 .在Register程序中使用RegisterComponentEd

12、itor程序来注册此元件编辑器。有关元件编辑器这个主题在DevelopingDelphiComponents这本书中有详尽的解说及资讯。2.7为什麽元件在设计时期会出现110103J的错误?你可能在元件中使用了WriteIn这个程序。2.8为什麽元件编辑器不会将元件属性的变动储存起来?我发现有时自制的元件编辑器不会将元件属性储存起来。设计时期一切正常,但是储存起来再重新读入彳爰就有问题了。原因是你很可能忘了在元件编辑器中呼叫此方法:Designer.Modified;如此一来Delphi才会知道你的元件编辑器更改过属性值了。第三部分在元件中使用其它元件3.1 如何在元件中加入卷轴元件并让它在设

13、计时期能动作?你的卷轴元件类别必须处理CM_DESIGNHITTEST元件讯息才行。TMyScrollBar=class(TScrollBar)procedureCMDesignHitTest(varMessage:TCMDesignHitTest);messagecm_designhittest;end;procedureTNScrolIBar.CMDesignHitTest(varMessage:TCMDesignHitTest);beginMessage.Result:=1;end;你的元件必须以以下方法建立卷轴:TMyScrollBar.Create(nil);而不是TMrScroll

14、Bar.Create(Self);3.2 如何建立WindOWS95式样的卷轴?你必须设定卷轴的页面大小。你可以用以下的程式码来做:procedureSetPageSize(ScrollBar:TScrollBar;PageSize:Integer);varScrollInfo:TScrollInfo;beginScrollInfo.cbSize:=Sizeof(ScrollInfo);ScrollInfo.fMask:=SIF_PAGE;ScrollInfo.nPage:=PageSize;SetscrollInfo(ScrollBar.Handle,SB_CT1.,ScrollInfo,T

15、rue);end;要取得目前页面大小可用如下方法:functionGetpageSize(ScrollBar:TScrollBar):Integer;varScrollInfo:TScrollInfo;beginifHandleAllocatedthenbeginScrollInfo.cbSize:=SizeOf(ScrollInfo);ScrollInfo.fMask:=SIF_PAGE;GetscrollInfo(ScrollBar.Handle,SB_CT1.,ScrollInfo);Result:-ScrollInfo.nPage;end;end;第四部分BoundControls4.1 哪里可以找得到有关TData1.ink类别的说明文件?我可以大胆地说全世界有关TData1.ink的说明文件只有一份,就在这儿: 属性(Property)介绍

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 通信/电子 > 电子设计

copyright@ 2008-2023 1wenmi网站版权所有

经营许可证编号:宁ICP备2022001189号-1

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!