Для общего развития и понимания PB пробую собрать простой калькулятор.
Код ниже.
Работает пока: плюс, минус, умножить. разделить.
Вопрос: правильный подход или надо использовать другой принцип?
И как убирать лишние ноли (может функция есть )?
Я сделал способ, но если число целое остается запятая.
И надо еще придумать как набирать запятую только один раз.
Enumeration
#Window_0
EndEnumeration
Enumeration
#String
#Backs
#CE
#C
#But_7
#But_8
#But_9
#But_4
#But_5
#But_6
#But_1
#But_2
#But_3
#But_0
#znak
#drob
#delen
#umnoj
#minus
#plus
#sqrt
#pros
#fff
#rezul
#MC
#MR
#MS
#M_plus
EndEnumeration
Global rez3.d
Procedure Pros0() ;процедура убирает лишние нули
sdf.s = StrD(rez3)
For n =1 To Len(StrD(rez3))
df.s = Left(sdf.s, n)
fff.s = Right(df.s, 1)
If fff.s <> "0"
SetGadgetText(#String, df.s)
EndIf
Next
EndProcedure
;{------------------Окно--------------------------------
OpenWindow (#Window_0, 0, 0, 265, 240, "Калькулятор", #PB_Window_MinimizeGadget |#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
SetWindowColor(#Window_0,RGB(255, 255, 255))
StringGadget(#String, 10, 15, 245, 25, "")
ButtonGadget(#Backs, 55, 50, 70, 30, "Backspace")
ButtonGadget(#CE, 130, 50, 60, 30, "CE")
ButtonGadget(#C, 195, 50, 60, 30, "C")
ButtonGadget(#But_7, 55, 90, 35, 30, "7")
ButtonGadget(#But_8, 95, 90, 35, 30, "8")
ButtonGadget(#But_9, 135, 90, 35, 30, "9")
ButtonGadget(#But_4, 55, 125, 35, 30, "4")
ButtonGadget(#But_5, 95, 125, 35, 30, "5")
ButtonGadget(#But_6, 135, 125, 35, 30, "6")
ButtonGadget(#But_1, 55, 160, 35, 30, "1")
ButtonGadget(#But_2, 95, 160, 35, 30, "2")
ButtonGadget(#But_3, 135, 160, 35, 30, "3")
ButtonGadget(#But_0, 55, 195, 35, 30, "0")
ButtonGadget(#znak, 95, 195, 35, 30, "+/-")
ButtonGadget(#drob, 135, 195, 35, 30, ".")
ButtonGadget(#delen, 180, 90, 35, 30, "/")
ButtonGadget(#umnoj, 180, 125, 35, 30, "*")
ButtonGadget(#minus, 180, 160, 35, 30, "-")
ButtonGadget(#plus, 180, 195, 35, 30, "+")
ButtonGadget(#sqrt, 220, 90, 35, 30, "sqrt")
ButtonGadget(#pros, 220, 125, 35, 30, "%")
ButtonGadget(#fff, 220, 160, 35, 30, "1/x")
ButtonGadget(#rezul,220, 195, 35, 30, "=")
ButtonGadget(#MC, 10, 90, 35, 30, "MC")
ButtonGadget(#MR, 10, 125, 35, 30, "MR")
ButtonGadget(#MS, 10, 160, 35, 30, "MS")
ButtonGadget(#M_plus,10, 195, 35, 30, "M+")
;}------------------------------------------------------
rez1.d =0
znak.s = "0"
;{----------------- Главный цикл -------------------------
Repeat
Event = WaitWindowEvent()
Window = EventWindow()
Gadget = EventGadget()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #But_0,#But_1,#But_2,#But_3,#But_4,#But_5,#But_6,#But_7,#But_8,#But_9,#drob
If znak = "+" Or znak = "-" Or znak = "*" Or znak = "/" Or znak = "0"
rez0.s = GetGadgetText(#String)
SetGadgetText(#String, rez0+GetGadgetText(Gadget))
ElseIf znak = "="
SetGadgetText(#String, "")
rez0.s = GetGadgetText(#String)
SetGadgetText(#String, rez0+GetGadgetText(Gadget))
znak = "0"
EndIf
Case #C
SetGadgetText(#String, "")
rez1 =0
Case #plus, #minus, #umnoj, #delen
rez1= ValD(GetGadgetText(#String))
SetGadgetText(#String, GetGadgetText(Gadget))
znak = GetGadgetText(Gadget)
Case #rezul
If znak = "+" Or znak = "-"
rez3 = rez1 + ValD(GetGadgetText(#String))
Pros0()
;SetGadgetText(#String, StrD(rez3))
ElseIf znak = "*"
rez3 = rez1* ValD(Mid(GetGadgetText(#String),2))
Pros0()
;SetGadgetText(#String, StrD(rez3))
ElseIf znak = "/"
rez3 = rez1/ ValD(Mid(GetGadgetText(#String),2))
Pros0()
;SetGadgetText(#String, StrD(rez4))
EndIf
znak = "="
EndSelect
EndSelect
If Event = #PB_Event_CloseWindow
Break
EndIf
ForEver