喫茶XRAYトップページ
[
スレッド全体
]
[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内のカーソル位置が先頭か末尾なら、
それぞれ前後のセルへ移動するとどうだろう・・・
ちょっと、やってみる・・・・(時間経過)
おぉ、それなりに、よさげな感じ・・・ちょっと、せこいけど・・・(またか?)
とりあえず、これで作っておくか・・・(^^;
もっと、良い方法を見つけたら、教えてください。(^^;
[4879]
Re3:TStringGridでの日本語入力
返信
削除
2011/6/15 (水) 15:04:25
Sara
▼ Mr.XRAYさん
// keybd_event(VK_F2, 0, 0, 0);
// keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0);
こんなこと、しなくても、StringGrid1.Optionsに[goAlwaysShowEditor]を
付けたり消したりすれば、事は済むんですね・・・(^^;
[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