Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

Maximizar Editor de Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

Maximizar Editor de Scripts

Mensaje por Metalero el 2014-08-31, 14:49

Explicandole a alguien el problema que tiene el comando "llamar script" en el maker, que cuando se pone una linea muy larga, la puede "bajar" mal a la segunda linea quedando algo como:

Código:

$myVaraible.doSomething
(1, 2)



Tomandolo como dos lineas separadas, y tirando InvalidArgument exception, llegamos a la conclusión de que los enterbran programaron todos los makers con monitores de 14' pulgadas, por que todas las ventanas son chiquitas y no se pueden agrandar.

En fin, en el editor de scripts fue algo que siempre me molesto muchisimo, y el otro dia se me ocurrio intentar hacer un experimento usando la WinAPI, para tocar cosas de otra app de forma externa. Para mi sorpresa funcionó (Windows esta roto... pero gracias a eso se pueden hacer cosas buenas XD).
No es de lo mas cómodo usar esto... pero lo subo mas que nada como uno curiosidad.

Spoiler:




Para maximizar la ventana, hay que abrirla primero, y luego ejecutar este .exe que cree:

https://mega.co.nz/#!Y8NAxYTb!6ao5fMk0WKru7TT6f3-q4eQOJK62v7kw9HDEpAs0ms4


  • Lo probé con el XP, y con VX Ace y funcionan. El VX no lo probé pero seguro tambien funciona.
  • Si tienen abierto mas de un editor a la vez, solo les va a resizear uno.
  • Actualmente esta fixeado el tamaño dentro del EXE (1600 x 1000), asi que si no tienen un monitor FullHD, no les va a servir por ahora.
  • Es posible que el antivirus les tire alguna advertencia (a mi me paso con el mio, pero aun asi se ejecutaba bien... lo cual no habla muy bien de mi antivirus XD). Como sea, les aseguro que no es un virus (si igual les da desconfianza, puede ejecutarlo en un sandbox antes)


Dejo tambien el codigo fuente en C++, por si alguien quiere curiosear como funciona, o cambiarle algo. El codigo es una pavada, lo dificil fue encontrar los "ClassName" de las ventanas y cada control interno para cambiarle el tamaño.

Código:

#include <windows.h>

int WINDOW_CAPTION_HEIGHT = 30;
int WINDOW_BORDER_SIZE = 8;

int WINDOW_WIDTH = 1600 - WINDOW_BORDER_SIZE;
int WINDOW_HEIGHT = 1000 - WINDOW_CAPTION_HEIGHT;



int MARGIN = 6;

int SCRIPTS_HEADER_HEIGHT = 40;
int LEFT_PANEL_WIDTH = 240;

int BOTTOM_LABEL_WIDTH = 48;

int EDIT_HEGIHT = 24;

int BUTTON_WIDTH = 64;
int BUTTON_HEIGHT = 24;


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
   LPSTR lpCmdLine, int nCmdShow)
{
   HWND hwnd = FindWindow(NULL, "Script Editor");

   if (hwnd != NULL)
   {
      RECT lpRect;
      GetClientRect(hwnd, &lpRect);

      //SetWindowLong(hwnd, GWL_STYLE, WS_OVERLAPPED | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU);
      SetWindowPos(hwnd, NULL, lpRect.left, lpRect.top,
                         WINDOW_WIDTH + WINDOW_BORDER_SIZE,
                         WINDOW_HEIGHT + WINDOW_CAPTION_HEIGHT, SWP_SHOWWINDOW);

      //int exStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
      //exStyle ^= WS_EX_APPWINDOW;
      //SetWindowLong(hwnd, GWL_EXSTYLE, exStyle);
   }

   
   HWND scriptLabel = FindWindowEx(hwnd, NULL, "Static", NULL);

   if (scriptLabel != NULL)
   {
      MoveWindow(scriptLabel, MARGIN,
                        MARGIN,
                        LEFT_PANEL_WIDTH,
                        SCRIPTS_HEADER_HEIGHT, true);

      RedrawWindow(scriptLabel, NULL, NULL, RDW_INVALIDATE);
   }

   HWND listBox = FindWindowEx(hwnd, NULL, "ListBox", NULL);

   if (listBox != NULL)
   {
      MoveWindow(listBox, MARGIN,
                     MARGIN * 2 + SCRIPTS_HEADER_HEIGHT,
                     LEFT_PANEL_WIDTH,
                     WINDOW_HEIGHT - (MARGIN * 4 + SCRIPTS_HEADER_HEIGHT + EDIT_HEGIHT), true);

      RedrawWindow(listBox, NULL, NULL, RDW_INVALIDATE);
   }

   
   HWND nameLabel = FindWindowEx(hwnd, scriptLabel, "Static", NULL);

   if (nameLabel != NULL)
   {
      MoveWindow(nameLabel,   MARGIN,
                        WINDOW_HEIGHT - (MARGIN + EDIT_HEGIHT),
                        BOTTOM_LABEL_WIDTH,
                        EDIT_HEGIHT, true);

      RedrawWindow(nameLabel, NULL, NULL, RDW_INVALIDATE);
   }
   
   HWND edit = FindWindowEx(hwnd, NULL, "Edit", NULL);
   
   if (edit != NULL)
   {
      MoveWindow(edit,   MARGIN * 3 + BOTTOM_LABEL_WIDTH,
                     WINDOW_HEIGHT - (MARGIN + EDIT_HEGIHT + 4),
                     LEFT_PANEL_WIDTH - (MARGIN * 2 + BOTTOM_LABEL_WIDTH),
                     EDIT_HEGIHT, true);

      RedrawWindow(edit, NULL, NULL, RDW_INVALIDATE);
   }

   int buttonX = WINDOW_WIDTH - (4 * (MARGIN + BUTTON_WIDTH) + MARGIN);
   HWND button = NULL;
   for (int i = 0; i < 4; i++)
   {
      button = FindWindowEx(hwnd, button, "Button", NULL);
      
      if (button != NULL)
      {
         MoveWindow(button,   buttonX,
                        WINDOW_HEIGHT - (MARGIN + BUTTON_HEIGHT),
                        BUTTON_WIDTH,
                        BUTTON_HEIGHT, true);

         buttonX += BUTTON_WIDTH + MARGIN;

         RedrawWindow(button, NULL, NULL, RDW_INVALIDATE);
      }
   }
   
   HWND scintillaContainer = FindWindowEx(hwnd, nameLabel, "Static", NULL);

   if (scintillaContainer != NULL)
   {
      MoveWindow(scintillaContainer,
         MARGIN * 2 + LEFT_PANEL_WIDTH,
         MARGIN,
         WINDOW_WIDTH - (MARGIN * 3 + LEFT_PANEL_WIDTH),
         WINDOW_HEIGHT - (MARGIN * 3 + BUTTON_HEIGHT), true);

      RedrawWindow(scintillaContainer, NULL, NULL, RDW_INVALIDATE);
   }

   HWND scintilla = FindWindowEx(scintillaContainer, NULL, "Scintilla", NULL);

   if (scintilla != NULL)
   {
      MoveWindow(scintilla, 2, 2,
         WINDOW_WIDTH - (MARGIN * 3 + LEFT_PANEL_WIDTH + 6),
         WINDOW_HEIGHT - (MARGIN * 3 + BUTTON_HEIGHT + 6), true);

      RedrawWindow(scintilla, NULL, NULL, RDW_INVALIDATE);
   }
}



