また教えて頂きたいことが出てきました。
StringGridで日本語入力する時に、以下のソースのようなやり方で行っているのですが..
最初のセルで日本語を入力するときには問題ないのですが
文字確定後エンターで次のセルに移動してそのまま日本語入力を行いますと
セルの中ではなく小さな編集ポップアップが出て来てそこで文字入力をする事になってしまいます。
これは操作する側としては好ましくないのでセルでの入力に戻したいのですが
いろいろと調べたりしましたが方法が分かりません。
どなたかご存知の方がいらっしゃいましたらお願いします。
尚環境は、Windows8.1+Delphi6です。
//-------------------------------------------------------
// StringGrid1をForm1に貼って
//-------------------------------------------------------
// Gridで次のセル(右)へ移動
//-------------------------------------------------------
procedure SGrid_NextCt(var gridp:TStringGrid;sc:integer=1;ec:integer=0);
begin
if (ec=0) then
ec := gridp.Colcount-1;
if (gridp.Col>=ec) then begin
gridp.Col := sc;
if (gridp.Row<gridp.Rowcount-1) then begin
gridp.Row := gridp.Row+1;
end;
end else begin
gridp.Col := gridp.Col+1;
end;
end;
//-------------------------------------------------------
procedure TForm1.FormShow(Sender: TObject);
begin
with StringGrid1 do begin
Options := Options - [goRowSelect] + [goEditing] - [goRangeSelect];
end;
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
var
Rect1: TRect;
begin
Rect1 := TStringGrid(sender).CellRect(TStringGrid(sender).Col,TStringGrid(sender).Row);
SetIMEMode(Handle, imHira);
SetImeCompositionWindow(TStringGrid(sender).Font,Rect1.Left,Rect1.Top);
end;
procedure TForm1.StringGrid1Enter(Sender: TObject);
begin
StringGrid1Click(Sender);
end;
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=VK_RETURN) then begin
SGrid_NextCt(TStringGrid(sender)); // 次のセルへ移動
TStringGrid(sender).EditorMode := true;
end;
end;
フォーカスが移ってないもしくは
KewDownの後処理の問題と思われます。
SGrid_NextCt(TStringGrid(sender)); // 次のセルへ移動
TStringGrid(sender).EditorMode := true;
TStringGrid(sender).SetFocus(); // フォーカスを移動
Key := 0; // 元のキー入力処理を無効に
takeさん、早速のご回答ありがとうございます。
確かにフォーカスに問題がありそうな気がします。
それで、教えて頂きました内容を以下のように
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=VK_RETURN) then begin
SGrid_NextCt(TStringGrid(sender)); // 次のセルへ移動
TStringGrid(sender).EditorMode := true;
TStringGrid(sender).SetFocus(); // フォーカスを移動
Key := 0; // 元のキー入力処理を無効に
end;
end;
追加してみましたが、結果は変わりませんでした。
ン
モヌにはもともと、ナキーで編集モードをマッマする機能がありますから
自分でナヘスにするヲサ→ヲサナキーの効果でに戻る
という動きをしているように見えます。
なのでヲサナヘヲサコスヲサヲサのところを取っちゃえばいいんじゃないですか?
常に編集モードにしておきたいのだったら、マのチモナを使ってもいいと思いますけど。
スススススススススススススススススススススススススススススススススススススススス
ニコ
トコ イーアカッーエッーカィ水ゥ アウコアキコアキ 書込者ノト:ロ 」 ァ」ハノJ
ン
補足、厳密に言うと、チモナがない場合は
アョヲサセルを移動するとナヘスにリセットされる
イョヲサその後(マヒトの中で)ナヘスに設定する
ウョヲサヒミが発生。」アウ(改行)だったらナヘが切り替えられる
という動きになります。
今はイとウの合わせ技で結果的にヲサナヘスヲサになっているので、どちらか片方をなくせばいいということですね。(両方潰しちゃうと元の木阿弥です)
なお、ウを潰したいのならマヒトではなくマヒミでないと駄目です。
どの方法を選ぶかは、ナキー以外でセル移動した場合にどうしたいか?次第でしょう。
スススススススススススススススススススススススススススススススススススススススス
ニコ
トコ イーアカッーエッーカィ水ゥ アエコーイコアカ 書込者ノト:ロ 」 「 ン
さん、ご回答ありがとうございます。
アドバイスに従いやり方を変えてみました。
モヌアヒトィゥヲサは止めまして..
ヲサヤニアョモヌアヒミィモコヲサヤマサヲサヲサヒコヲサテゥサ
ヲサヲサヲサィヒス」アウゥヲサヲサ
ヲサヲサヲサヲサヲサモヌ゜ホティヤモヌィゥゥサ
ヲサヲサヲサヲサヲサヒヲサコスヲサ」ーサ
ヲサヲササ
サ
以上のイベントに切り替えましたらうまく行きました。
エンターキーでセルを移動するときにはセルがへこんだ(編集)状態では
好ましくないと言う事で悩んでいましたが今回のやり方で解決しました。
助かりました、ありがとうございました。
スススススススススススススススススススススススススススススススススススススススス
ニコ
トコ イーアカッーエッーカィ水ゥ アエコアアコウオ 書込者ノト:ロ 」 「 ン
モコ
解決とさせて頂きます。
ツイート | ![]() |