hasta donde yo se, el with...do es algo especifico de delphi y simplemente es para evitar tener que hacer referencia al objeto que indique el with..do. En tu caso elimina la linea del with...do y en el for cambias la linea que se encuentra en su interior por esta: ClientDataSet1.Fields[i].Value*:=*DBGrid1.DataSource.DataSet.Fields[i].Value; En este caso no le veo mucho sentido ya que es una sola linea pero imagina que tuvieses que usar muchas referencias al mismo objeto, ahi si es mas util aunque se puede prescindir de ello. En builder podrias usar un puntero a objeto para acortar.
Quedaria asi:
Código PHP:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ClientDataSet1->CreateDataSet;
ClientDataSet1->Open;
}
void __fastcall TForm1::btnPasarRegistroClick(TObject *Sender)
{
ClientDataSet1->Append;
for(int i=0; i <= FieldCount-1; i++)
ClientDataSet1->Fields[i]->Value = DBGrid1->DataSource->DataSet->Fields[i]->Value;
ClientDataSet1->Post;
}