Deine Variablen n und i sind lokale Variablen der Prozedur "Button1Click", und werden bei jedem Mal Button klicken neu erstellt. (
Edit: Jo, verguckt. Das kommt von den Namen, die man in der Kürze idR wenn überhaupt nur als lokale Variablen nimmt.) Du weist ihnen ja sogar selbst noch (richtigerweise) einen Startwert zu - dies passiert bei JEDEM Mal klicken. Klar, denn der Code
n := 1;
steht ja auch in der Prozedur, in der du beschrieben hast, was bei einem Klick passieren soll. Das passiert dann auch
Du musst dir die aktuell zu beschreibende Zeile daher ausserhalb deriner "Button2Click" Prozedur merken. Zum Beispiel als Variable des Formulars, eine gute Stelle wäre im Private-Abschnitt davon.
In den Zeilen
dürfte der Compiler auch Hinweise geben, dass die hier zugewiesenen Werte niemals benutzt werden. (Es wird vor Prozedurende nicht mehr von ihnen gelesen, somit verfallen die Werte. Da ja beim nächsten Klick die Variablen wieder taufrisch sind.)
Edit: Ok, kommt bei dir in dem Fall nicht, da die Variablen ja global sind*. Da ist dann das Setzen auf 1 im Click das einzige Problem. Zumindest funktional.
Es ist i.A. schon meist sehr sehr hilfreich einige Fehler zu finden, wenn man die Warnungen und Hinweise des Compilers beachtet und zusieht, diese auf 0 zu bekommen. Das ist sogar nicht nur eine leere Predigt, mir hat das auch eine nötige Portion Selbstdisziplin gebracht, die mir definitiv besseren und besser handhabbaren Code gebracht hat.
Drei andere Dinge noch:
1) Wenn du deinen Code in [ delphi] [ /delphi] Tags (ohne die Leerzeichen) packst, wird er schön formatiert hier dargestellt und ist viel leichter zu lesen.
2) Bitte gewöhne dir schnellstmöglich an deinen Komponenten aussagekräftige Namen zu geben. Mit Edit1 und Button4 kannst du selbst schon nach ein paar Wochen nichts mehr anfangen, und andere die deinen Code lesen erst recht nicht. (Ähnlich wie die Warnungen und Hinweise. Man tut sich einfach selbst einen gewaltigen Gefallen damit, auch wenn es erst wie "zu viel" gemachte Arbeit aussieht. Ist es
nie!)
3) Du setzt in deinem Stringgrid anfangs zwei Zeilen fest. Dies musst du natürlich auch erhöhen, wenn mehr Zeilen dazu kommen.
*) Und warum globale Variablen sehr böse sind, findet sich durch eine schnelle Forensuche auch hier.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)