necesito orientación sobre programación, me ayuda alguien ?

Iniciado por PROFENIX, 23 Diciembre 2018, 22:32 PM

0 Miembros y 2 Visitantes están viendo este tema.

Serapis

#20
Te está señalando que no encuentra el fichero mscoree.dll en ninguna de las rutas (environ Path) que el sistema tiene habilitado buscar...

Me temo que si, que finalmente te pediría como mínimo instalar el framework 2.0, en caso de que el win2000 lo admitiese.

Bueno, miro de hacerte el programa en VB6 y te lo paso, en realidad son 5 minutos... es de suponer que al menos sí tendrás ahí el runtime de VS6.0 instalado en ese equipo...

pd.: mscoree.dll es parte del runtime del .NET framework



Descargar desde aquí:
https://workupload.com/file/VTqLuWdj

Está comprimido con winrar. Después de extraerlo, aunque no tiene virus, siempre es recomendable pasarle el antivirus (por ejemplo desde https://www.virustotal.com ) antes de ejecutarlo, nunca se sabe si fue manipulado en la nube...

Una captura de como se ve...


Y aquí el código en vb6...

Código (vb) [Seleccionar]


Private Const c_VALID_CHARS         As String = "0123456789"
Private Const c_COLOR_AGUAMARINA    As Long = &HF0F0E0
Private Const c_COLOR_ARENA         As Long = &HC0D0E0

Private NextFoco                    As Integer
Private Valores                     As Variant









Private Sub Form_Load()
    Valores = Array(50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01)
End Sub

Private Sub ComBorrar_Click()
    Dim k As Integer
   
    For k = 0 To 11
        TxtMonedas(k).Text = "0"
        Call TxtMonedas_Validate(k, False)
    Next
   
    Call Calcular
End Sub

Private Sub TxtMonedas_Change(Index As Integer)
    TxtMonedas(Index).BackColor = c_COLOR_ARENA
    TxtTotal.Text = String$(8, "-")
    TxtImporte(Index).Text = String$(8, "-")
End Sub


' Limitado a 8 cifras.
' Es decir valor máximo admitido en cantidad es: 99.999.999
Private Sub TxtMonedas_Validate(Index As Integer, Cancel As Boolean)
    Dim Valor As Long
   
    If TryParseToLong(TxtMonedas(Index).Text, Valor) = False Then
        Cancel = True
        Call MsgBox("No se acepta como un número el contenido para " & TxtMonedas(Index).Tag, vbExclamation, "Error: No es un número (entero y positivo)")
        TimFoco.Enabled = True ' para seleccionar su contenido listo para editar.
    Else
        TxtMonedas(Index).BackColor = c_COLOR_AGUAMARINA
        TxtImporte(Index).Text = CStr(Valores(Index) * Valor)
        Call Calcular
    End If
End Sub

' Realiza la suma y presenta el resultado en el textbox del total.
Private Sub Calcular()
    Dim k As Long, n As Single
   
    For k = 0 To 11
        n = (n + CSng(TxtImporte(k).Text))
    Next
   
    TxtTotal.Text = CStr(n)
End Sub

' por cada carácter en el texto verifica si es uno entre: "0123456789",
'  si es así devuelve TRUE y el texto se convierte en el valor (un entero de 31 bits).
'  si no devuelve FALSE y el valor se hace 0
Private Function TryParseToLong(ByRef Texto As String, ByRef Valor As Long) As Boolean
    Dim k As Long
   
    If (Len(Texto) > 0) Then
        For k = 1 To Len(Texto)
            If (InStr(c_VALID_CHARS, Mid$(Texto, k, 1)) = 0) Then
                Valor = 0
                Exit Function
            End If
        Next
        Valor = CLng(Texto)
        TryParseToLong = True
    Else
        Valor = 0
    End If
End Function

'---------------------------------------------------
'  Saltar el foco entre controles...
'  En realidad para eso sirve la tecla 'tab'
'    pero lo he dejado como tu tenías.
'---------------------------------------------------
'

' Entrega el foco al siguiente textbox.
Private Sub TimFoco_Timer()
    TimFoco.Enabled = False
   
    TxtMonedas(NextFoco).SetFocus
End Sub

' Deja seleccionado el contenido del textbox que tiene el foco (para editar/borrar fácilmente).
Private Sub TxtMonedas_GotFocus(Index As Integer)
    With TxtMonedas(Index)
        .SelStart = 0
        .SelLength = Len(.Text)
    End With
End Sub

' Si pasa la validación...
'   Pasar el foco automáticamente al siguiente control.
'   tras el último se pasa al botón total.
Private Sub TxtMonedas_KeyUp(Index As Integer, KeyCode As Integer, Shift As Integer)
    Dim cancelar As Boolean
    If (KeyCode = vbKeyReturn) Then
        Call TxtMonedas_Validate(Index, cancelar)
        If (cancelar = False) Then
            NextFoco = (Index + 1)
            If (Index < 11) Then
                TimFoco.Enabled = True
            Else
                NextFoco = 0 'Index
                ComTotal.SetFocus
            End If
        Else
            TxtMonedas(Index).SetFocus
        End If
    End If
End Sub

Private Sub TxtMonedas_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
    NextFoco = Index
End Sub

' el botón es competamente inútil, solo tiene por objeto invitar a pulsarlo para que
'   el textbox que tiene el foco, pierda el control y proceda la validación.
' Y como adquiere el foco, presionar intro, entregamos el foco al primer textbox.
Private Sub ComTotal_KeyUp(KeyCode As Integer, Shift As Integer)
    If (KeyCode = vbKeySpace) Then
        NextFoco = 0
        TimFoco.Enabled = True
    End If
End Sub



Cuando estás editando un campo, se pone de color arena y la casilla de importe y del total, se borra su contenido (tal como se ve en la siguiente imagen), para indicar que debe recalcularse al termino de la edición... así cuando un valor aparece en el total, se corresponde fielmente con el contenido de cada casilla y todas tendrán su color de  fondo en aguamarina.


Serapis

#21
Por cierto me olvidaba decirte que usa la fuente "Segoe UI", así que cópiala de tu equipo y la pegas en el win 2000, si no intentará tomar la que mejor se adapte a las características... pero a saber si acierta, y puede verse mal.



He actualizado la descarga, tenía un pequeño error que colgaba el programa cuando se dejaba vacío el textbox...
Y he aprovechado para añadir un botón 'borrar' y una imagen de calculadora.

Recuerda que puedas saltar entre cajitas de texto, usando la tecla 'Tab' (esto en prácticamente todas las ventanas de Win2), pero igualmente he dejado la funcionalidad que tu tenías a través de la tecla 'intro' (tecla 'space' para el botón 'total').


PROFENIX

#22
Hola te comento, yo uso visual estudio 2015 cree un nuevo proyecto elegi visual basic, y elegi la opcion universal de windows y luego la primera opcion, total que al form que aparece solo añadi un label y luego lo compile en x86. Para probar si asi en el pc del windows 2000 funcionaria y sigue sin ir. En cambio tu programita si que va. Con lo que me pregunto, que estoy haciendo mal en el visual studio ? O es que me tendria que buscar el visual basic 6.0 ?

aparte de eso tambien te comento otro problema que tengo.

en el visual estudio el codigo que me has puesto me salen errores por todos lados como por ejemplo diciendome de que Variant'; use el tipo 'Object' en su lugar y como ese mas cosas.

sospecho que algo estaré haciendo mal, el que ni idea.

alguna sugerencia de como arreglarlo ?

una captura de los fallos



por otro lado de ese codigo no consigo diferenciar que nombre les tengo que poner a los textbox para hacerlos coincidir con el codigo que me pusiste, para ir entendiendolo mas o menos.

Serapis

#23
Citarlo compile en x86. Para probar si asi en el pc del windows 2000 funcionaria y sigue sin ir.
En windows 2000, no sé que versión soporta del NET framework, yo te decía como mucho hasta la versión 2.0, pero es probable que ni eso (jamás tuve la versión 2000, pasé directamente del 98 al XP).

En cualquier caso, si funcionara, como mínimo exige tener instalado el framework 2.0 Es decir si no está instalado, nunca funcionará ningún programa de NET que requiera NET Framework 2.0.

Vete a la carpeta de windows, (en el win 2000), mira una ruta tal que así (cambiando la unidad de instalación si no fuera "C:")
C:\WINDOWS\Microsoft.Net\Framework
Si existe dicha carpeta, ahí saldrán otras carpetas, cuyo nombre es similar a éste:
v2.0.50727
En ése caso indica que es la versión 2.0.xxx
Interesa ver cual es la versión mayor instalada, pués está señalando cual es/son los frameworks instalados de NET.

Si ni siquiera existe tal carpeta, o bien win 2000 no soporta NET, o bien no tienes ninnguna versión instalada.

Como dices que no quieres instalar nada... pués no tiene sentido que te diga:
Busca en la página de MS, la versión Net Framework 1.0, elige tu idioma (el mismo que tiene instalado el S.O. (español, inglés, ...???), lo descargas y lo instalas, luego igual con el Net Framework 1.1, luego igual con el Net framework 2.0, y luego con el Net framework 3.0 ... desde el momento en que te dijere que el S.O. no está diseñado, no admite ... es inútil instalar una versión más nueva. Pero al menos saber si tiene instalado o admite alguna versión, ayudaría...

CitarEn cambio tu programita si que va.
El programa está compilado en Visual Basic 6 (Visual Studio versión 6.0 (1998)).
...y el código expuesto (en ese mismo mensaje), es el código del programa.

Visual Basic (Visual Studio) 6.0 es enteramente compatible con Win 2000.

CitarCon lo que me pregunto, que estoy haciendo mal en el visual studio ?
sospecho que algo estaré haciendo mal, el que ni idea.
No puede copiarse y pegarse  código de un proyecto en VS6.0 en un proyecto de NET (da igual qué versión) y esperar que funcione, sin cambios.

Citaralguna sugerencia de como arreglarlo ?
Puede uno copiar y pegar, si luego supiera recodificarlo haciendo los cambios pertienentes.
En las primeras versiones de VB NET (VB NET2003 y VB NET2005, al menos), había un importador de código de VS6, y añadía comentarios sobre lo que ya no se admitía y que lo remplazaba... aún siguiendo todas las directrices, no era ni mucho menos óptimo (más bien deficiente)... se trataba más de una estrategia para animar a la gente a migrar a VS NET

...pero no tiene sentido hacer eso, ya estuvimos anteriormente haciendo código para NET... y funcionaba.
Faltaba solo optimizarlo, hasta entonces el código era para que resultara asimilable de entender.

Qué sentido tendría ahora tomar código en VS6, para transformarlo a VB NET, si ya tenemos ese código en NET hecho?.

Ahora mismo, tu problema no es el código, tu problema es que la palataforma donde quieres integrarlo es completamente distinta de la plataforma de producción. ...Si win 2000 admite algún framework de NET (yo creo que sí, que alguno debe admitir), pero si no lo tienes instalado y no quieres instalarlo... son y serán incompatibles.

...pero ni siquiera tienes ese problema, toda vez que ya he creado yo el programa para tí, con Visual Basic 6.0...

Citar
O es que me tendria que buscar el visual basic 6.0 ?
Si quieres compilarlo por tu cuenta sí.

Pero ten en cuenta que sobre la interfaz se han reflejado valores en propiedades, que ahí no aparecen... por ejemplo los textbox de monedas, son un array de textboxes, lo mismo los textboxes de importe y los labels de valor.
Los arrays de controles en NET, es algo que nunca se adoptó... De hecho en las postrimerías, un proyecto que tuve que readaptar por exigencias de una empresa en mantener el código lo más similar (en apariencia textual) posible a VB6, tuve que remplazar tales arrays por colecciones del mismo nombre, para que al leer el código les 'sonara' como igual, aunque por debajo, era completamente distinto.

Pero bueno, si te consigues un IDE de VB6.0 y lo instalas, te paso el texto íntegro del proyecto, o mejor copia de los ficheros del proyecto.

El código aún tratandose del lenguaje Basic y del mismo "fabricante", es totalmente distinto en VB6 que en VB NET.
No merece la pena perder el tiempo aprendiendo VS6.
Para quien a estas alturas no sabe nada de él, es preferible que aprenda Visual Basic NET.



En cualquier caso, si todo lo que necesitabas era esa calculadora, ya la tienes... para qué darle más vueltas?.
Por cierto, no sé si te bajaste la versión previa o la última que puse, olvidé hacer el chequeo de cuando se dejaba en blanco el textbox, que cerraba el programa... para disitnguirlo de la previa, aproveché para poner una imagen de una calculadora en la esquina superior izquierda.

Por cierto tengo curiosidad por saber que significa eso de "...de la CM".

PROFENIX

Pues para mi resulta una putada muy grande lo que me acabas de responder. porque después de calentarme la cabeza en como solucionar los distintos problemas de la versión que ya tenia casi lista que solo faltaba pulir la un poco, porque como dije desde el comienzo de programación 0 conocimientos y no esperaba ayuda como la que me has ofrecido, pues después de ver los resultados me estaba gustando e incluso podríamos decir que me estaba sintiendo orgulloso de haber conseguido lo que ya había conseguido, ahora resulta que todo se va a la ***** por culpa del Framework. siento un cabreo y frustración internamente de la ostia.

agradezco muchísimo tu ayuda y tu ofrecimiento de hacerlo por mi, de verdad te lo digo.

lo que a continuación voy a decir es el como lo habría hecho yo.

solo que yo no habría añadido esos colores a los textbox como hiciste tu, los habría dejado en blanco y el tipo de letra arial en negrita, no habría añadido el botón que pone total y como ultimo el sonido que hace cuando cambia de textbox si se pudiera lo habría anulado ya que es algo molesto. lo otro que imagino que es por cuestiones de ir rapido, es el tema de billetes que en el de 5 € a puesto un 0 delante y en las monedas de 0,50 se te paso poner un espacio con el simbolo del €

en cuanto al detalle del icono de la calculadora no lo habría puesto ni tampoco ese titulo en el programa calculadora monetaria.... lo habría llamado como que ya has visto calculadora de la CM.


repito agradezco muchísimo tu ofrecimiento, pero claro me encuentro ahora con un programa el cual el icono de la calculadora por ejemplo se solapa con las letras de al lado y de abajo, osea que esta como puesta encima de la C de calculadora y de la B de billetes, aparte de los detalles del 0 y del €. en cuanto a tamaño creo que si que esta bien o un pelin mas grande pero no mucho mas. el cual no e podido personalizarlo yo o el adaptarlo como le podría gustar al resto de mis compañero de trabajo pero sin que se flipasen lógicamente. imagino que de hay viene mi frustración, porque no tengo derecho a unas exigencia ni nada por el estilo, ante tu detalle altruista.

el problema de no poder instalar nada, no es cuestión mía, es porque se trata del pc de donde yo trabajo, que como es tan antiguo nadie se atreve a instalar le nada no vayan a joderse el propio windows O alguno de los programas ya instalado para que funcionen los programas de la empresa. porque sino a ver quien es el lumbrera que le dice al jefe que el pc se a jodido por hacer un programa el cual llevamos haciendo los cálculos en papel hace mas de 10 años y viendo lo que cobran por arreglar ciertas cosas en mi trabajo que uno mismo diría que eso no puede costar tanto dinero no me quiero ni imaginar lo que le podría costar una re instalación del sistema operativo y los programas de nuevo. de hay viene el tema este de no poder instalar le nada.

y para resolver tu duda de la CM, CM en mi trabajo significa caja manual.

pues nada, les ofreceré a mis compañeros tu programa y quien quiera usarlo que lo use y quien no, pues nada.


nuevamente te lo digo, gracias por tu tiempo y hacer el programa.

Serapis

#25
He realizado algunos cambios, siguiendo tus observaciones:
- El tipo de letra a Arial.
- Los colores los he atenuado, son casi blancos. El color amarillo en el fondo de un textbox, viene a indicar que no es editable por el usuario.
- La imagen de la calculadora, la he movido a la esquina superior izquierda (cordenadas 0,0)
- El título a la derecha de la imagen, movido un poco a la derecha.
- Los textos "Billetes", "Cantidad" e "Importe", movidos un poco más abajo...
- He puesto el espacio que se me escapó para los 50 céntimos,
- He retirado el cero para los billetes de 5 euros.
- El botón total no sobra, no es preciso usarlo si no se quiere.
- El título del programa lo he cambiado ligeramente con la info que aportas.
- El sonido se produce siempre que se pulsan ciertas teclas en un textbox editable (por ejemplo teclas: intro, escape)... para evitarlo, usad la tecla Tabulador (la tecla a la izquierda de la "Q"), cumple la misma funcionalidad que buscabas en la tecla intro... pero sin ese molesto sonido.

Debajo la imagen de como es ahora y como se veía antes (para comparar).
Espero que los cambios te satisfagan...

https://workupload.com/file/LLnV5LSM


PROFENIX

#26
ostias killo, no tengo palabras la verdad, muchisimas gracias.

una consulta, el framework sustituye archivos del SO o solo añade archivos ? no se si arriesgarme la verdad en instalar el framework 2.0 o no

por otro lado en conseguido el vb6.0

Serapis

El framework de NET no remplaza ningún fichero existente (solo así mismo, es decir si se diera el caso que tienes un framework 2.0 dañado, pués obviamente si, pero lo remplaza por lo mismo que es o debería ser), crea nuevos ficheros. Incluso si tienes una versión previa, no la sobrescribe.