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

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

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

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

class - クラス内でクラスのプロパティを作成する方法は?

Delphi XE6 では、TAccountSearch というクラスを作成しています。少数のプロパティと、TObjectList のクラスがあります。私の問題は、TObjectList クラスをプロパティとして公開できないように見えることです。

コード スニペット... TObjectList に使用するクラスを作成する

次に、TObjectList のインスタンスを含むクラスを作成します...

TAccountSearch.SearchPhrase は有効なプロパティです。TAccountSearch.MyList は違います....
accountSearch クラスから、呼び出しプログラムにプロパティとして SearchHits へのアクセスを与えるにはどうすればよいですか? 次に、PROPERTY 行に WRITE 定義を含めないと、プロパティは読み取り専用と見なされます。
それは正確ですか?それは読み取り専用のプロパティを作成する適切な方法ですか?

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

delphi - TObjectList のサブアイテム タイプを取得するにはどうすればよいですかDelphiで純粋にRTTI情報によって(つまり、実際のオブジェクトインスタンスを使用せずに)?

TObjectList<T>RTTI を使用して任意の Delphi オブジェクトをストリーミングするための汎用コードを実装しています。これを機能させるには (より具体的には、読み込み部分を機能させるために)、フィールドのサブアイテム タイプを取得する必要があります。実際のオブジェクト インスタンスを使用せずに。

実際のオブジェクト インスタンスを使用しないという要件の明白な理由は、ストリームからオブジェクトをロードする場合 (ロードされるオブジェクトのクラス タイプの知識のみに基づいて)、インスタンスがないことです。ロードが完了する前にすべて利用可能です。むしろ、問題のクラスの純粋な RTTI データにのみアクセスできます。

ロードできるようにしたいクラスの例は次のとおりです。

私が望むのは、test_listフィールドが一般的なTList<T>場所であると結論付けられることTですstring(つまり、サブアイテムのストリームから期待されるデータを知るため)。

クラスが代わりに次のようになった場合:

フィールドのRTTI クラスのElementType()メソッドを使用して、純粋に RTTI を介してこの情報を抽出できますが、対応するそのような明示的な RTTI タイプが見つかりません。TRttiDynamicArrayTypetest_arrTObjectList<T>

別のスタック オーバーフローの質問 ( Delphi Rtti: how to get objects fromTObjectList<T> ) は関連していますが、実際には、RTTI データが反映するオブジェクトの実際のインスタンスを使用して、サブアイテムに到達するために「チート」します。これらのサブアイテムは、私がこれを知っている必要がある時点では存在しないため、私にはオプションではありません.

ただし、オブジェクトのインスタンス化に関係なく、コンパイル時にすべての型情報が明らかに存在するため、クラスの RTTI 情報のみを使用してこれを行う方法があるはずです。

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

class - TObjectList<> 項目取得エラー

Delphi XE8 で TObjectList クラスを作成しようとしていますが、値を取得しようとするとエラーが発生します。

コンパイラ エラー メッセージ:「[dcc32 エラー]: プライベート シンボル {System.Generics.Collections}TList.GetItem にアクセスできません」

これが私のコードです:

テストコードは次のとおりです。

どうすればそれを機能させることができますか?

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

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 で使用して順序を維持する新しいクラスを作成しますか?

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

delphi - TObjectList の Contains、Remove、IndexOf などのメソッドの使用方法

T が次のコード例のようにカスタム型の場合ContainsRemoveやクラスIndexOfのようなメソッドを使用すると問題が発生します。TObjectList<T>TSocket

カスタムTSocketタイプを実装することから始め、次のようなタイプのリストでそれを使用しようとしましたTObjectList<TSocket>:

私はそれを期待しContainsIndexOfの手順をRemove利用し、この手順の実装を上書きしました。したがって、次の実装をTSocket クラスに追加しました。EqualsTMyObjectEquals

このコードを使用するContainsと、false が返されますが true である必要があり、IndexOf-1 が返されますが 0 である必要がありRemove、オブジェクトは削除されませんが、削除する必要があります。Equalsこれらのメソッドは、使用していないメソッドを使用すると予想TSocketしていました。TObjectListドキュメントを読んだ後、のコンストラクターを IComparer の実装で呼び出すことができることがわかりました。したがって、メソッドTEqualityComparer<TSocket>を使用するために を実装しました。Equals残念ながら、 のコンストラクターはインターフェイスTObjectListをサポートしていませんIEqualityComparerが、代わりにインターフェイスを使用していIComparerます。

質問: Delphi でカスタム型を使用する場合ContainsRemoveIndexOfof などのメソッドはどのように使用すればよいですか? TObjectList<T>他のプログラミング言語 (Java や C# など) ではEquals、リスト型のオブジェクトを比較するために使用されます。オブジェクトを比較するために Delphi が使用するメカニズムは何ですか?

更新 包括的なフィードバックをお寄せいただきありがとうございます。質問とコードを適切に更新しました。コードを実行するときの私の期待を詳しく説明し、意図をより明確にするためにさらにコードを追加しました。@DavidHeffernan:実装は確かに間違っていました。参照カウントについて詳しく知るために、TInterfacedObject に継承を追加しました。コードから TInterfacedObject を削除しました。

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

delphi - Delphi は TObjectList のような var パラメータを送信しました

授業がある

そして、私はタイプを持っています

次に、このタイプを使用しようとします

パラメータのような TObject リストを送信しようとすると

「実際の var パラメーターと正式な var パラメーターの型は同一でなければなりません」というエラーが表示されます。私が間違っていることは何ですか?

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

delphi - TObjectList を解放するとコントロールも削除されるのはなぜですか?

TObjectList を使用して、ラベルの特定のリストを処理します。しかし、Try Final で推奨される .Free を実行すると、リストからコントロールも削除されます。

3 つのラベルを使用した簡単な例:

この場合、このコードを実行すると、ラベル コントロールが欠落してしまいます。フォームから削除され、デバッグでコントロールが nil であることがわかります。

TObjectList を .Free にするべきではないのでしょうか? TObjectlist を解放し、コントロールを保持するにはどうすればよいですか?