Hoy me he propuesto comenzar bien un proyecto que quería hacer desde hace meses, pero que por falta de conocimientos no había podido emprender, y ahora que tengo ganas y casi nada de conocimiento ('casi nada', pero algo es algo) decidí.
El nombre del proyecto es "NekroEditor" y consiste en un editor de códigos. Aclaro: me basé en el Notepad2; de hecho este proyecto no es nada novedoso ni que aporte algo, simplemente es una versión personalizada del Notepad2, un Notepad2 hecho en Visual Basic por un novato: lento y con no todas las funciones. Quizá ni siquiera llegue a cargarle los mismos lenguajes de programación, pero como es una versión personalizada, pues les agregaré sólo los que yo conozco: sintaxis para HTML, Visual Basic, CSS y Karel. Ni siquiera me atrevo a implementar Scripts ni C ni Java porque no me siento conocedores de todas sus palabras clave.
Lo primero fue hacer el diseño: un frmMain.frm con dos aspectos: un Option Explicit y un par de lineas para que el RichTextBox (porque uso un RTF 6.0) se acomodara acorde a la ToolBar y la Barra de Estado.
Ahora comienza la fase Modular: un Módulo modMain.bas para el Sub_Main() y las APIs que se usarán en todo el proyecto.
Seguimos con un módulo modReg.bas para las claves en el regedit. Hace unas horas yo no sabía usar ni una API del registro, así que tuve que echarme una leida a MSDN y en menos de media hora ya podía crear mis claves del registro. Las entradas aun no por lo que explicaré más adelante.
Siguiente: modStream.bas para las funciones que utilizaré para aspectos como los archivos de idioma: funciones basadas en el Objeto de Archivos del Sistema que me dirán si existe un archivo o no, si es un archivo .lng de idiomas, que almacenarán el contenido del archivo en un String, almacenarán el número de línea de un archivo, el número de palabra de la linea de un archivo, etc.
Y ahora que pienso trabajar con el Editor de Menús que trae integrado VB recuerdo que, como lo dicta la NekroLicencia, mi código debe tener soporte multilenguaje personalizado porque como va a ser muy famosísimo puede ser que los extranjeros lo quieran traducir a su idioma y ¿cómo le hacen? Pues bien, los menús que crea el editor de menús de VB (que yo sepa) no tienen una opción para cambiar su texto en tiempo de ejecución, y aunque lo tuvieran, pues el objetivo del proyecto es, también, que se me meta algo en mi vacuius cerebruzzz... es tiempo de aprender a usar las APIs de los menú o 'Menú Functions' como dice la MSDN.
Veo cómo son y cómo va la onda: primero necesito crear la barra para obtener un handle que me servirá para la mayoría de las suguientes APIs:Dim hMenú As Long 'hMenú está en la zona de General del módulo de modReg.bas
pero antes de esta, hay que aludir a una que está en otro módulo:Dim hWnd As Long 'Está en modMain.bas y comtemplará... el hWnd :->
¿cómo?Public Sub Main() 'llamamos a las entradas del registro y otras ondas 'llamamos a la creación de menús con mi procedimiento Crear_Menús_Estándar() hWnd = frmMain.hwnd 'otras cosillasEnd Sub
Ni siquiera sé por qué explico esto del hWnd si se supone estoy hablando de un nivel más avanzado (uy, cállense que ahí viene el l33t c0d3r).
Como sea. Mi primera instrucción en el procedimiento Crear_Menús_Estándar es:hMenú = CreateMenú
De aquí no platico más porque en eso estoy: aprendiendo a trabajar con la función InserMenuItem. No juego con otras como InserMenu porque son 'obsolete', tal cual las llama MSDN.
martes, 27 de diciembre de 2005
NekroEditor
domingo, 11 de septiembre de 2005
Código del César
El ActiveX en el que pretendo clonar un control, es un proyecto que comencé a hacer sólo para incluirlo en otros que estoy haciendo: unos traductores. Bueno, hace un tiempo pensé en hacer un traductor de lo más sencillo posible.
Pensé en hacer un programa que tradujera un texto normal a uno escrito en Código del César; pues bien, me levanté, me bañé, desayuné, vi tele, jugué South Park Mario Brothers 2 y comencé.
Como sabrán, el proceso de codificación/decodificación del Código del César es de lo más sencillo en cuanto a instrucciones en Visual Basic, y aunque el código que hay tanto en el form como en el modMain.bas es un poco extenso para el fin, ya me fui dando una idea de lo cuantiosa que va a ser mi labor al pretender traductores que requieran de reglas gramaticales para funcionar, y un verdadero diccionario de palabras.
En sí, todo el proyecto encarpetado pesa 15.5 kilobytes y creo que para ser un programa de codificación de lo más básico me salió muy bien. El tiempo récord en que lo hice, desconózcolo, pero sólo fueron algunas cuántas horas, pues no es nada más de poner Chr(Asc(letra) + 3) y ya, puesto que me tuve que enfrentar al lío de las tres primeras letras y las tres últimas. Afortunadamente no le tuve que pensar nada, ya que en cuanto mi mente formuló aquel impedimento, casi de forma instantánea llegó la solución: un pequeño Select Case que usé para convertir todas las letras.
A nivel módulo me encargué de declarar la función para codificar y la función para decodificar, y a nivel formulario, que fue más código, estaba la apariencia: los ajustes para el efecto Form_Resize, el tipo, tamaño y color de letra, algunas opciones y el cmdTrans.
Realmente creo que fue el proyecto que menos tiempo me ha costado terminar.
Aunque todavía sigo pensando en eso de la clonación de Controles.