[GAME] GyPhon Striker

Started by tSuKiYoMi, May 06, 2010, 04:31:02 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Fede

#15
No se si es esto lo que quieres.

Tengo hecho un botón y una barra deslizadora, todo en fase muuuy alfa, que por eso no lo he colgado.

Ahora mismo estoy con el juegecito de GP, y está parado.

A ver donde lo he metido... lo busco. Na, que no lo encuentro, a encender el portatil de programar...



He preparado un código autosuficiente, sólo te hace falta un fpg con el cursor del ratón.

Es una chapuza, no me mateis.


Aquí el boton.





import "mod_video";
import "mod_screen";
import "mod_map";
import "mod_key";
import "mod_dir";
import "mod_text";
import "mod_mem";
import "mod_proc";
import "mod_draw";
import "mod_timers";
import "mod_sort";
import "mod_string";
import "mod_file";
import "mod_say";
import "mod_joy";
import "mod_draw";
import "mod_rand";
import "mod_regex";
import "mod_mouse";
import "mod_grproc";


const
   Izquierdo=0;
   Derecho=1;
end



global
int cursor;
end


private
end

DECLARE process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
            int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto ,byte bSeparacion
            int iGraph)
   local
      int iX=0;
      int iY=0;
      byte bPulsado=0; // 0-No pulsado, 1-Pulsado.
      byte bRepintar=0;
      int iIde[70]=0;  // Array de identificadores de los objetos que usamos para dibujar el botón.
   end
end


process Main()

private
   int iFuente=0;
   Boton iIde;
   int x1,y1;
   byte bLineas;
   string sTexto1[2]="";
   string sTexto2[0]="";
   string sTexto3[4]="";
   string sTexto4[0]="";
end

begin
   sTexto1[0]="Hola,g";
   sTexto1[1]="Esto es una pruebag";
   sTexto1[2]="Hola,g";

   sTexto2[0]="Mariiiig";

   sTexto3[0]="1g";
   sTexto3[1]="22g";
   sTexto3[2]="333g";
   sTexto3[3]="4g";
   sTexto3[4]="55555555g";
   
   sTexto4[0]="";
   bLineas=sizeof(sTexto3)/sizeof(sTexto3[0]);



   delete_draw(0);
   drawing_z(1);
   drawing_color(rgb(100,100,100));
   draw_box(0,0,200,200);
   frame;

   cursor=load_fpg("cursors.fpg");

   raton();
   iIde=boton(0,0,&sTexto3,bLineas,iFuente,3,0,rgb(0,0,250),50,10);
   iIde.iX=10;
   iIde.iY=10;
   iIde.bRepintar=1;
   iIde=boton(0,0,&sTexto2,sizeof(sTexto2)/sizeof(sTexto2[0]),iFuente,3,0,rgb(0,0,250),5,10);
   iIde.iX=190;
   iIde.iY=10;
   iIde.bRepintar=1;
   iIde=boton(0,0,&sTexto1,sizeof(sTexto1)/sizeof(sTexto1[0]),iFuente,4,0,rgb(0,0,250),5,10);
   iIde.iX=10;
   iIde.iY=160;
   iIde.bRepintar=1;
   iIde=boton(15,15,&sTexto4,sizeof(sTexto4)/sizeof(sTexto4[0]),iFuente,4,0,rgb(0,0,250),5,10);
   iIde.iX=190;
   iIde.iY=160;
   iIde.bRepintar=1;
   //iIde=boton(10,0,40,0,sTexto2,iFuente,0,0,rgb(0,250,0),5);
   //iIde=boton(10,0,80,0,sTexto3,iFuente,0,rgb(50,50,250),rgb(0,0,0),50);
   //iIde=boton(10,0,200,0,"Púlsame",iFuente,0,rgb(50,250,250),rgb(0,0,0),5);

while (!key(_ESC))
   frame;
end
exit();
end
process raton();
begin
loop
   graph=1;
   x=mouse.x;
   y=mouse.y;
   z=-251;
   frame;
end


end
//------------------------------------------------------------------------------
process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
            int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto, byte bSeparacion,
            int iGraph)
/*
Función que dibuja un botón en la pantalla con estado on/off.

iX:    Coordenada X.
iAncho:   Ancho del botón. 0-automático.
iY:      Coordenada Y.
iAlto:   Alto del botón. 0-automático.
sTexto[]:   Texto del botón. Cada línea independiente.
bLineas:   Cantidad de lineas pasadas. (máximo 63).
iFuente: Fuente del texto. 0-La del sistema.
bJustificacion: Justificación del texto: 3-Izquierda, 4-Centro, 5-Derecha. La misma que write.
dColor_Boton:   Color del botón. 0-Gris por defecto.
dColor_Texto:   Color del texto. 0-Negro por defecto.
bSeparacion: Espacio en píxeles alrederor del texto.
iGraph:   Nº del gráfico a dibujar. (0-No hay).
bRepintar: 1-Repinta.
bPulsado: 1-El botón fue pulsado.
*/


private
   int iAncho_Texto_Mayor=0; // Contendrá el ancho del texto a mostrar.
   int iAlto_Texto_Total=0;  // Contanedrá el alto del texto a mostrar.
   int iAncho_Texto;      // Ancho de línea en curso.
   int iAlto_Texto;      // Alto de la línea en curso.
   //int iIde[70]=0;  // Array de identificadores de los objetos que usamos para dibujar el botón.
   int iCentrado=0;
   byte bContador=0;  // Contador de usos múltiples.
   int iIde_Grafico=0; //Identificador del proceso que dibuja un gráfico.
   int iAncho_Grafico=0;  //Ancho del gráfico.
   byte bFocus=0; //Si estoy encima del boton: bFocus=1.
end

begin
   drawing_z(-248);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
   text_z=-251;
   //Espero Inicializacion.
   while (bRepintar==0)
      frame;
   end
   bRepintar=0;
