首先:panel上用了frame,组件在frame上面(貌似ActiveControl只有form有)
想达到的效果就是,比如一个panel上有多个edit,焦点在中间的一个edit上,切到另外的panel
再切回来后,焦点还是在那个edit上(现在是切回来后在设定的第一个edit上)

解决方案 »

  1.   

    用Tag属性保存焦点信息Frame?
      

  2.   

    切换之前先 HWND GetFocus(VOID), 切换回来后. SetFoucs(HWND);
      

  3.   

    {不知道楼主的Panel、Edit和Frame是怎么放置的
     因此用一个PageControl做一下演示
     当然,这只是给楼主一个思路}{PageControl上有多页TabSheet,每页上有多个Edit。
     只有单击Edit改变焦点有效,用Tab键改变焦点无效}procedure TForm1.FormCreate(Sender: TObject);
    var
      I, J : integer;
    begin
      for J := Self.PageControl1.PageCount-1 downto 0 do
        for I := Self.PageControl1.Pages[J].ControlCount-1 downto 0 do
          if Self.PageControl1.Pages[J].Controls[I] is TEdit then
            TEdit(Self.PageControl1.Pages[J].Controls[I]).OnClick := Self.EdtClick;
    end;procedure TForm1.EdtClick(Sender: TObject);
    begin
      TEdit(Sender).Parent.Tag := TEdit(Sender).Handle;
    end;procedure TForm1.PageControl1Change(Sender: TObject);
    var
      H: hWnd;
    begin
      H := Self.PageControl1.ActivePage.Tag;
      if H <> 0 then Windows.SetFocus(H);
    end;
      

  4.   

    procedure TForm1.FormCreate(Sender: TObject);
    var
      I, J : integer;
    begin
      for J := Self.PageControl1.PageCount-1 downto 0 do
        for I := Self.PageControl1.Pages[J].ControlCount-1 downto 0 do
          if Self.PageControl1.Pages[J].Controls[I] is TEdit then
            TEdit(Self.PageControl1.Pages[J].Controls[I]).OnClick := Self.EdtClick;
    end;procedure TForm1.EdtClick(Sender: TObject);
    begin
      TEdit(Sender).Parent.Tag := TEdit(Sender).Handle;
    end;procedure TForm1.PageControl1Change(Sender: TObject);
    var
      H: hWnd;
    begin
      H := Self.PageControl1.ActivePage.Tag;
      if H <> 0 then Windows.SetFocus(H);
    end;