問題タブ [tpersistent]
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 - TPersistent + インターフェイス、Delphi
TPersistent に基づいており (RTTI を格納する)、デフォルトのインターフェイス処理 (QueryInterface、_AddRef、_Release) を含むクラスが必要です ... 探しているクラス名は何ですか?
delphi - Delphi7で複数のオブジェクトを永続化する
これは重複ではなく、 「 Windows XP /Delphi7の永続オブジェクト」のフォローアップです。
Delphi 7で複数のオブジェクトを永続化する必要があり、オブジェクトはクラスファミリです。RRUZの回答は、継承しTPersistent
て使用することを示唆していますTJvAppXMLFileStorage
が、そのWritePersistent
メソッドを使用すると、XMLファイル内の1つのオブジェクトが次のオブジェクトで上書きされます。
オブジェクト(TAlarmsと子孫)を後でデータベースに保存する必要があるため、ファイルからオブジェクトを回復する必要があります。
同じファイルに複数のオブジェクトを永続化してから、これらのオブジェクトをファイルからロードするにはどうすればよいですか?
forms - Delphi TForm / TPersistent オブジェクトは、それ自体の構築と逆シリアル化の時間をどのように計算できますか?
パフォーマンス テストのために、フォームが DFM から定義をロードするのに必要な時間を測定する方法が必要です。すべての既存のフォームは、カスタム フォーム クラスを継承します。
現在の時刻をキャプチャするには、この基本クラスに「拡張ポイント」としてオーバーライドされたメソッドが必要です。
- 逆シリアル化プロセスの開始
Loaded
逆シリアル化の後 (プロシージャをオーバーライドすることで実装できます)OnFormCreate
イベント実行直前の瞬間
したがって、のログは次のTMyForm.Create(nil)
ようになります。
どの TObject (または TComponent) メソッドが最適ですか? フォーム作成プロセスには他にも拡張ポイントがあるかもしれません。お気軽にご提案ください。
背景: 非常に基本的な構造 (いくつかの PageControls と QuantumGrids を含む) を持つ一部のアプリ フォームでは、OnFormShow のデータベース アクセスやその他のものではなく、ほとんどの時間 (約 2 秒) を費やした構築であることに気付きました。この時間はどこに費やされているのだろうか。参照オブジェクトとして、同様の構造を持つがコードやデータモジュール接続のないモック フォームも作成し、その作成時間を測定します。
delphi - Delphi ストリーミングの問題
で blob フィールドを使用して、kbmMemTable
開発元のカスタム コンポーネントを格納していTComponent
ます。 の読み取りおよび書き込みコンポーネント ストリーム メソッドを使用してTReader
、コンポーネントを blob フィールドに読み書きします。のデータは、kbmMemTable
最終的に によって作成された構造化ストレージ ファイル内に格納されGpStructuredStorage
ます。
コンポーネントを ( とともにkbmMemtable
) 新しいアプリケーションに移動し、新しいアプリケーションに blob フィールドを読み取らせるまで、これは問題なく機能しました。最初はコンポーネントの命名エラー (コンポーネント名は既に存在します) が発生していましたが、後でコンポーネントのプロパティTReader
を読み取ろうとすると、アクセス違反が発生し始めました。TPersistent
私の知る限り、ファイルkbmMemTable
からデータを取得する方法と、 . コンポーネントに変更を加えていません。また、同じテーブル内の他の BLOB フィールドに保存している他のコンポーネントに問題はないようです (少なくとも、それらを読み取ったときにエラーが発生していません)。戻る)。gpStructuredStorage
TReader
何が問題なのか、私はうんざりしています。どんな助け/提案も大歓迎です。Delphi 2007 を使用しています。
delphi - ストリームからオブジェクトを読み取るときに不明なプロパティを無視する
TPersistent から派生して、プロジェクト情報をファイルに保存するアプリケーションがあります。TSteam.ReadComponentRes を使用して、ストリームからオブジェクトに読み込みます。
不明なプロパティを持つプロジェクト ファイルを開くことができるようにしたいと考えています (アプリケーションの新しいバージョンまたは他の開発ブランチから)。現在、これにより、TStream によって作成される TReader で例外が発生します。読み取りを停止する代わりに、この例外を処理する TReader の子孫を使用する TStream の子孫を作成することを検討しました。これを行うためのよりエレガントな方法を考えられる人はいますか?
delphi - TObject(TPersistent) を XML に保存/読み込み
みんな。
クラスを保存しようとしています:
次のコードを使用してファイルに送信します。
ただし、ファイルは常に空です。
私は間違った方法で何をしていますか?
delphi - TPersistent プロパティの TCollection プロパティに対してコレクション エディタが開かない
コンポーネントの直接のメンバーである場合にうまく機能するカスタムコレクションプロパティがあります。
しかし、コレクション プロパティをコンポーネント内の TPersistent プロパティに移動したいと考えています。オブジェクト インスペクタでコレクション プロパティをダブルクリックすると、通常はコレクション エディタが開きますが、機能しません。
まず第一に、TPersistent プロパティのコンストラクターには何を渡す必要がありますか?
Self を渡すことができないので、永続的な所有者を渡す必要がありますか?
私は何かが欠けていると思います。さらにコードが必要な場合は、この投稿にコメントしてください。
delphi - コレクションの索引付け戦略
TPersistent オブジェクトのコレクションがあります。メモリの場所 (メイン インデックスとして) とプロパティ (rtti を使用) によってインデックスを作成したいと考えています。コレクションには、複数のプロパティ ベースのインデックス (異なるプロパティに基づく) が含まれる場合があります。
この問題を解決するための戦略とデータ構造は何ですか?プロパティベースのインデックスを処理するときに、アクセス違反なしでコレクションから無効なオブジェクト (既に破棄されているオブジェクト) を削除できますか?
編集:物事を明確にするために、この種のインターフェース(クラスとメソッド)を実装したいと考えています:
FMainList には、TMyItem インスタンスへのポインタのリストが含まれています。ポインターを NativeInt にキャストすることによってソートされます。したがって、無効なオブジェクトが見つかっても問題ありません。ただし、プロパティ ベースのインデックスでは、プロパティ値に基づいて TMyItems を並べ替えています。したがって、プロパティ値を取得する必要があるため、無効な TMyItem (既に破棄されているもの) のエントリを見つけようとすると、EAccessViolation が発生します。
これを解決するための私の現在の考えは、各プロパティ ベースのインデックス内の TMyItem の位置を、FMainList に格納されているメイン レコードに格納することです。ただし、このアプローチでは、新しいアイテムが追加または削除されるたびにすべての位置を更新する必要もあります。これは私が避けたいことです。それで、他にもっと良いメカニズムはありますか?