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<>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<>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>