Variablen vom Typ eines dynamischen Arrays sind Zeiger auf den Speicher in dem die Array-Elemente liegen.
FillChar(fHfgkFarbe, {...}
Das ist falsch, so wird der Zeiger selbst überschrieben, nicht der Inhalt des Arrays.
Richtig so:
Delphi-Quellcode:
if Length(fHfgkFarbe) > 0 then
FillChar(fHfgkFarbe[0], SizeOf(fHfgkFarbe[0]) * Length(fHfgkFarbe), 0);