問題タブ [custom-component]

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 投票する
4 に答える
10796 参照

java - JSF ライフサイクルとカスタム コンポーネント

JSF でのカスタム コンポーネントの開発に関して、理解に苦しむことがいくつかあります。これらの質問の目的のために、すべてのカスタム コントロールが値バインディング/式 (リテラル バインディングではない) を使用していると想定できますが、それらの説明にも興味があります。

  1. valuebinding の値はどこで設定しますか? これはデコードで発生するはずですか?または、デコードして別の処理を行ってから、encodeBegin に値を設定する必要がありますか?
  2. 値バインディングから読み取る - 値バインディングからデータを読み取るのと、送信された値から読み取って値バインディングに入れるのはいつですか?
  3. これらすべてに関連して、フォームのアクション リスナーが呼び出されるのはいつですか? JSFライフサイクルページはすべて、さまざまなステップで発生するイベントについて言及していますが、コマンドボタンの単純なリスナーが呼び出されているだけの場合、完全にはわかりません

いくつかの組み合わせを試してみましたが、イベントのライフサイクルの基本的な誤解から来ていると思われるバグを見つけるのは常に困難です。

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

c# - ApplicationSettings をカスタム コンポーネントにデータバインドする

と を実装したカスタム コンポーネントが INotifyPropertyChangedありIBindableComponentます。

ただし、プロパティをデータバインドしようとすると、デザイナーは次の行を追加します。

TextBox の場合のようにバインディングを作成する代わりに:

IBindableComponentデザイナーは が実装されているかどうかを確認し、実装されている場合は、割り当てコードの代わりにバインディング コーディングを生成するだけだと思っていたでしょう 。

これが私のカスタムコンポーネントではなくテキストボックスで機能する理由は何ですか?

ここに私のカスタムコンポーネントがあります:

0 投票する
5 に答える
3405 参照

c# - ソース コードが更新されたときに C# コンポーネントが更新されない

私は多くのプロジェクトで解決策を持っています。1 つのプロジェクトには、いくつかのカスタム コンポーネントが含まれています。これらのコンポーネントの 1 つは、画像にタイトルを表示するために使用されます。背景の色やその他多くのことを変更できます。

問題は、コンポーネントの背景のデフォルトの色を変更するか、テキストの位置を変更することにした場合、それらの変更は、コンポーネントが使用されているソリューションの他のすべてのプロジェクトに反映されないことです。私はコンポーネントのプロジェクトをコンパイルし、他のすべてのプロジェクトはプロジェクトによってコンポーネントを参照します。

とりあえず、他のプロジェクトからコンポーネントを1つずつ外して、追加し直せばOKです。手っ取り早い方法はありますか?

更新 そのコンポーネント内に CheckBox を追加しましたが、チェックボックスはどこにでもあるようです! 罰金!ただし、プロパティにコンポーネントを変更できるタグ (背景色など) がある場合、「デフォルト」値は変更されず、代わりに古い値が変更された値としてプロパティに配置されます。そのため、プロパティ パネルの色を手動で変更していないときに追加した場合のように、古い値が設定されていることがわかります...

更新 2 代替テキスト http://img517.imageshack.us/img517/9112/oldonenewoneei0.png

更新 3:

この問題はまだここにあります。私がまだ道を見つけたいと思っていることを人々に知らせるためです。

