Hallo und herzlich Willkommen im Forum!
Zuerst einmal, weshalb es so nicht klappt:
(1) i ist lokal deklariert. Sobald die Prozedur beendet ist, gehen alle Informationen über i verloren. Wird also der Button das nächste mal betätigt, gibt es keinerlei Information darüber, welchen Wert i beim letzen Klick hatte
(2) Selbst wenn diese Information vorhanden wäre, würdest Du sie ja mit i:=0 (ganz am Anfang) überschreiben.
So, und wie macht man es nun? So:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Panel1.Visible := not Panel1.Visible; end; |
Panel1.Visible ist ein Boolean und mit "not" kann ich den Wert eines Boolean (also Wahrheitswertes) umkehren. Sozusagen das "-1 mal" der Wahrheitswerte.

Und genau das ist es ja. Wenn sichtbar, soll es
nicht sichtbar sein; wenn nicht sichtbar, soll es sichtbar (=
nicht nicht sichtbar) sein.
Wenn Du es jedoch mit Deinen Variablen machen willst, dann solltest Du Dich mal mit dem Unterschied zwischen
globalen und
lokalen Variablen beschäftigen.
Hoffe, geholfen zu haben!
MfG
Peter
P.S.: Könntest Du demnächst statt den Code- die Delphi-Tags verwenden? Danke!
//edit: Matze war zwar schneller, aber dafür ist mein Code kürzer und mein Text länger!

Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".