0

さて、問題は次のとおりです。最近、 GroupBox 内のボタンでアクセラレータ キー (別名HotKey ) を使用できないという問題に遭遇しました。ほんの数分前にその理由がわかりましたが、今では唯一の問題は、この理由が以前よりもさらに困惑することです。効果は、デザインタイム中にダブルクリックで影響を受けるボタンをダブルクリックすると、「プロパティとメソッドに互換性がありません」というエラーが表示されることです。

MethodName is VKPInputBtnClick、実際にはユニットのメソッドとしてではなく、関数として宣言されています。

私が困惑しているのはOnClick、VKPInputBtn のイベント ハンドラーをメソッドにまったく割り当てていないことです。

プログラムをコンパイルでき、実行時に問題が発生しない可能性はあります...しかし、デザイン時にボタンをダブルクリックすると、このような厄介な問題が発生します....

解決策はありますか?IDE を再インストールしますか?

どんな助けでも大歓迎です...

4

6 に答える 6

4

デフォルトのイベント プロパティが設定されていないコントロールをダブルクリックすると、IDE によってそのプロパティが割り当てられます。(これは、コード エディターに移動するための単なるショートカットではありません。それは ですF12。) IDE は、目的の名前を持つ関数のソース コードを検索します。見つからない場合は、それを含むフォームにメソッドを作成し、それをコンポーネントのイベント プロパティに割り当てます。ただし、正しい名前のものが見つかった場合、新しいものを作成せずに割り当てを試みます。

どうやら問題は、IDE があなたのケースで見つけたものが、それに付随するように見えるイベントと互換性がないことです。おそらくバグです — 非メソッドを選択するべきではありません — しかし、IDE がイベント ハンドラーに選択するのと同じ名前をスタンドアロン関数に選択する頻度が低いことを考えると、めったに遭遇しません。

いくつかのオプションがあります:

  • コントロールのイベント ハンドラーVKPInputBtnClickのように見えないように名前を変更します。OnClickVKPInputBtn
  • フォームVKPInputBtnClickクラスのメソッドにする。
  • フォーム クラスで新しい メソッドを手動で宣言するVKPInputBtnClickと、IDE がスタンドアロン関数の代わりにそれを選択する可能性があります。
  • OnClickオブジェクト インスペクタのプロパティに別の名前を入力し、それをダブルクリックします (または を押しますEnter)。IDE はその名前でメソッドを作成します。
于 2010-11-09T14:49:47.163 に答える
1

.pas ファイルの宣言セクションと実装セクションからハンドラーを削除してみてください (コードが含まれている場合は、どこかにコピーしてください)。次に、ボタンのハンドラーを再作成してみます。場合によっては、IDE が同期しなくなることがあります。できることは、既知の状態にリセットすることだけです。

それでもうまくいかない場合は、フォームを閉じて再度開くか、.dfm ファイルからハンドラーを削除できるかどうかを確認してください。

于 2010-11-09T11:50:51.933 に答える
0

コンポーネントは、設計と実行時に異なる動作をします。desgintimeでボタンをダブルクリックすると、OnClickハンドラーが作成および追加されます。これが、動作が異なる理由を説明しています。

うまくいけば、私はあなたの質問を正しく理解しています。フォームにコンポーネントがあり、自動的に作成されたイベントハンドラーが予想されるイベントハンドラーとは異なるタイプであるため、正しいイベントハンドラーを割り当てることができませんか?

その場合は、独自のイベントハンドラーを作成して割り当てます。フォームのOnCreateで割り当てることもできます。dfmを介した割り当てが成功しない場合。

于 2010-11-09T11:33:35.213 に答える
0

いずれにせよ、質問には回答があり、このエラー メッセージが RAD Studio XE のバグであることは明らかです。これは、IDE がオブジェクトの実際のプロパティと必要なプロパティを間違った方法で比較するためです。

皆様、ご応募誠にありがとうございました。

EDN QC ケース: #89543


ノート:

これは、VKPInputBtnCLick 関数のアクセラレータ機能を使用するために使用するアプローチです。
- このコード スニップからメッセージを使用します: Alt キー処理アルゴリズム
- VK_TAB を VK_LMENU に変更します (左側の ALT )
- ALT メッセージがキャプチャされたら、グローバルな一意の値を変数に設定します
- FormKeyPress イベント ハンドラで、一意のグローバル変数の値が I の値と一致するかどうかを確認します前に設定 - 関数を実行します。

これが喜んでこれを行う他の人に役立つことを願っています。また、この機能を実現するための洗練されたクリーンな方法も歓迎します。

質問を回答済みとしてまだ設定していません。

于 2010-11-09T20:02:35.177 に答える
0

実際には、Unit のメソッドとしてではなく、関数として宣言されています。

メソッド ハンドラーは、関数ではなく、プロシージャである必要があります。したがって、機能しません。

トビーがずっと前に言ったように(しかし、あなたは明らかに聞いていませんでした):

.pas ファイルからハンドラーを削除してみてください。次に、ボタンのハンドラーを再作成してみてください。

于 2010-11-11T16:06:40.827 に答える
0

これが実際のバグであることが判明した場合は、Embarcadero に報告することを忘れないでください。IDE のツール メニューから QA アプリにアクセスするか、Web サイトにアクセスできます。

于 2010-11-09T14:40:33.110 に答える