2014/4/22 (火) 11:38:15 taki |
列によって数字と文字の入力を切り替えたいと思いました。
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200604/200604_06040024.html
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00034.html
を参考にしました。
imOpen,imHira,imCloseは正常に動作するのですが、
imCloseの代わりにimDisableを使うとうまく動きません。の報告です。
Windows7 Pro + Microsoft Office IME 2010 SP2
Delphi XE4 Starter
新規作成
フォームにStringGrid1,StringGrid2を配置
オブジェクトインスペクタより
OptionのgoEditing,goAlwaysShowEditor,goTabsをTrueに設定
以下コードです。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids;
type
_TGrid = class(TCustomGrid); // 継承のクラス
TForm1 = class(TForm)
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
procedure StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
var Value: string);
procedure StringGrid2GetEditText(Sender: TObject; ACol, ARow: Integer;
var Value: string);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// 継承を使う方法
procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
var Value: string);
begin
with TEdit(_TGrid(Sender).InplaceEditor) do
case ACol of
1: ImeMode := imHira; // Openと同じ
2: ImeMode := imClose; // imDisableを使うと変になる
3: ImeMode := imOpen;
4: ImeMode := imClose;
end;
end;
// SetImeMode()を使う方法
procedure TForm1.StringGrid2GetEditText(Sender: TObject; ACol, ARow: Integer;
var Value: string);
begin
case ACol of
1: SetImeMode( Handle, imHira );
2: SetImeMode( Handle, imClose ); // imDisableを使うと変になる
3: SetImeMode( Handle, imOpen );
4: SetImeMode( Handle, imClose );
end;
end;
end.
ちなみに、継承を使う方法は理解できていません。マスターすみません。(^^;
|
|