在一窗体中有一dbgrid和webbrowser, 在webbrowser载入一个页面后,载入的页面也没有连接,鼠标在webbrowser上随便点几下,然后再回点dbgrid,此时dbgrid的单击双击事件都不会执行,整行选中状态也不会显示。   
    
   如果再点击了两外的控件,如treeview   or   text等,再回点dbgrid就可以了。为什么会是这样了?如何可以保持dbgrid中的一条记录保持选中状态下的高亮形式,并且点击webbrowser之后,再回点dbgrid单击和双击事件都能执行。   
   在线等待。分不够,可以再开贴给分。   
   详细一些最好,要不给个能实际实现功能的具体方法也行。   
  

解决方案 »

  1.   

    Query.Locate('字段名称',Trim(Edit1.Text),[loCaseInsensitive ,loPartialKey]); 这样写就可以了
      

  2.   

    dbgrid中一条记录保持选中状态下的高亮形式,在焦点切换的时候就不再是高亮了。
      

  3.   

    關于焦點問題,沒有很好的解決辦法。
    應該說,這是一個vcl的bug。
    從其他winControl移動到webbrowser時,會執行focusControl動作,但我們選擇的是web的元素,focus失敗,整個過程就停止在這里。所以后續給之前擁有焦點的wincontrol發送cm_exit消息也沒執行,onexit事件也就不會被觸發了。正常來講,只要焦點有正常切換,onexit都會被觸發的。一個暫時的解決辦法是,在webbrowser.onStatusTextChange里這樣寫  if ActiveControl<>Sender then
        ActiveControl := nil;使得vcl認為,activeControl不一樣,進而使得焦點可正常切換
      

  4.   

    由于原先activeControl沒有切換成功,所以還是保留上次的擁有焦點的wincontrol。當你想操作這個wincontrol時,VCL就認為,這個control已經有焦點了,后續動作就不執行了(window.setfocus),這樣就使得很多消息無法接收(如鼠標消息,鍵盤消息)。
      

  5.   

    結合一下VCL就更清楚了procedure TCustomForm.SetActiveControl(Control: TWinControl);
    begin
      if FActiveControl <> Control then
      begin
        if not ((Control = nil) or (Control <> Self) and
          (GetParentForm(Control) = Self) and ((csLoading in ComponentState) or
            Control.CanFocus)) then
          raise EInvalidOperation.Create(SCannotFocus);
        FActiveControl := Control;
        if not (csLoading in ComponentState) then
        begin
          if FActive then SetWindowFocus;
          ActiveChanged;
        end;
      end;
    end;
      

  6.   

    Avan_Lau,你在5楼写的代码调试不成啊,能写在全面点儿么,谢谢!!!