Estructura BeginThread - Delphi

Ahora tengo una aplicación casi completa y la siguiente característica que quiero implementar es el subproceso. Elegí ir con BeginThread (), aunque estoy al tanto de TThread en delphi. El problema con el que me encuentro es la estructura de la llamada BeginThread (). Normalmente, la línea en el programa que llamaría a la función que quiero que se enhebre es

CompareFiles(form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op);

op es un número entero.

La línea por la que lo cambié para crear un hilo es

BeginThread(nil,0,CompareFiles,Addr('form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op'),0,x);

Por la poca cantidad de información que puedo encontrar sobre cómo usar BeginThread (), esta debería ser una buena decisión, sin embargo, al compilar todo lo que obtengo son errores de compilación con respecto a la estructura de mis parámetros de declaración BeginThread ().

EDITAR PARA INFORMACIÓN.

El procedimiento actual que llama a CompareFiles es

procedure TForm1.Panel29Click(Sender: TObject);
var
op,x : integer;

begin
    if (Form1.Edit3.Text <> '') AND (Form1.Edit4.Text <> '') then
        begin
          op := 3;
          if RadioButton7.Checked = True then op := 0;
          if RadioButton3.Checked = True then op := 1;
          if RadioButton4.Checked = True then op := 2;
          if RadioButton5.Checked = True then op := 3;
          if RadioButton6.Checked = True then op := 4;
          CompareFiles(form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op);
        end;
end;

Si tuviera que usar TThread según lo sugerido por un par de personas, y como lo muestra Rob a continuación, estoy confundido sobre cómo a) pasaría op, Edit3 / 4.Text y StringGrid2 a CompareFiles. Adivinando el ejemplo de TThread que he visto, pensé que reemplazaría el código anterior conTCompareFilesThread.Executey poner el código actual de Panel29Haga clic enTCompareFilesThread.Create y luego agregue

FEdit3Text := Edit3Text;
FEdit4Text := Edit4Text;
FGrid := Grid;

a esto

FEdit3Text := Form1.Edit3.Text;
FEdit4Text := Form1.Edit4.Text;
FGrid := Form1.StringGrid2;

Pero tengo esta sensación molesta que está totalmente fuera de lugar.

Respuestas a la pregunta(1)

Su respuesta a la pregunta