Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
¿Como Abrir (o Importar) Proyectos De VB6 A Gambas?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje ¿Como Abrir (o Importar) Proyectos De VB6 A Gambas? 
 
Hola!
Estoy usando gambas 2.19 y quiero reutilizar un proyecto viejo que tenia en VB6.

He leído en varios sitios que "gambas permite importar proyectos VB..." o cosas por el estilo, pero la verdad es que no encuentro el "COMO" para poder hacerlo.

¿Alguien lo ha intentado con éxito?

¿ Como debería hacer?

Gracias!
 



 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Como Abrir (o Importar) Proyectos De VB6 A Gambas? 
 
Yo no se si habrá alguna manera de importar proyectos de vb6, pero lo dudo porque hay muchas diferencias aparte de que en vb cada dos por tres acabas llamando a alguna api cosa que aquí ni hay ni se le espera. Pasar de vb a gambas es bastante sencillo porque tiene una semántica parecida pero gambas es mucho mas potente y no creo que fuera aconsejable siquiera que esa supuesta importación funcionara.

Ahora bien, si tienes una aplicación que funciona en vb y quieres pasarla a gambas estoy dispuesto a facilitarte el camino para que no tengas que inventar la rueda. Con toda probabilidad en gambas lo mismo será un código mas ligero y simple así que no creo que esa transición sea complicada ni mucho menso.

Un saludo

 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Como Abrir (o Importar) Proyectos De VB6 A Gambas? 
 
soplo escribió:  
Yo no se si habrá alguna manera de importar proyectos de vb6, pero lo dudo porque hay muchas diferencias aparte de que en vb cada dos por tres acabas llamando a alguna api cosa que aquí ni hay ni se le espera. Pasar de vb a gambas es bastante sencillo porque tiene una semántica parecida pero gambas es mucho mas potente y no creo que fuera aconsejable siquiera que esa supuesta importación funcionara.

Ahora bien, si tienes una aplicación que funciona en vb y quieres pasarla a gambas estoy dispuesto a facilitarte el camino para que no tengas que inventar la rueda. Con toda probabilidad en gambas lo mismo será un código mas ligero y simple así que no creo que esa transición sea complicada ni mucho menso.

Un saludo

 


Mas o menos lo que pensaba......  
El 95% del código va a correr sin cambios. Lo que me hubiese gustado encontrar es una forma de no tener que rehacer los forms, pero....tampoco es tan grave

Gracias por el ofrecimiento! Si me complico en algun punto te (les!) aviso.

Bienvenido nuevamente a estos lares! (yo tampoco anduve mucho en los ultimos meses, a decir verdad    )
 



 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Como Abrir (o Importar) Proyectos De VB6 A Gambas? 
 
Todo el tema de hacer formularios yo lo tengo muy automatizado. Tengo una clase concreta para el control de teclas de manera que las pulsaciones de tecla son siempre muy parecidas o iguales. Ningún formulario me lleva mas de cinco minutos porque me limito a pintar los botones y a poner en cada textbox "quiero numeros", "quiero fecha", etc y ya está. Antes o despues hay algún botón que es el que hace algo diferente (guardar o abrir otro form o lo que sea) y eso es lo único que hay que programar.

Merece la pena dedicar un poquito de tiempo a eso. Luego todos los formularios son un mero trámite que no lleva mas de cinco minutos y que ya tienes probado porque las rutinas que utilizas siempre son las mismas.

Un saludo.
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Como Abrir (o Importar) Proyectos De VB6 A Gambas? 
 
soplo escribió:  
Todo el tema de hacer formularios yo lo tengo muy automatizado. Tengo una clase concreta para el control de teclas de manera que las pulsaciones de tecla son siempre muy parecidas o iguales. Ningún formulario me lleva mas de cinco minutos porque me limito a pintar los botones y a poner en cada textbox "quiero numeros", "quiero fecha", etc y ya está. Antes o despues hay algún botón que es el que hace algo diferente (guardar o abrir otro form o lo que sea) y eso es lo único que hay que programar.

Merece la pena dedicar un poquito de tiempo a eso. Luego todos los formularios son un mero trámite que no lleva mas de cinco minutos y que ya tienes probado porque las rutinas que utilizas siempre son las mismas.

Un saludo.


Me voy un poco de tema para que entiendas mi situación:

1) Hace como.....15 años que no programo "en serio". Tengo 42 años y deje de programar en serio mas o menos cuando salio VB6. Hice todos mis pinitos en home computers y DOS, así que cuando alguien dice "Tengo una clase concreta para el control de teclas...." me pongo AZUL de la envidia....lo mio, hoy por hoy, es mucho mas limitado. Obviamente, quiero aprender todo lo que pueda, hace rato me pase a Linux, y gambas es un producto EXCELENTE al que le pienso dedicar mucho tiempo.  

