Hola Fleon,
Ten muy presente de que esa variable global, como cualquier otro elemento o atributo que pertenezca al form2, sólo podrá ser accedida mientras existe en memoria dicho form. Una vez que se libere, si haces uso de una lectura vas a tener error.
Tu código tiene un mecanismo seguro. Eso es lo bueno.
Lo que es conveniente remarcar es que en todo caso no sería una variable global, sino local a Form2. Una variable global tiene un ciclo de vida independiente de los form. Se mantiene "viva" mientras el aplicativo esté en acción y puede ser accedida desde cualquier punto del sistema.
Lo que podrías considerar, es tal vez en vez de usar una variable directa, el uso de propiedades. En caso de que el valor que se necesita guardar responda a ciertas reglas de control (como por dar un ejemplo: que si es entero no sea mayor a 100, o cosas por el estilo), lo más recomendable es que se use propiedades:
TForm2 = class(TForm)
private
FVariable: integer;
procedure SetVariable;
public
property Variable: integer; read FVariable write SetVariable;
....
end;
Luego, este método Set, realizará los controles adecuados antes de pasar el valor a FVariable:
procedure TForm2.SetVariable(Valor: integer);
begin
if Valor <= 100
then FVariable := Valor;
else .....
end;
De ese modo cuando quieras pasar un valor seguirías empleando el mismo código sin problemas y además dejas que form2 realice las comprobaciones necesarias.
Si no hay ninguna restricción en el valor, es útil emplear una variable en forma directa y no gastar código en métodos, y/o propiedades.
Saludos,