1. Die Fehlermeldung, die ausgespuckt wird, wäre interessant. Ich vermute mal, es ist ne EConvertError Exception. Die kriegst du bei StrToFloat, wenn in einem deiner Edit-Felder nix drinsteht. So kannst du das abfangen:
try
val1=StrToFloat(edit1.Text);
except
on EConvertError do val1=0;
else raise;
end;
Sollte jetzt in edit1 nix Vernünftiges drin stehen, wird val1 auf 0 gesetzt. Schöner wäre es allerdings, wenn Button16 nur enabled ist, wenn der User auch was eingeben hat. (Geht über Actions)
2. Auch hier wären die "Meckermeldungen" interessant. StrToFloat gibt das Ergebnis als Extended zurück, vermutlich ist Real zu klein. Mit Double sollte es auch klappen, hab ich jetzt aber nicht ausprobiert. Welche reellen Typen es in Delphi gibt, kann man schön in der Hilfe nachlesen.
3. Einfach die Standardnamen für die Komponenten zu verwenden, ist ausgesprochen unschön. Vor allem, wenn es gleich 16 Buttons gibt.
4. Die Variablen val1, val2, result, erg und o würde ich im private Bereich deklarieren. Der Name "result" ist ausgesprochen unglücklich, normalerweise ist das der Rückgabewert einer Funktion.
Mehr fällt mir im Moment nicht ein, nur mit der .pas Datei kann man in dem Fall auch nicht sooo viel anfangen.