Seite 1 von 1

Umgang mit Variablen aus TextGadget's?

Verfasst: 01.07.2010 01:44
von falke
Hallo erstmal,
ich bin neu hier, und fange gerade erst an mit PB.
Nach langem suchen habe ich mich für diese ,,Sprache“ entschieden. Früher habe ich mich rudimentär etwas mit Basic auseinandergesetzt an meinem alten ,,CPC“ (Locomotive BASIC)

Lange Zeit hatte ich 'Bammel' vor einer Objekt Orientierten Sprache..... Aber irgendwann muss man es mal angehen, wenn man doch immer wieder Interesse daran zeigt.

Also habe ich mal versucht ein Programm zu schreiben. Einen ,,Taschenrechner“ ich dachte ,,das kann ja nicht so schwer sein“

Aber denkste.....

Hier mein Problem:

Code: Alles auswählen

Define zahlspeicher$
   Define zahlspeicherB$   


If OpenWindow(0, 532, 239, 341, 501, "Taschen Rechner v2.0 (c)Sven Mayer",#PB_Window_ScreenCentered|  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar )
If LoadFont(12,"Georgia",10,#PB_Font_Bold)
           
        EndIf 

 ButtonGadget(0,20,110,50,40,"0")
  ButtonGadget(1,80,110,50,40,"1")
  ButtonGadget(2,140,110,50,40,"2")
  ButtonGadget(3,200,110,50,40,"3")
  ButtonGadget(4,20,160,50,40,"4")
   ButtonGadget(5,80,160,50,40,"5")
   ButtonGadget(6,140,160,50,40,"6")
   ButtonGadget(7,200,160,50,40,"7")
   ButtonGadget(8,20,210,50,40,"8")
   ButtonGadget(9,80,210,50,40,"9")
   ButtonGadget(10,20,270,80,40,"+")
   ButtonGadget(11,120,270,80,40,"-")
   ButtonGadget(13,210,270,80,40,"=")
   ButtonGadget(14,20,320,80,40,"C")
   TextGadget(12,10,60,180,40,"")

  
EndIf

Repeat
    EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
End
 
 EndSelect
 
    If EventID = #PB_Event_Gadget
      
      Select EventGadget()
       Case 0
      
      
       SetGadgetText(12,GetGadgetText(12)+"0")
      
       
       Case 1
       SetGadgetText(12,GetGadgetText(12)+"1")
       Case 2
       SetGadgetText(12,GetGadgetText(12)+"2")
       Case 3
       SetGadgetText(12,GetGadgetText(12)+"3")
       Case 4
       SetGadgetText(12,GetGadgetText(12)+"4")
       Case 5
       SetGadgetText(12,GetGadgetText(12)+"5")
       Case 6
       SetGadgetText(12,GetGadgetText(12)+"6")
       Case 7
       SetGadgetText(12,GetGadgetText(12)+"7")
       Case 8
       SetGadgetText(12,GetGadgetText(12)+"8")
       Case 9
       SetGadgetText(12,GetGadgetText(12)+"9")
       Case 10
        
         
       rechenzeichen$="+"
       zahlspeicher$=GetGadgetText(12)
       SetGadgetText(12,"+")
    
       
       Case 11
       rechenzeichen$="-"
       zahlspeicher$=GetGadgetText(12)
       SetGadgetText(12,"-")
       
       
       Case 13
     
       
       zahlspeicherB$=GetGadgetText(12) 
       
       
      
    
  If rechenzeichen$="+" 
             ergebnis.d=ValF(zahlspeicher$)+ValF(zahlspeicherB$)
            SetGadgetText(12,StrF(ergebnis.d))
          
          ElseIf rechenzeichen$="-"; PROBLEM HIER!!! rechnet nicht MINUS
               ergebnis.d=ValF(zahlspeicher$)-ValF(zahlspeicherB$)
            
            
            SetGadgetText(12,StrF(ergebnis.d))
           
            EndIf
            
            
         
        Case 14
        SetGadgetText(12,"")
            
        
       EndSelect
    
       
       EndIf
  
 ForEver
 
  
 
 
Ich verstehe nicht warum PB die Variable in der (fett markierten) IF ELSE Bedingung bei Minus korrekt abzieht. Der Rechenr rechnet immer PLUS...
vielleicht kann mir jemand sagen warum PB dort nicht MINUS rechnet?
Das Prog holt sich doch mit der Variable(String),,zahlspeicherB$“ den Wert aus dem TextLabel, und rechnet korrekt mit der Zahlen variable ,,zahlspeicher$“ gegen bei Else IF „-“.....

ich sehe den Fehler nicht..... :lamer:

Re: kleine Frage!?

Verfasst: 01.07.2010 01:53
von CSHW89
sagen wir mal du rechnest "10-4"
dann hast du im gadget 12 nachdem du die 4 gedrückt hast den text "-4" stehen und nicht "4".
also rechnest du "10 - (-4)"

lg kevin

ps: herzlich willkommen im forum

Re: kleine Frage!?

Verfasst: 01.07.2010 02:15
von ralle
Hab das gerade mal getestet, CSHW89 hat vollkommen recht. Du solltest entweder die zweite Zahl nicht mit dem "-" speichern, oder einfach immer die Operation "+" ausführen. Dann erhältst du eine Subtraktion.

mfG
Ralle

PS: PB ist KEINE OBJEKTORIENTIERTE Sprache. Sie ist prozedural, mit der Möglichkeit "Objekte" zu erstellen und zu verwenden. In der Hilfe wird dieser Begriff leider sehr irreführend verwendet.

Re: kleine Frage!?

Verfasst: 01.07.2010 02:33
von falke
Hallo!

AHHH Danke für den Hinweis!!!

Habe das Problem gelöst!

Mit einem einfachen Trick:

Code: Alles auswählen

  Case 10
        
         
       rechenzeichen$="+"
       zahlspeicher$=GetGadgetText(12)
       SetGadgetText(12,"+")
      Delay(500)
       SetGadgetText(12,"")
        
       
       Case 11
       rechenzeichen$="-"
       zahlspeicher$=GetGadgetText(12)
       SetGadgetText(12,"-")
       Delay(500)
       SetGadgetText(12,"")
       
       
ein einfaches Delay, und dann das Textlabel löschen!!!
Ist vielleicht nicht die Eleganteste Lösung aber funktioniert....

Danke an alle! :praise: Und für den Hinweis im besonderen darauf wäre ich nicht gekommen....

jetzt kann ich Schlafen gehen..... :D

Re: kleine Frage!?

Verfasst: 01.07.2010 09:37
von mk-soft
Nie ein Delay in einer Eventschleife verwenden, sonst kommt irgendwann von Windows die Meldung "Programm regiert nicht mehr"

Re: kleine Frage!?

Verfasst: 01.07.2010 10:43
von ts-soft
@falke
Wäre nett, wenn Du den Titel nochmal anpassen würdest. Etwas Aussagekräftigeres für die Suchfunktion des Boards.
Einfach den edit button im ersten Beitrag drücken und ändern.

Gruß
Thomas

Re: Umgang mit Variablen aus TextGadget's?

Verfasst: 01.07.2010 15:43
von falke
@mk-soft

Danke für den Hinweis, aber ich wollte das man das ,,Plus“ Zeichen auch zu Gesicht bekommt.

@ts-soft

Jo, vielleicht denn ,,Umgang mit Variablen aus TextGadget's?“.....

Werde es in der Form abändern.