问题标签 [custom-component]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3497 浏览

delphi - TFrame继承重构

我的另一个 TFrame IDE 注册组件问题。感谢所有的帮助,各位程序员。:)

在这里玩 Darrian 的 TFrame 继承建议:

规格:

基本上,我有一个已注册到 IDE 的基于 TFrame 的组件,它运行良好。我现在正在开发一些“姐妹”组件,它们将共享大量现有组件的非可视功能和属性。因此,将其中的大部分内容移至新旧组件都可以继承的父/超类是有道理的。

以这种方式“重构” TFrame 继承的最佳方法是什么?(这也可能适用于 TForm 类的后代,不确定)。有哪些注意事项和注意事项?

例子:

例如,我尝试创建一个没有任何内容的新 TFrame,然后调用该框架 TMyBaseFrame。然后修改了我现有组件的类定义(我们称之为 TMyFrameTreeView)以继承自该组件而不是 TFrame。

它编译得很好,但是当我尝试将它放在表单上时,我得到“找不到 ClientHeight”(或“找不到 ClientHeight 属性”),并且它不会放在表单上。从相关的 DFM 中删除 ClientHeight 和 ClientWidth 造成了严重破坏,并且最终在调整大小时被替换。我注意到后代类中的 ExplicitHeight 和 ExplicitWidth ,并且我认为这与继承值的属性值覆盖有关,但不确定。通过 New -> Inherited Items 重新创建一个全新的框架,然后复制所有内容,也没有产生很好的结果。

最后说明

我意识到这可能会很快变得一团糟,流式传输 DFM 文件和多代后代等......这也是我要求整体“需要注意的事项”概念方面的部分原因,但也给出了具体的现实世界中更简单的问题版本(在我看来,这应该是可行的)。

我已经创建了一个小测试包来破解学习尝试,并且正在学习很多东西,但它进展缓慢,并且您的德尔福“绝地大师”的任何指导/见解将非常感激。:)



稍后回复更新:

下面的两个答案都很有帮助。同样,创建一个与普通 TFrame 没有任何变化的“基本框架类”,然后在添加任何属性、方法等之前从它继承,似乎可以极大地稳定继承流。不知道为什么,但到目前为止。

0 投票
2 回答
389 浏览

delphi - AV 当使用来自一个组件的过程被另一个组件调用时

我不确定我是否已经尽我所能解释了这一点,但是,我们开始......

我在一个表单上有 2 个自定义组件,它们在设计时通过 IDE 链接在一起。每当我从组件中调用一个过程时,我都会遇到访问冲突,

模块“Project2.exe”中地址 0049A614 的访问冲突。读取地址 00000034。

这是我的代码的一小部分

和...

0049A614 在 *****,IDE 在这里停止。

我也尝试过在运行时进行分配

没有运气

使用 Presence1 或 MyClient1 中不相互依赖的程序可以正常工作。

德尔福 7

跟进:从 mghie 评论中,我重新考虑了它。

我从表单中删除了 TPresence 组件(这导致了一些奇怪的 IDE 错误,这可能与它有关)并在设计时创建了它,分配了所需的一切。现在它可以工作了,但是将 TPresence 组件放回 from 会带来错误。

谢谢你们的帮助,我现在应该可以解决这个问题了,如果我不能重新打开另一个问题:)

0 投票
2 回答
8768 浏览

delphi - Delphi 包构建/安装调试

我正在使用 Delphi 2007 Pro。我有一个运行时包,其中包含我正在开发的许多基于 TFrame 的复合组件。还有一个相关的设计包将这些组件安装到工具面板中。由于各种原因,这些 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 中。
----------------------------
好的

其次是:

Can't load package ....NexusDB207dv110.bpl
Can't load package ....cmTPPanels_D2007_DesignReg.bpl 找不到
指定的程序。
您想在下次加载包时尝试加载此包吗?

Once I uninstalled the cmTPPanels runtime/design packages (my component set), via Component -> Install Package -> Remove, my other "normal Nexus DB" applications seem to work fine, including those which include Nexus's nxEventLog ocmponent. This seems to indicate the problem is definitely in my install packages somewhere.

