Pues en tu último código veo que te sobre un espacio al final y te falta en otra parte. Por lo demás debería funcionarte.
La variable valor tuya te sobra. Con hacer
if Reg.ReadInteger(...) = 3
then ....
Debería funcionarte, si notas. Valor no lo usas para nada más.
Lo que yo expongo es un ejemplo, y al igual que tu, mi variable valor es integer. El método ReadInteger devuelve un integer. Lo único que hago yo es guardar el resultado en la variable y lo muestro.
Es lo mismo hacer esto:
Código Delphi
[-]valor := Reg.ReadInteger(....); if valor = 3
then ...
Que esto:
Código Delphi
[-]
if Reg.ReadInteger(...) = 3
then ....
En el primer caso lo único que hago es previamente guardar el valor. En el segundo directamente leo, no me interesa tener en una variable el valor leído.
¿Se entiende la diferencia?
Saludos,