問題タブ [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.
delphi - TFrame 継承のリファクタリング
私からのさらに別の TFrame IDE 登録コンポーネントの質問です。助けてくれてありがとう、仲間のプログラマー。: )
ここでダリアンの TFrame 継承の提案をいじってみましょう:
仕様:
基本的に、私は IDE に登録した TFrame ベースのコンポーネントを持っていますが、それは素晴らしく機能しました。私は現在、既存のコンポーネントの非ビジュアル機能とプロパティの大部分を共有するいくつかの「姉妹」コンポーネントを開発しています。したがって、その多くを、新しいコンポーネントと古いコンポーネントの両方が継承できる親/スーパークラスに移動することは理にかなっています。
このようにTFrameの継承を「リファクタリング」する最良の方法は何ですか? (これは TForm クラスの子孫にも当てはまるかもしれませんが、確かではありません)。注意点や注意点は?
例:
たとえば、何もない新しい TFrame を作成し、そのフレーム TMyBaseFrame を呼び出してみました。次に、既存のコンポーネント (TMyFrameTreeView と呼びましょう) のクラス定義を、TFrame ではなくそれから継承するように変更しました。
正常にコンパイルされましたが、フォームにドロップしようとすると、「ClientHeight not found」(または「ClientHeight property not found」) が表示され、フォームにドロップされませんでした。関連する DFM から ClientHeight と ClientWidth を削除すると大混乱が生じ、いずれにせよサイズ変更時に置き換えられました。子孫クラスの ExplicitHeight と ExplicitWidth に気付き、継承された値からのプロパティ値のオーバーライドに関連していると考えていますが、よくわかりません。New -> Inherited Items を介してまったく新しいフレームを再作成し、すべてをコピーしても、まだ良い結果が得られていません。
ファイナルノート
これは、DFM ファイルのストリーミングや複数世代の子孫などで、すぐに厄介になる可能性があることを理解しています....これが、全体的な「注意すべきこと」の概念的な側面を求めている理由の一部ですが、特定の問題の現実世界のより単純なバージョンも同様です(私には、実行可能なはずです)。
学習の試みでハックするための小さなテスト パッケージを作成し、多くのことを学んでいますが、それはゆっくりと進んでおり、Delphi の「ジェダイ マスター」からのガイダンス/洞察は、最も高く評価されます。: )
回答の更新は後で:
以下の両方の回答が役に立ちました。同様に、通常の TFrame からの変更がない「ベース フレーム クラス」を作成し、プロパティやメソッドなどを追加する前にそれを継承すると、継承ストリーミングが非常に安定するようです。理由はわかりませんが、これまでのところそうです。
delphi - AV 別のコンポーネントから呼び出されたコンポーネントからプロシージャを使用する場合
私がこれをできる限り説明したかどうかはわかりませんが、ここに行きます...
フォームに 2 つのカスタム コンポーネントがあり、設計時に IDE を介してリンクされています。コンポーネントからプロシージャを呼び出すたびに、アクセス違反が発生します。
モジュール 'Project2.exe' のアドレス 0049A614 でアクセス違反が発生しました。アドレス 00000034 の読み取り。
これは私のコードの小さなセクションです
と...
0049A614 は ***** にあり、IDE はここで停止します。
また、実行時に割り当てを実行しようとしました
運がない
相互に依存しない Presence1 または MyClient1 からのプロシージャを使用しても問題ありません。
デルフィ 7
フォローアップ: mghie のコメントから、私はそれについて再考しました。
フォームから TPresence コンポーネントを削除し (何らかの原因で奇妙な IDE エラーが発生したため)、設計時に作成し、必要なものをすべて割り当てました。今は動作しますが、TPresence コンポーネントを元に戻すと、エラーが再発します。
助けてくれてありがとう、別の質問を再開できない場合は、今すぐこれを解決できるはずです:)
delphi - Delphiパッケージのビルド/インストールのデバッグ
Delphi2007Proを使用しています。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にありません。
---------------------------
OK
に続く:
パッケージをロードできません....NexusDB207dv110.bplパッケージをロード
できません....cmTPPanels_D2007_DesignReg.bpl
指定されたプロシージャが見つかりません。
次回パッケージがロードされるときに、このパッケージのロードを試行しますか?
cmTPPanelsランタイム/デザインパッケージ(コンポーネントセット)を[コンポーネント]->[パッケージのインストール]->[削除]からアンインストールすると、NexusのnxEventLog ocmponentを含む、他の「通常のNexusDB」アプリケーションが正常に動作するようです。これは、問題が間違いなくどこかのインストールパッケージにあることを示しているようです。
そこで、Nexusのインストールが実際の問題ではないことを確認した後、両方のパッケージを含むプロジェクトグループを開きました。ランタイムパッケージをビルド(またはコンパイル)すると、DelphiIDEは上記と同じダイアログボックスを表示します。
「このパッケージを他のインストール済みパッケージと互換性を持たせるには、次の変更が必要です。[OK]を選択してこれらの変更を適用し、パッケージを再構築してください。」
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、IdAsが含まれています。
IndySystemを追加します。
IndySystemには、暗黙のユニットIdBaseComponent、IdGlobal、IdStreamVCL、IdSysNativeVCL、IdSysVCL、IdSysBase、IdSysWin32、IdResourceStrings、IdException、IdSys、IdStream、IdStackSt2、IdStack、IdStackWindows、IdWship6が含まれています。
Rz30DBCtls90を追加します。
Rz30DBCtls90には、暗黙のユニットRzDBNav、RzDBLbl、RzDBStatが含まれています。
lmdweb30_d10を追加します。
lmdweb30_d10には、暗黙のユニットLMDWebHTTPGet、LMDHTMLObjectUnit、LMDFSSupport、LMDHTTPSupp、LMDStringsSupport、LMDURLSupp、LMDRASSupport、LMDRASCF、LMDWebConst、LMDRAS、LMDSyncUnit、LMDWebBase、LMDWebLex、LMDWebHTMLLex、LMDWebDownload
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、uROC 、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、uDAM 、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が含まれています。
dxNavBarD11を追加します。
dxNavBarD11には、暗黙のユニットdxNavBar、dxNavBarExplorerViews、dxNavBarConsts、dxNavBarGraphics、dxNavBarStyles、dxNavBarBase、dxNavBarViewsFact、dxNavBarCollns、dxNavBarVSToolBoxViews、dxNavBar
dxLayoutControlD11を追加します。
dxLayoutControlD11には、暗黙のユニットdxLayoutControl、dxLayoutCustomizeForm、dxLayoutEditForm、dxLayoutCommon、dxLayoutLookAndFeels、dxLayoutControlAdaptersが含まれています。
dxMasterViewD11を追加します。
dxMasterViewD11には、暗黙のユニットdxMasterViewColumns、dxMasterView、dxMasterViewStrsが含まれています。
dxdbtrD11を追加します。
dxdbtrD11には、暗黙のユニットdxdbtrel、dxlocate、dxtree、dxdbtreeが含まれています。
dxPSCoreD11を追加します。
dxPSCoreD11は暗黙ユニット(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。
dxPScxCommonD11を追加します。
dxPScxCommonD11には、暗黙のユニットdxPScxCommonが含まれています。
dxPScxGridLnkD11を追加します。
dxPScxGridLnkD11には、暗黙のユニットdxPScxGridLnkが含まれています。
NexusDB207se110を追加します。
NexusDB207se110は暗黙ユニット(S)nxseAutoComponent、nxseAllEngines、nxseRecordCompressionEngineSmart、nxseRecordEngineVariable、nxseFulltextEngineCursor、nxseFulltextEngineTable、nxseRefIntEngine、nxseJournalEngine、nxseSortEngineMerge、nxseTemporaryStorageChunked、nxseRecordEngineStatic、nxseIndicesEngineSimple、nxseIndexBase、nxseHeapEngineCached、nxseBlockHeapEngineNonfragmenting、nxseBlobEngineSimple、nxseIndexEngineStaticKeyBstarTree、nxseHeaderAccess、nxseEncryptionEngineBlowfishRC4、nxseBlobEngineSegmented、nxseAutoIncEngineSimple、nxseStreamEngineSimpleが含ま。
NexusDB207sr110を追加します。
NexusDB207sr110は暗黙ユニット(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、nxsrRecordCompressionEngine
NexusDB207sq110を追加します。
NexusDB207sq110には、暗黙のユニットnxsqlEngine、nxsqlFunctions、nxsqlDataDef、nxsqlFunctionOrganizer、nxsqlCondExp、nxsqlTableExp、nxsqlViews、nxsqlProxies、nxSQLParse、nxsqlPSM、nxsqlTest、CocoaBaseW、nxsqlBase、nxsqlDataManipが含まれています。
NexusDB207lg110を追加します。
NexusDB207lg110には、暗黙のユニットnxlgEventLogDispatcher、nxlgEventLogが含まれています。
NexusDB207dv110を追加します。
NexusDB207dv110には、暗黙のユニットnxServerManager、nxBaseServerComp、nxConfigSettingsが含まれています。
MPCommonLibD11を追加します。
MPCommonLibD11には、暗黙のユニットMPDataObject、MPCommonObjects、MPCommonUtilities、MPResources、MPShellTypes、MPThreadManager、MPShellUtilitiesが含まれています。
これについて奇妙なのは、台所の流し以外のほとんどすべてが含まれているという事実を除けば、言及されているパッケージの多くは、私がインストールしようとしているこのパッケージに含まれているコンポーネントにさえ関連していないということです。DataSnap、Indy、IBExpress、RemObjects Data Abstractなど-これらはいずれも、私のコンポーネントでは参照されていません。
これらの追加されたすべてのユニット/パッケージに対して[OK]をクリックすると、さらに混乱が生じ、コンパイルされません。
NexusDBフォルダー、および開発中のこれらのコンポーネントが存在するフォルダーはすべてライブラリパス上にあり、カスタムコンポーネントが最後にリストされています。
私は仮想マシンで作業しており、必要に応じてスナップショットを作成できますが、それでもこの問題を回避できないようです。コンパイラがどこで動作するかを十分に理解していないことは明らかです。問題の診断を探すため。私がそうするのを助けるかもしれない誰かが言及することができるものは何でも、大いに感謝されるでしょう。
java - JSF1.2カスタムコンポーネント-バッキングBeanからのボディコンテンツ
JSF1.2を使用してカスタムコンポーネントを開発しています。私のタグクラスは拡張UIComponentELTag
され、タイプの変数がありますValueExpression
。これらの値は、たとえば、タグの対応する属性から(setProperties
関数を使用して)設定されます。
タグのbodyContentをバインディング値として取得しようとするとスタックします。これは私が進んだところです:
タグの本体にバインディング値が含まれていない場合、このコードは正常に機能します。ボディにバインディング値があるかどうかを確認してから、Beanから値を設定したいと思います。
JSF 1.1では、を使用してこれを確認しisValueReference(body)
ました。JSF 1.2でこれを達成するにはどうすればよいですか?ボディコンテンツをバインディング値として取得する例はどこにも見つかりませんでした。
delphi - コンポーネントの初期化 - 実行時と設計時
私が構築している一連のビジュアル複合コンポーネントがあります。これらは、内部テーブルなどを起動する類似/共通の「接続」メソッドを使用します。
実行時に自動的に接続するように、いくつかの接続を自動化しています。コンポーネント レベルで、現在の状態が実行時か設計時かをどのように判断すればよいですか?
delphi - 相互に使用するクラスの循環参照の問題
次の2つのクラスがあります。
TcmDataPanel は (第 3 世代) TFrame の子孫です。直接使用されるのではなく、複数の他の複合コンポーネントが派生します。
TcmDataConnector は、これらの他のコンポーネントのデータベース接続情報を保持するコンポーネントです。
私は ModelMaker を使用しており、オブザーバー パターンを実装して、「データ コネクタ」の状態が変わるたびに複数の「データ パネル」を自動的に更新できるようにしようとしています。
これが私の問題です。各クラスがインターフェイスセクションで他のクラスを使用しているため、「循環参照」の問題を回避できないようです。関連する「uses」参照を Interface セクションに配置しても、「宣言されていない識別子」の問題は解決されず、両方を同じユニットに配置しても解決されません。現在、それらは同じユニットにあり (別々のユニットで、一緒に試しました)、「宣言されていない識別子: TcmTPDataConnector」エラーが発生します。
どうすればこれを回避できますか?
================
更新:
私がいるのは金曜日の夜の午後 9 時 30 分で、完全に立ち往生していました。私の投稿からわずか数分後、あなたはその日を救った!! (夜!) ありがとう!!
男、私はStackOverflowが大好きです....だから、この学習のようなクレイジーな季節の私の友人です。: ) ありがとう、ありがとう、ありがとう...
delphi - コンポーネント作成の問題:フィールドがnilになります
これは、私がここで取り組んでいたプロジェクトの続きです。 相互に使用するクラスの循環参照の問題
そこで受けたアドバイスは、循環参照の問題を修正しました(ここでも、助けてくれてありがとう)。今、私は何か他のものと格闘しています:TcmDataPanel.FObservingDataPanelsは、作成されないため、常に=nilになります。(最初はアクセス違反が発生していましたが、さらにテストしたところ、FObserverは常にゼロであることが判明しました)。
関連するコードは次のとおりです(これはTFrameユニットであり、TcmTPDataPanelがTFrameの子孫です)。
===および===
cmTPDataConnector.Createで実行する予定のShowMessage行が表示されないため、TcmTPCUstomDataConnectorからCreateメソッドを継承していないと思われます。そうではないですか?
私が見逃している明らかな何かがあるように「感じ」ますが、私はそれを見ていません。:-\
2つの質問:
1)FObservingDataPanelsが作成されないのはなぜですか?
2)「//継承されたCreate(AOwner); // TODO:重複をチェックする」および「//継承された破棄; // TODO:重複をチェックする」行は、ある時点でModelMakerによって配置されました。コメントを外す必要がありますか?
PS明らかに、私はまだコンポーネントの作成と継承について学んでいます。その他のご意見やアドバイスは大歓迎です。
PPS今日は私からたくさんの質問があります。ノッチを下げる必要がある場合は、遠慮なくお知らせください。...(ここでたくさんの質問のボーナスがあります)。
助けてくれてありがとう!:)
delphi - Delphi 2009 - オブジェクト インスペクタのカスタム列挙型プロパティ
文字列型と列挙型の 2 つの追加プロパティを持つカスタム TAction タイプを作成しました。
文字列値はオブジェクト インスペクターに表示されますが、列挙型はまったく表示されません。カスタム列挙型をオブジェクト インスペクターのドロップダウン プロパティ値として表示するにはどうすればよいですか?
delphi - Delphiコンポーネントがペイントされていません
TransparencyプロパティとBrushStyle(TImageを使用)プロパティを実装したコンポーネント(TPanelの子孫)があります。
フォームにこのタイプのコンポーネントが1つあれば、問題ありません。このタイプのコンポーネントをフォームに追加すると、最初に表示されるコンポーネントのみがペイントされます。フォームが移動され、最初のコンポーネントが他のウィンドウの下またはデスクトップの外側にある場合、次のコンポーネントがペイントされます。
なにが問題ですか?