Oficalc |
Este es el código fuente básico. Programado como aprendizaje en lenguaje pascal, para Delphi ©Borland Al pulsar una tecla, enviamos al procedimiento correspondiente Existen dos eventos de captación de teclas: On key press y On key down En On key press, se puede recoger la variable key del tipo Char (carácter) que representa el símbolo ASCII pulsado. En On key down, se recoge la variable key del tipo numérica word (256 números) que representa el número de tecla pulsada. Estos procedimientos son llamados tanto al pulsar el botón correspondiente de la calculadora como al pulsar la tecla. Creamos dos variables del tipo variant: Result y resultp que serán los resultados que se mostrarán en los display para euros (calculadora normal) y pesetas (o moneda local). Estas serán del tipo variant, que mejoran la conversión entre otros tipos de variables (entre texto y números) ya que en un momento dado, puede ser texto y en otro número. op1 y op2 son las dos variables públicas del tipo texto (string) destinadas a almacenar los dos operandos recogidos en el display. Si el usuario pulsa el operador "+" la variable op2 pasa a contener el valor de op1. Al pulsar el signo igual, la variable op1 almacena el contenido de número del display y se realiza la operación de suma correspondiente entre los dos operandos. El resultado se almacena en la variable Result que luego es mmostrada de nuevo en el display. En el procedimiento calcu recogemos en el parámetro sender del tipo string (no confundir con el sender object) el operador pulsado. (+ - * ...) procedure TForm1.numeKeyPress(Sender: TObject; var Key: Char); begin case key of
end; end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if panel1.visible=true then begin case key of
end; end; end; ******************************** En el procedimiento operarClick recogemos el operador metemático que ha pulsado el usuario y se lo asignamos a la variable: operador porque si la tecla pulsada es un número, no realiza ningún cálculo, sino que este número lo recoge y lo concatena con el anterior, pero si la tecla pulsada es un operador matemático, lo manda a ejecutar el procedimineto calcu con el parámetro (operador). Operantes es una variable booleriana del tipo "flag" que conmuta si la tecla anterior era un número o un operador. procedure TForm1.operarClick(Sender: TObject); var operador: string; begin siguienteoper:=true; coma:=false; if sender=opemas then operador:='+' else if sender=opemenos then operador:='-' else if sender=opeigual then operador:='=' else if sender=opepor then operador:='*' else if sender=opediv then operador:='/' else if sender=opeinverso then operador:='1/x' else if sender=opeigual then begin if pesetas.down then (memo1.lines.add(pantap.caption))else (memo1.lines.add pantae.caption)); end; labelinf.caption:=labelinf.caption+' '+ pantae.caption+operador; calcu(operador); if operador='=' then begin if pesetas.down then (memo1.lines.add(pantap.caption))else (memo1.lines.add(pantae.caption)); memo1.lines.add(''); tamano(''); labelinf.alignment:=taRightJustify; if pantae.caption='0' then labelinf.caption:='' else begin if operantes=false then labelinf.caption:=labelinf.caption +' '+ pantae.caption + ' ' else labelinf.caption:= pantae.caption+' '; end end; operantes:=true; end;******************************** En el procedimiento calcu recogemos en el parámetro sender del tipo string (no confundir con el sender object) el operador pulsado. Creamos dos variables del tipo variant: Result y resultp que serán los resultados que se mostrarán en los display para euros (calculadora normal) y pesetas (o moneda local). Las variables del tipo variant mejoran la conversión entre otros tipos de variables (entre texto y números) ya que en un momento dado, puede ser texto y en otro número. op1 y op2 son dos variables públicas del tipo texto (string) destinadas a almacenar los dos operandos recogidos en el display. Si el usuario pulsa el operador "+" la variable op2 pasa a contener el valor de op1. Al pulsar el signo igual, la variable op1 almacena el contenido de número del display y se realiza la operación de suma correspondiente entre los dos operandos. procedure Tform1.calcu(sender:string); var
begin
end; //-----------------------------------------------------------------------------
|