Seite 1 von 1

Prozentrechner

Verfasst: 03.05.2006 07:22
von C4rizz
Hi
Ich will ein Prozentrechner mit allen drei Prozentformeln und einer grafischen Oberfläche programmieren.
Hab schon den Anfang fertig hier die Source:

Code: Alles auswählen

;Ultimate Prozentrechner
If OpenWindow(0,512,380,400,220,1,"Ultimate Prozentrechner")
If CreateGadgetList(WindowID())
    ButtonGadget(1,20,20,100,20,"Prozentwert")
    ButtonGadget(2,20,80,100,20,"Prozentsatz")
    ButtonGadget(3,20,140,100,20,"Grundwert")
    ButtonGadget(4,380,200,20,20,"I")
    ListViewGadget(5,150,20,220,140)
    StringGadget(6,20,175,100,20,"")
    ButtonGadget(7,150,175,100,20,"Rechnen")
    ProgressBarGadget(8,270,175,100,20,1,10000)
EndIf
Repeat
    EventID = WaitWindowEvent()
      If EventID = #PB_Event_CloseWindow 
        Quit = 1
      EndIf
      If EventID = #PB_Event_Gadget
      If EventGadgetID()=1
      MessageRequester("Test","Test",0)
      EndIf
      If EventGadgetID()=4
      MessageRequester("About","Ultimate Prozentrechner created by C4rizz.",0)
      EndIf
        If EventGadgetID()=7
          a$=GetGadgetText(6)
          AddGadgetItem(5,-1,""+a$)
      EndIf
      If EventGadgetID()=7
        For a=1 To 100000
           SetGadgetState(8,a)
           Next      
  EndIf
  EndIf
  Until Quit=1
EndIf
End
So jetzt weiss ich aber net, wie ich ich die Eingabeaufforderung, der user soll die werte die berechnet werden sollen eingeben, und die Rechnung und Ausgabe dieser werte gestalten soll.
Zudem weiss ich net wie ich die drei Prozentformeln den jeweiligen rechnungen zuweisen soll.
Könnt ihr mir helfen?
PS:Wie kann ich der StringGadget sagen, dass sie auf die Taste Enter reagiert und nicht durch drücken des jeweiligem Buttons?

Puh das wars ersma! :mrgreen:

Re: Prozentrechner

Verfasst: 03.05.2006 11:19
von Karl
C4rizz hat geschrieben: PS:Wie kann ich der StringGadget sagen, dass sie auf die Taste Enter reagiert und nicht durch drücken des jeweiligem Buttons?
In dem du das Event #PB_EventType_ReturnKey behandelst:

Achtung! Das StringGadget muss #PB_String_MultiLine als Flag haben.

Code: Alles auswählen


Fragmente

...
StringGadget(6,20,175,100,20,"",#PB_String_MultiLine)
...

innerhalb der Repeat-Schleife:

      Event = WaitWindowEvent()
      GI = EventGadgetID()
      ET = EventType()
      Select Event
        Case #PB_Event_CloseWindow
          quit = 1
        Case #PB_EventGadget
          Select GI
            Case 6
              Select ET
                Case #PB_EventType_ReturnKey
                ;tue irgendwas
                MessageRequester("Actionman", "Geht ab, Alter.")
              EndSelect
            case ...
          EndSelect
      EndSelect
Eingaben kann man über den InputRequester empfangen. StringGadgets gehen aber auch. Mir ist nicht ganz klar, wozu das ListView sein soll.

Nochwas: Gott sei dank, gibt es Alt+F4, aber kennt nicht jeder. :)

Gruß Karl

Verfasst: 03.05.2006 11:33
von Pelagio
:allright:
Ich habe nicht ganz verstanden was Du genau willst aber ich glaube ich kann dir mit den was ich an Source hereinstelle dir eine Möglichkeit aufzeigen wie man es machen könnte, bezüglich deinen Vorgaben.

Code: Alles auswählen

;Ultimate Prozentrechner 

Enumeration 

#Window
#btn_pWert
#btn_pSatz
#btn_gWert
#btn_Info
#btn_Calc
#lvw_Werte
#str_Daten
#pbr_Calc
#key_Enter

EndEnumeration

Procedure Menue_Klick(Value.l)
   Protected Daten.s
   
   If (Value=#key_Enter)
      a.s = GetGadgetText(#str_Daten)
      Select 1
         Case GetGadgetState(#btn_pWert)
            Daten = " pw"
            SetGadgetState(#btn_pWert, 0)
         Case GetGadgetState(#btn_pSatz)    
            Daten = " %"
            SetGadgetState(#btn_pSatz, 0)
         Case GetGadgetState(#btn_gWert)
            Daten = " gw"
            SetGadgetState(#btn_gWert, 0)
      EndSelect    
      If (Daten<>"") And (GetGadgetText(#str_Daten)<>"")
         AddGadgetItem(#lvw_Werte, -1, GetGadgetText(#str_Daten)+Daten) 
      EndIf   
   EndIf   
   SetGadgetText(#str_Daten,"")
EndProcedure

Procedure.s Calculation(Value.l)
   Protected W.d, P.d, G.d, Result.d
   
   Wert01.s = GetGadgetItemText(#lvw_Werte, Value  , 0)
   Wert02.s = GetGadgetItemText(#lvw_Werte, Value-1, 0)

   If FindString(Wert01,"pw", 1)
      W = ValD(ReplaceString(Wert01, "pw", ""))
   ElseIf FindString(Wert01,"%", 1)
      P = ValD(ReplaceString(Wert01, "%", ""))
   ElseIf FindString(Wert01,"gw", 1)
      G = ValD(ReplaceString(Wert01, "gw", ""))
   EndIf
   
   If FindString(Wert02,"pw", 1)
      W = ValD(ReplaceString(Wert02, "pw", ""))
   ElseIf FindString(Wert02,"%", 1)
      P = ValD(ReplaceString(Wert02, "%", ""))
   ElseIf FindString(Wert02,"gw", 1)
      G = ValD(ReplaceString(Wert02, "gw", ""))
   EndIf
   
   Select 0
      Case W: Result = G*P/100 
      Case P: Result = W*100/G
      Case G: Result = W*100/P
   EndSelect
   ProcedureReturn StrD(Result, 2)
EndProcedure

If OpenWindow(#Window,512,380,400,220,"Ultimate Prozentrechner") 
   If CreateGadgetList(WindowID(#Window)) 
      ButtonGadget     (#btn_pWert , 020, 020, 100, 020, "Prozentwert", #PB_Button_Toggle) 
      ButtonGadget     (#btn_pSatz , 020, 080, 100, 020, "Prozentsatz", #PB_Button_Toggle) 
      ButtonGadget     (#btn_gWert , 020, 140, 100, 020, "Grundwert"  , #PB_Button_Toggle) 
      ButtonGadget     (#btn_Info  , 380, 200, 020, 020, "I") 
      ListViewGadget   (#lvw_Werte , 150, 020, 220, 140) 
      StringGadget     (#str_Daten , 020, 175, 100, 020, "") 
      ButtonGadget     (#btn_Calc  , 150, 175, 100, 020, "Rechnen") 
      ProgressBarGadget(#pbr_Calc  , 270, 175, 100, 020, 1, 10000) 
   EndIf
   AddKeyboardShortcut(#Window, #PB_Shortcut_Return, #key_Enter)
   SetActiveGadget(#str_Daten)
EndIf
    
Repeat 
   EventID = WaitWindowEvent() 
   
   Select EventID   
      Case #PB_Event_CloseWindow: Quit.b = 1 
      Case #PB_Event_Gadget 
         Select EventGadget()
            Case #btn_pWert: SetGadgetState(#btn_pSatz, 0): SetGadgetState(#btn_gWert, 0):SetActiveGadget(#str_Daten)
            Case #btn_pSatz: SetGadgetState(#btn_pWert, 0): SetGadgetState(#btn_gWert, 0):SetActiveGadget(#str_Daten)
            Case #btn_gWert: SetGadgetState(#btn_pWert, 0): SetGadgetState(#btn_pSatz, 0):SetActiveGadget(#str_Daten)
            Case #btn_Info : MessageRequester("About","Ultimate Prozentrechner created by C4rizz.",0) 
            Case #btn_Calc 
               If (CountGadgetItems(#lvw_Werte)>1)
                  AddGadgetItem(#lvw_Werte, -1, "=") 
                  AddGadgetItem(#lvw_Werte, -1, Calculation(CountGadgetItems(#lvw_Werte)-2))
               EndIf
            Case #lvw_Werte
               If EventType()=#PB_EventType_LeftDoubleClick: ClearGadgetItemList(#lvw_Werte): EndIf
         EndSelect
      Case #PB_Event_Menu: Menue_Klick(EventMenu())
   EndSelect
Until Quit=1 
 
End
PB 4
:allright:

Re: Prozentrechner

Verfasst: 03.05.2006 14:38
von AND51
Karl hat geschrieben:Nochwas: Gott sei dank, gibt es Alt+F4, aber kennt nicht jeder. :)
Wie ich ja immer zu sagen Pflege: "[ALT]+[F4] und der Tag gehört dir!"

P.S.: Kann man die Sache mit der ENTER-Taste nicht auch via GetAsyncKeyState_() lösen?

Verfasst: 03.05.2006 15:17
von Tafkadasom2k5
@AND:
Theoretisch schon, nur dann ist es unabhängig vom Fensterfokus.
Es ist doch auch blöd, wenn der Rechner irgendwas rechnet, und in wirklichkeit hat er Word nur gerade dazu bewegt einen Zeilenumbruch zu tätigen ^^ :wink:

@Topic:
Ansonsten hätte ich (soweit ich deine Frage richtig intepretiere" folgenden Ansatz:

1 Button: "Calculate!"

Wenn der User "Calulate!" drück, wird geprüft, welche Felder befüllt worden sind:

Code: Alles auswählen

If Len(GetGadgetText(#String_Prozentwert)) and Len(GetGadgetText(#String_Prozentsatz))
GebeGrundwertAus()
EndIf
Ist nur ne Idee, und erleichtert die Eingaben.
Wenn ALLE angegeben sind, kannst du ja ausgeben lassen, ob die Wertepaare zueinander passen, und "Stimmt!" oder "Stimmt nicht!" ausgeben lassen...
Nur als Anreiz :)

Gr33tz
Tafkadasom2k5

Verfasst: 03.05.2006 15:17
von Karl
Das würde jedes Enter abfangen, also nicht nur die, die im StringGadget auftauchen.

Gruß Karl

Mist! The Artist war schneller.

Verfasst: 03.05.2006 20:14
von C4rizz
Danke an alle.
Bin leider noch nicht dazu gekommen alles auszuprobieren aber werd mich gleich bei machen.
Bis denn <)