I have same problem and I try to solve it using Application.QueryAsyncCall and <div>event OnPageChanged of each pagecontrol.<br><div><br></div><div>---</div><div><br></div><div><div><br></div><div>procedure TForm1.TabSheet1Show(Sender: TObject);</div>
<div>begin</div><div>  //ActiveControl := Edit1;</div><div>end;</div></div><div><br></div><div><div>procedure TForm1.PageControl1PageChanged(Sender: TObject);</div><div>var lPoiter:PtrInt=0;</div><div>begin</div><div>  if Sender=PageControl1 then</div>
<div>  begin</div><div>    if PageControl1.ActivePage=TabSheet1 then</div><div>       lPoiter :=PtrInt(Edit1)</div><div>    else if PageControl1.ActivePage=TabSheet2 then</div><div>    begin</div><div>      PageControl1PageChanged(PageControl2);</div>
<div>    end;</div><div>  end</div><div>  else if Sender=PageControl2 then</div><div>  begin</div><div>    if PageControl2.ActivePage=TabSheet3 then</div><div>       lPoiter :=PtrInt(Edit2);</div><div>  end;</div><div><br>
</div><div>  if lPoiter&lt;&gt;0 then</div><div>     Application.QueueAsyncCall(@AsyncSetFocus, lPoiter);</div><div>end;</div><div><br></div><div>procedure TForm1.FormShow(Sender: TObject);</div><div>begin</div><div>  PageControl1PageChanged(PageControl1);</div>
<div>end;</div><div><br></div><div>procedure TForm1.TabSheet3Show(Sender: TObject);</div><div>begin</div><div>  //ActiveControl := Edit2;</div><div>end;</div><div><br></div><div>procedure TForm1.AsyncSetFocus(aPointer: PtrInt);</div>
<div>begin</div><div>  if (aPointer&lt;&gt;0) and TWinControl(aPointer).CanFocus then</div><div>     TWinControl(aPointer).SetFocus</div><div><br></div><div>end;</div></div><div><br></div><div><div>procedure TForm1.FormShow(Sender: TObject);</div>
<div>begin</div><div>  PageControl1PageChanged(PageControl1);</div><div>end;</div></div><div><br></div><div>----</div><div><br></div><div>I know it is not best solution. My friend said that it is not safe for using PtrInt.</div>
<div>I re attach your code here</div></div>