全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2630
推到 Plurk!
推到 Facebook!

指定输入法问题?

尚未結案
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-15 16:43:15 IP:218.88.xxx.xxx 未訂閱
各位好,我想在控件转换时动态的设置控件的输入法,通过程序来动态设置,我的思路是这样的:有edit1,edit2,dbgrid1,dbgrd2,当按Tab时在他们之间相互转换,他们的imename的属性都为空,在运行时,从edit1切换到dbgrid1时,要求dbgrid1的输入法和edit1的输入法相同(也就是下一个获得焦点的控件和它上一个的控件的输入法相同),怎样实现呢? 声明一个变量来存放当前控件的输入法,转换到其它空间时,设置控件的输入法为所保存的输入法!不过,具体怎么实现呢? 还请高手指教!
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-15 17:33:38 IP:218.88.xxx.xxx 未訂閱
高手指点一下嘛
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-15 17:52:56 IP:61.155.xxx.xxx 未訂閱
这是我上次回答的问题,和您所问的一样哦,但是比您的还多一点哦!
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-16 00:05:06 IP:61.64.xxx.xxx 未訂閱
建議在 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-16 10:47:15 IP:218.88.xxx.xxx 未訂閱
两位的回答太精辟了吧,就一个连接! 我曾看过http://delphi.ktop.com.tw/topic.php?TOPIC_ID=36360 我觉得那上面好象不能实现我所想要的功能,而且那篇帖子已经结了,就算我回了也没有人理我! 悲惨呀!
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-16 11:05:23 IP:218.88.xxx.xxx 未訂閱
有没有简便一点的方法!
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-16 11:59:23 IP:218.88.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_id=30573 这篇文章看不懂?指点一下嘛!
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-16 12:48:59 IP:218.88.xxx.xxx 未訂閱
其实,我觉得我的意思也很简单!
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-16 14:25:22 IP:61.155.xxx.xxx 未訂閱
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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-17 13:05:13 IP:218.88.xxx.xxx 未訂閱
谢谢sos_admin!太感谢你对菜鸟的支持! 我试你了你的方法,很好! 如果,我用鼠标点那些控件的时候,要保持它们的输入法不变的话,该怎么处理呢?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-17 13:21:26 IP:61.155.xxx.xxx 未訂閱
如果,我用鼠标点那些控件的时候,要保持它们的输入法不变的话,该怎么处理呢? 不太懂您所说的,请举个事例哦!
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-17 14:26:58 IP:61.155.xxx.xxx 未訂閱
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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-09-18 09:21:58 IP:218.88.xxx.xxx 未訂閱
谢谢sos_admin师兄,我用了一下,真是太精彩了! 不过,我有点看不懂程序,也不明白你的意思,你能具体给我讲讲吗?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-09-18 09:34:20 IP:61.155.xxx.xxx 未訂閱
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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-09-18 10:06:31 IP:218.88.xxx.xxx 未訂閱
timer1.Interval=1000意思就是把一秒钟平均分为1000份对吧? 我还有一个疑问:起用Timer,每隔timer1.Interval=200,那么程序就会自动的执行TForm1.Timer1Timer中的代码,那要是窗口上的控件太多的话,这样反复执行会不会影响程序的执行速度呢? GetKeyBoardLayOut是API函数吗?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-09-18 10:43:23 IP:61.155.xxx.xxx 未訂閱
timer1.Interval=1000意思就是把一秒钟平均分为1000份对吧? 理论是这样的,实际好像有点偏差 我还有一个疑问:起用Timer,每隔timer1.Interval=200,那么程序就会自动的执行TForm1.Timer1Timer中的代码,那要是窗口上的控件太多的话,这样反复执行会不会影响程序的执行速度呢? 不会的,它这个过程是很快的,您根本感觉不到! GetKeyBoardLayOut是API函数吗? 是的!
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-09-18 13:05:00 IP:218.88.xxx.xxx 未訂閱
非常感谢!你对RAVE熟悉吗?我正学RAVE,对它有很多困惑! 我有个疑问: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37521 希望你能帮帮我! :)
railgunman
初階會員


發表:59
回覆:121
積分:36
註冊:2003-03-31

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-09-18 14:19:51 IP:218.88.xxx.xxx 未訂閱
高手就是高手!谢谢!
系統時間:2024-04-24 12:26:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!