私はあなたの提案をいくつか試しました。

  1. すべてのソリューションをクリーンアップし、カスタム コントロールを持つプロジェクトのみをビルドすると、ソリューションがビルドされます。何も変化しません (テストするために、コンポーネントの色を黄色に変更しました。何も変化しません:失敗します。
  2. 参照を削除してプロジェクトに追加し直してから、ソリューションを再構築するとします。デザイナで古い色が表示されます:失敗

私を助けたい人のために、より多くの情報と画像(上記)で質問を更新しました。

ご覧のとおり、コンポーネントの古い「コンパイル」では黄色の背景が表示されますが、(Visual Studio の左側のツールバーから) 新しいコンポーネントを挿入すると、想定される白い背景を持つ新しいコンポーネントを持つことができます...

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

delphi - TComboBox の子孫で入力時に検索を実装する方法

スタイルが csOwnerDrawFixed の TComboBox 子孫コンポーネントで「入力時に検索」動作を実装する正しい方法は何ですか?

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

jsf - ログインコンポーネントを含むJSFヘッダー?

私は JSF とそこにある多くの関連技術にかなり慣れていません。

ユーザーがログインしない限り、このヘッダーをすべてのサイトのページに簡単に含めることができるように、ロゴ、ナビゲーション リンク、およびログイン ボックスを含むヘッダーを持つ Web サイトを作成しようとしています。ヘッダーが表示されます。livejournalに似たもの。

ログインを処理するカスタム JSF コンポーネントを作成し、それを JSP フラグメントや Facelets と組み合わせるなど、いくつかのソリューションを検討しました。しかし、Google で何度も検索した結果、カスタム ログイン コンポーネントを作成しようとした人は実際には見つかりませんでした。また、このようなヘッダーの作成に関する情報はまばらです。それで、これは本当に私の問題を解決するための正しい方法ですか? より良い解決策はありますか?

前もって感謝します。

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

delphi - Delphiでのカスタムコンポーネントの再描画の問題

TLabelから派生した新しいカスタムコンポーネントを作成しました。コンポーネントは、カスタム図面をコンポーネントに追加しますが、それ以外は追加しません。コンポーネントをペイントすると、すべてが正常に機能します。ただし、再描画が必要な場合(コンポーネント上で別のウィンドウをドラッグするなど)、「ラベルパーツ」は正常に機能しますが、カスタム描画が適切に更新されません。基本的に、オーバーライドされたPaintメソッドを使用してキャンバスに直接描画しています。再描画が必要な場合、コードが描画したキャンバスの部分は黒くペイントされます。paintメソッドが呼び出されていないようです。適切に再描画するにはどうすればよいですか?

コンポーネントは基本的に次のとおりです。

更新、ペイントルーチン:

解決済み:

問題は、FloodFillの(冗長な)使用です。キャンバスが完全に表示されていない場合、塗りつぶしによってアーティファクトが発生します。塗りつぶしを削除しましたが、必要に応じて機能するようになりました。

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

delphi - 設計時に他のコントロールを受け入れるサブパネルを使用してカスタムコントロールを作成するにはどうすればよいですか?

いくつかのサブパネルを持つカスタムコントロールを作成しました。これらのサブパネルは、設計時にドロップされた追加のコントロールを受け入れるようにします。

残念ながら、デザイン時にドロップされるコントロールは、パネルではなく、カスタムコントロールに配置されます。これは、ラベルをドロップしようとすると特に表示されます。ラベルの青い点は表示されますが、キャプションは表示されません。ラベルの選択を解除すると、ラベルはまったく表示されなくなります。

簡略化されたコード(1つのサブパネルのみ):

私はここで何が間違っているのですか?

(念のため:Delphi 2007を使用しています。)

[編集]

私は今、それを別の方法で解決しました。コンポーネントにはパネルが含まれなくなりましたが、外部パネルを参照しています。これにより、実際にははるかに柔軟になりますが、欠点としては、直感的に使用できなくなります。

私が最初に説明したことを達成する方法をまだ知りたいです。これを行うオープンソースコンポーネントはどこかにないので、ソースコードを調べることができますか?

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

delphi - Delphi ビジュアル コンポーネント - TFrame ベースから離れていますか?

TFrame から作成したビジュアル コンポーネントがあります (ただし、パレットに登録するなど)。うまく機能し、IDE を使用して視覚的にビルドできるのが気に入りました。

関連するコンポーネントの「ファミリ」を作成したいと思います。そのために、このコンポーネントのスーパークラスを作成し、そこからこのコンポーネントと他のコンポーネントを継承したいと考えています。

これを行うには多くの方法があると思いますが、疑問に思っています: *.DFM ファイル (フォームまたは TFrame) を生の Object Pascalコンストラクターコードに変換するツールはありますか? ビジュアル フォームまたは TFrame を使用して開始するのが適切な場所を考えますが、ある時点でその継承を中断し、DFM ファイルからのストリーミングの本質的な代替となるものでコンストラクターを置き換えます。

いつものように、すべての考え/入力に感謝します。

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

delphi - パッケージへのフォームとフレームの追加

IDE 登録コンポーネントのパッケージを開発していますが、そのほとんどはベース TFrame クラスから派生しています。パッケージに含まれている、これらのコンポーネントによって呼び出されるさまざまなカスタム ダイアログ フォームもあります。私は Delphi 2007 で作業しています。

通常は DFM ファイルが関連付けられているフレームおよびフォーム ユニットの場合、その下に DFM ファイル (小さな [+] ツリービュー ノード エキスパンダーからアクセス可能) が常に表示されるとは限らないことに気付きました。たとえば、既存のフォームベースの PAS ファイルを (プロジェクト マネージャーで) BPL プロジェクトを右クリックして追加すると、リストに DFM ファイルが表示されません。

ただし、新規追加し、プロジェクトに新しいフォームまたはフレーム ユニットを作成すると、プロジェクト マネージャーでは典型的なネストされた 2 つのファイル アイテムとして表示されます。また、既存のフォームをプロジェクト グループ内の別のプロジェクトから問題の BPL プロジェクトにドラッグすると、そのようになります。

これは一貫しているように思われ、ユニットがフレームまたはフォームの場合に表示される両方のファイルを好みます。

これは、プロジェクト ファイルに何か問題があることを示していますか? このパッケージに既存のフォーム/フレームを間違って追加していませんか? その場合、既存のフォーム/フレーム ユニットを追加して、両方のファイルが Project Manager のリストに表示されるようにするにはどうすればよいですか?

* アップデート *

以下のアレンの提案から:

{$R *.dfm} ディレクティブをフォームのユニットに追加しようとしましたが、BPL パッケージ/プロジェクトに追加するときに DFM ファイルが強制的に表示されませんでした。{$R *.dfm} をプロジェクト ファイル自体に追加しても (これは意図したことではないと思いますが、試してみようと思いました)、どちらも機能しませんでした。この手法は EXE プロジェクトでのみ機能しますか?

おそらく(おそらく)関連して、そのディレクティブを使用してビルドしようとすると、次のようになります。

[DCC エラー] E2161 警告: リソースが重複しています: タイプ 10 (RCDATA)、ID TTESTTREEVIEW; ファイル E:\Projects\MyApp\Components\TTestTreeViewFrame.dfm リソースが保持されます。ファイル E:\Projects\MyApp\Components\TTestTreeViewFrame.dfm リソースは破棄されました。

同じファイルを「Keping」と「破棄」しますか??


後で: この「重複リソース」の問題は、 これに関連しているようです。確かではありませんが、少なくとも 1 つのインスタンスで両方が同時に発生しました。

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

delphi - TFrame 継承のリファクタリング

私からのさらに別の TFrame IDE 登録コンポーネントの質問です。助けてくれてありがとう、仲間のプログラマー。: )

