Hallo,
da muss ich mal fragen:
Hast Du für jeden der 9 Knöpfe eine eigene Ereignisroutine?
Das ist unnötig. Im Objektinspektor kannst Du einem Ereignis eine bereits existierende Routine zuweisen. Du kannst also die gleiche OnClick-Routine für alle Knöpfe verwenden.
Um zu wissen, welcher Knopf gedrückt wurde, kannst Du den Parameter Sender verwenden:
if Sender = Button1 then begin
x=0; y=0;
end
else if Sender = Button2 then begin
x=1;y=0;
end
else if
:
:
:
//nach der Abfrage dann mit x und y irgendwas
//berechnen und anschließend auf der Form darstellen.
Noch eleganter (aber auch etwas schwerer durchschaubar) geht es bei Verwendung der Tag-Eigenschaft. Du weist z.B. Button1 Tag=1 zu (im Objektinspektor), Button2 Tag=2 etc. Dann sieht das OnClick-Ereignis z.B. so aus:
var
KnopfNr: Integer;
begin
KnopfNr := (Sender as TConponent).Tag;
ShowMessage('Nummer des gedrückten Knopfs: ' + KnopfNr);
end;
Nun aber zu Deinem aktuellen Problem:
Das kommt daher, dass die Funktion die Form nicht kennt. Das ist immer dann der Fall, wenn die Funktion in einer anderen Unit deklariert wurde.
Man kann natürlich - wie vorgeschlagen - der Funktion die Form übergeben. Ich halte allerdings nicht viel davon, da s den Grundsatz der größtmöglichen Kapselung verletzt und der Code damit schwerer lesbar wird. Außerdem hängt dann die Form von der Funktion ab, so dass diese Funktion eigentlich in die Form selbst gehört z.B. in den private-Abschnitt. Dort ist dann die Form auch bekannt.
Solltest Du die Funktion in der gleichen Unit deklariert haben und kannst dort trotzdem nicht auf Komponenten zugreifen, die auf der Form liegen, musst Du erst die Form und dann die Komponente aufrufen.
also statt Button1 musst Du Form1.Button1 nehmen.
Gruß, Niels