los defines sirven para que el compilador ignore o incluya fragmentos de código si no se ha definido un simbolo específico de compilación condicional.
Te pongo un ejemplo:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
begin
{$ifdef Trial}
ShowMessage('Aquí se realiza el cálculo de comisiones en la versión '
+ 'de pago. Entrá a www.david.com para comprar la licencia!');
{$else}
EjecutarCalculoComisiones;
{$endif}
end;
Cuando el compilador esté procesando tu código, si se ha declarado previamente el simbolo Trial, tomará las línea que manda mostrar un mensaje, mientras que si dicho simbolo no está declarado tomará la línea que manda a calcular las comisiones.
El uso de directivas del compilador es recomendable, pero tiene sus "detalles", pues si no se es cuidadoso al compilar o al declarar los símbolos es posible que termines incluyendo código que no deseas o que dejes de incluir código que debiera estar allí. Si tenes el cuidado adecuado, la gran ventaja es que no hay hacker que pueda habilitar tal o cual funcionalidad de tu programa, pues la funcionalidad simplemente no existirá el el exe, dado que el compilador la ha ignorado antes de ensamblarlo.
La forma de declarar un símbolo condicional es, bien a nivel de unidad, así:
O bien a nivel del proyecto completo, en Project/Options/"Directories/Conditionals"/Conditional defines, podes poner tantos como querras separados por punto y coma.
Hasta luego.
