Skip to main content

Canvas Power App Calculator example


 

At last I can allow myself to go back to my IT doodling. I was putting together an App for my husband to track his self-employed expenditure and income; and when coding his receipts, I am, as a "true accountant" cannot to add up in my head.

I had to go to my Calculator App on my Samsung phone and add few receipts together.

Eventually I fed up and one weekend evening later I sketched this little calculator helper.

My next step is to learn how to use components, as it will be great if calculator can be called from any app and the result can be fed to a cell.

For now there is a quick solution. Perhaps I have overcomplicated things, I am a newbie myself, so any suggestions to improve are VERY WELCOME!

These are all controls you need:
3 x Text Labels
1 x Rectangle shape
1 x Vertical gallery
1 x button as a part of gallery

lblError  Text  

varError

 lblResult  Text  

If(IsBlank(varResultFinal), varResult,varResultFinal)

 lblFormula Text  

varCalcString

lblHeader Text  

"Calculator"



galKeyPad - blank vertical gallery

Items 

["C","","",Char(247),7,8,9,"x",4,5,6,"-",1,2,3,"+",0,"00",".","="]


WrapCount 

4



Keys - Button - insert inside gallery

Fill  

If(ThisItem.Value="C",Color.Red,

ThisItem.Value="=",Color.Green,

!IsError(Value(ThisItem.Value))|| Text(ThisItem.Value)=".",RGBA(56, 96, 178, 1))


OnSelect


Set(varCalcString,varCalcString&ThisItem.Value);

 

 

If(!IsBlank(varAction),Set (varActionPrev,varAction));

 

If(!IsBlank(varCalc),

If(ThisItem.Value="+",Set(varAction,"+"),

ThisItem.Value="-",Set(varAction,"-"),

ThisItem.Value="x",Set(varAction,"*"),

ThisItem.Value=Char(247),Set(varAction,"/")));

 

 

If (varEqCount>0,Set(varCalcString,Blank()),

If(!IsError(Value(ThisItem.Value))|| Text(ThisItem.Value)=".",Set(varCalc,varCalc&ThisItem.Value),

 

   

If(IsBlank(varResult),Set(varResult,Value(varCalc))&&Set(varCalc,Blank()),Set(varCalc2,Value(varCalc))&&Set(varCalc,Blank()),

 

 

If(IsBlank(varActionPrev),          

If(varAction="+",Set(varResult,varResult+Value(varCalc2)),

    varAction="-",Set(varResult,varResult-Value(varCalc2)),

    varAction="*",Set(varResult,varResult*Value(varCalc2)),

    varAction="/"&&Value(varCalc2)<>0,Set(varResult,varResult/Value(varCalc2)),

    varAction="/"&&Value(varCalc2)=0,Set(varResult,Blank())&&Set(varError,"Error")),

    

  If(varActionPrev="+",Set(varResult,varResult+Value(varCalc2)),

    varActionPrev="-",Set(varResult,varResult-Value(varCalc2)),

    varActionPrev="*",Set(varResult,varResult*Value(varCalc2)),

    varActionPrev="/"&&Value(varCalc2)<>0,Set(varResult,varResult/Value(varCalc2)),

    varActionPrev="/"&&Value(varCalc2)=0,Set(varResult,Blank())&&Set(varError,"Error"))))));

 

 

If(ThisItem.Value="=",Set(varResultFinal,varResult)

    &&Set(varResult,Blank())

    &&Set(varCalc,Blank())

    &&Set(varCalc2,Blank())

    &&Set(varAction,Blank())

    &&Set(varActionPrev,Blank())

    &&Set(varEqCount,varEqCount+1));

 

If(ThisItem.Value="C",

Set(varCalcString,Blank())

&&Set(varCalc,Blank())

&&Set(varResult,Blank())

&&Set(varResultFinal,Blank())

&&Set(varCalc2,Blank())

&&Set(varAction,Blank())

&&Set(varActionPrev,Blank())

&&Set(varError,Blank())

&&Set(varEqCount,0))

 


Text  

ThisItem.Value


Visible 

Text(ThisItem.Value)<>""

 





Comments