線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2363
推到 Plurk!
推到 Facebook!

切換輸入法SetActivateIme('') 再dbgrid無效

答題得分者是:sos_admin
lilisn
一般會員


發表:35
回覆:62
積分:24
註冊:2003-03-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-26 17:40:45 IP:61.228.xxx.xxx 未訂閱
在站上看到一個Function有一點問題請教使用過前輩    unit Unit1;    interface    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls,Imm, Mask, DBCtrls, Grids, DBGrids, DB, DBTables;    type   TForm1 = class(TForm)     Edit1: TEdit;     Edit2: TEdit;     Edit3: TEdit;     Edit4: TEdit;     Edit5: TEdit;     Table1: TTable;     DataSource1: TDataSource;     DBGrid1: TDBGrid;     procedure Edit1Enter(Sender: TObject);     procedure Edit2Enter(Sender: TObject);     procedure Edit3Enter(Sender: TObject);     procedure Edit4Enter(Sender: TObject);     procedure Edit5Enter(Sender: TObject);     procedure DBGrid1Enter(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end; /////// const nHKL_LIST = 20; ///////    var   Form1: TForm1;    implementation    {$R *.dfm} function SetActivateIme(sWanted: string): boolean; var iHandleCount: integer;     pList: array[1..nHKL_LIST] of HKL;     szImeFileName: array[0..MAX_PATH] of char;     sImeFileName: string;     bInstalled: boolean;     i: integer; begin Result := False; sWanted := AnsiUpperCase(sWanted); // 看看是否安裝了這個輸入法 bInstalled := False; iHandleCount := GetKeyboardLayoutList(nHKL_LIST, pList); for i := 1 to iHandleCount do begin     ImmGetDescription(pList[I], szImeFileName, MAX_PATH);     sImeFileName := AnsiUpperCase(StrPas(szImeFileName));     if (pos(sWanted,sImeFileName)>0) or (sWanted = sImeFileName) then begin // En 時, 其值為''         bInstalled := True;         Break;         end;     end; // 如果這個輸入法已安裝了, 讓那個輸入法的鍵盤分佈(KeyLayout)作用 if bInstalled then begin    ActivateKeyboardLayout(pList[i], 0);    if (sWanted = sImeFileName) then    Result := False    else    Result := True;    end; end; { of SetActivateIme }    function SetKey2Ime(aObj: TWinControl): boolean; begin ImmSimulateHotKey(aObj.Handle, IME_THOTKEY_IME_NONIME_TOGGLE); result:= True; end;        procedure TForm1.Edit1Enter(Sender: TObject); begin SetActivateIme('注音'); end;    procedure TForm1.Edit2Enter(Sender: TObject); begin SetActivateIme('倉頡'); end;    procedure TForm1.Edit3Enter(Sender: TObject); begin SetActivateIme('大易');    end;    procedure TForm1.Edit4Enter(Sender: TObject); begin SetActivateIme(''); // 切回英數    end;    procedure TForm1.Edit5Enter(Sender: TObject); begin if not SetActivateIme('') then // 判斷是英數時才作切換    SetKey2Ime(self); end;    procedure TForm1.DBGrid1Enter(Sender: TObject); begin if dbgrid1.SelectedIndex = 1 then    SetActivateIme('');     ///////////////////////////    +++ 切回英數無作用 (在oncolexit也無作用) +++    /////////////////////////// end;    end.
sos_admin
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-26 18:01:27 IP:61.155.xxx.xxx 未訂閱
... procedure TForm1.DBGrid1Enter(Sender: TObject); begin if dbgrid1.SelectedIndex = 0 then SetActivateIme(''); end; ...
lilisn
一般會員


發表:35
回覆:62
積分:24
註冊:2003-03-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-27 08:56:24 IP:61.228.xxx.xxx 未訂閱
引言: ... procedure TForm1.DBGrid1Enter(Sender: TObject); begin if dbgrid1.SelectedIndex = 0 then SetActivateIme(''); end;
dbgrid1.SelectedIndex = 0 可以 但是dbgrid selectedindex = 3 是證號 dbgrid selectedindex = 6 是電話 dbgrid selectedindex = 0,1,2,4,5 是中文輸入 無法再 dbgrid selectedindex 做判斷嗎? 例: if (dbgrid1.SelectedIndex = 3) or (dbgrid1.SelectedIndex = 6 ) then SetActivateIme('') else if not SetActivateIme('') then SetKey2Ime(self); dbgrid1.selectedindex > 0 好像沒作用 謝謝sos_admin
sos_admin
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-27 09:05:52 IP:61.155.xxx.xxx 未訂閱
对于dbgrid1不同列的输入法的判断,可以用DBGrid1CellClick的事件。并且去掉DBGrid1Enter事件哦 procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if Column.Index = 0 then SetActivateIme(''); if Column.Index =1 then SetActivateIme('智能ABC输入法'); end;
sos_admin
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-27 09:06:07 IP:61.155.xxx.xxx 未訂閱
对于dbgrid1不同列的输入法的判断,可以用DBGrid1CellClick的事件。并且去掉DBGrid1Enter事件哦 procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if Column.Index = 0 then SetActivateIme(''); if Column.Index =1 then SetActivateIme('智能ABC输入法'); ... end;
lilisn
一般會員


發表:35
回覆:62
積分:24
註冊:2003-03-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-27 09:53:53 IP:61.228.xxx.xxx 未訂閱
引言: 对于dbgrid1不同列的输入法的判断,可以用DBGrid1CellClick的事件。并且去掉DBGrid1Enter事件哦 procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if Column.Index = 0 then SetActivateIme(''); if Column.Index =1 then SetActivateIme('智能ABC输入法'); ... end;
使用滑鼠點各column 可以了 ok 但按TAB鍵(或使用dosmov元件)請問要在那個events裡做判斷?
sos_admin
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-27 10:28:52 IP:61.155.xxx.xxx 未訂閱
procedure TForm1.DBGrid1ColEnter(Sender: TObject);   VAR   I:INTEGER; begin I:=DBGrid1.Columns.Grid.SelectedIndex; CASE I OF 0:SetActivateIme(''); 1:SetActivateIme('智能ABC输入法'); 2:SetActivateIme('郑码输入法'); ELSE SetActivateIme(''); end; END;    不论是用tab还是方向键都可以的
lilisn
一般會員


發表:35
回覆:62
積分:24
註冊:2003-03-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-27 14:23:46 IP:61.228.xxx.xxx 未訂閱
謝謝 sos_admin 善心
sos_admin
版主


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-28 11:27:54 IP:61.155.xxx.xxx 未訂閱
想把 if not SetActivateIme() then SetKey2Ime(self); 放入Function不知怎么写比教好 Function Importsay(T_Form:String): boolean; begin if not SetActivateIme() then /// 出错 SetKey2Ime(self); /// Result := True; end; ----------------------- ... private Function Importsay(T_Form:String): boolean; { Private declarations } ...... Function TForm1.Importsay(T_Form:String): boolean; begin Result := True; if not SetActivateIme(T_Form) then if not SetKey2Ime(self) then result:=false; end; .....
lilisn
一般會員


發表:35
回覆:62
積分:24
註冊:2003-03-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-08-28 14:28:20 IP:61.228.xxx.xxx 未訂閱
引言: Function TForm1.Importsay(T_Form:String): boolean; begin Result := True; if not SetActivateIme(T_Form) then if not SetKey2Ime(self) then ???? result:=false; end;
會出現error message [Error] Undeclared identifier: 'self'
系統時間:2024-04-24 4:05:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!