問題タブ [tobjectlist]
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.
json - Disappearing SubDetail TObjectList when JSonToObject
this is my first question. Sorry my english.
I have a classes like this:
I trying convert TSFis_M Object to JSon and Revert to Object for my datasnap application. I use converts and reverters for my datatypes (TObjectList and TObjectList)
And finally for example i put 1 Button and 2 Memo on the form. And i try My created Object convert to Json, Json.ToString to Memo1. And Convert that JSonValue to Object.
But when i do this. TSFis_S is disappearing. In first step (ObjectToJSon) no problem.
But when i trying revert to Object reverter goes wrong.
I can't found problem. What's my fault.
Thanks
PS: If i didn't explain, sample code here: http://goo.gl/3QnSw
class - クラス内でクラスのプロパティを作成する方法は?
Delphi XE6 では、TAccountSearch というクラスを作成しています。少数のプロパティと、TObjectList のクラスがあります。私の問題は、TObjectList クラスをプロパティとして公開できないように見えることです。
コード スニペット... TObjectList に使用するクラスを作成する
次に、TObjectList のインスタンスを含むクラスを作成します...
TAccountSearch.SearchPhrase は有効なプロパティです。TAccountSearch.MyList は違います....
accountSearch クラスから、呼び出しプログラムにプロパティとして SearchHits へのアクセスを与えるにはどうすればよいですか? 次に、PROPERTY 行に WRITE 定義を含めないと、プロパティは読み取り専用と見なされます。
それは正確ですか?それは読み取り専用のプロパティを作成する適切な方法ですか?
delphi - TObjectList のサブアイテム タイプを取得するにはどうすればよいですかDelphiで純粋にRTTI情報によって(つまり、実際のオブジェクトインスタンスを使用せずに)?
TObjectList<T>
RTTI を使用して任意の Delphi オブジェクトをストリーミングするための汎用コードを実装しています。これを機能させるには (より具体的には、読み込み部分を機能させるために)、フィールドのサブアイテム タイプを取得する必要があります。実際のオブジェクト インスタンスを使用せずに。
実際のオブジェクト インスタンスを使用しないという要件の明白な理由は、ストリームからオブジェクトをロードする場合 (ロードされるオブジェクトのクラス タイプの知識のみに基づいて)、インスタンスがないことです。ロードが完了する前にすべて利用可能です。むしろ、問題のクラスの純粋な RTTI データにのみアクセスできます。
ロードできるようにしたいクラスの例は次のとおりです。
私が望むのは、test_list
フィールドが一般的なTList<T>
場所であると結論付けられることT
ですstring
(つまり、サブアイテムのストリームから期待されるデータを知るため)。
クラスが代わりに次のようになった場合:
フィールドのRTTI クラスのElementType()
メソッドを使用して、純粋に RTTI を介してこの情報を抽出できますが、対応するそのような明示的な RTTI タイプが見つかりません。TRttiDynamicArrayType
test_arr
TObjectList<T>
別のスタック オーバーフローの質問 ( Delphi Rtti: how to get objects fromTObjectList<T>
) は関連していますが、実際には、RTTI データが反映するオブジェクトの実際のインスタンスを使用して、サブアイテムに到達するために「チート」します。これらのサブアイテムは、私がこれを知っている必要がある時点では存在しないため、私にはオプションではありません.
ただし、オブジェクトのインスタンス化に関係なく、コンパイル時にすべての型情報が明らかに存在するため、クラスの RTTI 情報のみを使用してこれを行う方法があるはずです。
class - TObjectList<> 項目取得エラー
Delphi XE8 で TObjectList クラスを作成しようとしていますが、値を取得しようとするとエラーが発生します。
コンパイラ エラー メッセージ:「[dcc32 エラー]: プライベート シンボル {System.Generics.Collections}TList.GetItem にアクセスできません」
これが私のコードです:
テストコードは次のとおりです。
どうすればそれを機能させることができますか?
delphi-xe - TObjectList の並べ替え
いくつかの規則に従って、TObjectList の順序を変更する必要があります。どうすればこれを達成できますか?
したがって、ScrollBox に動的にパネルを追加します。それらを追加するときは、将来の使用のために、実行時に追加される順序で ObjectList にも追加します。次に、スクロール ボックス内のパネルをドラッグ アンド ドロップで再編成できます。ドラッグ/ドロップによって実行時に設定されるのと同じ順序を ObjectList に反映させたいと思います。
これが私のコードです:
ReOrderPanels プロシージャで何をすればよいですか? ScrollBox のパネルを下から上に新しい TObjectList (PanelListTMP) にフィードし、PanelList をクリアして PanelListTMP から再度追加することを考えていましたが、それを行うとエラーが発生します: アクセス違反、および EInvalidPointer - 無効なポインター操作
だからこれは私が考えたことです:
したがって、ObjectList は実際のオブジェクトへのポインターを格納しているため、最初の ObjectList をクリアすると、実際のオブジェクトが解放されるため、2 番目の ObjectList には実行できなくなったポインターのリストが含まれていると思います...私は私が望むものを達成しますか?
したがって、ButtonClick では、次の順序でパネルを含む ObjectList を取得します。
ScrollBox 内にパネルをドラッグ アンド ドロップした後、(ScrollBox 内で) このような順序になる可能性があります。
しかし、ObjectList では、順序は以前と同じです...
繰り返しますが、scrollBox からのパネルの順序に従って ObjectList を順序付けできるようにしたいと考えています。再注文手順では、実際にすべてのパネルを希望の順序で取得します。ObjectList で同じ順序にする必要があるだけです。
これを行う他の方法はありますか?他に、TPanel の横にインデックスを保持し、それを ObjectList で使用して順序を維持する新しいクラスを作成しますか?
delphi - TObjectList の Contains、Remove、IndexOf などのメソッドの使用方法
T が次のコード例のようにカスタム型の場合Contains
、Remove
やクラスIndexOf
のようなメソッドを使用すると問題が発生します。TObjectList<T>
TSocket
カスタムTSocket
タイプを実装することから始め、次のようなタイプのリストでそれを使用しようとしましたTObjectList<TSocket>
:
私はそれを期待しContains
、IndexOf
の手順をRemove
利用し、この手順の実装を上書きしました。したがって、次の実装をTSocket クラスに追加しました。Equals
TMyObject
Equals
このコードを使用するContains
と、false が返されますが true である必要があり、IndexOf
-1 が返されますが 0 である必要がありRemove
、オブジェクトは削除されませんが、削除する必要があります。Equals
これらのメソッドは、使用していないメソッドを使用すると予想TSocket
していました。TObjectList
ドキュメントを読んだ後、のコンストラクターを IComparer の実装で呼び出すことができることがわかりました。したがって、メソッドTEqualityComparer<TSocket>
を使用するために を実装しました。Equals
残念ながら、 のコンストラクターはインターフェイスTObjectList
をサポートしていませんIEqualityComparer
が、代わりにインターフェイスを使用していIComparer
ます。
質問: Delphi でカスタム型を使用する場合Contains
、Remove
やIndexOf
of
などのメソッドはどのように使用すればよいですか? TObjectList<T>
他のプログラミング言語 (Java や C# など) ではEquals
、リスト型のオブジェクトを比較するために使用されます。オブジェクトを比較するために Delphi が使用するメカニズムは何ですか?
更新 包括的なフィードバックをお寄せいただきありがとうございます。質問とコードを適切に更新しました。コードを実行するときの私の期待を詳しく説明し、意図をより明確にするためにさらにコードを追加しました。@DavidHeffernan:実装は確かに間違っていました。参照カウントについて詳しく知るために、TInterfacedObject に継承を追加しました。コードから TInterfacedObject を削除しました。
delphi - Delphi は TObjectList のような var パラメータを送信しました
授業がある
そして、私はタイプを持っています
次に、このタイプを使用しようとします
パラメータのような TObject リストを送信しようとすると
「実際の var パラメーターと正式な var パラメーターの型は同一でなければなりません」というエラーが表示されます。私が間違っていることは何ですか?
delphi - TObjectList を解放するとコントロールも削除されるのはなぜですか?
TObjectList を使用して、ラベルの特定のリストを処理します。しかし、Try Final で推奨される .Free を実行すると、リストからコントロールも削除されます。
3 つのラベルを使用した簡単な例:
この場合、このコードを実行すると、ラベル コントロールが欠落してしまいます。フォームから削除され、デバッグでコントロールが nil であることがわかります。
TObjectList を .Free にするべきではないのでしょうか? TObjectlist を解放し、コントロールを保持するにはどうすればよいですか?