喫茶XRAYトップページ


[10442] 質問すべき場所返信 削除
2016/10/13 (木) 17:29:59 Mr.XRAY
気づいている方もいると思いますが,
当サイトのサンプルプログラム集や他の記事の更新のきっかけは
いろいろあります.
コミュニティの場で見かけた質問がきっかけのことがあります.

知恵袋なども,たまにというかよく見ています.レスはしませんが.
情報収集の意味もあります.

しばらくすると私のところに質問がくることがあります.
前に何回か同じようなことを書いていますが「何故私なんた ?」

メールで質問をよこすぐらいですから,その内容を公開しないのが原則ですが,
今回特別に,私が返信した内容を掲載します.
今回限りです.どのコミュニティでの質問かは内緒です.

----------------------------------------------------------------
  以下,返信内容 (伏字以外はそのまま)
----------------------------------------------------------------

こんにちは,Mr.XRAYです。

当サイトをご利用いただきありがとございます.
お訪ねの件ですが,私にはよく分かりません.

IME の件ですが,IME が動作中は IME というプログラムがキーの処理を
行っています.Delphi の OnKeyXXX 等の引数で検出できるのは IME が発行
した内容です.
229 というのはその値ですね.
(取得した値を全角の文字に変換している ?)

キーのコードを取得したいということですが,
取得したキーコードをどのように使うかにもよると思います.

Delphi のイベントというのはメッセージの処理です.

[メッセージでボタンクリックを検出する]
http://mrxray.on.coocan.jp/Delphi/Others/A_UltraIntro01.htm#12

したがって,単純にキーコードを取得するというのであれば,
↑ と同じような処理をすることになります.
メッセージの処理方法にはいくつかあります.

(1) ↑ のように WndProc を使用する
(2) TApplication コンポーネントの OnMessage イベントを使用する
(3) キーのローカルフック関数を使用する


https の接続については,残念ですが,○○さんの文章で状況が理解
できるほどの頭脳を持ち合わせていません.あしからず.

------------  ここまで  -----------------------------------------


[10445] IMEが動作中のキー操作取得返信 削除
2016/10/14 (金) 11:40:38 Mr.XRAY
やってみました.

> (1) ↑ のように WndProc を使用する
> (2) TApplication コンポーネントの OnMessage イベントを使用する
> (3) キーのローカルフック関数を使用する


(1) と (2) では WM_KEYDOWN で処理する限り取得できませんでした.
(3) のローカルフックでは,IME 起動中でも押下したキーコードが取得できます.

動作確認は Windows 7 U64(SP1) + Delphi XE(UP1) Pro
           日本語 (日本) -Microsoft Office IME 2010

> (2) TApplication コンポーネントの OnMessage イベントを使用する

間違いですね.TApplicationEvents コンポーネントです.


↓ ローマ字入力なので「ん」のキーは N


[10446] Re:IMEが動作中のキー操作取得返信 削除
2016/10/14 (金) 12:36:18 Mr.XRAY
> ↓ ローマ字入力なので「ん」のキーは N

今度は「かな入力」でやってみます.
「ん」は Y というキーです.


[10447] Re2:IMEが動作中のキー操作取得返信 削除
2016/10/14 (金) 18:07:25 Mr.XRAY
ローカルキーフックだけですが,
Halbow 資料館に掲載しているコンポーネントを使用すると簡単です.
まっ,あれですね.とくかく何でもやってみることです.ハイ.
敷居が高いとか低いとか,
足が短いから敷居をまたげないとか言っていないで... (^^;


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, KeyHookUnit;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    KeyHook1: TKeyHook;
    procedure KeyHook1KeyDown(virtualkey: Cardinal);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

//=============================================================================
//  キーフック開始
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  KeyHook1.Enabled := True;
end;

//=============================================================================
//  キーフック終了
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
  KeyHook1.Enabled := False;
end;

//=============================================================================
//  KeyHook1のOnKeyDownイベント処理
//=============================================================================
procedure TForm1.KeyHook1KeyDown(virtualkey: Cardinal);
var
  LText : string;
begin
  if Edit1.Focused then begin
    LText := Format(' %.2d ($%.2x)', [virtualkey, virtualkey]);
    Panel1.Caption := Chr(virtualkey) + LText;
  end;
end;

end.



[10448] Re3:IMEが動作中のキー操作取得返信 削除
2016/10/14 (金) 20:18:23 Mr.XRAY
> まっ,あれですね.とくかく何でもやってみることです.ハイ.

ということで,サンプルを追加しました.

[260] [04_マウスとキー操作のローカルフック]
http://mrxray.on.coocan.jp/Delphi/plSamples/260_HookKeyMouseEvent.htm#04


[10449] 懐かしい...返信 削除
2016/10/16 (日) 20:51:42 Mr.XRAY
> ということで,サンプルを追加しました.
>
> [260] [04_マウスとキー操作のローカルフック]
> http://mrxray.on.coocan.jp/Delphi/plSamples/260_HookKeyMouseEvent.htm#04


またまたいろいろ修正.編集しました.
履歴が長くなったので削除しました.
履歴を読んでいて,
「ああ,これはあの時だな...」
とか,当時に想いを巡らせました.何か,懐かしく感じました.


INCM/CMT
Cyclamen v3.82