我正在重写和/或整合一堆我的"app框架"类(基本的mainform,关于框,锁定例程和购买链接,自动更新,datamodule初始化程序等) - 基本上,我有一些小的潜在的共享软件应用程序,我想要出门,并希望尽可能重用代码,以及为以后的应用程序构建框架,以节省时间.
在一个应用程序中,我有自动更新,我正在使用LMD的WebUpdate,并且相当满意它,但鉴于我正在重新推动所有内容,我想我会看到对"最佳方法"的共识是什么这个.我不介意支付商业费用,也不介意使用开源,如果这是最好的...只是宁愿不重新发明轮子.(我读过:Delphi:你如何自动更新你的应用程序?)
Delphi Win 32应用程序的最佳自动更新组件是什么?
我正在尝试解决一组显然存在依赖性问题的软件包的问题。有时在构建全部期间,我会收到此错误:
Delphi“E2161 错误:RLINK32:打开文件 ________.drf 时出错”
它是什么意思/表示什么?什么是“drf”文件?
我正在开发各种组件,并且经常需要拥有一个具有"一对多"关系的属性,即组件到属性成员.组件通常是可视组件,但并非总是如此,有时需要在IDE中注册(即使用Property Inspector),但并非总是如此.我发现自己不确定在设置这些属性时要采用哪条路径 - 使用数组属性,TList,TStringList,TCollection或其他一些东西(可能是从其中一个继承的新类).
什么是"最佳实践"/指南在何时/何地使用?
我正在构建一系列可视复合组件,它们使用类似/常用的"连接"方法,这些方法会激活内部表格等.
我正在自动化一些连接的东西,以便在运行时自动连接.如何在组件级别告诉当前状态是运行时还是设计时?
我仍然没有找到一个真正令人满意的答案来回答这个问题,我现在正在考虑自己的问题.我有ModelMaker和GExperts,似乎都没有加载我正在寻找的综合类层次结构.同样,我不认为DevExpress的人会分叉编译完整的类列表的CDK代码继承... ;-)
所以...
如果所有我想要做的是建立所有已注册的组件类的自引用表(甚至所有类别,包括非组件,如果这是一样容易/可能),这将是去这样做,最好的方法是什么?
注意:我真的不需要属性/方法细节; 只是一个完整的类名(和父名)列表,我可以存储到表中并放入树视图.不过,除此之外的任何事情都非常受欢迎,作为奖励信息.:-)
稍后更新:
一个答案显示在我的"最近"部分关于SO,但问题不在这里(可能是它们删除了吗?),是这样的:
"你可能想看看组件搜索的代码,它可能会帮助你枚举安装的所有组件."
该代码可用吗?是这样,它隐藏在哪里?学习会很有趣.
有一次,我有一个很好的小压缩实用程序,将我的Delphi编译的EXE打破到较小的下载大小,但现在我找不到它.有什么建议?
此外,使用这些实用程序有什么缺点吗?(我主要使用它们来缩短农村/拨号用户的下载时间).
我在Delphi 2007项目中得到了一组级联的"EClassNotFound"错误.似乎并不是由于缺少Name属性值而导致的情况,并且虽然在初始化部分中添加RegisterClass(XXX)会修复手边的EClassNotFound错误,但另一个看似无限期地跟随它.
我终于在文本编辑器中打开了DFM文件,它看起来很可能已损坏(表单元素名称中有很多非ASCII字符,而且与我以前在DFM文件中看到的相比,看起来非常"非结构化" ).(我会在这里张贴相同的但不确定没关系,非aSCII,所以会推迟).
表单加载很好,似乎编译/语法检查也好,但一旦我运行它,麻烦.
回到SVN的早期版本,看起来它已经处于这种状态一段时间了,这让我觉得A)DFM文件不是我的问题,或者B)Delphi表格流是一个很大的错误 - 容忍/健全(奖金问题:这是什么?).
如果DFM文件出现问题并且已损坏,则回滚将必须回滚,这将是昂贵的.鉴于IDE仍然可以加载它,是否有任何可以清理文件的实用程序?
或者,我是否完全偏离DFM作为主要嫌疑人?
感谢大家的投入.忘了带有DFM文件的二进制/文本选项,这很有帮助.看起来DFM本身没有损坏.
仍然有EClassError问题.re:它缺少属性值,或者引用不存在的属性等,还有一个问题:该类是否给出了错误(当前TnxSqlUpdateObject,但如果经验到目前为止,可能更多等待)通常/总是真正的"罪魁祸首"类/对象?
例如,现在我的主窗体有四个引用TnxSqlUpdateObject,w /那些实际上放在窗体上.如果我将RegisterClass(TnxSqlUpdateObject)放在初始化部分中,它对于该EClassNotFound错误运行正常,但随后继续执行下一个错误(在本例中为TStringField).
在这种情况下,我重新安装了NexusDB组件,并使用我认为可能存在问题的一些组件构建了一个新项目.它编译并运行良好,直到我从我的真实项目中添加了另一个表单(反过来,不幸地引用了很多其他表单).
那么,听起来我真正的问题是如何有条不紊地诊断和修复任何和所有EClassNotFound错误?
我正在使用Delphi 2007专业版.我有一个运行时包,其中包含我正在开发的许多基于TFrames的复合组件.还有一个相关的设计包,可以将这些组件安装到工具选项板中.这些TFrame后代由于各种原因使用许多第三方组件,并且还作为类层次结构彼此继承.到目前为止(并且在这里有一些很好的建议的帮助下),这种方法非常适合我想要完成的任务.
最近我遇到了一个问题,然而,编译/构建运行时包.最初,它与一些以nxEventLog.pas为中心的冲突有关,遗憾的是我没有记录的细节,但基本上是"这种方法的定义与之前的定义不一致".就像你的实施声明与你的班级声明不一致时得到的那样.此文件是NexusDB文件(该应用程序使用NexusDB嵌入式服务器).
我尝试过各种各样的事情,但从来没有成功地让冲突消失.我最接近的是编译,让IDE请求将完全不相关的单元的TRUCKLOAD添加到contains/uses子句中.稍后会详细介绍,但如果我继续这样做,它仍然无效.nxEventLog文件未从其原始状态更改.
无法找出为什么出现这个错误 - 它出现在Nexus文件中,而不是我的实际包或单位,而且我在Nexus代码中没有改变任何内容 - 我终于继续完成并完全卸载了Nexus,并且手动搜索以确保我已删除所有相关的dcu和bpl文件,然后重新安装它.(我正在运行Nexus 2.07)
启动IDE后,我收到以下错误:
bds.exe - 找不到入口点
---------------------------
过程入口点
@ Nxsddatadictionary @TnxBaseTableDescriptor @ LoadFromReader $ qqrp15Classes @TReader可以不在动态链接库NexusDB207sd110.bpl中.
---------------------------
好的
其次是:
无法加载包.... NexusDB207dv110.bpl
无法加载包.... cmTPPanels_D2007_DesignReg.bpl找不到
指定的程序oculd.
是否要在下次加载包时尝试加载此包?
一旦我卸载了cmTPPanels运行时/设计包(我的组件集),通过组件 - >安装包 - >删除,我的其他"普通Nexus DB"应用程序似乎工作正常,包括那些包含Nexus的nxEventLog ocmponent的应用程序.这似乎表明问题肯定在我的安装包中.
因此,在确认我的Nexus安装似乎不是实际问题后,我打开了包含两个软件包的项目组.构建(或编译)运行时包,Delphi IDE为我提供了上面提到的相同对话框:
"要使此程序包与其他已安装的程序包兼容,必须进行以下更改.选择"确定"以应用这些更改并重新生成程序包.
添加dsnap.
dsnap包含隐式单元DBClient,Provider,DataBkr,MidConst,Midas,DSIntf.
添加ibxpress.
ibxpress包含隐式单元IBUtils,IB,IBSQLMonitor,IBHeader,IBIntf,IBXConst,IBXMLHeader,IBSQL,IBBlob,IBCustomDataSet,IBDatabase,IBErrorCodes,IBDatabaseInfo,
IBExternals,IBInstallHeader,IBServices.
添加IndyCore.
IndyCore包含隐式单元IdIOHandlerSocket,IdSocks,IdIOHandlerStack,IdBuffer,IdResourceStringsCore,IdIntercept,IdCustomTransparentProxy,IdExceptionCore,IdSocketHandle,IdIOHandler,IdTCPConnection,IdReplyRFC,IdReply,IdTCPClient,IdIPAddress,IdAssignedNumbers.
添加IndySystem.
IndySystem包含隐式单元IdBaseComponent,IdGlobal,IdStreamVCL,IdSysNativeVCL,IdSysVCL,IdSysBase,IdSysWin32,IdResourceStrings,IdException,IdSys,IdStream,IdObjs,IdComponent,IdStack,IdStackWindows,IdWship6,IdWinSock2,IdStackConsts,IdStackBSDBase,IdAntiFreezeBase.
添加Rz30DBCtls90.
Rz30DBCtls90包含隐式单元RzDBNav,RzDBLbl,RzDBStat.
添加lmdweb30_d10.
lmdweb30_d10包含隐式单元LMDWebHTTPGet,LMDHTMLObjectUnit,LMDFSSupport,LMDHTTPSupp,LMDStringsSupport,LMDURLSupp,LMDRASSupport,LMDRASCF,LMDWebConst,LMDRAS,LMDSyncUnit,LMDWebBase,LMDWebLex,LMDWebHTMLLex,LMDWebDownloadFormUnit,LMDDownload,LMDInetConst,LMDWebConfig,LMDWebInfo.
添加lmddsg30_d10.
lmddsg30_d10包含隐式单元LMDDsgPropInsp,LMDDsgPropEditors,LMDDsgMenuEditor,LMDDsgObjects,LMDDsgClass,LMDDsgCst,LMDDsgCollectionEditor,LMDDsgStrsEditor,LMDDsgPropPage,LMDDsgModule.
添加lmdstorage10_d10.
lmdstorage10_d10包含隐式单元LMDStorFormProperties,LMDStorFormHook,LMDStorBase,LMDStorConsts,LMDStorPropertiesStorage,LMDStorCommon,LMDStorINIVault.
添加ExceptionExpert11.
ExceptionExpert11包含隐式单元ExceptionLog,EDisAsm,EHash,EListView,EConsts,ETypes,ELogManager,EEncrypt,EBase64,EXMLBuilder,ECore,EWebTools,EZip,EZlib,ESockets,ELang,EHook,EDebug,ELeaks.
添加RemObjects_Core_D11.
RemObjects_Core_D11包含隐式单元(一个或多个)uROClasses,uROSerializer,uROXMLIntf,uROMSXMLImpl,uRORes,uROMSXML2_TLB,uROClient,uRODLToXML,uRODL,uROTypes,uROHTTPTools,uROClientIntf,uROEncryption,uROZlib,uROCipher1,uROHash,uRODECUtil,uRODECConst,uROCipher,uROCiphers,uROBinaryHelpers,uROCompression ,uROEventRepository,uROServerIntf,uROSessions,uRODynamicRequest,uRORemoteService,uROThreadPool,uROServer,uROAsync,uROThread,uROBinMessage,uROStreamSerializer.
添加RemObjects_Indy_D11.
RemObjects_Indy_D11包含隐式单位uROSuperTCPChannel,uROSCHelpers.
添加DataAbstract_Core_D11.
DataAbstract_Core_D11包含隐式单元(一个或多个)uDADataTable,uDASupportClasses,uDARes,uDABusinessProcessor,uDAEngine,uDASQL92QueryBuilder,uDASQL92Interfaces,uDAWhere,uDAInterfaces,DataAbstract4_Intf,DataAbstract3_Intf,uDAHelpers,uDAClasses,uDAMemDataTable,uDAMemDataset,uDAExpressionEvaluator,uDAMacros,uDAUtils,uDAXMLUtils,uDADriverManager,uDAInterfacesEx,uDADelta ,uDARegExpr,uDAScriptingProvider,uDAOracleInterfaces,uDAMacroProcessors,uDADataStreamer,uDACDSDataTable,uDARemoteDataAdapter,uDAReconcileDialog,uDAReconcileDialogDetails,uDARemoteDataAdapterRequests,uDABinAdapter.
添加VirtualTreesD11.
VirtualTreesD11包含隐式单元VirtualTrees,VTAccessibilityFactory.
添加VirtualShellToolsD11.
VirtualShellToolsD11包含隐式单元VirtualExplorerTree,ColumnForm,VirtualResources,VirtualShellAutoComplete,VirtualShellNotifier,VirtualScrollbars.
添加dxBarDBNavD11.
dxBarDBNavD11包含隐式单元dxBarDBNav,dxBarDBNavStrs.
添加dxBarExtDBItemsD11.
dxBarExtDBItemsD11包含隐式单元dxBarExtDBItems.
添加cxVerticalGridD11.
cxVerticalGridD11包含隐式单元cxDBVGrid,cxVGridViewInfo,cxVGridUtils,cxVGrid,cxVGridNewCategory,cxVGridConsts. …
我在2008年初搬到了Delphi 2007.我花了很长时间来迁移我的所有工具和组件,而且我并不急于再次这样做.我从德尔福6号搬了.(买了D2006,但由于迁移问题,没有多大用处).
虽然MSDN/F1帮助"集成",但仍然会让我疯狂.我根据需要访问D6帮助文件和各个供应商帮助文件,但它肯定不如旧的put-your-cursor-on-a-method有用,单击F1 - >你得到一些有用的东西帮助方法,尤其是集成了所有供应商文件.
看来我可能很晚才参加聚会,但显然我并不孤单:http: //blogs.embarcadero.com/deeelling/2007/08/21/38290
我现在看到Embarcadero允许你为Delphi 2007下载CHM文件.他们是否可以完全整合它们,并完全摆脱那些无用的MSDN怪物?
我经常遇到这个,我只是在寻找最佳实践/方法.我有一个包含数据库/数据模块的应用程序,并且想要在启动时启动数据库/数据集,而在设计时将"运行时活动"设置为true(数据库位置不同).当应用程序启动时,还运行Web"检查更新"例程.
给定TForm事件序列,以及各种试错的结果,我目前正在使用这种方法:
我使用在主窗体中设置的"Globals"记录来存储所有全局变量,有一个名为Globals.AppInitialized(boolean)的元素,并在主窗体的Initialization部分将其设置为False.
在主窗体的OnShow事件中(所有窗体都是由那时创建的),我测试了Globals.AppInitialized; 如果它是假的,我运行我的"初始化"的东西,然后通过设置Globals.AppInitialized:= True完成.
这看起来效果很好,但这是最好的方法吗?寻找别人的经验,想法和意见的见解.TIA ..
delphi ×10
components ×3
ide ×3
auto-update ×1
class ×1
compression ×1
datamodule ×1
delphi-2007 ×1
dfm ×1
exe ×1
forms ×1
package ×1
packages ×1
vcl ×1