掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
アクセラレータキーの反応 (ID:29714)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
KHE00221さん > コンポーネント化しなくても 毎度毎度、KHE00221さんのレスは、お勉強になります。 数枚のパネルが乗っているフォームなので、特定のパネルに対してのみ 継承したコンポーネントとして利用できないのは、いまいちなんですが、 まとめてコンポーネントの動作を差し替えしたいような場合に使える とても便利な技かと思います。 いつか使える日がくると信じて、メモしておきました。 Fusaさん > 方法2のTPanelのメッセージフックって、どうやるんでしたっけ? > Formのwndproc置き換えならよくやったのですが。 Delphi2の頃からのコンポーネントをそのまま使っているだけなのですが、 このようにメッセージ処理を差し替えています。 OldWndProc := GetWindowLong(Panel1.Handle, GWL_WNDPROC); SetWindowLong(Panel1.Handle, GWL_WNDPROC, Longint(NewWndProc)); 今、Delphi5を使っており、TControl.WindowProc を差し替えるだけで 同じコトが実現できますが、まぁ、コンポーネントを書き換えるのも めんどくさくて(めんどくさいばっかり)、これをそのまま使ってます。 んで、方法2を今風に書いてみるとこんな感じ type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private OldWndProc: TWndMethod; procedure NewWndProc(var Message: TMessage); end; procedure TForm1.NewWndProc(var Message: TMessage); begin if Message.Msg <> CM_DIALOGCHAR then begin OldWndProc(Message); end; end; procedure TForm1.FormCreate(Sender: TObject); begin OldWndProc := Panel1.WindowProc; Panel1.WindowProc := NewWndProc; end; procedure TForm1.FormDestroy(Sender: TObject); begin Panel1.WindowProc := OldWndProc; end; cHotkeyPrefixを取り除く関数を作るのと、どっちが楽かっていうと、 ホントは、こっちが楽だったりする。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.