2) Uso la programacion básicamente para hacer "cosas" que me permitan explotar mi trabajo/hobby. Me dedico a la electrónica, y gambas me permitirá controlar cosas y leer datos de mis placas. Ya hice una interfaz para obtener datos de mi osciloscopio digital, una aplicacion que me permite tomar el programa HEX de un PIC y simularlo (creo que lo mas complejo que logre hasta ahora), y estoy comenzando a hacer un emulador .... de un ordenador de 8 bits que estoy desarrollando.  

Resumiendo, no tengo miedo en dedicarle tiempo a esto, por que me gusta y me va a ser muy util para jugar con mis cosas. La pregunta del millón es ¿Por donde podría empezar para hacer algo ordenado? Programar con funciones y rutinas es muy facil para mi, pero cosas como "clases" me suenan a Arameo Antiguo.      

....por primera vez estoy sintiendomé un viejo.....ja ja ja ja ja!
 



 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Como Abrir (o Importar) Proyectos De VB6 A Gambas? 
 
Ariel, intentaré orientarte un poco respecto de la programación orientada a objetos sirviéndome de tus conocimientos previos.

Una clase es una unidad de código, como un módulo, pero debe contener funciones y procedimientos que en conjunto provean una característica, una funcionalidad en particular. La misma clase debe contener las variables que deban usar esas funciones y procedimientos.

Una rutina (función o procedimiento) encapsula código y datos (las variables locales) que se puede usar desde otras partes de un programa por medio de su firma (a veces llamada signatura, que no es más que el nombre de la rutina y sus parámetros). Entonces, la firma de una rutina es una interfaz entre el código que encapsula y el resto del programa. De forma análoga, una clase encapsula métodos (procedimientos y funciones) y datos (variables).

Una clase encapsula sus datos, para tratar de evitar efectos colaterales no deseados y es por ello que no existe la palabra clave "Global" en gambas. Generalmente, la manipulación de los datos de una clase se permite únicamente a través de métodos denominados "de acceso" (a veces llamados getters y setters).

Un ejemplo:

'clase Persona

PUBLIC Nombre AS String
PUBLIC Apellido AS String
PRIVATE $Edad AS Byte

PUBLIC SUB setEdad(edad AS Byte)
  'Este sistema hipotético no admite que personas mayores de 75 años (supongamos que es para otorgar una licencia de conducir).
  IF edad < 75 THEN
    $Edad = edad
  ELSE
    Error.Raise("Edad debe ser menor que 75")
  END
END

PUBLIC FUNCTION getEdad() AS Byte
  RETURN $Edad
END

 

Debido a que la clase no contiene (porque no existen en gambas) variables globales, no es posible hacer esto:
  'Otra parte del programa
  $Edad = 32
 

Sino que es necesario crear un objeto Persona (es decir una instancia de la clase Persona).
...
unaPersona AS NEW Persona()

unaPersona.Nombre = "Pobrecito"
unaPersona.Apellido = "Hablador"
unaPersona.setEdad(32)
 


NEW Persona(), crea la instancia, es decir, el objeto unaPersona asignándole espacio en memoria y copiando las variables y métodos de la clase "Persona". De modo que si se crearan otros objetos a partir de la clase "Persona" serían diferentes unos de otros. Esto se denomina "Identidad", es decir que cada objeto es único y perfectamente identificable por medio de la variable que se usa como referencia (puntero al espacio de memoria asignado al objeto). En el ejemplo, la referencia es la variable "unaPersona".

En la clase persona las variables Nombre y Apellido son públicas por ello se les puede asignar un valor, una vez que se creo el objeto "unaPersona". Esto hace que sea muy improbable modificar Nombre y Apellido de una manera que produzca efectos secundarios ya que fue necesario crear explícitamente una instancia de "Persona" previamente. Pero además, la clase persona sólo sirve para un único propósito, entonces es difícil que se produzcan efectos secundarios no deseados por usar sus variables públicas para diferentes propósitos, como solía suceder cuando en un programa se usaba una misma variable global con distintos propósitos en partes diferentes del programa.

No obstante, hay un nivel de protección adicional. La variable $Edad es privada, es decir que su ámbito se limita a un único objeto (cada instancia de "Persona" tiene su propia $Edad) y su manipulación sólo puede hacerse a través de setEdad() y getEdad(), esto nos da la oportunidad de hacer validaciones o cualquier otra cosa que necesitemos cuando se establezca un valor a $Edad o cuando se lea su valor actual.