//   write_var(0,iX-5,iY,4,bpulsado);
//   write_var(0,iX-5,iY+10,4,brepintar);
//   write_var(0,iX-5,iY+20,4,bfocus);
   loop
      // Inicializando varables por defecto.
      iAncho_Texto_Mayor=0;
      iAlto_Texto=Text_height(iFuente,"Pruebag");
      iAlto_Texto_Total=iAlto_Texto*bLineas;
      bContador=0;
      //Analizando tamaño del texto en el botón.
      while (bContador<bLineas)
         iAncho_Texto=Text_width(iFuente, sTexto[bContador]);
         if(iAncho_Texto_Mayor<iAncho_Texto)
            iAncho_Texto_Mayor=iAncho_Texto;
         end
         bcontador++;
      end
      if (iAncho==0)
         iAncho=iAncho_Texto_Mayor+bSeparacion*2;
      end
      if (iAlto==0)
         iAlto=iAlto_Texto_Total+bSeparacion*2;
      end
      if (dColor_Boton==0)
         dColor_Boton=rgb(190,190,190);
      end
      if (dColor_Texto==0)
         dColor_Texto=rgb(0,0,0);
      end
      if(iAncho>iAlto)
         iAncho_Grafico=iAlto;
      else
         iAncho_Grafico=iAncho;
      end
      if(iGraph>0)
         if(iIde_Grafico>0)
            iIde_Grafico.X=iX+iAncho/2+1;
            iIde_Grafico.Y=iY+iAlto/2+1;
            iIde_Grafico.size=(iAncho_Grafico/2)*100/50;
         else
            iIde_Grafico=Grafico(iX+iAncho/2+1, iY+iAlto/2+1, (iAncho_Grafico/2)*100/50, iGraph);
         end
      end
      drawing_z(-249);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
      if (bPulsado==0)
         drawing_color(rgb(0,0,0));
         iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
         iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
         drawing_color(rgb(255,255,255));
         iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
         iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
         drawing_color(rgb(100,100,100));
         iIde[4]=draw_line(iX,iY+iAlto-1,iX+iAncho,iY+iAlto-1);
         iIde[5]=draw_line(iX+iAncho-1,iY,iX+iAncho-1,iY+iAlto);
         drawing_color(dColor_Boton);
         iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-2,iY+iAlto-2);
         set_text_color(dColor_Texto);
         if(bJustificacion==3)
            iCentrado=0;
         end
         if(bJustificacion==4)
            iCentrado=iAncho_Texto_Mayor/2;
         end
         if(bJustificacion==5)
            iCentrado=iAncho_Texto_Mayor;
         end
         bContador=0;
         while(bContador<bLineas)
            iIde[7+bContador]=write(0,iX+bSeparacion+1+iCentrado,iAlto_Texto*(bContador+1)+iY+bSeparacion-4,bJustificacion,sTexto[bContador]);
            bContador++;
         end
         if (iGraph>0)
            iIde_Grafico.Z=-250;
            iIde_Grafico.X-=1;
            iIde_Grafico.Y-=1;
         end
      else
         drawing_color(rgb(255,255,255));
         iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
         iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
         drawing_color(rgb(0,0,0));
         iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
         iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
         drawing_color(rgb(100,100,100));
         iIde[4]=draw_line(iX,iY+1,iX+iAncho,iY+1);
         iIde[5]=draw_line(iX+1,iY,iX+1,iY+iAlto);
         drawing_color(dColor_Boton);
         iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-1,iY+iAlto-1);
         set_text_color(dColor_Texto);
         if(bJustificacion==3)
            iCentrado=0;
         end
         if(bJustificacion==4)
            iCentrado=iAncho_Texto_Mayor/2;
         end
         if(bJustificacion==5)
            iCentrado=iAncho_Texto_Mayor;
         end
         bContador=0;
         while(bContador<bLineas)
            iIde[7+bContador]=write(0,iX+bSeparacion+3+iCentrado,iAlto_Texto*(bContador+1)-2+iY+bSeparacion,bJustificacion,sTexto[bContador]);
            bContador++;
         end
         if (iGraph>0)
            iIde_Grafico.Z=-250;
            iIde_Grafico.X+=1;
            iIde_Grafico.Y+=1;
         end
      end
      frame;
      // Mientras no manden repintar...
      if (!mouse.left and bRepintar==1)
         bRepintar=0;
      end
      //signal(father,s_wakeup);
      //signal(father.father,s_wakeup);
      while (bRepintar==0)
         if (!mouse.left and bPulsado==1)
            bPulsado=0;
            bRepintar=1;
         end
         if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and !mouse.left)
            bFocus=1;
         else
         end
         if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and mouse.left
            and bFocus==1)
            bPulsado=1;
            bRepintar=1;
            bFocus=0;
         end
         if (mouse.x<iX or mouse.x>iX+iAncho or mouse.y<iY or mouse.y>iY+iAlto)
            bFocus=0;
         end
         frame;
      end
      //signal(father,s_freeze);
      //signal(father.father,s_freeze);
      bRepintar=0;
      // Borro y repinto.
      bContador=0;
      while (bContador<=6)
         delete_draw(iIde[bContador]);
         bContador++;
      end
      bContador=0;
      while(bContador<bLineas)
         delete_text(iIde[7+bContador]);
         bContador++;
      end
   end

end
//------------------------------------------------------------------------------
process Grafico(int iX, int iY, int iSize, int iGraph)
/*
Función que dibuja el grafico en el boton.

iX:    Coordenada X.
iY:      Coordenada Y.
iSize:   Tamaño del gráfico.
iGraph:   Nº del gráfico.
*/

begin
   Z=-249;
   x=iX;
   y=iY;
   z=-249;
   size=iSize;
   graph=iGraph;
   loop
      frame;
   end
