指定输入法问题? |
尚未結案
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
各位好,我想在控件转换时动态的设置控件的输入法,通过程序来动态设置,我的思路是这样的:有edit1,edit2,dbgrid1,dbgrd2,当按Tab时在他们之间相互转换,他们的imename的属性都为空,在运行时,从edit1切换到dbgrid1时,要求dbgrid1的输入法和edit1的输入法相同(也就是下一个获得焦点的控件和它上一个的控件的输入法相同),怎样实现呢?
声明一个变量来存放当前控件的输入法,转换到其它空间时,设置控件的输入法为所保存的输入法!不过,具体怎么实现呢?
还请高手指教!
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
建議在 Screen.OnActiveControlChange 事件中處理,這樣只需要寫一次
不用每一個 control 都寫
如何在 Screen.OnActiveControlChange 掛上事件處理函式,請參考
http://delphi.ktop.com.tw/topic.php?topic_id=30573 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
var
Form1: TForm1;
str:string;
implementation {$R *.dfm} procedure TForm1.Edit1Enter(Sender: TObject);
begin
if (sender as tEdit).ImeName<>str then
str:=(sender as tEdit).ImeName;
if trim(str)<>'' then
(sender as tEdit).ImeName:=str;
end; procedure TForm1.DBGrid1Enter(Sender: TObject);
begin
if trim(str)<>'' then
(sender as tdbgrid).ImeName:=str;
end; try~~~~~~
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
var
Form1: TForm1; str:string;
implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
myime : HKL;
begin
myime:=GetKeyBoardLayOut(0);
for i := 0 to Screen.Imes.Count-1 do
if HKL(Screen.Imes.Objects[i]) = myime then
str:=Screen.Imes.Strings[i];
for i:=0 to form1.ComponentCount -1 do
begin
if form1.Components[i] is Tedit then
(form1.Components[i] as Tedit).ImeName :=str;
if (form1.Components[i] is Tdbgrid) then
if trim(str)<>'' then (form1.Components[i] as Tdbgrid).Columns[(form1.Components[i] as Tdbgrid).Columns.Grid.SelectedIndex].ImeName:=str;
end; end; 用一个timer,启用, timer1.Interval大约200吧!
这样她就不需要您做其它的设置,自动帮您保存设置输入法哦! 用这个也可以实现您所需的效果,这段代码比在
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37247
中回答的各精要,同样也适合[关于DBgrid录入数据的问题 ]
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
var
i:integer;
myime : HKL;
begin
//取得当前输入法的对象
myime:=GetKeyBoardLayOut(0);
//查找输入法对象是否在当前系统中
for i := 0 to Screen.Imes.Count-1 do
if HKL(Screen.Imes.Objects[i]) = myime then
//如果找到,则取出其名称
str:=Screen.Imes.Strings[i];
//查找所有Tedit\Tdbgrid对象
for i:=0 to form1.ComponentCount -1 do
begin
//如果找到就将当前输入法状态赋予它
if form1.Components[i] is Tedit then
(form1.Components[i] as Tedit).ImeName :=str;
if (form1.Components[i] is Tdbgrid) then
if trim(str)<>'' then (form1.Components[i] as Tdbgrid).Columns[(form1.Components[i] as Tdbgrid).Columns.Grid.SelectedIndex].ImeName:=str;
end;
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |