UNIVERSIDAD DE GUAYAQUIL FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES INTERFACES GRÁFICAS PARA DESARROLLO DE APLICACIONES JAVA EN BLACKBERRY, COMPLEJIDAD DEL DESARROLLO Y PROPUESTA DE AMBIENTE DE DESARROLLO GRÁFICO . TESIS DE GRADO Previa a la obtención del Título de: INGENIERO EN SISTEMAS COMPUTACIONALES HÉCTOR WILLIAM PILLIGUA ROBALINO TUTOR: DAVID BENAVIDES GUAYAQUIL – ECUADOR 2013 I REPOSITORIO NACIONAL EN CIENCIAS Y TECNOLOGÍA FICHA DE REGISTRO DE TESIS TÍTULO “interfaces gráficas para desarrollo de aplicaciones java en BlackBerry, complejidad del desarrollo y propuesta de ambiente de desarrollo grafico.” REVISORES: INSTITUCIÓN: Universidad de Guayaquil FACULTAD: Ciencias Matemáticas y Físicas CARRERA: Ingeniería en sistemas computacionales FECHA DE PUBLICACIÓN: Noviembre del 2013 N° DE PÁGS.: 183 ÁREA TEMÁTICA: Desarrollo Windows PALABRAS CLAVES: desarrollo móvil, complejidad de desarrollo , lenguaje java, IDE gráfico, optimización de programación RESUMEN: Para el desarrollo de aplicaciones móviles se generó la aplicación que facilita una interface gráfica que permitirá manipular los diferentes elementos de la aplicación móvil y facilitando el desarrollo de los mismos, permite generar una solución que se importa en el ambiente de eclipse, y una vez en este ambiente se facilita la publicación. N° DE REGISTRO(en base de datos): N° DE CLASIFICACIÓN: Nº DIRECCIÓN URL (tesis en la web): ADJUNTO PDF CONTACTO CON AUTOR: SI Teléfono: 0997450851 CONTACTO DE LA INSTITUCIÓN NO X E-mail: hector.pilligua.hwpr@gmail.com Nombre: Teléfono: II APROBACIÓN DEL TUTOR En mi calidad de Tutor De la tesis, “Interfaces Gráficas para Desarrollo de Aplicaciones Java en BlackBerry, Complejidad del Desarrollo y Propuesta de Ambiente de Desarrollo Grafico“, elaborado por el Sr. Héctor William Pilligua Robalino, egresado de la Carrera de Ingeniería en Sistemas Computacionales, Facultad de Ciencias Matemáticas y Físicas de la Universidad de Guayaquil, previo a la obtención del Título de Ingeniero en Sistemas, me permito declarar que luego de haber orientado, estudiado y revisado, la apruebo en todas sus partes. Atentamente …………………………………. Ing. David Benavides TUTOR III CERTIFICACIÓN DE GRAMATÓLOGO Quien suscribe el presente certificado, se permite informar que después de haber leído y revisado gramaticalmente el contenido de la tesis de grado de: Héctor William Pilligua Robalino. Cuyo tema es: Interfaces gráficas para desarrollo de aplicaciones java en BlackBerry, complejidad del desarrollo y propuesta de ambiente de desarrollo gráfico. Certifico que es un trabajo de acuerdo a las normas morfológicas, sintácticas y simétricas vigentes. ATENTAMENTE, NOMBRE DEL GRAMATÓLOGO # LICENCIA IV DEDICATORIA El presente trabajo lo dedico a todas las personas que han hecho posible que se pueda realizar así como a todos lo que han estado conmigo de manera directa e indirecta. A mi madre que me brindaba su paciencia, en especial a mi hermano que me dio el impulso necesario para poder meterme en la carrera de ingeniería en sistemas, de no haber sido por el ahora no sé dónde me encontraría ni qué tipo de amistades tendría. Héctor William Pilligua Robalino V AGRADECIMIENTO Se agradece el presente a mi familia que sin el apoyo de ellos no hubiera sido posible el culminar mi carrera profesional, en especial a todas esas personas que se han hecho mis amistades, sin el consejo de ellos no hubiera seguido esta carrera, porque aquí se me ha presentado problemas personales pero ellos y ellas siempre estaban ahí para darme ánimos y fuerzas Héctor William Pilligua Robalino VI TRIBUNAL DE GRADO Ing. Fernando Abad Montero DECANO DE LA FACULTAD CIENCIAS MATEMÁTICAS Y FÍSICAS Ing. David Benavides TUTOR TRIBUNAL Ing. Héctor Lara Gavilanes Miembro de tribunal Ing. Juan Chanabá Alcócer DIRECTOR Ing. Miguel Molina Calderón Miembro de tribunal Ing. Israel Ortega Oyala Miembro de Tribunal AB. Juan Chávez A. SECRETARIO VII UNIVERSIDAD DE GUAYAQUIL FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES INTERFACES GRÁFICAS PARA DESARROLLO DE APLICACIONES JAVA EN BLACKBERRY, COMPLEJIDAD DEL DESARROLLO Y PROPUESTA DE AMBIENTE DE DESARROLLO GRAFICO . Proyecto de trabajo de grado que se presenta como requisito para optar por el título de INGENIERO en SISTEMAS COMPUTACIONALES . Autor: Héctor William Pilligua Robalino C.I. 092261482-1 Tutor: Ing. David Benavides. Guayaquil, Noviembre de 2013 VIII CERTIFICADO DE ACEPTACIÓN DEL TUTOR En mi calidad de Tutor del Primer Curso de Fin de Carrera, nombrado por el Departamento de Graduación y la Dirección de la Carrera de Ingeniería en Sistemas Computacionales de la Universidad de Guayaquil, CERTIFICO: Que he analizado el Proyecto de Grado presentado por el egresado Héctor William Pilligua Robalino, como requisito previo para optar por el título de Ingeniero cuyo problema es: ¿Cómo favorecer el desarrollo de aplicaciones para dispositivos BlackBerry proponiendo un ambiente de desarrollo grafico?, Considero aprobado el trabajo en su totalidad. Presentado por: Héctor William Pilligua Robalino Apellidos y Nombres completos . ___092261482-1_____ Cédula de ciudadanía N° Tutor Ing.: David Benavides Guayaquil, Noviembre de 2013 IX UNIVERSIDAD DE GUAYAQUIL FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES Autorización para Publicación de Tesis en Formato Digital 1. Identificación de la Tesis Nombre Alumno: Héctor William Pilligua Robalino Dirección: Oriente entre la 12 y la 13 pasando el puente de la A Teléfono: 0997450851 E-mail: hector.pilligua.hwpr@gmail.com Facultad: Matemáticas y Físicas Carrera: Ingeniería en Sistemas Computacionales Título al que opta: Ingeniería en Sistemas Computacionales Profesor guía: Ing. David Benavides Título de la Tesis: Interfaces gráficas para desarrollo de aplicaciones Java en BlackBerry, complejidad del Desarrollo y propuesta de ambiente de desarrollo gráfico. Temas Tesis: Desarrollo de aplicaciones, software, móvil, aplicación Windows 2. Autorización de Publicación de Versión Electrónica de la Tesis A través de este medio autorizo a la Biblioteca de la Universidad de Guayaquil y a la Facultad de Ciencias Matemáticas y Físicas a publicar la versión electrónica de esta tesis. Publicación electrónica: Inmediata x Después de 1 año Firma Alumno: 3. Forma de envío: El texto de la Tesis debe ser enviado en formato Word, como archivo .Doc. o .RTF y .Pdf para PC. Las imágenes que la acompañen pueden ser: .gif, .jpg o .tiff. X DVDROM x CDROM ÍNDICE GENERAL APROBACIÓN DEL TUTOR CERTIFICACIÓN DE GRAMATÓLOGA DEDICATORIA AGRADECIMIENTO TRIBUNAL DE GRADO DECLARACIÓN EXPRESA CERTIFICADO DE ACEPTACIÓN DEL TUTOR ÍNDICE GENERAL ÍNDICE DE CUADROS ÍNDICE DE GRÁFICOS RESUMEN ABSTRACT INTRODUCCIÓN CAPITULO I – EL PROBLEMA Ubicación del problema en un contexto Situación conflicto Causas y consecuencias del problema Causas Consecuencias Delimitación del problema Formulación del problema Evaluación del problema Objetivo de la investigación Objetivo Generales Objetivos Específicos Alcances Alcances y limitaciones de la investigación Justificación e importancia de la investigación CAPITULO II- MARCO TEÓRICO Antecedentes del estudio Fundamentación teórica Java J2ME KVM III IV V VI VII VIII X XI XIII XIV XVII XVIII 1-9 10-31 10-13 13-14 7-16 14-16 16-17 17 17 17-20 21-24 21 21-22 22-24 24-27 27-31 32-108 32-36 37 37-38 38-40 XI Connected Limited Device Configuration (CLDC) Connected Device Configuration (CDC) CVM RIM NET_RIM_API LENGUAJE DE PROGRAMACION Programación Imperativa Lenguaje Imperativo Programación Declarativa LENGUAJE MAQUINA APLICACIONES Aplicaciones de Negocio Aplicaciones de Utilería Aplicaciones de entretenimiento INTERFACES GRÁFICAS Metáforas Java ByteCode JRE J2SE J2EE J2ME JDBC JMS JavaBeans JavaScript Servlet PLATAFORMA .NET BIBLIOTECAS DE CLASES .NET COM Common Language Runtime (CLR) Microsoft Intermediate Language (MSIL) Lenguaje de Programación C# BLACKBERRY Ambiente de Desarrollo Grafico El Estándar de Calidad ISO 9001 Factores de calidad ISO 9126 Desarrollo de Widgets para Dispositivos BlackBerry FUNDAMENTACIÓN LEGAL Preguntas a Contestarse Variables de la Investigación DEFINICIONES CONCEPTUALES CAPÍTULO III – METODOLOGÍA 40-41 41-42 42-43 43-44 44 44-45 44 44 45 46 46-47 46 47 47 47-54 55-60 61 61-65 65 66 66-67 67-68 68-69 70-79 80-81 81-82 82 83-84 84 84 84-89 90-92 93-95 96-98 98 99-100 100-104 104 105-106 106 106-107 107 108-144 XII Diseño de la investigación Modalidad de la investigación Población y muestra Tamaño de la muestra Operacionalización de las variables Instrumentos de recolección de datos Procedimientos de la Investigación Recolección de la Información Procesamiento y análisis Criterios para la elaboración de la propuesta Criterios para la validación de la propuesta CAPÍTULO IV – MARCO ADMINISTRATIVO Cronograma Presupuesto CAPÍTULO V – CONCLUSIÓN Y RECOMENDACIÓN Conclusiones Recomendaciones BIBLIOGRAFÍA ANEXOS 109 109-110 110-113 113-116 116-118 119-124 124-126 126 127-139 140 140-144 145-147 145-146 146-147 148-151 148-149 149-151 151-152 XIII ÍNDICE DE CUADROS Pág. Cuadro N° 1 Cuadro de Población 111 Cuadro N° 2 Población Aproximada 1 Cuadro N° 3 Población Aproximada 2 Cuadro N° 4 Población Aproximada 3 Cuadro N° 1 Cuadro Población 4 Cuadro N° 5 Matriz de operacionalización de variables 112 113 114 115 117 Cuadro N° 6 Condición del informante 127 Cuadro N° 7 Utiliza Dispositivos BlackBerry 129 Cuadro N° 8 Adaptación a Nuevas Herramientas 130 Cuadro N° 9 Lenguaje de Programación más Utilizados 132 Cuadro N° 10 Desarrollo de Aplicaciones con tecnología J2ME 134 Cuadro N° 11 Conocimiento de Herramientas para Desarrollo de Aplicaciones para Dispositivos Móviles 135 Cuadro N° 12 Uso de IDE Grafico para Desarrollo de Aplicaciones 136 Cuadro N° 14 Desarrollos Frecuentes de Sistemas Informáticos 137 Cuadro N° 13 Sistemas Operativos Móviles 138 XIII Cuadro N° 15 Sistemas Herramientas de Programación más Utilizadas para Desarrollo de Aplicativos Móviles 139 Cuadro N° 16 Valoración de las Preguntas por los Expertos 143 Cuadro N° 17 Proyección Inicio del Negocio 147 XIV ÍNDICE DE GRÁFICOS Gráfico N° 1 Java 2 Micro Edition Pág. 38 Gráfico Nº 2 Preverificación de Clases en CDLC/KVM. 41 Gráfico N°3 Relaciones APIs de Java. 42 Gráfico Nº 4 Interfaces Graficas. 48 Gráfico Nº 5 Metáfora. 55 Gráfico Nº 6 Aplicaciones. 79 Gráfico Nº 7 Applets. 80 Gráfico Nº 8 JavaBean. 81 Gráfico Nº 9 JavaScritp 82 Gráfico Nº 10 Servlets 82 Gráfico Nº 11 BlackBerry 96 Gráfico Nº 12 Condición del Informante. 127 Gráfico Nº 13 Uso de Dispositivos BlackBerry. 129 Gráfico Nº 14 Adaptación a Nuevas Herramientas. 130 XV Gráfico Nº 15 Lenguaje de Programación más Utilizados. 132 Gráfico Nº 16 Desarrollo de Aplicaciones con tecnología J2ME. 134 Gráfico Nº 17 Conocimiento de Herramientas para Desarrollo de Aplicaciones para Dispositivos Móviles. 135 Gráfico Nº 18 Uso de IDE para Desarrollo de Aplicaciones. 136 Gráfico Nº 19 Desarrollos Frecuentes de Sistemas Informáticos. 137 Gráfico Nº 20 Sistemas Operativos Móviles. 138 Gráfico Nº 21 Herramientas de Programación más Utilizadas para Desarrollo de Aplicativos Móviles. 139 XVI ANEXOS Anexo N° 1 FLUJO DE PROCESOS 155 Anexo Nº 2 ENCUESTA PARA SELECCIÓN DE EXPERTOS Anexo N°3 DETERMINACIÓN DEL COEFICIENTE K Anexo Nº 4 ENCUESTA A LOS EXPERTOS SELECCIONADOS Anexo Nº 5 CRITERIOS DE LOS EXPERTOS CONSULTADOS. MATRIZ DE FRECUENCIAS DE LA ENCUESTA Anexo Nº 6 IMAGEN DE CADA UNO DE LOS VALORES DE LAS CELDAS DE LA TABLA DE FRECUENCIAS ACUMULATIVAS RELATIVAS, POR LA INVERSA DE LA CURVA NORMAL Tabla 5. IMAGEN DE CADA UNO DE LOS VALORES 156 Anexo Nº 7 .Encuesta 162 158 159 160 161 XVII UNIVERSIDAD DE GUAYAQUIL FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES INTERFACES GRÁFICAS PARA DESARROLLO DE APLICACIONES JAVA EN BLACKBERRY, COMPLEJIDAD DEL DESARROLLO Y PROPUESTA DE AMBIENTE DE DESARROLLO GRÁFICO . Autor: Héctor William Pilligua Robalino Tutor: Ing. David Benavides. RESUMEN Para el desarrollo de aplicaciones en dispositivos móviles se deben considerar la tecnología habida en el dispositivo móvil así como conectividad, funcionalidades, sistema operativo, servicios y demás, motivo por el cual se centra en el estudio a los Smartphone de BlackBerry con sistema operativo BlackBerry OS que se ejecuta bajo el lenguaje nativo de java j2me. El desarrollo de aplicaciones sobre J2ME se ve truncado por las limitantes que ofrece el dispositivo, así como el poco conocimiento que se tiene en el desarrollo de estas aplicaciones, los diferentes objetos que se pueden implementar en una aplicación, los diferentes eventos con los cuales se pueden interactuar. El producto a entregarse tiene como finalidad brindar una herramienta de desarrollo amigable para los programadores que vean afinidad a realizar aplicaciones para dispositivos móviles BlackBerry, y que por diversos motivos no lo han hecho ya sea como por ejemplo , poco conocimiento en los objetos de desarrollo para móviles, IDE que brindan solo interacción con el código fuente y no brindan un entorno amigable que facilite estas aplicaciones, la tesis actual contara con ayuda para el desarrollo de aplicaciones lo cual reducirá considerablemente el tiempo de desarrollo así como mejora en la interfaz de usuario a entregarse a los propietarios de los dispositivos. XVIII UNIVERSIDAD DE GUAYAQUIL FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES INTERFACES GRÁFICAS PARA DESARROLLO DE APLICACIONES JAVA EN BLACKBERRY, COMPLEJIDAD DEL DESARROLLO Y PROPUESTA DE AMBIENTE DE DESARROLLO GRÁFICO . ABSTRACT For the development of applications for mobile devices technology must be considered view on the mobile device and connectivity features, operating system and other services, which is why our study we focus on the BlackBerry Smartphone with BlackBerry OS operating system that runs on the native language of java j2me. Application development on J2ME is truncated by the limitations offered by the device, and the little knowledge we have in the development of these applications, different objects that can be implemented in an application, the different events which can interact. The delivered product is intended to provide a user-friendly development tool for programmers who see affinity to make BlackBerry applications for mobile devices , and which for various reasons have not either cause as little knowledge of the development objects mobile , only IDE that provide interaction with the source code and do not provide a friendly environment to facilitate these applications , the current project will feature support for the development of applications which will significantly reduce development time and improved user interface to surrender to the owners of the devices. XIX ABREVIATURAS ASP CLR MSIL RIM RIM CLR MSIL CLDC CDC KVM JNI CVM GUI JVM J2SE J2EE J2ME API JDBC RMI JMS Application Service Providers Common Language Runtime Microsoft Intermediate Language Research In Motion Research In Motion Common Language Runtime Microsoft Intermediate Language Connected Limited Device Configuration Connected Device Configuration Kilobyte Virtual Machine Java Native interface Compact Virtual Machine Graphical User Interface Máquina Virtual de Java Java Platform, Standard Edition o Java SE Java Platform, Enterprise Edition o Java EE Java 2 Micro Edition Interfaces de Programación de Aplicaciones Java Data Base Connectivity Java Remote Method Invocation Java Message Service XX INTRODUCCIÓN Desde la aparición de la primera generación de computadores en el año 1940, la programación de sistemas informáticos ha sido de gran importancia, ya que es el motor de conocimientos para el funcionamiento de las computadoras. En la década de los 50 aparece el primer programa que se lo considero como sistema operativo propiamente dicho, esto se presentó como un sistema batch que permitía el manejo de memoria, procesamiento por lotes y almacenamientos temporales. En los años 70 aparecen los sistemas Atlas y OS/360, lo cual dio paso al conocimiento de Unix, fortaleciendo el desarrollo de sistemas mediante este sistema. Ya en esta década se hizo la presentación de BDOS y CP/M, lo cual se los pueden conocer como los primeros sistemas operativos. En los años 70 hacen su aparición los lenguajes de programación, los cuales tenemos como prevalencia C++. Eiffel, Haskell y Miranda. En esta época también se mejora la interacción con los diferentes componentes de red que se comenzaron a utilizarse en los computadores personales. En el año de 1973 se considera que hacen su aparición los teléfonos móviles. 1 En la década de los 80 empezó el auge de los computadores personales, las cuales ya contaban con un sistema operativo que permitida trabajar con ventanas y menues, Con el pasar del tiempos el desarrollo de sistemas computacionales se ha ido intensificando, lo cual ha dado mejoras en las herramientas de desarrollo, generando nuevos métodos de trabajos para el desarrollo de sistemas, pasando de programar en lenguaje de bajo nivel que consistía en el desarrollo de los sistemas directo en la memoria del equipo usando lenguaje assembler a programar en lenguajes de alto nivel, como por ejemplo visual estudio que ofrece interfaces de fácil entendimiento para desarrollos de sistemas computacionales. Desde la primera generación hacia la actualidad la tecnología ha ido avanzando de tal manera que ya no se piensa solo en equipos de trabajo estacionarios, sino en dispositivos móviles, así como por ejemplo tenemos las computadoras portátiles, los telefónicos, localizadores, asistentes personales, libros digitales, navegadores web, Smartphone, consolas de videojuegos, entre otros. Esto ha dado lugar a que el desarrollo de los sistemas también se oriente hacia estos dispositivos, generando diferentes herramientas de desarrollo de sistemas, dando pasó a diferentes lenguajes de programación. El desarrollo de los sistemas informáticos se desarrollaban por líneas de códigos, lo cual demanda un gran conocimiento del lenguaje que se está utilizando para el 2 desarrollo de aplicaciones, en vista de esto se desarrollaron herramientas que facilitan el trabajo a los programadores, ya sea facilitando el desarrollo de las interfaces de usuarios, así como el brindar ayudas en el desarrollo del código, esto ha dado la facilidad de que el programador se dedique más a la lógica del desarrollo y no en el desarrollo de las interfaces. Con estos avances se ha visto la necesidad de desarrollar los sistemas operativos para los diferentes equipos móviles, brindando una especie de inteligencia a los dispositivos creando así los conocidos Smartphone o teléfonos inteligentes, los cuales facilitan el trabajo a los propietarios, entre los cuales sobresalen, Android, IOS, JavaRIM, Windows Mobile. Con la aparición de los equipos móviles, el desarrollo de aplicaciones se centró en ese nuevo hito, se comenzó como en los equipos de escritorios, desarrollando programas que se ejecutan directamente en la memoria, con el paso del tiempo y los avances tecnológicos se han ido implementando nuevos alcances a los equipos móviles lo cual hacia que su funcionalidad no se limiten a realizar o recibir llamadas o mensajes de textos o agendas, sino al manejo de imágenes, acceso a internet, manejo de multimedia, música, radio, entre otras funcionalidades. En la actualidad el desarrollo de aplicaciones está orientado a equipos estacionarios y a dispositivos móviles, tomando un notable crecimiento en el 3 último, debido al desarrollo de la tecnología se ha visto un notable crecimiento en la conectividad móvil, lo que ha provocado este incremento. Los primeros pioneros que brindaron un equipo que ofrecía varios procesos en paralelo y permitir llevar un entorno de oficina móvil fueron BlackBerry con su sistema operativo java RIM versión 1.4. El desarrollo de aplicaciones móviles fue evolucionando con el pasar del tiempo, comenzando por el año 1998 con aplicaciones para los PDA los cuales eran herméticos y solo desarrollados por los propietarios de la marca, después con el tiempo se ha ido expandiendo estas aplicaciones llegando a la actualidad a tener un IDE que se pueden adaptar a diferentes aplicativos que se utilizan para desarrollo de aplicaciones informáticas así como myeclipse, eclipse, netbeans, visual estudio y aplicaciones web en general ya que el desarrollo de aplicaciones web también ha tenido buena acogida entre los diferentes dispositivos móviles sin considerar el sistema operativo con el cual estén trabajando. El lenguaje java y su evolución y brinda la facilidad de desarrollar aplicaciones y poder dejarlos implementados en los diferentes dispositivos habidos hasta la fecha, esto se debe a que java permite un lenguaje de alto nivel de fácil adaptación para el desarrollador. 4 A pesar de los avances en los diferentes lenguajes de programación, el desarrollo de las aplicaciones para dispositivos móviles no es fácil, sino más bien es complejo en el desarrollo, más aun cuando se necesitan desarrollar aplicaciones con interfaces gráficas. Para el desarrollo de las aplicaciones móviles java en especial para los dispositivos BlackBerry se han desarrollado sistemas que permite el desarrollo de estos programas, así como plugins, sin embargo, la complejidad del desarrollo de las aplicaciones, en especial de las interfaces dificultan el desarrollo de los mismos, por ello vi la necesidad de crear un sistema permita el desarrollo de las interfaces gráficas, así como manipular las diferentes propiedades los objetos contenidos en las interfaces de usuarios de las aplicaciones java, implementando la acción en el elemento botón para la implementación de acciones, la implementación de un ambiente gráfico para el desarrollo de las aplicaciones java RIM para los dispositivos BlackBerry. La presente tesis tiene como finalidad facilitar el desarrollo de aplicaciones para dispositivos BlackBerry, brindando una interfaz gráfica que facilite el desarrollo de las interfaces gráficas para los diferentes aplicativos que se desee crear para el dispositivo móvil. 5 Brinda la generación de la solución a ser importada en el aplicativo eclipse, esto facilita al desarrollador la revisión y generación final del aplicativo a ser implementado en el dispositivo eclipse. Permite la modificación del código generado, personalizando la funcionalidad de la aplicación, cuenta con la funcionalidad de compilación, disminuyendo la cantidad de errores que se hayan generado por la manipulación de las clases por parte del desarrollador. El aplicativo permitirá una mejor comprensión del desarrollo de los programas para dispositivos BlackBerry, ya que mostrara el código generado de cada control utilizado en la pantalla que se esté creando. El módulo de la generación del código java se basa en los diferentes objetos agregados en la pantalla del móvil, así como las acciones que el usuario haya ingresado en la acciones de los botones agregados. El módulo de compilación se encarga de la revisión y compilación del código que se haya generado en el aplicativo, en el caso de que el código esta correcto se mostrara una advertencia, en el caso de que el cogido generado o desarrollado posea algún error se mostrara el error del mismo. 6 El módulo de generación de solución se encarga de recolectar las clases generadas, desarrollar los archivos necesarios y copiar los recursos agregados para la generación de un sistema de archivos que se cargara en el programa de eclipse, este interpretara el programa generado, así como las clases que se han creado y dejara todo correcto para la generación del ejecutable. Las herramientas de desarrollo para incluir en esta aplicación fueron C# para el entorno de escritorio y el sistema de archivos de Windows para la generación de la solución a importarse. Considerando estos elementos se ha desarrollado la presente tesis, la cual está estructurada en cuatro capítulos que se detallan a continuación. El primer capítulo trata sobre la ubicación del problema, a través de los antecedentes, estableciendo de donde se manifiesta el problema, las causas y consecuencias del mismo, el análisis del objeto de estudio, identificando campo, área, aspecto y tema, determinando los objetivos específicos y generales. En el segundo capítulo se fundamentan teóricamente diferentes componentes del objeto de investigación relacionados con la reserva de boletos de viaje terrestre a través de las nuevas tecnologías, se plantea las variables, dimensiones, indicadores, hipótesis que constituyen el problema de la investigación. En el tercer capítulo explica la metodología utilizada a través de instrumentos de recolección y análisis de datos, definiendo la población y muestra en que se 7 realizará la investigación, estableciendo los instrumentos de recolección de los datos y la técnica que se utilizará. En el cuarto capítulo presenta el análisis del presupuesto para la implementación del sistema así como el cronograma de actividades requerido para su completa funcionalidad. En el quinto capítulo muestra las conclusiones una vez realizado el análisis, de las mismas se detallarán las recomendaciones del estudio 8 UNIVERSIDAD DE GUAYAQUIL FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES INTERFACES GRÁFICAS PARA DESARROLLO DE APLICACIONES JAVA EN BLACKBERRY, COMPLEJIDAD DEL DESARROLLO Y PROPUESTA DE AMBIENTE DE DESARROLLO GRÁFICO Tesis de grado que se presenta como requisito para optar por el título de INGENIERO en SISTEMAS COMPUTACIONES Autor: Hector William Pilligua Robalino. C.I.: 0922614821 David Benavides TUTOR Guayaquil, Noviembre de 2013 9 CAPÍTULO I EL PROBLEMA PLANTEAMIENTO DEL PROBLEMA Ubicación del Problema en un Contexto Para el desarrollo de aplicaciones existen diferentes lenguajes de programación entre ellos se encuentran ADA, Basic, C, C#, Cobol, Fortran, Java, MatLab, LISP, Pascal, PHP, Perl, Phyton, Bash Script, JavaScript, ASP, todos estos lenguajes ofrecen una interacción con el sistema operativo a un alto y un bajo nivel, mediante líneas de código. Estas aplicaciones de desarrollaban para equipos estáticos, ya sean estos computadoras personales o equipos más especializados así como por ejemplos servidores, en el año 1995 se vio una nueva oportunidad con los dispositivos móviles, con el pasar de los tiempos ha ido mejorando la tecnología móvil y con ello los programas que se encontraban en estos dispositivos ha ido progresando, esto produjo que hayan más requerimientos por parte de los usuarios (dueño de equipo móvil). Con la aparición del concepto de oficina móvil, se vio la necesidad de personalizar las aplicaciones para las diferentes demandas que se presentaban por partes de los dueños de los equipos, esto fomento en gran cantidad el desarrollo de aplicaciones por parte de los programadores independientes, así también llevo a 10 algunas empresas de desarrollo de sistemas a inclinarse por esta tecnología para poder cubrir estos requerimientos que en su mayoría son de índole administrativos. El inconveniente de desarrollar aplicaciones para equipos BlackBerry es que no hay la suficiente información disponible en las redes sociales, foros, así también no se encuentran muchos documentos que ayuden en la tarea, y esto complica el programas las aplicaciones para los equipos BlackBerry. Una de las herramientas que ofrece el desarrollo de aplicaciones para dispositivos móviles es Netbeans, que ofrece un entorno tanto gráfico con por líneas de código, el inconveniente de esta herramienta es que las aplicaciones desarrolladas en este programa no son totalmente compatibles con lis dispositivos BlackBerry. Otra herramienta que tenemos y es de mayor uso es eclipse, esta herramienta cuenta con un plugin que permite crear aplicaciones para los dispositivos BlackBerry, lo cual permite la total compatibilidad del programa desarrollado con el dispositivo móvil, esta herramienta no cuenta con una interfaz gráfica que facilite el desarrollo de las interfaces graficas con el usuario, la ventaja de esta herramienta es que permite la publicación de las aplicaciones de manera sencilla y permite la instalación del aplicativo en el mismo dispositivo. 11 El lenguaje de visual estudio no cuenta con un plugin o alguna librería que permita el desarrollo de aplicaciones para los dispositivos BlackBerry, esta herramienta solo permite el desarrollo de las aplicaciones para dispositivos que cuente con sistemas operativos soportados pos Microsoft, por ejemplo los dispositivos PDA con sistema operativo Windows Mobile. En la actualidad no existen programas que permiten crear aplicaciones móviles a nivel de interfaces de usuarios (front-end) para dispositivos BlackBerry que utilicen la tecnología de java RIM, las herramientas existentes me permiten trabajar a nivel de back-end en el cual diseñar la interfaz de usuario se hacer una labor tediosa, lo cual genera en los clientes una inconformidad por el producto recibido en la mayoría de las ocasiones, ya que el desarrollo no cumple con las facilidades solicitadas, a pesar de que netbeans permite desarrollar aplicaciones para dispositivos móviles y estas son compatibles con los dispositivos BlackBerry, en su mayoría no son compatibles y al no utilizar objetos propios del dispositivo móvil, no aprovechan al máximo los recursos del equipo y esto provoca que sean lentos y fallen en ocasiones. La tecnología móvil es una nueva área en comparación con las otras tecnologías existentes motivo por el cual no hay las suficientes herramientas que faciliten su utilización, de allí que surge lo siguiente. 12 Variable Independiente: Interfaces Gráficas para Desarrollo de Aplicaciones Java para BlackBerry Variables dependientes: Complejidad del Desarrollo de Aplicaciones Java Móvil Implementación de Ambiente de Desarrollo Gráfico para Java Móvil de . BlackBerry Situación Conflicto Nudos Críticos En la actualidad hay aplicaciones que permiten crear aplicaciones java para dispositivos BlackBerry, entre ellas tenemos el programa Research In Motion que es un editor propio de BlackBerry, este programa permite trabajar con los objetos de la aplicación para los dispositivos móviles pero no a nivel gráfico sino a nivel de código. También se tienen los plugin para eclipse que permiten crear aplicaciones para los dispositivos móviles, con la única restrictiva que no facilita la manipular de los objetos de las interfaces de usuarios a un nivel visual, solo permite manipular el desarrollo a nivel de código. Las empresas de desarrollo de aplicaciones ya no solo se dedican a sistemas para equipos de cómputos personas, sino que también se dedican al desarrollo de aplicaciones para dispositivos móviles, lo cual en la mayoría de las veces se cobra un valor considerable y hay que esperar para verificar si la aplicación se ajusta a lo que el usuario requiere, la mayoría de las veces cumple pero se malgastan 13 recursos del dispositivo haciendo la aplicación no satisfactoria en un porcentaje considerable. El problema se limita a los desarrolladores de aplicaciones para tecnología java RIM de BlackBerry, ya que al momento de desarrollar una aplicación, en el caso de ser un desarrollador junior no tiene el claro conocimiento de los diferentes objetos que se pueden usar en la interfaces de usuarios, en el caso de tratarse de un desarrollador sénior o semi-senior se hace complicado el trabajo de crear la interface de usuario para lo cual debe de pasar varias horas frente al computador para tener la interface deseada. En el caso de no tener el diseño deseado la mayoría de los programadores optan por realizar una nueva hoja de código fuente para no dañar la lógica ingresada y así tener una interfaz más acorde a lo deseado, esto causa perdida de tiempo en el desarrollo de un programa. Causas y Consecuencias del Problema Causas: Poco conocimiento de los controles tales como cajas de textos, listas desplegable, opciones, menús, selecciones complementos, clases, interface y demás objetos que se aplican en el desarrollo de aplicaciones móviles java RIM para BlackBerry. Limitantes de las aplicaciones en los dispositivos BlackBerry. 14 Pocos conocimientos de los eventos que se ejecutan así como las condiciones que deben de existir para que se ejecuten los mismos. Pocas Facilidades en la interacción de los diferentes objetos, interfaces y clases que se utilizan en el desarrollo de una aplicación java RIM para BlackBerry. En la actualidad hay editores de programas para aplicaciones móviles para los diferentes dispositivos pero para java RIM no se ofrece una herramienta que me ofrezca facilidades (interfaz gráfica) el desarrollo de sistemas. Poca ayuda en internet para solución de problemas que se presenten en el desarrollo de aplicaciones java RIM así como información de los diferentes objetos que se apliquen en el desarrollo de los aplicativos móviles. Las nuevas versiones de sistema operativo BlackBerry SO permiten mejores utilidades a aplicaciones desarrolladas para aplicaciones javas RIM para BlackBerry. Los programas son empaquetados y no pueden verse el código fuente para su análisis. Los cursos que se brindan para el desarrollo de aplicaciones son esporádicos y no se tiene la información deseada en los mismos para el desarrollo de aplicaciones java RIM para BlackBerry. Multifuncionalidades que brindan los diferentes dispositivos móviles para la ejecución de los programas java desarrollados. 15 Consecuencias: Poca facilidad al entender la lógica de programación por el desconocimiento de los objetos implicados en el desarrollo de las aplicaciones java RIM para BlackBerry. Se tiene un desconocimiento de los alcances del sistema que se puede crear. No se tiene una visión clara de los eventos que se pueden ejecutar a nivel de cada elemento. Al no tener el conocimiento de todos los objetos que ofrece en la plataforma, no se tiene la idea de la interacción entre los diferentes elementos. Interfaces de desarrollo java que tienen la limitante de no contar con interfaces para implementación de interfaces de usuarios de una manera amigable. Al ser una tecnología nueva no se tiene suficientes conocimientos o foros en donde se pueda obtener información para poder realizar aplicaciones java RIM. El ser una nueva tecnología o ambiente de desarrollo no se ha explotado en su totalidad las capacidades. Los códigos de aplicaciones hechos no se puede visualizar por algún programa de extracción de código desde los ejecutables, por ello no se tiene el conocimiento de cómo actúan las aplicaciones ya realizadas. 16 En la actualidad son muy pocos las instituciones que brindan cursos para desarrollo de aplicaciones y cuando estas se dan son para diferentes dispositivos o en su defecto tienen un valor exagerado y por ello la mayoría de las veces no se puede acceder a estos cursos. Debido a que hay diferente gama de productos BlackBerry, la complejidad para realizar estas aplicaciones confunden al desarrollador. Delimitación del Problema Campo: Desarrollo de aplicaciones. Área: Tecnología Móvil Aspecto: Complejidad de desarrollo de aplicaciones para tecnología móvil. Tema: Interfaces gráficas para desarrollo de aplicaciones java en BlackBerry, complejidad del desarrollo y propuesta de ambiente de desarrollo gráfico. Formulación de Problema. Considerando los fundamentos planteados anteriormente se ha definido el siguiente problema ¿Cómo reducir la complejidad de desarrollo de aplicaciones móviles para equipos BlackBerry con tecnología RIM? 17 Evaluación del Problema Actualmente al desarrollar una aplicación para java RIM solo se lo puede hacer digitando líneas de código aun así solo tengamos que realizar una ventana de muestra. Motivo por el cual se propone un aplicativo que me permita de una manera dinámica, agradable y amigable desarrollar programas que se utilizara en una aplicación java RIM para dispositivos móviles de BlackBerry. Delimitado: Actualmente existen herramientas para el desarrollo de aplicaciones java RIM para BlackBerry, entre estas tenemos las herramientas de java Research In Motion, Plug-in para Eclipse Galileo, ambos programas solo brindan la una interface en la que se debe ingresar líneas de código para el desarrollo del programa, por lo cual no se tiene una visión del front-end, para ver estas aplicaciones el GUI que se ofrecerá al usuario se debe ejecutar el código fuente y ver la ejecución, esta acción provoca de retardos en el tiempo de entrega del producto final. Claro: El desarrollo de aplicaciones java RIM para BlackBerry difiere considerablemente de los MDIlet (lenguaje de programación java para dispositivos móviles) que se crean para los dispositivos móviles, esto implica que el desarrollo de aplicaciones para el sistema operativo BlackBerry SO se haga de una manera diferente donde las aplicaciones MDIlet no son suficientes para cumplir con una tarea asignada o para realizar el uso correcto del dispositivo 18 Relevante: En lo que se refiere a dispositivos inteligente en la actualidad predominan los sistemas operativos Android, IPHONESO, BlackBerry SO y otros, motivo por el cual el desarrollo de aplicaciones para estos Sistemas operativos merece un tratamiento diferente al lenguaje J2ME para el desarrollo de aplicaciones MDIlet. Contextual: Se desarrolló una herramienta que permitirá entender de mejor manera como se encuentra estructurada una aplicación hecha para tecnología de java RIM para dispositivos BlackBerry, para ello se desarrolla el código java desde la interfaz de usuario de cómo se encuentran los objetos distribuidos en la pantalla, y se muestra el código al programador . Factible: El desarrollo de una aplicación java RIM para BlackBerry exige una carga intelectual para el desarrollo de los Front-End. Motivo por el cual el desarrollador debe tener conocimiento de los diferentes objetos y sus propiedades, el programa que se desarrolló permite disminuir esta carga de conocimientos al programador, para de esta manera centrarse en el desarrollo de la lógica del aplicativo que se está implementando. Identifica los productos esperados: Se desarrolló un sistema que ofrece un entorno de diseño que permita usar de manera ágil y precisa los diferentes elementos que se utilizan para la implementación de un sistema móvil de java RIM para equipos BlackBerry, así también se busca disminuir la complejidad del 19 código facilitando el desarrollo de los programas y manipular las diferentes propiedades de los objetos que se muestran en el aplicativo para el dispositivo móvil. Variable: Independiente: Interfaces Gráficas Para Desarrollo De Aplicaciones Java Para BlackBerry. Esto permitirá desarrollar aplicaciones java para BlackBerry de manera amigable y optimizaría el tiempo de desarrollo del mismo, reduciendo considerablemente costos. Dependientes: Complejidad Del Desarrollo de Aplicaciones java Móvil. El Desarrollo de aplicaciones java para móvil ha sido truncado debido a la poca experiencia en este ambiente, lo cual hace que haya poco conocimiento de las aplicaciones posibles a realizarse. Implementación De Ambiente De Desarrollo Gráfico Para Java Móvil De BlackBerry Desarrollar un binario para que pueda ser cargado en los dispositivos BlackBerry de manera dinámica y poder ser usado en un tiempo mínimo de desarrollo 20 Objetivos de la investigación: Objetivos Generales: Disminuir la complejidad en el desarrollo de aplicaciones para dispositivos móviles ya que actualmente se ejecuta mediante líneas de código lo cual lleva a que la implementación de una solución para un Smartphone tome un tiempo considerable en la codificación de la interfaz de usuario que en la lógica implementada en la misma. Proveer una herramienta que facilite el diseño de interfaces de usuarios de una manera amigable y mostrar en tiempo real como se esta presentación la pantalla en móvil final para el usuario. Objetivos Específicos: Elaborar una herramienta para el desarrollo de aplicaciones móviles java para BlackBerry que permita la interacción intuitiva con lo diferentes elementos que se encuentran en una aplicación de un dispositivo móvil. Elaborar una solución que permita la optimización de los recursos que posee el desarrollador disminuyendo su carga cognitiva para centrar más su trabajo en el desarrollo lógico de los procesos del aplicativo. Evaluar el código que se genera por el diseño por el usuario, evaluación de sintaxis de código ingresado por el usuario, conllevando al correcto funcionamiento de las aplicaciones en el dispositivo BlackBerry. 21 Provee de una herramienta amigable e intuitiva para el desarrollo de aplicaciones para que se reduzca considerablemente la complejidad en el desarrollo de aplicaciones para los Smartphone. Interactuar entre las diferentes versiones de sistemas operativos que se encuentran instalados en los dispositivos BlackBerry así como los diferentes tipos de dispositivos habidos en el mercado. Alcances Desarrollo de Herramienta con interfaz gráfica para creación de aplicaciones java para dispositivos BlackBerry. Elaborar un entorno en el cual se muestren los diferentes elementos del GUI que puede tener una aplicación java RIM para BlackBerry. Entre los objetos que permitirá manipular se encuentran los siguientes: Etiqueta. Caja de Selección. Botón de Opción. Botón de acción. Lista de texto. Lista numérica. Texto de edición. Texto de solo lectura. Texto de auto búsqueda. Texto auto corregir. 22 Texto auto completar. Campo de correo electrónico. Texto de contraseña. Texto de fecha. Campo web. Campo imagen. Campo mapa. Desarrollar un aplicativo que permita ubicar los diferentes objetos de una aplicación java para BlackBerry. Establecer interacción con las diferentes propiedades de los diferentes elementos que posee una aplicación java de BlackBerry. Diseñar código fuentes de aplicaciones javas para BlackBerry. Analizar modificaciones ingresadas por el desarrollador en el código generador por el aplicativo. Elaborar una organización de los elementos no lineales sino en diferentes áreas del área de desarrollo para mejorar el aspecto visual de las aplicaciones. Elaborar una interfaz que permita a un desarrollador de aplicaciones sea este novato o sénior el desarrollo del código de aplicaciones java RIM para dispositivos BlackBerry. Relacionar los diferentes objetos de aplicaciones Java con objetos de reconocimiento intuitivo. 23 Permitir la modificación del código generado por el desarrollador para poder implementar lógica de programación. Edición de Código fuente por medio de propiedades para incluir funcionalidades. Generación de código java en archivos *.java para la implementación de la aplicación final. Permitir la edición desde otros aplicativos sin que se vea afectado el entrono gráfico desarrollado por el usuario. Generación de solución para importar en Eclipse. Permitir la generación directa en el código importado en el ambiente de desarrollo de eclipse Permitir guardar el estado de la solución generada y abrirla para editar Alcances y Limitaciones de la Investigación Con fines metodológicos y de manejo del estudio, se ha considerado como población de estudio, un grupo de desarrolladores que se encuentran en la carrera de ingeniería en sistemas computacionales, personal que se encuentran laborando en las empresas OutSoursing como consultores informáticos y que posean conocimientos de desarrollo en tecnología java y conocimiento del entorno de escritorio de Windows, desarrolladores en el área que no hayan realizado estudios de ingeniería y que se encuentren laborando en empresas como programadores, y que desarrollen aplicaciones para dispositivos BlackBerry. 24 Se determinó que el estudio está orientado al ámbito de las personas que desarrollan aplicaciones informáticas que buscan la manera de optimizar su tiempo de desarrollo y no aplicar tiempo extendido en el desarrollo de las aplicaciones gráficas para el cliente final. El sistema se dividirá en 5 módulos principales que se detallan a continuación: Módulo de creación inicial de solución a ser importado en Eclipse Módulo de creación de interfaces graficas Módulo de generación de archivos java Módulo de verificación de información Módulo de generación final de solución para eclipse Módulo Creación Inicial de Solución a ser Importado en Eclipse Genera el sistema de archivo inicial a ser importado en el proyecto de eclipse, el sistema de archivos que contendrá la solución a ser importada, en este módulo se solicita al usuario que ingrese el nombre del proyecto a ser generado, así como el icono demostrativo que se implementara como icono de aplicación en el dispositivo móvil, el nombre que se coloque aquí es el nombre que se demostrara en el icono de la aplicación móvil. Incluyen las validaciones correspondientes para el nombre de aplicativo, así como también se restringe el tamaño del icono que se implementara en el aplicativo, en el caso de no seleccionar algún icono se colocara el icono por 25 defecto que esta precargado en el aplicativo, en este módulo también se genera la clase para poder ubicar los diferentes elementos en la pantalla del dispositivos así como la clase inicial de la aplicación. Módulo Creación de Interfaces Gráficas En este módulo se muestra la interfaz gráfica que así como los objetos que pueden ser incluidos en el aplicativo para el dispositivo BlackBerry, en este módulo se permite la manipulación de los objetos, las propiedades de los mismos y la inclusión de código de acción en los botones a ser utilizados, las imágenes que se utilizaran en este módulo serán copiadas para el uso posterior en el dispositivo BlackBerry. Módulo Generación de Archivos Java Genera el código java con el que se va a trabajar, cada pantalla corresponde a una clase java que representa una pantalla en el dispositivo BlackBerry, así se pueden desarrollar n ventanas y en el aplicativo se deberá incluir la llamada de los mismos. Módulo Verificación de Información Permite una compilación de código generado, en el caso de que el usuario haya ingresado un código erróneo se procederá a mostrar los errores correspondientes, en el caso de que el código no tenga errores solo se mostrarán las advertencias correspondientes 26 Módulo Generación Final de Solución para Eclipse Genera la solución definitiva a ser utilizada en eclipse, se encarga de recompilar los diferentes recursos que se han estado aplicando en el desarrollo de la aplicación, así como las diferentes clases que se han generado en el aplicativo. Justificación e Importancia Hace tiempo atrás las aplicaciones para dispositivos móviles eran desarrolladas por las empresas propietarias de los mismos, dejando que estos sistemas sean solo para funciones básicas de uso del cliente sin la opción de poder optimizar ese código. Con el pasar del tiempo y el avance de la tecnología se han optimizado los desarrollos de las aplicaciones móviles, dejando así la oportunidad de optimizar un equipo personalizando su software. El desarrollo de las aplicaciones en los equipos móviles, por lo usual se realizan con la tecnología del open source así como Java y C++, esto ha facilitado que la adaptación de los códigos para los diferentes desarrolladores se haga de fácil alcance, sin embargo el hecho de conocer el lenguaje le restringe en el hecho de conocer las acciones que se pueden realizan en un dispositivo móvil. 27 Con la aparición de netbeans se pudo implementar el desarrollo de las aplicaciones para dispositivos móviles a nivel de interface gráfica, sin embargo este desarrollo no le daba al programador una perspectiva de cómo está quedando la interfaz de usuario, esto causaba una reingeniería en el entorno gráfico cada vez que sé que necesitaba ver la interfaz en el dispositivo y comprobar que se ajustaban a las necesidades requeridas. Con la aparición de los teléfonos inteligentes se ha visto la necesidad de tener aplicaciones que se ajusten a los requerimientos de los dueños así como el utilizar en todo lo posible las características que posea el equipo, en la mayoría de los casos los aplicativos que se encuentran por defecto en los Smartphone no se adaptan a los requerimientos de los dueños, poco después de este problema hubieron programadores que se dedicaron al desarrollo de las aplicaciones para los Smartphone. Entre los diferentes dispositivos que se podían desarrollar se tenían, Simba. Android, Windows Mobile, Java RIM, J2ME, IOS. El lenguaje Simba estaba destinado a los dispositivos Nokia y Sony Ericsson en su mayoría, este sistema ejecutaba aplicaciones en lenguaje C++, la herramienta de desarrollo que se podía aplicar con este sistema operativo se encontraba en netbeans, con el pasar del tiempo este sistema operativo móvil ha sido desplazado por los otros. 28 El lenguaje Java RIM es propio de los equipos BlackBerry, se ejecuta sobre la tecnología J2ME, pero con más atributos, eventos y objetos que se encuentran en un dispositivo BlackBerry. El desarrollo de aplicaciones java RIM para dispositivos móviles BlackBerry se está empleando mucho en los negocios que se encuentran en la actualidad, entre los cuales podemos destacar entidades bancarias, negocios de ventas, negocios de telecomunicaciones, importaciones, control de recursos, control de ingresos, transacciones en línea, información, entre otras funcionalidades. Entre las aplicaciones que se pueden encontrar en los dispositivos BlackBerry se encuentran el manejo de mapas y ubicaciones, sistemas de conversiones de monedas, sistemas de redes sociales, etc... Todos estos sistemas buscan sacar el máximo provecho de las características del hardware que posee el equipo. El desarrollo de aplicaciones para los equipos BlackBerry se ve algo estancado en la actualidad ya que el desarrollo de estas aplicaciones no son explotadas, ya sea por el poco conocimiento de código fuente, los eventos que se generan en las aplicaciones, diferentes tipos de comunicación, almacenamiento, herramientas adicionales, librerías, sitios web, etc., en el caso de conocer el código y los objetos se hace tediosa la tarea de desarrollo de entorno gráfico para el gusto del usuario. El desarrollo de las interfaces gráficas para los dispositivos BlackBerry hace que 29 el desarrollo de los sistemas para estos equipos se haga una labor tediosa y en su mayoría les resta tiempo al desarrollador y logra dejar la lógica en segundo plano. La solución propuesta tiene como finalidad disminuir la complejidad en el desarrollo de aplicaciones móviles , con este fin se podrán realizar aplicaciones para Smartphone de manera más dinámica y así se podrán optimizar los recursos y disminuir los tiempos de desarrollo lo cual beneficiara de manera considerable a los desarrolladores de sistemas así como a las empresas que venden sistemas informáticos ya que implementando esta herramienta podrán entregar respuestas a sus clientes finales dentro de un tiempo considerablemente corto y así poder realizar más aplicaciones sin necesidad de dedicar demasiado tiempo en el desarrollo de las interfaces de usuarios. La solución también brindara la posibilidad de que el usuario no se vea atado a la organización lineal que posee los objetos en los dispositivos BlackBerry, ya que se brindara la posibilidad de colocar los objetos de la interfaz de manera que se vea un trabajo más profesional. A nivel administrativo permite mejorar los tiempos de desarrollo aumentando productividad y disminuyendo gastos de tiempo y económicos en el área de sistemas, así como establecer formatos sencillos de diseños de las interfaces y no colocar varios objetos para obtener una solución amigable a primera vista. 30 A nivel educativo se benefician los estudiantes ya que con el avance de la tecnología no solo se están desarrollando aplicaciones para computadores de escritorios sino también para los dispositivos móviles que la mayoría se ejecutan con lenguaje java, de esta manera se pueden desarrollar nuevos métodos de enseñanza que estarían orientados a estas nuevas tecnologías. A nivel personal permite que los programadores se familiaricen con las aplicaciones de los dispositivos BlackBerry, y desarrollar aplicaciones sencillas sin mucho conocimiento del lenguaje de programación Java RIM. A nivel profesional permite tener los objetos de las aplicaciones de una manera ordenada y permite el uso intuitivo que el desarrollador quiera implementar. Permitiendo a los usuarios finales un mejor control de su tiempo al tener los objetos ordenados de manera tal que no se le complique la lectura de la información contenida en la aplicación. 31 CAPÍTULO II MARCO TEÓRICO Antecedentes del Estudio Con el desarrollo de la tecnología tanto a nivel de hardware como de software se ha ido realizando avances en las herramientas de diseños de los programas, esto ha dado paso a que los lenguajes de programación sean complementados con ambientes de desarrollo, esto brinda a los programadores la facilidad de desarrollo de los sistemas de una manera amigable, optimizando el tiempo de desarrollo de los mismos. En año 1998 se dio a conocer NetBeans que en conjunto con Visual Studio que permiten el desarrollo de aplicaciones de escritorio con el adicional de que permite interactuar con los objetos gráficos de los GUIs de manera amigable, las empresas desarrolladoras de dispositivos móviles lanzan sus sistemas para desarrollos de sistemas como por ejemplo, Windows, BlackBerry, posterior IPhone y Android. Para ello veremos en profundidad lo que es NetBeans y como ha ido evolucionando este IDE. NetBeans comenzó como un proyecto estudiantil en la República Checa (originalmente llamado Xelfi), en 1996. La meta era escribir un entorno de desarrollo integrado (IDE) para Java parecido a Delphi. Xelfi fue el primer IDE escrito en Java. 32 El plan original era desarrollar unos componentes JavaBeans para redes. Jarda Tulach, quien diseñó la arquitectura básica de la IDE, propuso la idea de llamarlo NetBeans, a fin de describir este propósito. Cuando las especificaciones de los Enterprise JavaBeans salieron, decidieron trabajar con este estándar, ya que no tenía sentido competir contra él, sin embargo permaneció el nombre de NetBeans. En la primavera de 1999, Netbeans DeveloperX2 fue lanzado, soportando Swing. Las mejoras de rendimiento que llegaron con el JDK 1.3, lanzado en otoño de 1999, hicieron de NetBeans una alternativa realmente viable para el desarrollo de herramientas. En el año de 1999, el equipo trabajó duro para rediseñar DeveloperX2 en un NetBeans más modular, lo que lo convirtió en la base de NetBeans hoy en día. Con NetBeans 3.5 se mejoró enormemente en desempeño, y con la llegada de NetBeans 3.6, se re implementó el sistema de ventanas y la hoja de propiedades, y se limpió enormemente la interfaz. NetBeans 4.0 fue un gran cambio en cuanto a la forma de funcionar del IDE, con nuevos sistemas de proyectos, con el cambio no solo de la experiencia de usuario, sino del reemplazo de muchas piezas de la infraestructura que había tenido NetBeans anteriormente. NetBeans IDE 5.0 introdujo un soporte mucho mejor para el desarrollo de nuevos módulos, el nuevo constructor intuitivo de interfaces Matisse, un nuevo y rediseñado soporte de CVS, soporte a Sun ApplicationServer 8.2, Weblogic9 y JBoss 4. 33 Con Netbeans 6.01, 6.8 y ahora en su versión mejorada 7.0 Se dio soporte a framework comerciales como son Struts, Hibernate. Durante el desarrollo del NetBeans IDE ocurrió una cosa interesante. La gente empezó a construir aplicaciones usando el NetBeans core runtime con sus propios plug-ins, de hecho, esto se convirtió en un mercado bastante grande. El IDE NetBeans posee 20000000 de líneas de código “El buen código es su mejor documentación. Cuando esté a punto de añadir un comentario, pregúntese: "¿Cómo puedo mejorar el código para que este comentario no sea necesario?”(Steve McConnell) EL IDE de eclipse se desarrolló en noviembre del 2001 y apareció con reemplazo del sistema visual Age de IBM. Eclipse cuenta con un editor de texto con resaltado de sintaxis, la compilación es de tiempo real y cuenta con pruebas unitarias JUnit, Así eclipse brinda la siguiente arquitectura: Plataforma Inicial Plataforma de Bulding estándar Un wodget toolkit portable Manejo de Archivo Manejo de Texto Vistas Editores Asistentes y perspectiva. 34 Visual Studio es un IDE que soporta varios lenguajes de programación entre ellos se encuentran Visual C++, Visual C#, Visual J#, ASP.NET, y Visual Basic .NET, aunque en la actualidad se están desarrollando nuevas interfaces para otros lenguajes así como el lenguaje nativo de Kinect para desarrollo de sensores, etc. En visual estudio se pueden desarrollar aplicaciones que se comuniquen entre estaciones de trabajo, páginas web y dispositivos móviles. El lenguaje Visual Basic en si significa Visual = entorno Visual. Basic=Beginnes´s All-purpose Symbolic Instruction Code que en español diría Códigos de Instrucciones de uso universal para principiantes, Basic es un lenguaje de programación que actúa como un intérprete entre el operador y el computador. La versión Original de BASIC fue creada en el año de 1964, esta aplicación gano gran popularidad por los sistemas Tiny BASIC y Microsoft BASIC. Anteriormente BASIC se manejaba de manera modular pero con la aparición de visual .net se empezó a manejar más orientado a objetos, así mismo también se permite el uso de servicios web así como ambiente web en las aplicaciones de Visual Basic.NET. En mayo de 1991 se mostró Visual Basic 1.0 Con Visual Basic los desarrolladores pueden implementar aplicaciones en un ambiente intuitivo y gráfico, simplemente con arrastrar controles sobre el formulario, esto hizo posible que los programadores profesionales aumenten su productividad. 35 “El futuro de .net está ligado al futuro de Windows, y este a su vez está ligado a de sus usuarios, a cuántos comprarán el móvil, Tablet, ultra portátil” (Juan Quijano) De acuerdo con los estudios realizados las aplicaciones existentes que son RIM de propiedad de la empresa BlackBerry para el desarrollo de aplicaciones, el IDE BlackBerry para eclipse brindan la facilidad de poder realizar aplicaciones para dispositivos java, pero en estos casos no se brinda una interfaz gráfica para el desarrollo de las aplicaciones, lo cual provoca que los desarrolladores se dediquen a realizar investigaciones, que en la mayoría de los casos no cumple con las expectativas o no se cuenta con la información solicitada o se muestra una información que no cumple con lo buscado, como instancia necesaria se recurre a la consulta a los desarrolladores de a propia empresa BlackBerry, lo cuales no contestan al requerimiento en un tiempo prudencial, en otros casos no contestan y esto provoca retraso en los proyectos, en otros casos se desarrollan aplicaciones en HTML5 pero el problema de esta solución es que se depende de la conexión a internet en la mayoría de los casos. FUNDAMENTACIÓN TEÓRICA Java J2ME La tecnología J2ME (Java 2da Micro Edition), es el versionamiento de java que se puede utilizar en los diferentes dispositivos móviles así como teléfonos, 36 reproductores blue-ray, dispositivos multimedia, entre otros, debido a la flexibilidad y las rapidez, esta librería se ha convertido en la fuente para el desarrollo de los diferentes sistemas operativos móviles que se encuentran en el mercado actual. La tecnología J2ME se desarrolló para poder adaptarse a las limitaciones que se presentan en los diferentes dispositivos móviles, de esta manera se aprovecha al máximo las capacidades de memoria, visualización y potencia limitadas que se presentan en los estos equipos, la mayoría de estos dispositivos son inalámbricos, por ello esta tecnología trabaja con las diferentes conectividad móviles. Java Micro Edición es una nueva versión de la máquina virtual de java que puede ejecutarse en pequeños dispositivos, esta tecnología apareció debido a las necesidades de los usuarios de telefonía móvil así como las compañías que desarrollan aplicativos, se estaban comenzando a orientar a la programación para los dispositivos móviles. GRÁFICO No. 1 Java 2 micro Edition 37 Fuente. Java a Tope. J2ME de Sergio Gálvez Rojas y Lucas Ortegas Díaz Elaborado Por: Java a Tope. J2ME de Sergio Gálvez Rojas y Lucas Ortegas Díaz Un punto importante es que Java Micro Edition contiene una mínima parte de los APIs de Java, esto es debido a que las APIs de java ocupa 20 MB, y los dispositivos móviles cuentan con una capacidad limitada de memoria, en concreto J2ME utiliza 31 clases de plataforma J2SE (Java 2 Standard Edition). La máquina virtual que utiliza J2ME no es la clásica JVM (Java Virtual machine), esta es dominada KVM (K Virtual Machine). KVM La KVM(Kilobyte Virtual Machine) consume entre 40 y 80 K de código en la configuración estándar, dependiendo de la plataforma y las opciones de compilación, adicional a ello el uso de memoria utiliza objetos pequeños, requiere solo unos kilobytes de memoria dinámica para ejecutar con eficiencia, por este punto se puede ejecutar en dispositivos que cuenten con 128kb de memoria 38 dinámica, la máquina virtual K ofrece una alta portabilidad que reduce las dependencias del sistema en lo mínimo, incluye funciones multihilos y procesamiento de archivos basura que se aplican independientemente del sistema. La desventaja que se presenta con la KVM es que debido al uso bajo de memoria, se obvian algunas funcionalidades que con una Java Virtual Machine no se presenta como por ejemplo: No hay soporte para variables de coma tipo flotante. No hay soporte para el JNI(Java Native interface) debido al consumo de memoria No existen clases definidas por el usuario, solo clases predefinidas. No permiten grupos de hilos daemon, solo permite usar hilos en colección. No existe finalización de las clases. No hay referencias débiles. No existe la posibilidad de personalización de las excepciones. Los diferentes componentes que componen Java micro Edition son: Una serie de máquinas virtuales Java con diferentes requisitos orientados a diferentes dispositivos móviles. Perfiles que son bibliotecas java dirigidas a familias de dispositivos con más recursos, para la implementación de funcionalidades de más alto nivel. Paquetes opcionales de programación. 39 Configuraciones. Que son un conjunto de clases básicas orientadas a conformar el núcleo de las implementaciones para dispositivos móviles de características específicas, existe 2 tipos de configuración. o Connection Connected Limited Device Configuration (CLDC) o Connected Device Configuration (CDC) Connected Limited Device Configuration (CLDC) Es una especificación de un marco para las aplicaciones Java Micro Edition que describen el conjunto básico de las bibliotecas y las características de la máquina virtual que deben estar presentes en una aplicación. La Connected Limited Device Configuration se combina con uno o varios perfiles para dar a los desarrolladores una plataforma para la creación de aplicaciones en los dispositivos embebidos con recursos muy limitados, tales como buscapersonas y teléfonos móviles. GRÁFICO No. 2 Pre verificación de Clases en CDLC/KVM Fuente: Java a Tope. J2ME de Sergio Gálvez Rojas y Lucas Ortegas Díaz Elaborado Por: Java a Tope. J2ME de Sergio Gálvez Rojas y Lucas Ortegas Díaz Connected Device Configuration (CDC) 40 Esta es una especificación realizada por Sun dentro del conjunto de tecnologías para computación móvil conocido como J2ME (Java 2 Mobile Edition). Define las capacidades básicas que debe tener un dispositivo móvil con capacidad de conexión y cuya potencia de computación se encuentra entre la de un teléfono o PDA, con cierta capacidad como un sistema de navegación GPS para automóvil, un DVR, PVR o un aparato para navegar por Internet. GRÁFICO No 3. Relaciones APIs de Java. Fuente: Java a Tope. J2ME de Sergio Gálvez Rojas y Lucas Ortegas Díaz Elaborado Por: Java a Tope. J2ME de Sergio Gálvez Rojas y Lucas Ortegas Díaz CVM La CVM (Compact Virtual Machine) es la máquina virtual java para CDC y soporta las mismas características que la máquina virtual para de J2SE, está orientado a dispositivos de 32 bits con memoria mínima de 2 MB de RAM, entre las diferentes características que se presenta con esta máquina virtual tenemos: Sistema de memoria avanzada. Tiempo de espera bajo para limpieza. Separación completa de la máquina virtual de sistema de memoria. Limpieza de variables modularizado. 41 Portabilidad. Sincronización veloz. Ejecución de clases en memoria RAM. Soporte e interfaces de servicios de sistema en tiempo real. Conversión de hilos java a hilos nativos. Soporte para características de java 2 y java 1.3 Librerías de seguridad. Interface nativa de java (JNI). Invocación remota de métodos(RMI Interfaz de depuración de la máquina virtual. RIM Research In Motion o como mejor se la conoce BlackBerry, es una compañía radicada en Canadá dedicada al desarrollo de dispositivos electrónicos, su cede se encuentra en Waterloo, Ontari, además de oficinas en Norteamérica, euro, la región de Asia y el pacifico, RIM comenzó como desarrollador en el año 1995 con un capital de 5 millones de dólares canadienses donados por Instituciones Canadienses de Capitales. En sus comienzos RIM era conocida como RAM Mobile Data y en compañía con Ericsson desarrollaron la tecnología inalámbrica llamada Mobitex. Con características como paginación y envió de correos, desde agosto del 2000 se ha dedicado a desarrollador diferentes dispositivos compatibles con tecnología GSM 42 y CDMA, con el mejoramiento de la tecnología también se fueron incluyendo funcionalidades como soporte para HSPDA, UMTS, EDGE y 3G. Research In Motion desarrollo su propio software para sus dispositivos usando lenguajes C++ y java, estas librerías son un conjunto de componentes que junto. Con Java Micro Edition colocan en funcionamiento los diferentes aplicativos embebidos en el equipo BlackBerry. A medida que ha ido presentándose nuevas versiones de la librería de java se han ido agregando más funcionalidades orientadas a la nube (internet). NET_RIM_API La librería net_rim_api es un conjunto de clases que permiten interactuar con las diferentes características de los equipos BlackBerry, permitiendo la generación de aplicativos que se ejecutan en los dispositivos móviles de una manera ágil y ligera, también se incluye las características de comunicación, geo localización y otras ventajas que permiten al desarrollador la creación de programas para las diferentes versiones de equipos que hay en el mercado. "Siempre he deseado que mi equipo sea tan fácil de usar como mi teléfono, mi deseo se ha hecho realidad porque ya no puedo encontrar la manera de usar mi teléfono." (Bjarne Stroustrup) LENGUAJE DE PROGRAMACIÓN Un lenguaje de programación se puede usar para crear programas que controlen el comportamiento físico o lógico de la máquina, para ejecutar algoritmos con 43 precisión. Un lenguaje de programación contiene reglas sintácticas y semánticas con el cual se escribe, se prueba, se depura y se compila. Para desarrollar programas informáticos se tiene 2 ideologías que son imperativas y declarativas. Programación Imperativa La programación imperativa es un paradigma de programación que define a la programación en términos del estado del programa y sentencias, estas indican al computador como realizar una tarea. Lenguaje Imperativo. Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún siguen el mismo paradigma, a pesar de no ser programas de computadora, son también conceptos familiares similares en estilo a la programación imperativa; cada paso es una instrucción, y el mundo físico guarda el estado. Programación Declarativa Una programación declarativa está basada en el desarrollo de programas especificando un conjunto de condiciones, preposiciones, restricciones, 44 ecuaciones o transformaciones que describen el problema y detallan su solución, en esta programación se desarrollan flujos de trabajo que son interpretados por la máquina. No existen asignaciones destructivas, y las variables son utilizadas con Transparencia referencial, los programas informáticos se dividen en dos grandes grupos, software de sistemas y software de aplicación. El software de sistemas son programas informáticos que sirven para controlar o interactuar con el sistema operativo, controlando al hardware y dando soporte a otros sistemas. Estos programas realizan diversas tareas, como la transferencia de datos entre la memoria RAM y los dispositivos de almacenamiento (disco rígido, unidades de discos ópticos, etc.) entre otros. El software de aplicación es aquel que realiza una tarea determinada, este software de puede utilizar en cualquier instalación informática, dependiendo de la tarea por la cual sea creada, así como por ejemplo, tareas de negocios, utilerías, personales, entre otros. LENGUAJE MAQUINA El lenguaje de maquina es el conjunto de códigos que han sido llevados de texto a código binario. Este lenguaje está compuesto por un conjunto de instrucciones que 45 determinan acciones a ser tomadas por la máquina. Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de máquina es específico de cada máquina o arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre ellas. APLICACIONES Los software de aplicaciones dividen en cuatro categorías: Aplicaciones de Negocio. Aplicaciones de Utilería. Aplicaciones Personales. Aplicaciones de Entretenimiento. Aplicaciones de Negocio.- Son aplicaciones que se utilizan más en empresas, ya que brindan las facilidades de obtener reportes, realizar cálculos, documentar, etc. Entre las más comunes encontramos procesadores de palabras, hojas de cálculo, sistemas de bases de datos y graficado res, el ejemplo más común que podemos encontrar en el paquete de Office de Microsoft o el paquete de Open Office de GNU Aplicaciones de Utilería.- Ayudan a dar mantenimiento a los sistemas así como a la computadora en sí, entre estos sistemas podemos encuentras los accesorios de 46 Windows así como por ejemplo tenemos, el teclado, pantalla compartida, ventana de comandos, lupa, captura de pantallas, asistencia remota, entre otras. Aplicaciones Personales.-Son aplicaciones que permiten a los usuarios llevar un control de sus actividades, así como tener una organización de sus tareas , contactos, gastos, además permiten mantener una agenda de direcciones y calendario de citas, hacer operaciones bancarias, enviar correo electrónico y conectarte a servicios informáticos que ofrecen grandes bases de datos de información valiosa. Aplicaciones de Entretenimiento.- Son aplicaciones desarrolladas con el fin entretener. En esta categoría ingresan los videojuegos de galería, simuladores de vuelo, juegos interactivos de misterio y rompecabezas difíciles de solucionar. Muchos programas educativos pueden ser considerados como software de entretenimiento. Estos programas pueden ser excelentes herramientas para la educación. A los sistemas que ejecutan tareas en paralelo se le conoce como multitarea. GRÁFICO No. 4 INTERFACES GRÁFICAS 47 Fuentes: http://www.hipertexto.info/documentos/interfaz.htm Elaboración http://www.hipertexto.info/documentos/interfaz.htm La interfaz gráfica GUI (Graphical User Interface) es un programa que interactúa con la interfaz de usuario, usando objetos gráficos para representar la información y acciones disponibles en la interfaz. Su principal uso, consiste en proporcionar un entorno visual sencillo para permitir la comunicación con el sistema operativo de una máquina o computador. La interfaz de usuario es el medio que utiliza el usuario para interactuar de manera amistosa con el computador. Entre los principales elementos de la interfaz de usuario tenemos: Menú Ventana Teclado Ratón Existen 3 tipos de interfaces de usuarios: 48 Interfaz de hardware.- Son las interfaces de entrada y salida, aquí encontramos puertos seriales, puertos paralelos, USB, tarjeta para los buses ISA y PCI, tarjeta de red, protocolos top/ir, etc. Interfaz de Software.- Es la que procesa los datos que el usuario requiera entre ella tenemos las herramientas de negocio, personales, de entretenimiento y utilería Interfaz de Hardware y software.-Es el que establece un puente entre la máquina y las personas, permite a la máquina entender la instrucción y al hombre entender el código binario traducido a información legible Habitualmente las acciones se realizan mediante manipulación directa, para facilitar la interacción del usuario con la computadora. Surge como evolución de las interfaces de línea de comandos que se usaban para operar los primeros sistemas operativos y es pieza fundamental en un entorno gráfico. Como ejemplos de interfaz gráfica de usuario, cabe citar los entornos de escritorio Windows, el XWindows de GNU/Linux o el de Mac OS X, Aqua. Una interfaz es un dispositivo que permite comunicar dos sistemas que no hablan el mismo lenguaje. Restringido a aspectos técnicos, se emplea el término interfaz para definir el juego de conexiones y dispositivos que hacen posible la comunicación entre dos sistemas, sin embargo, cuando hablamos de interfaz nos referimos a la cara visible de los programas tal y como se presenta a los usuarios 49 para que interactúen con la máquina. La interfaz gráfica implica la presencia de un monitor de ordenador o pantalla constituida por una serie de menús e iconos que representan las opciones que el usuario puede tomar dentro del sistema. Las características básicas de una buena interfaz podrían sintetizarse en: Facilidad de comprensión, aprendizaje y uso Representación fija y permanente de un determinado contexto de acción (fondo) El objeto de interés ha de ser de fácil identificación Diseño ergonómico mediante el establecimiento de menús, barras de acciones e iconos de fácil acceso Las interacciones se basarán en acciones físicas sobre elementos de código visual o auditivo (iconos, botones, imágenes, mensajes de texto o sonoros, barras de desplazamiento y navegación...) y en selecciones de tipo menú con sintaxis y órdenes Las operaciones serán rápidas, incrementales y reversibles, con efectos inmediatos Existencia de herramientas de Ayuda y Consulta Tratamiento del error bien cuidado y adecuado al nivel de usuario Para diseñar una buena interfaz enfocada hacia el usuario es necesario tener claros los objetivos del hipertexto, teniendo en cuenta no sólo lo que se persigue ofreciendo información, sino las necesidades que van a tener los usuarios a la hora 50 de consultarlo. También es clave determinar el contenido y la funcionalidad, especificar la estructura organizativa, la navegación, las secciones y los sistemas de búsqueda. Hay que tener en cuenta que cada usuario puede tener diferentes necesidades y un buen sistema de navegación debe contar con las herramientas adecuadas para diferentes funciones. Como cada usuario pude tener diferentes necesidades, es importante ofrecer diferentes formas de acceso y búsqueda, desde búsquedas precisas, hasta exploraciones guiadas o a elección del lector. El diseñador de interfaces debe facilitar y simplificar el acceso y los recorridos de los usuarios. A menudo se usa la metáfora del viaje o del camino a recorrer y se presentan iconos o símbolos de interfaz y otros dispositivos que tienen que ver con las señales utilizadas en mapas, urbanismo o arquitectura. Un buen hipertexto debe suministrar herramientas de uso sencillo y fácil para que el usuario sepa en todo momento en dónde se encuentra y hacia dónde puede ir, y herramientas para que pueda realizar una serie de acciones como búsquedas, ponerse en contacto con otros usuarios, participar en un foro de debate, etc. Algunas de estas herramientas útiles para la navegación y que deben mostrarse en la interfaz de usuario son las siguientes: 51 Herramientas de representación de la estructura de la información documental: Se trata de representar la estructura de los nodos más amplios o genéricos que contienen las diferentes partes o nodos específicos, de forma similar a las secciones, capítulos, etc. de un texto. Herramientas de navegación: es necesario representar de forma visual y gráfica el conjunto de la red hipertextual. Para ello, son muy útiles los mapas de navegación que funcionan a modo de brújula para ayudar al usuario a moverse por el hipertexto. La información se presenta como nodos dentro de una red en la que una idea lleva a otra y está a otra diferente. Sin embargo, el sistema sería un caos si no existieran formas de organizar la información en una forma lógica y con posibilidad de conocer en todo momento dónde se está y cómo se ha llegado. Herramientas que posibiliten guardar y almacenar la dirección y localización de los documentos a los que se ha accedido, mediante el registro de marcas, favoritos o bookmarks, para su posterior acceso directo. Herramientas que permitan definir los enlaces con indicación del punto de destino: el usuario debe poder visualizar el destino o destinos posibles de cualquier enlace para saber hacia dónde se desplazará en caso de optar por esa conexión. 52 Herramientas que permitan la creación de un histórico de Navegación: para que el usuario pueda tener constancia del camino recorrido tanto sobre la red de documentos como sobre la red semántica, y poder así volver en cualquier momento, sobre algún paso del camino recorrido. Herramientas para la recuperación de la información: se pueden incluir buscadores y otras herramientas de búsqueda y consulta tanto dentro de la propia red hipertextual como en el resto de la web. Estas herramientas permiten la construcción de documentos dinámicos creados a partir de las propias acciones del usuario, que pueden contar con la ayuda de agentes inteligentes. Herramientas que permitan que el usuario participe en la creación del conocimiento en un entorno colaborativo. Estas herramientas permitirán la interacción entre el autor del hipertexto y el usuario o entre varios usuarios, o incluso, que el usuario contribuya al contenido del hipertexto directamente. El usuario puede participar en el contenido del hipertexto haciendo comentarios y anotaciones ya sea en línea o por correo electrónico, es posible iniciar una discusión, es posible añadir contenidos o añadir enlaces mientras se lee, individualmente o en colaboración. 53 Mecanismos de búsqueda y recuperación de la información Los mecanismos de búsqueda que faciliten el acceso, la búsqueda y la recuperación de la información, son herramientas básicas en un hipertexto para completar la navegación por el espacio de la información hipertextual. En muchos casos, el usuario no busca navegar, sino acceder a la información de forma directa. Para realizar la búsqueda, se siguen estos pasos: el usuario introduce uno o más términos de búsqueda; el sistema busca los términos por medio de índices y otros mecanismos; el sistema responde mostrando los resultados. Para llevar a cabo este proceso se necesita, además de establecer tanto interfaces de consulta como de respuesta adecuada, establecer los mecanismos que hagan posible esta labor. La presentación de resultados puede ser muy variada: el sistema devuelve la primera ocurrencia del término, una lista de ocurrencias o puede integrar los resultados de la búsqueda en el mapa del hiperdocumento, resaltando los nodos en los que aparece el término buscado. Una herramienta muy útil es el empleo de metáforas o la utilización de conceptos y modelos del mundo real, con los cuales los usuarios estén familiarizados, para representar información digital y hacer que el documento sea más comprensible. Se trata de representaciones analógicas por medios digitales. La utilización de 54 tarjetas o fichas, o el dibujo de páginas para representar documentos, el uso de archivadores para simbolizar los directorios, papeleras y demás artículos de escritorio, el empleo de una lupa para simbolizar la búsqueda, la interrogación para la ayuda, el buzón o la carta para el correo electrónico, la casa para la página principal o de inicio, una puerta para la salida, etc. han sido y son algunas de las metáforas más utilizadas. GRÁFICO No. 5 Metáforas Fuente: http://www.hipertexto.info Elaborado Por: http://www.hipertexto.info Las técnicas para el diseño y navegabilidad de un hipertexto son muchas y variadas. Pero hay 3 reglas básicas importantes: proveer un foco inicial para la llamar la atención del usuario dirigir la atención a los ítems importantes, secundarios o periféricos asistir a la navegación a través del material presentado El principal objetivo de una interfaz de usuario es que éste se pueda comunicar a través de ella con algún tipo de dispositivo. Conseguida esta comunicación, el segundo objetivo que se debería perseguir es el de que dicha comunicación se pueda desarrollar de la forma más fácil y cómoda posible para el usuario. También es importante reconocer las interfaces de línea de comandos, como el mejor medio para que el administrador del sistema pueda llevar a cabo tareas complejas 55 Además, no todo se puede hacer a través de la interfaz gráfica: hay ciertas funciones para usuarios avanzados y administradores a las que sólo es posible realizarlas mediante comandos. El diseño de la interfaz es crítico para el manejo del equipo: hay algunas muy bien diseñadas que incorporan controles intuitivos y de fácil manejo, en cambio existen otras que no se entienden bien y el usuario no acierta a manejarlas correctamente sin estudiar un manual o recibir formación del experto. Desarrollo de Aplicaciones. Para desarrollar aplicaciones informáticas se necesita seguir los pasos de •Análisis. •Diseño. •Codificación-construcción. •Implantación-explotación. •Mantenimiento. Análisis. En esta fase se establece el producto a desarrollar, siendo necesario especificar los procesos y estructuras de datos que se van a emplear. Debe existir una gran comunicación entre el usuario y el analista para poder conocer todas las necesidades que precisa la aplicación 56 En el caso de falta de información por parte del usuario se puede recurrir al desarrollo de prototipos para saber con más precisión sus requerimientos. En el análisis estructurado se pueden emplear varias técnicas como: Diagramas de flujo de datos: Sirven para conocer el comportamiento del sistema mediante representaciones gráficas. Modelos de datos: Sirven para conocer las estructuras de datos y sus características. (Entidad relación y formas normales). Diccionario de datos: Sirven para describir todos los objetos utilizados en los gráficos, así como las estructuras de datos. Definición de los interfaces de usuario: Sirven para determinar la información de entrada y salida de datos. Al final de esta fase tenemos que tener claro las especificaciones de la aplicación. Diseño En esta fase se alcanza con mayor precisión una solución óptima de la aplicación, teniendo en cuenta los recursos físicos del sistema y los recursos lógicos. (Sistema operativo., programas de utilidad, bases de datos, etc.…) En el diseño estructurado se pueden definir estas etapas: Diseño externo: Se especifican los formatos de información de entrada y salida. (Pantalla y listados) Diseño de datos: Establece las estructuras de datos de acuerdo con su soporte físico y lógico. (Estructuras en memoria, ficheros y hojas de datos) 57 Diseño modular: Es una técnica de representación en la que se refleja de forma descendente la división de la aplicación en módulos. Está basado en diagramas de flujo de datos obtenidos en el análisis. Diseño procedimental: Establece las especificaciones para cada módulo, escribiendo el algoritmo necesario que permita posteriormente una rápida codificación. Al final de esta etapa se obtiene el denominado cuaderno de carga. Desarrollo Consiste en traducir los resultados obtenidos a un determinado lenguaje de programación, teniendo en cuenta las especificaciones obtenidas en el cuaderno de carga. Se deben de realizar las pruebas necesarias para comprobar la calidad y estabilidad del programa. Las pruebas se pueden clasificar en: Pruebas unitarias: Sirven para comprobar que cada módulo realice bien su tarea. Pruebas de interconexión: Sirven para comprobar en el programa el buen funcionamiento en conjunto de todos sus módulos. Pruebas de integración: Sirven para comprobar el funcionamiento correcto del conjunto de programas que forman la aplicación. (El funcionamiento de todo el sistema) 58 Implementación En esta fase se realiza la implantación de la aplicación en el sistema o sistemas físicos donde van a funcionar habitualmente y su puesta en marcha para comprobar el buen funcionamiento. Actividades a tener en cuenta o realizar: Instalación del/los programa/s. Pruebas de aceptación al nuevo sistema. Conversión de la información del antiguo sistema al nuevo Eliminación del sistema anterior. Al final de esta fase se debe de completar la información al usuario respecto al nuevo sistema y su uso. Así como facilitarle toda la documentación necesaria para una correcta explotación del sistema (manual técnico, manual de usuario, etc.) Mantenimiento. Esta es la fase que completa el ciclo de vida y en ella nos encargaremos de solventar los posibles errores o deficiencias de la aplicación. Existe la posibilidad de que ciertas aplicaciones necesiten reiniciar el ciclo de vida. Tipos de mantenimiento: Mantenimiento correctivo: Consiste en corregir errores no detectados en pruebas anteriores y que aparezcan con el uso normal de la aplicación. Mantenimiento adaptativo: Consiste en modificar el programa a causa de cambio de entorno gráfico y lógico en el que estén implantados. 59 Mantenimiento perfectivo: Consiste en una mejora sustancial de la aplicación al recibir por parte de los usuarios propuestas sobre nuevas posibilidades y modificaciones de las existentes. Los tipos de mantenimiento adaptativo y perfectivo reinician el ciclo de vida, debiendo proceder de nuevo al desarrollo de cada una de sus fases para obtener un nuevo producto. Java. Java es un lenguaje de programación y la primera plataforma informática creada por Sun Microsystems en 1995. Esta herramienta permite el desarrollo de aplicaciones como herramientas, juegos y aplicaciones de negocios. "Java es, en muchos sentidos, C++-" (Michael Feldman) La plataforma Java es el nombre de un entorno o plataforma de computación originaria de Sun Microsystems, capaz de ejecutar aplicaciones desarrolladas usando el lenguaje de programación Java u otros lenguajes que compilen a bytecode y un conjunto de herramientas de desarrollo. En este caso, la plataforma no es un hardware específico o un sistema operativo, sino más bien una máquina virtual encargada de la ejecución de las aplicaciones, y un conjunto de bibliotecas estándar que ofrecen una funcionalidad común 60 ByteCode El bytecode es un código intermedio más abstracto que el código máquina. Habitualmente es tratado como un fichero binario que contiene un programa ejecutable similar a un módulo objeto, este fichero intermedio contiene código de máquina. El bytecode recibe su nombre porque usualmente cada código de operación tiene una longitud de un byte, si bien la longitud del código de las instrucciones varía. Cada instrucción tiene un código de operación entre 0 y 255 seguido de parámetros tales como los registros o las direcciones de memoria. Esta sería la descripción de un caso típico, si bien la especificación del ByteCode depende ampliamente del lenguaje. Máquina Virtual Una máquina virtual es un software que emula a una computadora y puede ejecutar programas como si fuese una computadora real. Este software en un principio fue definido como "un duplicado eficiente y aislado de una máquina física". La acepción del término actualmente incluye a máquinas virtuales que no tienen ninguna equivalencia directa con ningún hardware real. Una característica esencial de las máquinas virtuales es que los procesos que ejecutan están limitados por los recursos y abstracciones proporcionados por ellas. Estos procesos no pueden escaparse de esta computadora virtual. Existen 2 tipos de máquinas virtuales. 61 Máquinas Virtuales de Sistemas. Las máquinas virtuales de sistema, también llamadas máquinas virtuales de hardware, permiten a la máquina física subyacente multiplicarse entre varias máquinas virtuales, cada una ejecutando su propio sistema operativo. A la capa de software que permite la virtualización se la llama monitor de máquina virtual .Un monitor de máquina virtual puede ejecutarse o bien directamente sobre el hardware o bien sobre un sistema operativo. Máquina Virtual de Proceso. Una máquina virtual de proceso, se ejecuta como un proceso normal dentro de un sistema operativo y soporta un solo proceso. La máquina se inicia automáticamente cuando se lanza el proceso que se desea ejecutar y se detiene para cuando éste finaliza. Su objetivo es el de proporcionar un entorno de ejecución independiente de la plataforma de hardware y del sistema operativo, que oculte los detalles de la plataforma subyacente y permita que un programa se ejecute siempre de la misma forma sobre cualquier plataforma. El ejemplo más conocido actualmente de este tipo de máquina virtual es la máquina virtual de Java. Otra máquina virtual muy conocida es la del entorno .Net de Microsoft que se llama "Common Language Runtime". 62 Máquina Virtual Java Una Máquina virtual Java (en inglés Java Virtual Machine, JVM) es un máquina virtual de proceso nativo, es decir, ejecutable en una plataforma específica, capaz de interpretar y ejecutar instrucciones expresadas en un código binario especial (el bytecode Java), el cual es generado por el compilador del lenguaje Java. El código binario de Java no es un lenguaje de alto nivel, sino un verdadero código máquina de bajo nivel, viable incluso como lenguaje de entrada para un microprocesador físico. Como todas las piezas del rompecabezas Java, fue desarrollado originalmente por Sun Microsystems. La JVM es una de las piezas fundamentales de la plataforma Java. Básicamente se sitúa en un nivel superior al Hardware del sistema sobre el que se pretende ejecutar la aplicación, y este actúa como un puente que entiende tanto el ByteCode, como el sistema sobre el que se pretende ejecutar. Así, cuando se escribe una aplicación Java, se hace pensando que será ejecutada en una máquina virtual Java en concreto, siendo ésta la que en última instancia convierte de código ByteCode a código nativo del dispositivo final. La gran ventaja de la máquina virtual java es aportar portabilidad al lenguaje de manera que desde Sun Microsystems se han creado diferentes máquinas virtuales java para diferentes arquitecturas y así un programa .class escrito en un Windows puede ser interpretado en un entorno Linux. Tan solo es necesario disponer de 63 dicha máquina virtual para dichos entornos. De ahí el famoso axioma que sigue a Java, "escríbelo una vez, ejecútalo en cualquier parte". Pero, los intentos de la compañía propietaria de Java y productos derivados de construir microprocesadores que aceptaran el Java ByteCode como su lenguaje de máquina fueron más bien infructuosos. La máquina virtual de Java puede estar implementada en software, hardware, una herramienta de desarrollo o un Web browser; lee y ejecuta código pre compilado ByteCode que es independiente de la plataforma multiplataforma. La JVM provee definiciones para un conjunto de instrucciones, un conjunto de registros, un formato para archivos de clases, la pila, un heap con recolector de basura y un área de memoria. Cualquier implementación de la JVM que sea aprobada por SUN debe ser capaz de ejecutar cualquier clase que cumpla con la especificación. JRE En su forma más simple, el entorno en tiempo de ejecución de Java está conformado por una Máquina Virtual de Java o JVM, un conjunto de bibliotecas Java y otros componentes necesarios para que una aplicación escrita en lenguaje Java pueda ser ejecutada. El JRE actúa como un "intermediario" entre el sistema operativo y Java. La JVM es el programa que ejecuta el código Java previamente compilado (ByteCode) mientras que las librerías de clases estándar son las que implementan 64 el API de Java. Ambas JVM y API deben ser consistentes entre sí, de ahí que sean distribuidas de modo conjunto. Un usuario sólo necesita el JRE para ejecutar las aplicaciones desarrolladas en lenguaje Java, mientras que para desarrollar nuevas aplicaciones en dicho lenguaje es necesario un entorno de desarrollo, denominado JDK, que además del JRE (mínimo imprescindible) incluye, entre otros, un compilador para Java. La plataforma es así llamada la plataforma Java (antes conocida como Plataforma Java 2, e incluye: Plataforma Java, Edición Estándar (Java Platform, Standard Edition), o Java SE (antes J2SE) Plataforma Java, Edición Empresa (Java Platform, Enterprise Edition), o Java EE (antes J2EE) Plataforma Java, Edición Micro (Java Platform, Micro Edition), o Java ME (antes J2ME) J2SE. Java Platform, Standard Edition o Java SE (conocido anteriormente hasta la versión 5.0 como Plataforma Java 2, Standard Edition o J2SE), es una colección de APIs del lenguaje de programación Java útiles para muchos programas de la Plataforma Java. La Plataforma Java 2, Enterprise Edition incluye todas las clases en el Java SE, además de algunas de las cuales son útiles para programas que se ejecutan en servidores sobre Workstation. 65 J2EE. Java Platform, Enterprise Edition o Java EE (anteriormente conocido como Java 2 Platform, Enterprise Edition o J2EE hasta la versión 1.4), es una plataforma de programación parte de la Plataforma Java para desarrollar y ejecutar software de aplicaciones en el lenguaje de programación Java con arquitectura de N capas distribuidas y que se apoya ampliamente en componentes de software modulares ejecutándose sobre un servidor de aplicaciones. La plataforma Java EE está definida por una especificación. Similar a otras especificaciones del Java Community Process, Java EE es también considerada informalmente como un estándar debido a que los proveedores deben cumplir ciertos requisitos de conformidad para declarar que sus productos son conformes a Java EE; estandarizado por The Java Community Process / JCP. Java EE incluye varias especificaciones de API, tales como JDBC, RMI, e-mail, JMS, Servicios Web, XML, etc. y define cómo coordinarlos. Java EE también configura algunas especificaciones únicas para Java EE para componentes. Estas incluyen Enterprise JavaBeans, servlets, portlets (siguiendo la especificación de Portlets Java), JavaServer Pagés y varias tecnologías de servicios web. Ello permite al desarrollador crear una Aplicación de Empresa portable entre plataformas y escalable, a la vez que integrable con tecnologías anteriores. Otros beneficios añadidos son, por ejemplo, que el servidor de aplicaciones puede manejar transacciones, la seguridad, escalabilidad, concurrencia y gestión de los componentes desplegados, significando que los desarrolladores pueden 66 concentrarse más en la lógica de negocio de los componentes en lugar de en tareas de mantenimiento de bajo nivel. J2ME. La plataforma Java Micro Edition, o anteriormente Java 2 Micro Edition (J2ME), es una especificación de un subconjunto de la plataforma Java orientada a proveer una colección certificada de APIs de desarrollo de software para dispositivos con recursos restringidos. Está orientado a productos de consumo como PDAs, teléfonos móviles o electrodomésticos. Java ME se ha convertido en una buena opción para crear juegos en teléfonos móviles debido a que se puede emular en un PC durante la fase de desarrollo y luego subirlos fácilmente al teléfono. Al utilizar tecnologías Java el desarrollo de aplicaciones o videojuegos con estas APIs resulta bastante económico de portar a otros dispositivos. Java ME fue desarrollado mediante el Java Community Process bajo la especificación JSR 68. La evolución de la plataforma ha propiciado el abandono de las Java Especificación Raques (peticiones de especificación para Java) en favor de JSRs separadas para las distintas versiones de Java ME. 67 API-Interfaces de Programación de aplicaciones Es el conjunto de funciones y procedimientos o métodos, en la programación orientada a objetos que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. Son usadas generalmente en las bibliotecas (también denominadas comúnmente "librerías"). JDBC. Java Data Base Connectivity, más conocida por sus siglas JDBC, es una API que permite la ejecución de operaciones sobre bases de datos desde el lenguaje de programación Java, independientemente del sistema operativo donde se ejecute o de la base de datos a la cual se accede, utilizando el dialecto SQL del modelo de base de datos que se utilice. El Api Jdbc se presenta como una colección de interfaces Java y métodos de gestión de manejadores de conexión hacia cada modelo específico de base de datos. Un manejador de conexiones hacia un modelo de base de datos en particular es un conjunto de clases que implementan las interfaces Java y que utilizan los métodos de registro para declarar los tipos de localizadores a base de datos (URL) que pueden manejar. Para utilizar una base de datos particular, el usuario ejecuta su programa junto con la biblioteca de conexión apropiada al modelo de su base de datos, y accede a ella estableciendo una conexión, para ello provee el localizador a la base de datos y los parámetros de conexión específicos. A partir de allí puede realizar con cualquier tipo de tareas con la base de datos a 68 las que tenga permiso: consulta, actualización, creación, modificación y borrado de tablas, ejecución de procedimientos almacenados en la base de datos, etc. RMI. RMI (Java Remote Method Invocation) es un mecanismo ofrecido por Java para invocar un método de manera remota. Forma parte del entorno estándar de ejecución de Java y proporciona un mecanismo simple para la comunicación de servidores en aplicaciones distribuidas basadas exclusivamente en Java. Si se requiere comunicación entre otras tecnologías debe utilizarse CORBA o SOAP en lugar de RMI. RMI se caracteriza por la facilidad de su uso en la programación por estar específicamente diseñado para Java; proporciona paso de objetos por referencia (no permitido por SOAP), recolección de basura distribuida (Garbage Collector distribuido) y paso de tipos arbitrarios (funcionalidad no provista por CORBA). A través de RMI, un programa Java puede exportar un objeto, con lo que dicho objeto estará accesible a través de la red y el programa permanece a la espera de peticiones en un puerto TCP. A partir de ese momento, un cliente puede conectarse e invocar los métodos proporcionados por el objeto. La invocación se compone de los siguientes pasos: Encapsulado (marshalling) de los parámetros (utilizando la funcionalidad de socialización de Java). 69 Invocación del método (del cliente sobre el servidor). El invocador se queda esperando una respuesta. Al terminar la ejecución, el servidor serializa el valor de retorno (si lo hay) y lo envía al cliente. El código cliente recibe la respuesta y continúa como si la invocación hubiera sido local. JMS La API Java Message Service, también conocida por sus siglas JMS, es la solución creada por Sun Microsystems para el uso de colas de mensajes. Este es un estándar de mensajería que permite a los componentes de aplicaciones basados en la plataforma Java2 crear, enviar, recibir y leer mensajes. También hace posible la comunicación confiable de manera síncrona y asíncrona. El servicio de mensajería instantánea también es conocido como Middleware Orientado a Mensajes (MOM por sus siglas en inglés) y es una herramienta universalmente reconocida para la construcción de aplicaciones empresariales. Dicha API es parte integral de la versión 2 de Java. Existen dos modelos de la API JMS, los cuales son: Modelo Punto a Punto: Este modelo cuenta con solo dos clientes, uno que envía el mensaje y otro que lo recibe. Este modelo asegura la llegada del mensaje ya que si el receptor no está disponible para aceptar el mensaje o atenderlo, de cualquier 70 forma se le envía el mensaje y este se encola en una pila del tipo FIFO para luego ser recibido según haya entrado. Modelo Publicador/Suscriptor: Este modelo cuenta con varios clientes, unos que publican temas o eventos, y los que ven estos tópicos, a diferencia del modelo punto a punto este modelo tiende a tener más de un consumidor. Ambos modelos pueden ser síncronos mediante el método receiver y asíncronos por medio de un MessageListener. Las versiones de java que han salido son las siguientes. JDK1.0 en 1996 JDK 1.1 en 1997 J2SE 1.2en 1998 2SE 1.3 en 2000 J2SE 1.4 en 2002 J2SE en 2004 Java SE 6 en 2006 La característica de java viene dado por tres elementos claves que diferencian a este lenguaje. Es un lenguaje de programación que ofrece la potencia del diseño orientado a objetos con una sintaxis fácilmente accesible y un entorno robusto y agradable. Proporciona un conjunto de clases potente y flexible. 71 Pone al alcance de cualquiera la utilización de aplicaciones que se pueden incluir directamente en páginas Web Java es orientado a Objetos. En este aspecto Java fue diseñado partiendo de cero, no siendo derivado de otro lenguaje anterior y no tiene compatibilidad con ninguno de ellos. En Java el concepto de objeto resulta sencillo y fácil de ampliar. Además se conservan elementos como números, caracteres y otros tipos de datos simples. Java Contiene Riqueza Semántica. Pese a su simpleza se ha conseguido un considerable potencial, y aunque cada tarea se puede realizar de un número reducido de formas, se ha conseguido un gran potencial de expresión e innovación desde el punto de vista del programador Java es robusto. Java verifica su código al mismo tiempo que lo escribe, y una vez más antes de ejecutarse, de manera que se consigue un alto margen de codificación sin errores. Se realiza un descubrimiento de la mayor parte de los errores durante el tiempo de compilación, ya que Java es estricto en cuanto a tipos y declaraciones, y así lo que es rigidez y falta de flexibilidad se convierte en eficacia. Respecto a la gestión de memoria, Java libera al programador del compromiso de tener que controlar especialmente la asignación que de ésta hace a sus necesidades específicas. 72 Java Contiene un Modelado de Objetos. Existen varias clases que contienen las abstracciones básicas para facilitar a los programas. Para ello se contará con un conjunto de clases comunes que pueden crecer para admitir todas las necesidades del programador. Además la biblioteca de clases de Java proporciona un conjunto de protocolos. El conjunto de clases más complicado de Java son sus paquetes gráficos AWT (Abstract Window Toolkit) y Swing. Estos paquetes implementan componentes de una interfaz de usuario gráfica básica común a todos los ordenadores personales modernos. Java es de fácil Aprendizaje. El único requerimiento para aprender Java es tener conocimiento de los conceptos básicos de la programación orientada a objetos, con el conocimiento de esta teoría y los conceptos inmersos en ellos así como herencia, polimorfismo, métodos sobrecargados. Java es completado con utilidades. El paquete de Java viene con un conjunto completo de estructuras de datos complejas y sus métodos asociados, que serán de inestimable ayuda para implementar aplicaciones más complejas. Se dispone también de estructuras de datos habituales, como pilas y tablas hash, como clases ya implementadas. El JDK (Java Development Kit) suministrado por Sun Microsystems incluye un 73 compilador, un intérprete de aplicaciones, un depurador en línea de comandos, y un visualizador de applets entre otros elementos. Java es interactivo y Animado. Uno de los requisitos de Java desde sus inicios fue la posibilidad de crear programas en red interactivos, por lo que es capaz de hacer varias cosas a la vez sin perder rastro de lo que debería suceder y cuándo. Las aplicaciones de Java permiten situar figuras animadas en las páginas Web, y éstas pueden concebirse con logotipos animados o con texto que se desplace por la pantalla. También pueden tratarse gráficos generados por algún proceso. Estas animaciones pueden ser interactivas, permitiendo al usuario un control sobre su apariencia. Java Contiene Arquitectura Neutral Java está diseñado para que un programa escrito en este lenguaje sea ejecutado correctamente independientemente de la plataforma en la que se esté actuando, solo se necesita que la maquina donde se va a ejecutar la tenga el runtime o JRE como más se lo conoce, por ello se puede ejecutar en cualquier sistema operativo. Java Permite Trabajos en Red. Java anima las páginas Web y hace posible la incorporación de aplicaciones interactivas y especializadas. Aporta la posibilidad de distribuir contenidos ejecutables, de manera que los suministradores de información de la Web pueden crear una página de hipertexto (página Web) con una interacción continuada y 74 compleja en tiempo real; el contenido ejecutable es transferido literalmente al ordenador del usuario. Java proporciona un conjunto de clases para tratar con conectores de red conocidos como originales de la versión UNIX de Berckley, encapsular la noción de una dirección de Internet o conectar sockets con flujos de datos de Entrada/Salida. Java Ofrece más Seguridad. Existe una preocupación lógica en Internet por el tema de la seguridad: virus, caballos de Troya, y programas similares navegan de forma usual por la red, constituyendo una amenaza palpable. Java ha sido diseñado poniendo un énfasis especial en el tema de la seguridad, por lo que el control sobre los programas ejecutables no es equiparable a otros lenguajes. Los niveles de seguridad que presenta son: Fuertes restricciones al acceso a memoria, como son la eliminación de punteros aritméticos y de operadores ilegales de transmisión. Rutina de verificación de los códigos de byte que asegura que no se viole ninguna construcción del lenguaje. Verificación del nombre de clase y de restricciones de acceso durante la carga. 75 Sistema de seguridad de la interfaz que refuerza las medidas de seguridad en muchos niveles. Java Esta Basado el Lenguaje C++. Java fue desarrollado basándose en C++. Básicamente, encontramos las siguientes diferencias con C++: Java no soporta los tipos struct, union ni punteros. No soporta typedef ni #define. Se distingue por su forma de manejar ciertos operadores y no permite una sobrecarga de operadores. No soporta herencia múltiple. Java maneja argumentos en la línea de comandos de forma diversa a como lo hacen C o C++. Tiene una clase String que es parte del paquete java.lang y se diferencia de la matriz de caracteres terminada con un nulo que usan C y C++. Java cuenta con un sistema automático para asignar y liberar memoria, con lo que no es necesario utilizar las funciones previstas con este fin en C y C++. Java Es Multitareas. Java permite ejecutar procesos en paralelo aplicando hilos (Threads), esta ejecución en paralelo disminuye el tiempo de respuesta en procesos extensos. 76 Java es Portable. Un programa Java puede ser ejecutado en diferentes entornos. Para desarrollar una aplicación java se consideran los siguientes conceptos: Interfaces. Una interfaz en Java es una colección de métodos abstractos y propiedades. En ellas se especifica qué se debe hacer pero no su implementación. Serán las clases que implementen estas interfaces las que describan la lógica del comportamiento de los métodos. Clases. Una clase define la forma y comportamiento de un objeto, se utiliza como un modelo de plantillas de conceptos comunes, en una clases de definen los atributos y los métodos, el modelo de una clase describe el estado y contiene y define el comportamiento de los objetos. Por lo usual una clase se define a los sustantivos así como por ejemplo una persona, animal o cosa. Métodos. Los métodos son las acciones funciones o procedimientos que realiza nuestro programa; Los métodos son subrutinas que manipulan los datos definidos por una clase. Características de los métodos: Contiene una o más declaraciones 77 Cada método tiene un nombre y este nombre se utiliza para llamar al método (las palabras clave no pueden ser utilizadas como el nombre del método). Debe llevar paréntesis después del nombre. El método main () está reservado por java como el método que inicializa la ejecución del programa. Atributos. Son características de una clase que están dadas por las variables y/o constantes de la misma. Los diferentes tipos de aplicaciones que se pueden desarrollar con java son: Aplicaciones: Se ejecutan sin necesidad de un navegador. GRÁFICO No.6 Aplicaciones. Fuente:http://escribojava.blogspot.com/2011/01/como-enviar-correos-emails-desde-java.html Elaborado: http://://escribojava.blogspot.com/2011/01/como-enviar-correos-emails-desde-java.html 78 Applets Se pueden descargar de Internet y se observan en un navegador. Usando la máquina virtual de java, o utilizando una herramienta propia de SUN que es la AppletViewer. Las diferentes ventajas que ofrece un applet es la seguridad para el acceso a la información, así como no se permite la descarga del código fuente inmersa en el applet. GRÁFICO No. 7 Applets Fuente: http://www.google.com.ec/imgres?imgurl=http://www.escolessas.com/cesf/images/quefanalumnes/cda2a_g.jpg&imgrefurl=http://ww w.escolessas.com/cesf/index.php%3Foption%3Dcom_content%26task%3Dview%26id%3D51%26Itemid%3D66%26lang%3Dspani sh&usg=__yU_tAj4q5iLbPv8mn4RvGA6Lg6k=&h=543&w=544&sz=71&hl=es&start=3&zoom=1&tbnid=N6A5AASg_Pf39M:&tbn h=133&tbnw=133&ei=InbjTpH2O4SbtwesnuidBQ&prev=/search%3Fq%3Daplicaciones%2Bapplet%2Bjava%26um%3D1%26hl %3Des%26sa%3DN%26biw%3D1280%26bih%3D697%26tbm%3Disch&um=1&itbs=1 JavaBeans Componentes software Java, que se puedan incorporar gráficamente a otros componentes, se utilizan para encapsular varios objetos en un solo objeto en 79 lugar de varios objetos simples, la definición correcta de java beans es componentes de software reutilizables que se puedan manipular visualmente en una herramienta de construcción. El comportamiento de los java beans se definen las interfaces, clases bases y heredadas. GRÁFICO No. 8 JavaBeans Grafico No.8 JavaBeans Fuente : http://www.google.com.ec/imgres?imgurl=http://3.bp.blogspot.com/_jbOU0tiejJQ/TKJVNOphTxI/AAAAAAAAABw/zQ87z7Hxs8/s1600/tiposContenedores.jpg&imgrefurl=http://ricardo84-javabasico.blogspot.com/2010/09/tipos-de-contenedores-javaee.html&usg=__5JXrYmNTT7tqBz_XSEpSAtW3dsU=&h=500&w=800&sz=100&hl=es&start=1&zoom=1&tbnid=nk5c9RHPIlTwIM:&tbnh=89&tbnw=1 43&ei=W3njTr_nA8WtwflhZDEBA&prev=/search%3Fq%3Daplicaciones%2BBeans%2Bjava%26um%3D1%26hl%3Des%26sa%3DN%26biw%3D1280%26bih%3D697%2 6tbm%3Disch&um=1&itbs= Elaborado Por: http://www.google.com.ec/imgres?imgurl=http://3.bp.blogspot.com Java Script Conjunto del lenguaje Java que puede codificarse directamente sobre cualquier documento HTML, este código se ejecuta principalmente en el lado de los clientes, haciendo que las paginas desarrolladas sean más dinámicas, JavaScript es 80 un lenguaje fundamental utilizado para el desarrollo de aplicaciones web, junto con css conforman las partes fundamentales en el desarrollo de una página web. GRÁFICO No.9 JavaScript Fuente: Héctor William Pilligua Robalino Elaborado Por: Héctor William Pilligua Robalino. Servlet Son módulos que permiten sustituir o utilizar el lenguaje Java en lugar de programas a la hora de dotar de interactividad a las páginas Web, un servlet funciona de la misma manera que funciona un aplicativo, con limitaciones, como por ejemplo no se pueden procesar archivos planos o imágenes, mas es útil para procesamiento de datos, uso de formularios y otras funciones básicas de las aplicaciones java. GRÁFICO 10 81 Servlets Grafico No 10. Servlets. Fuente : http://www.google.com.ec/imgres?imgurl=http://www.xtrawebsolutions.com/wp-content/uploads/2011/05/javaservlet.jpg&imgrefurl=http://www.xtrawebsolutions.com/2011/05/30/javaservlet/&usg=__HuQz1bLnI_YyyG5_4X6jJSwF3Bk=&h=260&w=540&sz=18&hl=es&start=1&zoom=1&tbnid=hnmBivTUesqI7M:&tbnh=64&tbnw=132 &ei=ZHrjTpaOAZHMtgeluMziDg&prev=/search%3Fq%3DSERVLET%2Bjava%26um%3D1%26hl%3Des%26sa%3DN%26biw%3D1280%26bih%3D 697%26tbm%3Disch&um=1&itbs=1 Elaborado Por: http://www.google.com.ec/imgres PLATAFORMA .NET La ´plataforma de desarrollo de .NET Framework supone el cambio más importante en la tecnología en la metodología de desarrollo de software para un sistema operativo de Microsoft, este entorno está construido usando una arquitectura que permite a los lenguajes de software trabajar juntos compartiendo códigos y recursos, proporcionando a los programadores herramientas avanzadas necesarias para construir la siguiente generación de aplicaciones de escritorio y de internet, Entre los diferentes lenguajes de programación que se encuentra en CSharp, visual Basic, java#, c++, cristal report. En los lenguajes contenidos dentro de los framework de .net se utiliza en mayor instancia la programación orientada a objetos. 82 Microsoft desarrollo CSharp desde su base para aprovechar el nuevo entorno de .net. El framework de Microsoft se compone de 4 partes, el entorno común de ejecución, conjunto de bibliotecas de clases, grupos de lenguajes de programación y el entorno ASP.NET, esto fue diseñado con 3 objetivos en mente. Deberá desarrollar aplicaciones Windows más estables, proporcionando mayor seguridad. Deberá simplificar el desarrollo de aplicaciones y servicios web, funcional en entorno de escritorio como entorno móvil. Proporcionar un solo grupo de bibliotecas que puedan trabajar con varios lenguajes BIBLIOTECAS DE CLASES .NET Muchos lenguajes han tenido acceso a cuerpo de código previamente comprobado y listo para ser ejecutado, visual C++ se ha beneficiado de las bibliotecas de clases, como las Clases de Fundación Microsoft( MFC), que permite a los programadores desarrollar aplicaciones de escritorio de una manera rápida, que proporciona facilidad para crear objetos COM COM COM son protocolos que permiten la colaboración entre objetos desarrollados con diferentes lenguajes y herramientas, y que pueden residir en diferentes procesos o incluso máquinas. Los componentes COM existentes son recursos muy valiosos en código administrado como aplicaciones empresariales de nivel medio o 83 funcionalidad aislada. Un componente ideal tiene un ensamblado de interoperabilidad primario y cumple rigurosamente los estándares de programación que impone COM. Common Language Runtime (CLR) El CLR es el núcleo de la plataforma .NET, es el entorno encargado de gestionar la ejecución de las aplicaciones desarrolladas en la misma y ofrece numerosos servicios que simplifican su desarrollo, favoreciendo su fiabilidad y seguridad. El El CLR es el encargado de compilar un código intermedio llamado Common Intermédiate Language (CIL) o conocida anteriormente como MSLI al código de maquina nativo, mediante un compilador en tiempo de ejecución, una vez que el código se encuentra compilado, se ejecuta nativamente sin intervención de una capa de abstracción sobre el hardware. Las principales características y servicios que ofrece el CLR son: • Modelo de programación consistente: A todos los servicios y facilidades ofrecidas por el CLR se accede de la misma forma, a través de un modelo de programación orientado a objetos. Esto es una diferencia importante respecto al modo de acceso a los servicios ofrecidos por algunos sistemas operativos actuales. • Modelo de programación sencillo: Con el CLR desaparecen muchos elementos complejos incluidos en los sistemas operativos actuales (registro de Windows, 84 GUIDs, HRESULTS, etc.). El CLR no es que abstraiga al programador de estos conceptos, sino que son conceptos que no existen en la plataforma .NET. • Eliminación del “infierno de las DLLs”: En la plataforma .NET desaparece el problema conocido como “infierno de las DLLs” que se da en los sistemas operativos actuales de la familia Windows, problema que consiste en que al sustituirse versiones viejas de DLLs compartidas por versiones nuevas puede que aplicaciones que fueron diseñadas para ser ejecutadas usando las viejas dejen de funcionar si las nuevas no son 100% compatibles con las anteriores. En la plataforma .NET las versiones nuevas de las DLLs pueden coexistir con las viejas, de modo que las aplicaciones diseñadas para ejecutarse usando las viejas podrán seguir usándolas tras la instalación de las nuevas. Esto, obviamente, simplifica mucho la instalación y desinstalación de software. • Ejecución multiplataforma: El CLR actúa como una máquina virtual, encargándose de ejecutar las aplicaciones diseñadas para la plataforma .NET. Es decir, cualquier plataforma para la que exista una versión del CLR podrá ejecutar cualquier aplicación .NET. “Creo que Microsoft nombró. Net para que no se muestran en una lista de directorios Unix” (Oktal) 85 Microsoft ha desarrollado versiones del CLR para la mayoría de las versiones de Windows: Windows 95, Windows 98, Windows ME, Windows NT 4.0, Windows 2000, Windows XP y Windows CE (que puede ser usado en CPUs que no sean de la familia x86). Por otro lado Microsoft ha firmado un acuerdo con Corel para portar el CLR a Linux y también hay terceros que están desarrollando de manera independiente versiones de libre distribución del CLR para Linux. Asimismo, dado que la arquitectura del CLR está totalmente abierta, es posible que en el futuro se diseñen versiones del mismo para otros sistemas operativos. • Integración de lenguajes: Desde cualquier lenguaje para el que exista un compilador que genere código para la plataforma .NET es posible utilizar código generado para la misma usando cualquier otro lenguaje. Microsoft ha desarrollado un compilador de C# que genera código de este tipo, así como versiones de sus compiladores de Visual Basic (Visual Basic.NET) y C++ (C++ con extensiones gestionadas) que también lo generan, y una versión del intérprete de JScript (JScript.NET) que puede interpretarlo. La integración de lenguajes consiste en escribir una clase en C#, que herede de otra escrita en Visual Basic.NET, que a su vez, herede de otra escrita en C++ con extensiones gestionadas. 86 • Gestión de memoria: El CLR incluye un recolector de basura que evita que el programador tenga que tener en cuenta cuándo ha de destruir los objetos que dejen de serle útiles. Este recolector es una aplicación que se activa cuando se quiere crear algún objeto nuevo y se detecta que no queda memoria libre para hacerlo, caso en que el recolector recorre la memoria dinámica asociada a la aplicación, detecta qué objetos hay en ella que no puedan ser accedidos por el código de la aplicación, y los elimina para limpiar la memoria de “objetos basura” y permitir la creación de otros nuevos. Seguridad de tipos: El CLR facilita la detección de errores de programación difíciles de localizar comprobando que toda conversión de tipos que se realice durante la ejecución de una aplicación .NET se haga de modo que los tipos origen y destino sean compatibles. • Aislamiento de procesos: El CLR asegura que desde el código perteneciente a un determinado proceso no se pueda acceder a código o datos pertenecientes a otro, lo que evita errores de programación muy frecuentes e impide que unos procesos puedan atacar a otros. • Tratamiento de excepciones: En el CLR todos los errores que se puedan producir durante la ejecución de una aplicación se propagan de igual manera mediante excepciones. Esto es muy diferente a como se venía haciendo en los sistemas Windows hasta la aparición de la plataforma .NET, donde ciertos errores 87 se transmitían mediante códigos de error en formato Win32, otros mediante HRESULTs y otros mediante excepciones. El CLR permite que excepciones lanzadas desde código para .NET escrito en un cierto lenguaje se puedan capturar en código escrito usando otro lenguaje, e incluye mecanismos de depuración que pueden saltar desde código escrito para .NET en un determinado lenguaje a código escrito en cualquier otro. Por ejemplo, se puede recorrer la pila de llamadas de una excepción aunque ésta incluya métodos definidos en otros módulos usando otros lenguajes. • Soporte multihilo: El CLR es capaz de trabajar con aplicaciones divididas en múltiples hilos de ejecución que pueden ir evolucionando por separado, en paralelo o intercalándose, según el número de procesadores de la máquina sobre la que se ejecuten. Las aplicaciones pueden lanzar nuevos hilos, destruirlos, suspenderlos por un tiempo o hasta que les llegue una notificación, enviarles notificaciones, sincronizarlos, etc. • Distribución transparente: El CLR ofrece la infraestructura necesaria para crear objetos remotos y acceder a ellos de manera completamente transparente a su localización real, tal y como si se encontrasen en la máquina que los utiliza. • Seguridad avanzada: El CLR proporciona mecanismos para restringir la ejecución de ciertos códigos o los permisos asignados a los mismos según su 88 procedencia o el usuario que los ejecute. Es decir, puede no darse el mismo nivel de confianza a código procedente de internet que a código instalado localmente o procedente de una red local; puede no darse los mismos permisos a código procedente de un determinado fabricante que a código de otro; y puede no darse los mismos permisos a un mismo código según el usuario que lo esté ejecutando o según el rol que éste desempeñe. Esto permite asegurar al administrador de un sistema que el código que se esté ejecutando no pueda poner en peligro la integridad de sus archivos, la del registro de Windows, etc. • Interoperabilidad con código antiguo: El CLR incorpora los mecanismos necesarios para poder acceder desde código escrito para la plataforma .NET a código escrito previamente a la aparición de la misma y, por tanto, no preparado para ser ejecutado dentro de ella. Estos mecanismos permiten tanto el acceso a objetos COM como el acceso a funciones sueltas de DLLs preexistentes. Microsoft Intermediate Language (MSIL) Todos los compiladores que generan código para la plataforma .NET no generan código máquina para algún tipo de CPU concreta, sino que generan código escrito en el lenguaje intermedio conocido como Microsoft Intermediate Lenguage (MSIL). El CLR da a las aplicaciones la sensación de que se están ejecutando sobre una máquina virtual, y precisamente MSIL es el código máquina de esa máquina 89 virtual. Es decir, MSIL es el único código que es capaz de interpretar el CLR, y por tanto cuando se dice que un compilador genera código para la plataforma .NET lo que se está diciendo es que genera MSIL. MSIL ha sido creado por Microsoft tras consultar a numerosos especialistas en la escritura de compiladores y lenguajes tanto del mundo académico como empresarial. Es un lenguaje de un nivel de abstracción mucho más alto que el de la mayoría de los códigos máquina de las CPUs existentes, e incluye instrucciones que permiten trabajar directamente con objetos (crearlos, destruirlos, inicializarlos, llamar a métodos virtuales, etc.), tablas y excepciones (lanzarlas, capturarlas y tratarlas). La principal ventaja del MSIL es que facilita la ejecución multiplataforma y la integración entre lenguajes al ser independientes de la CPU y proporcionar un formato común para el código máquina generado por todos los compiladores que generen código para .NET. A partir de los fundamentos anteriores se enuncian las principales ventas y desventajas que ofrece la plataforma .NET. Ventajas Movilidad.- Las aplicaciones pueden ser ejecutadas en diferentes tipos de dispositivos. 90 Basado en objetos. Ofrece un modelo de desarrollo basado en objetos que utilizan un sistema común de datos y estos pueden ser reutilizados solo llamando al objeto en donde se necesite. Herencia de clases.- Las clases incluidas en el framework pueden ser utilizadas independientemente del lenguaje que se utilice, esto gracias al mecanismo de herencia propio de la programación orientada a objetos. Interoperabilidad Multilenguaje: .NET soporta aplicaciones con componentes en múltiples lenguajes lo que permite integrar desarrolladores de distintos perfiles. Rendimiento: Todos los códigos que se ejecutan en el ambiente .NET son compilados, lo cual proporciona un gran rendimiento a diferencia de versiones interpretadas. Escalabilidad y flexibilidad: Escalabilidad es la capacidad de un sistema para soportar más carga de trabajo, usualmente debida al aumento de usuarios que lo utilizan. .NET ofrece métodos de escalabilidad como la carga balanceada que permite a un clúster de servidores (varios servidores) colaborar y dar un servicio de forma simultánea. Seguridad: .NET da respaldo para ejecutar código no seguro. Estándar abierto: La plataforma .NET está basada en estándares (HTML, XML, SOAP, WSDL, UDDI) Desventajas No es multiplataforma, solo está disponible para Windows. 91 Alto costo para empresas, punto net no cuenta con licenciamiento libre, por lo tanto, el desarrollar en esta plataforma se genera un alto costo. Portabilidad, ofrece una portabilidad muy reducida ya que solo se puede ejecutar en sistemas Windows. En la plataforma .NET son utilizados distintos tipos de lenguaje de programación. Considerando su actualidad se caracteriza a continuación el lenguaje de programación C#. Lenguaje de Programación C# Marco Antonio Besteiro (2002) en su libro “Microsoft Visual C# .NET. Referencia del lenguaje”, C# (pronunciado si Sharp en inglés), su nombre fue inspirado por la notación musical, donde '#' (sostenido, en inglés Sharp) indica que la nota (C es la nota do en inglés) es un semitono más alta, sugiriendo que C# es superior a C/C++. Además, el signo '#' se compone de cuatro signos '+' pegados. Es un lenguaje de programación orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET. C# es uno de los lenguajes de programación diseñados para la infraestructura de lenguaje común. Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de Java, aunque incluye mejoras derivadas de otros lenguajes. 92 Aunque es posible escribir código para la plataforma .NET en muchos otros lenguajes, C# es el único que ha sido diseñado específicamente para ser utilizado en ella, por lo que programarla usando C# es mucho más sencillo e intuitivo que hacerlo con cualquiera de los otros lenguajes ya que C# carece de elementos heredados innecesarios en .NET. Por esta razón, se suele decir que C# es el lenguaje nativo de .NET. La sintaxis y estructuración de C# es muy similar a la C++, ya que la intención de Microsoft con C# es facilitar la migración de códigos escritos en estos lenguajes a C# y facilitar su aprendizaje a los desarrolladores habituados a ellos. Sin embargo, su sencillez y el alto nivel de productividad son equiparables a los de Visual Basic. Un lenguaje que hubiese sido ideal utilizar para estos menesteres es Java, pero debido a problemas con la empresa creadora del mismo (Sun)-, Microsoft ha tenido que desarrollar un nuevo lenguaje que añadiese a las ya probadas virtudes de Java las modificaciones que Microsoft tenía pensado añadirle para mejorarlo aún más y hacerlo un lenguaje orientado al desarrollo de componentes. Las ventajas y desventajas de esta tecnología se enuncian a continuación: Ventajas: Tipos de datos: En C# existe un rango más amplio y definido de tipos de datos que los que se encuentran en C, C++ o Java. 93 Atributos: Cada miembro de una clase tiene un atributo de acceso del tipo público, protegido, interno, interno protegido y privado. Pase de parámetros: Aquí se puede declarar a los métodos para que acepten un número variable de parámetros. De forma predeterminada, el pase de parámetros es por valor, a menos que se use la palabra reservada ref, la cual indica que el pase es por referencia. Métodos virtuales y redefiniciones: Antes de que un método pueda ser redefinido en una clase base, debe declararse como virtual. El método redefinido en la subclase debe ser declarado con la palabra override. Propiedades: Un objeto tiene propiedades, y debido a que las clases en C# pueden ser utilizadas como objetos, C# permite la declaración de propiedades dentro de cualquier clase. Inicializador: Un inicializador es como una propiedad, con la diferencia de que en lugar de un nombre de propiedad, un valor de índice entre corchetes se utiliza en forma anónima para hacer referencia al miembro de una clase. Control de versiones: C# permite mantener múltiples versiones de clases en forma binaria, colocándolas en diferentes espacios de nombres. Esto permite que versiones nuevas y anteriores de software puedan ejecutarse en forma simultánea. Desventajas: Conseguir una versión reciente de Visual Studio .NET, por otra parte se tiene que tener algunos requerimientos mínimos del sistema para poder trabajar 94 adecuadamente tales como contar con Windows NT 4 o superior, tener alrededor de 4 gigas de espacio libre para la pura instalación. Además para quien no está familiarizado con ningún lenguaje de programación, le costará más trabajo iniciarse en su uso, y si se quiere consultar algún tutorial más explícito sobre la programación en C# se tendría que contar además con conexión a Internet. En la actualidad se ha desarrollado tecnologías gratuitas que permiten a los programadores crear páginas web dinámicas, desde sitios web personales hasta aplicaciones web empresariales, desarrollado y comercializado por Microsoft. BLACKBERRY. Es una línea de teléfonos inteligentes que integran el servicio de correo electrónico móvil. BlackBerry fue desarrollado por la compañía canadiense Research In Motion (RIM). Aunque incluye aplicaciones típicas es fundamentalmente conocido por su capacidad para enviar y recibir correo electrónico de Internet accediendo a las redes móviles de compañías de teléfono celular que brindan este servicio. El primer dispositivo BLACKBERRY fue el 1990 y se introdujo en 1999 y funcionaba como un localizador de cinco vías. En 2002, el BlackBerry más conocido fue puesto en el mercado. Este BlackBerry soporta push e-mail, telefonía móvil, mensajería de texto, faxes por Internet, navegación web y otros 95 servicios de información inalámbrica. Actualmente el dispositivo BlackBerry más vendido y utilizado por los usuarios es el BlackBerry Curve 8520. GRÁFICO No. 11 Grafico No. 11 BlackBerry Fuente : http://www.google.com.ec/imgres?imgurl=http://www.wayerless.com/up/2009/10/rim-blackberry-bold-9700ofc.jpg&imgrefurl=http://www.wayerless.com/2009/12/felices-10-anos-blackberry/&usg=__YKQIfto8yzI0grd1vzHas2Ge1A=&h=500&w=575&sz=149&hl=es&start=11&zoom=1&tbnid=d1DCEXNU6istPM:&tbnh=117&tbnw=134&ei=w3rjTuXDEMm4tgekkM HrBA&prev=/search%3Fq%3DBlackBerry%26um%3D1%26hl%3Des%26sa%3DN%26biw%3D1280%26bih%3D697%26tbm%3Disch&um=1&itbs=1 La mayoría de los modelos actuales de BlackBerry tienen incorporado un teclado QWERTY, optimizado para " hojear ", utilizando únicamente de los pulgares para escribir. También hay varios modelos que incluyen un teclado SureType para escribir. No todos los modelos tienen un teclado ya que hay varios modelos de pantalla táctil sin teclado físico aunque sí que incluyen un teclado en la pantalla. El sistema de navegación se logra principalmente por una bola de desplazamiento, o "bola" en el centro del dispositivo, los dispositivos más antiguos utilizan una rueda de pista en el lado y los nuevos dispositivos como el BlackBerry Bold o Curve 9700 8520/8530, como también el Pearl 9100/9105 utilizan una pequeña almohadilla para la navegación en lugar de una rueda de desplazamiento. Algunos modelos también incorporan un "Push to Talk (PTT)”, similar a una radio de dos vías. En ocasiones no funciona. 96 Los dispositivos BlackBerry proporcionan un entorno inalámbrico Java ME que es compatible con las aplicaciones cliente/servidor. Los desarrolladores de aplicaciones pueden crear BlackBerry Java Application, con interfaces de usuario sofisticadas, para la entrada y búsqueda de datos compatibles con un subprocesamiento múltiple, internacionalización, comunicación de red y el almacenamiento local de datos. Las aplicaciones pueden comunicarse con las redes mediante conexiones estándar TCP y HTTP, a pesar de la red inalámbrica subyacente. BlackBerry ha incorporado correo móvil en todos sus dispositivos así como las redes sociales mantienen a todas las personas cerca. Comuníquese con sus amigos, familiares o contactos por teléfono, correo electrónico o mensaje de texto. Las empresas pueden ampliar sus aplicaciones comerciales mediante conexiones inalámbricas a través de BlackBerry, garantizando de este modo que su personal itinerante tiene acceso a la información de la empresa mientras trabaja sobre el terreno. "Hay una antigua historia sobre una persona que quería que su ordenador fuese tan fácil de utilizar como su teléfono. Estos deseos se han hecho realidad, ya no sé cómo usar mi teléfono"(Bjarne Stroustrup) 97 Ambiente de Desarrollo Gráfico. Actualmente se realizan aplicaciones con entornos gráficos para los diferentes programas de equipos de cómputo entre los cuales tenemos .net, netbeans, myeclipse entre otros. Lo cual ha facilitado el desarrollo de estas aplicaciones, sin embargo aún no se ha llegado a tener todos los sistemas de desarrollo con ambientes gráficos ya que en su mayoría se siguen utilizando líneas de código para desarrollar las interfaces de usuarios. En un ambiente gráfico se detectan todas las interfaces quien necesite el usuario para desarrollar determinada tarea. En el desarrollo de una interfaz gráfica se debe tener consideración en no colocar los elementos en cualquier lugar o con un elemento obstruir otro ya que complicaría las funciones a los usuarios para ello existen estándares de programación para manipular estos entornos gráficos. Entre los estándares de calidad se encuentran los siguientes: El Estándar de Calidad ISO 9001 El estándar, que ha sido adoptado por más de 130 países para su uso, se está convirtiendo en el medio principal con el que los clientes pueden juzgar la competencia de un desarrollador de software. Uno de los problemas con el estándar ISO 9001 está en que no es específico de la industria: está expresado en términos generales, y puede ser interpretado por los desarrolladores de diversos productos como cojinetes de bolas, secadores de pelo, automóviles, equipamiento deportivo, televisores, así como por los desarrolladores de software. Se han 98 realzado muchos documentos que relacionan el estándar con la industria del software, pero no entran en una gran cantidad de detalles. Para la industria del software los estándares relevantes son: • ISO 9001: este es un estándar que describe el sistema de calidad utilizado para mantener el desarrollo de un producto que implique diseño. • ISO 9000-3: este es un documento específico que interpreta el ISO 9001 para el desarrollador de software. • ISO 9004-2: este documento proporciona las directrices para el servicio de facilidades del software como soporte de usuarios. Los requisitos se agrupan bajo 20 títulos: • Responsabilidad de la gestión • Inspección, medición y equipo de pruebas • Sistema de calidad • Inspección y estado de pruebas • Revisión de contrato • Acción correctiva • Control de diseño • Control de producto no aceptado • Control de documento • Tratamiento, almacenamiento, empaquetamiento y entrega • Compras • Producto proporcionado al comprador 99 • Registros de calidad • Identificación y posibilidad de seguimiento del producto • Auditorías internas de calidad • Formación • Control del proceso • Servicios • Inspección y estado de pruebas • Técnicas estadísticas. Factores de calidad ISO 9126 El estándar ISO 9126 ha sido desarrollado en un intento de identificar los atributos clave de calidad para el software. El estándar identifica 6 atributos clave de calidad: • Funcionalidad: el grado en que el software satisface las necesidades indicadas por los siguientes suba tributos: idoneidad, corrección, interoperabilidad, conformidad y seguridad. • Confiabilidad: cantidad de tiempo que el software está disponible para su uso. Está referido por la siguiente suba tributos: madurez, tolerancia a fallos y facilidad de recuperación. • Usabilidad: grado en que el software es fácil de usar. Viene reflejado por la siguiente suba tributos: facilidad de comprensión, facilidad de aprendizaje y operatividad. 100 • Eficiencia: grado en que el software hace óptimo el uso de los recursos del sistema. Está indicado por la siguiente suba tributos: tiempo de uso y recursos utilizados. • Facilidad de mantenimiento: la facilidad con que una modificación puede ser realizada. Está indicada por la siguiente suba tributos: facilidad de análisis, facilidad de cambio, estabilidad y facilidad de prueba. • Portabilidad: la facilidad con que el software puede ser llevado de un entorno a otro. Está referido por la siguiente suba tributos: facilidad de instalación, facilidad de ajuste, facilidad de adaptación al cambio. El desarrollo de aplicaciones móviles para teléfonos inteligentes se acrecentó con la aparición de dispositivos BlackBerry, cuyas aplicaciones corrían en versiones de java j2me versión 1.4, en la actualidad esta versión de java se encuentra en j2me 1.6, las aplicaciones de java RIM permiten interactuar entre otras cosas con archivos, conexiones de redes, aplicaciones cliente servidor, comunicaciones con servicios web, manejo de bases de datos locales, manejo de imágenes, etc. En el desarrollo de aplicaciones móviles se pueden realizar las aplicaciones web y las aplicaciones de dispositivo. Para realizar una aplicación web se debe tener en cuenta lo siguiente: El cliente móvil este debe cumplir, en lo posible, con los requerimientos del cliente en cuanto a procesos en el dispositivo móvil, es decir si necesita realizar una descarga o carga de información debe de contar con una buena conexión así como la información necesaria. 101 La aplicación Web que es la que hace el trabajo y procesa el trabajo de los clientes móviles. La sincronización. Este es el mecanismo por el cual se mantiene la consistencia e integridad de datos entre los clientes móviles y la aplicación de servidor. En el desarrollo de aplicaciones móviles la plataforma Java para Móviles (J2ME) ha probado ser la más difundida en la actualidad. Para esto Java provee una arquitectura basada en componentes, que conduce al desarrollo de aplicaciones multicapa, que aseguran la interoperabilidad de estos componentes a través de distintas plataformas. El surgimiento de esta arquitectura creó nuevos perfiles profesionales laborales que deben ser cubiertos. En las aplicaciones java Rim de BlackBerry un desarrollador puede integrar por completo aplicaciones cliente servidor, listas de mensajes, organizadores, el equipo y los exploradores para una mejor interacción con el usuario. Al momento de desarrollar aplicaciones para el equipo móvil que no sean web se deben tener en cuenta los siguientes criterios: • tienen un tamaño de pantalla más pequeño que puede mostrar un número limitado de caracteres • tienen velocidades de procesador más lentas • utilizan redes inalámbricas que tienen un período de latencia más largo que las LAN estándar • tienen menos memoria disponible • tiene una batería que dura menos 102 • muestran una pantalla al mismo tiempo • Utilizar o ampliar los componentes existentes de la interfaz de usuario de forma que la aplicación pueda heredar el comportamiento predeterminado del componente. • Seguir el modelo estándar de navegación tanto como le sea posible para que los usuarios puedan hacer un uso completo del teclado y la bola de desplazamiento. • Realizar todas las acciones disponibles desde el menú. • Comprobar que las acciones disponibles en el menú son relevantes para el contexto actual de los usuarios. • Centrarse en tareas inmediatas de los usuarios. • Simplifique la selección y presentación de datos para mostrar sólo la información que los usuarios necesitan en cualquier otro momento. • Muestre la información de manera que haga un uso efectivo de la pequeña pantalla. Los usuarios de dispositivos móviles no utilizan del mismo modo las aplicaciones en su dispositivo móvil y las aplicaciones en un ordenador. En un dispositivo móvil, los usuarios esperan encontrar la información rápidamente, puedan realizar las tareas fácilmente y acceder a la información rápidamente. Desarrollo de Widgets para Dispositivos BlackBerry Los Widgets son pequeñas aplicaciones web. Escritas en una combinación de HTML, CSS y java script y tienen la misma funcionalidad que una aplicación para el dispositivo, su instalación 103 Es la misma que se hace como si fuera una aplicación nativa del dispositivo. Básicamente un paquete Widgets tiene los siguientes elementos: Archivos de Configuración Página de Inicio Imágenes (Iconos) Otros recursos y objetos referenciados Con un Widgets de este tipo podríamos conseguir sostificados Uis para entrada de datos y búsqueda de información que soporten por ejemplo, internacionalización, comunicación por red, almacenamiento local de datos, y comunicación de redes ya sean tcp o http FUNDAMENTACIÓN LEGAL Artículo 96. Objeto de la protección 1. A los efectos de la presente Ley se entenderá por programa de ordenador toda secuencia de instrucciones o indicaciones destinadas a ser utilizadas, directa o indirectamente, en un sistema informático para realizar una función o una tarea o para obtener un resultado determinado, cualquiera que fuere su forma de expresión y fijación. A los mismos efectos, la expresión programas de ordenador comprenderá también su documentación preparatoria. La documentación técnica y los manuales de uso de un programa gozarán de la misma protección que este Título dispensa a los programas de ordenador. 104 2. El programa de ordenador será protegido únicamente si fuese original, en el sentido de ser una creación intelectual propia de su autor. 3. La protección prevista en la presente Ley se aplicará a cualquier forma de expresión de un programa de ordenador. Asimismo, esta protección se extiende a cualesquiera versiones sucesivas del programa así como a los programas derivados, salvo aquellas creadas con el fin de ocasionar efectos nocivos a un sistema informático. Cuando los programas de ordenador formen parte de una patente o un modelo de utilidad gozarán, sin perjuicio de lo dispuesto en la presente Ley, de la protección que pudiera corresponderles por aplicación del régimen jurídico de la propiedad industrial. 4. No estarán protegidos mediante los derechos de autor con arreglo a la presente Ley las ideas y principios en los que se basan cualquiera de los elementos de un programa de ordenador incluidos los que sirven de fundamento a sus interfaces. Preguntas a Contestarse Se reducirá el tiempo de desarrollo usando una interfaz grafica Será más factible realizar una interfaz gráfica desarrollando con líneas de código Se entenderá de mejor manera el desarrollo de una aplicación móvil usando una interfaz amigable Sale más factible seleccionar un curso o utilizar una herramienta para auto aprendizaje. 105 Variables de la Investigación Se define como variable independiente Interfaces Gráficas Para Desarrollo De Aplicaciones Java Para BlackBerry. Esto permitirá desarrollar aplicaciones javas para BlackBerry de manera amigable y optimizaría el tiempo de desarrollo del mismo, reduciendo considerablemente costos. Y como variable dependientes: Complejidad Del Desarrollo de Aplicaciones java Móvil. El Desarrollo de aplicaciones java para móvil ha sido truncado debido a la poca experiencia en este ambiente, lo cual hace que haya poco conocimiento de las aplicaciones posibles a realizarse. Implementación De Ambiente De Desarrollo Gráfico Para Java Móvil De BlackBerry. Desarrollar un binario para que pueda ser cargado en los dispositivos BlackBerry de manera dinámica y poder ser usado en un tiempo mínimo de desarrollo DEFINICIONES CONCEPTUALES GUI.- Graphical user interface o interface gráfica de usuario, son las ventanas en las cuales interactúa el usuario final cuando está usando el aplicativo en el dispositivo móvil. 106 BLACKBERRY.- Marca de dispositivo móvil para la cual se desarrollara el aplicativo del proyecto actual. RIM.- Research In Motion empresa dueña de sistema operativo BlackBerry OS y propietaria de la marca BlackBerry, también es conocido por el programa desarrollado por esta empresa para el desarrollo de aplicaciones para dispositivos móviles BlackBerry IDE.- Integrated development environment o ambiente de desarrollo integrado, es el objetivo final del proyecto propuesto El de brindar a los desarrolladores de sistemas una herramienta en la cual se haga fácil y reduzca la carga cognitiva al momento de desarrollar las aplicaciones de java RIM COMPLEMENTOS.- Características o métodos adicionales que se incluyen a un objeto que forme parte de una aplicación java RIM Móvil. CLASES.- Sección de código donde se encuentras atributos y métodos a ser utilizados en una aplicación java RIM para dispositivos Móviles. INTERFACE.- Son declaraciones de métodos para obtener seguridades al momento de desarrollar aplicaciones java RIM para dispositivos móviles. OBJETOS.- Son instancias o variables que se crean y que por medio de ellas se pueden utilizar los atributos y los métodos de las clases. LIBRERÍAS.- son paquetes de códigos pre-establecidos que se usan en la implementación de aplicaciones java RIM para móviles. PALM OS.- el sistema operativo para equipos PDA PDA.- Personal digital assistant o asistente persona digital 107 CLDC.- Connected Limited Device Configuration o conexión limitada de configuración de dispositivo MIDP.- Mobile Information Device Profile o perfil de información de dispositivo móvil. 108 CAPÍTULO III METODOLOGÍA DISEÑO DE LA INVESTIGACIÓN Modalidad de la investigación La modalidad de investigación usada fue la de proyecto factible pues a través de la realización de un diagnóstico se pudo determinar en primera instancia la complejidad de desarrollo de aplicaciones para dispositivos móviles en general. Se debe a que las aplicaciones de dispositivos móviles se está llevando a cabo hace poco tiempo, es decir en los últimos años se está dando a conocer esta tecnología y esto se debe a la aparición de dispositivos inteligentes lo cual dio cabida a que el desarrollo de los software se dé no solo a los fabricantes de los equipos sino también a los diferentes usuarios que se vean atraídos por esta tecnología. Se desarrolló un aplicativo que brinde la facilidad de desarrollar aplicaciones de interfaces graficas de una manera sencilla e intuitiva. Del nivel teórico se utilizaron los siguientes métodos: Métodos lógicos del pensamiento, como: análisis, síntesis, inducción, generalización, para arribar a las diferencias y conclusiones pertinentes. Histórico lógico en función de establecer orden y secuencia lógica en el devenir histórico del fenómeno estudiado. Fueron empleados como métodos del nivel empírico los siguientes: 109 El trabajo con las fuentes documentales para analizar los trabajos existentes acerca del objeto de investigación, y en particular sobre el proceso de desarrollo de un aplicativo de dispositivos móviles. Entrevista a un especialista, para determinar el estado actual del proceso de desarrollo de aplicaciones en dispositivos móviles. El método de consulta a expertos para valorar la factibilidad de la propuesta de un aplicativo para el desarrollo de las interfaces gráficas y disminución de la complejidad en el desarrollo de las aplicaciones móviles orientado a dispositivos BlackBerry. Población y Muestra Población En la presente tesis se determinó como dificultad generalizada, no poder acceder a las poblaciones totales. Esta circunstancia obliga en la mayoría de los casos a trabajar con partes representativas de aquellas, es decir, las muestras. Conforme al método por el que se toma la muestra, las observaciones selectivas se dividen en: Selección estratificada. Selección sistemática Selección aleatoria Selección por conglomerados En el caso objeto de estudio se utilizó la selección por conglomerados, ya que en el mismo se consideran los conjuntos de datos que posean las mismas 110 características medibles o cuantificables, por ejemplo los desarrolladores de aplicaciones La población fue tomada de un grupo de empresas consultoras informáticas (Sudamericana de Software, CIMA, Integrity, Viamatica, IRoute), personal del área de sistemas de algunas entidades financieras (Banco de Guayaquil, banco del Pacifico), grupo de estudiantes del horario nocturno y matutino en la carrera de ingeniería de sistemas computacionales de la universidad de Guayaquil, un número aproximado de programadores independientes. CUADRO No. 1 Cuadro de Población POBLACIÓN Población Aproximada de Desarrolladores en Sudamericana de N 40 Software Población Aproximada de Desarrolladores en CIMA Consulting 60 Población Aproximada de Desarrolladores en Integrista Solución 30 Población Aproximada de Desarrolladores en Viamatica 40 Población Aproximada de Desarrolladores en IRoute Solution 45 Población Aproximada de Desarrolladores en Banco de Guayaquil 20 Población Aproximada de Desarrolladores en Banco del Pacifico 35 Población Aproximada de estudiantes horario matutino en carrera de 700 ingeniería de sistemas. Población aproximada de estudiantes horario nocturno en carrera de ingeniería de sistemas 740 111 Población Aproximada de Programadores independientes. En la ciudad de Guayaquil. Que no han seguido alguna carrera de ingeniería de sistemas Total 300 2190 Fuente: Héctor William Pilligua Robalino Elaborado Por: Héctor William Pilligua Robalino Muestra El subconjunto de la población determinado mediante el tamaño de la muestra y el tipo de muestreo que se utilizó para seleccionar a la cantidad promedio de desarrolladores informáticos. TAMAÑO DE LA MUESTRA Población Aproximada de Desarrolladores en empresas consultoras informáticas Fórmula: n m E (m 1) 1 2 DONDE: CUADRO No. 2 Población Aproximada 1 POBLACIÓN N Población Aproximada de Desarrolladores en empresas consultoras informáticas 215 Fuente: Héctor William Pilligua Robalino Elaborado Por: Héctor William Pilligua Robalino Cálculos: m= Tamaño de la población (215) E= error de estimación (7%) n = Tamaño de la muestra (104) 215 (0.07) (40 1) 1 112 215 n (0.0049)( 214) 1 215 n 2 Resultado: 104 personas a encuestar. Cálculo del factor de proporción: f n 104 0.488672 N 215 TAMAÑO DE LA MUESTRA Población Aproximada de Desarrolladores en Entidades Financieras. Fórmula: n m E 2 (m 1) 1 DONDE: CUADRO No. 2 Población Aproximada 2 POBLACIÓN N Población Aproximada de Desarrolladores en Entidades Financieras 55 Fuente: Héctor William Pilligua Robalino Elaborado Por: Héctor William Pilligua Robalino Cálculos: m= Tamaño de la población (55) E= error de estimación (7%) n = Tamaño de la muestra (43) 55 (0.07) (55 1) 1 55 113 n (0.0049)(54) 1 55 n n 2 Resultado: 43 personas a encuestar. Cálculo del factor de proporción: f n 43 0.781818 N 55 TAMAÑO DE LA MUESTRA Población Aproximada de Desarrolladores en la carrera de ingeniería en sistemas computacionales horario matutino y nocturno Fórmula: n m E 2 (m 1) 1 DONDE: CUADRO No. 3 Población Aproximada 3 POBLACIÓN N Población Aproximada de Desarrolladores en la carrera de ingeniería en sistemas computacionales horario matutino y nocturno 1440 Fuente: Héctor William Pilligua Robalino Elaborado Por: Héctor William Pilligua Robalino Cálculos: m= Tamaño de la población (1440) E= error de estimación (7%) n = Tamaño de la muestra (179) 1440 (0.07) 2 (1440 1) 1 1440 n (0.0049)(1439) 1 114 1440 n 7.0511 1 n Resultado: 179 personas a encuestar. Cálculo del factor de proporción: f n 179 0.124306 N 1440 TAMAÑO DE LA MUESTRA Población Aproximada de Desarrolladores en Viamatica Fórmula: n m E 2 (m 1) 1 DONDE: CUADRO No. 4 Cuadro Población 4 POBLACIÓN N Población Aproximada de Programadores independientes. En la ciudad de Guayaquil. Que no han seguido alguna carrera de ingeniería de sistemas 300 Fuente: Héctor William Pilligua Robalino Elaborado Por: Héctor William Pilligua Robalino Cálculos: m= Tamaño de la población (300) E= error de estimación (7%) n = Tamaño de la muestra (122) 300 (0.07) 2 (300 1) 1 300 n (0.0049)( 299) 1 300 n 115 1.4651 1 300 n 2.4651 n Resultado: 122 personas a encuestar. Cálculo del factor de proporción: f n 122 0.9 N 300 Operacionalización de variables A continuación se muestra a través de un cuadro las variables determinadas en el presente trabajo, e incluye además sus dimensiones, indicadores y técnicas de investigación utilizadas. CUADRO NO. 5 MATRIZ DE OPERACIONALIZACIÓN DE VARIABLES Variables Dimensiones Indicadores Técnicas y/o Instrumentos V. I. Interfaces Gráficas Para Desarrollo De Aplicaciones Java Para BlackBerry Desarrollo de Sistemas informáticos orientados a tecnologías Móviles Adaptación a Herramientas de Programación. (70%) Programación Intuitiva (50%) Interacción con dispositivos BlackBerry Conocimiento de tecnología móvil (80%) Análisis de comportamiento y adaptación a nuevas herramientas de trabajo Niveles de destrezas en captación de elementos y lógicas de programación Exposiciones, guías, visualización de nuevos dispositivos, 116 encuestas Conocimiento de tecnología móvil de los Smartphone (70%) V.D. Complejidad Del Desarrollo de Aplicaciones java Móvil Estándares de programación Implementación de sistemas informáticos en dispositivos móviles Diferentes tipos de conectividad Adaptación a nuevas tecnologías en el mercado (40%) Programación modular (15%) Programación Orientada a Objetos (60%) Conocimiento de tecnología móvil (80%) Conocimiento de tipos de almacenamiento en dispositivos móviles (50%) Conocimiento de conectividad móvil (70%) Visualización de campo, foros, preguntas frecuentes, salas de conversas, redes sociales. Talleres, exposiciones, ejercicios, encuestas Pruebas escritas, pruebas prácticas, desarrollo y soluciones de problemas, ayudas a usuarios Talleres, encuestas, exposiciones, reuniones, foros, correos, internet. Exposiciones, manuales , guías, encuestas, talleres Conocimiento de arquitectura móvil (20%) V.D. Implementación De Ambiente De Desarrollo Objetos gráficos de aplicaciones informáticas Conocimientos de objetos gráficos (80%) Resoluciones de problemas, encuestas escritas y prácticas. 117 Gráfico Para Java Móvil De BlackBerry Uso de punteros para brindar movilidad e Interacción con la aplicación. Ofrecer ayuda en el desarrollo de aplicaciones móviles Conocimiento de distribución de pixeles en monitor (50%) Orientación y reconocimiento de colores (60%) Uso de ayuda (80%) Interpretación de ejemplos (80%) Búsqueda ayuda (80%) Mediciones con cuestionarios gráficos Ubicación de ayuda en un punto estratégico y visible para el usuario, uso de metáforas de Elaboración: Héctor William Pilligua Robalino Fuente: Héctor William Pilligua Robalino Instrumentos de recolección de datos. En la presente investigación fueron utilizados diversos métodos de obtención de información, los cuales se conceptualizarán y caracterizarán brevemente a continuación: La Entrevista La entrevista es uno de los métodos de obtención de información más eficaces. “una entrevista para recolección de información es una conversación dirigida con un propósito específico que usa un formato de preguntas y respuestas”. (Kendall) 118 Como la entrevista no es una conversación informal entre dos amigos que se encuentran, sino un diálogo con un objetivo investigativo muy claro, debe ser insertada en un proceso investigativo mucho más amplio. Debido a ello se hace necesario organizar adecuadamente la entrevista. Esa organización adecuada de la entrevista implica dividirla por partes o etapas. Esas partes o etapas son: Preparación. Realización. Elaboración. Diseño de las preguntas. Las preguntas en las entrevistas se establecen de forma estructurada y tienen múltiples formas las cuales se muestran a continuación: Preguntas cerradas. Preguntas abiertas. Preguntas mixtas. Indagaciones o averiguaciones generales. Las preguntas estructuradas tienen un objetivo informativo muy concreto. La respuesta está definida por la pregunta. Las preguntas estructurales cerradas son las que mayormente se utilizan. Estas ofrecen al entrevistado un universo finito de respuestas, entre las cuales debe 119 escoger la que considera posible o correcta. Ejemplo: En alternativas múltiples incluyentes ¿Con qué frecuencia elabora aplicaciones para dispositivos móviles? _______Diarios ________Semanales _______Mensuales. Las preguntas estructurales abiertas son aquellas donde el entrevistador permite al entrevistado la libertad de escoger opiniones y la forma de responder. Proporcionan más riqueza informativa, pero son más ambiguas. Ejemplo: ¿Cómo piensa que puede ser mejorado el sistema de información automatizado de su entidad? Las indagaciones o averiguaciones generales son preguntas abiertas llevadas a su máxima expresión. Ejemplo: La descentralización sería una solución al problema del control aquí. ¿Qué usted piensa sobre eso? Las entrevistas estructuradas o dirigidas se realizan sobre la base de un cuestionario guía, y las respuestas se registran tal y como los da el entrevistado. Las entrevistas no estructuradas se distinguen por la preponderancia de las preguntas abiertas y por un alto grado de flexibilidad por parte de los entrevistadores. Cuestionarios Los cuestionarios se emplean fundamentalmente cuando la cantidad de las personas a investigar es muy grande o cuando la dispersión geográfica de las 120 mismas es tal que impiden física y económicamente, las entrevistas reales o virtuales. Con los cuestionarios pueden investigarse hechos, formas de comportamiento, opiniones, procedimientos, flujos de información, sentimientos, características, creencias. Ventajas con relación a las entrevistas: Bajo costo, su rapidez y su ubicuidad. Desventajas: No permiten acoplar información informal o base de observaciones. Los cuestionarios deben cumplir, al menos, con cinco atributos: idoneidad, procesable automatizada mente, ser objetivos, alcance razonable, diseño agradable y a la vez sencillo. Para la elaboración del cuestionario se deben tener en cuenta las siguientes etapas: Preparación. Diseño y elaboración. Prueba. Aplicación. Análisis de la información obtenida. En un cuestionario pueden utilizarse cualquier tipo de preguntas, pero el más recomendable es el de preguntas estructurales cerradas, pues resulta más fácil de procesar en programas como el Excel o el SPSS. 121 El cuestionario no ofrece la flexibilidad de la entrevistas, por lo que exigirá mucho más esfuerzo de diseño y elaboración. Además deberá estudiarse la posibilidad de que el cuestionario sea anónimo o identificado. Los investigadores en ambos casos deberán actuar con sinceridad y transparencia. Algunas recomendaciones generales son: Dejar suficiente espacio para llenar las preguntas estructurales abiertas. Comprobar la existencia de todas las alternativas en las peguntas estructurales cerradas. Ser consistente en el estilo de las preguntas. Ordenar las preguntas con el mismo estilo que se expuso en las entrevistas (enfoque deductivo, enfoque inductivo y combinación de ambos). Agrupar conjuntos de preguntas de contenido similar. Comenzar por las preguntas menos controvertidas. Evitar las preguntas negativas pues tienden a confundir. Cuando es necesario se deben utilizar escalas en las preguntas estructurales cerradas con alternativas. Estas permiten cuantificar aspectos que a primera vista son cualitativos. Las escalas más comunes son: Nominal. Ordinal. De intervalo. De relación. 122 Observaciones Las técnicas de investigación observación constituyen un método muy útil para captar información. Observar no es simplemente “mirar”. Se observa con un objetivo, con una misión investigativa que cumplir. Claude Bernard expresaba refiriéndose a la observación: “el observador debe ser un fotógrafo de los fenómenos; su observación debe representar exactamente a la Naturaleza” La observación ayuda a confirmar o refutar la información que se ha obtenido por medio de las entrevistas, los cuestionarios, el análisis de documentos, etcétera. La observación se realiza planeada, organizada y sistemáticamente. Las observaciones que realizan los investigadores deben cumplir, entre otros los siguientes requisitos: Tener propósitos claros y bien definidos. Proyectarse hacia un plan específico, definido y orientado a cumplir los objetivos. Estar sujeta a comprobación. Poderse controlar sistemáticamente. Reunir los requisitos básicos de confiabilidad y validez. Plasmar sus resultados por escrito, preferiblemente en el momento exacto en que transcurre. Las observaciones presentan ventajas evidentes: No son obstruidas, puesto que no interfieren en la actividad de los observados. Aceptan información informal, no estructurada, pero sumamente útil. 123 Permite trabajar con grandes volúmenes de información. Las observaciones en las investigaciones pueden ser de varios tipos: Por el lugar en que se realizan: documental o de campo. Por la forma de participar del observador: participante o no participante. Por la forma en que se organiza: dirigida (regulada y estructurada) o no definida (libre) Por el número de observadores: individual o en equipo. Como en toda herramienta de investigación, cuando se hacen observaciones se debe dejar constancia escrita. Otras opciones pueden ser el empleo de filmadoras, cámaras fotográficas o máquinas de video, etcétera. En la presente investigación para obtener la información necesaria se recurrió en primera instancia a la metodología de observación del objeto de estudio, determinándose los siguientes sucesos: Desarrollo de aplicaciones para dispositivos móviles. Conocimientos de los desarrolladores de aplicaciones. Manejo de interfaces gráficas para desarrollo de aplicaciones. Uso de herramientas para desarrollo de aplicaciones en java. Posteriormente se recurrió a la aplicación de un cuestionario, el cual se muestra a continuación: Procedimientos de la Investigación 124 Los pasos que se siguieron para desarrollar mi tesis; desde la concepción del problema hasta la elaboración del informe de la investigación son: El problema: Planteamiento del problema Interrogantes de la investigación Objetivos de la Investigación Justificación o importancia de la investigación Marco teórico: Fundamentación teórica Fundamentación legal Preguntas a contestarse Definición de términos Metodología: Diseño de Investigación (Tipo de Investigación) Población y Muestra Instrumentos de recolección de datos Operacionalización de variables, dimensiones e indicadores Procedimiento de la Investigación Criterios para la elaboración y validación de la propuesta Marco administrativo: Cronograma, Presupuesto 125 Conclusiones y recomendaciones Recolección de la Información Posteriormente se recurrió a la aplicación de una encuesta, la misma que se elaboró en una manualmente observando las necesidades de los desarrolladores de aplicaciones móviles, para luego depurar cada pregunta que fuese necesaria para realizar la encuesta ver anexo #7 PROCESAMIENTO Y ANÁLISIS A través de los resultados obtenidos de la encuesta se realizó un análisis específico a cada respuesta de las preguntas, este se muestra a continuación: 1- Condición del Informante Opciones 1 2 3 CUADRO Nº 6. Condición del Informante Frecuencia Categorías Absoluta Población Aproximada de Desarrolladores en empresas consultoras informáticas Población Aproximada de Desarrolladores en Entidades Financieras Población Aproximada de Desarrolladores en la carrera de Frecuencia Relativa 104 23% 43 10% 179 40% 126 4 ingeniería en sistemas computacionales horario matutino y nocturno Población Aproximada de Programadores independientes. En la ciudad de Guayaquil. Que no han seguido alguna carrera de ingeniería de sistemas Total 122 27% 448 100% Fuente: Datos de la encuesta realizada Elaboración: Héctor William Pilligua Robalino. GRÁFICO Nº 12. Condición del Informante 23 Desarrolladores en consultorias 104 122 43 179 10 desarrolladores en entidades financieras Fuente: Datos de la encuesta realizada Cuadro Nº 2 Elaboración: Héctor William Pilligua Robalino Análisis: de acuerdo al análisis, la mayor parte de los desarrolladores de aplicaciones ya sean móviles o de escritorio son los que están cursando la carrera de ingeniería de sistemas, esto corresponde al 40%, la mayoría de los desarrolladores que se encuentran en este grupo consiguen trabajar en consultoras informáticas, otros desarrolladores consiguen en empresas públicas o privadas, o trabajos bajo pedido, cabe recalcar que los que terminan la carrera de ingeniería en sistemas no se dedican al desarrollo de aplicaciones, seguido de los desarrolladores independientes o los FreeLancer, que se dedican a la programación y comercialización de aplicaciones, por lo usual estos desarrolladores han hecho cursos vía web o recibiendo cursos de capacitación, el conocimiento que consiguen de la herramienta de desarrollo les da una ventaja al 127 momento de implementación de sistemas, este grupo corresponde al 27%, continuando con el grupo de desarrolladores de consultoras informáticas, en este caso la mayoría se dedica al desarrollo por cuestiones laborales, y la empresas se encarga de realizar las capacitaciones correspondientes para una labor correcta, este grupo corresponde al 23%, por último el grupo de desarrolladores de entidades financieras, este grupo es pequeño en comparación con el resto, ya que en las entidades financieras se sirven más de los consultores informáticos para el desarrollo, los programadores que se encuentran en este grupo se encargan de realizar investigaciones de aplicaciones y nuevas herramientas, desarrollo de tareas a seguirse, mantenimiento de sistemas, procesos burocráticos, reuniones, lluvias de ideas y trato con el departamento organizacional para definición de los proyectos que se tiene en curso, este grupo corresponde al 10%. 2. Utiliza Dispositivos BlackBerry. CUADRO N° 7 Utiliza Dispositivos BlackBerry. Frecuencia Opciones Categorías Absoluta Si 1 220 No 2 228 Total 448 Frecuencia Relativa 49% 51% 100% Fuente: Datos de la encuesta realizada Elaboración: Héctor William Pilligua Robalino GRÁFICO Nº 13. Uso de Dispositivos BlackBerry 128 49 51 Si No Fuente: Datos de la encuesta realizada Cuadro Nº 3 Elaboración: Héctor William Pilligua Robalino Análisis: De acuerdo al gráfico se denota que hay un gran número de desarrolladores poseen equipos móviles BlackBerry, este grupo corresponde al 49%,, esto es por que utilizan el equipo para ver el resultado de la aplicaciones realizadas para el dispositivo y por comodidad, el 51% restante optaron por otros tipos de dispositivos por tecnología andorid o iPhone.. 3. Adaptación a Nuevas Herramientas CUADRO N° 8 Adaptación a Nuevas Herramientas. Frecuencia Frecuencia Opciones Categorías Absoluta Relativa Complicado 1 40 9% Con tiempo 2 80 18% Considerable Adaptación 3 135 30% 129 4 rápida No se Complica la adaptación Total 193 43% 448 100% Fuente: Datos de la encuesta realizada Elaboración: Héctor William Pilligua Robalino GRÁFICO No.14 Adaptacion a Nuevas Herramientas. Complicado 9 18 43 Con tiempo Considerable 30 Adaptación rápida No se Complica la adaptación Fuente: Datos de la encuentra realizada Elaborado. Héctor William Pilligua Robalino Análisis: con la información obtenida se llega a comprobar que la mayoría de los desarrolladores no tiene ninguna complicación en la adaptación a nuevas herramientas de desarrollo, la adaptación no puede ser complicada pero se puede tomar un tiempo considerable, su adaptación es más rápida si se cuenta con herramientas gráficas, en este grupo se encuentra a los programadores junior y semijunior, este grupo cuenta con el 43%. Otro grupo mayoritario tiene una adaptación rápida a las nuevas herramientas de desarrollo, estos desarrolladores cuentan con bastante conocimientos de códigos, por lo general aquí se 130 encontraron a los analistas, programadores sénior, este grupo cuenta con 30% de participación. Otro grupo toma un tiempo considerable en la adaptación de las nuevas herramienta de desarrollos, este tiempo de adaptación por lo general no garantiza la adaptación total hacia la herramienta, y andan en constante adaptación aprendiendo de la nueva interface para el desarrollo, por lo usual aquí hay programadores sénior y junior que están acostumbrados a utilizar una herramienta para las diferentes aplicaciones realizadas, por ejemplo si está acostumbrado a .net se tomara un tiempo considerable en aprender a programar en eclipse, este grupo cuenta con el 18% de participación. En el último grupo contamos con los desarrolladores que se les complica la adaptación hacia nuevas herramientas de desarrollo, en este grupo se encuentran programadores que ya tienen una edad avanzada y ha estado desarrollando con una sola herramienta de programación, por ejemplo programar en fox pro y luego quedar adaptarse a netbeans, este grupo cuenta con un 9% de participación. 4. Lenguaje de Programación más Utilizados. Opciones 1 2 3 4 5 Total CUADRO N° 9 Lenguaje de Programación más Utilizados. Frecuencia Categorías Absoluta .Net 117 Java 120 Oracle-PLQSL-SQLSERVER 94 Aplicaciones Web 112 Cobol 5 448 Frecuencia Relativa 26% 27% 21% 25% 1% 100% Fuente: Datos de la encuesta realizada Elaboración: Héctor William Pilligua Robalino 131 GRÁFICO No.15 Lenguaje de Programación más Utilizados. 1 25 26 .net java plsql-sql-oracle 21 27 web cobol . Fuente: Datos de la encuentra realizada Elaborado. Héctor William Pilligua Robalino Análisis: de acuerdo con la información obtenida se ve que hay un gran uso de lenguaje java, se debe a que en los outsoursing son los lenguajes más usados por ser open, este grupo corresponde al 27%, seguido del grupo de desarrollo que prefieren utilizar lenguaje de .net, esto se debe a las ventajas de desarrollo y menos complejidad en las implementaciones, debido a que se trata de una herramienta licenciada solo se dedican a los mantenimientos de sistemas existentes, esto corresponde al 26%, los programadores en ambiente web corresponde al 25%, este grupo se dedica al diseño gráfico, está más conformado con diseñadores, el lenguaje de programación que saben utilizar aparte de java y .net son php, html5, JavaScript, el grupo de programación a nivel de base de datos 132 corresponde al 21%, estos son encargados de desarrollos de trabajos programados, por ejemplo Jobs, así como el mejoramiento en tiempos de respuestas, seguridad en la información revisión de estándares y optimización de consultas, por ultimo tenemos al grupo que utiliza cobol, este grupo está en su mayoría en las entidades financieras, corresponde al 5%., debido a que es un lenguaje de programación que tiene bastante tiempo en el mercado, solo hay un pequeño grupo que se ha dedicado al aprendizaje de este lenguaje, cabe recalcar que cobol es ideal para el procesamiento de información masiva, carga de archivos con bastante información que en ocasiones llega a superar el millones de registros, al ser un lenguaje de muy bajo nivel, asemejado a C++ , el uso de recursos se reduce considerablemente lo cual brinda la gran velocidad de procesamiento. 5. Desarrollo de Aplicaciones con tecnología J2ME. CUADRO N° 10 Desarrollo de Aplicaciones con tecnología J2ME. Frecuencia Opciones Categorías Absoluta .Si 1 230 No 2 218 Total 448 Frecuencia Relativa 51% 49% 100% Fuente: Datos de la encuesta realizada Elaboración: Héctor William Pilligua Robalino GRÁFICO No.16 Desarrollo de Aplicaciones con tecnología J2ME. 133 49 51 Si No Fuente: Datos de la encuesta realizada Elaborado. Héctor William Pilligua Robalino Análisis: la mayoría en toda su trayectoria de desarrollo han utilizado tecnología J2ME, en su mayoría el trabajo que han hecho ha sido con el IDE de eclipse, también han desarrollado en netbeans, y en .net, este grupo corresponde al 51%, el otro grupo ha desarrollado en otras herramientas por ejemplo .net utilizando propiedades en los sitios web para adaptación en los dispositivos, en la actualidad también utilizan HTML5, este grupo corresponde al 49%... 6. Conocimiento de Herramientas para Desarrollo de Aplicaciones para Dispositivos Móviles. CUADRO N° 11 Conocimiento de Herramientas para Desarrollo de Aplicaciones para Dispositivos Móviles. Frecuencia Frecuencia Opciones Categorías Absoluta Relativa Muchas 1 214 48% Algunas 2 130 29% Pocas 3 104 23 Ninguna 4 0 0 Total 448 100% Fuente: Datos de la encuesta realizada Elaboración: Héctor William Pilligua Robalino 134 GRÁFICO No.17 Conocimiento de Herramientas para Desarrollo de Aplicaciones para Dispositivos Móviles 0 23 48 Muchas Algunas Pocas 29 Ninguna Fuente: Datos de la encuesta realizada Elaborado. Héctor William Pilligua Robalino Análisis: con la información obtenida se pudo constatar que hay un gran numero de que conocen diferentes herramientas, este grupo corresponde al 48%, seguido del grupo que programas como eclipse o .net, corresponde al 29%,el 23% restante conoce o a escuchado de herramientas para el desarrollo con tecnología J2ME, este grupo corresponde al 23%. 7. Uso de IDE Gráfico para Desarrollo de Aplicaciones. CUADRO N° 12 Uso de IDE Gráfico para Desarrollo de Aplicaciones. Frecuencia Frecuencia Opciones Categorías Absoluta Relativa Siempre 1 210 47% Algunas veces 2 140 31% Muy Poco 3 75 17% Nunca 4 23 5% Total 448 100% Fuente: Datos de la encuesta realizada Elaboración: Héctor William Pilligua Robalino GRÁFICO No.18 Uso de IDE para Desarrollo de Aplicaciones. 135 17 5 47 Siempre Algunas veces 31 Muy Poco Nunca Fuente: Datos de la encuesta realizada Elaborado. Héctor William Pilligua Robalino Análisis: la mayoría de los desarrolladores prefieren desarrollar con una herramienta que le faciliten visualizar el resultado final del sistema desarrollado, este grupo corresponde al 47%, el 31% son desarrolladores que no ven complejidad en desarrollar aplicaciones con interfaces graficas o mediante líneas de código formar las interfaces de usuarios, el 17% son desarrolladores que no ven la necesidad de un IDE gráfico para el desarrollo de interfaces, por lo general en este grupo se encuentra personal de bases de datos, el 5% corresponde a desarrolladores que no ven la necesidad del desarrollo de interfaces gráficas. 8. Desarrollos Frecuentes de Sistemas Informáticos. CUADRO N° 13 Desarrollos Frecuentes de Sistemas Informáticos. Frecuencia Opciones Categorías Absoluta Empresarial 1 210 Oficina 2 90 Juegos 3 25 Varios 4 123 Total 448 Frecuencia Relativa 46% 20% 6% 28% 100% Fuente: Datos de la encuesta realizada Elaboración: Héctor William Pilligua Robalino GRÁFICO No.19 Desarrollos Frecuentes de Sistemas Informáticos. 136 28 Empresarial 46 Oficina 6 Juegos 20 Varios Fuente: Datos de la encuesta realizada Elaborado. Héctor William Pilligua Robalino Análisis: de acuerdo a los datos obtenidos se ve claramente que la mayoría de los desarrolladores desarrollan o dan mantenimiento a sistemas empresariales, está conformado por el 46%, el grupo que le sigue son los que realizan sistemas varios, en este grupo se encuentran los desarrolladores de sitios web, sistemas empotrados, programación a bajo nivel, desarrollo móvil, entre otros, constituye el 23%, el grupo de desarrollo de oficina desarrollan sistemas compatibles con office, corresponde al 20%, el 6% conforma los desarrollos de juegos, ya sean de aprendizaje, infantiles o para dispositivos móviles. 9. Sistemas Operativos Móviles. CUADRO N° 14 Sistemas Operativos Móviles. Opciones 1 2 3 4 5 6 Total Categorías Android IOS RIM BlackBerry Sysmbian Windows Mobile Otros Frecuencia Absoluta 200 65 155 13 10 5 448 Frecuencia Relativa 45% 15% 35% 3% 2% 1% 100% Fuente: Datos de la encuesta realizada Elaboración: Héctor William Pilligua Robalino 137 GRÁFICO No.20 Sistemas Operativos Móviles. 3 21 Android 45 35 IOS RIM BlackBerry 15 Sysmbian Windows movile Otros Fuente: Datos de la encuesta realizada Elaborado. Héctor William Pilligua Robalino Análisis: de acuerdo a los datos obtenidos se ve que hay una gran cantidad de personas que utilizan dispositivos con sistema operativo android, este grupo constituye el 45%, seguido de las personas que utilizan dispositivos con BlackBerry, constituyendo el 35%, el grupo utiliza iPhone constituye el 15%, dispositivos con sistemas symbias constituyen el 3%, dispositivos con sistemas de Windows Mobile consta el 2% y los que utilizan dispositivos comunes constan el 1%. 10. Herramientas de Programación más Utilizadas para Desarrollo de Aplicativos Móviles. CUADRO N° 15 Sistemas Herramientas de Programación más Utilizadas para Desarrollo de Aplicativos Móviles. Frecuencia Frecuencia Opciones Categorías Absoluta Relativa Eclipse 1 230 40% NetBeans 2 150 26% .Net 3 100 14% Programación Web 4 80 17% Otros 5 13 3% 138 Total 448 100% Fuente: Datos de la encuesta realizada Elaboración: Héctor William Pilligua Robalino GRÁFICO No.21 Herramientas de Programación más Utilizadas para Desarrollo de Aplicativos Móviles. 3 Eclipse 17 40 14 NetBeans .Net 26 Programacion Web Otros Fuente: Datos de la encuesta realizada Elaborado. Héctor William Pilligua Robalino Análisis: De acuerdo a los datos obtenidos se puede comprobar que la mayoría de los desarrolladores al momento de implementar aplicaciones para dispositivos móviles prefieren Eclipse, este grupo conforma el 40%, seguido del grupo que prefiere usar netbeans por la facilidad de comunicación con java, esto conforma el 26%, los desarrolladores, ellos conforman el 17%, el programadores en .net conforman el 14%, y los desarrolladores que programan en otras herramientas no mencionadas conforman el 3%. CRITERIOS PARA LA ELABORACIÓN DE LA PROPUESTA Para el desarrollo de la propuesta se tuvieron en cuenta los términos generales que a continuación se muestran: Fundamentos metodológicos en la elaboración del modelo. Metodología para el uso del lenguaje de programación C#. Metodología para el desarrollo de la plataforma .NET. 139 Metodología para la elaboración de módulos Con estos elementos, el autor de la presente investigación, desarrollo el diagrama de flujo de la información, ver anexo 1, con este elemento se procede con el análisis y el diseño del aplicativo que facilite el desarrollo de aplicaciones para dispositivos móviles. CRITERIOS DE VALIDACIÓN DE LA PROPUESTA Para valorar la factibilidad del modelo se aplica el método Delphi o de criterio de expertos. El método Delphy o de criterio de expertos consiste en la utilización del juicio intuitivo de un grupo de expertos para obtener un consenso de opiniones, reflejando las valoraciones individuales de los mismos. Se seleccionaron 25 especialistas a quienes se les aplicó la encuesta a fin de determinar si verdaderamente podían ser considerados como expertos. A partir del criterio de autovaloración los mismos contestaron la encuesta que aparece en el anexo número 2. La selección realizada se efectuó en atención al comportamiento de las variables siguientes: Investigaciones realizadas vinculadas con la actividad informática. Experiencia en el desarrollo de software, particularmente en tecnología web. Investigaciones relacionadas con el tema de investigación de la presente tesis. 140 La autovaloración realizada por los expertos permite determinar si deben ser considerados como tales a partir del coeficiente de competencia KC y del coeficiente de argumentación KA. Los resultados del coeficiente se muestran en la tabla 1 del anexo número 3. De acuerdo a sus autovaloraciones no se toman en consideración a 5 de los especialistas encuestados, ver anexo número 4. Dentro de los expertos seleccionados, el 2 posee grado científico de máster. De ellos el 23 son profesores a tiempo parciales. A los especialistas que fueron seleccionados como expertos, 20 en total, se les entrego un cuestionario que contenía las principales cuestiones relativas al modelo y al sitio web que aparecen en el anexo número 4. Con el fin de evaluar los aspectos anteriormente mencionados los expertos emitieron sus juicios valorativos a partir de un conjunto de cuestionamientos que se plantean a continuación: 1. Valoración de las dimensiones planteadas en el modelo. 2. Valoración de los métodos científicos utilizados en la elaboración del modelo. 3. Valoración de la eficacia del modelo en la compatibilidad la solución Generada con el IDE Eclipse. 4. Valoración de los módulos diseñados. 5. Valoración del grado de correspondencia entre el modelo y el aplicativo Gráfico. 141 6. Valoración de la misión del aplicativo de desarrollo de interfaces gráficas. Se utilizaron cinco categorías de valoración. 1.- Muy adecuado 2.- Bastante adecuado 3.- Adecuado 4.- Poco adecuado 5.- Inadecuado Una vez obtenida la valoración de los expertos, se procesó la información mediante el software estadístico Excel (2007), el cual arrojó los cálculos de la matriz de frecuencias, las frecuencias acumuladas y frecuencias relativas acumuladas que aparecen en el anexo número 6. Finalmente a través del uso del software estadístico Excel (2007) se determinó la imagen de cada uno de los valores de las celdas de la tabla de frecuencias acumulativas relativas, por la inversa de la curva de la normal (ver anexo 6), se obtienen los puntos de corte donde se concluye, que las preguntas 1, 4 y 6 se evalúan de muy adecuados, el resto de las mismas son evaluados de bastante adecuados. A continuación se muestran los resultados de la valoración de las preguntas por los expertos, de acuerdo con las categorías establecidas. CUADRO Nº. 16 Valoración de las Preguntas por los Expertos. Nº de pregunta Pregunta Categoría 142 1 2 3 4 5 6 Valoración de las dimensiones planteadas en el modelo. Muy adecuada Valoración de los métodos científicos utilizados en Bastante adecuada la elaboración del modelo. Valoración de la eficacia del modelo en la Bastante adecuada compatibilidad la solución generada con el IDE Eclipse. Valoración de los módulos diseñados. Muy adecuada Valoración del grado de correspondencia entre el modelo y el aplicativo gráfico. Bastante Adecuada Valoración de la misión del aplicativo de desarrollo de interfaces gráficas. Muy adecuada Fuente: Elaboración propia. Elaboración: Héctor William Pilligua Robalino. El total de expertos valoran así, de forma positiva, la propuesta tanto en calidad, en la concepción en la concepción de los módulos para la generación de la solución, la compatibilidad de la solución generada en el aplicativo con el IDE eclipse, y concluyeron que se el aplicativo de generación de interfaces gráficas para dispositivos BlackBerry, ayudaría a mejorar la complejidad del desarrollo de las aplicaciones java para los dispositivos móviles BlackBerry. La presente propuesta tiene fundamentos considerables ya que optimizara el desarrollo de las aplicaciones para dispositivos móviles BlackBerry, mejorando el tiempo de desarrollo y disminuyendo la carga cognitiva del desarrollador para optimizar los aplicativos realizados. 143 CAPÍTULO IV MARCO ADMINISTRATIVO Cronograma La dinámica actual requiere del desarrollo de procesos de calidad. Este proceso requiere de la ejecución en tiempo de proyectos lo que garantizará el desarrollo de eficiencia y eficacia en cuanto a la administración de recursos económicos financieros., en este contexto el autor de la presente investigación ha desarrollado el siguiente cronograma. Cronograma de Actividades en función del desarrollo del proyecto 144 Una vez establecido el cronograma se hace necesario establecer formas de búsqueda de financiamiento, lo que garantizará el funcionamiento adecuado del proyecto Presupuesto La búsqueda de la forma de financiar un proyecto puede dar como resultado una variedad bastante importante de opciones diferentes. El evaluador de proyectos debe verse enfrentado, y de hecho así ocurre, con la búsqueda de la mejor alternativa de financiamiento para el proyecto que está evaluando. 145 En el caso objeto de estudio y por las características de la actividad que se desarrolla la fuente de financiamiento que se utilizará es con capital propio, pues en este caso solo se requiere del personal calificado y los medios necesarios para el desarrollo de software. Esta es una tendencia en el desarrollo de nuevas tecnologías, que a la vez favorecen la reducción de costos y la rapidez con que se desarrollan diversas actividades en las organizaciones. Por consiguiente se desglosan a continuación las partidas de Activos y el Capital total que se requiere para dar inicio al negocio CUADRO 17 Proyección Inicio del Negocio Activo Circulante Efectivo $ 700.00 Activos Fijos CPU $ 300.00 Teclado 15.00 Ratón 15.00 Monitor 250.00 Modem 30.00 Cable USB Ca 101 15.00 Equipo Smartphone 350.00 Activos Intangibles Consumo internet $ 200.00 Dominio 180.00 Capital $ 2020.00 Fuente: Héctor William Pilligua Robalino Elaborado: Héctor William Pilligua Robalino 146 Una vez determinados los importes a utilizar referentes a los Activos y el Capital Total, se realizó una proyección del Estado de Resultado para el primer año, el cual incluye la de diferencia de Ingresos con Gastos CUADRO No. 18 Cuadro de Ingresos Ingresos Financiamiento Propio $ 2,500 Fuente: Héctor William Pilligua Robalino Elaborado Por: Héctor William Pilligua Robalino CUADRO No. 19 Cuadro de Egresos Egresos Hardware: CPU Teclado Ratón Monitor Equipo BlackBerry Cable USB Ca 101 $ 250 $ 15 $ 15 $ 250 $ 250 $ 15 Sistema Operativo Win7 $ 700 Software Sistema Operativo Linux Licencia BlackBerry Consumo internet Licencia Windows 0.0 $0 (opcional) $ 30 $ 140 Varios Documentación Cursos de Capacitación Móvil Tiempo empleado Total $ 85 $ 700 $ 50 $ 2,500 Fuente: Héctor William Pilligua Robalino Elaborado Por: Héctor William Pilligua Robalino 147 Ingresos: Estos ingresos serán utilizados para la adquisición de todo lo mencionado en el listado de egresos para proceder con el desarrollo del tema de tesis, estas adquisiciones no se quedaran en la institución educativa, solo se entregara a la institución el proyecto desarrollado Egresos: Constituye todos los materiales e insumos utilizados en el desarrollo del tema de tesis CAPÍTULO V CONCLUSIONES Y RECOMENDACIONES CONCLUSIONES: ¿Se Reducirá el Tiempo de Desarrollo de las Aplicaciones usando una interfaz gráfica? Se pudo concluir que los usuarios finales han optado por tener dispositivos Smartphone, por ello se ve imperativo el desarrollo de aplicaciones para la nueva gama de telefonía móvil, debido a que el desarrollo de aplicaciones para los dispositivos móviles es un área que se ha estado incursionando en los últimos años, la información necesaria no se encuentra en su totalidad 148 disponible, por ello el desarrollo se hace extenso, sin embargo, los desarrolladores optan por herramientas que facilitan el desarrollo de estas aplicaciones. El objetivo de la investigación es reducir el tiempo de desarrollo de las aplicaciones para dispositivos móviles BlackBerry, al facilitar una interface gráfica donde se pueden ubicar los elementos en la pantalla de manera que se ajustar de mejor manera a los requerimientos solicitados por el contratante hacia el desarrollador, al no tener que dedicar tiempo en el desarrollo gráfico, el tiempo de desarrollo es optimizado. ¿Será más factible realizar una interfaz gráfica desarrollando con líneas de código? Con los resultados obtenidos en la encuentra se puede constatar que los desarrolladores prefieren una interfaz que le permitan ver el producto final en el momento de desarrollo. Se pudo constatar que en el desarrollo de interfaces de usuarios utilizando un aplicativo que facilite la ubicación de los elementos y visualizando el resultado final de la aplicación, se pudo constatar que resulta más beneficio para el desarrollador de aplicaciones contar con una herramienta que le permita visualizar el resultado final en el aspecto gráfico y no introducir líneas de código para tener una interfaces de usuario, en ocasiones las interfaces 149 graficas contiene varios elementos y colocar esos objetos en la pantalla mediante líneas de código es más complejo que seleccionar el elemento y ubicarlo donde se adapte a lo solicitado por el cliente. ¿Se entenderá de mejor manera el desarrollo de una aplicación móvil usando una interfaz amigable? Con los resultados obtenidos se pudo apreciar que los desarrolladores al crear aplicaciones, con un entorno gráfico se facilitan la compresión de los elementos utilizados. Se pudo constatar que el desarrollo de una aplicación con una herramienta que genera un código fuente es de ayuda para los desarrolladores ya que el ver la ubicación de los diferentes elementos, ´puede revisar el código y de esta manera poder implementarlo en un IDE que no posea la facilidad de una interfaz gráfica. ¿Sale más factible seleccionar un curso o utilizar una herramienta para auto aprendizaje? Se ha comprobado que a pesar de contar con una herramienta que facilite el desarrollo de las interfaces gráficas, es necesario instruirse en cursos del lenguaje que se está utilizando, para el caso de la tesis realizada , la tecnología J2ME, estos cursos pueden ser vía online o presenciales. 150 RECOMENDACIONES: Para la optimización de los tiempos de desarrollo de aplicaciones para dispositivos móviles BlackBerry usando interfaces graficas se recomienda que el desarrollador tenga una clara idea de la funcionalidad de los diferentes controles que se pueden utilizar en la interface de usuario, se puede obtener esta información con la ayuda de internet. En el desarrollo de las interfaces gráficas, al utilizar una herramienta que facilita la ubicación de los mismos se recomienda que se manejen estándares de desarrollo, lo cual facilita considerablemente el desarrollo de los sistemas, El desarrollo para dispositivos móviles es una área de la programación que cada vez va cogiendo más adeptos, pero la funcionalidad de las aplicaciones para móviles no son las mismas que se realizan en los pc estacionarios, por ello se recomienda tener conceptos básicos claros de la tecnología J2ME y como se la aplica en los diferentes dispositivos, teniendo en cuenta que las aplicaciones java RIM cuentan con sus propias librerías es necesario tener conocimiento de las limitaciones del equipo. Se recomienda cursos de J2ME para conocer los diferentes eventos que se pueden manejar para los diferentes controles que se encuentra en una 151 interfaz de usuario de un dispositivo móvil BlackBerry, estos cursos pueden ser en lugares certificados para estos cursos o puede ser vía online, adicional a esto se recomienda tener clara las diferentes ventajas que se ofrece en cada versión de Sistema Operativo que hay en los dispositivos móviles, para de esta manera tener claro las limitaciones del aplicativo a los que el desarrollador se ve al momento de implementar los aplicativos realizados. BIBLIOGRAFÍA Alonso Álvarez García; José Ángel Morales Grela. (2002). J2ME (Guías Practicas) Miguel Ángel Lozano Ortega. (2005). Programación de Dispositivos Móviles con J2ME Agustín Froufe Quintas; Patricia Jorge Cardenes. ( 2004). J2ME Java 2 Micro Edition: Manual de Usuario y Tutorial Research In Motion Limited (2011). BlackBerry Java SDK. Horacio Daniel Vallejo. (2006). Funcionamientos del teléfono. [En línea]. Recuperado 02 de noviembre del 2012, de http://www.gratisprogramas.org/descargar/telefonia-celular-8-libros-pdfesencial-estudiantes-de-electronicatecnicos/ 152 José Manuel Huidobro. (2001). Manual de Telefonía: Telefonía Fija y Móvil (4ª ED.). Research In Motion. (2013). Herramientas de desarrollo BlackBerry[En Línea] Recuperado 01 Febrero 2013 de http://mx.blackberry.com/software/developer.html Jeff Ferbuson, Brian Pattersson, Jason Beres (2012) La Biblia de C#. Research In Motion. (2013). Guía de Desarrollo. [En Línea] Recuperado el 01 de febrero del 2013 de http://docs.blackberry.com/kokr/developers/deliverables/16725/Start_the_BBSmrtphnSmltr_and_open_a _web_page_607475_11.jsp José Antonio González Seco. (2007). El lenguaje de programación C#. José Antonio González Seco( 2007) LibroCSharp [En Línea] Recuperado de http://dis.um.es/~bmoros/privado/bibliografia/LibroCsharp.pdf Nacho Cabanes (2013) C:Sharp[En Línea] Recuperado 06 de marzo del 2013 de http://chvere.blogspot.com/2011/11/manual-completo-de-c-sharpen-espanol.html 153 ANEXOS Anexo # 1:FLUJO DE PROCESOS 154 Nº 2: Modelo de Procesos Fuente: Héctor William Pilligua Robalino Anexo # 2: ENCUESTA PARA SELECCIÓN DE EXPERTOS Objetivo: Selección de expertos para validar criterios respecto a la propuesta realizadas por el investigador. Estimado especialista(a): Usted ha sido seleccionado para colaborar con la investigación “Interfaces Gráficas para Desarrollo de Aplicaciones Java en BlackBerry, Complejidad del Desarrollo y Propuesta de Ambiente de Desarrollo Gráfico”. En tal sentido se elabora esta encuesta para que la validación cualitativa de la propuesta del prototipo elaborado en la presente investigación. Por ello le pedimos que lea con detenimiento la información que se le solicita y responda con sinceridad todas las preguntas. Muchas Gracias Solicitamos responda las siguientes interrogantes. I. Datos generales del encuestado: 1. Nombre: ___________________________________________________________ 2. Centro al que pertenece: _______________________________________________ 3. Años de experiencia en el desarrollo de software.______________________________ 155 4. Investigaciones realizadas vinculadas de alguna manera con la temática tratada._______________________________________________________ 5. Categoría Científica. ____________________ 6. Grado científico. ____________________ II- Test de Autovaloración del consultado: Evalúe su nivel de dominio acerca de la esfera sobre la cual se le consultó marcando con una cruz sobre la siguiente escala (1: dominio mínimo; 10: dominio máximo) ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ 1 2 3 4 5 6 7 8 9 10 Evalúe la influencia de las siguientes fuentes de argumentación en los criterios valorativos aportados por usted: Fuentes de argumentación Grado de influencia de las fuentes de argumentación Alto Medio Bajo Análisis teóricos realizados por usted. Su propia experiencia. Trabajos de autores nacionales. Trabajos de autores extranjeros. Su conocimiento del estado del problema en el extranjero. Su intuición. Muchas gracias por su colaboración. 156 Anexo # 3: DETERMINACIÓN DEL COEFICIENTE K. Tabla 1. COMPETENCIA DE LOS EXPERTOS. Valores del coeficiente de conocimiento (kc), del coeficiente de argumentación (ka) y coeficiente de competencia (k) de los expertos. Expertos 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Coeficiente de conocimiento (Kc) 0.70 0.80 0,80 0.60 0,80 0,80 0,80 0,70 0,90 O,80 0.60 O,80 0,80 0,80 090 0,70 Coeficiente de argumentación (Ka) 0.90 0.90 1,00 0.80 0,90 0,90 0,90 0,90 1,00 1,00 0.80 1,00 1.00 0,80 0,90 0,70 Coeficiente de competencia (K) 0,80 0.85 0,90 0.70 0,85 0,85 0,85 0,80 0,95 0,90 0.70 0,90 0,90 0,80 0,90 0,70 157 0,70 0,90 0.80 17 0,90 1,00 0,95 18 0.50 070 0.60 19 0,80 0,80 0.80 20 0.80 090 0,85 21 0,40 0,70 0,55 22 0,90 1,00 0,95 23 0.80 1,00 0.90 24 0,80 1,00 0,90 25 El código para la interpretación del coeficiente de competencia de cada experto es el siguiente: Si 0.8< k < 1.0, el coeficiente de competencia es alto. Si 0.5< k < 0.8, el coeficiente de competencia es medio. Si k < 0.5, el coeficiente de competencia es bajo. Nota: De acuerdo al coeficiente de competencia de cada experto, no se consideraron para la valoración los expertos 4, 11, 16, 19 y 22. Anexo # 4: ENCUESTA A LOS EXPERTOS SELECCIONADOS. Objetivo: Valorar cualitativamente el proyecto de Interfaces Gráficas para Desarrollo de Aplicaciones Java en BlackBerry, Complejidad del Desarrollo y Propuesta de Ambiente de Desarrollo Gráfico. Estimado especialista(a): Usted ha sido seleccionado para colaborar con la investigación “Interfaces Gráficas para Desarrollo de Aplicaciones Java en BlackBerry, Complejidad del Desarrollo y Propuesta de Ambiente de Desarrollo Gráfico”. Por ello le pedimos que lea con detenimiento la información que se le solicita y responda con sinceridad todas las preguntas. Muchas Gracias I. Cuestionario sobre la propuesta presentada Para la evaluación de sus criterios acerca de la propuesta presentada (modelo), se indican a continuación varias interrogantes, las cuales contemplan los aspectos que serán objeto de análisis: Responda el cuestionario atendiendo a la siguiente escala: 5. Muy adecuada 1. Inadecuada 4. Bastante adecuada 3 Adecuada 2 Poco adecuada Cuestionario 1. Valoración de las dimensiones planteadas en el modelo. 5 4 3 2 1 2. Valoración de los métodos científicos utilizados en la elaboración del modelo. 5 4 3 2 1 158 3. Valoración de la eficacia del modelo en la compatibilidad la solución generada con el IDE Eclipse. 5 4 3 2 1 2 1 4. Valoración de los módulos diseñados. 5 4 3 5. Valoración del grado de correspondencia entre el modelo y el aplicativo gráfico. 5 4 3 2 1 6. Valoración de la misión del aplicativo de desarrollo de interfaces gráficas. 5 4 3 2 1 Anexo #5 CRITERIOS DE LOS EXPERTOS CONSULTADOS. MATRIZ DE FRECUENCIAS DE LA ENCUESTA Tabla 2. TABLA DE FRECUENCIAS ABSOLUTAS. Cuestionario P-1 P-2 P-3 P-4 P-5 P-6 C1 Muy adecuada 13 2 1 16 2 14 C2 C3 C4 C5 Bastante Poco No TOTAL adecuada Adecuada adecuada adecuada 7 20 9 3 5 20 14 3 20 2 5 20 11 1 2 4 20 2 20 2 1 1 Tabla 3. TABLA DE FRECUENCIAS ABSOLUTAS ACUMULADAS P-1 P-2 P-3 P-4 P-5 P-6 C-1 13 2 1 16 2 14 C-2 18 9 17 14 20 9 C-3 20 15 11 18 12 9 C-4 20 15 15 20 10 20 C-5 20 20 20 20 20 20 Tabla 4.TABLA DE FRECUENCIAS RELATIVAS ACUMULADA 159 C-1 C-2 0,65 0,10 0,05 0,80 0,10 0,70 P-1 P-2 P-3 P-4 P-5 P-6 C-3 0.90 0,45 0,85 0,70 1.00 0,45 C-4 1,00 0,75 0,55 0,90 0,60 0,45 C-5 1.00 1.00 1.00 1.00 1.00 1.00 1,00 0,75 0,75 1,00 0,50 1,00 Anexo #6: IMAGEN DE CADA UNO DE LOS VALORES DE LAS CELDAS DE LA TABLA DE FRECUENCIAS ACUMULATIVAS RELATIVAS, POR LA INVERSA DE LA CURVA NORMAL Tabla 5. IMAGEN DE CADA UNO DE LOS VALORES. P-1 P-2 P-3 P-4 P-5 P-6 ∑ Puntos de corte C-1 0,13 -1,64 -1,64 0,67 -1,64 0,67 C-2 3,48 0,00 0,39 1,64 0,13 1,28 C-3 3,48 0,25 0,52 3,48 0,25 3,48 C-4 3,48 0,67 0,67 3,48 0,52 3,48 -3,46 6,92 11,47 12,31 -0,58 1,15 1,91 2,05 Suma Promedio 2,64 10,57 -0,18 -0,72 -0,02 -0,06 2,32 9,28 -0,19 -0,74 2,23 8,92 N-P -1,73 1,09 0,92 -1,41 1,09 -1,32 27,24 N= 27.24/6x5= 0,9080 Los puntos de corte sirven para determinar la categoría o grado de adecuación de cada pregunta, según la opinión de los expertos consultados. Con ello se opera del modo siguiente: Muy adecuada -0,58 Bastante adecuada 1,15 Adecuada Poco adecuada 1,91 2,05 No adecuada 160 Nota: De acuerdo a los puntos de corte se valora positivamente el proyecto de Interfaces Gráficas para Desarrollo de Aplicaciones Java en BlackBerry, Complejidad del Desarrollo y Propuesta de Ambiente de Desarrollo Gráfico . Anexo # 7: Objetivo: Recolectar información de las personas que se dedican al desarrollo de aplicaciones, que utilicen los diferentes tipos de lenguajes de programación y comprobar el nivel de conocimiento de programación orientada a objetos que poseen. Instructivo: Para responder adecuadamente sírvase escribir el número de la alternativa seleccionada en el cuadrado que se encuentra a la derecha. 1) Condición del informante(Empresa donde desarrolla aplicaciones). 1. Consultor informático 2. Desarrollador en entidad financiera 3. Estudiante de Ingeniería en sistemas 4. Desarrollador independiente 2) ¿Utiliza Dispositivos BlackBerry? 1. Si 2. No 3) ¿nivel de adaptación a nuevas herramientas de desarrollo? 1. Complicado 2. Con tiempo considerable 3. Adaptación rápida 4. No se complica la adaptación. 4) ¿Qué lenguaje de Programación utiliza más? 1. .Net 2. Java 3. Oracle-Pl-SQL, SQLSERVER 4. Aplicaciones Web 5. Cobol 5) ¿Ha desarrollado Aplicaciones con tecnología J2ME? 161 1. 2. Si No 6) ¿Conocimiento de Herramientas para desarrollo de aplicaciones para dispositivos móviles? 1. Muchas 2. Algunas 3. Pocas 4. ninguna 7) ¿Uso de IDE para desarrollo de aplicaciones? 1: Siempre 2: Algunas veces 3: DMuy Poco 4: nunca 8) ¿Desarrollo Frecuente de aplicaciones informáticas? 1. Empresarial 2. Oficina 3. Juegos 4. Varios 9) ¿Qué sistema Operativo Móvil más utiliza? 1. Android 2. IOS 3. RIM BlackBerry 4. Symbian 5. Windows Mobile 6. Otros 10) ¿Herramienta de Programación que más utiliza para el desarrollo de aplicaciones móviles 1: Eclipse 2: NetBeans 3: .NEY 4: Programación web 5. Otros 162 MANUAL TECNICO 1 Indice General Introducción 5 Objetivo del Manual 5 Modelo de Desarrollo Espiral 6 Determinar Objetivos 7 Análisis del Riesgo 7 Desarrollar y verificar 7 Planificar 7 Angular 7 Radial 7 Principios básicos del Modelo Espiral 8 Diagramas UML 8 Diagramas de Casos de Usos 8 Definición de actores 8 Diagrama de Colaboración 12 Diagrama de Contexto 13 Diagrama de Eventos 13 Diagrama de Proceso 13 Diagrama de Secuencias 15 EL FRAMEWORK 18 ESTRUCTURA 28 Contenido del archivo org.eclipse.jdt.core.prefs 20 1 Contenido del archivo .classpath 20 Contenido del archivo .proyect 20 Contenido del archivo BlackBerry_App_Descriptor.xml 21 DATOS TÉCNICOS DEL APLICATIVO 22 Modelo Entidad Relación 23 Diccionario de Datos 23 CODIFICACIÓN DE COMPONENTES 23 Codificación AppConfig 165 2 Indice de Gráficos GRAFICO 1 Gráfico de Programación Espiral 7 GRAFICO 2 Caso de Uso 1er Nivel: Creación de interfaz Grafica 10 GRAFICO 3 Caso de Uso 2do. Nivel: Generación de Solución 11 GRAFICO 4 Diagrama de Colaboración 12 GRAFICO 5 Diagrama de contexto nivel 0 – AGBB 13 GRAFICO 6 Diagrama de colaboración Nivel Superior 13 GRAFICO 7 Diagrama de Eventos 14 GRAFICO 8 Diagrama de Proceso 14 GRAFICO 9 Carpeta Plantilla 14 GRÁFICO 10 Contenido Plantillas 19 GRAFICO 11 Contenido de Carpeta Setting 19 GRAFICO 12 Icon App 21 3 Índice de Cuadros CUADRO 1 Actor 1 9 CUADRO 2 Actor 2 9 CUADRO 3 Descripción de Casos de Uso 1 10 CUADRO 4 Definición de 2do Caso de Uso 11 CUADRO 5 Características Generales 22 4 CAPITULO 1 MANUAL TÉCNICO INTRODUCCIÓN La finalidad de este documento es explicar las distintas tecnologías involucradas en el desarrollo de nuestra aplicación de escritorio. Las Herramientas utilizadas son C# hecha con aplicaciones Windows. Para el desarrollo del aplicativo fue necesario instalar visual estudio .net 2012 con el framework 3.5 o superior. El aplicativo fue desarrollado para sistemas operativos Windows vista o superior. Paquete de software necesarios Framework 3.5 o superior Java jdk1.7.0 BlackBerry Java Plug-in 1.5.2 Sistema Operativo Windows vista o superior. Entre los diferentes lenguajes que se encuentran en visual estudio .net se utilizara el lenguaje C# con generación de archivos, se generara un archivo resultado que es un código java, para la compilación del código generado se utilizara java versión 1.7.0. Existen varios plug-in para desarrollo de aplicaciones en lenguaje java para BlackBerry, pero que utilizaremos será el 1.5.2 el cual se encuentra con él la versión 5 de compilador 6 de java para BlackBerry. OBJETIVO DEL MANUAL Estos manuales tienen como principales objetivos brindar a los usuarios finales y una concepción técnica del sistema AGBB (Ambiente Grafico para BlackBerry), en los siguientes aspectos: Descripción del funcionamiento de los principales procesos llevado a cabo por el usuario final. Descripción de las validaciones requeridas para el correcto uso de la aplicación Descripción de los diferentes modelos utilizados. MODELO DE DESARROLLO ESPIRAL Fue desarrollado por Boehm en 1986, este es un modelo de proceso evolutivo. Es un generador de modelo de proceso guiado por el riesgo que se emplea para conducir sistemas intensivos de ingeniería de software concurrente y a la vez con muchos usuarios. Se caracteriza principalmente por: Un enfoque cíclico para el crecimiento incremental del grado de definición e implementación de un sistema, mientras que disminuye su grado de riesgo. Un conjunto de puntos de fijación para asegurar el compromiso del usuario con soluciones de sistema que sean factibles y mutuamente satisfactorias. 6 El proceso de cada vuelta es: o Determinar Objetivos: establecer las necesidades que envuelven el programa. o Análisis del Riesgo: Se estudian todos los riesgos potenciales y se seleccionan una o varias alternativas propuestas para reducir o eliminar los riesgos. o Desarrollar y verificar: programar e ir probando el programa para ir disminuyendo los errores. o Planificar: Se planifican los siguientes pasos para volver al inicio de la espiral, mantiene dos dimensiones: Angular.- avance del Software dentro de un ciclo. Radial.- aumento del coste del Proyecto, ya que con cada nueva interacción se pasa más tiempo desarrollando. Al ser un modelo de Ciclo de Vida orientado al riesgo se dice que uno de los aspectos fundamentales de su éxito radica en que el equipo que lo aplique sea capaz de detectar y catalogar correctamente dicho riesgo. Este sistema es muy utilizado en proyectos largos, que necesitan constantes cambios. GRAFICO 1 Gráfico de Programación Espiral 7 Principios básicos del Modelo Espiral Decidir qué problema se quiere resolver antes de ir a resolverlo. Examinar tus múltiples alternativas de acción y elegir una de las más convenientes. Evaluar qué tienes hecho y qué tienes que haber aprendido después de hacer algo. Conocer los niveles de riesgo, que tendrás que tolerar. Diagramas UML Con el objeto de manejar una mejor organización y tener un soporte teórico del sistema he considerado necesario incluir diagramas que pertenecen al lenguaje de modelado visual (UML Lenguaje Unificado de Modelado). Diagramas de Casos de Usos Sirve como una técnica para la captura de requisitos potenciales de un nuevo sistema o actualización de software. Cada caso de uso proporciona uno o más escenarios que indican cómo debería interactuar el sistema con el usuario o con otro sistema para conseguir un objetivo específico. Definición de actores Los actores son los diferentes participantes que se encuentran en el uso del sistema, dependiendo del sistema desarrollado, los roles de estos actores pueden variar, 8 CUADRO 1 Actor 1 ACT-01 Desarrollador de Aplicaciones Descripción Este actor es el encargado de desarrollar los diferentes requerimientos solicitados por los usuarios propietarios. Caso de Uso Desarrollo de aplicación en AGBB Propósito Desarrollo de la aplicación para el dispositivo móvil BlackBerry. CUADRO 2 Actor 2 ACT-02 Descripción Usuario Propietario Este actor es el propietario del dispositivo móvil donde se estará ejecutando el aplicativo resultado desarrollado por el usuario desarrollador de aplicaciones, este usuario en la mayoría de los casos es el propietario del dispositivo. Caso de Uso Uso de aplicación en AGBB Propósito Dar uso al aplicativo desarrollado en el AGBB. 9 GRAFICO 2 Caso de Uso 1er Nivel: Creación de interfaz Grafica Diseño de Interfase grafica CUADRO 3 Descripción de Casos de Uso 1 Caso de uso Creación de Interfaz grafica Actores Usuario, Aplicativo, sistema de archivos Tipo Básico Descripción El usuario desarrolla la interfaz gráfica , una vez desarrollado generara el código, modificara lo que se necesite y se compilara, una vez compilado se desarrolla la solución para ser utilizada en eclipse 10 GRAFICO 3 Caso de Uso 2do. Nivel: Generación de Solución Proceso de Generacion de solucion en Eclipse CUADRO 4 Definición de 2do Caso de Uso Caso de uso Generación de solución hacia móvil Actores Usuario, Solución generada, aplicativo eclipse , dispositivo móvil Tipo Básico Descripción Este caso el desarrollador utiliza la solución generada en el aplicativo inicial, esto es importado en eclipse y se genera el archivo final para ser utilizado en el dispositivo BlackBerry. 11 GRAFICO 4 Diagrama de Colaboración 12 Diagrama de Contexto GRAFICO 5 Diagrama de contexto nivel 0 - AGBB GRAFICO 6 Diagrama de colaboración Nivel Superior 13 GRAFICO 7 Diagrama de Eventos Usuario Aplicativo AGBB Aplicativo en movil Solucion Generada Aplicativo Eclipse Diagrama de Proceso GRAFICO 8 Diagrama de Proceso Se genera el código con ayuda de la AGBB Se modifica el código y se compila Se genera el sistema de archivos a ser importado Se realiza la carga de la solución a eclipse Se genera la solución final al dispositivo. 14 Diagrama de secuencias Con la elaboración del diagrama de secuencias se pretende mostrar los diversos objetos y sus interacciones por medio de mensajes que se envían en el momento que son considerados como importantes para ellos 15 16 Llena propiedades 17 EL FRAMEWORK Nuestro proyecto se vio la necesidad de utilizar un Framework profesional, ya que el desarrollo del proyecto se basa en un aplicativo de escritorio, este aplicativo está utilizando lenguaje C#, el cual se encuentra entre las librerías del paquete indicado, se manejara el uso de archivos y directorios. ESTRUCTURA La estructura del aplicativo se desarrollo de manera sencilla para el fácil entendimiento del mismo, para ello se tiene un esquema de clase base y demás clases derivadas. Aclaramos que no solo creamos formularios, sino implementamos funcionalidades para el desarrollo de los procesos necesarios para la generación de las soluciones a ser importadas en el IDE Eclipse En el aplicativo se gestionaran Archivos Formularios Generación de código java Edición de código java Compilaciones Creación de soluciones Se necesita tener un aplicativo directorio que es la siguiente C:\FuentesDesarrolladosTHWPR Se necesita tener la carpeta Plantillas 18 GRAFICO 9 Carpeta Plantilla La carpeta Plantillas se necesita tener la organización de los siguientes archivos: GRÁFICO 10 Contenido Plantillas GRAFICO 11 Contenido de Carpeta Setting 19 Contenido del archivo org.eclipse.jdt.core.prefs #Sat Dec 01 22:45:47 COT 2012 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.4 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore org.eclipse.jdt.core.compiler.source=1.3 Este archivo no se debe modificar, de modificarse la compilación se generara de manera errónea Contenido del archivo .classpath <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="src" path="res"/> <classpathentry kind="con" path = "org.eclipse.jdt.launching.JRE_CONTAINER/net.rim.ejde.BlackBerryVMInstallType/BlackBerry JRE 7.1.0"/> <classpathentry kind="output" path="bin"/> </classpath> Contenido del archivo .proyect <?xml version="1.0" encoding="UTF-8"?> <projectDescription> <name>[[NOMBREAPP]]</name> <comment></comment> <projects> </projects> <buildSpec> <buildCommand> <name>net.rim.ejde.internal.builder.BlackBerryPreprocessBuilder</name> <arguments> 20 </arguments> </buildCommand> <buildCommand> <name>net.rim.ejde.internal.builder.BlackBerryResourcesBuilder</name> <arguments> </arguments> </buildCommand> <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand> </buildSpec> <natures> <nature>net.rim.ejde.BlackBerryPreProcessNature</nature> <nature>net.rim.ejde.BlackBerryProjectCoreNature</nature> <nature>org.eclipse.jdt.core.javanature</nature> </natures> </projectDescription> Contenido del archivo BlackBerry_App_Descriptor.xml <!-- This file has been generated by the BlackBerry Plugin for Eclipse v3.7.100. --> <Properties ModelVersion="1.1.2"> <General Title="" Version="1.0.0" Vendor="BlackBerry Developer" Description=""/> <Application Type="BlackBerry Application" MainMIDletName="" MainArgs="" HomeScreenPosition="0" StartupTier="7" IsSystemModule="false" IsAutostartup="false"/> <Resources hasTitleResource="false" TitleResourceBundleName="" TitleResourceBundleRelativePath="" TitleResourceBundleClassName="" TitleResourceBundleKey="" DescriptionId=""> <Icons> <Icon CanonicalFileName="res/img/[[ICONOAPP]]" IsFocus="false"/> </Icons> </Resources> <KeywordResources KeywordResourceBundleName="" KeywordResourceBundleRelativePath="" KeywordResourceBundleClassName="" KeywordResourceBundleKey=""/> <Compile OutputCompilerMessages="false" ConvertImages="true" CreateWarningForNoExportedRoutine="true" CompressResources="false" AliasList=""> <PreprocessorDefines/> </Compile> <Packaging PreBuildStep="" PostBuildStep="" CleanStep="" 21 OutputFileName="[[NOMBREAPP]]" OutputFolder="deliverables" GenerateALXFile="true"> <AlxFiles/> </Packaging> <HiddenProperties> <ClassProtection/> <PackageProtection/> </HiddenProperties> <AlternateEntryPoints/> </Properties> GRAFICO 12 Icon App DATOS TÉCNICOS DEL APLICATIVO Plataforma: Windows Vista o Superior. CUADRO 5 Características Generales Espacio en Disco 15.1 MB Banda Ancho No Aplica Dominios Compartidos No Aplica Constructor de Sitios No aplica Soporte 24x7 No Aplica Backups Programados No Aplica Mysql Bases No Aplica 22 Cuentas FTP No Aplica Php5 No Aplica Streaming Audio/Video No Aplica Cuentas Pop3 No Aplica WebMail No Aplica Administración Cpanel No Aplica phpMyAdmin No Aplica Logs de Errores No Aplica Ip Dedicada No Aplica Máximo de Conexiones No Aplica Simultaneas a base de datos Modelo Entidad Relación No Aplica Diccionario de Datos No Aplica CODIFICACIÓN DE COMPONENTES Objeto Base. using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; 23 using System.Windows.Forms; namespace TesisEjemplo1 { class ObjetoBase : Panel { string ls_nombreControl; string ls_tipo = ""; int ln_posX = 0; int ln_posY = 0; int ln_ancho = 0; int ln_alto = 0; bool lb_movible = false; string ls_contenido = ""; bool lb_poseeFuncionClick = false; string ls_funcionClick = ""; public bool lb_poseeEstilo = false; string textoEstilo = ""; public bool lb_poseeOtraFamiliaTexto = false; string texto_nombreFamilia = ""; public bool lb_otrotamanioTexto = false; string te4xto_tamanioTexto = ""; #region "modifica las propiedades basicas de cada objeto" /// <summary> /// controla el nombre del objeto /// </summary> public string _Nombrecontrol { set { ls_nombreControl = value; } get { return ls_nombreControl; } } /// <summary> /// controla el tipo del objeto /// </summary> public string _TipoControl { set{ ls_tipo = value; } get { return ls_tipo; } } /// <summary> /// controla la posicion horizontal del objeto /// </summary> public int _posX { 24 set { this.ln_posX = this.Left; } get { return this.Left; } } /// <summary> /// controla la posicion vertiacl del objeto /// </summary> public int _posY { set { this.ln_posY = this.Top; } get { return this.Top; } } /// <summary> /// controla el ancho del objeto /// </summary> public int _ancho { set { ln_ancho = value; } get { return ln_ancho; } } /// <summary> /// controla el alto del objeto /// </summary> public int _alto { set { ln_alto = value; } get { return ln_alto; } } public bool _AccionClick { set { this.lb_poseeFuncionClick = value; 25 } get { return lb_poseeFuncionClick; } } public string _FuncionClick { set { this.ls_funcionClick = value; } get { return this.ls_funcionClick; } } public string _NombreFamiliaTexto { set { this.lb_poseeOtraFamiliaTexto = true; this.texto_nombreFamilia = value; } get { return this.texto_nombreFamilia; } } public string _NombreEstiloTexto { set { this.lb_poseeEstilo = true; this.textoEstilo = value; } get { return this.textoEstilo; } } public string _TamanioTexto { set { this.lb_otrotamanioTexto = true; this.te4xto_tamanioTexto = value; } get { return te4xto_tamanioTexto; } } 26 #endregion private void InitializeComponent() { this.SuspendLayout(); // // ObjetoBase // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion Panel AutoCompletar using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelAutoCompletar: ObjetoBase { public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public PanelAutoCompletar(string texto) { _TipoControl = "TEXTOAUTOCOMPLETAR_"; _alto = 20; seteaFormato(); } public PanelAutoCompletar() { _TipoControl = "TEXTOAUTOCOMPLETAR_"; _alto = 20; seteaFormato(); } public PanelAutoCompletar(bool conColor) { this.BackColor = Color.White; _TipoControl = "TEXTOAUTOCOMPLETAR_"; 27 _alto = 20; seteaFormato(); } public void seteaFormato() { this.BackColor = Color.White; _ancho = 100; _alto = 20; this.Width = _ancho; this.Height = _alto; this.Cursor = Cursors.SizeAll; } public Color ColorFondo { set { this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta { set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void cambiarColorFondo(Color color) { this.BackColor = color; } private void InitializeComponent() { this.SuspendLayout(); // // PanelAutoCompletar // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } 28 Codificacion PanelBoton using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelBoton : ObjetoBase { string ls_TextoBoton = ""; Label Etiqueta = new Label(); public string _Texto { set { this.ls_TextoBoton = value; } get { return ls_TextoBoton; } } public PanelBoton() { _TipoControl = "BOTON"; ColocaEtiqueta(); } public PanelBoton(bool conColor) { this.BackColor = Color.Gray; _TipoControl = "BOTON"; ColocaEtiqueta(); } public PanelBoton(string texto) { this._TipoControl = "BOTON"; _Texto = texto; ColocaEtiqueta(); } public void llenaFuncionClick(string contenidoFuncion) { _AccionClick = true; _FuncionClick = contenidoFuncion; } public void ColocaEtiqueta() { Etiqueta.Text = "Etiqueta"; 29 Etiqueta.ForeColor = Color.White; Etiqueta.BackColor = Color.Gray; Etiqueta.Width = 70; Etiqueta.Left = 10; Etiqueta.TextAlign = ContentAlignment.MiddleCenter; Etiqueta.Cursor = Cursors.Default; this.Cursor = Cursors.SizeAll; this.Controls.Add(Etiqueta); this._ancho = 90; this._alto = 20; this.Width = 90; this.Height = 20; } public string TextoEtiqueta { set { this.Etiqueta.Text = value; } get { return this.Etiqueta.Text; } } private void InitializeComponent() { this.SuspendLayout(); // // PanelBoton // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } public void cambiaEtiquetaVisible(string textoMuestra) { try { this.Etiqueta.Text = textoMuestra; } catch (Exception ex) { this.Etiqueta.Text = ex.Message; } } } } Codificacion PanelBrowserField using System; 30 using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelBrowserField: ObjetoBase { bool lb_noDefecto = false; string ls_cadenaUrl = "http://www.google.com"; public string UrlVisitaInicial { set { this.lb_noDefecto = true; ls_cadenaUrl = value; } get { return ls_cadenaUrl; } } public PanelBrowserField() { _TipoControl = "BROWSER"; this.BackColor = Color.WhiteSmoke; this._alto = 100; this._ancho = 100; this.Width = this._ancho; this.Height = this._alto; this.Cursor = Cursors.SizeAll; this.BackgroundImageLayout = ImageLayout.Stretch; this.BackgroundImage = global::TesisEjemplo1.Properties.Resources.MensajeControslWeb; } } } Codificacion PanelCajaTexto using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelCajatexto : ObjetoBase { 31 public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public PanelCajatexto(string texto) { _TipoControl = "CAJATEXTO"; seteaFormato(); } public PanelCajatexto() { _TipoControl = "CAJATEXTO"; seteaFormato(); } public PanelCajatexto(bool conColor) { this.BackColor = Color.White; _TipoControl = "CAJATEXTO"; seteaFormato(); } public void seteaFormato() { this.BackColor = Color.White; _ancho = 100; _alto = 20; this.Width = _ancho; this.Height = _alto; this.Cursor = Cursors.SizeAll; } public Color ColorFondo { set { this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta { set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } 32 public void cambiarColorFondo(Color color) { this.BackColor = color; } private void InitializeComponent() { this.SuspendLayout(); // // PanelCajatexto // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion PanelCampoFecha using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelCampoFecha:ObjetoBase { public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public PanelCampoFecha(string texto) { _TipoControl = "CAMPOFECHA"; seteaFormato(); } public PanelCampoFecha() { _TipoControl = "CAMPOFECHA"; seteaFormato(); } public PanelCampoFecha(bool conColor) { this.BackColor = Color.White; _TipoControl = "CAMPOFECHA"; seteaFormato(); } 33 public void seteaFormato() { this.BackColor = Color.White; _ancho = 100; _alto = 20; this.Width = _ancho; this.Height = _alto; this.Cursor = Cursors.SizeAll; this.BackgroundImageLayout = ImageLayout.Stretch; this.BackgroundImage = global::TesisEjemplo1.Properties.Resources.CampoFecha; } public Color ColorFondo { set { this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta { set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void cambiarColorFondo(Color color) { this.BackColor = color; } private void InitializeComponent() { this.SuspendLayout(); // // PanelCampoFecha // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } 34 Codificacion Panel Campo Imagen using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelCampoImagen: ObjetoBase { string nombreImagen = ""; string rutaImagenTmp = ""; PictureBox imagenMuestra = new PictureBox(); public PanelCampoImagen() { _TipoControl = "IMAGEN"; this.BackColor = Color.WhiteSmoke; this._alto = 100; this._ancho = 100; this.Width = this._ancho; this.Height = this._alto; this.Cursor = Cursors.SizeAll; /*imagenMuestra.Width = 90; imagenMuestra.Height = 90; imagenMuestra.Left = 5; imagenMuestra.Top=5; imagenMuestra.Cursor = Cursors.Default; imagenMuestra.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.Controls.Add(imagenMuestra);*/ } public string rutaImagentemporal { set { rutaImagenTmp = value; this.imagenMuestra.ImageLocation = rutaImagenTmp; } get { return rutaImagenTmp; } } public string NombreImagenVer { set { nombreImagen = value; } get { return nombreImagen; } 35 } public int altoImagen { set; get; } public int anchoImagen { set; get; } public bool redimencionaImagen(int alto, int ancho) { if(alto - 6 >1 && ancho - 6 > 1) { this.Width = ancho; this.Height = alto; this.imagenMuestra.Width = ancho-6; this.imagenMuestra.Height = alto-6; _ancho = ancho; _alto = alto; return true; } else { return false; } } private void InitializeComponent() { this.SuspendLayout(); // // PanelCampoImagen // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion PanelCampoOpcion using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; 36 using System.Windows.Forms; namespace TesisEjemplo1 { class PanelCampoOpcion : ObjetoBase { private Microsoft.VisualBasic.PowerPacks.ShapeContainer shapeContainer1 = new Microsoft.VisualBasic.PowerPacks.ShapeContainer(); private Microsoft.VisualBasic.PowerPacks.RectangleShape rectangeShape1 = new Microsoft.VisualBasic.PowerPacks.RectangleShape(); string ls_textoEtiqueta = ""; Label lblEtiqueta = new Label(); string nombreGrupoOpcion = "Grupo1"; public string _Texto { set { this.ls_textoEtiqueta = value; } get { return this.ls_textoEtiqueta; } } public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public PanelCampoOpcion(string contenido) { _TipoControl = "OPCION"; seteaFormato(contenido); } public PanelCampoOpcion() { _TipoControl = "OPCION"; seteaFormato("Etiqueta"); } public PanelCampoOpcion(bool conColor) { this.BackColor = Color.White; _TipoControl = "OPCION"; seteaFormato("Etiqueta"); } public void llenaFuncionClick(string contenidoFuncion) { } public Color ColorFondo { set { this.poseeColorfondo = true; this.coloFondo = value; 37 } get { return coloFondo; } } public Color ColorEtiqueta { set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void seteaFormato(string contenido) { ColocaImagen(); this.lblEtiqueta.Text = contenido; lblEtiqueta.BackColor = Color.Transparent; lblEtiqueta.Cursor = Cursors.Default; lblEtiqueta.Left = 13; this.Controls.Add(lblEtiqueta); _Texto = contenido; this.Cursor = Cursors.SizeAll; this.BackColor = Color.Transparent; this._ancho = 100; this._alto = 20; this.Width = _ancho; this.Height = _alto; lblEtiqueta.Width = 70; } public void cambiaEtiquetaVisible(string textoMuestra) { try { this.lblEtiqueta.Text = textoMuestra; } catch (Exception ex) { this.lblEtiqueta.Text = ex.Message; } } public void cambiarColorEtiqueta(Color color) { this.lblEtiqueta.ForeColor = color; } public void cambiarColorFondo(Color color) { this.lblEtiqueta.BackColor = color; this.BackColor = color; 38 } public void cambiaFamiliaTexto(string nomrbreFamilia) { try { //this.lblEtiqueta.Font = new System.Drawing.Font(nomrbreFamilia, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblEtiqueta.Font = new System.Drawing.Font(nomrbreFamilia, 8.25F, this.lblEtiqueta.Font.Style, System.Drawing.GraphicsUnit.Point, ((byte)(0))); } catch (Exception ex) { } } public void cambiarEstiloTexto(string nombreEstilo) { try { switch (nombreEstilo) { case "ANTIALIAS_LOW_RES": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_NONE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_STANDARD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_SUBPIXEL": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "APPLICATION": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ARABIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ARMENIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BENGALI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BOLD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BROKEN_LINE_UNDERLINED": 39 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CJK_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CURSIVE_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CYRILLIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "DEVANAGARI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "DOTTED_UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ETHIOPIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "EXTRA_BOLD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "FANTASY_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GEORGIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GREEK_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GUID_FONT_CHANGED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GUJARATI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GURMUKHI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HANGUL_SCRIPT": 40 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HEBREW_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HIRAGANA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ITALIC": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KANNADA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KATAKANA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KHMER_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "LAO_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "LATIN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MALAYALAM_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MONGOLIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MYANMAR_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ORIYA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "PLAIN": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SANS_SERIF_STYLE": 41 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SERIF_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SERIF_STYLE_MASK": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SINHALA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "STRIKE_THROUGH": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Strikeout, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TAMIL_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TELUGU_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "THAI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TIBETAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "UNSPECIFIED_SERIF_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "WAVY_UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; } } catch (Exception ex) { } } public void modificaTamanioTexto(string tamanio) { try 42 { this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, float.Parse(tamanio), this.lblEtiqueta.Font.Style, System.Drawing.GraphicsUnit.Point, ((byte)(0))); } catch (Exception ex) { } } public string GrupoOpcion{ set { this.nombreGrupoOpcion = value; } get { return this.nombreGrupoOpcion; } } public void ColocaImagen() { PictureBox pbx = new PictureBox(); pbx.SizeMode = PictureBoxSizeMode.StretchImage; pbx.Image = global::TesisEjemplo1.Properties.Resources.Option; pbx.Width = 15; pbx.Height = 15; pbx.Top = 0; pbx.Left = 0; this.Controls.Add(pbx); } private void InitializeComponent() { this.SuspendLayout(); // // PanelCampoOpcion // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion PanelCampoMapa using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 43 { class PanelCamposMapa : ObjetoBase { public PanelCamposMapa() { _TipoControl = "MAPA"; this.BackColor = Color.WhiteSmoke; this._alto = 100; this._ancho = 100; this.Width = this._ancho; this.Height = this._alto; this.Cursor = Cursors.SizeAll; this.BackgroundImageLayout = ImageLayout.Stretch; this.BackgroundImage = global::TesisEjemplo1.Properties.Resources.MensajeControslMapa; } } } Codificacion PanelCheckBox using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelCheckBox: ObjetoBase { private Microsoft.VisualBasic.PowerPacks.ShapeContainer shapeContainer1= new Microsoft.VisualBasic.PowerPacks.ShapeContainer(); private Microsoft.VisualBasic.PowerPacks.RectangleShape rectangeShape1 = new Microsoft.VisualBasic.PowerPacks.RectangleShape(); string ls_textoEtiqueta = ""; Label lblEtiqueta = new Label(); public string _Texto { set { this.ls_textoEtiqueta = value; } get { return this.ls_textoEtiqueta; } } public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; 44 Color colorEtiqueta; public PanelCheckBox(string contenido) { _TipoControl = "CHECKBOX"; seteaFormato(contenido); } public PanelCheckBox() { _TipoControl = "CHECKBOX"; seteaFormato("Etiqueta"); } public PanelCheckBox(bool conColor) { this.BackColor = Color.White; _TipoControl = "CHECKBOX"; seteaFormato("Etiqueta"); } public void llenaFuncionClick(string contenidoFuncion){ } public Color ColorFondo { set{ this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta{ set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void seteaFormato(string contenido) { ColocaImagen(); this.lblEtiqueta.Text = contenido; lblEtiqueta.BackColor = Color.Transparent; lblEtiqueta.Cursor = Cursors.Default; lblEtiqueta.Left = 13; this.Controls.Add(lblEtiqueta); _Texto = contenido; this.Cursor = Cursors.SizeAll; this.BackColor = Color.Transparent; this._ancho = 100; 45 this._alto = 20; this.Width = _ancho; this.Height = _alto; lblEtiqueta.Width = 70; } public void cambiaEtiquetaVisible(string textoMuestra) { try { this.lblEtiqueta.Text = textoMuestra; } catch (Exception ex) { this.lblEtiqueta.Text = ex.Message; } } public void cambiarColorEtiqueta(Color color) { this.lblEtiqueta.ForeColor = color; } public void cambiarColorFondo(Color color) { this.lblEtiqueta.BackColor = color; this.BackColor = color; } public void cambiaFamiliaTexto(string nomrbreFamilia) { try { //this.lblEtiqueta.Font = new System.Drawing.Font(nomrbreFamilia, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblEtiqueta.Font = new System.Drawing.Font(nomrbreFamilia, 8.25F, this.lblEtiqueta.Font.Style, System.Drawing.GraphicsUnit.Point, ((byte)(0))); } catch (Exception ex) { } } public void cambiarEstiloTexto(string nombreEstilo) { try { switch (nombreEstilo) { case "ANTIALIAS_LOW_RES": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_NONE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_STANDARD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_SUBPIXEL": 46 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "APPLICATION": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ARABIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ARMENIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BENGALI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BOLD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BROKEN_LINE_UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CJK_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CURSIVE_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CYRILLIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "DEVANAGARI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "DOTTED_UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ETHIOPIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "EXTRA_BOLD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "FANTASY_STYLE": 47 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GEORGIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GREEK_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GUID_FONT_CHANGED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GUJARATI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GURMUKHI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HANGUL_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HEBREW_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HIRAGANA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ITALIC": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KANNADA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KATAKANA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KHMER_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "LAO_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "LATIN_SCRIPT": 48 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MALAYALAM_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MONGOLIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MYANMAR_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ORIYA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "PLAIN": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SANS_SERIF_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SERIF_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SERIF_STYLE_MASK": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SINHALA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "STRIKE_THROUGH": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Strikeout, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TAMIL_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TELUGU_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "THAI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TIBETAN_SCRIPT": 49 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "UNSPECIFIED_SERIF_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "WAVY_UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; } } catch (Exception ex) { } } public void modificaTamanioTexto(string tamanio) { try { this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name,float.Parse(tamanio), this.lblEtiqueta.Font.Style, System.Drawing.GraphicsUnit.Point, ((byte)(0))); } catch (Exception ex) { } } public void ColocaImagen(){ PictureBox pbx = new PictureBox(); pbx.SizeMode = PictureBoxSizeMode.StretchImage; pbx.Image = global::TesisEjemplo1.Properties.Resources.Check; pbx.Width = 15; pbx.Height = 15; pbx.Top = 0; pbx.Left = 0; this.Controls.Add(pbx); //this.shapeContainer1.Location = new System.Drawing.Point(0, 0); //this.shapeContainer1.Margin = new System.Windows.Forms.Padding(0); //this.shapeContainer1.Name = "shapeContainer1"; //this.shapeContainer1.Shapes.AddRange(new Microsoft.VisualBasic.PowerPacks.Shape[] {this.rectangeShape1}); //this.shapeContainer1.Size = new System.Drawing.Size(301, 72); ////this.shapeContainer1.TabIndex = 0; //this.shapeContainer1.TabStop = false; //this.rectangeShape1.BorderWidth = 4; //this.rectangeShape1.Location = new System.Drawing.Point(0, 0); //this.rectangeShape1.Name = "ovalShape1"; //this.rectangeShape1.Size = new System.Drawing.Size(12, 12); 50 ////this.Controls.Add(shapeContainer1); } private void InitializeComponent() { this.SuspendLayout(); // // PanelCheckBox // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion Panel ComboBox using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelComboBox: ObjetoBase { public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public bool poseeContenido=false; Array contenidoAuto ; public PanelComboBox(string texto) { _TipoControl = "COMBOBOX"; seteaFormato(); } public PanelComboBox() { _TipoControl = "COMBOBOX"; seteaFormato(); } public PanelComboBox(bool conColor) { this.BackColor = Color.White; _TipoControl = "COMBOBOX"; seteaFormato(); } 51 public void seteaFormato() { this.BackColor = Color.White; _ancho = 80; _alto = 20; this.Width = _ancho; this.Height = _alto; this.Cursor = Cursors.SizeAll; this.BackgroundImageLayout = ImageLayout.Stretch; this.BackgroundImage = global::TesisEjemplo1.Properties.Resources.CampoCombo; } public Color ColorFondo { set { this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta { set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void cambiarColorFondo(Color color) { this.BackColor = color; } public Array Contenido { set { this.poseeContenido = true; contenidoAuto = value; } get { return this.contenidoAuto; } } 52 private void InitializeComponent() { this.SuspendLayout(); // // PanelComboBox // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion PanelComboBoxNumerico using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelComboBoxNumerico: ObjetoBase { public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public PanelComboBoxNumerico(string texto) { _TipoControl = "COMBOBOXNUMERICO"; seteaFormato(); } public PanelComboBoxNumerico() { _TipoControl = "COMBOBOXNUMERICO"; seteaFormato(); } public PanelComboBoxNumerico(bool conColor) { this.BackColor = Color.White; _TipoControl = "COMBOBOXNUMERICO"; seteaFormato(); } public void seteaFormato() { this.BackColor = Color.White; _ancho = 100; _alto = 20; this.Width = _ancho; 53 this.Height = _alto; this.Cursor = Cursors.SizeAll; this.BackgroundImageLayout = ImageLayout.Stretch; this.BackgroundImage = global::TesisEjemplo1.Properties.Resources.CampoComboNum; } public Color ColorFondo { set { this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta { set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void cambiarColorFondo(Color color) { this.BackColor = color; } public int indiceInicio { set; get; } public int indiceFinal { set; get; } public int incremento { set; get; } public int comienzo { set; get; } private void InitializeComponent() 54 { this.SuspendLayout(); // // PanelComboBoxNumerico // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion PaneEmail using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelEmail: ObjetoBase { public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public PanelEmail(string texto) { _TipoControl = "EMAIL"; seteaFormato(); } public PanelEmail() { _TipoControl = "EMIAL"; seteaFormato(); } public PanelEmail(bool conColor) { this.BackColor = Color.WhiteSmoke; _TipoControl = "EMAIL"; seteaFormato(); } public void seteaFormato() { this.BackColor = Color.White; _ancho = 100; 55 _alto = 20; this.Width = _ancho; this.Height = _alto; this.Cursor = Cursors.SizeAll; } public Color ColorFondo { set { this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta { set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void cambiarColorFondo(Color color) { this.BackColor = color; } private void InitializeComponent() { this.SuspendLayout(); // // PanelEmail // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion PanelesBase using System; using System.Collections.Generic; using System.Linq; 56 using System.Text; using System.Threading.Tasks; namespace TesisEjemplo1 { class PanelesBases : System.Windows.Forms.Panel { string nombre = ""; string identificacion = ""; string tipoObjeto = ""; string metodoClick = ""; string etiqueta = ""; } } Codificacion PaneEtiquetas using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelEtiqueta : ObjetoBase { string ls_textoEtiqueta = ""; Label lblEtiqueta = new Label(); public string _Texto { set { this.ls_textoEtiqueta = value; } get { return this.ls_textoEtiqueta; } } public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public PanelEtiqueta(string contenido) { _TipoControl = "ETIQUETA"; seteaFormato(contenido); } public PanelEtiqueta() { _TipoControl = "ETIQUETA"; seteaFormato("Etiqueta"); 57 } public PanelEtiqueta(bool conColor) { this.BackColor = Color.White; _TipoControl = "ETIQUETA"; seteaFormato("Etiqueta"); } public void llenaFuncionClick(string contenidoFuncion){ } public Color ColorFondo { set{ this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta{ set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void seteaFormato(string contenido) { this.lblEtiqueta.Text = contenido; lblEtiqueta.BackColor = Color.Transparent; lblEtiqueta.Cursor = Cursors.Default; this.Controls.Add(lblEtiqueta); _Texto = contenido; this.Cursor = Cursors.SizeAll; this.BackColor = Color.Transparent; this._ancho = 100; this._alto = 20; Width = _ancho; Height = _alto; lblEtiqueta.Width = _ancho - 20; } public void cambiaEtiquetaVisible(string textoMuestra) { try { this.lblEtiqueta.Text = textoMuestra; } 58 catch (Exception ex) { this.lblEtiqueta.Text = ex.Message; } } public void cambiarColorEtiqueta(Color color) { this.lblEtiqueta.ForeColor = color; } public void cambiarColorFondo(Color color) { this.lblEtiqueta.BackColor = color; this.BackColor = color; } public void cambiaFamiliaTexto(string nomrbreFamilia) { try { //this.lblEtiqueta.Font = new System.Drawing.Font(nomrbreFamilia, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblEtiqueta.Font = new System.Drawing.Font(nomrbreFamilia, 8.25F, this.lblEtiqueta.Font.Style, System.Drawing.GraphicsUnit.Point, ((byte)(0))); } catch (Exception ex) { } } public void cambiarEstiloTexto(string nombreEstilo) { try { switch (nombreEstilo) { case "ANTIALIAS_LOW_RES": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_NONE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_STANDARD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_SUBPIXEL": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "APPLICATION": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ARABIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ARMENIAN_SCRIPT": 59 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BENGALI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BOLD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BROKEN_LINE_UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CJK_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CURSIVE_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CYRILLIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "DEVANAGARI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "DOTTED_UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ETHIOPIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "EXTRA_BOLD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "FANTASY_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GEORGIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GREEK_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GUID_FONT_CHANGED": 60 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GUJARATI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GURMUKHI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HANGUL_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HEBREW_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HIRAGANA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ITALIC": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KANNADA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KATAKANA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KHMER_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "LAO_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "LATIN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MALAYALAM_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MONGOLIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MYANMAR_SCRIPT": 61 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ORIYA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "PLAIN": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SANS_SERIF_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SERIF_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SERIF_STYLE_MASK": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SINHALA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "STRIKE_THROUGH": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Strikeout, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TAMIL_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TELUGU_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "THAI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TIBETAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "UNSPECIFIED_SERIF_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "WAVY_UNDERLINED": 62 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; } } catch (Exception ex) { } } public void modificaTamanioTexto(string tamanio) { try { this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name,float.Parse(tamanio), this.lblEtiqueta.Font.Style, System.Drawing.GraphicsUnit.Point, ((byte)(0))); } catch (Exception ex) { } } private void InitializeComponent() { this.SuspendLayout(); // // PanelEtiqueta // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion PanelPassword using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelPassword : ObjetoBase { public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; 63 public PanelPassword(string texto) { _TipoControl = "PASSWORD"; ///seteaFormato(); this.Cursor = Cursors.SizeAll; } public PanelPassword() { _TipoControl = "PASSWORD"; this.Cursor = Cursors.SizeAll; } public PanelPassword(bool conColor) { this.BackColor = Color.WhiteSmoke; _TipoControl = "PASSWORD"; _ancho = 80; _alto = 20; this.Width = _ancho; this.Height = _alto; this.Cursor = Cursors.SizeAll; } public Color ColorFondo { set { this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta { set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } private void InitializeComponent() { this.SuspendLayout(); // // PanelPassword // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); 64 } } } Codificacion PanelRichTextBox using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelRichTextBox : ObjetoBase { string ls_textoEtiqueta = ""; Label lblEtiqueta = new Label(); public string _Texto { set { this.ls_textoEtiqueta = value; } get { return this.ls_textoEtiqueta; } } public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public PanelRichTextBox(string contenido) { _TipoControl = "RICHTEXTBOX"; seteaFormato(contenido); } public PanelRichTextBox() { _TipoControl = "RICHTEXTBOX"; seteaFormato("Etiqueta"); } public PanelRichTextBox(bool conColor) { this.BackColor = Color.White; _TipoControl = "RICHTEXTBOX"; seteaFormato("Etiqueta"); } public void llenaFuncionClick(string contenidoFuncion){ 65 } public Color ColorFondo { set{ this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta{ set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void seteaFormato(string contenido) { this.lblEtiqueta.Text = contenido; lblEtiqueta.BackColor = Color.Transparent; lblEtiqueta.Cursor = Cursors.Default; this.Controls.Add(lblEtiqueta); _Texto = contenido; this.Cursor = Cursors.SizeAll; this.BackColor = Color.Transparent; this._ancho = 100; this._alto = 25; this.Width = _ancho; this.Height = _alto; lblEtiqueta.Width = this.Width - 5; } public void cambiaEtiquetaVisible(string textoMuestra) { try { this.lblEtiqueta.Text = textoMuestra; } catch (Exception ex) { this.lblEtiqueta.Text = ex.Message; } } public void cambiarColorEtiqueta(Color color) { this.lblEtiqueta.ForeColor = color; } public void cambiarColorFondo(Color color) { this.lblEtiqueta.BackColor = color; 66 this.BackColor = color; } public void cambiaFamiliaTexto(string nomrbreFamilia) { try { //this.lblEtiqueta.Font = new System.Drawing.Font(nomrbreFamilia, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblEtiqueta.Font = new System.Drawing.Font(nomrbreFamilia, 8.25F, this.lblEtiqueta.Font.Style, System.Drawing.GraphicsUnit.Point, ((byte)(0))); } catch (Exception ex) { } } public void cambiarEstiloTexto(string nombreEstilo) { try { switch (nombreEstilo) { case "ANTIALIAS_LOW_RES": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_NONE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_STANDARD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ANTIALIAS_SUBPIXEL": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "APPLICATION": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ARABIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ARMENIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BENGALI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "BOLD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; 67 case "BROKEN_LINE_UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CJK_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CURSIVE_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "CYRILLIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "DEVANAGARI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "DOTTED_UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ETHIOPIC_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "EXTRA_BOLD": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "FANTASY_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GEORGIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GREEK_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GUID_FONT_CHANGED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GUJARATI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "GURMUKHI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HANGUL_SCRIPT": 68 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HEBREW_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "HIRAGANA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ITALIC": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KANNADA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KATAKANA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "KHMER_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "LAO_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "LATIN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MALAYALAM_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MONGOLIAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "MYANMAR_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "ORIYA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "PLAIN": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SANS_SERIF_STYLE": 69 this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SERIF_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SERIF_STYLE_MASK": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "SINHALA_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "STRIKE_THROUGH": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Strikeout, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TAMIL_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TELUGU_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "THAI_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "TIBETAN_SCRIPT": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "UNSPECIFIED_SERIF_STYLE": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; case "WAVY_UNDERLINED": this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name, 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); break; } } catch (Exception ex) { } } public void modificaTamanioTexto(string tamanio) { try 70 { this.lblEtiqueta.Font = new System.Drawing.Font(lblEtiqueta.Font.FontFamily.Name,float.Parse(tamanio), this.lblEtiqueta.Font.Style, System.Drawing.GraphicsUnit.Point, ((byte)(0))); } catch (Exception ex) { } } private void InitializeComponent() { this.SuspendLayout(); // // PanelRichTextBox // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion PanelTextoAutocompletar using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelTextoAutocompletar: ObjetoBase { public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public bool poseeContenido=false; Array contenidoAuto ; public PanelTextoAutocompletar(string texto) { _TipoControl = "TEXTOAUTOCOMPLETAR"; seteaFormato(); } public PanelTextoAutocompletar() { _TipoControl = "TEXTOAUTOCOMPLETAR"; seteaFormato(); } public PanelTextoAutocompletar(bool conColor) 71 { this.BackColor = Color.White; _TipoControl = "TEXTOAUTOCOMPLETAR"; seteaFormato(); } public void seteaFormato() { this.BackColor = Color.White; _ancho = 80; _alto = 20; this.Width = _ancho; this.Height = _alto; this.Cursor = Cursors.SizeAll; } public Color ColorFondo { set { this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta { set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void cambiarColorFondo(Color color) { this.BackColor = color; } public Array Contenido { set { this.poseeContenido = true; contenidoAuto = value; } get { return this.contenidoAuto; 72 } } private void InitializeComponent() { this.SuspendLayout(); // // PanelTextoAutocompletar // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion PanelTextoAutoCorregir using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { class PanelTextoAutocorregir: ObjetoBase { public bool poseeColorfondo = false; Color coloFondo; public bool poseeColorTextop = false; Color colorEtiqueta; public PanelTextoAutocorregir(string texto) { _TipoControl = "CAJATEXTOAUTOCORREGIR"; seteaFormato(); } public PanelTextoAutocorregir() { _TipoControl = "CAJATEXTOAUTOCORREGIR"; seteaFormato(); } public PanelTextoAutocorregir(bool conColor) { this.BackColor = Color.White; _TipoControl = "CAJATEXTOAUTOCORREGIR"; seteaFormato(); } public void seteaFormato() { 73 this.BackColor = Color.White; _ancho = 80; _alto = 20; Width = _ancho; Height = _alto; this.Cursor = Cursors.SizeAll; } public Color ColorFondo { set { this.poseeColorfondo = true; this.coloFondo = value; } get { return coloFondo; } } public Color ColorEtiqueta { set { this.poseeColorTextop = true; this.colorEtiqueta = value; } get { return this.colorEtiqueta; } } public void cambiarColorFondo(Color color) { this.BackColor = color; } private void InitializeComponent() { this.SuspendLayout(); // // PanelTextoAutocorregir // this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ResumeLayout(false); } } } Codificacion PlatillasFunciones using System; 74 using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TesisEjemplo1 { class PantillasFunciones { public static string PlantillaAccionBoton(string nombreObjeto) { return "\n\tpublic void Action" + nombreObjeto + "_(ActionEvento evento){\n\t}" ; } public static string PlatillaFormato(string nombreObjeto) { return ""; } } } Codificacion Presentacion using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { public partial class Presentacion : Form { int i = 0; public Presentacion() { InitializeComponent(); } private void Presentacion_Load(object sender, EventArgs e) { } private void timer1_Tick(object sender, EventArgs e) { i++; if (i == 5) { //Form1 f = new Form1(); //f.Show(); 75 this.Close(); } } } } Codificacion Programs using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { static class Program { /// <summary> /// Punto de entrada principal para la aplicación. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } Codificacion VentanaColores using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { public partial class VentanaColores : Form { public Color colorClick { set; get; } 76 public string ColorSeleccionado { set; get; } public VentanaColores() { InitializeComponent(); } private void VentanaColores_Load(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { this.Close(); } private void pictureBox1_Click(object sender, EventArgs e) { ColorSeleccionado = "ALICEBLUE"; colorClick = Color.AliceBlue; this.Close(); } private void pictureBox2_Click(object sender, EventArgs e) { ColorSeleccionado = "ANTIQUEWHITE"; colorClick = Color.AntiqueWhite; this.Close(); } private void pictureBox3_Click(object sender, EventArgs e) { ColorSeleccionado = "AQUA"; colorClick = Color.Aqua; this.Close(); } private void pictureBox4_Click(object sender, EventArgs e) { ColorSeleccionado = "AQUAMARINE"; colorClick = Color.Aquamarine; this.Close(); } private void pictureBox5_Click(object sender, EventArgs e) { ColorSeleccionado = "AZURE"; colorClick = Color.Azure; this.Close(); } private void pictureBox6_Click(object sender, EventArgs e) { 77 ColorSeleccionado = "BEIGE"; colorClick = Color.Beige; this.Close(); } private void pictureBox7_Click(object sender, EventArgs e) { ColorSeleccionado = "BISQUE"; colorClick = Color.Bisque; this.Close(); } private void pictureBox8_Click(object sender, EventArgs e) { ColorSeleccionado = "BLACK"; colorClick = Color.Black; this.Close(); } private void pictureBox9_Click(object sender, EventArgs e) { ColorSeleccionado = "BLANCHEDALMOND"; colorClick = Color.BlanchedAlmond; this.Close(); } private void pictureBox10_Click(object sender, EventArgs e) { ColorSeleccionado = "BLUE"; colorClick = Color.Blue; this.Close(); } private void pictureBox11_Click(object sender, EventArgs e) { this.ColorSeleccionado = "BLUEVIOLET"; colorClick = Color.BlueViolet; this.Close(); } private void pictureBox12_Click(object sender, EventArgs e) { ColorSeleccionado = "BROWN"; colorClick = Color.Brown; this.Close(); } private void pictureBox13_Click(object sender, EventArgs e) { ColorSeleccionado = "BURLYWOOD"; colorClick = Color.BurlyWood; this.Close(); } private void pictureBox14_Click(object sender, EventArgs e) { ColorSeleccionado = "CADETBLUE"; 78 colorClick = Color.CadetBlue; this.Close(); } private void pictureBox15_Click(object sender, EventArgs e) { ColorSeleccionado = "CHARTREUSE"; colorClick = Color.Chartreuse; this.Close(); } private void pictureBox17_Click(object sender, EventArgs e) { ColorSeleccionado = "CHOCOLATE"; colorClick = Color.Chocolate; this.Close(); } private void pictureBox18_Click(object sender, EventArgs e) { ColorSeleccionado = "CORAL"; colorClick = Color.Coral; this.Close(); } private void pictureBox19_Click(object sender, EventArgs e) { ColorSeleccionado = "CORNFLOWERBLUE"; colorClick = Color.CornflowerBlue; this.Close(); } private void pictureBox20_Click(object sender, EventArgs e) { ColorSeleccionado = "CORNSILK"; colorClick = Color.Cornsilk; this.Close(); } private void pictureBox16_Click(object sender, EventArgs e) { ColorSeleccionado = "CRIMSON"; colorClick = Color.Crimson; this.Close(); } private void pictureBox30_Click(object sender, EventArgs e) { ColorSeleccionado = "CYAN"; colorClick = Color.Cyan; this.Close(); } private void pictureBox29_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKBLUE"; colorClick = Color.DarkBlue; 79 this.Close(); } private void pictureBox28_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKCYAN"; colorClick = Color.DarkCyan; this.Close(); } private void pictureBox27_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKGOLDENROD"; colorClick = Color.DarkGoldenrod; this.Close(); } private void pictureBox26_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKGRAY"; colorClick = Color.DarkGray; this.Close(); } private void pictureBox25_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKGREEN"; colorClick = Color.DarkGreen; this.Close(); } private void pictureBox24_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKKHAKI"; colorClick = Color.DarkKhaki; this.Close(); } private void pictureBox23_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKMAGENTA"; colorClick = Color.DarkMagenta; this.Close(); } private void pictureBox22_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKOLIVEGREEN"; colorClick = Color.DarkOliveGreen; this.Close(); } private void pictureBox21_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKORANGE"; colorClick = Color.DarkOrange; this.Close(); 80 } private void pictureBox60_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKORCHID"; colorClick = Color.DarkOrchid; this.Close(); } private void pictureBox59_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKRED"; colorClick = Color.DarkRed; this.Close(); } private void pictureBox58_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKSALMON"; colorClick = Color.DarkSalmon; this.Close(); } private void pictureBox57_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKSEAGREEN"; colorClick = Color.DarkSeaGreen; this.Close(); } private void pictureBox56_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKSLATEBLUE"; colorClick = Color.DarkSlateBlue; this.Close(); } private void pictureBox55_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKSLATEGRAY"; colorClick = Color.DarkSlateGray; this.Close(); } private void pictureBox54_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKTURQUOISE"; colorClick = Color.DarkTurquoise; this.Close(); } private void pictureBox53_Click(object sender, EventArgs e) { ColorSeleccionado = "DARKVIOLET"; colorClick = Color.DarkViolet; this.Close(); } 81 private void pictureBox52_Click(object sender, EventArgs e) { ColorSeleccionado = "DEEPPINK"; colorClick = Color.DeepPink; this.Close(); } private void pictureBox51_Click(object sender, EventArgs e) { ColorSeleccionado = "DEEPSKYBLUE"; colorClick = Color.DeepSkyBlue; this.Close(); } private void pictureBox50_Click(object sender, EventArgs e) { ColorSeleccionado = "DIMGRAY"; colorClick = Color.DimGray; this.Close(); } private void pictureBox49_Click(object sender, EventArgs e) { ColorSeleccionado = "DODGERBLUE"; colorClick = Color.DodgerBlue; this.Close(); } private void pictureBox48_Click(object sender, EventArgs e) { ColorSeleccionado = "FIREBRICK"; colorClick = Color.Firebrick; this.Close(); } private void pictureBox47_Click(object sender, EventArgs e) { ColorSeleccionado = "FLORALWHITE"; colorClick = Color.FloralWhite; this.Close(); } private void pictureBox46_Click(object sender, EventArgs e) { ColorSeleccionado = "FORESTGREEN"; colorClick = Color.ForestGreen; this.Close(); } private void pictureBox44_Click(object sender, EventArgs e) { ColorSeleccionado = "FUCHSIA"; colorClick = Color.Fuchsia; this.Close(); } 82 private void pictureBox43_Click(object sender, EventArgs e) { ColorSeleccionado = "GAINSBORO"; colorClick = Color.Gainsboro; this.Close(); } private void pictureBox42_Click(object sender, EventArgs e) { ColorSeleccionado = "GHOSTWHITE"; colorClick = Color.GhostWhite; this.Close(); } private void pictureBox41_Click(object sender, EventArgs e) { ColorSeleccionado = "GOLD"; colorClick = Color.Gold; this.Close(); } private void pictureBox45_Click(object sender, EventArgs e) { ColorSeleccionado = "GOLDENROD"; colorClick = Color.Goldenrod; this.Close(); } private void pictureBox40_Click(object sender, EventArgs e) { ColorSeleccionado = "GRAY"; colorClick = Color.Gray; this.Close(); } private void pictureBox39_Click(object sender, EventArgs e) { ColorSeleccionado = "GREEN"; colorClick = Color.Green; this.Close(); } private void pictureBox38_Click(object sender, EventArgs e) { ColorSeleccionado = "GREENYELLOW"; colorClick = Color.GreenYellow; this.Close(); } private void pictureBox37_Click(object sender, EventArgs e) { ColorSeleccionado = "HONEYDEW"; colorClick = Color.Honeydew; this.Close(); } private void pictureBox36_Click(object sender, EventArgs e) 83 { ColorSeleccionado = "HOTPINK"; colorClick = Color.HotPink; this.Close(); } private void pictureBox35_Click(object sender, EventArgs e) { ColorSeleccionado = "INDIANRED"; colorClick = Color.IndianRed; this.Close(); } private void pictureBox34_Click(object sender, EventArgs e) { ColorSeleccionado = "INDIGO"; colorClick = Color.Indigo; this.Close(); } private void pictureBox33_Click(object sender, EventArgs e) { ColorSeleccionado = "IVORY"; colorClick = Color.Ivory; this.Close(); } private void pictureBox32_Click(object sender, EventArgs e) { ColorSeleccionado = "KHAKI"; colorClick = Color.Khaki; this.Close(); } private void pictureBox31_Click(object sender, EventArgs e) { ColorSeleccionado = "LAVENDER"; colorClick = Color.Lavender; this.Close(); } private void pictureBox90_Click(object sender, EventArgs e) { ColorSeleccionado = "LAVENDERBLUSH"; colorClick = Color.LavenderBlush; this.Close(); } private void pictureBox89_Click(object sender, EventArgs e) { ColorSeleccionado = "LAWNGREEN"; colorClick = Color.LawnGreen; this.Close(); } private void pictureBox88_Click(object sender, EventArgs e) { 84 ColorSeleccionado = "LEMONCHIFFON"; colorClick = Color.LemonChiffon; this.Close(); } private void pictureBox87_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTBLUE"; colorClick = Color.LightBlue; this.Close(); } private void pictureBox86_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTCORAL"; colorClick = Color.LightCoral; this.Close(); } private void pictureBox85_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTCYAN"; colorClick = Color.LightCyan; this.Close(); } private void pictureBox84_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTGOLDENRODYELLOW"; colorClick = Color.LightGoldenrodYellow; this.Close(); } private void pictureBox83_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTGRAY"; colorClick = Color.LightGray; this.Close(); } private void pictureBox82_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTGREEN"; colorClick = Color.LightGreen; this.Close(); } private void pictureBox81_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTGREY"; colorClick = Color.LightGray; this.Close(); } private void pictureBox80_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTPINK"; 85 colorClick = Color.LightPink; this.Close(); } private void pictureBox79_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTSALMON"; colorClick = Color.LightSalmon; this.Close(); } private void pictureBox78_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTSEAGREEN"; colorClick = Color.LightSeaGreen; this.Close(); } private void pictureBox77_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTSKYBLUE"; colorClick = Color.LightSkyBlue; this.Close(); } private void pictureBox76_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTSLATEGRAY"; colorClick = Color.LightSlateGray; this.Close(); } private void pictureBox74_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTSTEELBLUE"; colorClick = Color.LightSteelBlue; this.Close(); } private void pictureBox73_Click(object sender, EventArgs e) { ColorSeleccionado = "LIGHTYELLOW"; colorClick = Color.LightYellow; this.Close(); } private void pictureBox72_Click(object sender, EventArgs e) { ColorSeleccionado = "LIME"; colorClick = Color.Lime; this.Close(); } private void pictureBox71_Click(object sender, EventArgs e) { ColorSeleccionado = "LIMEGREEN"; colorClick = Color.LimeGreen; 86 this.Close(); } private void pictureBox75_Click(object sender, EventArgs e) { ColorSeleccionado = "LINEN"; colorClick = Color.Linen; this.Close(); } private void pictureBox70_Click(object sender, EventArgs e) { ColorSeleccionado = "MAGENTA"; colorClick = Color.Magenta; this.Close(); } private void pictureBox69_Click(object sender, EventArgs e) { ColorSeleccionado = "MAROON"; colorClick = Color.Maroon; this.Close(); } private void pictureBox68_Click(object sender, EventArgs e) { ColorSeleccionado = "MEDIUMAQUAMARINE"; colorClick = Color.MediumAquamarine; this.Close(); } private void pictureBox67_Click(object sender, EventArgs e) { ColorSeleccionado = "MEDIUMBLUE"; colorClick = Color.MediumBlue; this.Close(); } private void pictureBox66_Click(object sender, EventArgs e) { ColorSeleccionado = "MEDIUMORCHID"; colorClick = Color.MediumOrchid; this.Close(); } private void pictureBox65_Click(object sender, EventArgs e) { ColorSeleccionado = "MEDIUMPURPLE"; colorClick = Color.MediumPurple; this.Close(); } private void pictureBox64_Click(object sender, EventArgs e) { ColorSeleccionado = "MEDIUMSEAGREEN"; colorClick = Color.MediumSeaGreen; this.Close(); 87 } private void pictureBox63_Click(object sender, EventArgs e) { ColorSeleccionado = "MEDIUMSLATEBLUE"; colorClick = Color.MediumSlateBlue; this.Close(); } private void pictureBox62_Click(object sender, EventArgs e) { ColorSeleccionado = "MEDIUMSPRINGGREEN"; colorClick = Color.MediumSpringGreen; this.Close(); } private void pictureBox61_Click(object sender, EventArgs e) { ColorSeleccionado = "MEDIUMTURQUOISE"; colorClick = Color.MediumTurquoise; this.Close(); } private void pictureBox120_Click(object sender, EventArgs e) { ColorSeleccionado = "MEDIUMVIOLETRED"; colorClick = Color.MediumVioletRed; this.Close(); } private void pictureBox119_Click(object sender, EventArgs e) { ColorSeleccionado = "MIDNIGHTBLUE"; colorClick = Color.MidnightBlue; this.Close(); } private void pictureBox118_Click(object sender, EventArgs e) { ColorSeleccionado = "MINTCREAM"; colorClick = Color.MintCream; this.Close(); } private void pictureBox117_Click(object sender, EventArgs e) { ColorSeleccionado = "MISTYROSE"; colorClick = Color.MistyRose; this.Close(); } private void pictureBox116_Click(object sender, EventArgs e) { ColorSeleccionado = "MOCCASIN"; colorClick = Color.Moccasin; this.Close(); } 88 private void pictureBox115_Click(object sender, EventArgs e) { ColorSeleccionado = "NAVAJOWHITE"; colorClick = Color.NavajoWhite; this.Close(); } private void pictureBox114_Click(object sender, EventArgs e) { ColorSeleccionado = "NAVY"; colorClick = Color.Navy; this.Close(); } private void pictureBox113_Click(object sender, EventArgs e) { ColorSeleccionado = "OLDLACE"; colorClick = Color.OldLace; this.Close(); } private void pictureBox112_Click(object sender, EventArgs e) { ColorSeleccionado = "OLIVE"; colorClick = Color.Olive; this.Close(); } private void pictureBox111_Click(object sender, EventArgs e) { ColorSeleccionado = "OLIVEDRAB"; colorClick = Color.OliveDrab; this.Close(); } private void pictureBox110_Click(object sender, EventArgs e) { ColorSeleccionado = "ORANGE"; colorClick = Color.Orange; this.Close(); } private void pictureBox109_Click(object sender, EventArgs e) { ColorSeleccionado = "ORANGERED"; colorClick = Color.OrangeRed; this.Close(); } private void pictureBox108_Click(object sender, EventArgs e) { ColorSeleccionado = "ORCHID"; colorClick = Color.Orchid; this.Close(); } 89 private void pictureBox107_Click(object sender, EventArgs e) { ColorSeleccionado = "PALEGOLDENROD"; colorClick = Color.PaleGoldenrod; this.Close(); } private void pictureBox106_Click(object sender, EventArgs e) { ColorSeleccionado = "PALEGREEN"; colorClick = Color.PaleGreen; this.Close(); } private void pictureBox104_Click(object sender, EventArgs e) { ColorSeleccionado = "PALETURQUOISE"; colorClick = Color.PaleTurquoise; this.Close(); } private void pictureBox103_Click(object sender, EventArgs e) { ColorSeleccionado = "PALEVIOLETRED"; colorClick = Color.PaleVioletRed; this.Close(); } private void pictureBox102_Click(object sender, EventArgs e) { ColorSeleccionado = "PAPAYAWHIP"; colorClick = Color.PapayaWhip; this.Close(); } private void pictureBox101_Click(object sender, EventArgs e) { ColorSeleccionado = "PEACHPUFF"; colorClick = Color.PeachPuff; this.Close(); } private void pictureBox105_Click(object sender, EventArgs e) { ColorSeleccionado = "PERU"; colorClick = Color.Peru; this.Close(); } private void pictureBox100_Click(object sender, EventArgs e) { ColorSeleccionado = "PINK"; colorClick = Color.Pink; this.Close(); } private void pictureBox99_Click(object sender, EventArgs e) 90 { ColorSeleccionado = "PLUM"; colorClick = Color.Plum; this.Close(); } private void pictureBox98_Click(object sender, EventArgs e) { ColorSeleccionado = "POWDERBLUE"; colorClick = Color.PowderBlue; this.Close(); } private void pictureBox97_Click(object sender, EventArgs e) { ColorSeleccionado = "PURPLE"; colorClick = Color.Purple; this.Close(); } private void pictureBox96_Click(object sender, EventArgs e) { ColorSeleccionado = "RED"; colorClick = Color.Red; this.Close(); } private void pictureBox95_Click(object sender, EventArgs e) { ColorSeleccionado = "ROSYBROWN"; colorClick = Color.RosyBrown; this.Close(); } private void pictureBox94_Click(object sender, EventArgs e) { ColorSeleccionado = "ROYALBLUE"; colorClick = Color.RoyalBlue; this.Close(); } private void pictureBox93_Click(object sender, EventArgs e) { ColorSeleccionado = "SADDLEBROWN"; colorClick = Color.SaddleBrown; this.Close(); } private void pictureBox92_Click(object sender, EventArgs e) { ColorSeleccionado = "SALMON"; colorClick = Color.Salmon; this.Close(); } private void pictureBox91_Click(object sender, EventArgs e) { 91 ColorSeleccionado = "SANDYBROWN"; colorClick = Color.SandyBrown; this.Close(); } private void pictureBox150_Click(object sender, EventArgs e) { ColorSeleccionado = "SEAGREEN"; colorClick = Color.SeaGreen; this.Close(); } private void pictureBox149_Click(object sender, EventArgs e) { ColorSeleccionado = "SEASHELL"; colorClick = Color.SeaShell; this.Close(); } private void pictureBox148_Click(object sender, EventArgs e) { ColorSeleccionado = "SIENNA"; colorClick = Color.Sienna; this.Close(); } private void pictureBox147_Click(object sender, EventArgs e) { ColorSeleccionado = "SILVER"; colorClick = Color.Silver; this.Close(); } private void pictureBox146_Click(object sender, EventArgs e) { ColorSeleccionado = "SKYBLUE"; colorClick = Color.SkyBlue; this.Close(); } private void pictureBox145_Click(object sender, EventArgs e) { ColorSeleccionado = "SLATEBLUE"; colorClick = Color.SlateBlue; this.Close(); } private void pictureBox144_Click(object sender, EventArgs e) { ColorSeleccionado = "SLATEGRAY"; colorClick = Color.SlateGray; this.Close(); } private void pictureBox143_Click(object sender, EventArgs e) { ColorSeleccionado = "SNOW"; 92 colorClick = Color.Snow; this.Close(); } private void pictureBox142_Click(object sender, EventArgs e) { ColorSeleccionado = "SPRINGGREEN"; colorClick = Color.SpringGreen; this.Close(); } private void pictureBox141_Click(object sender, EventArgs e) { ColorSeleccionado = "STEELBLUE"; colorClick = Color.SteelBlue; this.Close(); } private void pictureBox140_Click(object sender, EventArgs e) { ColorSeleccionado = "TAN"; colorClick = Color.Tan; this.Close(); } private void pictureBox139_Click(object sender, EventArgs e) { ColorSeleccionado = "TEAL"; colorClick = Color.Teal; this.Close(); } private void pictureBox138_Click(object sender, EventArgs e) { ColorSeleccionado = "THISTLE"; colorClick = Color.Thistle; this.Close(); } private void pictureBox137_Click(object sender, EventArgs e) { ColorSeleccionado = "TOMATO"; colorClick = Color.Tomato; this.Close(); } private void pictureBox136_Click(object sender, EventArgs e) { ColorSeleccionado = "TURQUOISE"; colorClick = Color.Turquoise; this.Close(); } private void pictureBox126_Click(object sender, EventArgs e) { ColorSeleccionado = "VIOLET"; colorClick = Color.Violet; 93 this.Close(); } private void pictureBox125_Click(object sender, EventArgs e) { ColorSeleccionado = "WHEAT"; colorClick = Color.Wheat; this.Close(); } private void pictureBox124_Click(object sender, EventArgs e) { ColorSeleccionado = "WHITE"; colorClick = Color.White; this.Close(); } private void pictureBox123_Click(object sender, EventArgs e) { ColorSeleccionado = "WHITESMOKE"; colorClick = Color.WhiteSmoke; this.Close(); } private void pictureBox122_Click(object sender, EventArgs e) { ColorSeleccionado = "YELLOW"; colorClick = Color.Yellow; this.Close(); } private void pictureBox121_Click(object sender, EventArgs e) { ColorSeleccionado = "YELLOWGREEN"; colorClick = Color.YellowGreen; this.Close(); } } } Codificacion DialogAccionBoton using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { public partial class DialogoAccionBoton : Form 94 { public string contenidoT { set; get; } public DialogoAccionBoton() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.contenidoT = this.textBox1.Text; this.Close(); } private void DialogoAccionBoton_Load(object sender, EventArgs e) { this.textBox1.Text = contenidoT; } } } Codificacion Form1 using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TesisEjemplo1 { public partial class Form1 : Form { #region "declaracion de variable" bool cambiaTexto = true; int posMouseFormX, posMouseFormY; int posMouseBotonX, posMouseBotonY; int posActBotonX, posActBotonY; bool botonPresionado = false; bool cambiaIcono = false; string nombreIconoDefecto = "IconApp.png"; int indiceSeleccionado = -1; Panel pnlSeleccionado = new Panel(); 95 ArrayList arreglo = new ArrayList(); #region variableFormularioManipulacion string ls_DireccionArchivoJava = ""; public Color _Color { set; get; } public string _DirectorioJava { set { this.ls_DireccionArchivoJava = value; } get { return this.ls_DireccionArchivoJava; } } string ls_NombreArchivoJava = ""; public string _NombreJava { set { this.ls_NombreArchivoJava = value; } get { return this.ls_NombreArchivoJava; } } public string nombreImagenFondo { set; get; } #endregion #region variables formulario public string nombreIcono { set { this.cambiaIcono = true; this.nombreIconoDefecto = value; } get { return this.nombreIconoDefecto; } } #endregion #endregion public Form1() { InitializeComponent(); 96 } ///////////////////////////////////////////////////////////////////////////// #region #region "evento de accion click" // Result of the event click Button, get the text of button and find record private void ClickButton(Object sender, System.EventArgs e) { Panel btn = (Panel)sender; string strFind = btn.Text + ""; ///string strSql = "SELECT * FROM Phone WHERE [Name] LIKE " + /// "'" + strFind + "'" + " Order by Name"; ///FindAnyName(strSql); //using (DataReader) to find records MessageBox.Show(strFind); } #endregion #region "eventos movimiento" private void moverBoton(Panel botonAccion) { botonAccion.Location = new System.Drawing.Point(posMouseFormX - posMouseBotonX, posMouseFormY - posMouseBotonY); posActBotonX = botonAccion.Location.X; posActBotonY = botonAccion.Location.Y; } private void Form_MouseMove(object sender, MouseEventArgs e) { posMouseFormX = e.Location.X; posMouseFormY = e.Location.Y; } private void btnMover_MouseMove(object sender, MouseEventArgs e) { if (e.Button.Equals(MouseButtons.Left)) { Panel btn = (Panel)sender; posMouseFormX = posActBotonX + e.Location.X; posMouseFormY = posActBotonY + e.Location.Y; if (botonPresionado) moverBoton(btn); } } private void btnMover_MouseDown(object sender, MouseEventArgs e) { Panel pnl = (Panel)sender; for (int i = 0; i < arreglo.Count; i++) { Panel pnlIndice = (Panel)arreglo[i]; if (pnl.Equals(pnlIndice)) { pnlIndice.BorderStyle = BorderStyle.FixedSingle; indiceSeleccionado = i; pnlSeleccionado = pnlIndice; 97 llenaPropiedades((object)pnl); } else { pnlIndice.BorderStyle = BorderStyle.None; } } if (e.Button.Equals(MouseButtons.Left)) { posMouseBotonX = e.Location.X; posMouseBotonY = e.Location.Y; botonPresionado = true; } } private void btnMover_MouseUp(object sender, MouseEventArgs e) { if (e.Button.Equals(MouseButtons.Left)) { botonPresionado = false; } } #endregion int mostrar = 0; private void Form1_Load(object sender, EventArgs e) { Presentacion p = new Presentacion(); p.Show(); this.Visible = false; this.Hide(); this.cmbTipoFondo.SelectedIndex = 0; this.pnlSeleccionarColor.Visible = false; this.pnlBuscarImgFondo.Visible = false; crearDirectorios(); this.cmbTipoFondo.SelectedIndex = 0; } #region creacion de solucion public void generasolucion(string pathInput, string pathOutput, string nombreApp) { try { string iconoaplicacion = ""; #region crea directorio solucion ///de no existeir la ruta de solucion se la crea if (System.IO.Directory.Exists(pathOutput)) { System.IO.Directory.Delete(pathOutput,true); } System.IO.Directory.CreateDirectory(pathOutput); #endregion #region crear directorio para archivo java string rutaPaquetes = "", contenidoArchivoJava = ""; 98 System.IO.StreamReader archivoclassLectura = new System.IO.StreamReader(pathInput + "\\" + "src" + "\\" + "Clase1.java"); while (!archivoclassLectura.EndOfStream) { contenidoArchivoJava = archivoclassLectura.ReadLine(); if (contenidoArchivoJava.Replace(" ", "") != "") { if (rutaPaquetes == "") { if (contenidoArchivoJava.Substring(0, 7) == "package") { rutaPaquetes = contenidoArchivoJava.Substring(7, contenidoArchivoJava.Length 7).Replace(";", "").Replace(".", "\\").Replace(" ", ""); if (!System.IO.Directory.Exists(pathOutput + "\\src\\" + rutaPaquetes)) { System.IO.Directory.CreateDirectory(pathOutput + "\\src\\" + rutaPaquetes); } } } } } #endregion #region copiar archivos y carpetas a la solucion System.IO.File.Copy(pathInput + "\\" + "src\\Clase1.java", pathOutput + "\\src\\" + rutaPaquetes + "\\Clase1.java", true); if (!System.IO.Directory.Exists("")) { System.IO.Directory.CreateDirectory(pathOutput + "\\" + ".preprocessed"); } if (!System.IO.Directory.Exists(pathOutput + "\\.settings")) { System.IO.Directory.CreateDirectory(pathOutput + "\\.settings"); } System.IO.File.Copy("C:\\FuentesDesarrolladosTHWPR\\Plantillas\\.settings\\org.eclipse.jdt.core.prefs", pathOutput + "\\.settings\\org.eclipse.jdt.core.prefs", true); if (!System.IO.Directory.Exists(pathOutput + "\\res\\img")) { System.IO.Directory.CreateDirectory(pathOutput + "\\res\\img"); } string[] archivosIconos = System.IO.Directory.GetFiles(pathInput + "\\res\\img"); string dirimg="", rchimg=""; for (int i = 0; i < archivosIconos.Length; i++) { separaDirArchivo(archivosIconos[i], ref dirimg, ref rchimg); System.IO.File.Copy(pathInput + "\\res\\img\\" + rchimg, pathOutput + "\\res\\img\\" + rchimg, true); iconoaplicacion = rchimg; } string[] archivosImagenes = System.IO.Directory.GetFiles(pathInput + "\\res"); for (int i = 0; i < archivosImagenes.Length; i++) { if (archivosImagenes[i] != "img") { separaDirArchivo(archivosImagenes[i], ref dirimg, ref rchimg); System.IO.File.Copy(pathInput + "\\res\\" + rchimg, pathOutput + "\\res\\" + rchimg, true); 99 } } System.IO.File.Copy("C:\\FuentesDesarrolladosTHWPR\\Plantillas\\.classpath", pathOutput + "\\.classpath", true); System.IO.StreamReader archivoproyectFile = new System.IO.StreamReader("C:\\FuentesDesarrolladosTHWPR\\Plantillas\\.project"); string contenidoArchivoproyect = ""; while (!archivoproyectFile.EndOfStream) { contenidoArchivoproyect = contenidoArchivoproyect + archivoproyectFile.ReadLine().Replace("[[NOMBREAPP]]", nombreApp) + "\n"; } //contenidoArchivoproyect.Replace("[[NOMBREAPP]]", nombreApp); System.IO.StreamWriter archivoProyectFinal = new System.IO.StreamWriter(pathOutput + "\\.project", true); archivoProyectFinal.WriteLine(contenidoArchivoproyect); archivoProyectFinal.Close(); System.IO.StreamReader archivoDescriptorFile = new System.IO.StreamReader("C:\\FuentesDesarrolladosTHWPR\\Plantillas\\BlackBerry_App_Descriptor.xml") ; string contenidoArchivoDescriptor = ""; while (!archivoDescriptorFile.EndOfStream) { contenidoArchivoDescriptor = contenidoArchivoDescriptor + archivoDescriptorFile.ReadLine().Replace("[[ICONOAPP]]", this.txtIconoSolucionApp.Text).Replace("[[NOMBREAPP]]", nombreApp) + "\n"; } //contenidoArchivoproyect.Replace("[[ICONOAPP]]", iconoaplicacion); //contenidoArchivoproyect.Replace("[[NOMBREAPP]]", nombreApp); System.IO.StreamWriter archivoDescriptortFinal = new System.IO.StreamWriter(pathOutput + "\\BlackBerry_App_Descriptor.xml", true); archivoDescriptortFinal.WriteLine(contenidoArchivoDescriptor); archivoDescriptortFinal.Close(); MessageBox.Show("Se Genero la Solucion en la Siguiente Ruta:" + pathOutput, "Generacion Exitosa", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); #endregion } catch (Exception ex) { MessageBox.Show("Error de Generacion " + ex.Message,"Error de Solucion",MessageBoxButtons.OK,MessageBoxIcon.Error); } } #endregion //private void button1_Click(object sender, EventArgs e) //{ // string resultadoFinal = ""; // for (int i = 0; i < arreglo.Count; i++) // { // Panel btn = (Panel)arreglo[i]; // resultadoFinal = resultadoFinal + "Boton " + btn.Name + i.ToString() + "::: pos X = " + btn.Location.X.ToString() + " pos Y = " + btn.Location.Y.ToString() + "\n"; // } 100 // this.txtResultadoMovimiento.Text = resultadoFinal; //} private void txtResultadoMovimiento_TextChanged(object sender, EventArgs e) { } private void button1_Click_1(object sender, EventArgs e) { string resultadoFinal = ""; for (int i = 0; i < arreglo.Count; i++) { Panel btn = (Panel)arreglo[i]; resultadoFinal = resultadoFinal + "Boton " + btn.Name + i.ToString() + "::: pos X = " + btn.Location.X.ToString() + " pos Y = " + btn.Location.Y.ToString() + "\n"; } this.txtResultadoMovimiento.Text = resultadoFinal; } private void aumentaPanel(System.Windows.Forms.Panel panel , int ancho ,int alto ) { int posX=0,posY=0; ///------buscaPosicionUltmoObj(ref posX, ref posY); ObjetoBase bj = (ObjetoBase)panel; if(bj._TipoControl != "BROWSER" && bj._TipoControl != "MAPA"){ panel.Width = ancho; panel.Height = alto; ///panel.Width = 500; //panel.Height = 400; panel.BorderStyle = BorderStyle.FixedSingle; //panel.Left = 1; //panel.Top = 1; panel.Left = posX; panel.Top = posY; panel1.Controls.Add(panel); ///panel.Text = ((char)(i + 65)).ToString(); //boton.Click += new System.EventHandler(ClickButton); panel.MouseMove += new MouseEventHandler(btnMover_MouseMove); panel.MouseDown += new MouseEventHandler(btnMover_MouseDown); panel.MouseUp += new MouseEventHandler(btnMover_MouseUp); this.MouseMove += new MouseEventHandler(Form_MouseMove); panel.ContextMenuStrip = mnuClickDerecho; arreglo.Add(panel); } else { bj._ancho = this.panel1.Width; bj._alto = this.panel1.Height; panel.Top = 0; panel.Left = 0; panel.Width = this.panel1.Width; panel.Height = this.panel1.Height; panel1.Controls.Add(panel); panel.ContextMenuStrip = mnuClickDerecho; arreglo.Add(panel); 101 } } //private void button3_Click(object sender, EventArgs e) //{ // if (indiceSeleccionado > -1) // { // arreglo.RemoveAt(indiceSeleccionado); // pnlSeleccionado.Visible = false; // indiceSeleccionado = -1; // } //} private void mnuClickDerecho_Opening(object sender, CancelEventArgs e) { } private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { } private void menuStrip1_ItemClicked_1(object sender, ToolStripItemClickedEventArgs e) { arreglo.RemoveAt(indiceSeleccionado); pnlSeleccionado.Visible = false; indiceSeleccionado = -1; } private void toolStripMenuItem1_Click(object sender, EventArgs e) { } #endregion public void AsignaNombre() { if (arreglo.Count >= 1) { ObjetoBase objeto = (ObjetoBase)arreglo[arreglo.Count - 1]; string tipo = objeto._TipoControl; string nombre =""; if(tipo == "ETIQUETA"){ nombre = "Etiqueta_"; } if (tipo == "RICHTEXTBOX") { nombre = "RichTextBox_"; } if(tipo == "CAJATEXTO"){ nombre = "CajaTexto_"; } if (tipo == "BOTON") { nombre = "Boton_"; 102 } if (tipo == "PASSWORD") { nombre = "Password_"; } if (tipo == "EMAIL") { nombre = "Email_"; } if (tipo == "TEXTOAUTOCOMPLETAR") { nombre = "TxtAutoCompleta_"; } if (tipo == "CAJATEXTOAUTOCORREGIR") { nombre = "TxtAutoCorregir_"; } if (tipo == "TEXTOAUTOCOMPLETAR_") { nombre = "TxtCompletar_"; } if (tipo == "CHECKBOX") { nombre = "CheckBox_"; } if (tipo == "COMBOBOX") { nombre = "ComboBox_"; } if (tipo == "COMBOBOXNUMERICO") { nombre = "ComboBoxNum_"; } if (tipo == "CAMPOFECHA") { nombre = "CampoFecha_"; } if (tipo == "OPCION") { nombre = "Opcion_"; } if (tipo == "IMAGEN") { nombre = "Imagen_"; } if (tipo == "BROWSER") { nombre = "Browser_"; } if (tipo == "MAPA") { nombre = "Mapa_"; } int indiceObjeto = 1; bool repetido=false; do { 103 for (int i = 0; i < arreglo.Count; i++) { ObjetoBase bs = (ObjetoBase)arreglo[i]; if (nombre + indiceObjeto.ToString() == bs._Nombrecontrol) { indiceObjeto++; repetido = true; } else { repetido = false; } } } while (repetido); nombre = nombre + indiceObjeto; if (tipo == "ETIQUETA") { PanelEtiqueta pe = (PanelEtiqueta)arreglo[arreglo.Count - 1]; pe._Nombrecontrol = nombre; } if (tipo == "RICHTEXTBOX") { PanelRichTextBox prtb = (PanelRichTextBox)arreglo[arreglo.Count - 1]; prtb._Nombrecontrol = nombre; } if (tipo == "CAJATEXTO") { PanelCajatexto pct = (PanelCajatexto)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "PASSWORD") { PanelPassword pct = (PanelPassword)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "EMAIL") { PanelEmail pct = (PanelEmail)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "TEXTOAUTOCOMPLETAR") { PanelTextoAutocompletar pct = (PanelTextoAutocompletar)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "CAJATEXTOAUTOCORREGIR") { PanelTextoAutocorregir pct = (PanelTextoAutocorregir)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "TEXTOAUTOCOMPLETAR_") { PanelAutoCompletar pct = (PanelAutoCompletar)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "CHECKBOX") 104 { PanelCheckBox pct = (PanelCheckBox)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "COMBOBOX") { PanelComboBox pct = (PanelComboBox)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "COMBOBOXNUMERICO") { PanelComboBoxNumerico pct = (PanelComboBoxNumerico)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "CAMPOFECHA") { PanelCampoFecha pct = (PanelCampoFecha)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "OPCION") { PanelCampoOpcion pct = (PanelCampoOpcion)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "BOTON") { PanelBoton pct = (PanelBoton)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "IMAGEN") { PanelCampoImagen pct = (PanelCampoImagen)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "BROWSER") { PanelBrowserField pct = (PanelBrowserField)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } if (tipo == "MAPA") { PanelCamposMapa pct = (PanelCamposMapa)arreglo[arreglo.Count - 1]; pct._Nombrecontrol = nombre; } } } public void buscaPosicionUltmoObj(ref int posX, ref int posY) { if (arreglo.Count < 1) { posY = 0; posX = 0; } else { for (int i = 0; i < arreglo.Count; i++) 105 { ObjetoBase obj = (ObjetoBase)arreglo[i]; if (posY < obj._posY) { posY = obj._posY; } } posY += 20; } } public string retornaTipoSeleccionado() { ObjetoBase obj = (ObjetoBase)arreglo[indiceSeleccionado]; return obj._TipoControl; } #region "se encarga de la generacion de los codigos java para RIM" public void generaCodigoJava() { try { if (arreglo.Count > 0) { string nombreGrupos = ""; string contenidoArchivo = "package miPaquete;\n" + "import net.rim.device.api.system.Bitmap;\n" + "import net.rim.device.api.ui.Color;\n" + "import net.rim.device.api.ui.Font;\n" + "import net.rim.device.api.ui.FontFamily;\n" + "import net.rim.device.api.ui.Ui;\n" + "import net.rim.device.api.ui.Graphics;\n" + "import net.rim.device.api.ui.UiApplication;\n" + "import net.rim.device.api.ui.decor.Background;\n" + "import net.rim.device.api.ui.decor.BackgroundFactory;\n" + "import net.rim.device.api.ui.container.AbsoluteFieldManager;\n" + "import net.rim.device.api.collection.util.BasicFilteredList;\n" + "import net.rim.device.api.ui.component.StandardTitleBar;\n" + "import net.rim.device.api.ui.container.MainScreen;\n\n\n" + "\n\n" + "import java.util.Vector;\n\n" + "import net.rim.device.api.ui.Field;\n" + "import net.rim.device.api.ui.Manager;\n" + "import net.rim.device.api.ui.XYPoint;\n\n\n" + "public class Clase1 extends net.rim.device.api.ui.UiApplication{\n" + " public static void main(String[] args)\n" + " {\n" + " Clase1 theApp = new Clase1();\n" + " theApp.enterEventDispatcher();\n" + " }\n" + " public Clase1()\n" + " {\n" + " pushScreen(new MyScreen());\n" + " }\n" + "}\n" + 106 "final class MyScreen extends MainScreen\n" + "{\n" + " public MyScreen()\n" + " {\n" + " super( net.rim.device.api.ui.container.FullScreen.DEFAULT_CLOSE | net.rim.device.api.ui.container.FullScreen.DEFAULT_MENU );\n" + " StandardTitleBar myTitleBar = new StandardTitleBar()\n" + " .addIcon(\"" + ((this.txtImagenIcono.Text!="")?this.txtImagenIcono.Text:nombreIconoDefecto).ToString() + "\")\n" + " .addTitle(\"" + this.txtTituloPantalla.Text + "\")\n"; if(chkReloj.Checked) { contenidoArchivo = contenidoArchivo + " .addClock()\n" ; } if(chkNotificaciones.Checked) { contenidoArchivo = contenidoArchivo + " .addNotifications()\n"; } if (chkSenal.Checked) { contenidoArchivo = contenidoArchivo + " .addSignalIndicator()\n"; } contenidoArchivo = contenidoArchivo + ";\n" + " myTitleBar.setPropertyValue(StandardTitleBar.PROPERTY_BATTERY_VISIBILITY,\n" + " StandardTitleBar.BATTERY_VISIBLE_LOW_OR_CHARGING);\n" + " setTitleBar(myTitleBar);\n" + " ControlLibreFieldManager manejador1 = new ControlLibreFieldManager();\n"; if (this.cmbTipoFondo.Items[this.cmbTipoFondo.SelectedIndex].ToString() == "IMAGEN") { contenidoArchivo = contenidoArchivo + " Bitmap bitmapImage = Bitmap.getBitmapResource(\"" + nombreImagenFondo + "\");\n" + " getMainManager().setBackground(BackgroundFactory.createBitmapBackground(bitmapImage,0, 0, Background.REPEAT_SCALE_TO_FIT));\n"; } for (int i = 0; i < arreglo.Count; i++) { ObjetoBase obj = (ObjetoBase)arreglo[i]; #region "generacion de etiquetas" if (obj._TipoControl == "ETIQUETA") { PanelEtiqueta pe = (PanelEtiqueta)arreglo[i]; if (!pe.poseeColorfondo && !pe.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.LabelField " + pe._Nombrecontrol + "= new net.rim.device.api.ui.component.LabelField(\"" + pe._Texto.Replace(Encoding.ASCII.GetString(new byte[] { (byte)13 }), "").Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "") + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.LabelField " + pe._Nombrecontrol + " = new 107 net.rim.device.api.ui.component.LabelField(\"" + pe._Texto.Replace(Encoding.ASCII.GetString(new byte[] { (byte)13 }), "").Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "") + "\"){\n" + " public void paint(Graphics g){\n"; if (pe.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pe.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if(pe.poseeColorTextop){ contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pe.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } if (pe.lb_poseeEstilo || pe.lb_poseeOtraFamiliaTexto || pe.lb_otrotamanioTexto) { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pe._Nombrecontrol + ".getFont();\n"; if (pe.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = FontFamily.forName(\"" + pe._NombreFamiliaTexto + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pe._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pe.lb_poseeEstilo == true) ? pe._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pe.lb_otrotamanioTexto == true) ? pe._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pe._Nombrecontrol + ".getFont().getLeading(), " + pe._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pe._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + " {\n" + " }\n"; } contenidoArchivo = contenidoArchivo + " manejador1.add(" + pe._Nombrecontrol + "," + (pe._posX * 2).ToString() + "," + (pe._posY * 2).ToString() + ");\n"; //" this.add(" + pe._Nombrecontrol + ");\n"; } #endregion #region "generacion de campo de solo lectura" 108 if (obj._TipoControl == "RICHTEXTBOX") { PanelRichTextBox prt = (PanelRichTextBox)arreglo[i]; if (!prt.poseeColorfondo && !prt.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.RichTextField " + prt._Nombrecontrol + "= new net.rim.device.api.ui.component.RichTextField(\"" + prt._Texto.Replace(Encoding.ASCII.GetString(new byte[] { (byte)13 }), "\\n").Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "") + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.RichTextField " + prt._Nombrecontrol + " = new net.rim.device.api.ui.component.RichTextField(\"" + prt._Texto.Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "\\n").Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "") + "\"){\n" + " public void paint(Graphics g){\n"; if (prt.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + prt.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (prt.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + prt.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } if (prt.lb_poseeEstilo || prt.lb_poseeOtraFamiliaTexto || prt.lb_otrotamanioTexto) { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + prt._Nombrecontrol + ".getFont();\n"; if (prt.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = FontFamily.forName(\"" + prt._NombreFamiliaTexto + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + prt._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (prt.lb_poseeEstilo == true) ? prt._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (prt.lb_otrotamanioTexto == true) ? prt._TamanioTexto.ToString() : "10"; 109 contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + prt._Nombrecontrol + ".getFont().getLeading(), " + prt._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + prt._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + " {\n" + " }\n"; } contenidoArchivo = contenidoArchivo + " manejador1.add(" + prt._Nombrecontrol + "," + (prt._posX * 2).ToString() + "," + (prt._posY * 2).ToString() + ");\n"; //" this.add(" + pe._Nombrecontrol + ");\n"; } #endregion #region "generacion de campos de textos" if (obj._TipoControl == "CAJATEXTO") { PanelCajatexto pct = (PanelCajatexto)arreglo[i]; if (!pct.poseeColorfondo && !pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.TextField " + pct._Nombrecontrol + "= new net.rim.device.api.ui.component.TextField();\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.TextField " + pct._Nombrecontrol + " = new net.rim.device.api.ui.component.TextField(){\n" + " public void paint(Graphics g){\n"; if (pct.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pct.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pct.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } if (pct.lb_poseeEstilo || pct.lb_poseeOtraFamiliaTexto || pct.lb_otrotamanioTexto) { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pct._Nombrecontrol + ".getFont();\n"; 110 if (pct.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = FontFamily.forName(\"" + pct._NombreFamiliaTexto + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pct._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pct.lb_poseeEstilo == true) ? pct._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pct.lb_otrotamanioTexto == true) ? pct._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pct._Nombrecontrol + ".getFont().getLeading(), " + pct._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pct._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + " {\n" + " }\n"; } contenidoArchivo = contenidoArchivo + " manejador1.add(" + pct._Nombrecontrol + "," + (pct._posX * 2).ToString() + "," + (pct._posY * 2).ToString() + ");\n"; } #endregion #region "generacion de campos de password" if (obj._TipoControl == "PASSWORD") { /*PanelCajatexto pct = (PanelCajatexto)arreglo[i]; contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.TextField " + pct._Nombrecontrol + "= new net.rim.device.api.ui.component.TextField();\n" + " manejador1.add(" + pct._Nombrecontrol + "," + (pct._posX * 2).ToString() + "," + (pct._posY * 2).ToString() + ");\n";*/ //" this.add(" + pct._Nombrecontrol + ");\n"; PanelPassword ppwd = (PanelPassword)arreglo[i]; if (!ppwd.poseeColorfondo && !ppwd.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.PasswordEditField " + ppwd._Nombrecontrol + "= new net.rim.device.api.ui.component.PasswordEditField();\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.PasswordEditField " + ppwd._Nombrecontrol + " = new net.rim.device.api.ui.component.PasswordEditField(){\n" + " public void paint(Graphics g){\n"; if (ppwd.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + ppwd.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; 111 } if (ppwd.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + ppwd.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } contenidoArchivo = contenidoArchivo + " manejador1.add(" + ppwd._Nombrecontrol + "," + (ppwd._posX * 2).ToString() + "," + (ppwd._posY * 2).ToString() + ");\n"; } #endregion #region "generacion de campos de correos" if (obj._TipoControl == "EMAIL") { /*PanelCajatexto pct = (PanelCajatexto)arreglo[i]; contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.TextField " + pct._Nombrecontrol + "= new net.rim.device.api.ui.component.TextField();\n" + " manejador1.add(" + pct._Nombrecontrol + "," + (pct._posX * 2).ToString() + "," + (pct._posY * 2).ToString() + ");\n";*/ //" this.add(" + pct._Nombrecontrol + ");\n"; PanelEmail pemail = (PanelEmail)arreglo[i]; if (!pemail.poseeColorfondo && !pemail.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.EmailAddressEditField " + pemail._Nombrecontrol + "= new net.rim.device.api.ui.component.EmailAddressEditField(\"\",\"\");\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.EmailAddressEditField " + pemail._Nombrecontrol + " = new net.rim.device.api.ui.component.EmailAddressEditField(\"\",\"\"){\n" + " public void paint(Graphics g){\n"; if (pemail.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pemail.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pemail.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pemail.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } if (pemail.lb_poseeEstilo || pemail.lb_poseeOtraFamiliaTexto || pemail.lb_otrotamanioTexto) 112 { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pemail._Nombrecontrol + ".getFont();\n"; if (pemail.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = FontFamily.forName(\"" + pemail._NombreFamiliaTexto + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pemail._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pemail.lb_poseeEstilo == true) ? pemail._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pemail.lb_otrotamanioTexto == true) ? pemail._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pemail._Nombrecontrol + ".getFont().getLeading(), " + pemail._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pemail._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + " {\n" + " }\n"; } contenidoArchivo = contenidoArchivo + " manejador1.add(" + pemail._Nombrecontrol + "," + (pemail._posX * 2).ToString() + "," + (pemail._posY * 2).ToString() + ");\n"; } #endregion #region "generacion de campos de textos busqueda" if (obj._TipoControl == "TEXTOAUTOCOMPLETAR") { PanelTextoAutocompletar pct = (PanelTextoAutocompletar)arreglo[i]; contenidoArchivo = contenidoArchivo + " BasicFilteredList filterList_" + pct._Nombrecontrol + " = new BasicFilteredList();\n"; contenidoArchivo = contenidoArchivo + " String[] varArray_" + pct._Nombrecontrol + " = {" ; Array arregloTmp = pct.Contenido; for (int j = 0; j < pct.Contenido.Length; j++) { contenidoArchivo = contenidoArchivo + "\"" + pct.Contenido.GetValue(j).ToString() + "\","; } contenidoArchivo = contenidoArchivo.Substring(0, contenidoArchivo.Length - 1); contenidoArchivo = contenidoArchivo + "};\n" + " filterList_" + pct._Nombrecontrol + ".addDataSet(1,varArray_" + pct._Nombrecontrol +",\"days\",BasicFilteredList.COMPARISON_IGNORE_CASE);\n"; if (!pct.poseeColorfondo && !pct.poseeColorTextop) 113 { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.AutoCompleteField " + pct._Nombrecontrol + "= new net.rim.device.api.ui.component.AutoCompleteField(filterList_" + pct._Nombrecontrol +");\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.AutoCompleteField " + pct._Nombrecontrol + " = new net.rim.device.api.ui.component.AutoCompleteField(filterList_" + pct._Nombrecontrol +"){\n" + " public void paint(Graphics g){\n"; if (pct.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pct.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pct.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } if (pct.lb_poseeEstilo || pct.lb_poseeOtraFamiliaTexto || pct.lb_otrotamanioTexto) { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pct._Nombrecontrol + ".getFont();\n"; if (pct.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = FontFamily.forName(\"" + pct._NombreFamiliaTexto + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pct._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pct.lb_poseeEstilo == true) ? pct._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pct.lb_otrotamanioTexto == true) ? pct._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pct._Nombrecontrol + ".getFont().getLeading(), " + pct._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pct._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + 114 " " {\n" + }\n"; } contenidoArchivo = contenidoArchivo + " manejador1.add(" + pct._Nombrecontrol + "," + (pct._posX * 2).ToString() + "," + (pct._posY * 2).ToString() + ");\n"; } #endregion #region "generacion de campos de textos autocorregir" if (obj._TipoControl == "CAJATEXTOAUTOCORREGIR") { PanelTextoAutocorregir pct = (PanelTextoAutocorregir)arreglo[i]; if (!pct.poseeColorfondo && !pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.AutoTextEditField " + pct._Nombrecontrol + "= new net.rim.device.api.ui.component.AutoTextEditField();\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.AutoTextEditField " + pct._Nombrecontrol + " = new net.rim.device.api.ui.component.AutoTextEditField(){\n" + " public void paint(Graphics g){\n"; if (pct.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pct.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pct.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } if (pct.lb_poseeEstilo || pct.lb_poseeOtraFamiliaTexto || pct.lb_otrotamanioTexto) { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pct._Nombrecontrol + ".getFont();\n"; if (pct.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily.forName(\"" + pct._NombreFamiliaTexto + "\");\n"; } else { FontFamily fontFamily = 115 contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pct._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pct.lb_poseeEstilo == true) ? pct._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pct.lb_otrotamanioTexto == true) ? pct._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pct._Nombrecontrol + ".getFont().getLeading(), " + pct._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pct._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + " {\n" + " }\n"; } contenidoArchivo = contenidoArchivo + " manejador1.add(" + pct._Nombrecontrol + "," + (pct._posX * 2).ToString() + "," + (pct._posY * 2).ToString() + ");\n"; } #endregion #region "generacion de campos de textos completar" if (obj._TipoControl == "TEXTOAUTOCOMPLETAR_") { PanelAutoCompletar pct = (PanelAutoCompletar)arreglo[i]; if (!pct.poseeColorfondo && !pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.ActiveAutoTextEditField " + pct._Nombrecontrol + "= new net.rim.device.api.ui.component.ActiveAutoTextEditField(\"\",\"\");\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.ActiveAutoTextEditField " + pct._Nombrecontrol + " = new net.rim.device.api.ui.component.ActiveAutoTextEditField(\"\",\"\"){\n" + " public void paint(Graphics g){\n"; if (pct.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pct.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pct.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } if (pct.lb_poseeEstilo || pct.lb_poseeOtraFamiliaTexto || pct.lb_otrotamanioTexto) 116 { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pct._Nombrecontrol + ".getFont();\n"; if (pct.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = FontFamily.forName(\"" + pct._NombreFamiliaTexto + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pct._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pct.lb_poseeEstilo == true) ? pct._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pct.lb_otrotamanioTexto == true) ? pct._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pct._Nombrecontrol + ".getFont().getLeading(), " + pct._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pct._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + " {\n" + " }\n"; } contenidoArchivo = contenidoArchivo + " manejador1.add(" + pct._Nombrecontrol + "," + (pct._posX * 2).ToString() + "," + (pct._posY * 2).ToString() + ");\n"; } #endregion #region "generacion de campo check box" if (obj._TipoControl == "CHECKBOX") { PanelCheckBox pe = (PanelCheckBox)arreglo[i]; if (!pe.poseeColorfondo && !pe.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.CheckboxField " + pe._Nombrecontrol + "= new net.rim.device.api.ui.component.CheckboxField(\"" + pe._Texto.Replace(Encoding.ASCII.GetString(new byte[] { (byte)13 }), "").Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "") + "\",false);\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.CheckboxField " + pe._Nombrecontrol + " = new net.rim.device.api.ui.component.CheckboxField(\"" + pe._Texto.Replace(Encoding.ASCII.GetString(new byte[] { (byte)13 }), "").Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "") + "\",false){\n" + " public void paint(Graphics g){\n"; if (pe.poseeColorfondo) { 117 contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pe.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pe.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pe.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } if (pe.lb_poseeEstilo || pe.lb_poseeOtraFamiliaTexto || pe.lb_otrotamanioTexto) { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pe._Nombrecontrol + ".getFont();\n"; if (pe.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = FontFamily.forName(\"" + pe._NombreFamiliaTexto + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pe._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pe.lb_poseeEstilo == true) ? pe._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pe.lb_otrotamanioTexto == true) ? pe._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pe._Nombrecontrol + ".getFont().getLeading(), " + pe._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pe._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + " {\n" + " }\n"; } contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.container.GridFieldManager miGrid_" + pe._Nombrecontrol + " = new net.rim.device.api.ui.container.GridFieldManager(1,1,0);\n" + " miGrid_" + pe._Nombrecontrol + ".add(" + pe._Nombrecontrol + ");\n" + " manejador1.add(miGrid_" + pe._Nombrecontrol + "," + (pe._posX * 2).ToString() + "," + (pe._posY * 2).ToString() + ");\n"; //" this.add(" + pe._Nombrecontrol + ");\n"; } #endregion #region "generacion de campo Combo Box" 118 if (obj._TipoControl == "COMBOBOX") { PanelComboBox pct = (PanelComboBox)arreglo[i]; contenidoArchivo = contenidoArchivo + " String[] varArray_" + pct._Nombrecontrol + " = {"; Array arregloTmp = pct.Contenido; for (int j = 0; j < pct.Contenido.Length; j++) { contenidoArchivo = contenidoArchivo + "\"" + pct.Contenido.GetValue(j).ToString() + "\","; } contenidoArchivo = contenidoArchivo.Substring(0, contenidoArchivo.Length - 1) + "};\n"; if (!pct.poseeColorfondo && !pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.ObjectChoiceField " + pct._Nombrecontrol + "= new net.rim.device.api.ui.component.ObjectChoiceField(\"\",varArray_" + pct._Nombrecontrol + ",0);\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.ObjectChoiceField " + pct._Nombrecontrol + " = new net.rim.device.api.ui.component.ObjectChoiceField(\"\",varArray_" + pct._Nombrecontrol + ",0){\n" + " public void paint(Graphics g){\n"; if (pct.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pct.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pct.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } if (pct.lb_poseeEstilo || pct.lb_poseeOtraFamiliaTexto || pct.lb_otrotamanioTexto) { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pct._Nombrecontrol + ".getFont();\n"; if (pct.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily.forName(\"" + pct._NombreFamiliaTexto + "\");\n"; } else { FontFamily fontFamily = 119 contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pct._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pct.lb_poseeEstilo == true) ? pct._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pct.lb_otrotamanioTexto == true) ? pct._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pct._Nombrecontrol + ".getFont().getLeading(), " + pct._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pct._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + " {\n" + " }\n"; } contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.container.GridFieldManager miGrid_" + pct._Nombrecontrol + " = new net.rim.device.api.ui.container.GridFieldManager(1,1,0);\n" + " miGrid_" + pct._Nombrecontrol + ".add(" + pct._Nombrecontrol + ");\n" + " manejador1.add(miGrid_" + pct._Nombrecontrol + "," + (pct._posX * 2).ToString() + "," + (pct._posY * 2).ToString() + ");\n"; } #endregion #region "generacion de campos Combo Box Numerico" if (obj._TipoControl == "COMBOBOXNUMERICO") { PanelComboBoxNumerico pct = (PanelComboBoxNumerico)arreglo[i]; if (!pct.poseeColorfondo && !pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.NumericChoiceField " + pct._Nombrecontrol + "= new net.rim.device.api.ui.component.NumericChoiceField(\"\"," + pct.indiceInicio + "," + pct.indiceFinal + "," + pct.incremento + "," + pct.comienzo + ");\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.NumericChoiceField " + pct._Nombrecontrol + " = new net.rim.device.api.ui.component.NumericChoiceField(\"\"," + pct.indiceInicio + "," + pct.indiceFinal + "," + pct.incremento + "," + pct.comienzo + "){\n" + " public void paint(Graphics g){\n"; if (pct.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pct.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pct.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pct.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + 120 " " }\n" + };\n"; } if (pct.lb_poseeEstilo || pct.lb_poseeOtraFamiliaTexto || pct.lb_otrotamanioTexto) { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pct._Nombrecontrol + ".getFont();\n"; if (pct.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = FontFamily.forName(\"" + pct._NombreFamiliaTexto + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pct._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pct.lb_poseeEstilo == true) ? pct._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pct.lb_otrotamanioTexto == true) ? pct._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pct._Nombrecontrol + ".getFont().getLeading(), " + pct._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pct._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + " {\n" + " }\n"; } contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.container.GridFieldManager miGrid_" + pct._Nombrecontrol + " = new net.rim.device.api.ui.container.GridFieldManager(1,1,0);\n" + " miGrid_" + pct._Nombrecontrol + ".add(" + pct._Nombrecontrol + ");\n" + " manejador1.add(miGrid_" + pct._Nombrecontrol + "," + (pct._posX * 2).ToString() + "," + (pct._posY * 2).ToString() + ");\n"; } #endregion #region "generacion de campos fechas" if (obj._TipoControl == "CAMPOFECHA") { PanelCampoFecha pcf = (PanelCampoFecha)arreglo[i]; if (!pcf.poseeColorfondo && !pcf.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.DateField " + pcf._Nombrecontrol + "= new net.rim.device.api.ui.component.DateField(\"\",System.currentTimeMillis(),net.rim.device.api.ui.component .DateField.DATE_TIME);\n"; } else { 121 contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.DateField " + pcf._Nombrecontrol + " = new net.rim.device.api.ui.component.DateField(\"\",System.currentTimeMillis(),net.rim.device.api.ui.component .DateField.DATE_TIME){\n" + " public void paint(Graphics g){\n"; if (pcf.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pcf.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pcf.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pcf.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } if (pcf.lb_poseeEstilo || pcf.lb_poseeOtraFamiliaTexto || pcf.lb_otrotamanioTexto) { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pcf._Nombrecontrol + ".getFont();\n"; if (pcf.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = FontFamily.forName(\"" + pcf._NombreFamiliaTexto + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pcf._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pcf.lb_poseeEstilo == true) ? pcf._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pcf.lb_otrotamanioTexto == true) ? pcf._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pcf._Nombrecontrol + ".getFont().getLeading(), " + pcf._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pcf._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + " catch(Exception ex)\n" + " {\n" + " }\n"; } contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.container.GridFieldManager miGrid_" + pcf._Nombrecontrol + " = new net.rim.device.api.ui.container.GridFieldManager(1,1,0);\n" + 122 " miGrid_" + pcf._Nombrecontrol + ".add(" + pcf._Nombrecontrol + ");\n" + " manejador1.add(miGrid_" + pcf._Nombrecontrol + "," + (pcf._posX * 2).ToString() + "," + (pcf._posY * 2).ToString() + ");\n"; } #endregion #region "generacion de campo opcion" if (obj._TipoControl == "OPCION") { PanelCampoOpcion pe = (PanelCampoOpcion)arreglo[i]; int indicePerdido = nombreGrupos.IndexOf('|'); if (indicePerdido < 0) { nombreGrupos = nombreGrupos + pe.GrupoOpcion + "|"; contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.RadioButtonGroup " + pe.GrupoOpcion + " = new net.rim.device.api.ui.component.RadioButtonGroup();\n"; if (!pe.poseeColorfondo && !pe.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.RadioButtonField " + pe._Nombrecontrol + "= new net.rim.device.api.ui.component.RadioButtonField(\"" + pe._Texto.Replace(Encoding.ASCII.GetString(new byte[] { (byte)13 }), "").Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "") + "\"," + pe.GrupoOpcion + ",false);\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.RadioButtonField " + pe._Nombrecontrol + " = new net.rim.device.api.ui.component.RadioButtonField(\"" + pe._Texto.Replace(Encoding.ASCII.GetString(new byte[] { (byte)13 }), "").Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "") + "\"," + pe.GrupoOpcion + ",false){\n" + " public void paint(Graphics g){\n"; if (pe.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pe.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pe.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pe.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } } else { if (!pe.poseeColorfondo && !pe.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.RadioButtonField " + pe._Nombrecontrol + "= new net.rim.device.api.ui.component.RadioButtonField(\"" + pe._Texto.Replace(Encoding.ASCII.GetString(new 123 byte[] { (byte)13 }), "").Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "") + "\"," + pe.GrupoOpcion + ",false);\n"; } else { contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.RadioButtonField " + pe._Nombrecontrol + " = new net.rim.device.api.ui.component.RadioButtonField(\"" + pe._Texto.Replace(Encoding.ASCII.GetString(new byte[] { (byte)13 }), "").Replace(Encoding.ASCII.GetString(new byte[] { (byte)10 }), "") + "\"," + pe.GrupoOpcion + ",false){\n" + " public void paint(Graphics g){\n"; if (pe.poseeColorfondo) { contenidoArchivo = contenidoArchivo + " g.setBackgroundColor(Color." + pe.ColorFondo.Name.ToUpper() + ");\n" + " g.fillRect(0,0,getWidth(),getHeight());\n"; } if (pe.poseeColorTextop) { contenidoArchivo = contenidoArchivo + " g.setColor(Color." + pe.ColorEtiqueta.Name.ToUpper() + ");\n"; } contenidoArchivo = contenidoArchivo + " g.clear();\n" + " super.paint(g);\n" + " }\n" + " };\n"; } } if (pe.lb_poseeEstilo || pe.lb_poseeOtraFamiliaTexto || pe.lb_otrotamanioTexto) { contenidoArchivo = contenidoArchivo + " try\n" + " {\n" + " Font f = " + pe._Nombrecontrol + ".getFont();\n"; if (pe.lb_poseeOtraFamiliaTexto) { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = FontFamily.forName(\"" + pe._NombreFamiliaTexto + "\");\n"; } else { contenidoArchivo = contenidoArchivo + " FontFamily fontFamily = " + pe._Nombrecontrol + ".getFont().getFontFamily();\n"; } String textoPlano = (pe.lb_poseeEstilo == true) ? pe._NombreEstiloTexto.ToString() : "PLAIN"; string tamanio = (pe.lb_otrotamanioTexto == true) ? pe._TamanioTexto.ToString() : "10"; contenidoArchivo = contenidoArchivo + " Font myFont = fontFamily.getFont(" + pe._Nombrecontrol + ".getFont().getLeading(), " + pe._Nombrecontrol + ".getFont().getHeight()).derive(Font." + textoPlano + ", " + tamanio + ", Ui.UNITS_pt);\n"; contenidoArchivo = contenidoArchivo + " " + pe._Nombrecontrol + ".setFont(myFont);\n"; contenidoArchivo = contenidoArchivo + " }\n" + 124 " " " catch(Exception ex)\n" + {\n" + }\n"; } contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.container.GridFieldManager miGrid_" + pe._Nombrecontrol + " = new net.rim.device.api.ui.container.GridFieldManager(1,1,0);\n" + " miGrid_" + pe._Nombrecontrol + ".add(" + pe._Nombrecontrol + ");\n" + " manejador1.add(miGrid_" + pe._Nombrecontrol + "," + (pe._posX * 2).ToString() + "," + (pe._posY * 2).ToString() + ");\n"; //" this.add(" + pe._Nombrecontrol + ");\n"; } #endregion #region "Generacion de campo boton" if (obj._TipoControl == "BOTON") { PanelBoton pbtn = (PanelBoton)arreglo[i]; contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.component.ButtonField " + pbtn._Nombrecontrol + "= new net.rim.device.api.ui.component.ButtonField(\"" + pbtn.TextoEtiqueta + "\");\n"; if (pbtn._AccionClick) { contenidoArchivo = contenidoArchivo + pbtn._FuncionClick; } contenidoArchivo = contenidoArchivo + " manejador1.add(" + pbtn._Nombrecontrol + "," + (pbtn._posX * 2).ToString() + "," + (pbtn._posY * 2).ToString() + ");\n"; } #endregion #region "Generacion de campo imagen" if (obj._TipoControl == "IMAGEN") { PanelCampoImagen pci = (PanelCampoImagen)arreglo[i]; contenidoArchivo = contenidoArchivo + " net.rim.device.api.system.Bitmap bitmap_" + pci._Nombrecontrol + " = Bitmap.getBitmapResource(\"" + pci.NombreImagenVer + "\");\n" + " int scaledX_" + pci._Nombrecontrol + " = " + (pci._ancho*2).ToString() + ";\n" + " int scaledY_" + pci._Nombrecontrol + " = " + (pci._alto*2).ToString() + ";\n" + " Bitmap bitmapScaled_" + pci._Nombrecontrol + " = new Bitmap(Bitmap.ROWWISE_32BIT_ARGB8888, scaledX_" + pci._Nombrecontrol + ", scaledY_" + pci._Nombrecontrol + ");\n" + " bitmap_" + pci._Nombrecontrol + ".scaleInto(bitmapScaled_" + pci._Nombrecontrol + ", Bitmap.FILTER_BILINEAR, Bitmap.SCALE_TO_FIT);\n" + " net.rim.device.api.ui.component.BitmapField " + pci._Nombrecontrol + "= new net.rim.device.api.ui.component.BitmapField(bitmapScaled_" + pci._Nombrecontrol + ",Field.FOCUSABLE);\n" + //contenidoArchivo = contenidoArchivo + " net.rim.device.api.ui.container.GridFieldManager miGrid_" + pci._Nombrecontrol + " = new net.rim.device.api.ui.container.GridFieldManager(1,1,0);\n" + " miGrid_" + pci._Nombrecontrol + ".add(" + pci._Nombrecontrol + ");\n" + " manejador1.add(miGrid_" + pci._Nombrecontrol + "," + (pci._posX * 2).ToString() + "," + (pci._posY * 2).ToString() + ");\n"; } #endregion #region "Generacion de campo Browser" if (obj._TipoControl == "BROWSER") { 125 PanelBrowserField pci = (PanelBrowserField)arreglo[i]; contenidoArchivo = contenidoArchivo + " net.rim.device.api.browser.field2.BrowserFieldConfig myBrowserFieldConfig_" + pci._Nombrecontrol + " = new net.rim.device.api.browser.field2.BrowserFieldConfig();\n" + " myBrowserFieldConfig_" + pci._Nombrecontrol + ".setProperty(net.rim.device.api.browser.field2.BrowserFieldConfig.NAVIGATION_MODE,net.rim.device. api.browser.field2.BrowserFieldConfig.NAVIGATION_MODE_POINTER);\n" + " net.rim.device.api.browser.field2.BrowserField browserField_" + pci._Nombrecontrol + " = new net.rim.device.api.browser.field2.BrowserField(myBrowserFieldConfig_" + pci._Nombrecontrol + ");\n" + " add(browserField_" + pci._Nombrecontrol + ");\n" + " browserField_" + pci._Nombrecontrol + ".requestContent(\"" + pci.UrlVisitaInicial + "\");\n"; } #endregion #region "Generacion de campos mapas " if (obj._TipoControl == "MAPA") { PanelCamposMapa kl = (PanelCamposMapa)arreglo[i]; contenidoArchivo = contenidoArchivo + " net.rim.device.api.lbs.maps.ui.MapField map_" + kl._Nombrecontrol + " = new net.rim.device.api.lbs.maps.ui.MapField();\n" + " net.rim.device.api.lbs.maps.ui.MapAction action_" + kl._Nombrecontrol + " = map_" + kl._Nombrecontrol + ".getAction();\n" + " action_" + kl._Nombrecontrol + ".setCentreAndZoom(new net.rim.device.api.lbs.maps.model.MapPoint(43.46518, -80.52237), 3);\n" + " add(map_" + kl._Nombrecontrol + ");\n"; } #endregion } contenidoArchivo = contenidoArchivo + " this.add(manejador1);\n" + " }\n" + " protected boolean onSavePrompt()\n" + " {\n" + " return true;\n" + " }\n"; if(this.cmbTipoFondo.Items[this.cmbTipoFondo.SelectedIndex].ToString()=="COLOR") { contenidoArchivo = contenidoArchivo + " protected void paint( Graphics graphics )\n" + " {\n" + " graphics.setBackgroundColor( net.rim.device.api.ui.Color." + this.txtColorSeleccionado.Text + " );\n" + " graphics.clear();\n" + " subpaint( graphics );\n" + " }\n" ; } contenidoArchivo = contenidoArchivo +"}\n\n" + this.txtClaseManager.Text; this.txtResultadoMovimiento.Text = contenidoArchivo; } else { MessageBox.Show("No se a diseñado ningun Objeto para la pantalla", "Sin Objetos", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } 126 catch (Exception ex) { MessageBox.Show("Ocurrio un error " + ex.Message, "Error ", MessageBoxButtons.OK, MessageBoxIcon.Error); } } #endregion public void crearDirectorios() { try { int indiceProyecto = 1; bool continua = true; if (!Directory.Exists("C:\\FuentesDesarrolladosTHWPR")) { Directory.CreateDirectory("C:\\FuentesDesarrolladosTHWPR"); } do { if (!Directory.Exists("C:\\FuentesDesarrolladosTHWPR\\Proyecto" + indiceProyecto.ToString())) { Directory.CreateDirectory("C:\\FuentesDesarrolladosTHWPR\\Proyecto" + indiceProyecto.ToString()); continua = false; } else { indiceProyecto++; continua = true; } } while (continua); if (!Directory.Exists("C:\\FuentesDesarrolladosTHWPR\\Proyecto" + indiceProyecto + "\\src")) { Directory.CreateDirectory("C:\\FuentesDesarrolladosTHWPR\\Proyecto" + indiceProyecto +"\\src"); } if (!Directory.Exists("C:\\FuentesDesarrolladosTHWPR\\Proyecto" + indiceProyecto + "\\res\\img")) { Directory.CreateDirectory("C:\\FuentesDesarrolladosTHWPR\\Proyecto" + indiceProyecto + "\\res\\img"); } _DirectorioJava = "C:\\FuentesDesarrolladosTHWPR\\Proyecto" + indiceProyecto + "\\src"; #region Creacion de Plantillas if (!System.IO.Directory.Exists("C:\\FuentesDesarrolladosTHWPR\\Plantillas")) { System.IO.Directory.CreateDirectory("C:\\FuentesDesarrolladosTHWPR\\Plantillas\\.preprossed"); System.IO.Directory.CreateDirectory("C:\\FuentesDesarrolladosTHWPR\\Plantillas\\.settings"); } System.IO.File.Copy(Application.StartupPath.ToString() + "\\Plantillas\\.classpath", "C:\\FuentesDesarrolladosTHWPR\\Plantillas\\.classpath", true); 127 System.IO.File.Copy(Application.StartupPath.ToString() + "\\Plantillas\\BlackBerry_App_Descriptor.xml", "C:\\FuentesDesarrolladosTHWPR\\Plantillas\\BlackBerry_App_Descriptor.xml", true); System.IO.File.Copy(Application.StartupPath.ToString() + "\\Plantillas\\.project", "C:\\FuentesDesarrolladosTHWPR\\Plantillas\\.project", true); System.IO.File.Copy(Application.StartupPath.ToString() + "\\Plantillas\\.settings\\org.eclipse.jdt.core.prefs", "C:\\FuentesDesarrolladosTHWPR\\Plantillas\\.settings\\org.eclipse.jdt.core.prefs", true); System.IO.File.Copy(Application.StartupPath.ToString() + "\\Plantillas\\IconApp.png", "C:\\FuentesDesarrolladosTHWPR\\Plantillas\\IconApp.png", true); #endregion System.IO.File.Copy("C:\\FuentesDesarrolladosTHWPR\\Plantillas\\IconApp.png", "C:\\FuentesDesarrolladosTHWPR\\Proyecto" + indiceProyecto + "\\res\\img\\IconApp.png", true); this.txtNombreSolucion.Text = this.txtNombreSolucion.Text + indiceProyecto; } catch (Exception ex) { MessageBox.Show("Se genero un Error al Crear Directorios " + ex.Message, "Error Creacion", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } public void creaArchivoJava() { try { //crearDirectorios(); _NombreJava = "Clase1" + ".java"; if(System.IO.File.Exists(_DirectorioJava + "\\" + _NombreJava)){ System.IO.File.Delete(_DirectorioJava + "\\" + _NombreJava); } System.IO.StreamWriter la_archivoSalida = new System.IO.StreamWriter(_DirectorioJava + "\\" + _NombreJava, true); la_archivoSalida.WriteLine(this.txtResultadoMovimiento.Text); la_archivoSalida.Close(); } catch (Exception ex) { MessageBox.Show("Se genero un Error al crear el archivo java " + ex.Message, "Error Creacion", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } private void cmbTipoFondo_SelectedIndexChanged(object sender, EventArgs e) { if (this.cmbTipoFondo.SelectedIndex > -1) { if (this.cmbTipoFondo.Items[this.cmbTipoFondo.SelectedIndex].ToString() == "COLOR") { this.pnlSeleccionarColor.Visible = true; this.pnlBuscarImgFondo.Visible = false; } if (this.cmbTipoFondo.Items[this.cmbTipoFondo.SelectedIndex].ToString() == "IMAGEN") { this.pnlSeleccionarColor.Visible = false; this.pnlBuscarImgFondo.Visible = true; } 128 if (this.cmbTipoFondo.Items[this.cmbTipoFondo.SelectedIndex].ToString() == "NINGUNO") { this.pnlSeleccionarColor.Visible = false; this.pnlBuscarImgFondo.Visible = false; this.panel1.BackgroundImage = null; this.panel1.BackColor = Color.White; } } } private void button9_Click(object sender, EventArgs e) { VentanaColores clrs = new VentanaColores(); clrs.ShowDialog(); this.txtColorSeleccionado.Text = clrs.ColorSeleccionado; this.panel1.BackColor = clrs.colorClick; } public void extraerFicherBinJava(ref string carpeta,ref string dirArchivoJar) { try { string[] directorios = Directory.GetDirectories("C:\\Program Files\\Java"); for (int i = 0; i < directorios.Length; i++) { if (directorios[i].Replace("C:\\Program Files\\Java\\", "").Substring(0, 3).ToLower() == "jdk") { if (directorios[i].Replace("C:\\Program Files\\Java\\", "").Substring(0, 6).ToLower() == "jdk1.7") { carpeta = directorios[i]; } } } dirArchivoJar = Application.StartupPath.ToString() + "\\LibreriasRIM\\"; } catch (Exception ex) { MessageBox.Show("Se genero un error de consulta de bin de java " + ex.Message, "Error Creacion", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } private void button1_Click_3(object sender, EventArgs e) { creaArchivoJava(); string res = "Archivo compilado exitosamente"; string dirJava = "",dirJarRIM=""; extraerFicherBinJava(ref dirJava, ref dirJarRIM); System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "\"" + dirJava + "\\bin\\javac\""; proc.StartInfo.Arguments = " -Xlint:unchecked -classpath \".\\;" + dirJarRIM + "net_rim_api.jar\" \"" + _DirectorioJava + "\\" + _NombreJava + "\""; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.CreateNoWindow = true; 129 proc.StartInfo.UseShellExecute = false; proc.Start(); //System.IO.StreamReader myOutput = proc.StandardOutput; proc.BeginOutputReadLine(); res = proc.StandardError.ReadToEnd(); proc.WaitForExit(); if(res.Length <= 0){ this.txtResultadoMovimiento.Text = "Archivo compilado exitosamente"; } else{ int posError = -1; posError = res.ToUpper().IndexOf("ERROR"); if (posError > -1) { this.txtResultadoMovimiento.Text = "Archivo compilado con Errores \n" + res; } else { this.txtResultadoMovimiento.Text = "Archivo compilado con Advertencias \n" + res; } } } private void button3_Click_2(object sender, EventArgs e) { if (indiceSeleccionado > -1) { arreglo.RemoveAt(indiceSeleccionado); pnlSeleccionado.Visible = false; indiceSeleccionado = -1; } } private void button4_Click_1(object sender, EventArgs e) { } private void button2_Click_2(object sender, EventArgs e) { PanelEtiqueta pnl = new PanelEtiqueta("Texto etiqueta"); aumentaPanel(pnl,pnl._ancho,pnl._alto); AsignaNombre(); } private void button6_Click_1(object sender, EventArgs e) { } private void button7_Click_1(object sender, EventArgs e) { try { if (arreglo.Count <= 0) { 130 } else { ObjetoBase objb = (ObjetoBase)arreglo[indiceSeleccionado]; if (objb._TipoControl == "BOTON") { string textoAccion = ""; PanelBoton pbtn = (PanelBoton)arreglo[indiceSeleccionado]; if (pbtn._FuncionClick.Length > 0) { textoAccion = pbtn._FuncionClick; } else { textoAccion = " " + pbtn._Nombrecontrol + ".setChangeListener(new net.rim.device.api.ui.FieldChangeListener() {\n" + " public void fieldChanged( net.rim.device.api.ui.Field field, int context) {\n" + " net.rim.device.api.ui.component.Dialog.alert(\"Accion en " + pbtn._Nombrecontrol + "\");\n" + " }\n" + " });\n"; } DialogoAccionBoton dlg = new DialogoAccionBoton(); dlg.contenidoT = textoAccion; DialogResult dr = dlg.ShowDialog(); pbtn._AccionClick = true; pbtn._FuncionClick = dlg.contenidoT; } } } catch (Exception ex) { MessageBox.Show("No se a seleccionado ningun boton para la accion", "Sin Objetos", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } private void button8_Click(object sender, EventArgs e) { try { opfdImagen.Filter = "Imagenes Ligeras (*.jpg)|*.jpg|Mapas de Bits(*.bmp)|*.bmp|Imagenes Web(*.gif)|*.gif"; opfdImagen.ShowDialog(); string pathImagen = opfdImagen.FileName; string nombreArchivo = ""; string nombreDirectorio = ""; separaDirArchivo(pathImagen, ref nombreDirectorio, ref nombreArchivo); nombreImagenFondo = nombreArchivo; this.txtImagenSeleccionada.Text = nombreImagenFondo; /*if(File.Exists("C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo)){ File.Delete("C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo); } File.Copy(pathImagen, "C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo); 131 Image img1 = Image.FromFile("C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo);*/ if (File.Exists(_DirectorioJava.Replace("\\src","\\res\\") + nombreArchivo)) { File.Delete(_DirectorioJava.Replace("\\src", "\\res\\") + nombreArchivo); } File.Copy(pathImagen, _DirectorioJava.Replace("\\src", "\\res\\") + nombreArchivo); Image img1 = Image.FromFile(_DirectorioJava.Replace("\\src", "\\res\\") + nombreArchivo); this.panel1.BackgroundImage = CambiarTamanoImagen(img1,this.panel1.Width,this.panel1.Height); } catch (Exception ex) { MessageBox.Show("no se pudo copiar la imagen seleccionada " + ex.Message, "Sin Objetos", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } public Image CambiarTamanoImagen(Image pImagen, int pAncho, int pAlto) { //creamos un bitmap con el nuevo tamaño Bitmap vBitmap = new Bitmap(pAncho, pAlto); //creamos un graphics tomando como base el nuevo Bitmap using (Graphics vGraphics = Graphics.FromImage((Image)vBitmap)) { //especificamos el tipo de transformación, se escoge esta para no perder calidad. vGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic; //Se dibuja la nueva imagen vGraphics.DrawImage(pImagen, 0, 0, pAncho, pAlto); } //retornamos la nueva imagen return (Image)vBitmap; } public void separaDirArchivo(string pathBase, ref string directorio, ref string archivo) { char[] arregloPath = pathBase.ToCharArray(); int posFinalBackSlash = 0; for (int i = 0; i < arregloPath.Length; i++) { if(arregloPath[i] == '\\'){ posFinalBackSlash = i; } } directorio = pathBase.Substring(0, posFinalBackSlash + 1); archivo = pathBase.Substring(posFinalBackSlash + 1, (pathBase.Length - directorio.Length) ); } private void txtTituloPantalla_TextChanged(object sender, EventArgs e) { this.lblTituloPantalla.Text = this.txtTituloPantalla.Text; } #region asigna propiedades visibles public void llenaPropiedades(object objetoPropiedades) { 132 try { ObjetoBase obj1 = (ObjetoBase)objetoPropiedades; cambiaTexto = false; this.txtTextoEtiquetaBB.Text = ""; this.comboBox1.Text = ""; ; this.comboBox2.Text=""; this.cmbTamanioFuenteBB.Text=""; this.comboBox1.SelectedText = ""; this.comboBox2.SelectedText = ""; cambiaTexto = true; this.cmbTamanioFuenteBB.SelectedText = ""; this.pnlImagenControl.Top = 123; this.pnlImagenControl.Left = 5; this.pnlImagenControl.Visible = false; this.pnlItemsComboBox.Top = 239; this.pnlItemsComboBox.Left = 5; this.pnlItemsComboBox.Visible = false; this.pnlValoresComboNum.Top = 239; this.pnlValoresComboNum.Left = 5; this.pnlValoresComboNum.Visible = false; this.pnlDimensiones.Top= 73; this.pnlDimensiones.Left= 6; this.pnlDimensiones.Visible=false; this.pnlFuentes.Visible = false; this.pnlColorControles.Visible = true; this.btnAccionBotonVarios.Visible = false; switch (obj1._TipoControl) { #region propiedades Etiqueta case "ETIQUETA": PanelEtiqueta pe = (PanelEtiqueta)obj1; this.txtNombreEtiquetaBB.Text = pe._Nombrecontrol; this.txtTextoEtiquetaBB.Text = pe._Texto; this.pnlFuentes.Visible = true; if (pe.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == pe._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if(pe.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == pe._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (pe.lb_otrotamanioTexto) { 133 for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == pe._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (pe.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = pe.ColorEtiqueta.Name; } if (pe.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = pe.ColorFondo.Name; } break; #endregion #region propiedades caja de texto case "CAJATEXTO": PanelCajatexto pct = (PanelCajatexto)obj1; this.txtNombreEtiquetaBB.Text = pct._Nombrecontrol; this.pnlFuentes.Visible = true; //this.txtTextoEtiquetaBB.Text = ""; //this.comboBox1.SelectedText = ""; //this.comboBox2.SelectedText = ""; //this.cmbTamanioFuenteBB.SelectedText = ""; if (pct.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == pct._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if(pct.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == pct._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (pct.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == pct._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; 134 } } } if (pct.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = pct.ColorEtiqueta.Name; } if (pct.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = pct.ColorFondo.Name; } break; #endregion #region propiedades cata texto lectura case "RICHTEXTBOX": this.pnlFuentes.Visible = true; PanelRichTextBox prtb = (PanelRichTextBox)obj1; this.txtNombreEtiquetaBB.Text = prtb._Nombrecontrol; this.txtTextoEtiquetaBB.Text = prtb._Texto; if (prtb.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == prtb._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if (prtb.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == prtb._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (prtb.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == prtb._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (prtb.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = prtb.ColorEtiqueta.Name; } 135 if (prtb.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = prtb.ColorFondo.Name; } break; #endregion #region propiedades boton case "BOTON": PanelBoton pb = (PanelBoton)obj1; this.txtNombreEtiquetaBB.Text = pb._Nombrecontrol; this.txtTextoEtiquetaBB.Text = pb._Texto; this.btnAccionBotonVarios.Top = 53;//239; this.btnAccionBotonVarios.Visible = true; break; #endregion #region propiedades password case "PASSWORD": PanelPassword ppw = (PanelPassword)obj1; this.txtNombreEtiquetaBB.Text = ppw._Nombrecontrol; if (ppw.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == ppw._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if (ppw.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == ppw._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (ppw.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == ppw._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (ppw.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = ppw.ColorEtiqueta.Name; } 136 if (ppw.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = ppw.ColorFondo.Name; } break; #endregion #region propiedades EMAIL case "EMAIL": this.pnlFuentes.Visible = true; PanelEmail pem = (PanelEmail)obj1; this.txtNombreEtiquetaBB.Text = pem._Nombrecontrol; if (pem.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == pem._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if (pem.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == pem._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (pem.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == pem._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (pem.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = pem.ColorEtiqueta.Name; } if (pem.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = pem.ColorFondo.Name; } break; #endregion #region propiedades TEXTOAUTOCOMPLETAR case "TEXTOAUTOCOMPLETAR": 137 this.pnlFuentes.Visible = true; pnlItemsComboBox.Visible = true; pnlItemsComboBox.Top = 53; pnlItemsComboBox.Left = 310; PanelTextoAutocompletar pac = (PanelTextoAutocompletar)obj1; this.txtNombreEtiquetaBB.Text = pac._Nombrecontrol; if (pac.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == pac._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if (pac.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == pac._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (pac.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == pac._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (pac.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = pac.ColorEtiqueta.Name; } if (pac.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = pac.ColorFondo.Name; } break; #endregion #region propiedades CAJATEXTOAUTOCORREGIR case "CAJATEXTOAUTOCORREGIR": this.pnlFuentes.Visible = true; PanelTextoAutocorregir paco = (PanelTextoAutocorregir)obj1; this.txtNombreEtiquetaBB.Text = paco._Nombrecontrol; if (paco.lb_poseeEstilo) { 138 for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == paco._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if (paco.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == paco._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (paco.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == paco._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (paco.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = paco.ColorEtiqueta.Name; } if (paco.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = paco.ColorFondo.Name; } break; #endregion #region propiedades TEXTOAUTOCOMPLETAR_ case "TEXTOAUTOCOMPLETAR_": this.pnlFuentes.Visible = true; PanelAutoCompletar pacom = (PanelAutoCompletar)obj1; this.txtNombreEtiquetaBB.Text = pacom._Nombrecontrol; if (pacom.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == pacom._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if (pacom.lb_poseeOtraFamiliaTexto) 139 { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == pacom._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (pacom.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == pacom._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (pacom.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = pacom.ColorEtiqueta.Name; } if (pacom.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = pacom.ColorFondo.Name; } break; #endregion #region propiedades CHECKBOX case "CHECKBOX": this.pnlFuentes.Visible = true; PanelCheckBox pchb = (PanelCheckBox)obj1; this.txtNombreEtiquetaBB.Text = pchb._Nombrecontrol; this.txtTextoEtiquetaBB.Text = pchb._Texto; //this.comboBox1.SelectedText = ""; //this.comboBox2.SelectedText = ""; //this.cmbTamanioFuenteBB.SelectedText = ""; if (pchb.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == pchb._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if (pchb.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == pchb._NombreFamiliaTexto) { 140 this.comboBox1.SelectedIndex = i; } } } if (pchb.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == pchb._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (pchb.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = pchb.ColorEtiqueta.Name; } if (pchb.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = pchb.ColorFondo.Name; } break; #endregion #region propiedades COMBOBOX case "COMBOBOX": this.pnlFuentes.Visible = true; this.pnlItemsComboBox.Visible = true; this.pnlItemsComboBox.Top = 53; this.pnlItemsComboBox.Left = 310; PanelComboBox pcb = (PanelComboBox)obj1; this.txtNombreEtiquetaBB.Text = pcb._Nombrecontrol; //this.txtTextoEtiquetaBB.Text = ""; //this.comboBox1.SelectedText = ""; //this.comboBox2.SelectedText = ""; //this.cmbTamanioFuenteBB.SelectedText = ""; if (pcb.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == pcb._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if(pcb.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == pcb._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } 141 } } if (pcb.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == pcb._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (pcb.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = pcb.ColorEtiqueta.Name; } if (pcb.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = pcb.ColorFondo.Name; } try { this.txtContenidoCombo.Text = ""; string contTempItems = ""; for (int i = 0; i < pcb.Contenido.Length; i++) { contTempItems = contTempItems + pcb.Contenido.GetValue(i).ToString() + Encoding.ASCII.GetString(new byte[] { (byte)13 }).ToString() + Encoding.ASCII.GetString(new byte[] { (byte)10 }).ToString(); } this.txtContenidoCombo.Text = contTempItems; } catch (Exception ex) { } break; #endregion #region propiedades COMBOBOXNUMERICO case "COMBOBOXNUMERICO": this.pnlFuentes.Visible = true; this.pnlValoresComboNum.Visible = true; this.pnlValoresComboNum.Top=197; this.pnlValoresComboNum.Left = 6; PanelComboBoxNumerico pcbn = (PanelComboBoxNumerico)obj1; this.txtNombreEtiquetaBB.Text = pcbn._Nombrecontrol; //this.txtTextoEtiquetaBB.Text = ""; //this.comboBox1.SelectedText = ""; //this.comboBox2.SelectedText = ""; //this.cmbTamanioFuenteBB.SelectedText = ""; if (pcbn.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == pcbn._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; 142 } } } if(pcbn.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == pcbn._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (pcbn.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == pcbn._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (pcbn.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = pcbn.ColorEtiqueta.Name; } if (pcbn.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = pcbn.ColorFondo.Name; } this.txtMinimo.Text = pcbn.indiceInicio.ToString(); this.txtComienzo.Text = pcbn.comienzo.ToString(); this.txtIncremento.Text = pcbn.incremento.ToString(); this.txtMaximo.Text = pcbn.indiceFinal.ToString(); break; #endregion #region propiedades CAMPOFECHA case "CAMPOFECHA": PanelCampoFecha pcf = (PanelCampoFecha)obj1; this.txtNombreEtiquetaBB.Text = pcf._Nombrecontrol; //this.txtTextoEtiquetaBB.Text = ""; //this.comboBox1.SelectedText = ""; //this.comboBox2.SelectedText = ""; //this.cmbTamanioFuenteBB.SelectedText = ""; if (pcf.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == pcf._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } 143 } if(pcf.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { if (this.comboBox1.Items[i].ToString() == pcf._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (pcf.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == pcf._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (pcf.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = pcf.ColorEtiqueta.Name; } if (pcf.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = pcf.ColorFondo.Name; } break; #endregion #region propiedades OPCION case "OPCION": this.pnlFuentes.Visible = true; PanelCampoOpcion pco = (PanelCampoOpcion)obj1; this.txtNombreEtiquetaBB.Text = pco._Nombrecontrol; this.txtTextoEtiquetaBB.Text = pco._Texto; //this.comboBox1.SelectedText = ""; //this.comboBox2.SelectedText = ""; //this.cmbTamanioFuenteBB.SelectedText = ""; if (pco.lb_poseeEstilo) { for (int i = 0; i < this.comboBox2.Items.Count; i++) { if (this.comboBox2.Items[i].ToString() == pco._NombreEstiloTexto) { this.comboBox2.SelectedIndex = i; } } } if (pco.lb_poseeOtraFamiliaTexto) { for (int i = 0; i < this.comboBox1.Items.Count; i++) { 144 if (this.comboBox1.Items[i].ToString() == pco._NombreFamiliaTexto) { this.comboBox1.SelectedIndex = i; } } } if (pco.lb_otrotamanioTexto) { for (int i = 0; i < this.cmbTamanioFuenteBB.Items.Count; i++) { if (this.cmbTamanioFuenteBB.Items[i].ToString() == pco._TamanioTexto) { this.cmbTamanioFuenteBB.SelectedIndex = i; } } } if (pco.poseeColorTextop) { this.txtColorFuenteEtiquetaBB.Text = ""; this.txtColorFuenteEtiquetaBB.Text = pco.ColorEtiqueta.Name; } if (pco.poseeColorfondo) { this.txtColorFodoEtiquetaBB.Text = ""; this.txtColorFodoEtiquetaBB.Text = pco.ColorFondo.Name; } break; #endregion #region propiedades IMAGEN case "IMAGEN": PanelCampoImagen pci = (PanelCampoImagen)obj1; this.txtNombreEtiquetaBB.Text = pci._Nombrecontrol; this.pnlFuentes.Visible = false; this.pnlColorControles.Visible = false; this.txtAncho.Text = pci._ancho.ToString(); this.txtAlto.Text = pci._alto.ToString(); this.pnlDimensiones.Visible=true; this.pnlImagenControl.Visible = true; break; #endregion #region propiedades BROWSER case "BROWSER": PanelBrowserField pbw = (PanelBrowserField)obj1; this.txtNombreEtiquetaBB.Text = pbw._Nombrecontrol; this.pnlFuentes.Visible = false; this.pnlColorControles.Visible = false; break; #endregion #region propiedades MAPA case "MAPA": PanelCamposMapa pm = (PanelCamposMapa)obj1; this.txtNombreEtiquetaBB.Text = pm._Nombrecontrol; this.pnlFuentes.Visible = false; this.pnlColorControles.Visible = false; break; #endregion } 145 } catch (Exception ex) { MessageBox.Show("Error " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } #endregion #region cambia nombre controles private void txtNombreEtiquetaBB_TextChanged(object sender, EventArgs e) { ObjetoBase obj = (ObjetoBase)arreglo[indiceSeleccionado]; switch (obj._TipoControl) { #region nombre etiqueta case "ETIQUETA": PanelEtiqueta pe = (PanelEtiqueta)obj; pe._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre richttextbox case "RICHTEXTBOX": PanelRichTextBox prtb = (PanelRichTextBox)obj; prtb._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre CAJATEXTO case "CAJATEXTO": PanelCajatexto pct = (PanelCajatexto)obj; pct._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre BOTON case "BOTON": PanelBoton pb = (PanelBoton)obj; pb._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre PASSWORD case "PASSWORD": PanelPassword pp = (PanelPassword)obj; pp._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre EMAIL case "EMAIL": PanelEmail pem = (PanelEmail)obj; pem._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre TEXTOAUTOCOMPLETAR case "TEXTOAUTOCOMPLETAR": PanelTextoAutocompletar pta = (PanelTextoAutocompletar)obj; pta._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre CAJATEXTOAUTOCORREGIR 146 case "CAJATEXTOAUTOCORREGIR": PanelTextoAutocorregir ptac = (PanelTextoAutocorregir)obj; ptac._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre TEXTOAUTOCOMPLETAR_ case "TEXTOAUTOCOMPLETAR_": PanelAutoCompletar paut = (PanelAutoCompletar)obj; paut._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre CHECKBOX case "CHECKBOX": PanelCheckBox pchb = (PanelCheckBox)obj; pchb._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre COMBOBOX case "COMBOBOX": PanelComboBox pcb = (PanelComboBox)obj; pcb._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre COMBOBOXNUMERICO case "COMBOBOXNUMERICO": PanelComboBoxNumerico pcbn = (PanelComboBoxNumerico)obj; pcbn._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre CAMPOFECHA case "CAMPOFECHA": PanelCampoFecha pf = (PanelCampoFecha)obj; pf._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre OPCION case "OPCION": PanelCampoOpcion po = (PanelCampoOpcion)obj; po._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre IMAGEN case "IMAGEN": PanelCampoImagen pim = (PanelCampoImagen)obj; pim._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre BROWSER case "BROWSER": PanelBrowserField pbr = (PanelBrowserField)obj; pbr._Nombrecontrol = this.txtNombreEtiquetaBB.Text; break; #endregion #region nombre MAPA case "MAPA": PanelCamposMapa pmap = (PanelCamposMapa)obj; pmap._Nombrecontrol = this.txtNombreEtiquetaBB.Text; 147 break; #endregion } } #endregion #region cambia texto controles private void txtTextoEtiquetaBB_TextChanged(object sender, EventArgs e) { if (cambiaTexto) { ObjetoBase obj = (ObjetoBase)arreglo[indiceSeleccionado]; switch (obj._TipoControl) { #region texto ETIQUETA case "ETIQUETA": PanelEtiqueta pe = (PanelEtiqueta)obj; pe._Texto = this.txtTextoEtiquetaBB.Text; pe.cambiaEtiquetaVisible(this.txtTextoEtiquetaBB.Text); break; #endregion #region texto RICHTEXTBOX case "RICHTEXTBOX": PanelRichTextBox prtb = (PanelRichTextBox)obj; prtb._Texto = this.txtTextoEtiquetaBB.Text; prtb.cambiaEtiquetaVisible(this.txtTextoEtiquetaBB.Text); break; #endregion #region texto BOTON case "BOTON": PanelBoton pb = (PanelBoton)obj; pb._Texto = this.txtNombreEtiquetaBB.Text; pb.cambiaEtiquetaVisible(pb._Texto); break; #endregion #region texto CHECKBOX case "CHECKBOX": PanelCheckBox pchb = (PanelCheckBox)obj; pchb._Texto = this.txtNombreEtiquetaBB.Text; pchb.cambiaEtiquetaVisible(pchb._Texto); break; #endregion #region texto OPCION case "OPCION": PanelCampoOpcion pco = (PanelCampoOpcion)obj; pco._Texto = this.txtNombreEtiquetaBB.Text; pco.cambiaEtiquetaVisible(pco._Texto); break; #endregion } } } #endregion #region cambia color texto controles private void button10_Click(object sender, EventArgs e) { ObjetoBase obj = (ObjetoBase)arreglo[indiceSeleccionado]; VentanaColores vc = new VentanaColores(); 148 vc.ShowDialog(); switch (obj._TipoControl) { #region color texto ETIQUETA case "ETIQUETA": PanelEtiqueta pe = (PanelEtiqueta)obj; pe.ColorEtiqueta = vc.colorClick; pe.cambiarColorEtiqueta(vc.colorClick); break; #endregion #region color texto RICHTEXTBOX case "RICHTEXTBOX": PanelRichTextBox prtb = (PanelRichTextBox)obj; prtb.ColorEtiqueta = vc.colorClick; prtb.cambiarColorEtiqueta(vc.colorClick); break; #endregion #region color texto CAJATEXTO case "CAJATEXTO": PanelCajatexto pct = (PanelCajatexto)obj; pct.ColorEtiqueta = vc.colorClick; break; #endregion #region color texto PASSWORD case "PASSWORD": PanelPassword pp = (PanelPassword)obj; pp.ColorEtiqueta = vc.colorClick; break; #endregion #region color texto EMAIL case "EMAIL": PanelEmail pem = (PanelEmail)obj; pem.ColorEtiqueta = vc.colorClick; break; #endregion #region color texto TEXTOAUTOCOMPLETAR case "TEXTOAUTOCOMPLETAR": PanelTextoAutocompletar pta = (PanelTextoAutocompletar)obj; pta.ColorEtiqueta = vc.colorClick; break; #endregion #region color texto CAJATEXTOAUTOCORREGIR case "CAJATEXTOAUTOCORREGIR": PanelTextoAutocorregir ptac = (PanelTextoAutocorregir)obj; ptac.ColorEtiqueta = vc.colorClick; break; #endregion #region color texto TEXTOAUTOCOMPLETAR_ case "TEXTOAUTOCOMPLETAR_": PanelAutoCompletar paut = (PanelAutoCompletar)obj; paut.ColorEtiqueta = vc.colorClick; break; #endregion #region color texto CHECKBOX case "CHECKBOX": PanelCheckBox pchb = (PanelCheckBox)obj; pchb.ColorEtiqueta = vc.colorClick; 149 pchb.cambiarColorEtiqueta(vc.colorClick); break; #endregion #region color texto COMBOBOX case "COMBOBOX": PanelComboBox pcb = (PanelComboBox)obj; pcb.ColorEtiqueta = vc.colorClick; break; #endregion #region coolor texto COMBOBOXNUMERICO case "COMBOBOXNUMERICO": PanelComboBoxNumerico pcbn = (PanelComboBoxNumerico)obj; pcbn.ColorEtiqueta = vc.colorClick; break; #endregion #region color texto CAMPOFECHA case "CAMPOFECHA": PanelCampoFecha pf = (PanelCampoFecha)obj; pf.ColorEtiqueta = vc.colorClick; break; #endregion #region color texto OPCION case "OPCION": PanelCampoOpcion po = (PanelCampoOpcion)obj; po.ColorEtiqueta = vc.colorClick; po.cambiarColorEtiqueta(vc.colorClick); break; #endregion } this.txtColorFuenteEtiquetaBB.Text = vc.colorClick.Name; } #endregion #region cambia color fondo controles private void button11_Click(object sender, EventArgs e) { ObjetoBase obj = (ObjetoBase)arreglo[indiceSeleccionado]; VentanaColores vc = new VentanaColores(); vc.ShowDialog(); switch (obj._TipoControl) { case "ETIQUETA": PanelEtiqueta pe = (PanelEtiqueta)obj; pe.ColorFondo = vc.colorClick; pe.cambiarColorFondo(vc.colorClick); this.txtColorFodoEtiquetaBB.Text = vc.colorClick.Name; break; case "RICHTEXTBOX": PanelRichTextBox prtb = (PanelRichTextBox)obj; prtb.ColorFondo = vc.colorClick; prtb.cambiarColorFondo(vc.colorClick); this.txtColorFodoEtiquetaBB.Text = vc.colorClick.Name; break; case "CAJATEXTO": PanelCajatexto pct = (PanelCajatexto)obj; pct.ColorFondo = vc.colorClick; pct.cambiarColorFondo(vc.colorClick); this.txtColorFodoEtiquetaBB.Text = vc.colorClick.Name; 150 break; } } #endregion #region cambia familia texto private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (cambiaTexto) { ObjetoBase obj = (ObjetoBase)arreglo[indiceSeleccionado]; switch (obj._TipoControl) { #region familia texto ETIQUETA case "ETIQUETA": PanelEtiqueta pe = (PanelEtiqueta)obj; pe._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); pe.cambiaFamiliaTexto(pe._NombreFamiliaTexto); break; #endregion #region familia texto RICHTEXTBOX case "RICHTEXTBOX": PanelRichTextBox prtb = (PanelRichTextBox)obj; prtb._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); prtb.cambiaFamiliaTexto(prtb._NombreFamiliaTexto); break; #endregion #region familia texto CAJATEXTO case "CAJATEXTO": PanelCajatexto pct = (PanelCajatexto)obj; pct._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); break; #endregion #region nombre familia texto PASSWORD case "PASSWORD": PanelPassword pp = (PanelPassword)obj; pp._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); break; #endregion #region nombre familia texto EMAIL case "EMAIL": PanelEmail pem = (PanelEmail)obj; pem._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); break; #endregion #region nombre familia texto TEXTOAUTOCOMPLETAR case "TEXTOAUTOCOMPLETAR": PanelTextoAutocompletar pta = (PanelTextoAutocompletar)obj; pta._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); break; #endregion 151 #region nombre familia texto CAJATEXTOAUTOCORREGIR case "CAJATEXTOAUTOCORREGIR": PanelTextoAutocorregir ptac = (PanelTextoAutocorregir)obj; ptac._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); break; #endregion #region nombre familia texto TEXTOAUTOCOMPLETAR_ case "TEXTOAUTOCOMPLETAR_": PanelAutoCompletar paut = (PanelAutoCompletar)obj; paut._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); break; #endregion #region nombre familia texto CHECKBOX case "CHECKBOX": PanelCheckBox pchb = (PanelCheckBox)obj; pchb._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); pchb.cambiaFamiliaTexto(this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString()); break; #endregion #region nombre familia texto COMBOBOX case "COMBOBOX": PanelComboBox pcb = (PanelComboBox)obj; pcb._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); break; #endregion #region nombre familia COMBOBOXNUMERICO case "COMBOBOXNUMERICO": PanelComboBoxNumerico pcbn = (PanelComboBoxNumerico)obj; pcbn._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); break; #endregion #region nombre familia CAMPOFECHA case "CAMPOFECHA": PanelCampoFecha pf = (PanelCampoFecha)obj; pf._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); break; #endregion #region nombre familia OPCION case "OPCION": PanelCampoOpcion po = (PanelCampoOpcion)obj; po._NombreFamiliaTexto = this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString(); po.cambiaFamiliaTexto(this.comboBox1.Items[this.comboBox1.SelectedIndex].ToString()); break; #endregion } } } 152 #endregion #region modifica estilo textos private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { if (cambiaTexto) { ObjetoBase obj = (ObjetoBase)arreglo[indiceSeleccionado]; switch (obj._TipoControl) { #region nombre estilo ETIQUETA case "ETIQUETA": PanelEtiqueta pe = (PanelEtiqueta)obj; pe._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); pe.cambiarEstiloTexto(pe._NombreEstiloTexto); break; #endregion #region nombre estilo RICHTEXTBOX case "RICHTEXTBOX": PanelRichTextBox prtb = (PanelRichTextBox)obj; prtb._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); prtb.cambiarEstiloTexto(prtb._NombreEstiloTexto); break; #endregion #region nombre estilo CAJATEXTO case "CAJATEXTO": PanelCajatexto pct = (PanelCajatexto)obj; pct._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); break; #endregion #region nombre estilo texto PASSWORD case "PASSWORD": PanelPassword pp = (PanelPassword)obj; pp._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); break; #endregion #region nombre estilo texto EMAIL case "EMAIL": PanelEmail pem = (PanelEmail)obj; pem._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); break; #endregion #region nombre estilo texto TEXTOAUTOCOMPLETAR case "TEXTOAUTOCOMPLETAR": PanelTextoAutocompletar pta = (PanelTextoAutocompletar)obj; pta._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); break; #endregion #region nombre estilo texto CAJATEXTOAUTOCORREGIR case "CAJATEXTOAUTOCORREGIR": PanelTextoAutocorregir ptac = (PanelTextoAutocorregir)obj; 153 ptac._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); break; #endregion #region nombre estilo texto TEXTOAUTOCOMPLETAR_ case "TEXTOAUTOCOMPLETAR_": PanelAutoCompletar paut = (PanelAutoCompletar)obj; paut._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); break; #endregion #region nombre estilo texto CHECKBOX case "CHECKBOX": PanelCheckBox pchb = (PanelCheckBox)obj; pchb._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); pchb.cambiarEstiloTexto(this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString()); break; #endregion #region nombre estilo texto COMBOBOX case "COMBOBOX": PanelComboBox pcb = (PanelComboBox)obj; pcb._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); break; #endregion #region nombre estilo COMBOBOXNUMERICO case "COMBOBOXNUMERICO": PanelComboBoxNumerico pcbn = (PanelComboBoxNumerico)obj; pcbn._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); break; #endregion #region nombre estilo CAMPOFECHA case "CAMPOFECHA": PanelCampoFecha pf = (PanelCampoFecha)obj; pf._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); break; #endregion #region nombre estilo OPCION case "OPCION": PanelCampoOpcion po = (PanelCampoOpcion)obj; po._NombreEstiloTexto = this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString(); po.cambiarEstiloTexto(this.comboBox2.Items[this.comboBox2.SelectedIndex].ToString()); break; #endregion } } } #endregion #region modifica tamaño controles private void cmbTamanioFuenteBB_SelectedIndexChanged(object sender, EventArgs e) { if (cambiaTexto) 154 { ObjetoBase obj = (ObjetoBase)arreglo[indiceSeleccionado]; switch (obj._TipoControl) { #region tamaño texto ETIQUETA case "ETIQUETA": PanelEtiqueta pe = (PanelEtiqueta)obj; pe._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); pe.modificaTamanioTexto(pe._TamanioTexto); break; #endregion #region tamaño textoRICHTEXTBOX case "RICHTEXTBOX": PanelRichTextBox prtb = (PanelRichTextBox)obj; prtb._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); prtb.modificaTamanioTexto(prtb._TamanioTexto); break; #endregion #region tamaño texto CAJATEXTO case "CAJATEXTO": PanelCajatexto pct = (PanelCajatexto)obj; pct._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); break; #endregion #region tamaño texto PASSWORD case "PASSWORD": PanelPassword pp = (PanelPassword)obj; pp._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); break; #endregion #region tamaño texto EMAIL case "EMAIL": PanelEmail pem = (PanelEmail)obj; pem._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); break; #endregion #region tamaño texto TEXTOAUTOCOMPLETAR case "TEXTOAUTOCOMPLETAR": PanelTextoAutocompletar pta = (PanelTextoAutocompletar)obj; pta._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); break; #endregion #region tamaño texto CAJATEXTOAUTOCORREGIR case "CAJATEXTOAUTOCORREGIR": PanelTextoAutocorregir ptac = (PanelTextoAutocorregir)obj; ptac._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); break; #endregion #region tamaño texto TEXTOAUTOCOMPLETAR_ case "TEXTOAUTOCOMPLETAR_": 155 PanelAutoCompletar paut = (PanelAutoCompletar)obj; paut._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); break; #endregion #region tamaño texto CHECKBOX case "CHECKBOX": PanelCheckBox pchb = (PanelCheckBox)obj; pchb._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); pchb.modificaTamanioTexto(this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex]. ToString()); break; #endregion #region tamaño texto COMBOBOX case "COMBOBOX": PanelComboBox pcb = (PanelComboBox)obj; pcb._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); break; #endregion #region tamaño COMBOBOXNUMERICO case "COMBOBOXNUMERICO": PanelComboBoxNumerico pcbn = (PanelComboBoxNumerico)obj; pcbn._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); break; #endregion #region tamaño CAMPOFECHA case "CAMPOFECHA": PanelCampoFecha pf = (PanelCampoFecha)obj; pf._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); break; #endregion #region tamaño texto OPCION case "OPCION": PanelCampoOpcion po = (PanelCampoOpcion)obj; po._TamanioTexto = this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].ToString(); po.modificaTamanioTexto(this.cmbTamanioFuenteBB.Items[this.cmbTamanioFuenteBB.SelectedIndex].To String()); break; #endregion } } } #endregion #region agrega control etiqueta private void AgregaEtiqueta_Click(object sender, EventArgs e) { PanelEtiqueta pnl = new PanelEtiqueta("Texto etiqueta"); aumentaPanel(pnl, pnl._ancho,pnl._alto); AsignaNombre(); } 156 #endregion #region agrega control caja texto solo lectura private void button12_Click(object sender, EventArgs e) { PanelRichTextBox pnl = new PanelRichTextBox("Texto Caja"); aumentaPanel(pnl, pnl._ancho, pnl._alto); AsignaNombre(); } #endregion private void txtColorFuenteEtiquetaBB_TextChanged(object sender, EventArgs e) { } #region agrega control caja texto private void button2_Click(object sender, EventArgs e) { PanelCajatexto pnl = new PanelCajatexto(true); aumentaPanel(pnl,pnl._ancho,pnl._alto); AsignaNombre(); } #endregion #region agrega control password private void button13_Click(object sender, EventArgs e) { PanelPassword pnl = new PanelPassword(true); aumentaPanel(pnl,pnl._ancho,pnl._alto); AsignaNombre(); } #endregion #region elimina contorl seleccionado private void toolStripMenuItem1_Click_1(object sender, EventArgs e) { try { arreglo.RemoveAt(indiceSeleccionado); pnlSeleccionado.Visible = false; indiceSeleccionado = -1; } catch (Exception ex) { MessageBox.Show("No Existen Elementos Para Eliminar", "No Items", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } #endregion #region agrega control email private void button14_Click(object sender, EventArgs e) { PanelEmail pnl = new PanelEmail(true); aumentaPanel(pnl,pnl._ancho,pnl._alto); AsignaNombre(); } #endregion #region agrega control texto autocompletar private void button15_Click(object sender, EventArgs e) { PanelTextoAutocompletar ptac = new PanelTextoAutocompletar(true); 157 aumentaPanel(ptac,ptac._ancho,ptac._alto); AsignaNombre(); } #endregion #region cambia texto de combos box private void button16_Click(object sender, EventArgs e) { DialogoAccionBoton vnt = new DialogoAccionBoton(); vnt.Text = "Contenido "; vnt.ShowDialog(); this.txtContenidoCombo.Text = vnt.contenidoT; string conteidoIngresado = vnt.contenidoT; string[] miArregloIngresado = conteidoIngresado.Replace(Encoding.ASCII.GetString(new byte[] { (byte)13 }).ToString() + Encoding.ASCII.GetString(new byte[] { (byte)10 }).ToString(),"*").Split('*'); Array n = miArregloIngresado.ToArray(); ObjetoBase obj1 = (ObjetoBase)arreglo[indiceSeleccionado]; if (obj1._TipoControl == "TEXTOAUTOCOMPLETAR") { PanelTextoAutocompletar ptac = (PanelTextoAutocompletar)arreglo[indiceSeleccionado]; ptac.Contenido = n; } if (obj1._TipoControl == "COMBOBOX") { PanelComboBox ptac = (PanelComboBox)arreglo[indiceSeleccionado]; ptac.Contenido = n; } } #endregion #region agrega control autocorregir private void button18_Click(object sender, EventArgs e) { PanelTextoAutocorregir ptac = new PanelTextoAutocorregir(true); aumentaPanel(ptac,ptac._ancho,ptac._alto); AsignaNombre(); } #endregion #region agrega region autocompletar private void button19_Click(object sender, EventArgs e) { PanelAutoCompletar ptac = new PanelAutoCompletar(true); aumentaPanel(ptac,ptac._ancho,ptac._alto); AsignaNombre(); } #endregion private void ovalShape1_Click(object sender, EventArgs e) { } #region agrega control check box private void button4_Click(object sender, EventArgs e) { PanelCheckBox ptac = new PanelCheckBox(); aumentaPanel(ptac,ptac._ancho,ptac._alto); AsignaNombre(); } #endregion #region agrega control combo box 158 private void button20_Click(object sender, EventArgs e) { PanelComboBox ptac = new PanelComboBox(true); aumentaPanel(ptac,ptac._ancho,ptac._alto); AsignaNombre(); } #endregion #region agrega contorl combo box numerico private void button21_Click(object sender, EventArgs e) { PanelComboBoxNumerico pcbn = new PanelComboBoxNumerico(true); pcbn.indiceInicio = 0; pcbn.indiceFinal = 100; pcbn.incremento = 1; pcbn.comienzo = 0; aumentaPanel(pcbn,pcbn._ancho,pcbn._alto); AsignaNombre(); } #endregion #region agrega control fecha private void button22_Click(object sender, EventArgs e) { PanelCampoFecha ptac = new PanelCampoFecha(true); aumentaPanel(ptac,ptac._ancho,ptac._alto); AsignaNombre(); } #endregion #region agrega control opcion private void button23_Click(object sender, EventArgs e) { PanelCampoOpcion pco = new PanelCampoOpcion(); aumentaPanel(pco, pco._ancho,pco._alto); AsignaNombre(); } #endregion #region agrega control boton private void button24_Click(object sender, EventArgs e) { PanelBoton pnl = new PanelBoton(true); aumentaPanel(pnl,pnl._ancho,pnl._alto);//,pnl._ancho); AsignaNombre(); } #endregion #region agrega campo imagen private void button6_Click(object sender, EventArgs e) { PanelCampoImagen pci = new PanelCampoImagen(); aumentaPanel(pci, pci._ancho,pci._alto); AsignaNombre(); } #endregion #region cambia imagen de control imagen private void button25_Click(object sender, EventArgs e) { ObjetoBase obj = (ObjetoBase)arreglo[indiceSeleccionado]; if (obj._TipoControl == "IMAGEN") { 159 PanelCampoImagen pci = (PanelCampoImagen)arreglo[indiceSeleccionado]; opfdImagen.Filter = "Imagenes Ligeras (*.jpg)|*.jpg|Mapas de Bits(*.bmp)|*.bmp|Imagenes Web(*.gif)|*.gif"; opfdImagen.ShowDialog(); string pathImagen = opfdImagen.FileName; string nombreArchivo = ""; string nombreDirectorio = ""; separaDirArchivo(pathImagen, ref nombreDirectorio, ref nombreArchivo); nombreImagenFondo = nombreArchivo; this.txtImagenSeleccionada.Text = nombreImagenFondo; /*if(File.Exists("C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo)){ File.Delete("C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo); } File.Copy(pathImagen, "C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo); Image img1 = Image.FromFile("C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo);*/ if (File.Exists(_DirectorioJava.Replace("\\src", "\\res\\") + nombreArchivo)) { File.Delete(_DirectorioJava.Replace("\\src", "\\res\\") + nombreArchivo); } File.Copy(pathImagen, _DirectorioJava.Replace("\\src", "\\res\\") + nombreArchivo); Image img1 = Image.FromFile(_DirectorioJava.Replace("\\src", "\\res\\") + nombreArchivo); pci.BackgroundImage = CambiarTamanoImagen(img1, pci._ancho, pci._alto); pci.NombreImagenVer = nombreArchivo; pci.rutaImagentemporal = pathImagen; } } #endregion #region agrega campo navegador private void button26_Click(object sender, EventArgs e) { PanelBrowserField pci = new PanelBrowserField(); aumentaPanel(pci, pci._ancho, pci._alto); AsignaNombre(); } #endregion #region agrega campo mapa private void button27_Click(object sender, EventArgs e) { PanelCamposMapa pci = new PanelCamposMapa(); aumentaPanel(pci, pci._ancho, pci._alto); AsignaNombre(); } #endregion #region cambia icono de barra de ventana private void btnBotonImagenIcono_Click(object sender, EventArgs e) { opfdImagen.Filter = "Imagenes Ligeras de Iconos(*.png)|*.png|Mapas de Bits(*.bmp)|*.bmp|Imagenes Web(*.gif)|*.gif"; opfdImagen.ShowDialog(); string pathImagen = opfdImagen.FileName; System.IO.FileInfo finfo = new System.IO.FileInfo(pathImagen); if (finfo.Length > 18037) { 160 MessageBox.Show("El Tamaño de la imagen es Superior al permitido...favor de seleccionar imagenes de maximo 18kb", "Archivo incorrecto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } string nombreArchivo = ""; string nombreDirectorio = ""; separaDirArchivo(pathImagen, ref nombreDirectorio, ref nombreArchivo); this.txtImagenSeleccionada.Text = nombreImagenFondo; /*if(File.Exists("C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo)){ File.Delete("C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo); } File.Copy(pathImagen, "C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo); Image img1 = Image.FromFile("C:\\FuentesDesarrolladosTHWPR\\Proyecto\\res\\" + nombreArchivo);*/ if (File.Exists(_DirectorioJava.Replace("\\src", "\\res\\") + nombreArchivo)) { File.Delete(_DirectorioJava.Replace("\\src", "\\res\\") + nombreArchivo); } try { File.Copy(pathImagen, _DirectorioJava.Replace("\\src", "\\res\\") + nombreArchivo); } catch (Exception ex) { MessageBox.Show("La Imagen se encuentra en el Proyecto Actual","Imagen Existente",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); } this.txtImagenIcono.Text = nombreArchivo; } #endregion #region genera solucion private void button28_Click(object sender, EventArgs e) { string pathInput = _DirectorioJava.Substring(0,_DirectorioJava.Length-4); string pathOutput = _DirectorioJava.Substring(0, _DirectorioJava.Length - 4) + "\\Solucion"; string nombreApp = this.txtNombreSolucion.Text; generasolucion(pathInput, pathOutput, nombreApp); } #endregion private void pnlPropiedadesEtiqueta_Paint(object sender, PaintEventArgs e) { } private void textBox9_TextChanged(object sender, EventArgs e) { PanelComboBoxNumerico pbk = (PanelComboBoxNumerico)arreglo[indiceSeleccionado]; pbk.indiceInicio = int.Parse((this.txtMinimo.Text == "") ? "0" : this.txtMinimo.Text); } private void textBox8_TextChanged(object sender, EventArgs e) { PanelComboBoxNumerico pbk = (PanelComboBoxNumerico)arreglo[indiceSeleccionado]; 161 pbk.comienzo = int.Parse((this.txtComienzo.Text == "") ? "0" : this.txtComienzo.Text); } private void textBox4_TextChanged(object sender, EventArgs e) { } private void textBox7_TextChanged(object sender, EventArgs e) { PanelComboBoxNumerico pbk = (PanelComboBoxNumerico)arreglo[indiceSeleccionado]; pbk.incremento = int.Parse((this.txtIncremento.Text == "") ? "0" : this.txtIncremento.Text); } private void label17_Click(object sender, EventArgs e) { } private void imgChoice_TextChanged(object sender, EventArgs e) { } private void txtMaximo_TextChanged(object sender, EventArgs e) { PanelComboBoxNumerico pbk = (PanelComboBoxNumerico)arreglo[indiceSeleccionado]; pbk.indiceFinal = int.Parse((this.txtMaximo.Text == "") ? "0" : this.txtMaximo.Text); } private void txtAncho_TextChanged(object sender, EventArgs e) { PanelCampoImagen pci = (PanelCampoImagen)arreglo[indiceSeleccionado]; pci._ancho = int.Parse((this.txtAncho.Text=="")?"0":this.txtAncho.Text); pci.Width = pci._ancho; } private void txtAlto_TextChanged(object sender, EventArgs e) { PanelCampoImagen pci = (PanelCampoImagen)arreglo[indiceSeleccionado]; pci._alto = int.Parse((this.txtAlto.Text == "") ? "0" : this.txtAlto.Text); pci.Height = pci._alto; } private void timer1_Tick(object sender, EventArgs e) { if(mostrar>=5){ this.Opacity = 100; this.Visible=true; this.Show(); this.timer1.Enabled = false; } else { this.Visible = false; this.Hide(); } 162 mostrar++; } private void toolTip1_Popup(object sender, PopupEventArgs e) { } private void menuStrip1_ItemClicked_2(object sender, ToolStripItemClickedEventArgs e) { } private void mostrarCodigoToolStripMenuItem_Click(object sender, EventArgs e) { } private void compilarToolStripMenuItem_Click(object sender, EventArgs e) { } private void generarSoluciónToolStripMenuItem_Click(object sender, EventArgs e) { } private void generarCodigoToolStripMenuItem_Click(object sender, EventArgs e) { //if (button5.Text == "Mostrar Código") if(generarCodigoToolStripMenuItem.Text == "Mostrar Código") { generarCodigoToolStripMenuItem.Text = "Mostrar Diseño"; pnlImagenBlackBerry.Visible = false; pnlCodigoGenerado.Visible = true; pnlCodigoGenerado.Left = 605; pnlCodigoGenerado.Top = 35; pnlCodigoGenerado.Width = 505; pnlCodigoGenerado.Height = 697; generaCodigoJava(); } else { generarCodigoToolStripMenuItem.Text = "Mostrar Código"; pnlCodigoGenerado.Visible = false; pnlImagenBlackBerry.Visible = true; pnlImagenBlackBerry.Left = 605; pnlImagenBlackBerry.Top = 35; } } private void generarSolucionToolStripMenuItem_Click(object sender, EventArgs e) { string pathInput = _DirectorioJava.Substring(0, _DirectorioJava.Length - 4); string pathOutput = _DirectorioJava.Substring(0, _DirectorioJava.Length - 4) + "\\Solucion"; string nombreApp = this.txtNombreSolucion.Text; 163 generasolucion(pathInput, pathOutput, nombreApp); } private void compilarToolStripMenuItem1_Click(object sender, EventArgs e) { creaArchivoJava(); string res = "Archivo compilado exitosamente"; string dirJava = "", dirJarRIM = ""; extraerFicherBinJava(ref dirJava, ref dirJarRIM); System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "\"" + dirJava + "\\bin\\javac\""; proc.StartInfo.Arguments = " -Xlint:unchecked -classpath \".\\;" + dirJarRIM + "net_rim_api.jar\" \"" + _DirectorioJava + "\\" + _NombreJava + "\""; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.CreateNoWindow = true; proc.StartInfo.UseShellExecute = false; proc.Start(); //System.IO.StreamReader myOutput = proc.StandardOutput; proc.BeginOutputReadLine(); res = proc.StandardError.ReadToEnd(); proc.WaitForExit(); if (res.Length <= 0) { this.txtResultadoMovimiento.Text = "Archivo compilado exitosamente"; } else { int posError = -1; posError = res.ToUpper().IndexOf("ERROR"); if (posError > -1) { this.txtResultadoMovimiento.Text = "Archivo compilado con Errores \n" + res; } else { this.txtResultadoMovimiento.Text = "Archivo compilado con Advertencias \n" + res; } } } private void button1_Click(object sender, EventArgs e) { try { opfdImagen.Filter = "Imagenes Ligeras de Iconos (*.png)|*.png|Mapas de Bits(*.bmp)|*.bmp|Imagenes Web(*.gif)|*.gif"; opfdImagen.ShowDialog(); string pathImagen = opfdImagen.FileName; System.IO.FileInfo infoImg = new System.IO.FileInfo(pathImagen); if(infoImg.Length>18037){ MessageBox.Show("La Imagen es Demaciado Grande...favor de Seleccionar una Imagen menor a 17kb", "Imagen Grande", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } 164 string nombreArchivo = ""; string nombreDirectorio = ""; separaDirArchivo(pathImagen, ref nombreDirectorio, ref nombreArchivo); this.txtIconoSolucionApp.Text = nombreArchivo; if (File.Exists(_DirectorioJava.Replace("\\src", "\\res\\img\\") + nombreArchivo)) { File.Delete(_DirectorioJava.Replace("\\src", "\\res\\img\\") + nombreArchivo); } try { File.Copy(pathImagen, _DirectorioJava.Replace("\\src", "\\res\\img\\") + nombreArchivo); } catch (Exception ex) { MessageBox.Show("La Imagen ya esta siendo utilizada en el Proyecto Actual", "Imagen Repetida", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } catch (Exception ex) { } } private void nuevoToolStripMenuItem_Click(object sender, EventArgs e) { this.Controls.Clear(); InitializeComponent(); arreglo = new ArrayList(); crearDirectorios(); this.cmbTipoFondo.SelectedIndex = 0; } } } Codificación AppConfig <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration> 165 MANUAL DE USUARIO 1 Índice General INTRODUCCIÓN 5 OBJETIVOS DE ESTE MANUAL 5 A QUIEN VA DIRIGIDO ESTE MANUAL 5 CONOCIMIENTOS PREVIOS 5 ACERCA DE ESTE MANUAL 6 CARACTERÍSTICAS DEL APLICATIVO 6 BENEFICIOS 7 PANTALLA DE PRESENTACION 7 PANTALLA DE CREACION SELECCIÓN DE SOLICITUD 8 PANTALLA PRINCIPAL 9 Área De Propiedades de controles de Formularios 11 2 Índice de Gráficos GRÁFICO 1 Verificación Framework 6 GRAFICO 2 Verificación de JDK 7 GRÁFICO 3 PRESENTACION AGBB 8 GRÁFICO 4 Pantalla de Creación , Selección de Solución 8 GRÁFICO 5 Selección de Solución existente 9 GRÁFICO 6 Selección de Clase Creada 9 GRAFICO 7 Pantalla de Diseño 10 GRÁFICO 8 Detalle de Pantalla de Desarrollo - Detalle 10 GRÁFICO 9 Área de Desarrollo 11 GRÁFICO 10 Área de propiedades de Formulario y propiedades 11 de solución GRAFICO 11 Selección de Tipo de Fondo de Pantalla 12 GRAFICO 12 Selección Color 12 GRAFICO 13 Selección Imagen 12 GRÁFICO 14 Área De Cuadro de Herramientas 13 GRÁFICO 15 Propiedades de control Label 16 GRAFICO 16 Propiedades de Caja de Selección 16 GRÁFICO 17 Propiedades Control de Opción 17 GRÁFICO 18 Propiedades de Botón 17 GRÁFICO 19 Propiedades de Lista de Selección de Texto 18 GRAFICO 20 Propiedades Lista de Selección numérica 18 GRÁFICO 21 Propiedades de Control Texto 19 GRAFICO 12 Propiedades de Texto de Solo Lectura 20 GRAFICO 13 Propiedades de Texto Auto búsqueda 20 GRÁFICO 14 Propiedades de texto Autocorregir 21 GRAFICO 15 Propiedades Texto Autocompletar 21 GRÁFICO 16 Propiedades de control Correo Electrónico 22 GRÁFICO 17 Propiedades de Password 22 3 6 GRAFICO 18 Propiedades de control fecha 23 GRÁFICO 19 Propiedades de Control Web 23 GRÁFICO 20 Propiedades de control imagen 24 GRÁFICO 21 Propiedades de control mapa 24 GRÁFICO 22 Menú de Control 25 GRAFICO 23 Código Generado 26 GRÁFICO 24 Diseño 27 GRÁFICO 25 Menú Acción Compilar 28 GRÁFICO 26 Ventana de Diseño Para compilación 28 GRÁFICO 27 Importación de Solución a Eclipse 29 GRÁFICO 28 Paso 2 de importación de solución a eclipse 30 GRÁFICO 29 Importación de solución a Eclipse Paso 3 30 GRAFICO 30 Selección de Carpeta Solución 31 GRÁFICO 31 Verificación de Archivo Solución 31 GRÁFICO 32 Visualización de solución en Eclipse 32 GRAFICO 33 Ejecución del Proyecto en Eclipse – Selección de 32 Emulador GRAFICO 34 Ejecución de Proyecto, Verificación de 33 compilación en Eclipse GRÁFICO 35 Visualización e Solución 33 4 25 GENERALIDADES INTRODUCCIÓN Este manual contiene información respecto a cómo operar con el Aplicativo AGBB (Aplicaciones Grafica BlackBerry), además indicaciones de cómo funciona y los conocimientos mínimos que debe tener el usuario para transmitir y comprender la idea del desarrollo de aplicaciones móviles. OBJETIVOS DE ESTE MANUAL Ayudar al usuario en general al correcto desenvolvimiento en nuestro aplicativo y que conozca las facilidades que este brinda al momento de crear aplicaciones para dispositivos BlackBerry. El mismo que comprende: Conocer el alcance de todo el aplicativo por medio de una explicación detallada e ilustrada de cada una de las opciones que lo forman. Funciones no previstas o inesperadas. A QUIEN VA DIRIGIDO ESTE MANUAL Está dirigido, a todos los desarrolladores de aplicaciones orientado a dispositivos móviles. Está dirigido a desarrolladores que buscan hacer aplicaciones amigables para los usuarios finales. Está dirigido a todos los desarrolladores que estan familiarizados con desarrollos de aplicaciones con una interfaz gráfica. Está dirigido a los desarrolladores que tienen conocimientos básico de lenguaje java. Está dirigido a desarrolladores que tiene un conocimiento del IDE Eclipse para la creación de los ejecutables y publicaciones. 5 Está dirigido a desarrolladores que tiene conocimiento de proyectos J2ME. CONOCIMIENTOS PREVIOS Se recomienda, que el usuario tenga conocimiento de desarrollo de aplicaciones utilizando J2ME (Java 2 Micro Edition). El usuario deber estar familiarizado con las funcionalidades que brindan los dispositivos BlackBerry. Se recomienda que el usuario tenga conocimiento de programación Orientada a objetos. El usuario debe tener conocimiento del uso del aplicativo Eclipse para Java, debido a la interacción del aplicativo desarrollado con el IDE en mención. El desarrollador debe tener conocimiento del sistema operativo Windows ACERCA DE ESTE MANUAL Este manual, contiene las instrucciones necesarias, para indicar cuáles son las mejores opciones a seguir para el desempeño de una funcionalidad en especial. CARACTERÍSTICAS DEL APLICATIVO El usuario debe confirmar que tenga instalado el componente net Framework 3.5 o superior, para ello se debe dirigir a panel de control Programas y características revisar el componente instalado. GRÁFICO 1 Verificación Framework Para versiones anteriores a Windows vista se verifica el paquete de instalación en 6 panel de control programas instalados. El aplicativo trabaja con el jdk versión 7, para lo cual se verificara el paquete de desarrollo y el paquete de ejecución en la dirección C:/Program File/Java GRAFICO 2 Verificación de JDK BENEFICIOS Se buscar optimizar el desarrollo de aplicaciones para dispositivos móviles BlackBerry. Se brindara una interfaz amigable e intuitiva para el desarrollo de las interfaces de usuarios. Permitir la interacción de los controles y las propiedades de los objetos pertenecientes a una aplicación java de dispositivos BlackBerry. Se permitirá la revisión del código generado y modificación del mismo, brindando la posibilidad de modificar este código e incluir lógica de programación para los diferentes aplicativos a realizarse. Permitir la compilación del código para descartar posibles errores de compilación. Permitir la generación de un proyecto compatible con el entorno de Eclipse 7 AGBB de Contenido PANTALLA DE PRESENTACION GRÁFICO 3 PRESENTACION AGBB PANTALLA DE CREACION SELECCIÓN DE SOLICITUD En esta pantalla se le permite al usuario las opciones de crear una nueva solución o seleccionar una solución existente. GRÁFICO 4 Pantalla de Creación , Selección de Solucion En la opción de crear solución se le permitirá al usuario crear el sistema de archivos, asi como los diferentes objetos iniciales para que la solución pueda ser compilada, una vez creada la solución se creara el archivo <nombreSoluicion>.xmlSolucion 8 Este contiene la información necesaria para ser abierto y retomar el diseño, en la opción abrir solución existente se buscara un archivo xmlSolucion GRÁFICO 5 Selección de Solución existente Y una vez abierto este archivo se cargaran las clases creadas en esta solución. GRÁFICO 6 Selección de Clase Creada PANTALLA PRINCIPAL 9 Pantalla Desarrollador Esta pantalla contiene todo lo concerniente a los controles de las aplicaciones para los dispositivos BlackBerry. GRAFICO 7 Pantalla de Diseño GRÁFICO 8 Detalle de Pantalla de Desarrollo - Detalle A: Área de Desarrollo B: Área De Propiedades de Formulario y Propiedades de Solución C: Área De Cuadro de herramientas D: Área De Propiedades de Controles de Formulario E: Menú de Control. 10 GRÁFICO 9 Área de Desarrollo En esta pantalla se colocara los diferentes objetos que vayan a utilizaran en el aplicativo, la ubicación es a comodidad del desarrollador. GRÁFICO 10 Área de propiedades de Formulario y propiedades de solución NOMBRE SOLUCIÓN: Nombre de la solución o proyecto que se exportara a Eclipse ICONO SOLUCIÓN: Icono que se displayara en el dispositivo BlackBerry TITULO: Titulo de la pantalla o formulario ICONO: Icono que se mostrara en la barra de tareas. Reloj: Indica si se mostrara el reloj en la barra de título de la aplicación 11 Notificaciones: Indica si se mostraran las notificaciones en la barra de tarea de la aplicación Señal: Indica si se muestra el identificador de señalen la barra de titulo GRAFICO 11 Selección de Tipo de Fondo de Pantalla Fondo: Indica que tipo de fondo se va a utilizar. Se tienen los siguientes Ninguno: no se usara ningún fondo. Color: indica que tendrá color de fondo GRAFICO 12 Selección Color Imagen: indica que se usara una imagen, aquí se solicita una imagen GRAFICO 13 Selección Imagen 12 GRÁFICO 14 Área De Cuadro de Herramientas. Muestra todos los controles a ser usados en una aplicación para el dispositivo Blackberry Etiqueta: Permite mostrar un texto con el formato que se desee, este texto no es editable en el momento de ejecución. Caja de Selección Es una caja de selección, si este objeto se agregan más de 1 no hay restricción se 13 pueden elegir más de 2 a la vez, es una caja de selección múltiple Caja de Opción Este control es de opción única, es decir si hay más de un control solo se permite coger una sola opción. Botón Es un Control de acción para el formulario que se creo Lista de Selección Txt Es un control de opción con lista desplegable para selección única Lista de selección Núm. Es un control de lista de selección que muestra como contenido de lista solo números. Texto Es un control que permite ingresar texto, este control es de mixtilíneas Texto Solo Lectura Es un control que permite ingresar texto en varia líneas, este control en tiempo de ejecución no permite la edición. Texto auto búsqueda 14 Es un control que permite la edición y se guarda en memoria lo escrito para que en un futuro se permita el ingreso del mismo y se busque entre las diferentes opciones ingresadas. Texto Autocorregir Es un control que permite el ingreso del texto y permite con el diccionario activo la corrección de las palabras ingresadas así como indicar que palabra está mal escrita Texto Autocompletar Es un control que permite el ingreso del texto y dependiendo del diccionario completa la palabra Correo Electrónico Es un control que permite el ingreso de correos electrónico Password Es un control de ingreso de texto, este texto en modo de ejecución es escondido. Campo Fecha Es un campo de ingreso de Fecha Campo Web 15 Es un campo donde se puede ingresar código HTML o en su defecto una uro para que se muestre una página en el aplicativo de dispositivo BlackBerry Campo Imagen Este campo es un campo que permite visualizar una imagen en el aplicativo para el dispositivo BlackBerry Campo MAPA Este campo permite visualiza el mapa en la aplicación para el dispositivo BlackBerry. Área De Propiedades de controles de Formularios. Indica las propiedades de cada control a usarse en las aplicaciones para dispositivos BlackBerry GRÁFICO 15 Propiedades de control Label Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control Color Fuente: el color de la fuente del texto del control 16 GRAFICO 16 Propiedades de Caja de Selección Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control Color Fuente: el color de la fuente del texto del control GRÁFICO 17 Propiedades Control de Opción Nombre: Nombre del control Texto: texto de la etiqueta 17 Color Fondo: Color de fondo de la etiqueta Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control Color Fuente: el color de la fuente del texto del control GRÁFICO 18 Propiedades de Botón Nombre: Nombre del control Texto: texto o etiqueta del control Color Fondo: Color del fondo del control Acción Botón: Acción dedicada al control incluido GRÁFICO 19 Propiedades de Lista de Selección de Texto Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control 18 Color Fuente: el color de la fuente del texto del control Elementos: listado de elementos a utilizarse. GRAFICO 20 Propiedades Lista de Selección numérica Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control Color Fuente: el color de la fuente del texto del control Mínimo: Mínimo en la lista de selección. Comienzo: valor de inicio de la lista de selección. Incremento: valor en que se incrementa la lista numérica en el control Máximo: valor máximo de la lista de selección. GRÁFICO 21 Propiedades de Control Texto 19 Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control Color Fuente: el color de la fuente del texto del control Elementos: listado de elementos a utilizarse. GRAFICO 12 Propiedades de Texto de Solo Lectura. Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta 20 Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control Color Fuente: el color de la fuente del texto del control Elementos: listado de elementos a utilizarse. GRAFICO 13 Propiedades de Texto Auto búsqueda Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control Color Fuente: el color de la fuente del texto del control Elementos: listado de elementos a utilizarse para la búsqueda. GRÁFICO 14 Propiedades de texto Autocorregir 21 Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control Color Fuente: el color de la fuente del texto del control GRAFICO 15 Propiedades Texto Autocompletar Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control Color Fuente: el color de la fuente del texto del control GRÁFICO 16 22 Propiedades de control Correo Electrónico Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta Familia Fuente: Nombre de la familia de texto del control Estilo Fuente: Nombre del estilo del texto en el control Tamaño Fuente: Tamaño de fuente del control Color Fuente: el color de la fuente del texto del control GRÁFICO 17 Propiedades de Password Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta GRAFICO 18 Propiedades de control fecha 23 Nombre: Nombre del control Texto: texto de la etiqueta Color Fondo: Color de fondo de la etiqueta GRÁFICO 19 Propiedades de Control Web Nombre: Nombre del control Texto: dirección uro de la página a cargar Color Fondo: Color de fondo de la etiqueta GRÁFICO 20 Propiedades de control imagen 24 Nombre: Nombre del control Texto: no aplica Ancho del control imagen Alto alto del control imagen Imagen imagen a cargar en el control GRÁFICO 21 Propiedades de control mapa Muestra el control que visualiza el mapa. Para eliminar un control se hace click derecho en el control y aparece l opción de eliminar. 25 GRAFICO 22 Menú de Control Permite ver las acciones que se realizaran, las cuales son las siguientes. Nuevo. Permite crear un nuevo proyecto desde cero Mostrar Codigo. Muestra el codigo que se genero con el formulario Compilar Pewmrite compilar el codigo generado o modificado Generar Solucion. Permite geenerar la solucion para ser importada en Eclipse Menú Opción Nuevo Permite limpiar el formulario y crear una nueva solución. Menú Mostrar Código Este menú cambia el t3exzto dependiendo de la acción que se va a realizar Teniendo lo siguiente para este control Al hacer clic en este control se mostrara el siguiente texto En la acción mostrar código se mostrara el código generado y se permitirá la edición del mismo GRAFICO 23 26 Código Generado 27 El código generado es el resultado de la interacción con los diferentes controles que se utilizaron para la aplicación GRÁFICO 24 Diseño Con la acción de mostrar diseño se muestra el diseñador 28 GRÁFICO 25 Menú Acción Compilar La acción compilar analiza el código autogenerado y el código modificado por el usuario en búsqueda de posibles errores Menú Acción Generar Solución Se muestra un mensaje indicando que la solución se ha generado en la ruta que se indica en el mensaje Esta ruta se cambia dependiendo de la solución generada GRÁFICO 26 Ventana de Diseño Para compilación El siguiente diseño se lo exportara a eclipse 29 Para lo cual se utilizara el ide de eclipse de la siguiente manera se genera la solución y se muestra la dirección donde se genera GRÁFICO 27 Importación de Solución a Eclipse 30 GRÁFICO 28 Paso 2 de importación de solución a eclipse GRÁFICO 29 Importación de solución a Eclipse Paso 3 31 GRAFICO 30 Selección de Carpeta Solución GRÁFICO 31 Verificación de Archivo Solución 32 GRÁFICO 32 Visualización de solución en Eclipse ejecución de proyecto Para ejecutar se hace click al botón play y seleccionar el emulador GRAFICO 33 Ejecucion del Proyecto en Eclipse – Selección de Emulador 33 GRAFICO 34 Ejecución de Proyecto, Verificación de compilación en Eclipse GRÁFICO 35 Visualización e Solución 34