end
//------------------------------------------------------------------------------
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Fede

Y aquí una caja con barra deslizante.

Os hace falta un fichero a mostrar y un fpg con el cursor.

No me mateis, ya lo pasaré a limpio.   ;D  (línea 916 más o menos).

Va en 2 trozos, que no entra.





import "mod_video";
import "mod_screen";
import "mod_map";
import "mod_key";
import "mod_dir";
import "mod_text";
import "mod_mem";
import "mod_proc";
import "mod_draw";
import "mod_timers";
import "mod_sort";
import "mod_string";
import "mod_file";
import "mod_say";
import "mod_joy";
import "mod_draw";
import "mod_rand";
import "mod_regex";
import "mod_mouse";
import "mod_grproc";

const
   Izquierdo=0;
   Derecho=1;
end



global
   int cursor;
   int iPrincipio_Pantalla=0;
   int iFinal_Pantalla=0;
   string Pantalla[30]; // Pantalla virtual donde escribo.
   int CantidadLineas=0; //nº de líneas en el fichero.
end

local
   int iValor=0;

end

   
//   end
private
end

DECLARE process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
            int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto ,byte bSeparacion
            int iGraph)
   local
      int iX=0;
      int iY=0;
      byte bPulsado=0; // 0-No pulsado, 1-Pulsado.
      //byte bRepintar=0;
   end
end


local
   int iSalto; //Cantidad que debe de moverser iValor cualdo pulsamos para avance página.
end



DECLARE process Barra_Deslizante(int iX, int iAncho, int iY, int iAlto, int iAlto_Boton, dword dColor_Boton,
           dword dColor_Simbolo_Boton, dword dColor_Barra, dword dColor_Boton_Barra,
           int iValor_Maximo, int iValor_Inicial)
end

local
   Boton iIde_Arriba;
   Boton iIde_Abajo;
   Boton iIde_Centro;
   byte bRepintar;
   int iIde[70]=0;  // Array de identificadores de los objetos que usamos para dibujar el botón.
end



           
//------------------------------------------------------------------------------
process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
            int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto, byte bSeparacion,
            int iGraph)
/*
Función que dibuja un botón en la pantalla con estado on/off.

iX:    Coordenada X.
iAncho:   Ancho del botón. 0-automático.
iY:      Coordenada Y.
iAlto:   Alto del botón. 0-automático.
sTexto[]:   Texto del botón. Cada línea independiente.
bLineas:   Cantidad de lineas pasadas. (máximo 63).
iFuente: Fuente del texto. 0-La del sistema.
bJustificacion: Justificación del texto: 3-Izquierda, 4-Centro, 5-Derecha. La misma que write.
dColor_Boton:   Color del botón. 0-Gris por defecto.
dColor_Texto:   Color del texto. 0-Negro por defecto.
bSeparacion: Espacio en píxeles alrederor del texto.
iGraph:   Nº del gráfico a dibujar. (0-No hay).
bRepintar: 1-Repinta.
bPulsado: 1-El botón fue pulsado.
*/


private
   int iAncho_Texto_Mayor=0; // Contendrá el ancho del texto a mostrar.
   int iAlto_Texto_Total=0;  // Contanedrá el alto del texto a mostrar.
   int iAncho_Texto;      // Ancho de línea en curso.
   int iAlto_Texto;      // Alto de la línea en curso.
   //int iIde[70]=0;  // Array de identificadores de los objetos que usamos para dibujar el botón.
   int iCentrado=0;
   byte bContador=0;  // Contador de usos múltiples.
   int iIde_Grafico=0; //Identificador del proceso que dibuja un gráfico.
   int iAncho_Grafico=0;  //Ancho del gráfico.
   byte bFocus=0; //Si estoy encima del boton: bFocus=1.
end

begin
   drawing_z(-248);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
   text_z=-251;
   //Espero Inicializacion.
   while (bRepintar==0)
      frame;
   end
   bRepintar=0;
