切換輸入法SetActivateIme('') 再dbgrid無效 |
答題得分者是:sos_admin
|
lilisn
一般會員 發表:35 回覆:62 積分:24 註冊:2003-03-09 發送簡訊給我 |
在站上看到一個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 發送簡訊給我 |
|
lilisn
一般會員 發表:35 回覆:62 積分:24 註冊:2003-03-09 發送簡訊給我 |
引言: ... 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 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
lilisn
一般會員 發表:35 回覆:62 積分:24 註冊:2003-03-09 發送簡訊給我 |
引言: 对于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 發送簡訊給我 |
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 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
想把
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |