喫茶XRAYトップページ

[スレッド全体
]

[4875] TStringGridでの日本語入力返信 削除
2011/6/14 (火) 23:14:23 Sara
皆さんこんにちは、Saraです。

最近、TStringGridを使ったプログラムを作っているのですが、
日本語入力で、ちょっと納得いかないところがありまして・・・

お知恵を拝借できれば幸いです。

問題点:
例えば、1列目が日本語入力On、2列目がOff、3列目がOnという
StringGridを作ったとして、OnGetEditTextにてImeMode(imOpen)等を
使って、IMEを制御するとします。

このとき、1列目に入力するにあたりF2キーを押すなどして編集モード
にすれば、問題なく日本語入力できますが、いきなり日本語を入力しようと
すると、最初に押したキーだけが半角文字で入力されてしまいます。

そこで、OnSelectCellにて、
     keybd_event(VK_F2, 0, 0, 0);
     keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0);
として、擬似的にF2キーを押して編集モードにすると、とりあえず日本語
入力が期待したとおりに動作するのですが、セルを移動すると直ぐに編集モード
になってしまい、左右の矢印キーにてセルの移動ができなくなります。
(できるようにすると、文字列の編集に矢印キーが使えなくなる)

(そもそも、やっていることが間違ってますかね・・・(^^; )

なにか妙手はないでしょうか?

[4877] Re:TStringGridでの日本語入力返信 削除
2011/6/15 (水) 05:45:21 Mr.XRAY
▼ Saraさん,おはようございます.

これはですね.仕様のようですね.
あるセルが選択されている状態で,何かキーを押すと編集状態,
つまり,インプレースエディタが起動するようになっています.
この時,セルの移動に使用する,矢印キーなどは動作対象外のようです.

日本語IMEはインプレースエディタが起動します.したがって,編集状態に
入らないと,IMEは起動しません.
つまり,最初の1文字が半角となるわけです.
かと言って,IMEを最初から起動しておくと,インプレースエディタが起動
していない,つまり,入力用のエディタがないので,予想(想定外?)の位置
に入力窓が表示されてしまいます.

[Enter]で編集状態に入れば,何も文字がないので文字は表示されません.

keybd_eventにしろ,何にしろ,OnSelectCellなどで,セル選択時にIMEを
ONにしてしまうと,どうしても,

> になってしまい、左右の矢印キーにてセルの移動ができなくなります。

になってしまいますね.
さて,どうするか.どうしましょう.


[4878] Re2:TStringGridでの日本語入力返信 削除
2011/6/15 (水) 10:51:20 Sara
▼ Mr.XRAYさん
朝早く、ご苦労様ですm(_ _)m。 まさか寝てないなんてことは・・・(^^;

> これはですね.仕様のようですね.
> あるセルが選択されている状態で,何かキーを押すと編集状態,
> つまり,インプレースエディタが起動するようになっています.
> この時,セルの移動に使用する,矢印キーなどは動作対象外のようです.

そうなんですよね。なので、OnKeyDown等で自分で次のセルに送ったりする
わけですが、単純に移動させてしまうと、編集中に矢印キーが使えない・・・
ので、EditModeを確認して編集中でなければ、移動しているわけです。
でも、keybd_eventで常に編集中にしてしまうと、これができない・・・

> 日本語IMEはインプレースエディタが起動します.したがって,編集状態に
> 入らないと,IMEは起動しません.
> つまり,最初の1文字が半角となるわけです.
> かと言って,IMEを最初から起動しておくと,インプレースエディタが起動
> していない,つまり,入力用のエディタがないので,予想(想定外?)の位置
> に入力窓が表示されてしまいます.

そうなんですよね・・・すごく気に入らない(^^;
さらに、エクセルをならできるのにとか言われると、もっと気に入らない・・・(^^;;;


> さて,どうするか.どうしましょう.
どうしましょうねぇ・・・困った・・・

あっ! GetCaretposを使ってTInplaceEdit内のカーソル位置が先頭か末尾なら、
それぞれ前後のセルへ移動するとどうだろう・・・

ちょっと、やってみる・・・・(時間経過)

おぉ、それなりに、よさげな感じ・・・ちょっと、せこいけど・・・(またか?)
とりあえず、これで作っておくか・・・(^^;

もっと、良い方法を見つけたら、教えてください。(^^;

[4880] Re3:TStringGridでの日本語入力返信 削除
2011/6/15 (水) 15:07:19 Mr.XRAY
▼ Saraさん

> あっ! GetCaretposを使ってTInplaceEdit内のカーソル位置が先頭か末尾なら、
> それぞれ前後のセルへ移動するとどうだろう・・・


なるほど.そうですよね.
これ,まっとうな方法じゃないんですか.そう思いますけど.

セルの編集可否を制御するのは,
OptionsにgoAlwaysShowEditorを追加しておいて,

  if ACol = 1 then begin
    if not (goEditing in StringGrid1.Options) then
      StringGrid1.Options := StringGrid1.Options + [goEditing];
  end;

  if ACol = 2 then begin
    if (goEditing in StringGrid1.Options) then
      StringGrid1.Options := StringGrid1.Options - [goEditing];
  end;

こんな感じでもできるようです.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82