(Yo lo compilé con Visual Studio 2013, en modo (/MT) para que no pida las lebrerias del "Microsft Redistributable Package")

Si a mas de uno le interesa, cuando tenga tiempo veo si puedo agregarle algun "parser" de texto, como para poder configurar los tamaños si tener que tocar el exe.

_________________
avatar
Metalero
Administrador
Administrador



Créditos 1710

Gracias : 100

Volver arriba Ir abajo

Re: Maximizar Editor de Scripts

Mensaje por Wecoc el 2014-08-31, 16:33

¿Y no se podría hacer lo mismo con la ventana de llamar script, que es la que más toca los cojones que sea tan enana? xD

El Interpreter no tiene ningún problema con el tamaño del código de llamar script, y me da que el Contenido de Evento también lo leería bien (y si no, se podría vivir sin ello), casi seguro que el único motivo por el que está limitado eso es el mismo tamaño de la ventana.
avatar
Wecoc
Administrador
Administrador



Créditos 12204

Gracias : 632

Volver arriba Ir abajo

Re: Maximizar Editor de Scripts

Mensaje por Metalero el 2014-08-31, 17:45

Probablemente se puede hacer de la misma forma pero con el ClassName correcto. Yo use una herramienta que llama Spy++ de Microsoft. Una vez se encuentran los nombres (por que no sólo hay que editar la ventana, si no cada control interno) el resto es fácil



_________________
avatar
Metalero
Administrador
Administrador



Créditos 1710

Gracias : 100

Volver arriba Ir abajo

Re: Maximizar Editor de Scripts

Mensaje por newold el 2014-08-31, 18:09

oye esto me dio una idea :)

reemplazar vuestro editor con este y probar el comando llamar script :D (hacer un backup del exe por si las moscas)

http://www.mediafire.com/?0kva4a7ec4lvibu

Puedo editar cada formulario del programa, incluido el editor de script aunque en este exe solo edité el llamar script (los edits son visuales, se entiende)

y se, Wecoc tenía razón :D



investigo un poco a ver si puedo cambiar el número de líneas que te deja escribir, por ahora si pegais un código con el número máximo de líneas que caben en el script lo pega bien, aunque escribiendo código está limitado a 8 kíneas :( a ver si puedo arreglarlo

EDIT: Nada lo de las 12 líneas no se puede cambiar (no puedo cambiar el atributo maxline del control de texto y el on enter, Lo único que puedo hacer es cambiar la forma de introducir texto a horizontal, usando ; para separar los comandos, y con una barra de desplazamiento horizontal, y que al pulsar enter se guarde el script)
avatar
newold
Principiante
Principiante

0/3

Créditos 1232

Gracias : 119

Volver arriba Ir abajo

Re: Maximizar Editor de Scripts

Mensaje por Metalero el 2014-09-01, 02:40

Muy bueno!
Como hiciste para editar el exe?, por que con un disassembler es un lio.
El editor de scripts tambien lo ensanchaste un poco mas que el original. La verdad me vendria re bien tener un edit del exe que uso yo (el de steam) que ya tenga las ventanas agrandadas (en vez de tener que estar ejectuando un exe cada vez que abro una ventana)

_________________
avatar
Metalero
Administrador
Administrador



Créditos 1710

Gracias : 100

Volver arriba Ir abajo

Re: Maximizar Editor de Scripts

Mensaje por newold el 2014-09-01, 09:56

Use el Restuner una especie de reshacker mas completo. Si quieres un link "sparrow" pidemelo por privado. Es muy sencillo de usar, todo visual.

Lo que no se muy bien como maneja las medidas de las ventanas, porque intente poner la ventana de scripts a mi resolucion, 1680 x 1024, por lo que le di el tamaño de 1600 x 975, pero al probarlo la ventana de scripts aparecio a 1080p
avatar
newold
Principiante
Principiante

0/3

Créditos 1232

Gracias : 119

Volver arriba Ir abajo

Re: Maximizar Editor de Scripts

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.