Así como la firma de una rutina es su interfaz de comunicación con el resto del programa que la contiene, los métodos y variables públicos conforman la interfaz de una clase (y por extensión de cada objeto de esa clase).

El encapsulamiento exige la existencia de una interfaz para que los objetos se puedan comunicar con otros objetos (el resto del programa). Esto permite que cada clase oculte su implementación, algo que es muy importante porque permite cambiar sus implementaciones sin que ello afecte a otros objetos o partes del programa que las usan (o mejor dicho que usan instancias de esas clases), siempre y cuando no se modifique la interfaz (es decir no se cambien los nombres y tipos de datos de sus variables públicas y las firmas de sus métodos públicos).

Por si no quedó claro las clases son las unidades mínimas de programa, en base a las cuales se modularizan los programas en la POO.

Bueno, creo que como introducción es suficiente. De todos modos es importante revisar estos conceptos utilizando la terminología propia de la POO (atributos, métodos, paso de mensajes) y también deberías ver los conceptos de acoplamiento, cohesión, composición y herencia como mínimo.

Por cualquier duda, ya sabes dónde preguntar.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Como Abrir (o Importar) Proyectos De VB6 A Gambas? 
 
Hola!

Genial, simplemente....genial!

Lo entendí de una. Esta clarísimo el ejemplo! Yo me habia hecho la película de que era algo muy diferente y más complicado. Obviamente, debe haber mucho mas que lo que se ve en ese ejemplo, pero por lo pronto ya tengo una linda base como para empezar a jugar un poco.

Mil gracias!

PD1: ¿Donde "avisas" que todo el primer trozo de código pertenece a la clase "persona"? Con el comentario de la primer linea basta, o faltó algo más?  

PD2: No se si se puede, pero quizas sería interesante dividir este hilo para que quede con un nombre más apropiado, asi le es de utilidad a alguien mas, no?
 



 
última edición por ariel el Viernes, 01 Octobre 2010, 23:55; editado 1 vez 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Como Abrir (o Importar) Proyectos De VB6 A Gambas? 
 
Ariel, en gambas una clase se define en un archivo de clase (con extensión class). Todo lo que tenés que hacer es un clic derecho en la vista "Proyecto" (el panel de la izquierda) y en el menú contextual elegir "Nuevo > Clase".
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Como Abrir (o Importar) Proyectos De VB6 A Gambas? 
 
Hola Fabian.

Te pongo un ejemplo Ariel:

Pongamos que un problema común con los formularios es controlar si me han escrito letras, números o lo que sea.

Para resolver ese problema en todos los formularios que haga en una vida lo que hago es crear una clase y en ella poner todos los problemas que me causan las pulsaciones de teclado. Lo hago una sola vez, compruebo que funciona bien y en adelante en cada formulario llamaré a esa clase que me resuelve el problema.

Pongamos que yo quiero que en un textbox se controle que solo se escriban letras

El problema de ejemplo es que en gambas hay una función isletter que me dice si en un string contiene solo letras. Resulta que en español existe la Ñ y que gambas porque Benoit habla en ingles no lo toma como letra así que si el usuario escribe Ñ gambas lo da por no-letra. Cada vez tengo que estar preguntando si el usuario escribió Ñ o ñ o letra. Para evitarme ese problema me hago una clase a la que llamo TEC y en la que escribiré funciones que me resuelvan estos problemas tontos y repetitivos. Para ello doy en el arbol del proyecto con el botón de la derecha y elijo NUEVO MODULO y le pongo nombre TEC. Un módulo es una clase estática y que no necesita ser iniciada. Las clases las tienes que instanciar con NEW pero yo solo quiero que esas rutinas estén siempre presentes para evaluar formularios. Por eso creo un módulo.

Ahora en esa clase escribo lo siguiente:
PUBLIC FUNCTION Esletra(l AS String) AS Boolean
DIM R AS Boolean
IF IsLetter(l) THEN
  r = TRUE
ELSE
  r = EsENe(l)
ENDIF
RETURN r
END

PRIVATE FUNCTION EsENe(l AS String) AS Boolean
DIM r AS Boolean

IF InStr(l, "Ñ") > 0 OR InStr(l, "ñ") > 0 THEN
  r = TRUE
ENDIF
RETURN r
END
 

