問題タブ [tcollectionitem]
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 - Delphi エディタで TCollectionItem のラベルを変更する
私が取り組んでいるコンポーネントは、TCollection を使用して他のコンポーネントへのリンクを保持しています。アイテムがデザイナーで編集されると、ラベルは次のようになります。
意味のあるラベル (おそらくリンクされたコンポーネントの名前) を追加するにはどうすればよいですか? 例えば
おまけとして、コンポーネントをダブルクリックしたときにコレクション エディターが表示されるようにする方法を教えてください。
delphi - TCollectionItemの継承
アイテムのコレクションをTCollectionに保存することを計画しています。
各アイテムは派生しTBaseItem
、TCollectionItemから派生します。
これを念頭に置いてTBaseItem
、アイテムが要求されたときにコレクションが返されます。
これで、それぞれTBaseItem
にCalculate
関数が作成されます。TBaseItem
これでは、内部変数が返されるだけですが、TBaseItem
関数の各派生でCalculate
は、異なるパラメーターのセットが必要です。
コレクションにはCalculate All
、コレクションアイテムを繰り返し処理して各Calculate
関数を呼び出す関数があります。明らかに、各関数に正しいパラメーターを渡す必要があります。
これを行うには、次の3つの方法が考えられます。
基本クラスの計算関数ごとに仮想/抽象メソッドを作成し、派生クラスでオーバーライドします。これは、オブジェクトを使用するときに型キャストが不要であることを意味しますが、多くの仮想メソッドを作成し、大きなif...elseステートメントが型を検出し、正しい「calculate」メソッドを呼び出す場合、コードを記述するときに、どの型をどの型に対して呼び出すかを知る必要があるため、calculateメソッドを呼び出すとエラーが発生しやすくなります。 Error/EAbstractErrorを回避するためにパラメータを修正してください。
で可能なすべてのパラメーターを使用してレコード構造を作成し、これを「計算」機能のパラメーターとして使用します。これには、必要なすべてのパラメーターを含めることができ、潜在的に非常に長いパラメーターリストを回避できるため、これを「すべて計算」関数に渡すという追加の利点があります。
TBaseItemを型キャストするだけで、正しいcalculateメソッドにアクセスできます。これにより、最初のメソッドと比較して、TBaseItemがかなり整理されます。
このコレクションを処理するための最良の方法は何でしょうか?
delphi - 出来ますか?任意のコンテンツを含む TPanel コンテナのストレージを実装する TCollection の子孫
Delphi でのコンポーネント開発は初めてなので、知りたいのですが、自分のタスクを実装することはまったく可能ですか。
TScrollBox に基づいてビジュアル コンポーネント (ユーザー コントロール) を作成する必要があります。これは TPanel の束を表し、すべてのパネルはその TScrollBox 内で「上」に配置され、異なる高さを持つことができます。これは TCollection (追加、削除、並べ替え) として機能する必要があり、設計時にユーザーがこれらのパネルに他のコントロールを追加できるようにする必要があります。
コンポーネント用にこれらのクラスを作成しました:
このコンポーネントは設計時に正常に動作しています。スタック内のパネルを追加/削除できます。任意のパネルにコントロール (TCheckbox など) をドロップすると、「そのパネルが所有」と表示されます: たとえば、このチェックボックスをドラッグできませんパネル外。
ただし、このチェックボックスは DFM ファイルに保存されず、[構造] ウィンドウには表示されません。
TPanel のコンテンツを手動でシリアライズ/デシリアライズする必要があると思いますが、その方法がわかりません。インターネット上で例が見つかりません。そのような実装が可能であれば、ガイドラインを教えてください。
追加:
これは、3 つのパネルをグリッドに追加した後の DFM ファイル フラグメントの外観です。
ご覧のとおり、すべてのアイテムは空ですが、チェックボックスとラジオボタンをアイテム #3 にドロップしました。
c++ - TCollection の再帰読み取り
私は再帰が非常に苦手で、これまで使用したことがありません。私はそれの理論を知っています..それが役立つというわけではありません:))私の問題では、TCollectionとTCollectionItemなどを含むTCollectionの構造があります..すべてのTCollectionItemを読み取る再帰関数を作成する必要があります。ここにグラフィカルなビューがあります:
TCollection->TCollectionItem(s)->TCollection->TCollectionItem(s)
TCollection は、その下に 1 つまたは 2、3 個の TCollection を持つことも、何も持たないこともできます。
次にいくつかの例を示します。
TCollection->TCollectionItem
TCollection->TCollectionItem->TCollection->TCollectionItem->TCollection->TCollectionItem
など..
私が問題をひどく説明したかどうか教えてください..何か不明な点があれば聞いてください:)
ご支援ありがとうございます!
delphi - TCollectionに追加されたときにTCollectionアイテムのインデックス番号を取得する
コレクションアイテムをコレクションに追加すると、インデックスはゼロベースになることを知っています。これを1ベースにして、。というプロパティに値を表示したいと思いますId
。誰かが私がコードでこれについてどうやって行くことができるか教えてもらえますか?
delphi - Delphi の TCollectionItem とデストラクタ メソッド
ねえ、次の例のデストラクタの実装が正しくて同じかどうか誰か教えてくれませんか?
// //これら 2 つは同じものですか?
delphi - TCollectionItem がデフォルトのプロパティ値を初期化しない
私は何時間もこのクレイジーな問題と戦ってきましたが、どこにも行き着きませんでした. TCollection を使用する 2 つの完全に異なるプロジェクトでこの問題が発生します。新しいコレクション アイテムが追加されたら、そのアイテムの値を初期化する必要があります。ただし、デフォルトはまったくありません。アイテムのコンストラクターとコレクションの add 関数の 2 つの完全に異なる場所にそれらを設定していますが、どちらも機能していません。アイテムがあれば値を設定できますが、デフォルト値を設定する必要があります。私は過去にコレクションを行ったことがありますが、この問題は一度もありませんでした。ここに何かが欠けているに違いありません...
delphi - TCollectionのアイテムを並べ替えるにはどうすればよいですか?
選択した行を内の1つのインデックスの上または下に移動するMoveItemUpメソッドとMoveItemDownメソッドを実装しようとしていTCollection
ます。
TCollectionのサブクラスに追加された次のコードは機能しません。
リスト内のコレクションアイテムを並べ替える方法を提供するDelphiIDE自体によって設計時に行われるため、これは実行時に可能である必要があると確信しています。オブジェクトを作成、破棄、または割り当てずに、既存のオブジェクトを並べ替えるだけでこれを実行したいと考えています。これは、Classes.pas TCollectionのサブクラスから可能ですか?(そうでない場合は、ソースクローンから独自のTCollectionを作成する必要がある場合があります)
delphi - 名前付きサブコンポーネントでコンポーネントを作成しますか?
コンポーネントでサブコンポーネントを生成および管理するための基本を知る必要があります。私はもともと を作成してこれをTCollection
試し、それぞれに名前を付けようとしましたTCollectionItem
。しかし、私が望んでいたほど簡単ではないことを学びました。
だから今、私はこのプロジェクトをゼロからやり直すつもりです。これらのサブコンポーネントはビジュアル コンポーネントではなく、 に基づいているだけで、ディスプレイやウィンドウを持つべきではありませんTComponent
。これらのサブコンポーネントを保持するメイン コンポーネントも に基づいていTComponent
ます。したがって、ここには視覚的なものはまったくありません。また、これらのサブコンポーネントごとに (設計時に) フォームに小さなアイコンを表示したくありません。
これらのサブコンポーネントをコレクションのような方法で維持および管理できるようにしたいと考えています。重要なことは、これらのサブコンポーネントを作成し、名前を付けて、フォーム ソースに追加する必要があることです。これは、たとえばメニュー項目と同じです。そもそもこれがアイデアの要点であり、名前を付けられない場合、このアイデア全体がカプットになります。
もう 1 つ重要なことは、すべてのサブコンポーネントの親であるメイン コンポーネントは、これらのサブコンポーネントを DFM ファイルに保存できる必要があるということです。
例:
これらのサブアイテムのいずれかにアクセスする代わりに、次のようにします。
代わりに次のようなことをしたいと思います:
したがって、各サブアイテムの ID を知っていることに頼る必要はありません。
編集:
元のコレクションがどのように機能するかを確認できるように、元のコードを含める必要があると感じました。以下は、完全なユニットから取り除かれたサーバー側のコレクションとコレクション アイテムです。
delphi - TCollection から継承したクラスの ItemClass を変更する方法
TCollection から継承したクラスがあり (「TMyCollection」と呼びます)、そこから新しいクラスを継承する必要があります (「TMyItems」と呼びます)。
通常、TCollection のコンストラクターで ItemClass タイプを渡しますが、私の場合、TMyCollection のコンストラクターは、ItemClass をとらず、所有者のみを取る新しいコンストラクターでオーバーライドされます。
継承されたコンストラクターが ItemClass パラメーターを受け入れない場合、「TMyItems」の ItemClass を変更する方法を知る必要があります。
よろしく。