为什么DBGrid无法获得焦点 在一个Form中,有一个CppWebBrowser,一个DBGrid,当CppWebBrowser获得焦点后,无论如何DBGrid都无法获得焦点,但Form中的其它控件却可以正常获得焦点,当其它控件获得焦点后,再点击DBGrid,则DBGrid可以获得焦点.不知有没有朋友遇到过这样的问题?应如何解决 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看来是VCL的Bug提供一点线索:http://www.nldelphi.com/Forum/archive/?t-8256.html var vDefInetExplorerServerProc: Pointer;function InetExplorerServerWndProc( hwnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;var vFormHandle: THandle; vForm1: TForm1;begin Result := CallWindowProc(vDefInetExplorerServerProc, hwnd, Msg, wParam, lParam); vFormHandle := hwnd; while GetParent(vFormHandle) <> 0 do vFormHandle := GetParent(vFormHandle); vForm1 := TForm1(FindControl(vFormHandle)); case Msg of WM_SETFOCUS: vForm1.ActiveControl := vForm1.WebBrowser1; WM_DESTROY: SetWindowLong(hwnd, GWL_WNDPROC, Integer(vDefInetExplorerServerProc)); end;end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);var vShellDocObjViewHandle: THandle; vInetExplorerServerHandle: THandle;begin vShellDocObjViewHandle := GetWindow(TWebBrowser(Sender).Handle, GW_CHILD); vInetExplorerServerHandle := GetWindow(vShellDocObjViewHandle, GW_CHILD); if Integer(@InetExplorerServerWndProc) <> GetWindowLong(vInetExplorerServerHandle, GWL_WNDPROC) then begin Integer(vDefInetExplorerServerProc) := GetWindowLong(vInetExplorerServerHandle, GWL_WNDPROC); SetWindowLong(vInetExplorerServerHandle, GWL_WNDPROC, Integer(@InetExplorerServerWndProc)); end;end; ADOQUERY及dbgrid操作問題5 计算年龄函数(精确到天数) 新手请问模糊查询 请问:子窗体的相对位置 怎样去设计一个串口通讯的程序??? 请教一个关于类方法重载的设计问题,面向对象有经验请进 如何得到鼠标的坐标? 如何将一个实例化的类存入TListItem.data中,如何得到TListItem.data里的该变量?渴望一段代码。谢谢。 为什么不能向tdbedit中输入数据? ADOQuery的参数问题。 准备将程序做成单机版和c/s版两种版本,是需要开发两次还是说只需要开发一次(c/s版)就可以了?不知道能不能把c/s版转化为单机版? 查询问题
提供一点线索:
http://www.nldelphi.com/Forum/archive/?t-8256.html
vDefInetExplorerServerProc: Pointer;function InetExplorerServerWndProc(
hwnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
vFormHandle: THandle;
vForm1: TForm1;
begin
Result := CallWindowProc(vDefInetExplorerServerProc,
hwnd, Msg, wParam, lParam);
vFormHandle := hwnd;
while GetParent(vFormHandle) <> 0 do vFormHandle := GetParent(vFormHandle);
vForm1 := TForm1(FindControl(vFormHandle));
case Msg of
WM_SETFOCUS: vForm1.ActiveControl := vForm1.WebBrowser1;
WM_DESTROY: SetWindowLong(hwnd, GWL_WNDPROC,
Integer(vDefInetExplorerServerProc));
end;
end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
vShellDocObjViewHandle: THandle;
vInetExplorerServerHandle: THandle;
begin
vShellDocObjViewHandle := GetWindow(TWebBrowser(Sender).Handle, GW_CHILD);
vInetExplorerServerHandle := GetWindow(vShellDocObjViewHandle, GW_CHILD);
if Integer(@InetExplorerServerWndProc) <>
GetWindowLong(vInetExplorerServerHandle, GWL_WNDPROC) then
begin
Integer(vDefInetExplorerServerProc) :=
GetWindowLong(vInetExplorerServerHandle, GWL_WNDPROC);
SetWindowLong(vInetExplorerServerHandle, GWL_WNDPROC,
Integer(@InetExplorerServerWndProc));
end;
end;