Osea que en TEC.EsLetra tengo una función que recibe un caracter como argumento y devuelve true o false según que sea o no letra. Lo que hace es mirar si isletter() devuelve true. Si es así es que es letra. Si no es así puede ser porque es una ñ así que se llama a la función EsEne que comprueba si es o no es Ñ. Al final lo que ocurre es que si yo llamo a EsLetra me responden true o false y ya se ha considerado el problema de la Ñ. no tengo que estar considerándolo cada vez.

Lo anterior lo hago una sola vez en una vida y ya está. De ahora en adelante en cada formulario cada vez que en un textbox quiera asegurarme que solo se aceptan letras lo que haré es lo siguiente
PUBLIC SUB TextBox_KeyPress()
DIM var AS Boolean = TRUE

SELECT CASE var
  CASE TEC.Esletra(Key.text)
  CASE ELSE
    STOP EVENT 'si no es letra anular la pulsación
END SELECT
END
 


Lo que hago es que en el evento keypress (que ve la tecla que se pusa) se envíe esa tecla a la clase TEC y allí se evalue si es o no es letra. En este caso tal como está si no es letra lo que hará el keypress es ignorar la tecla. Eso es lo que quería mostrarte pero date cuenta que tal com está es incorrecto porque anula todo lo que no es letra (incluido el backspace por ejemplo).

Un ejemplo de keypress mas completo sería
PUBLIC SUB textbox_KeyPress()
DIM var AS Boolean = TRUE

SELECT CASE var
  CASE TEC.Esletra(Key.text)  
  CASE IsDigit(Key.text)
  CASE IsSpace(Key.text)
  CASE TEC.EsBorrar(Key.code)
  CASE TEC.Esflecha(Key.code)
  CASE ELSE
    STOP EVENT 'si no es ninguno de los anteriores anular la pulsación
END SELECT
END
 

En este ejemplo hay otras funciones en la clase TEC. EsLetra devuelve true si es una letra. Isdigit devuelve true si la pulsación es de un número. IsSpace devuelve true si la pulsación es espacio. EsBorrar devuelve true si se pulsó la tecla de backspace o delete. EsFlecha devuelve true si se pulsaron las flechas del cursor. En ese caso ese keypress admite que pulses letras, caracteres alfanuméricos, números, espacios, que borres y que muevas el cursor con las flechas. Tengo una función en TEC para cada una de esas cosas. Solo te he puesto la EsLetra para no hacerlo mas espeso y que entiendas como funciona eso.

Si en otro textbox2 quiero solo números o espacios (p. ej. un teléfono) el keypress correspondiente será
PUBLIC SUB textbox_KeyPress()
DIM var AS Boolean = TRUE
SELECT CASE var
  CASE IsDigit(Key.text)
  CASE IsSpace(Key.text)
  CASE TEC.EsBorrar(Key.code)
  CASE TEC.Esflecha(Key.code)
  CASE ELSE
    STOP EVENT 'si no es ninguno de los anteriores anular la pulsación
END SELECT
END
 

Este es un keypress que admite numeros, espacios, borrar o mover el cursor. Simplemente hice un paste del anterior y quité las líneas que no quería. Tardo en programarlo lo que tarde en hacer el paste.

Así de simple. Solo hay que tener una coleccion de funciones para el control del teclado. Una vez las tienes hecas cada formulario solo es pintar y ponerle su keypress donde le dices si quieres letras, números, fechas, ..., etc.

Así se empieza con las clases. Resolviendo estos problemillas. Luego descubres que otras cosas pueden hacer con las clases y cuando eso ocurre ya no quieres VB ni en pintura je je je.

 
 



 
última edición por soplo el Sabado, 02 Octobre 2010, 02:09; editado 1 vez 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Como Abrir (o Importar) Proyectos De VB6 A Gambas? 
 
Hola Soplo!
Te has pasado con la respuesta!  
Tengo un monton de material para comenzar a "estudiar". GRACIAS!

......tiembla Bill Gates.....    
 



 
ariel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Abrir Nuestros Proyectos Gambas Desde Line... Shell General 2 Sabado, 10 Septiembre 2011, 00:45 Ver último mensaje
Shell
No hay nuevos mensajes ¿Como Abrir Archivo De LibreOffice (.odt)... blopa Controles/Librerías/Componentes 16 Jueves, 12 Febrero 2015, 00:58 Ver último mensaje
blopa
No hay nuevos mensajes Como Importar Un Form(formulario) Sobre Ot... metalgearxd General 3 Jueves, 07 Febrero 2013, 20:46 Ver último mensaje
metalgearxd
No hay nuevos mensajes No Puedo Ver Todos Los Directorios De Los ... Shell Instalación 3 Viernes, 09 Febrero 2018, 11:48 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario