| Artículos | 01 ABR 1995

Truco 125: Diseño de botones

Tags: Histórico
Aurelio Llorente.

Las siguientes funciones permiten dibujar botones, de diferentes tamaños, al estilo Windows. Con estas funciones y un poco de imaginación podemos desarrollar programas cuyo entorno de trabajo parezca bajo Windows, pero corren bajo DOS.

Las funciones han sido implementadas en Turbo C v:2.0 y pueden ejecutarse en cualquier ordenador con una tarjeta gráfica a color. La tarjeta usada en el listado fuente ha sido una EGA, pero podemos usar la que tenga nuestro equipo haciendo uso de la instrucción DETECT.

Las funciones son:

barra(int x1, int y1, int x2, int y2, int tipo, int colorfondo).- Esta función dibuja una barra entre los pixels x1,y1 y x2,y2, de un tipo y con un color de fondo.

desmarcar(int x, int y, int lhm, int lvm).- Dibuja un botón desmarcado, es decir, el típico botón de Windows antes de hacer click con el ratón.

x,y.- Son las coordenadas del centro del botón.

lhm.- longitud horizontal mitad del botón.

lvm.- longitud vertical mitad del botón.

Si lhm > lvm el botón es más ancho que alto.

Si lhm <= lvm el botón es más alto que ancho.

marcar(int x, int y, int lhm, int lvm).- Dibuja un botón marcado, es decir el típico botón de Windows después de hacer click con el ratón.

La implementación de dichas funciones son:

void barra(int x1, int y1, int x2, int y2, int tipo, int colorfondo)

{

setfillstyle(tipo,color);

bar(x1,y1,x2,y2);

}

void desmarcar(int x, int y, int lhm, int lvm)

{

barra(x-lhm, y-lvm, x+lhm, y+lvm, 1, BLACK);

barra(x-lhm+1, y-lvm+1, x+lhm-3, y+lvm-3, 1, WHITE);

barra(x-lhm+3, y-lvm+3, x+lhm-1, y+lvm-1, 1, DARKGRAY);

/* Pixel's Blancos de la esquina superior derecha */

putpixel(x+lhm-2,y-lvm+1,WHITE);

putpixel(x+lhm-1,y-lvm+1,WHITE);

putpixel(x+lhm-2,y-lvm+2,WHITE);

/* Pixel's Blancos de la esquina inferior derecha */

putpixel(x-lhm+1,y+lvm-2,WHITE);

putpixel(x-lhm+1,y+lvm-1,WHITE);

putpixel(x-lhm+2,y+lvm-2,WHITE);

barra(x-lhm+3, y-lvm+3, x+lhm-3, y+lvm-3, 1, LIGHTGRAY);

}

void marcar(int x, int y, int lhm, int lvm)

{

barra(x-lhm, y-lvm, x+lhm, y+lvm-1, 1, BLACK);

barra(x-lhm+3, y-lvm+2, x+lhm-3, y+lvm-1, 1, DARKGRAY);

}

Rafael J. Bascón Barrera (Sevilla)

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información