FoxPro/Visual FoxPro - Calculadora Digital

 
Vista:
sin imagen de perfil

Calculadora Digital

Publicado por Micki (9 intervenciones) el 31/10/2013 19:56:44

TENGO UN FORMULARIO DE UNA CALCULADORA,
ME SALE ESTE ERROR "Los metodos y eventos no pueden contener procedimientos o definiciones de clases anidadas" al momento de ejecutarlo, ESTE ES EL CODIGO



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
*Crea un formulario
frmMiForm=CreateObject("frmCalculadora")
*Mostrar el formularaio
frmMiForm.Show
*Inicia el procesamiento de eventos
Read events
 
Define Class frmCalculadora As form
 
Procedure Init
Public nValor1, nValor2, puntdeci,cálculorealizado,entero,operador
thisform.TextMOSTRAR.value="0,"
nValor1=0
nValor2=0
puntdeci=.T.
entero=.T.
EndProc
 
Procedure Boton.Click
Parameter nIndex
Do case
   Case InList(nIndex,1,2,3,4,5,6,7,8,9)
     thisform.MOSTRAR(Alltrim(str(nIndex)))
   Case nIndex=10
   thisform.MOSTRAR("0")
   Case nIndex=11
   nValor1=val(thisform.TextMOSTRAR.value)
   operador="/"
   Case nIndex=12
    nValor1=val(thisform.TextMOSTRAR.value)
   operador="*"
   Case nIndex=13
    nValor1=val(thisform.TextMOSTRAR.value)
   operador="-"
   Case nIndex=14
    nValor1=val(thisform.TextMOSTRAR.value)
   operador="+"
   Case nIndex=15
    if puntdeci=.T.
    thisform.TextMOSTRAR.value=thisform.TextMOSTRAR.value+"."
    puntdeci=.F.
    entero=.F.
    endif
    Case nIndex=16
      if entero=.T.
      ThisForm.TextMOSTRAR.value=str(val(ThisForm.TextMOSTRAR.Value)*(-1))
      Else
      ThisForm.TextMOSTRAR.value=str(val(ThisForm.TextMOSTRAR.Value)*(-1),8,3)
      Endif
    Case nIndex=17
      ThisForm.TextMOSTRAR.Value="0"
      Puntdeci=.T.
      nValor1=0
      nValor2=0
      calculorealizado=.T.
      entero=.T.
    Case nIndex=18
      nValor2=VAL(ThisForm.TextMOSTRAR.Value)
      Do Case
        Case operador="+"
         if entero=.F.
             ThisForm.TextMOSTRAR.Value=str(nValor1+nValor2,8,3)
         Else
            ThisForm.TextMOSTRAR.Value=str(nValor1+nValor2)
         Endif
       Case operador="-"
         if entero=.F.
             ThisForm.TextMOSTRAR.Value=str(nValor1-nValor2,8,3)
         Else
             ThisForm.TextMOSTRAR.Value=str(nValor1-nValor2)
         Endif
       Case operador="*"
         if entero=.F.
             ThisForm.TextMOSTRAR.Value=str(nValor1*nValor2,8,3)
         Else
             ThisForm.TextMOSTRAR.Value=str(nValor1*nValor2)
         Endif
      Case operador="/"
        if nValor2<>0
           if nValor1%nValor2=0
               ThisForm.TextMOSTRAR.Value=str(nValor1/nValor2)
           Else
              ThisForm.TextMOSTRAR.Value=str(nValor1/nValor2,8,3)
           Endif
       Else
          ThisForm.TextMMOSTRAR.Value="Imposible dividir por cero"
       Endif
     Endcase
     calculorealizado=.T.
   Case Index=19
     Clear Events
   EndCase
EndProc
 
   Procedure Boton.LostFocus
     Parameter nIndex
     Do Case
       Case InList(nIndex,11,12,13,14)
         Puntdeci=.T.
         ThisForm.TextMOSTRAR.Value=Space(14)
       Case nIndex=17
         nValor1=0
         nValor2=0
         ThisForm.TextMOSTRAR.Value=Space(8)
         calculorealizado=.T.
     EndCase
EndPro
 
Procedure Mostrar
Parameter cNumero
if calculorealizado=.T.
   ThisForm.TextMOSTRAR.Value=Space(14)
   calculorealizado=.F.
Endif
  ThisForm.TextMOSTRAR.Value=ThisForm.TextMOSTRAR.Value+cNumero
EndProc
EndDefine

ESTE ES LA MASCARA


Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Calculadora Digital

Publicado por Fidel José (558 intervenciones) el 31/10/2013 20:54:51
1) Te falta la definción de los objetos Boton y de TextMostrar (ADD OBJECT)
2) Si quieres que parezca una calculadora, tendrás que agregarle tantos botones como la calculadora tiene.
3) No puedes poner PARAMETERS o LPARAMETERS en eventos y métodos nativos. Particularmente, el evento click no tiene parámetros.
4) Este read Event y Clear Event debes quitarlos de ahí. Se utillizan en el inicio y en el fin del sistema.
5) El método de cálculo debes ponerlo en un Método de usuario. En los eventos click() de cada botón debes apuntar al método de usuario creado, con alguna clave (puede ser el caption del botón). por ejemplo, si el método se llama "Calcular", sería: thisform.Calcular(this.caption)
6) Si este código está en un prg distinto del main, entonces debes crear una variable pública, si no, tu form desaparecerá tan pronto como se genere.
PUBLIC frmMiForm


Opinión: para este trabajo, sería mejor utilizar el diseñador de clases y el diseñador de formularios. Igualmente, piensa que una calculadora que funcione solamente a click del ratón es inviable. Mejor es capturar las teclas pulsadas y decidir la acción en función de eso. Para tal fin debes utilizar el evento KeyPress del form, con la propiedad Keypreview=.t. Los códigos de teclas están en la consulta de INKEY()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar