Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Button soll Wert einer Variable +1 erhöhen - ohne globale V.
theevilworm - Do 25.02.10 14:06
Titel: Button soll Wert einer Variable +1 erhöhen - ohne globale V.
Guten Tag Community,
ich habe eine kleine Frage. Ich habe einen Button, der pro Klick die Variable "zaehler" um eins erhöhen soll, ausgehend von 0.
Das habe ich gemacht, indem ich zaehler als eine globale Variable deklariert habe und sie mit 0 initialisiert habe.
In Button1.Click steht nur noch
Jetzt frage ich mich: Ist das auch möglich, ohne globale Variablen zu nutzen?
Xion - Do 25.02.10 14:08
Naja, du kannst die Variable in die Klasse packen...dann ist es nicht mehr ganz so global :D
Alternativ könntest du auch mit Button.Tag arbeiten, die Variable ist nur in der Klasse vom Button verfügbar, wäre also noch etwas lokaler als in Form ^^ (nicht zu verwechseln mit der property Tag, verfügbar in ganz TForm ;) )
Narses - Do 25.02.10 14:27
Moin!
Xion hat folgendes geschrieben : |
Alternativ könntest du auch mit Button.Tag arbeiten, die Variable ist nur in der Klasse vom Button verfügbar, wäre also noch etwas lokaler als in Form ^^ (nicht zu verwechseln mit der property Tag, verfügbar in ganz TForm ;) ) |
Hä? :gruebel: Du redest hier in beiden Fällen von der Eigenschaft .Tag, aber einmal die des Objekts Form1 und einmal die von Button1 (mal sie Standard-Namen unterstellt). Beide sind im gleichen Namespace, also gibt´s da keinen Sichtbarkeitsunterschied. Oder ich habe dich nicht richtig verstanden. :nixweiss:
theevilworm hat folgendes geschrieben : |
Das habe ich gemacht, indem ich zaehler als eine globale Variable deklariert habe und sie mit 0 initialisiert habe.
In Button1.Click steht nur noch
Jetzt frage ich mich: Ist das auch möglich, ohne globale Variablen zu nutzen? |
Klar ist das möglich, aber macht keinen Sinn: ;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1Click(Sender: TObject); var Zaehler: Integer; begin Inc(Zaehler); end; |
Bei dieser Version steht dir aber die Variable Zahler nur innerhalb der Methode zur Verfügung, du kannst auf den Wert nicht ausserhalb davon zugriefen. :!:
Da das wohl nicht das sein wird, was du willst, musst du dir überlegen, wo in deinem Programm die Variable sichtbar sein soll:
- im ganzen Programm: im var-Abschnitt des Projektdatei deklarieren
- in einer Unit: im var-Abschnitt der unit deklarieren
- in einer Klasse:
- in der ganzen Klasse: im public/published-Abschnitt deklarieren
- nur innerhalb der Klasse: im private-Abschnitt deklarieren
Mal so als grober Überblick. Generell gilt: so lokal wie möglich, so global wie nötig. :idea: ;)
cu
Narses
Xion - Do 25.02.10 16:39
Narses hat folgendes geschrieben : |
Moin!
Xion hat folgendes geschrieben : | Alternativ könntest du auch mit Button.Tag arbeiten, die Variable ist nur in der Klasse vom Button verfügbar, wäre also noch etwas lokaler als in Form ^^ (nicht zu verwechseln mit der property Tag, verfügbar in ganz TForm ;) ) | Hä? :gruebel: Du redest hier in beiden Fällen von der Eigenschaft .Tag, aber einmal die des Objekts Form1 und einmal die von Button1 (mal sie Standard-Namen unterstellt). |
Ne, Button.Tag hat ja ne Variable, die ist nur im Button sichtbar. Das property macht die zwar sichtbar nach außen, aber eigentlich ist sie ja private. Also die Variable selbst ist nur im Button sichtbar, Button.Tag aber in ganz TForm (bzw wo der Button halt ist) :mrgreen:
Narses hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1Click(Sender: TObject); var Zaehler: Integer; begin Inc(Zaehler); end; | Bei dieser Version steht dir aber die Variable Zahler nur innerhalb der Methode zur Verfügung, du kannst auf den Wert nicht ausserhalb davon zugriefen. :!:
|
ist nicht vielmehr das Problem, dass der Wert beim nächsten Aufruf weg ist?
Narses - Do 25.02.10 17:18
Moin!
Xion hat folgendes geschrieben : |
Ne, Button.Tag hat ja ne Variable, die ist nur im Button sichtbar. Das property macht die zwar sichtbar nach außen, aber eigentlich ist sie ja private. Also die Variable selbst ist nur im Button sichtbar, Button.Tag aber in ganz TForm (bzw wo der Button halt ist) :mrgreen: |
Und was ist dann der von dir beschriebene Unterschied zu Form1.Tag? :nut: Wer nimmt hier wen auf den Arm? :lol:
Und der nächste Aufruf erfolgt nicht vielleicht zufällig auch "ausserhalb der Methode"? :zwinker:
cu
Narses
Gammatester - Do 25.02.10 17:41
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); {$j+} const zaehler: integer = 0; begin inc(zaehler); Button1.Caption := IntToStr(Zaehler); end; |
Tilman - Do 25.02.10 17:58
theevilworm hat folgendes geschrieben : |
Ich habe einen Button, der pro Klick die Variable "zaehler" um eins erhöhen soll [..] Ist das auch möglich, ohne globale Variablen zu nutzen? |
Eher nicht. Wenn man eine globale Variable um eins erhöhen will, braucht man eine globale Variable. Wenn man einen Teller Suppe essen will, wird das ohne einen Teller Suppe zu haben schwierig.
Wenn es dir aber weniger um die Variable, als das registrieren des Button-Klicks geht, dann kannst du wie bereits von anderen angesprochen die Property Tag verwenden. Von der Idee mit der Konstante würde ich abraten, auch wenn sie funktioniert.
theevilworm - Fr 26.02.10 21:20
Hallo,
danke für die zahlreichen Antworten!
Ich brauch nicht unbedingt eine globale Variable. Ich benutze die Variable nur in dem Button. Mein Problem war, dass ich ja genau das nicht machen kann:
Delphi-Quelltext
1: 2:
| procedure TForm1.Button1Click(Sender: TObject); var zaehler: integer = 0; |
mit einer lokalen Variable. Und nn wusste ich nicht, wie ich die Variable in der gleichen Prozedur zaehler auf 0 setzen konnte, in der ich zaehler auch immer um eins erhöhen will. Wie mache ich das?
Delphi-Quelltext
1: 2:
| const zaehler: integer = 0; |
Hm, was ist const - ich schätze mal Konstante? Was ist der Unterschied zu einer Variable?
ffgorcky - Fr 26.02.10 21:52
Du könntest auch -wie von
Tilman angesprochen- die Eigenschaft Tag des Buttons nehmen und dort Deine Zahl reinschreiben,
wie es z.B. auch in Thread
593378 [
http://www.delphi-forum.de/viewtopic.php?p=593378#593378] vorgeschlagen wird.
theevilworm hat folgendes geschrieben : |
Hm, was ist const - ich schätze mal Konstante? Was ist der Unterschied zu einer Variable? |
Naja, wie es der Name doch schon sagt, bekommt diese "Variable" ja schon von vornherein einen festen -
nicht zu ändernden - Wert zugewiesen. Sie bleibt eben konstant bei diesem Wert.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!