So, having confirmed that my Nexus installation does not seem to be the actual problem, I opened up the project group which contains both packages. Building (or compiling) the runtime package, the Delphi IDE gives me the same dialog box I mentioned above:

"The following changes are necessary to make this package compatible with other installed package. Choose OK to apply these changes and rebuild the package."

Add dsnap.
dsnap contains implicit unit(s) DBClient, Provider, DataBkr, MidConst, Midas, DSIntf.

Add ibxpress.
ibxpress contains implicit unit(s) IBUtils, IB, IBSQLMonitor, IBHeader, IBIntf, IBXConst, IBXMLHeader, IBSQL, IBBlob, IBCustomDataSet, IBDatabase, IBErrorCodes, IBDatabaseInfo,
IBExternals, IBInstallHeader, IBServices.

Add IndyCore.
IndyCore contains implicit unit(s) IdIOHandlerSocket, IdSocks, IdIOHandlerStack, IdBuffer, IdResourceStringsCore, IdIntercept, IdCustomTransparentProxy, IdExceptionCore, IdSocketHandle, IdIOHandler, IdTCPConnection, IdReplyRFC, IdReply, IdTCPClient, IdIPAddress, IdAssignedNumbers.

Add IndySystem.
IndySystem contains implicit unit(s) IdBaseComponent, IdGlobal, IdStreamVCL, IdSysNativeVCL, IdSysVCL, IdSysBase, IdSysWin32, IdResourceStrings, IdException, IdSys, IdStream, IdObjs, IdComponent, IdStack, IdStackWindows, IdWship6, IdWinSock2, IdStackConsts, IdStackBSDBase, IdAntiFreezeBase.

Add Rz30DBCtls90.
Rz30DBCtls90 contains implicit unit(s) RzDBNav, RzDBLbl, RzDBStat.

Add lmdweb30_d10.
lmdweb30_d10 contains implicit unit(s) LMDWebHTTPGet, LMDHTMLObjectUnit, LMDFSSupport, LMDHTTPSupp, LMDStringsSupport, LMDURLSupp, LMDRASSupport, LMDRASCF, LMDWebConst, LMDRAS, LMDSyncUnit, LMDWebBase, LMDWebLex, LMDWebHTMLLex, LMDWebDownloadFormUnit, LMDDownload, LMDInetConst, LMDWebConfig, LMDWebInfo.

Add lmddsg30_d10.
lmddsg30_d10 contains implicit unit(s) LMDDsgPropInsp, LMDDsgPropEditors, LMDDsgMenuEditor, LMDDsgObjects, LMDDsgClass, LMDDsgCst, LMDDsgCollectionEditor, LMDDsgStrsEditor, LMDDsgPropPage, LMDDsgModule.

Add lmdstorage10_d10.
lmdstorage10_d10 contains implicit unit(s) LMDStorFormProperties, LMDStorFormHook, LMDStorBase, LMDStorConsts, LMDStorPropertiesStorage, LMDStorCommon, LMDStorINIVault.

Add ExceptionExpert11.
ExceptionExpert11 contains implicit unit(s) ExceptionLog, EDisAsm, EHash, EListView, EConsts, ETypes, ELogManager, EEncrypt, EBase64, EXMLBuilder, ECore, EWebTools, EZip, EZlib, ESockets, ELang, EHook, EDebug, ELeaks.

Add RemObjects_Core_D11.
RemObjects_Core_D11 contains implicit unit(s) 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.

Add RemObjects_Indy_D11.
RemObjects_Indy_D11 contains implicit unit(s) uROSuperTCPChannel, uROSCHelpers.

Add DataAbstract_Core_D11.
DataAbstract_Core_D11 contains implicit unit(s) 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.

Add VirtualTreesD11.
VirtualTreesD11 contains implicit unit(s) VirtualTrees, VTAccessibilityFactory.

Add VirtualShellToolsD11.
VirtualShellToolsD11 contains implicit unit(s) VirtualExplorerTree, ColumnForm, VirtualResources, VirtualShellAutoComplete, VirtualShellNotifier, VirtualScrollbars.

