为什么,每次单击dbgrid后,输入法就会变为英文输入法,而不是中文了?
解决方案 »
- 散分。。。。大家觉得做一款什么软件能让你更方便快捷的使用电脑
- 请教个tcp/ip的端口的问题
- 在用鼠标单击DBGrid标题单元格的时候总是在这个列的左侧出现一条黑色竖线,鼠标轻开后竖线消失,怎样在单击时不出现这条竖线?
- IRegex 这个类是个什么东东
- 如何读取Exchange中某个信箱的邮件?
- 如何对从表的数值字段进行实时(新增,编辑,删除)统计。
- 求教。。。
- 一台计算机能否连接两个IC卡读写器?
- 散分:怎样使表单中的最大化按纽和最小化按纽无效…………在线等候!!
- 写书感受——《Delphi高手突破》后记——预览
- mdichildform子窗体显示如何自动隐藏主窗体的工具栏???
- FastReport预览后的内容可以直接转化成邮件的内容吗..?
在设计时,选择DBGrid的IMENAME属性动态设置:
在DBGRIDE的ENTER事件中加入下列代码
1、先获取当前屏幕上的输入法
2、设置DBGRID.IMENAME = 当前屏幕上的输入法具体代码如下:function GetCurrentIME: TImeName;
var
IMEHandle: THandle;
Idx: Integer;
begin
Result := '';
ImeHandle := GetKeyBoardLayOut(0);
for Idx := 0 to Pred(Screen.Imes.Count) do
if HKL(Screen.Imes.Objects[Idx]) = ImeHandle then
Result := Screen.Imes[Idx];
end;procedure TForm1.DBGridEnter(Sender: TObject);
begin
DBGrid.ImeName := GetCurrentIME;
end;
好像是在什么KILL事件内的,具体的我忘记了,你只有自己找一下了。
begin
if Sender is TEdit then
begin
TEdit(Sender).ImeName := Screen.DefaultIme;
Exit;
end;
if Sender is TMemo then
begin
TMemo(Sender).ImeName := Screen.DefaultIme;
Exit;
end;
if Sender is TDBGrid then
begin
TDBGrid(Sender).ImeName := Screen.DefaultIme;
Exit;
end;
......根据你的需要照上面代码加入更多的控件设置
end;procedure TForm1.FormCreate(Sender: TObject);
var
Idx: Integer;
begin
for Idx := 0 to Pred(ComponentCount) do
begin
if Components[Idx] is TEdit then
TEdit(Components[Idx]).OnEnter:= OnEnterExit;
if Sender is TMemo then
TDBGrid(Components[Idx]).OnEnter:= OnEnterExit;
if Sender is TDBGrid then
TDBGrid(Components[Idx]).OnEnter:= OnEnterExit;
......根据你的需要照上面代码加入更多的控件设置
end;
end;对于dbgrid的BUG要特别修改
你打开DBGrid单元
procedure TCustomDBGrid.WMKillFocus(var Message: TMessage);
begin
//if not SysLocale.FarEast then inherited 修改之前
if SysLocale.FarEast then inherited 修改之后
else
begin
ImeName := Screen.DefaultIme;
ImeMode := imDontCare;
inherited;
if not ((InplaceEditor <> nil) and
(HWND(Message.WParam) = InplaceEditor.Handle)) then
ActivateKeyboardLayout(Screen.DefaultKbLayout, KLF_ACTIVATE);
end;
end;重新编译DBGRID单元--》
生成新的DBGRID.dcu--》
复制到--》C:\Program Files\Borland\Delphi7\Lib 和
C:\Program Files\Borland\Delphi7\Lib\Debug
覆盖原来的。重新建一个测试界面。应该能达到你的要求了。
end;