//   write_var(0,iX-5,iY,4,bpulsado);
//   write_var(0,iX-5,iY+10,4,brepintar);
//   write_var(0,iX-5,iY+20,4,bfocus);
   loop
      // Inicializando varables por defecto.
      iAncho_Texto_Mayor=0;
      iAlto_Texto=Text_height(iFuente,"Pruebag");
      iAlto_Texto_Total=iAlto_Texto*bLineas;
      bContador=0;
      //Analizando tamaño del texto en el botón.
      while (bContador<bLineas)
         iAncho_Texto=Text_width(iFuente, sTexto[bContador]);
         if(iAncho_Texto_Mayor<iAncho_Texto)
            iAncho_Texto_Mayor=iAncho_Texto;
         end
         bcontador++;
      end
      if (iAncho==0)
         iAncho=iAncho_Texto_Mayor+bSeparacion*2;
      end
      if (iAlto==0)
         iAlto=iAlto_Texto_Total+bSeparacion*2;
      end
      if (dColor_Boton==0)
         dColor_Boton=rgb(190,190,190);
      end
      if (dColor_Texto==0)
         dColor_Texto=rgb(0,0,0);
      end
      if(iAncho>iAlto)
         iAncho_Grafico=iAlto;
      else
         iAncho_Grafico=iAncho;
      end
      if(iGraph>0)
         if(iIde_Grafico>0)
            iIde_Grafico.X=iX+iAncho/2+1;
            iIde_Grafico.Y=iY+iAlto/2+1;
            iIde_Grafico.size=(iAncho_Grafico/2)*100/50;
         else
            iIde_Grafico=Grafico(iX+iAncho/2+1, iY+iAlto/2+1, (iAncho_Grafico/2)*100/50, iGraph);
         end
      end
      drawing_z(-249);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
      if (bPulsado==0)
         drawing_color(rgb(0,0,0));
         iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
         iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
         drawing_color(rgb(255,255,255));
         iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
         iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
         drawing_color(rgb(100,100,100));
         iIde[4]=draw_line(iX,iY+iAlto-1,iX+iAncho,iY+iAlto-1);
         iIde[5]=draw_line(iX+iAncho-1,iY,iX+iAncho-1,iY+iAlto);
         drawing_color(dColor_Boton);
         iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-2,iY+iAlto-2);
         set_text_color(dColor_Texto);
         if(bJustificacion==3)
            iCentrado=0;
         end
         if(bJustificacion==4)
            iCentrado=iAncho_Texto_Mayor/2;
         end
         if(bJustificacion==5)
            iCentrado=iAncho_Texto_Mayor;
         end
         bContador=0;
         while(bContador<bLineas)
            iIde[7+bContador]=write(0,iX+bSeparacion+1+iCentrado,iAlto_Texto*(bContador+1)+iY+bSeparacion-4,bJustificacion,sTexto[bContador]);
            bContador++;
         end
         if (iGraph>0)
            iIde_Grafico.Z=-250;
            iIde_Grafico.X-=1;
            iIde_Grafico.Y-=1;
         end
      else
         drawing_color(rgb(255,255,255));
         iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
         iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
         drawing_color(rgb(0,0,0));
         iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
         iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
         drawing_color(rgb(100,100,100));
         iIde[4]=draw_line(iX,iY+1,iX+iAncho,iY+1);
         iIde[5]=draw_line(iX+1,iY,iX+1,iY+iAlto);
         drawing_color(dColor_Boton);
         iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-1,iY+iAlto-1);
         set_text_color(dColor_Texto);
         if(bJustificacion==3)
            iCentrado=0;
         end
         if(bJustificacion==4)
            iCentrado=iAncho_Texto_Mayor/2;
         end
         if(bJustificacion==5)
            iCentrado=iAncho_Texto_Mayor;
         end
         bContador=0;
         while(bContador<bLineas)
            iIde[7+bContador]=write(0,iX+bSeparacion+3+iCentrado,iAlto_Texto*(bContador+1)-2+iY+bSeparacion,bJustificacion,sTexto[bContador]);
            bContador++;
         end
         if (iGraph>0)
            iIde_Grafico.Z=-250;
            iIde_Grafico.X+=1;
            iIde_Grafico.Y+=1;
         end
      end
      frame;
      // Mientras no manden repintar...
      if (!mouse.left and bRepintar==1)
         bRepintar=0;
      end
      //signal(father,s_wakeup);
      //signal(father.father,s_wakeup);
      while (bRepintar==0)
         if (!mouse.left and bPulsado==1)
            bPulsado=0;
            bRepintar=1;
         end
         if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and !mouse.left)
            bFocus=1;
         else
         end
         if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and mouse.left
            and bFocus==1)
            bPulsado=1;
            bRepintar=1;
            bFocus=0;
         end
         if (mouse.x<iX or mouse.x>iX+iAncho or mouse.y<iY or mouse.y>iY+iAlto)
            bFocus=0;
         end
         frame;
      end
      //signal(father,s_freeze);
      //signal(father.father,s_freeze);
      bRepintar=0;
      // Borro y repinto.
      bContador=0;
      while (bContador<=6)
         delete_draw(iIde[bContador]);
         bContador++;
      end
      bContador=0;
      while(bContador<bLineas)
         delete_text(iIde[7+bContador]);
         bContador++;
      end
   end

end
//------------------------------------------------------------------------------
process Grafico(int iX, int iY, int iSize, int iGraph)
/*
Función que dibuja el grafico en el boton.

iX:    Coordenada X.
iY:      Coordenada Y.
iSize:   Tamaño del gráfico.
iGraph:   Nº del gráfico.
*/

begin
   Z=-249;
   x=iX;
   y=iY;
   z=-249;
   size=iSize;
   graph=iGraph;
   loop
      frame;
   end
end
//------------------------------------------------------------------------------


//------------------------------------------------------------------------------
process Barra_Deslizante(int iX, int iAncho, int iY, int iAlto, int iAlto_Boton, dword dColor_Boton,
           dword dColor_Simbolo_Boton, dword dColor_Barra, dword dColor_Boton_Barra,
           int iValor_Maximo, int iValor_Inicial)

/*
Función que dibuja una barra deslizante.

iX:    Coordenada X.
iAncho:   Ancho de la barra. 0-Por defecto.
iY:      Coordenada Y.
iAlto:   Alto de la barra incluido los botones. 0-Por defecto.
iAlto_Boton:    Alto del botón de la barra. Ancho de la bara por defecto.
dColor_Boton:   Color del botón. 0-Gris por defecto.
dColor_Simbolo_Boton:    0-Negro por defecto.
dColor_Barra:          Color de la barra. 0-Gris Claro por defecto.
dColor_Boton_Barra:    Color del boton que se desliza sobre la barra. 0-Gris Oscuro por defecto.
iValor_Maximo:   Valor máximo de la Barra.
iValor_Inicial:   Valor inicial.
iValor         Valor actual.
*/




private
   //int iIde[70]=0;  // Array de identificadores de los objetos que usamos para dibujar el botón.
   byte bContador=0;  // Contador de usos múltiples.

   int iMouse_Diferencia=0;

   string sTexto[0]="";
   int iTamano_Barra=0;
   int iTamano_Barra_Libre=0;
   int iAlto_Boton_Central=0;
   int iValor_Antiguo=0;
end