Add dxBarDBNavD11.
dxBarDBNavD11 contains implicit unit(s) dxBarDBNav, dxBarDBNavStrs.

Add dxBarExtDBItemsD11.
dxBarExtDBItemsD11 contains implicit unit(s) dxBarExtDBItems.

Add cxVerticalGridD11.
cxVerticalGridD11 contains implicit unit(s) cxDBVGrid, cxVGridViewInfo, cxVGridUtils, cxVGrid, cxVGridNewCategory, cxVGridConsts.

Add dxNavBarD11.
dxNavBarD11 contains implicit unit(s) dxNavBar, dxNavBarExplorerViews, dxNavBarConsts, dxNavBarGraphics, dxNavBarStyles, dxNavBarBase, dxNavBarViewsFact, dxNavBarCollns, dxNavBarVSToolBoxViews, dxNavBarBaseViews, dxNavBarOffice11Views, dxNavBarOfficeViews, dxNavBarXPViews.

Add dxLayoutControlD11.
dxLayoutControlD11 contains implicit unit(s) dxLayoutControl, dxLayoutCustomizeForm, dxLayoutEditForm, dxLayoutCommon, dxLayoutLookAndFeels, dxLayoutControlAdapters.

Add dxMasterViewD11.
dxMasterViewD11 contains implicit unit(s) dxMasterViewColumns, dxMasterView, dxMasterViewStrs.

Add dxdbtrD11.
dxdbtrD11 contains implicit unit(s) dxdbtrel, dxlocate, dxtree, dxdbtree.

Add dxPSCoreD11.
dxPSCoreD11 contains implicit unit(s) dxPSEdgePatterns, dxPSUtl, dxPSImgs, dxPSRes, dxPrnDev, dxPSGlbl, dxPSEngn, dxPSSngltn, dxPSESys, dxBase, dxPSCore, dxPSPrVwStd, dxPSPopupMan, dxPgsDlg, dxWrap, dxPSHFToolBarBld, dxPSfmAutoHFTextFmt, dxPSEvnt, dxPrnPg, dxPpAttr, dxBkGnd, dxFEFDlg, dxPcPrVw,dxExtCtrls, dxExtCtrlsStrs, dxPSForm, dxPSAutoHFTextMnuBld, dxfmDfnStl, dxfmMnPg, dxfmClr, dxPreVw, dxPSPrVw, dxfmZoom, dxPSExtDlgs, dxfmPNFmt, dxfmDTFmt, dxPSPrVwOpt, dxPSfmCompositionDsg, dxPSfmCompositionAdd, dxPSCompsProvider, dxPSXplorerTreeView, dxPSfmReportProperties, dxPSPgsMnuBld, dxfmChFN, dxPSfmTtl, dxPSCPDsg, dxPSfmLnkAdd, dxPSfmEditDesc, dxPSFillPatterns, dxPrnDlg.

Add dxPScxCommonD11.
dxPScxCommonD11 contains implicit unit(s) dxPScxCommon.

Add dxPScxGridLnkD11.
dxPScxGridLnkD11 contains implicit unit(s) dxPScxGridLnk.

Add NexusDB207se110.
NexusDB207se110 contains implicit unit(s) nxseAutoComponent, nxseAllEngines, nxseRecordCompressionEngineSmart, nxseRecordEngineVariable, nxseFulltextEngineCursor, nxseFulltextEngineTable, nxseRefIntEngine, nxseJournalEngine, nxseSortEngineMerge, nxseTemporaryStorageChunked, nxseRecordEngineStatic, nxseIndicesEngineSimple, nxseIndexBase, nxseHeapEngineCached, nxseBlockHeapEngineNonfragmenting, nxseBlobEngineSimple, nxseIndexEngineStaticKeyBstarTree, nxseHeaderAccess, nxseEncryptionEngineBlowfishRC4, nxseBlobEngineSegmented, nxseAutoIncEngineSimple, nxseStreamEngineSimple.

