問題タブ [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.

0 投票する
1 に答える
1523 参照

delphi - TPersistent + インターフェイス、Delphi

TPersistent に基づいており (RTTI を格納する)、デフォルトのインターフェイス処理 (QueryInterface、_AddRef、_Release) を含むクラスが必要です ... 探しているクラス名は何ですか?

0 投票する
0 に答える
292 参照

delphi - Delphi7で複数のオブジェクトを永続化する

これは重複ではなく、 「 Windows XP /Delphi7の永続オブジェクト」のフォローアップです。

Delphi 7で複数のオブジェクトを永続化する必要があり、オブジェクトはクラスファミリです。RRUZの回答は、継承しTPersistentて使用することを示唆していますTJvAppXMLFileStorageが、そのWritePersistentメソッドを使用すると、XMLファイル内の1つのオブジェクトが次のオブジェクトで上書きされます。

オブジェクト(TAlarmsと子孫)を後でデータベースに保存する必要があるため、ファイルからオブジェクトを回復する必要があります。

同じファイルに複数のオブジェクトを永続化してから、これらのオブジェクトをファイルからロードするにはどうすればよいですか?

0 投票する
2 に答える
813 参照

forms - Delphi TForm / TPersistent オブジェクトは、それ自体の構築と逆シリアル化の時間をどのように計算できますか?

パフォーマンス テストのために、フォームが DFM から定義をロードするのに必要な時間を測定する方法が必要です。すべての既存のフォームは、カスタム フォーム クラスを継承します。

現在の時刻をキャプチャするには、この基本クラスに「拡張ポイント」としてオーバーライドされたメソッドが必要です。

  1. 逆シリアル化プロセスの開始
  2. Loaded逆シリアル化の後 (プロシージャをオーバーライドすることで実装できます)
  3. OnFormCreateイベント実行直前の瞬間

したがって、のログは次のTMyForm.Create(nil)ようになります。

どの TObject (または TComponent) メソッドが最適ですか? フォーム作成プロセスには他にも拡張ポイントがあるかもしれません。お気軽にご提案ください。

背景: 非常に基本的な構造 (いくつかの PageControls と QuantumGrids を含む) を持つ一部のアプリ フォームでは、OnFormShow のデータベース アクセスやその他のものではなく、ほとんどの時間 (約 2 秒) を費やした構築であることに気付きました。この時間はどこに費やされているのだろうか。参照オブジェクトとして、同様の構造を持つがコードやデータモジュール接続のないモック フォームも作成し、その作成時間を測定します。

0 投票する
3 に答える
639 参照

delphi - Delphi ストリーミングの問題

で blob フィールドを使用して、kbmMemTable開発元のカスタム コンポーネントを格納していTComponentます。 の読み取りおよび書き込みコンポーネント ストリーム メソッドを使用してTReader、コンポーネントを blob フィールドに読み書きします。のデータは、kbmMemTable最終的に によって作成された構造化ストレージ ファイル内に格納されGpStructuredStorageます。

コンポーネントを ( とともにkbmMemtable) 新しいアプリケーションに移動し、新しいアプリケーションに blob フィールドを読み取らせるまで、これは問題なく機能しました。最初はコンポーネントの命名エラー (コンポーネント名は既に存在します) が発生していましたが、後でコンポーネントのプロパティTReaderを読み取ろうとすると、アクセス違反が発生し始めました。TPersistent

私の知る限り、ファイルkbmMemTableからデータを取得する方法と、 . コンポーネントに変更を加えていません。また、同じテーブル内の他の BLOB フィールドに保存している他のコンポーネントに問題はないようです (少なくとも、それらを読み取ったときにエラーが発生していません)。戻る)。gpStructuredStorageTReader

何が問題なのか、私はうんざりしています。どんな助け/提案も大歓迎です。Delphi 2007 を使用しています。

0 投票する
1 に答える
765 参照

delphi - ストリームからオブジェクトを読み取るときに不明なプロパティを無視する

TPersistent から派生して、プロジェクト情報をファイルに保存するアプリケーションがあります。TSteam.ReadComponentRes を使用して、ストリームからオブジェクトに読み込みます。

不明なプロパティを持つプロジェクト ファイルを開くことができるようにしたいと考えています (アプリケーションの新しいバージョンまたは他の開発ブランチから)。現在、これにより、TStream によって作成される TReader で例外が発生します。読み取りを停止する代わりに、この例外を処理する TReader の子孫を使用する TStream の子孫を作成することを検討しました。これを行うためのよりエレガントな方法を考えられる人はいますか?

0 投票する
2 に答える
1433 参照

delphi - TObject(TPersistent) を XML に保存/読み込み

みんな。

クラスを保存しようとしています:

次のコードを使用してファイルに送信します。

ただし、ファイルは常に空です。

私は間違った方法で何をしていますか?

0 投票する
1 に答える
2283 参照

delphi - TPersistent プロパティの TCollection プロパティに対してコレクション エディタが開かない

コンポーネントの直接のメンバーである場合にうまく機能するカスタムコレクションプロパティがあります。

しかし、コレクション プロパティをコンポーネント内の TPersistent プロパティに移動したいと考えています。オブジェクト インスペクタでコレクション プロパティをダブルクリックすると、通常はコレクション エディタが開きますが、機能しません。

まず第一に、TPersistent プロパティのコンストラクターには何を渡す必要がありますか?

Self を渡すことができないので、永続的な所有者を渡す必要がありますか?

私は何かが欠けていると思います。さらにコードが必要な場合は、この投稿にコメントしてください。

Da ビジュアライゼーションズ

0 投票する
1 に答える
391 参照

delphi - コレクションの索引付け戦略

TPersistent オブジェクトのコレクションがあります。メモリの場所 (メイン インデックスとして) とプロパティ (rtti を使用) によってインデックスを作成したいと考えています。コレクションには、複数のプロパティ ベースのインデックス (異なるプロパティに基づく) が含まれる場合があります。

この問題を解決するための戦略とデータ構造は何ですか?プロパティベースのインデックスを処理するときに、アクセス違反なしでコレクションから無効なオブジェクト (既に破棄されているオブジェクト) を削除できますか?

編集:物事を明確にするために、この種のインターフェース(クラスとメソッド)を実装したいと考えています:

FMainList には、TMyItem インスタンスへのポインタのリストが含まれています。ポインターを NativeInt にキャストすることによってソートされます。したがって、無効なオブジェクトが見つかっても問題ありません。ただし、プロパティ ベースのインデックスでは、プロパティ値に基づいて TMyItems を並べ替えています。したがって、プロパティ値を取得する必要があるため、無効な TMyItem (既に破棄されているもの) のエントリを見つけようとすると、EAccessViolation が発生します。

これを解決するための私の現在の考えは、各プロパティ ベースのインデックス内の TMyItem の位置を、FMainList に格納されているメイン レコードに格納することです。ただし、このアプローチでは、新しいアイテムが追加または削除されるたびにすべての位置を更新する必要もあります。これは私が避けたいことです。それで、他にもっと良いメカニズムはありますか?