begin
   iIde_Arriba=load_fpg("cursors.fpg");
   drawing_z(-246);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
   // Inicializando varables por defecto.
   bRepintar=0;
   if (iAncho==0)
      iAncho=20;
   end
   if (iAlto==0)
      iAlto=300;
   end
   if (iAlto_Boton==0)
      iAlto_Boton=iAncho;
   end
   if (dColor_Boton==0)
      dColor_Boton=rgb(190,190,190);
   end
   if (dColor_Simbolo_Boton==0)
      dColor_Simbolo_Boton=rgb(0,0,0);
   end
   if (dColor_Barra==0)
      dColor_Barra=rgb(200,200,200);
   end
   if (dColor_Boton_Barra==0)
      dColor_Boton_Barra=rgb(190,190,190);
   end
   //Calculo el tamaña de la barra descontandole los 3 botones.
   iTamano_Barra=iAlto-iAlto_Boton*3-3;
   
   iAlto_Boton_Central=iAlto_Boton;
   // Si el tamaño de la barra es mayor que el valor a máximo, aumento el boton central para igualar dicho tamaño.
   if(iTamano_Barra>iValor_Maximo);
      iAlto_Boton_Central=iAlto_Boton+iTamano_Barra-iValor_Maximo;
   end
   iValor=iValor_Inicial;
   iTamano_Barra_Libre=iAlto-iAlto_Boton*2-iAlto_Boton_Central-3;
   
   //Dibujo los botones arriba, abajo y centro.
   iIde_Arriba=boton(iAncho, iAlto_Boton, &sTexto, 1, 0, 4, dColor_Boton, 0, 0, 10);
   iIde_Arriba.iX=iX;
   iIde_Arriba.iY=iY;
   iIde_Arriba.bRepintar=1;
   iIde_Abajo=boton(iAncho, iAlto_Boton, &sTexto, 1, 0, 4, dColor_Boton, 0, 0, 9);
   iIde_Abajo.iX=iX;
   iIde_Abajo.iY=iY+iAlto-iAlto_Boton;
   iIde_Abajo.bRepintar=1;
   iIde_Centro=boton(iAncho, iAlto_Boton_Central, &sTexto, 1, 0, 4, dColor_Boton, 0, 0, 0);
   iIde_Centro.iX=iX;
   iIde_Centro.iY=iY+iAlto_Boton+1;
   iIde_Centro.bRepintar=1;
   drawing_z(-247);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
   //Dibujo barra por donde se desplaza el botón central.
   drawing_color(rgb(50,50,50));
   iIde[0]=draw_line(iX,iY+iAlto-iAlto_Boton-1,iX+iAncho,iY+iAlto-iAlto_Boton-1);
   iIde[1]=draw_line(iX+iAncho,iY+1+iAlto_Boton,iX+iAncho,iY+iAlto-iAlto_Boton);
   drawing_color(rgb(255,255,255));
   iIde[2]=draw_line(iX,iY+iAlto_Boton+1,iX+iAncho,iY+1+iAlto_Boton);
   iIde[3]=draw_line(iX,iY+iAlto_Boton+1,iX,iY+iAlto-iAlto_Boton);
   drawing_color(rgb(200,200,200));
   iIde[14]=draw_box(iX,iY+iAlto_Boton,iX+iAncho,iY+iAlto-iAlto_Boton-1);
   //Ajust boton central al valor inicial.
   iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
   iIde_Centro.bRepintar=1;
   frame;
   iValor_Antiguo=iValor;
   loop
      if (iIde_Arriba.bPulsado==1)    // Si pulso del botón de abajo, incremento 1 el valor de la barra.
         if(iValor>0);            // Tengo en cuenta la repetición de teclas.
            iValor--;
            // Si el valor es multiplo de la barra, muevo el botón central.
            if (((iIde_Centro.iY-1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)>=iValor)
               iIde_Centro.iY--;
               iIde_Centro.bRepintar=1;
            end
         end
         frame;
         timer[0]=0;
         while (timer[0]<40)
            frame;
            if (!iIde_Arriba.bPulsado==1)
               timer[0]=50;
            end
         end
         while (iIde_Arriba.bPulsado==1)
            if(iValor>0);
               iValor--;
               if (((iIde_Centro.iY-1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)>=iValor)
                  iIde_Centro.iY--;
                  iIde_Centro.bRepintar=1;
               end
            end
            frame;
         end
         frame;
      end
      if (iIde_Abajo.bPulsado==1) // Si pulso del botón de abajo, incremento 1 el botón central.
         if(iValor<iValor_Maximo);
            iValor++;
            if (((iIde_Centro.iY+1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)<=iValor)
               iIde_Centro.iY++;
               iIde_Centro.bRepintar=1;
            end
         end
         frame;
         timer[0]=0;
         while (timer[0]<40)
            frame;
            if (!iIde_Abajo.bPulsado==1)
               timer[0]=50;
            end
         end
         while (iIde_Abajo.bPulsado==1)
         if(iValor<iValor_Maximo);
            iValor++;
            if (((iIde_Centro.iY+1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)<=iValor)
               iIde_Centro.iY++;
               iIde_Centro.bRepintar=1;
            end
         end
            frame;
         end
         frame;
      end
      if (iIde_Centro.bPulsado==1 and iMouse_Diferencia==0)  // Si pulsal el botón central calculo la distancia entre este y el mouse.
         iMouse_Diferencia=mouse.y-iIde_Centro.iY;
      end
      if (iIde_Centro.bPulsado==1 and iMouse_Diferencia!=0)  // Si se muevo el mouse, muevo el botón central.
         iIde_Centro.iY=mouse.y-iMouse_Diferencia;
         if (iValor_Maximo==(iAlto-iAlto_Boton*2-iAlto_Boton_Central-3))
            iValor=iIde_Centro.iY-iY-iAlto_Boton-1;
         else
            iValor=(iIde_Centro.iY-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra;
         end
         iIde_Centro.bRepintar=1;
      end
      if (iIde_Centro.bPulsado==0)  // Si sueltan el mouse, borro la distancia entre el botón central y el mouse.
         iMouse_Diferencia=0;
      end

      if (iIde_Centro.iY<iY+iAlto_Boton+1)  // Compruebo que el boton central no se sale fuera de rango.
         iIde_Centro.iY=iY+iAlto_Boton+1;
         if (iValor_Maximo==(iAlto-iAlto_Boton*2-iAlto_Boton_Central-3))
            iValor=iIde_Centro.iY-iY-iAlto_Boton-1;
         else
            iValor=(iIde_Centro.iY-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra;
         end
         iIde_Centro.bRepintar=1;
      end
      if (iIde_Centro.iY>iY+iAlto-iAlto_Boton-1-iAlto_Boton_Central)  // Compruebo que el boton central no se sale fuera de rango.
         iIde_Centro.iY=iY+iAlto-iAlto_Boton-1-iAlto_Boton_Central;
         if (iValor_Maximo==(iAlto-iAlto_Boton*2-iAlto_Boton_Central-3))
            iValor=iIde_Centro.iY-iY-iAlto_Boton-1;
         else
            iValor=(iIde_Centro.iY-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra;
         end
         iIde_Centro.bRepintar=1;
      end
      if (iValor_Antiguo!=iValor)
         iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
         iIde_Centro.bRepintar=1;
         iValor_Antiguo=iValor;
      end
      // Comprobando el salto de página.
      // Pulso por arriba.
      if (mouse.x>iX and mouse.x<iX+iAncho and
         (mouse.y>iY+iAlto_Boton and mouse.y<iIde_Centro.iY)
         and mouse.left)
         iValor-=iSalto;
         if (iValor<0)
            iValor=0;
         end
         iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
         iIde_Centro.bRepintar=1;
         frame;
         timer[0]=0;
         while (timer[0]<40)
            frame;
            if (!mouse.left)
               timer[0]=50;
            end
         end
         while (mouse.left)
            iValor-=iSalto;
            if (iValor<0)
               iValor=0;
            end
            iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
            iIde_Centro.bRepintar=1;
            frame;
         end
      end
      // Pulso por abajo.
      if (mouse.x>iX and mouse.x<iX+iAncho and
         (mouse.y<iY+iAlto-iAlto_Boton-1 and mouse.y>iIde_Centro.iY+iAlto_Boton_Central)
         and mouse.left)
         iValor+=iSalto;
         if (iValor>iValor_Maximo)
            iValor=iValor_Maximo;
         end
         iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
         iIde_Centro.bRepintar=1;
         frame;
         timer[0]=0;
         while (timer[0]<40)
            frame;
            if (!mouse.left)
               timer[0]=50;
            end
         end
         while (mouse.left)
            iValor+=iSalto;
            if (iValor>iValor_Maximo)
               iValor=iValor_Maximo;
            end
            iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
            iIde_Centro.bRepintar=1;
            frame;
         end
      end
   frame;
   end

end
end
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Fede

Trozo 2. Juntarlos todos, espero que haga algo.


//------------------------------------------------------------------------------
process Caja_De_Texto(int iX, int iAncho, int iY, int iAlto, string sTexto, int iFuente,int iAncho_Barra)

/*
Proceso que dibuja una barra caja y una barra deslizante si es necesario.

iX:    Coordenada X.
iAncho:   Ancho de la caja. 0-Por defecto toda la pantalla.
iY:      Coordenada Y.
iAlto:   Alto de la caja. 0-Por defecto toda la pantalla.
sTexto: Texto a mostrar.
iFuente:      Fuente del texto. 0 por defecto la de sistema.
iAncho_Barra: Ancho de la barra deslizante.

dColor_Boton_Barra:    Color del boton que se desliza sobre la barra. 0-Gris Oscuro por defecto.
iValor_Maximo:   nº de líneas de texto.
iValor_Inicial:   1ª linea a mostrar.
iValor:         Línea por la que vamos.
*/



private
   byte bContador=0;  // Contador de usos múltiples.
   int iTabla_Lineas[10000]=0; //Tabla de comienzo de las líneas de texto.
   int iCantidad_Lineas=100; //Cantidad de líneas en el texto.
   int iSeparacion_Lineas=3;
   int iLineas_Caja=17;
   int iAlto_Linea=0; //Alto máximo de una línea;
   string Pantalla[30];
   int iValor_Anterior; // Valor a comparar con el de la barra.
end

begin
   drawing_z(-249);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
   // Inicializando varables por defecto.
   if (iAncho==0)
      iAncho=200;
   end
   if (iAlto==0)
      iAlto=300;
   end
   //Dibujo la caja.
   /*
   drawing_color(rgb(50,50,50));
   iIde[0]=draw_line(iX,iY+iAlto-1,iX+iAncho,iY+iAlto-1);
   iIde[1]=draw_line(iX+iAncho,iY+1,iX+iAncho,iY+iAlto);
   drawing_color(rgb(255,255,255));
   iIde[2]=draw_line(iX,iY+1,iX+iAncho,iY+1);
   iIde[3]=draw_line(iX,iY+1,iX,iY+iAlto);
   drawing_color(rgb(200,200,200));
   iIde[14]=draw_box(iX,iY,iX+iAncho,iY+iAlto-1);
*/
   //Calculo cantidad de líneas en el texto y me hago una tabla.
   sTexto=regex_replace(chr(9)," ",sTexto);
   iCantidad_Lineas=Calcula_Lineas(sTexto, iFuente, iAncho-iAncho_Barra-20, &iTabla_Lineas);
   iAlto_Linea=text_height(iFuente,sTexto);
   iSeparacion_Lineas=iAlto_Linea/2;
   iLineas_Caja=(iAlto-8)/(iAlto_Linea+iSeparacion_Lineas);
   // Dibujo la tabla.
   drawing_z(-246);  // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.

   drawing_color(rgb(100,100,100));
   iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
   iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
   iIde[2]=draw_line(iX+iAncho-iAncho_Barra-4,iY+2,iX+iAncho-iAncho_Barra-4,iY+iAlto-4);
   drawing_color(rgb(255,255,255));
   iIde[3]=draw_line(iX+2,iY+iAlto-2,iX+iAncho-2,iY+iAlto-2);
   iIde[4]=draw_line(iX+iAncho-2,iY+2,iX+iAncho-2,iY+iAlto-2);

   drawing_color(rgb(255,255,255));
   iIde[5]=draw_line(iX,iY,iX+iAncho,iY);
   iIde[6]=draw_line(iX,iY,iX,iY+iAlto);
   drawing_color(rgb(0,0,0));
   iIde[7]=draw_line(iX+2,iY+2,iX+iAncho-2,iY+2);
   iIde[8]=draw_line(iX+2,iY+2,iX+2,iY+iAlto-2);
   drawing_color(rgb(255,255,255));
   iIde[9]=draw_box(iX+3,iY+3,iX+iAncho-4,iY+iAlto-4);
   iIde[10]=Barra_Deslizante(iX+iAncho-iAncho_Barra-3,iAncho_Barra,iY+3,iAlto-7,0,0,0,0,0,
      iCantidad_Lineas-iLineas_Caja,0);
   iIde[10].iSalto=iLineas_Caja;
   //say(iCantidad_Lineas-iLineas_Caja+1);
   text_z=-250;
   set_text_color(0);
   Pinta_Pantalla(iX+3, iY+3, 0, sTexto,
       &iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
   iValor_Anterior=iIde[10].iValor;
    loop
      if(iValor_Anterior!=iIde[10].iValor)
         iValor_Anterior=iIde[10].iValor;
         Pinta_Pantalla(iX+3, iY+3, -1, sTexto,
            &iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
      end

      if(key(_down))
         Pinta_Pantalla(iX+3, iY+3, _down, sTexto,
            &iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
         iValor_Anterior=iIde[10].iValor;
            /*
            if(iIde[10].iValor<iCantidad_Lineas-iLineas_Caja-2)
               iIde[10].iValor++;
               iIde[10].bRepintar=1;
               iValor_Anterior++;
            end
            */
      end
      if(key(_up))
         Pinta_Pantalla(iX+3, iY+3, _up, sTexto,
            &iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
         iValor_Anterior=iIde[10].iValor;
/*
            if (iIde[10].iValor>0)
               iIde[10].iValor--;
               iIde[10].bRepintar=1;
               iValor_Anterior--;
            end
*/
      end
/*
      if(key(_right))
         Pinta_Pantalla(iX+3, iY+3, _right, sTexto,
            &iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
            if (iIde[10].iValor>0)
               iIde[10].iValor--;
               iIde[10].bRepintar=1;
               iValor_Anterior--;
            end
      end
*/
      frame;
   end
end
//------------------------------------------------------------------------------
function Calcula_Lineas(string sTexto, int iFuente, int iAncho, pointer iTabla_Lineas)
// Formatea la variable sTexto y calcula el nº de lineas.

private
   int iLongitud; //Longitud sTexto.
   int iInicio_Linea=0;
   int iFinal_Linea=1;
   int iCantidad_Lineas=0;
end

begin
   iLongitud=len(sTexto);
   //Relleno tabla de lineas.
   while (iFinal_Linea<=iLongitud)
      if((sTexto[iFinal_Linea]==13)or
           (text_width(iFuente,substr(sTexto,iInicio_Linea,iFinal_Linea-iInicio_Linea+1))>iAncho)or
           (iFinal_Linea==iLongitud))
         if(sTexto[iFinal_Linea+1]==10)
            iFinal_Linea++;
         end
         //say(iInicio_Linea);
         iTabla_Lineas[iCantidad_Lineas]=iInicio_Linea;
         iInicio_Linea=iFinal_Linea+1;
         iCantidad_Lineas++;
      end
      iFinal_Linea++;
   end
   iTabla_Lineas[iCantidad_Lineas]=iInicio_Linea;
   return iCantidad_Lineas;
end
//------------------------------------------------------------------------------
function Pinta_Pantalla(int iX, int iY, int iDireccion, string sTexto,
       int pointer iTabla_Lineas, int iAlto_Linea, int iSeparacion_Lineas, int iFuente, int iLineas_Caja,
       int iCantidad_Lineas, int iPuntero_Barra)
/*
Función que repinta el texto en la caja.
0:   Pinta inicialmente,
_down:   mueve una línea hacia abajo.
_up:   mueve una línea hacia arriba.
_left:   mueve una página hacia arriba.
_right:   mueve una página hacia abajo.
*/

private
   int iContador=1;
   int iLinea=0; //Línea por la que voy escribiendo.
   int iLongitud; //Longitud del sTexto;
end

begin
   iLongitud=len(sTexto);
   switch (iDireccion)
      case 0: // Inicializa.
         iPrincipio_Pantalla=0;
         iFinal_Pantalla=0;
         iContador=0;
         while (iContador<=iLineas_Caja)
            Pantalla[iContador]="";
            iContador++;
         end
         ilinea=0;
         while ((iLinea<iLineas_Caja)and(iFinal_Pantalla<=iCantidad_Lineas))
            if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-2]==13)
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-2);
            else
               if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-1]==10)
                  Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-1);
               else
                  Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]);
               end
            end
            write_var(iFuente,iX+4,iLinea*(iAlto_Linea+iSeparacion_Lineas)+iY+8,0,Pantalla[iLinea]);
            iLinea++;
            iFinal_Pantalla++;
         end
         return;   
      end

      case -1: //Repinta dependiendo de _Barra.iValor.
         iFinal_Pantalla=iPuntero_Barra.iValor;
         iLinea=0;
         while ((iLinea<iLineas_Caja)and(iFinal_Pantalla<=iCantidad_Lineas))
            if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-2]==13)
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-2);
            else
               if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-1]==10)
                  Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-1);
               else
                  Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]);
               end
            end
            iLinea++;
            iFinal_Pantalla++;
         end
         iPrincipio_Pantalla=iFinal_Pantalla-iLineas_Caja-1;
         return;   
      end

      case _down: // Abajo **************************
         iLinea=0;
         if  (iFinal_Pantalla<=iCantidad_Lineas)
            iPrincipio_Pantalla++;
            while (iLinea<iLineas_Caja-1)
               Pantalla[iLinea]=Pantalla[iLinea+1];
               iLinea++;
            end
            Pantalla[iLinea]="";
            if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-2]==13)
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-2);
            else
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-1);
            end
            iFinal_Pantalla++;
            iPuntero_Barra.iValor++;
         end
         return;   
      end   
         
      case _up: // Arriba *************************************
         if (iPrincipio_Pantalla>0)
            iLinea=iLineas_Caja;
            while (iLinea>0)
               Pantalla[iLinea]=Pantalla[iLinea-1];
               iLinea--;
            end
            Pantalla[iLinea]="";
            iPrincipio_Pantalla--;
            iFinal_Pantalla--;
            if(sTexto[iTabla_Lineas[iPrincipio_Pantalla+1]-2]==13)
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla],iTabla_Lineas[iPrincipio_Pantalla+1]-iTabla_Lineas[iPrincipio_Pantalla]-2);
            else
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla],iTabla_Lineas[iPrincipio_Pantalla+1]-iTabla_Lineas[iPrincipio_Pantalla]-1);
            end
            iPuntero_Barra.iValor--;
            //say(iPuntero_Barra.iValor);
         end   
         return;   
      end   

      case _right:
         if (iFinal_Pantalla<CantidadLineas-1)
            iFinal_Pantalla=iFinal_Pantalla+iLineas_Caja;
            if (iFinal_Pantalla>CantidadLineas-1)
               iFinal_Pantalla=CantidadLineas-1;
            end
            iPrincipio_Pantalla=iFinal_Pantalla-iLineas_Caja;
            iLinea=0;
            while ((iLinea<iLineas_Caja))
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla+iLinea],iTabla_Lineas[iPrincipio_Pantalla+iLinea+1]-iTabla_Lineas[iPrincipio_Pantalla+iLinea]);
               iLinea++;
            end
         end
         return;   
      end

      case _left:
         if (iPrincipio_Pantalla>0)
            iPrincipio_Pantalla=iPrincipio_Pantalla-iLineas_Caja;
            if (iPrincipio_Pantalla<1)
               iPrincipio_Pantalla=0;
            end
            iFinal_Pantalla=iPrincipio_Pantalla+iLineas_Caja;
            iLinea=0;
            while ((iLinea<iLineas_Caja))
               Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla+iLinea],iTabla_Lineas[iPrincipio_Pantalla+iLinea+1]-iTabla_Lineas[iPrincipio_Pantalla+iLinea]);
               iLinea++;
            end
         end
         return;
      end
   end
   
   
