¿Como hacer menus tipo "Windows"?


Mas bien seria tipo "Mac" ya que la Machintosh fue la primera que los implemento,pero bueno, eso de tipo "Windows" es solo un decir porque no sabia como llamarle, Este tipo de menus son los que puedes seleccionar una opcion con las flechas del cursor, los tipicos, bueno mejor dicho los primeros menus que solemos hacer cuando estamos empezando, son los que muestran las opciones y luego pides que seleccionen una opcion y estos pues digamos que son mas vistosos.

Entonces como les decia, la idea es poder seleccionar las opciones del menu por medio de las flechas del cursor, en este caso seria un menu simple y solo usaremos las flechas arriba y abajo, facilmente lo podran adaptar para hacer un menu horizontal del cual se descuelgen otras opciones, digamos tipo "Windows"

Al iniciar el menu vamos a tener la primera opcion seleccionada, el efecto de seleccion lo vamos a hacer usando un fondo para la opcion a forma de que paresca que estuviera resaltado con un plumon.

Para mover las opciones vamos a usar dos variables, opAnt y opAct, ambas de tipo byte, opAct guarda el numero de la opcion que va a estar resaltada y opAnt tendra el numero de opcion que sera deseleccionada.

La seleccion y deseleccion la haremos con un procedimiento que yo siempre llamo mover_menu(ant,act:byte) y como es de suponer recibe como variables, opAnt y opAct que son las opciones que seran deseleccionada y seleccionada respectivamente.

Antes de llamar a mover_menu inicializaremos las variables opAnt:=0, porque al inicio no hay que deseleccionar ninguna opcion y opAct:=1 porque queremos que este seleccionada la primera opcion y enseguida llamamos al procedimiento mover_menu y mover menu contendra todas las opciones que queramos para el menu, dos veces, una para deselecionar y otra para seleccionar.

program hacer_menu;
uses crt;

var
   opAnt,opAct:byte;

procedure mover_menu(ant,act:byte);
begin

   textbackGround(0);
   textcolor(15);

   case ant of
    1: begin gotoxy(1,1); write('Altas'); end;
    2: begin gotoxy(1,3); write('Bajas'); end;
    3: begin gotoxy(1,5); write('Consultas');end;
    4: begin gotoxy(1,7); write('Modificaciones'); end;
    5: begin gotoxy(1,9); write('Salir'); end;
   end

   textbackGround(7);
   textcolor(0);

   case act of
    1: begin gotoxy(1,1); write('Altas'); end;
    2: begin gotoxy(1,3); write('Bajas'); end;
    3: begin gotoxy(1,5); write('Consultas');end;
    4: begin gotoxy(1,7); write('Modificaciones'); end;
    5: begin gotoxy(1,9); write('Salir'); end;
   end

end;

begin
clrscr;
    opAnt:=0;
    opAct:=1;

    gotoxy(1,1); write('Altas');
    gotoxy(1,3); write('Bajas');
    gotoxy(1,5); write('Consultas');
    gotoxy(1,7); write('Modificaciones');
    begin gotoxy(1,9); write('Salir');

    mover_menu(opAnt,opAct);
end.

Antes de llamar a mover_menu, debemos de escribir las opciones del menu, porque si no, no lo veriamos completo. Como ven, el procedimiento mover_menu, es muy sencillo, el primer case utiliza la variable ant y como se ve en las intrucciones textbackground y textcolor se trata de dejar la opcion anteriormente seleccionada del mismo color de letra y de fondo que las demas, el segundo case usa la variable act y lo que hace es lo contrario del primer case, pone la opcion que se va a seleccionar con un color de fondo y letra diferentes de las demas. a mi me gusta usar un fondo gris y letra negra para la opcion a seleccionar, pero todo depende de gustos y del color de fondo de la pantalla que utilicen, pues hay colores que en definitiva deberian estar prohibidos.

El ulitmo paso consiste en actualizar las variables ant o act segun se presionen las teclas de cursor, arriba o abajo. Para eso usaremos un repeat dentro de el usaremos una variable de tipo char, leyendola con un readkey, el ciclo se repetira hasta que se preisone enter, luego con el valor de opAct sabremos que opciones fue seleccionada, obiamente tendremos que usar dos repeat, una para actualizar la vista del menu y otra para salir cuando la opcion sea igual a salir

repeat

   repeat

    op:=readkey;

    if op =#72 then begin
      opant:=opact;
      if opact=1 then
       opact:=5
      else
       dec(opact);
    end

    else
     if op =#80 then begin
      opant:=opact;
      if opact=5 then
       opact:=1
      else
       inc(opact)
     end

   until op =#13

   case act of
    1: write('Aqui se llama al procedimiento altas');
    2: write('Aqui se llama al procedimiento bajas');
    3: write('Aqui se llama al procedimiento consultas');
    4: write('Aqui se llama al procedimiento modificaciones');
   end;

until act=5;

entonces, leemos op preguntamos si se presiono la tecla arriba o abajo, si es abajo, a la variable opAnt se le asigna el valor de opAct, ya que la opcion que esta actualmente seleccionada sera la deseleccionada, luego, como fue abajo preguntamos si opAct vale 5, si es asi ya no podemos bajar mas y regresamos al principio opAct:=1 y viceversa cuando la tecla presionada sea la de cursor arriba, salimos del segundo repeat cuando se presione enter y para saber que hacer usamos el valor de la variable opAct del primer repeat salimos cuando, opAct valga 5, Salir

Se recomienda asignarles constastes a los valores de la teclas de cursor para que sea mas legible, ademas se puede hacer un procedimiento que lea las opciones del menu, asi solo tendriamos un repeat y por ultimo, crear una unidad para tener un mejor control de los errores.

Bajar Programa
MenuW.zip


Regresar


inicio
Si llegaste a esta pagina desde un buscador
haz click aqui para ir a la pagina principal