{$DEFINE}, by default, can only be used for conditional compilation, for example:
Code:
{$DEFINE DEVELOPER} //Comment this out when making a release!
(* strip some lines *)
{$IFDEF DEVELOPER}
(* add some cheat codes here for easier debugging *)
{$ENDIF}
What you are speaking of are macros. FPC has very limited support for these, eg. C/CPP preprocessor allows for macros with arguments (like min(a,b)), whereas FPC macros can only be used for simple word substitution. Macros are disabled by default, so you need to enable them using the {$MACRO} directive. After that, you can declare them using {$DEFINE #Macro# := #Replace_by#} notation, eg.
Code:
{$MACRO ON} {$DEFINE AnsiArr := Array of AnsiString}
Var StrArr : AnsiArr;