問題タブ [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 に答える
1291 参照

delphi - C ++ Builder / Delphiコンポーネントを記述し、バイナリプロパティをDFMファイルに保存します

私は、SVGファイルがそれらに対していくつかのことを実行することを表示するためにC++ビルダーコンポーネントを作成しました。

今のところ、SVGファイルのファイル名でIDEで初期化できるSvgFile(UnicodeString)という名前のプロパティを公開しました。これは正常に機能します。このプロパティはDFMファイルに保存され、そこから再ロードできます。

ただし、アプリケーションにSVGファイルを提供する必要があるため、TImageコンポーネントで行われるように、SVGをDFMファイルに保存したいと思います。

TPropertyEditorとおそらくTPersistentクラスを作成する必要があると思いますが、どうすればよいかわかりません。

誰かが私がそうするのを手伝ってくれるでしょうか?

2013/01/17を編集:ここに解決策がありますhttp://www.informit.com/articles/article.aspx?p=28278&seqNum=5

ご協力いただきありがとうございます。

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

delphi - デフォルトのWriteComponentアクションを使用して、Delphi TPersistentをTComponentのフィールドとしてシリアル化できますか?

TPersistentフィールドを持つTComponentからプロパティを書き出す方法について非常に混乱しています。たとえば、私は持っています:

次のライターコードを使用する場合:

私は次のものだけを取得します:

つまり、TPersistentTChildObjがありません。

コンポーネントのシリアル化に関するこの記事では、「コンポーネントはデフォルトで、TComponentではないタイプTPersistentのプロパティをストリーミングします。TPersistentプロパティはコンポーネントと同じようにストリーミングされ、ストリーミングされる他のTPersistentプロパティがある場合があります。」ただし、System.Classesにステップインすると、12950行目(XE3)付近にテストがあります。

これは、コンポーネントとサブコンポーネントのみがシリアル化されていることを示しているようです。TChildObjをTComponentから派生させる(そしてそれに名前を付ける)と、書き込まれたファイルにその名前が表示されます(ただし、プロパティは表示されません)。

私が本当に理解していないのは、TControl(コンポーネント)にはFontプロパティ(TPersistent)があり、たとえばTLabelを作成すると、これが正常にストリーミングされることです。

それとも、これはデフォルトのプロパティと関係がありますか?

助けていただければ幸いです。

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

delphi - Delphi: TPersistent と csDesigning の状態

TPersistentクラスが csDesigning 状態であることを検出するにはどうすればよいですか?

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

multithreading - Delphi - カスタム スレッドが作成されない

ここで少し問題があります。TPersistent クラスを継承するカスタム クラスがあり、このカスタム クラスの内部 (プライベート セクション) には、オーバーライドされた Execute メソッドを使用して (1000 ミリ秒ごとに) 起動するカスタム TThread があります。2つのカスタムクラスを新しいユニットに移動するまで、すべてがうまく機能します...

上記のコードはメイン プロジェクト ユニットではうまく機能しますが、新しいユニットに移動するとスレッド コードが機能しなくなり、TMyClass オブジェクトを解放しようとすると AV が発生します。スレッドがまったく構築されていないと思います。そのため、スレッドを解放しようとすると AV が発生します...しかし、なぜですか? コードがどのユニットにあるかは問題ではありません...

ユニット1:

ユニット2:

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

delphi - 特定のクラスに Clone() を実装する最良の方法

私の特定のクラスでは、オブジェクトの独立したコピーを返す関数TPersistentを提供したいと思います。Clone

Cloneすべての子孫に関数を実装せずに、子孫でこれを正しく機能させることは可能ですか?

これは、不明なフィールドのクローン作成やディープ クローン作成 (RTTI を使用して行うことができます) に関するものではありません。以下の最小限の例では、関数を配置したい場所を確認できますClone

データのコピーに使用Assign()するため、どの子孫でも機能します。問題はコンストラクタです。コメントを参照してください。その子孫の正しいコンストラクターを呼び出すにはどうすればよいですか? それが非常に難しい場合は、 をオーバーライドせずにコンストラクタをオーバーライドする子孫はないと想定しても問題ありませCloneん。

出力は

したがって、正しいクラスが出てきました。この最小限の例では正しく動作しますが、残念ながら、必要な初期化は行われませんでした (2 回表示されるはずです)。

私はそれを明確にし、あなたが私のサンプルコードを気に入ってくれることを願っています:) -他のコメントや改善点も感謝します. 私のAssign()実装は大丈夫ですか?