AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Button wird sichtbar

Ein Thema von justMatzi · begonnen am 8. Apr 2014 · letzter Beitrag vom 9. Apr 2014
Antwort Antwort
Seite 1 von 2  1 2      
justMatzi

Registriert seit: 4. Nov 2013
6 Beiträge
 
Delphi 7 Personal
 
#1

Button wird sichtbar

  Alt 8. Apr 2014, 18:08
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Button wird sichtbar

  Alt 8. Apr 2014, 18:13
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?

Geändert von Der schöne Günther ( 8. Apr 2014 um 18:49 Uhr) Grund: Nein.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Button wird sichtbar

  Alt 8. Apr 2014, 18:22
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.
  Mit Zitat antworten Zitat
justMatzi

Registriert seit: 4. Nov 2013
6 Beiträge
 
Delphi 7 Personal
 
#4

AW: Button wird sichtbar

  Alt 8. Apr 2014, 19:01
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
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Button wird sichtbar

  Alt 8. Apr 2014, 19:10
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.
  Mit Zitat antworten Zitat
justMatzi

Registriert seit: 4. Nov 2013
6 Beiträge
 
Delphi 7 Personal
 
#6

AW: Button wird sichtbar

  Alt 8. Apr 2014, 19:29
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#7

AW: Button wird sichtbar

  Alt 8. Apr 2014, 19:47
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.)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Button wird sichtbar

  Alt 8. Apr 2014, 19:51
Geh in die erste Zeile der oberen Prozedur, also in 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.
  Mit Zitat antworten Zitat
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Button wird sichtbar

  Alt 8. Apr 2014, 20:03
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?
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Button wird sichtbar

  Alt 8. Apr 2014, 20:12
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) Preis und Gezahlt zu nennen.
Die Bestimmung ob genug bezahlt worden ist lautet dann if Gezahlt >= Preis then und klingt irgendwie natürlicher
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:54 Uhr.
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