• ベストアンサー

キーボードイベントを拾う方法

toshi_ynと申します。 ImageとLabelコンポーネントを置いたパネルを動的にデスクトップに貼り付ける付箋紙ソフトを作っております。 このImageとLabelコンポーネントに対してキーボードイベントを拾う方法が分かりません。 ImageとLabelにはキーボードに関するイベントを持っていないようなので・・・。 どなたかご存知の方が居られましたら、ヒントだけでもお願いします。 こちらの環境はWindows98/C++Builder Ver.4です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#4252
noname#4252
回答No.1

ImageとLabelはフォーカスを持たないのでキーボードイベントがないのでしょう。 FormのKeyPreviewプロパティをtrueにするなどして Formでキーボードイベントを受け取ってはどうでしょう。

toshi_yn
質問者

お礼

arrowrootさん うまくいきました。 FormのKeyPreviewプロパティをtrueにして、WM_KEYDOWMのTMessage msg.WParamdeを拾うことができました。 ありがとうございました。 これからもよろしくお願いします。

関連するQ&A

  • Paintイベントが実行できません。。。

    Paintイベントが実行できません。。。  こんにちは、いつも勉強させていただいております。 質問させていただきます。どうぞよろしくお願いいたします。 新年早々とんちんかんな質問でしたら申し訳ございません^^;  開発環境Vista+VB2008になります。  デバッグ開始(再生ボタン)後、Label_E_2.Invalidate()からの Label_E_2.Paintイベントがしょっちゅう実行できなくなるので、 一時停止ボタンを押してみると毎回、別のイベント(Label_E_1.Paint)中の 決まった行が緑色になり、 「このスレッドによって現在の関数が実行された後、次に実行されるステートメントです。」 と表示されます(←理解できておりませんorz)  For Each コントロール In Panel1.Controls   If InStr(コントロール.name, "_E_") Then    コントロール.Image = My.Resources.Btn_E_OFF   End If   ↑この行でございます  Next  毎回この行でPaintイベントが止まっているようなイメージを受けております。 「コントロール」という変数の使い方がまずいのでしょうか。。。? もしかすると解放作業か何か必要になるのかな?などと試行錯誤いたしております。 以前別のプログラムで同じようなコードを作成したときは問題なかったのですが。。。  Googleで検索などいたしましても出てこず、悩んでおります。 どのような現象なのかだけでもアドバイスいただくことができれば嬉しいです。  もしお詳しい方がいらっしゃいましたら,アドバイスいただきたく どうぞよろしくお願いいたします。

  • 漢字の振り仮名を取得したい

    電話帳のようなものを作成しております。 名前をローマ字入力で入れたときの振り仮名(カタカナでも平仮名、半角もOK)を取得する方法は無いでしょうか。 Edit1で名前を入力するとLabel1->Captionにふりがなを入れたいのです・・・。 環境;Windows98SE / C++Builder V.4 何分、まだまだ初心者の領域を出られない状態ですので どなたかヒントになるようなことでも構いません。 よろしくお願いします。

  • 動的に作ったリッチエディットのイベント

    toshi_ynと申します。 動的に作ったRichEditのサイズを調整できるようにOnResizeRequestイベントを 設定したつもりなのですが、コンパイルでエラーがでます。 いろいろなTipsを見ながら作ったので、どこが間違っているのか 分からず困っております。 こちらの環境はWIn98, Borland C++Builder Ver.4です。 どなたか、助けをお願いします。 [C++ エラー] Calender1.cpp(1092): E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,TRect &))(TObject *,TRect &)' to 'void (_fastcall * (_closure )(TObject *,const TRect &))(TObject *,const TRect &)'. //--コード-- Unit.h private: // ユーザー宣言 void __fastcall TForm1::Redit_ResizeRequest(TObject *Sender,TRect &Rect); Unit.cpp //----------- Redit[Num] =new TRichEdit(Owner); Redit[Num]->Parent = pnl[Num]; Redit[Num]->BorderStyle=bsNone; Redit[Num]->ScrollBars=ssNone; Redit[Num]->ReadOnly=true; Redit[Num]->Tag=Num; Tag=Num; Redit[Num]->Width=10; Redit[Num]->Height=10; Redit[Num]->PlainText=false; Redit[Num]->Cursor=crArrow; Redit[Num]->OnMouseDown=Redit_MouseDown; Redit[Num]->OnDragOver=Redit_DragOver; Redit[Num]->OnResizeRequest=Redit_ResizeRequest; ←ここでエラー //------------- void __fastcall TForm1::Redit_ResizeRequest(TObject *Sender,TRect &Rect) { Redit[Tag]->BoundsRect = Rect; } //------------

  • KeyDownイベントで数字以外は発生しません。なぜでしょうか。

    KeyDownイベントで数字以外は発生しません。なぜでしょうか。 電卓を作っているのですが、キーボードからの対応をしているさなか大きな壁に当たりました。 フォームのKeyDownイベントでキーボードからの入力をキャッチする。 数字や演算、エンターキー。 フォームには、電卓を作るのに必要なボタンなどの配置はしてあります。 数字を表示する部分はLabel1にしています。 試験的に下記のソースで実験したところ、テンキーの数字以外、例えば演算キーをキーボードから入力すると、下記のソース通りならば、○算と表示されるはずです。しかし、なぜか数字と表示されます。 つまり、演算キーを押したにも関わらず、数字が入力されたとして処理されたということです。 なぜでしょうか。 そして、試験的にそれぞれが入力成功した時はLabelに表示されるようにしました。 Private Sub Form6_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown //↓エンターキーが押されたとき If e.KeyCode = Keys.Enter Then Label1.Text = "Enter" //↓演算キー及び点が入力されたとき ElseIf &H6A <= e.KeyCode <= &H6F Then Select Case e.KeyCode Case &H6A Label1.Text = "乗算" Case &H6B Label1.Text = "加算" Case &H6D Label1.Text = "減算" Case &H6E Label1.Text = "小数点" Case &H6F Label1.Text = "除算" End Select End If //↓delキーが押されたときの場合 If e.KeyCode = Keys.Delete Then Label1.Text = "Del" End If // ↓は数字1から9までが対象に入ります。 If &H60 <= e.KeyCode <= &H69 Then   Label1.Text = "数字" End If End Sub keycode表はマイクロソフトのキーコード定数を見て作りました。 僕がお伺いしたいのは、これらすべてを正常に対応させたいわけです。 数字、演算キー、その他のキーボード入力が正常にできるようにしたいのですが、どうもうまくできません。 なせかずべて数字ほうに行ってしまいます。これでは話にならないので、対処法はありませんか? 環境は Win7 Ultimate 64bit Visual Studio 2010 (VB) です。 何卒、よろしくお願い申し上げます。

  • リモートデスクトップ接続すると英語キーボードになる

    Windows10(1903)から仮想環境のWindows(8.1,10,2016)にリモートデスクトップ接続すると、キーボードが英語キーボード配列になります。 昨年まで利用していたWindows7からのリモートデスクトップ接続ではこのような事象は発生していませんでした。 接続先は同じ(アップデートは行っています)ため、接続元に原因があると推測してます。 同様の事象を経験し、解消できた方はいらっしゃらないでしょうか。 回避策をご存知の方はお教えください。

  • [Flex3]TileListへ動的にlabelとiconを追加する方法

    [Flex3]TileListへ動的にlabelとiconを追加する方法 TileListへ動的にlabelとiconを追加する方法が解りません。 ListやcomboBoxとほぼ同じとヘルプには書かれていますが、 ListやcomboBoxのdataProviderコントロールを使用しても、 以下の通り、動きません。 iconに@Embedをしなければならないとは思いますが、 addItemも使用出来ないようですし、完全に行き詰ってしまいました。 是非、ご教授頂けると幸いです。 どうぞ宜しくお願い致します <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:MyDropHeres="containers.Boxes.*" backgroundGradientColors="[0x0000FF, 0xCCCCCC]" layout="absolute" width="600"> <mx:Panel title="MyDropHere" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" width="159" x="10" y="189"> <MyDropHeres:MyDropHere id="body_img" verticalGap="2" height="51" nativeDragEnter="dragOnEnter(event)" nativeDragDrop="dragOnDrop(event)"/> </mx:Panel> <mx:Panel title="MyTileList" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" x="177" y="189" width="396"> <mx:TileList dataProvider="{stateArray}" x="20" y="20" width="356" height="110"> <mx:Script> <![CDATA[ import mx.collections.*; [Bindable] public var stateArray:ArrayCollection; public function initData():void { stateArray=new ArrayCollection( [{label:"File name 1", icon:"app:/image1.png"}, {label:"File name 1", icon:"app:/image2.png"}, {label:"File name 1", icon:"app:/image3.png"}]); } ]]> </mx:Script> </mx:TileList> </mx:Panel> ============= *TileListへlabelとiconを追加するFunctionは、dragOnDrop()です。

  • 助けてください!!キーボードで入力するといろんなウィンドウが開いてしま

    助けてください!!キーボードで入力するといろんなウィンドウが開いてしまいます E=コンピューター D=デスクトップの表示 R=ファイル名を指定して実行 などです まるでwindowsキーが押しっぱなしって感じです・・・・ 知っている人がいたらすぐに教えてください! windows環境:OS=windows Vista business SP2 PC fujitsu FMV e5200 です 追記 キーボードを変えてもだめでした・・・

  • Boot Camp後、キーボードレイアウトの設定

    MacBookPro(OS X 10.9.4)にBoot CampでWindows7をインストールしました。 Windowsで使うキーボードをMacと同じレイアウトにするオススメの方法を教えてください。 (特に困っているのは、日本語入力から英数字入力の仕方がよくわからない点) ちなみに、いろいろ調べたところ「AppleKbWin」というソフトが簡単に設定できてよさそうに思い、インストールしたのですが、設定しようとすると次のようなメセージが出て設定できません。 ⇒「アプリケーションのコンポーネントパネルで、ハンドルされていない例外が発生しました。『続行』をクリックすると、パスC:¥Program Files ¥ AppleKbWin ¥ Setting Config へのアクセスが拒否されました」 アドバイスいただけますようお願い致します。

    • ベストアンサー
    • Mac
  • BCB6で教科書付属プログラム実行表示

    呼んで下さり大変ありがとうございます。現在大学で卒業研究に取り組んでいるものです。 教科書に付属されていたCDのプログラムを、BBC55のもとで一緒に書かれていたMAKEファイルによってリスト表示するという内容のもので、実行することが出来ました。 このプログラムをbuilderで実行させ、ボタンを押すことにより同じリストを表示したいのですが、どのようにしたらよいのか分かりません‥ 分からないことを端的に述べますと 1.表示部分のコンポーネントはLabel?Memo?   何を使うのがよいのか。 2.プログラムを貼り付けるところはどこか? 3.buttomのイベントにはなんと書けばいいのか 4.以前はmakeファイルによって実行しましたが、BCB6ではmakeファイルは必要ないのか。 です。大変初心者で聞くに堪えない質問かもしれませんが、お答え頂けたら幸いです。よろしくお願いします。また、不明な点等ありましたらお答えしますので質問のは度よろしくお願いします。

  • WindowsXPで特定のアカウントでログオンした際にのみキーボードが

    WindowsXPで特定のアカウントでログオンした際にのみキーボードがきかないということはありますか?現在その事象になりとても困っています。 3日ほど前から突然、ノートPCでログオン後キーボードが利かなくなるという事象に見舞われています。 BIOSの起動パスワードやWindowsのログオンパスワードの入力まではできるのでキーボード自体が壊れているわけではなく、どうもレジストリ関係かと思い、色々とWebを探してみたのですが、それっぽいものが見つからないため、質問させていただきました。 なお、他のユーザーでログオンすると問題なくキーボードは使えます。Administratorでログオンした際のみ、キーボードが使えないということになっています。(外部接続のキーボードも認識はするのですが、キーは受け付けない状態です) なお、動作環境は下記のとおりです。 本体:Let's note CF-T7 OS:Windows XP Professional Ver2002 SP3 マウスは全く問題なく使えるため、スクリーンキーボードを使ったり、もう1台のPCで文字を入力したものをメールやメッセンジャーで送ることでコピペしながら使っているという状態です。 場合によっては再セットアップでしょうか・・・。 結構よく使うPCのため、なんとか再セットアップせずに進められればと思っております。 (補足) デバイスマネージャは正常に動作しているという表示です。 ドライバも101ではなく、106のキーボードで認識しています。 3日前に何かイベント(インストールやアップデート等)を起こしたわけではなく、前回の終了から次立ち上げたら突然そうなっていたというように認識しています(何かしたのかもしれませんが、特に思い出せないという意味で)。

専門家に質問してみよう