end      



process Main()




private
   int iFuente=0;
//   Boton iIde;
   int x1,y1;
   byte bLineas;
   string sTexto1[2]="";
   string sTexto2[0]="";
   string sTexto3[4]="";
   string sTexto="";
end

begin
   set_fps(30,0);
   delete_draw(0);
   drawing_z(1);
   drawing_color(rgb(100,100,100));
   draw_box(0,0,350,300);
   cursor=load_fpg("cursors.fpg"); // AQUI EL FPG CON EL GRAFICO DEL CURSOR. ####################
   raton();

   sTexto=File("varios.prg"); // AQUI EL FICHERO A MOSTRAR.  #####################################
   iIde=Caja_De_Texto(10,300,15,220,sTexto,iFuente,10);
   //write_var(0,200,100,4,iIde.iValor);
while (!key(_ESC))
   frame;
end
exit();
end
process raton();
begin
loop
   graph=1;
   x=mouse.x;
   y=mouse.y;
   z=-251;
   frame;
end


end
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

FreeYourMind

#18
No era más fácil ponerlo de adjunto ? Karma por el labor de todos modos :)


Uppppsssssssssss, Division By Zero...

Fede

Veleeeeeee, esta noche lo pongo mono, si me dejan.  ;D
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

FreeYourMind

