martes, 27 de diciembre de 2005

NekroEditor

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 cosillas

End 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.

Hilsen

2 comentarios:

  1. Anónimo4:46 a.m.

    USA LINUX! y programa con gambas, "clon" de visual basic

    ResponderBorrar
  2. Je, bueno, el asunto no es hacer el programa, sino demostrarme que lo puedo hacer precisamente en Visual Basic y usando los algoritmos más eficaces posibles, pues si se trata de "condiciones aptas" pues me las arreglo para hacerlo en C++ y no tiene chiste porque sería casi como igualar al original.

    Pero Gambas ya está en mi mira. Había escuchado de él antes, al igual que sus acosadoras comparaciones con VB.

    Hilsen.

    ResponderBorrar