Add NexusDB207sr110.
NexusDB207sr110 contains implicit unit(s) nxsrSqlEngineBase, nxExeConst, nxsrServerEngine, nxsrBlobHandlerCaching, nxsrTimeoutHandling, nxsrTypes, nxsrBlobHandlerBase, nxsrBufferManager, nxsrFileImplWin32, nxsrStrings, nxsrEncryptionEngineBase, nxsrConst, nxsrTemporaryStorageBase, nxsrBlobEngineBase, nxsrSubEngineBase, nxsrBlobHandlerPassthrough, nxsrRecordMapperEngine, nxsrFieldMapperEngineAutoInc, nxsrFieldMapperEngine, nxsrFieldMapper, nxsrSortEngineBase, nxsrFulltextEngineBase, nxsrIndexEngineBase, nxsrRecordEngineBase, nxsrRefIntEngineBase, nxsrAutoIncEngineBase, nxsrStreamEngineBase, nxsrTableLockContainer, nxsrDataDictionary, nxsrFileHandling, nxsrServerCursorMapping, nxsrSystemStorage, nxsrRecordCompressionEngineBase, nxsrHeapEngineBase, nxsrBlockHeapEngineBase.

Add NexusDB207sq110.
NexusDB207sq110 contains implicit unit(s) nxsqlEngine, nxsqlFunctions, nxsqlDataDef, nxsqlFunctionOrganizer, nxsqlCondExp, nxsqlTableExp, nxsqlViews, nxsqlProxies, nxSQLParse, nxsqlPSM, nxsqlTest, CocoaBaseW, nxsqlBase, nxsqlDataManip, nxSQLTok, nxSQLProxiesIntf.

Add NexusDB207lg110.
NexusDB207lg110 contains implicit unit(s) nxlgEventLogDispatcher, nxlgEventLog.

Add NexusDB207dv110.
NexusDB207dv110 contains implicit unit(s) nxServerManager, nxBaseServerComp, nxConfigSettings.

Add MPCommonLibD11.
MPCommonLibD11 contains implicit unit(s) MPDataObject, MPCommonObjects, MPCommonUtilities, MPResources, MPShellTypes, MPThreadManager, MPShellUtilities.

What's weird about this, aside from the fact that includes just about everything but the kitchen sink, is that a number of the packages mentioned aren't even relevant to the components included in this package I'm trying to install; DataSnap, Indy, IBExpress, RemObjects Data Abstract, etc -- none of these are even referenced in my components.

If I click "OK" to all these added units/packages, more chaos ensues, and it doesn't compile.

The NexusDB folders, and the folders which these components I'm developing reside in, are all on my Library path, with my custom components listed last.

I'm working on a virtual machine, and can snapshot as needed, but I can't seem to get around this problem regardless, and it's clear that I don't have enough in-depth understanding of how the compiler works to know where to look for diagnosis of the problem. Anything anyone can mention which might help me do so, would be much appreciated.

0 投票
1 回答
2283 浏览

java - JSF 1.2 自定义组件 - 来自 Backing Bean 的正文内容

我正在使用 JSF 1.2 开发一个自定义组件。我的标签类扩展UIComponentELTag并具有类型变量ValueExpression。这些值是从标签的相应属性(使用setProperties函数)中设置的,例如

当我尝试将标签的 bodyContent 作为绑定值时,我被卡住了。这就是我的进展:

如果标记的主体不包含绑定值,则此代码可以正常工作。我想检查主体是否具有绑定值,然后从 bean 设置值。

在 JSF 1.1 中,我使用isValueReference(body). 我如何在 JSF 1.2 中实现这一点?我在任何地方都找不到任何将正文内容作为绑定值的示例。

0 投票
1 回答
4149 浏览

delphi - 组件初始化 - 运行时与设计时

我正在构建一系列视觉复合组件,它们使用类似/常见的“连接”方法,可以在那里启动内部表等。

我正在自动化一些连接内容以在运行时自动连接。在组件级别,我如何判断当前状态是运行时还是设计时?

0 投票
3 回答
1720 浏览