ここでダリアンの TFrame 継承の提案をいじってみましょう:

仕様:

基本的に、私は IDE に登録した TFrame ベースのコンポーネントを持っていますが、それは素晴らしく機能しました。私は現在、既存のコンポーネントの非ビジュアル機能とプロパティの大部分を共有するいくつかの「姉妹」コンポーネントを開発しています。したがって、その多くを、新しいコンポーネントと古いコンポーネントの両方が継承できる親/スーパークラスに移動することは理にかなっています。

このようにTFrameの継承を「リファクタリング」する最良の方法は何ですか? (これは TForm クラスの子孫にも当てはまるかもしれませんが、確かではありません)。注意点や注意点は?

例:

たとえば、何もない新しい TFrame を作成し、そのフレーム TMyBaseFrame を呼び出してみました。次に、既存のコンポーネント (TMyFrameTreeView と呼びましょう) のクラス定義を、TFrame ではなくそれから継承するように変更しました。

正常にコンパイルされましたが、フォームにドロップしようとすると、「ClientHeight not found」(または「ClientHeight property not found」) が表示され、フォームにドロップされませんでした。関連する DFM から ClientHeight と ClientWidth を削除すると大混乱が生じ、いずれにせよサイズ変更時に置き換えられました。子孫クラスの ExplicitHeight と ExplicitWidth に気付き、継承された値からのプロパティ値のオーバーライドに関連していると考えていますが、よくわかりません。New -> Inherited Items を介してまったく新しいフレームを再作成し、すべてをコピーしても、まだ良い結果が得られていません。

ファイナルノート

これは、DFM ファイルのストリーミングや複数世代の子孫などで、すぐに厄介になる可能性があることを理解しています....これが、全体的な「注意すべきこと」の概念的な側面を求めている理由の一部ですが、特定の問題の現実世界のより単純なバージョンも同様です(私には、実行可能なはずです)。

学習の試みでハックするための小さなテスト パッケージを作成し、多くのことを学んでいますが、それはゆっくりと進んでおり、Delphi の「ジェダイ マスター」からのガイダンス/洞察は、最も高く評価されます。: )



回答の更新は後で:

以下の両方の回答が役に立ちました。同様に、通常の TFrame からの変更がない「ベース フレーム クラス」を作成し、プロパティやメソッドなどを追加する前にそれを継承すると、継承ストリーミングが非常に安定するようです。理由はわかりませんが、これまでのところそうです。