Yo tengo algo parecido de los tiempos de DIV por aqui, si te interesa podré buscartelo cuando tenga más tiempo...

Fede

Cuando vuecencia pueda.  :D
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

FreeYourMind

Aqui te lo dejo :) Tenia eventos y controles como si fueran de "Windows", no lo he probado, sobretodo porque es necesario compilarlo con DIV ya que usa la dll 'ascii.dll' de Tizo para DIV, aunque algo de ello puedes aprovechar.

Mirate tambien las cajas de texto que ha hecho Windgate, igual no las conocias:

http://forum.bennugd.org/index.php?topic=861.msg12691#msg12691


Fede

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

tSuKiYoMi

gracias a toda la peña. Hace un par de dias que no entro asi que toca comentar los avances conseguidos. Bueno el apartado gráfico  creo que ya esta prácticamente terminado. Tengo en total 20 misiones programadas y tengo todos los fondos de pantalla terminados.

Respecto al tema de las naves enemigas consegui terminar un par de diseños propios y aunque me ha costado sudor y lagrimas he conseguido ripear una especie de robot-humanoide al mas puro estilo Macross del juego Blazing Star. Todo esta retocado usando el editor gráfico de Div-2 (gracias a FreeYourMind por pasarlo). Los efectos de explosiones tmb están terminados asi como los items que puede capturar la nave espacial escogida. Me falta por terminar/retocar los gráficos de la nave del protagonista y los distintos tipos de disparos.

Respecto al tema de los menus ya esta resuelto, en el tuto de osk viene perfectamente explciado como realiar menus sencillos, asi que no me complicare muxo la vida y lo seguire porque esta bastante bien.

saludos.

Aquel dia vi el infierno en los ojos de Kakashi.