delphi - 相互使用的类的循环引用问题

我有以下两个课程:

TcmDataPanel 是(第 3 代)TFrame 后代。它不是直接使用的,而是从它衍生出的多个其他复合组件。

TcmDataConnector 是一个保存这些其他组件的数据库连接信息的组件。

我正在使用 ModelMaker,并正在尝试实现观察者模式,以便在“数据连接器”更改状态时自动更新多个“数据面板”。

这是我的问题:我似乎无法解决“循环引用”问题,因为每个类在接口部分都使用另一个。将相关的“使用”引用放在“接口”部分并不能解决“未声明的标识符”问题,并且将它们放在同一个单元中也不会。现在它们在同一个单元中(我已经在单独的单元中尝试过它们,并且一起尝试过),并且我收到“未声明的标识符:TcmTPDataConnector”错误。

我怎样才能解决这个问题?

================
更新:

现在是周五晚上 9:30 晚上我所在的地方,我完全被困住了。在我发帖后几分钟,你们拯救了这一天!!(晚上!)谢谢!

伙计,我喜欢 StackOverflow ......所以我的朋友在这个疯狂的学习季节。: ) 谢谢你,谢谢你,谢谢你...

0 投票
2 回答
242 浏览

delphi - 组件创建问题:字段最终为零

这是我在这里工作的项目的延续: Circular reference issue with Classes which use each other

那里收到的建议修复了 ciruclar 参考问题(再次感谢您的帮助)。现在我正在与其他东西搏斗:TcmDataPanel.FObservingDataPanels 总是以 = nil 结束,显然是因为它永远不会被创建。(最初我遇到了访问冲突,但在进一步测试中发现 FObserver 始终为零)。

下面是相关代码(它是一个 TFrame 单元,TcmTPDataPanel 是 TFrame 的后代):

=== 和 ===

我希望在 cmTPDataConnector.Create 上运行的 ShowMessage 行从未出现,这让我认为它没有从 TcmTPCUstomDataConnector 继承 Create 方法。不应该吗?

它“感觉”好像我缺少一些明显的东西,但我没有看到它。:-\

两个问题:

1) 为什么没有创建 FObservingDataPanels?
2)“//继承的Create(AOwner);// TODO:检查重复”和“//inherited Destroy;//TODO:检查重复”行是由ModelMaker在某个时候放入的。他们应该被取消注释吗?

PS显然,我还在学习组件创建和继承。欢迎任何其他意见和建议。

PPS 今天我有很多问题。如果我需要将它降低一个档次,请随时告诉我......(只是在这里有一个奖励很多问题的日子)。

提前感谢您的任何帮助!:)

0 投票
1 回答
2443 浏览

delphi - Delphi 2009 - 对象检查器中的自定义枚举类型属性

我创建了一个自定义 TAction 类型,它有 2 个附加属性,它们是字符串类型和枚举。

字符串值在对象检查器中正常显示,但是枚举类型根本没有出现。如何获取自定义枚举类型以在对象检查器中显示为下拉属性值?

0 投票
3 回答
550 浏览

delphi - 分发带有第三方 UI 元素的设计时包

现在我正在学习更多关于组件开发的设计时间方面的知识,我有一些可能会变成针对 Delphi 2007 的 IDE“插件”(如果兼容,还有其他插件)。

理想情况下,这些表单/UI 将使用我经常使用的一些第三方组件。假设许可可以为 IDE 插件等分发这些组件,那么与对具有“完整源代码”的包所做的相比,我需要做些什么来准备分发包?

(我希望这个问题有意义。如果没有,请善待并提出问题)。

0 投票
4 回答
3746 浏览

delphi - Delphi 组件未绘制

我有组件(TPanel 的后代),我在其中实现了 Transparency 和 BrushStyle(使用 TImage)属性。

当我在表单上有一个这种类型的组件时,一切都好。当我在表单上添加更多这种类型的组件时,只会绘制第一个可见组件。当表单被移动并且第一个组件位于其他窗口或桌面外部时,下一个组件被绘制。

怎么了?