問題タブ [object-inspector]
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.
c# - Delphi ObjectInspector でビジュアル .NET コンポーネントにフォーカスする方法
ビジュアル .NET コンポーネントを Delphi プロジェクトに含めています。このコンポーネントを実行時に使用すると、Delphi デザイナが正しく連携しませんが、正常に動作します。デザイナーでこのコンポーネントをクリックするたびに、コンポーネント自体にメッセージが送信されます (影響を確認できます)。
しかし、IDE デザイナのオブジェクト インスペクタでこのコンポーネントの公開されたプロパティを確認し、フォーム上でコンポーネントのサイズを変更してドラッグ アンド ドロップしたいのです。
TWinControl.WndProc メソッドから継承し、WM_MOUSEACTIVATE および WM_PARENTNOTIFY メッセージ (これらのメッセージは、デザイナーでコンポーネントをクリックすると送信されます) をキャッチし、このようなことを行うことを検討しました...
デザイナーでコンポーネントをクリックすると、BorderWidth が 15 に設定されます。しかし、IDE の Object Inspector ではまだフォーカスされていません。
このプロジェクトの追加情報:
Delphi XE7 と Visual Studio 2013 を使用しています... .NET では、コンポーネントに ClassLibrary プロジェクトを使用しています。ビジュアル C# コンポーネントを含むUserControlからクラスを継承します。この ClassLibrary は、「regasm /tlb /codebase ClassLibrary.dll」を介して登録する DLL ファイルにコンパイルされます。さらに、tlibimp.exe を使用して、Delphi 用の pas ファイルを生成します。TOleControlから派生し、プロシージャ WndProc をオーバーライド/実装 するWrapperclass TDotNetControlを作成しました。
そのクラス TDotNetControl から、( TOleControlからの) InitControlData と CreateInstance をオーバーライドするクラスTMyDotNetControlを派生させます。TMyDotNetControlは、私がビルドして Delphi IDE 内にインストールするパッケージにパックされています。インストール後、デザイナのツールボックスからクラスTMyDotNetControlを選択し、それを WinForm にドラッグ アンド ドロップできます。これは DLL ファイルからコンパイルされたクラスであるため、コンポーネントは実行時に表示されるのと同じようにデザイナーに表示されます (プロシージャを呼び出したり、プロパティを設定したりしない場合)。
そして、それは物事が混乱するときです。これをドラッグしてサイズを変更できるのは 1 回だけです。コンパイルされたコンポーネントをもう一度クリックすると、コンポーネント自体で MouseEvent がトリガーされます。つまり、mouseEvent ハンドラーが .NET で実装されている場合、そのハンドラー メソッドが呼び出されて実行されます (デザイナーでも)。したがって、私がやりたいことは、IDE のクリック メッセージをキャッチし、そのメソッドを作成して、デザイン時にオブジェクト インスペクターで編集するコンポーネントに焦点を当てることです。(オブジェクト インスペクターはTMyDotNetControlの公開されたプロパティを表示します)
delphi - 別のフォームから DataModule のイベントにアクセスする (デルファイ設計時)
TButton.OnClick
コンポーネントのイベント( As )をデータモジュールで定義されたプロシージャ(設計時)にリンクする方法があるかどうか知りたいです。現時点では、実行時にこれを行っています。
目標は、オブジェクト インスペクタ ウィンドウのドロップダウン リストで提案された MyDataModule.MyOnClickEvent を取得することです。知識を共有してくれるすべての人に前もって感謝します:D
注 1: 同様の質問がありますが、設計時に同じタスクを実行する方法についての情報はありません: Access an event on a DataModule from another Form
注2: 私が見つけた唯一の方法は、親フォームですべてのイベントを定義することですが、よりクリーンなソリューションがあることを望んでいました
delphi - 別のクラスを TComponent の子孫クラスのプロパティとして設定する方法
最初のコンポーネントを定義していますが、TMyOptions クラス インスタンスを使用して構成できるようにしたいと考えています。
コンストラクター内の各コンポーネントは、次の例のように定義された TMyOptions のインスタンスを作成します。
そのため、オブジェクト インスペクターで TMyOptions を確認できますが、値を変更することはできません。誰かが私の目標を達成するための正しい方法を教えてもらえますか? みんなありがとう。
delphi - 複数のアイテムが選択されている場合、一部のプロパティがオブジェクト インスペクタに表示されないのはなぜですか?
複数のアイテムを選択すると、一部のプロパティがオブジェクト インスペクタから消えることに気付きました。
なぜこのようなことが起こるのでしょうか? また、コンポーネントを作成するときにこの動作を制御するにはどうすればよいですか?
例:
フォームに 2 つのボタン ( TButton
) を追加し、そのうちの 1 つを選択します。
オブジェクト インスペクタでは、TButton
公開されているすべての のプロパティを確認できます (プロパティもあることに注意してくださいConstraints
)。
他のボタンを現在の選択に追加します (Shiftキーを押しながらクリックします)。
ご覧のとおり、一部のプロパティはObject Inspectorから非表示になっています( が表示されなくなっていることに注意してくださいConstraints
)。
delphi - TCollectionItem プロパティ エディタをオブジェクト インスペクタのオブジェクトのリストとして登録する方法を教えてください。
コンポーネントで公開されたコレクションがあり、アイテムのインデックスを保存する方法を使用せずに、オブジェクト インスペクターでコレクション アイテムを選択できるようにしたいと考えています。type のプロパティをアイテム (TCollectionItem) に公開しましたが、オブジェクト インスペクタではサブコンポーネントとして表示され、別のプロパティを選択するオプションはありません。アイテムの一覧を表示できるようにエディタを登録しましたが、アイテムのドロップボックスをクリックするとエラーが発生します。以下は、問題の例示的な抜粋です。
プロパティ エディタの下
プロパティ ドロップボックスを開くと、「無効な TypeCast」というエラーが表示されます。
このプロパティのプロパティ エディタを正しく実装するにはどうすればよいですか?