Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Button wird sichtbar (https://www.delphipraxis.net/179882-button-wird-sichtbar.html)

justMatzi 8. Apr 2014 18:08

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:
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;
Ich hoffe ihr kennt meinen Fehler.
Danke schonmal
justMatzi

Der schöne Günther 8. Apr 2014 18:13

AW: Button wird sichtbar
 
Zitat:

Zitat von justMatzi (Beitrag 1255023)
Nun klappt das leider nicht so ganz.
Ich hoffe ihr kennt meinen Fehler.

Also ich kenne ihn nicht. Buttons werden enabled und disabled. Das scheint zu klappen. Kannst du etwas genauer werden, was nicht funktioniert oder sich anders verhält als erwartet?

Popov 8. Apr 2014 18:22

AW: Button wird sichtbar
 
Nur eine Anmerkung am Rande. Das:
Delphi-Quellcode:
 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;
ist u. U. interessanter wenn man es so löst:
Delphi-Quellcode:
  if Preis <=0 then
  begin
    ...
  end;

  B_Wechsel.Enabled := Wechsel > 0;
  B_zumTicket.Enabled := not B_Wechsel.Enabled;
Man spart sich die doppelte Pflege.

justMatzi 8. Apr 2014 19:01

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

Popov 8. Apr 2014 19:10

AW: Button wird sichtbar
 
Das macht er auch. Hier:

Delphi-Quellcode:
 if Preis <=0 then
  begin
   ...
   B_Wechsel.Enabled:=false;
   B_zumTicket.Enabled:=true;
   end;
Was ist aber damit?

Delphi-Quellcode:
 if Wechsel >0 then
  begin
   B_Wechsel.Enabled:=true;
   B_zumTicket.Enabled:=false;
  end;
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.

justMatzi 8. Apr 2014 19:29

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

Uwe Raabe 8. Apr 2014 19:47

AW: Button wird sichtbar
 
Zitat:

Zitat von justMatzi (Beitrag 1255029)
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.

In der ersten IF-Anweisung wird Wechsel um 100 erhöht, was mit hoher Wahrscjeinlichkeit dazu führt, daß nun die zweite IF-Anweisung ebenfalls zutrifft. Vielleicht muss die einfach nur in einen ELSE-Zweig? (Ich habe nämlich immer noch nicht verstanden, was du willst.)

Popov 8. Apr 2014 19:51

AW: Button wird sichtbar
 
Geh in die erste Zeile der oberen Prozedur, also in
Delphi-Quellcode:
Preis:=Preis-100;
. 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.

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.

TForm1 8. Apr 2014 20:03

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?

Sir Rufo 8. Apr 2014 20:12

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:
Preis
und
Delphi-Quellcode:
Gezahlt
zu nennen.
Die Bestimmung ob genug bezahlt worden ist lautet dann
Delphi-Quellcode:
if Gezahlt >= Preis then
und klingt irgendwie natürlicher ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz