![]() |
Button wird sichtbar
Hallo Community,
ich habe folgende Frage: Ich habe ein Programm geschrieben, dass vorsieht, das ein Button sichtbar wird bzw. eingeschaltet wird, wenn eine Variable einen Wert über 0 hat. Ist der Wert aber nun gleich 0, soll dieser ausgeschaltet bleiben und dafür ein anderer Button aktiviert werden. Nun klappt das leider nicht so ganz. Der Code sieht so aus:
Code:
Ich hoffe ihr kennt meinen Fehler.
procedure TForm1.B_100erClick(Sender: TObject);
begin Preis:=Preis-100; L_Rest.Caption:=inttostr(Preis)+'€'; if Preis <=0 then begin L_Wechsel.Caption:='Ihr Wechselgeld: '+inttostr((Preis-Wechsel)*-1)+'€'; L_Rest.Caption:=inttostr(0)+'€'; Wechsel:=Wechsel+100; B_5er.Enabled:=false; B_10er.Enabled:=false; B_20er.Enabled:=false; B_50er.Enabled:=false; B_100er.Enabled:=false; B_200er.Enabled:=false; B_500er.Enabled:=false; B_Wechsel.Enabled:=false; B_zumTicket.Enabled:=true; end; if Wechsel >0 then begin B_Wechsel.Enabled:=true; B_zumTicket.Enabled:=false; end; end; Danke schonmal justMatzi |
AW: Button wird sichtbar
Zitat:
|
AW: Button wird sichtbar
Nur eine Anmerkung am Rande. Das:
Delphi-Quellcode:
ist u. U. interessanter wenn man es so löst:
if Preis <=0 then
begin ... B_Wechsel.Enabled:=false; B_zumTicket.Enabled:=true; end; if Wechsel >0 then begin B_Wechsel.Enabled:=true; B_zumTicket.Enabled:=false; end;
Delphi-Quellcode:
Man spart sich die doppelte Pflege.
if Preis <=0 then
begin ... end; B_Wechsel.Enabled := Wechsel > 0; B_zumTicket.Enabled := not B_Wechsel.Enabled; |
AW: Button wird sichtbar
Also ich klicke mit Buttons den Betrag von Preis runter. Wenn die auf genau 0 auskommt, schaltet sich der Button B_Wechsel ein, obwohl er das nicht sollte. Wenn dabei genau 0 rauskommt, soll nur der Button B_zumTicket aktiviert werden, wobei der Button B_Wechsel deaktiviert bleibt.
Gruß justMatzi |
AW: Button wird sichtbar
Das macht er auch. Hier:
Delphi-Quellcode:
Was ist aber damit?
if Preis <=0 then
begin ... B_Wechsel.Enabled:=false; B_zumTicket.Enabled:=true; end;
Delphi-Quellcode:
Beide Abfragen sind in einer Prozedur. Die erste Anfrage mit Preis <= 0 stellt Wechsel.Enabled auf False, dann aber kommt die zweite Anfrage mit Wechsel > 0. Ist also der Pries <= 0, aber der Wechsel > 0, dann wird zwar zuerst der Button Wechsel abgeschaltet, dann aber gleich wieder eingeschaltet.
if Wechsel >0 then
begin B_Wechsel.Enabled:=true; B_zumTicket.Enabled:=false; end; |
AW: Button wird sichtbar
Hallo Popov,
das ist mir schon klar und das ist auch eigentlich Absicht. In der Prozedur steht ja, dass Wechsel einen höheren Wert bekommt, wenn der Preis, welcher bei jedem Klick verringert wird, unter 0 fällt, bzw. gleich 0 ist. Das soll letztendlich eine Art Wechselgeld sein, welches man durch B_Wechsel entnehmen kann. Nun ist es aber ja blöd, wenn B_zumTicket deaktiviert ist, selbst wenn das Wechselgeld 0 ist. Ich muss also, auch wenn die Variable Wechsel 0 ist, erst B_Wechsel betätigen, um B_zumTicket zu aktivieren. Und das soll halt nicht sein, wenn Wechsel =0 ist. Gruß justMatzi |
AW: Button wird sichtbar
Zitat:
|
AW: Button wird sichtbar
Geh in die erste Zeile der oberen Prozedur, also in
Delphi-Quellcode:
. Drücke da auf die Funktionstaste F5. Es wird eine Haltemarke gesetzt. Drücke danach STRG+ALT+W. Es öffnet sich das Debug-Fenster "Überwachte Ausdrücke". Zu diesem Zeitpunkt ist es noch leer. Drücke STRG+A und gibt dort "Preis" ein, dann "Wechsel", dann "B_Wechsel.Enabled", dann "B_zumTicket.Enabled" und noch alles was du wissen willst. Starte das Programm. Es bleibt an der Haltemarke stehen.
Preis:=Preis-100;
Mit der Funktionstaste F7 kannst du Zeile für Zeile durchgehen und dabei die überwachten Ausdrücke beobachten, bzw. welchen Wert sie zu dem Zeitpunkt haben. Vielleicht findest du da Antworten auf deine Fragen. |
AW: Button wird sichtbar
Ich denke auch, es liegt hier ganz einfach ein Rechenfehler vor. Einfach mal wie Popov schon sagte die Variablenwerte anschauen, und nachvollziehen was das Programm an der Stelle macht. Was ist denn der Anfangswert für Wechsel? Wenn du den plus 100 setzt und der ist schon größer als -100, wird der genannte Effekt auftreten.
OT: Kann es sein, dass der Server noch auf Winterzeit eingestellt ist, oder wird der nicht umgestellt? |
AW: Button wird sichtbar
Du hast die Variablen nicht wirklich nach ihrer Funktion benannt.
Der Preis ist der Preis und der kann nicht geringer werden, nur weil ich dort Geld gebe. Und das Wechselgeld kann ich auch nicht um den gegebenen Betrag erhöhen. Auch wenn die Berechnung irgendwie funktioniert, so ist es doch sehr schwer nachzuvollziehen, weil man sich anhand der Begrifflichkeit durch den Code hangelt - vor allem, weil man den nicht selber geschrieben hat. Aus Erfahrung kann ich dir schon mal sagen, dass es dir wahrscheinlich nach einer gewissen Zeit genauso ergehen wird. Ich würde dir empfehlen die Variablen (oder besser Eigenschaften)
Delphi-Quellcode:
und
Preis
Delphi-Quellcode:
zu nennen.
Gezahlt
Die Bestimmung ob genug bezahlt worden ist lautet dann
Delphi-Quellcode:
und klingt irgendwie natürlicher ;)
if Gezahlt >= Preis then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz