|
Rutinas De Manejo De Pantalla
Cleardevice
Esta "limpia" la pantalla, es el equivalente al CLRSCR del modo texto.
Ejemplo:
Program Uso_Del_Cleardevice;
uses Crt, Graph;
var
Gd, Gm: Integer;
begin{Inicio del Programa Principal}
Gd := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este corriendo el programa}
InitGraph(Gd, Gm, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);{Evalua sí el resultado de la inicialización no fue correcta entonces: Termina}
Randomize;{Activa el generador de números aleatorios}{Comienza un ciclo que se repite hasta que se presiona cualquier tecla}
repeat
LineTo(Random(getmaxX), Random(getmaxY));{Se pintan lineas desde la posición actual hasta cualquier columna y cualquier fila calculada aleatoriamente}
until KeyPressed;
ReadKey;{Espera que se presione cualquier tecla}
ClearDevice;{Limpia la pantalla}
ReadLn;{Espera hasta que se presione la tecla [ENTER]}
CloseGraph;{Cierra el modo gráfico}
end.{Final del Programa
Pricipal}
Clearviewport
Esta "limpia" la ventana gráfica actual, cuando se habla de ventanas indica que en este modo tambien se puede limitar el modo de tabajo en una porción especifica de la pantalla.
Ejemplo:
Program Uso_Del_Clearviewport;
Uses Graph;
var
Gd, Gm: Integer;
Activa : Boolean;
begin{Inicio del Programa Principal}
Gd := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este corriendo el programa}
InitGraph(Gd, Gm, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);{Evalua si la inicialización no fue correcta, Termina}Activa:=True;{La Variable de Tipo Boolean se le da el valor de Verdadero}
Rectangle(19, 19, GetMaxX-19, GetMaxY-19);{Se pinta un rectangulo desde la columna 19, fila 19, hasta el valor máximo de las columnas -19, y el valor máximo de las filas -19 }
SetViewPort(20, 20, GetMaxX-20,GetMaxY-20, Activa);{Se limita el uso de la pantalla a la fila 20, columna 20, el máximo valor de las columnas -20, el máximo valor de las filas -20}
OutTextXY(0, 0,'Presione [Enter] para limpiar la ventana activa:');
ReadLn;{Espera hasta que se presione la tecla [ENTER]}
ClearViewPort;{Limpia la ventana Activa}
OutTextXY(0, 0, 'Presione [Enter] para terminar:');
ReadLn;{Espera hasta que se presione la tecla [ENTER]}
CloseGraph;{Cierra el modo gráfico}
end.{Final del Programa
Pricipal}
Setviewport(X1,Y1,X2,Y2:integer;
Activa:boolean)
Limita el modo de tabajo en una porción especifica de la pantalla, donde:
X1 = Columna Inicial
Y1 = Fila Inicial
X2 = Columna Final
Y2 = Fila Final
Activa = Indica que la porción de dibujo esta activada cuando toma el valor de true o desactivada cuando está en false;
es el equivalente al procedimiento WINDOW(X1,Y1,X2,Y2); del modo texto.
Program Uso_Del_SetViewPort;
uses Graph;
const
{Se declaran dos constandes del tipo ViewportType, en las cuales x1, x2, y1, y2, son las columnas y filas inicial y final respectivamente, y clip es la variable booleana que indica que van a estar activadas (ClipOn) o no (ClipOff)}
vp1 : ViewPortType =(x1: 10; y1: 80; x2: 100; y2: 150;Clip : ClipOn);
vp2 : ViewPortType =(x1: 110; y1: 0; x2: 200; y2: 70;Clip : ClipOn);
var
GD, GM : Integer;
begin{Inicio del Programa Principal}
Gd := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}
InitGraph(Gd, Gm, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);{Evalua si la inicialización no fue correcta, Termina}
with vp1 do
{Trabaja con la primera constante}
begin{Inicio del With}{Pinta un rectangulo a manera de borde de la primera ventana}
{Succ(x1) lo que hace es restarle una unidad a X1, y pred(X2) le aumenta 1}
Rectangle(Succ(x1),Succ(y1),Pred(x2),Pred(y2));{Se traza el primer rectángulo por el borde exterior de la ventana}SetViewPort(x1, y1, x2, y2, ClipOn);{Se fija la primera ventana en las posiciones correspondientes y se activa(ClipOn)}
OutText('Esta es la Ventana numero 1');{Mensaje de Salida}end;{Final del With}
{ Se activa totalmente toda la pantalla, columna 0, fila 0, hasta el máximo valor de las columnas, máximo valor de las filas del monitor en el que se este ejecutando el programa}
SetViewPort(0, 0, GetMaxX, GetMaxY,ClipOn);
with vp2 do{Trabaja con la primera constante}
begin{Inicio del With}{ Pinta un rectangulo a manera de borde de la primera ventana}
{Succ(x1) lo que hace es restarle una unidad a X1, y pred(X2) le aumenta 1}
Rectangle(Succ(x1),Succ(y1),Pred(x2),Pred(y2));
SetViewPort(x1, y1, x2, y2, ClipOn);{Se fija la segunda ventana en las posiciones correspondientes y se activa(ClipOn)}
OutText('Esta es la segunda ventana');{Mensaje de Salida}end;{Final del With}
ReadLn;{Espera hasta que se presione la tecla [ENTER]}
CloseGraph;{Cierra el modo gráfico}
end.{Final del Programa
Pricipal}
El programa de ejemplo pintura.pas hace uso de este procedimiento para que cuando este dibujando en el área de trabajo, no afecte al menú de control (Los botones de herramientas).
Setcolor(Color);
Fija el color de la primitiva que se vaya a pintar (Sea un círculo, una linea, un letrero, entre otros).
program uso_del_SetColor;
uses
Crt, Graph;
var
Gd, GM : Integer;
begin
GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}
InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);{Evalua si la inicialización no fue correcta, Termina}
Randomize;{Activa el generador de números aleatorios}{Se implementa un ciclo que se repite hasta que el usuario presiona una tecla}
repeatSetColor(Random(GetMaxColor)+1);{Se fija aleatoriamente el color de el número máximo de colores soportado por el monitor}
Line((GetmaxX div 2),(GetmaxY div 2), Random(GetMaxX), Random(GetMaxY));{Se pintan una linea desde el centro de la pantalla hasta una posición fila y columna final generadas aleatoriamente mediante la función random}
until KeyPressed; {Final del ciclo Repeat - Until}
CloseGraph;{Cierra el modo gráfico}
end. {Final del programa principal}
Setbkcolor(Color);
Fija el color del fondo de la pantalla, es el equivalente al textbakground del modo texto.
Program uso_del_SetBkColor;
uses Crt, Graph;
var
GD, GM,Color : Integer;
begin{Inicio del programa principal}
GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}
InitGraph(GD, GM, '');{Inicializa
el modo gráfico}
if GraphResult <> grOk then Halt(1);{Evalua si la
inicialización no fue correcta, Termina}
Randomize;{Activa el generador de números aleatorios}
{Se implementa un ciclo que se repite hasta que el usuario presiona una tecla}
repeat
color:=Random(GetMaxColor);
SetBkColor(color);{Se fija el color del fondo}
SetColor(color+1);{Se fija aleatoriamente el color + 1, para que no quede la linea del mismo color del fondo}
Line((GetmaxX div 2),(GetmaxY div 2), Random(GetMaxX), Random(GetMaxY));{Se pintan una linea desde el centro de la pantalla hasta una posición fila y columna final generadas aleatoriamente mediante la función random}
until KeyPressed;{Final del ciclo Repeat - Until}
CloseGraph;{Cierra el modo gráfico}
end. {Final del programa principal}
GetmaxX;
Esta función toma el valor máximo de las columnas.

GetmaxY;
Esta función toma el valor máximo de las filas.

Program uso_de_GetMaxX_y_GetMaxY;
uses Graph;
var
Gd, Gm : Integer;
begin{Inicio del programa principal}
GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}
InitGraph(GD, GM, '');{Inicializa
el modo gráfico}
if GraphResult <> grOk then Halt(1);{Evalua si la
inicialización no fue correcta, Termina}
Setcolor(Yellow);{Se fija el color a Amarillo}
Rectangle(0,0,GetMaxX,GetMaxY);{Se traza un rectángulo desde la columna 0, fila 0, hasta la máximas coordenadas soportadas por el monito en X y Y}
Setcolor(LightGreen);{Se fija el color a verde brillante}
Rectangle(10,10,GetMaxX div 2,GetMaxY div 2);{Se traza un rectángulo desde la columna 10, fila 10, hasta la mitad de la pantalla}
ReadLn;{Se espera hasta
que se presione la tecla [ENTER]}
CloseGraph;{Se cierra el modo gráfico}
end.{Final del programa principal}
Program uso_de_GetPixel;
uses Graph;
var
Gd, Gm : Integer;
Color_del_pixel : Word;
begin{Inicio del programa principal}
GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}
InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);{Evalua, si la inicialización no fue correcta entonces Termina}
Color_del_pixel := GetPixel(10,10);{Se toma el color del punto en la columna 10 fila 10}
if Color_del_Pixel = 0 then {Si el color del punto es igual a Cero o sea Negro entonces se pinta un punto en la misma posición del valor máximo que soporta el tipo de controlador gráfico}
PutPixel(10, 10, Yellow);{Se pinta el un punto en la columan 10 fila 10 de color Amarillo}ReadLn;{Se espera hasta que se presione la tecla [ENTER]}
CloseGraph;{Se cierra el modo gráfico}
end.{Final del programa principal}
Program uso_de_GetX_y_GetY;
uses Graph;
var
Gd, Gm, X, Y : Integer;
begin{Inicio del programa principal}
GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}
InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);{Evalua, si la inicialización no fue correcta entonces Termina}OutText('Aqui empezamos ');{Se imprime el mensaje inicial }
X := GetX;{Se toma la coordenada de X}
Y := GetY;{Se toma la coordenada de Y}
OutTextXY(20, 10, 'Aqui terminamos');{Se imprime un mensaje en la columna 20 fila 10}readln;{Se espera hasta que se presione la tecla [ENTER]}
setcolor(YELLOW);{Se fija el color a Amarillo}
OutTextXY(X, Y, 'De regreso al comienzo');{Imprime un mensaje en color amarillo en las coordenadas tomadas inicialmente}ReadLn;{Se espera hasta que se presione la tecla [ENTER]}
CloseGraph;{Se cierra el modo gráfico}
end.{Final del programa principal}
RestoreCrtMode;
Sirve para pasar del modo gráfico al modo texto.
Program uso_de_RestoreCRTMode;
uses
Graph;
var
Gd, Gm : Integer;
Mode : Integer;
begin{Inicio del programa principal}
GD := Detect;{Se autodetecta el tipo de tarjeta o controlador gráfico para el monitor en el que se este ejecutando el programa}
InitGraph(GD, GM, '');{Inicializa el modo gráfico}
if GraphResult <> grOk then Halt(1);{Evalua, si la inicialización no fue correcta entonces Termina}setcolor(YELLOW);{Se fija el color a Amarillo}
circle(getmaxx div 2, getmaxy div 2, 100); {Pinta un círculo de color amarillo en la mitad de la pantalla con 100 pixels de radio}setcolor(LIGHTCYAN;{Se fija el color a Aguamarina}
OutText('Presione <Enter> para dejar temporalmente el modo gráfico');
ReadLn;{Se espera hasta que se presione la tecla ENTER}
RestoreCRTMode;{Se restaura el modo Texto}
WriteLn('Ahora estamos en modo texto');
Write('Presione <Enter> para volver al modo gráfico');ReadLn;{Se espera hasta que se presione la tecla ENTER}
SetGraphMode(GetGraphMode);{Se pasa de nuevo al modo gráfico}
ReadLn;{Se espera hasta que se presione la tecla [ENTER]}
CloseGraph;{Se cierra el modo gráfico}
end.{Final del programa principal}
GetGraphMode;
Devuelve el modo gráfico actual.
SetGraphMode;
Fija el modo gráfico, regularmente se usa en conjunto con GetGraphMode.
En el siguiente ejemplo hacemos uso de algunos de los procedimientos y funciones vistos anteriormente:
Program cambio_de_modos;
Uses crt, graph;
Var
Gd, gm : integer;
columnas, filas : integer;
Begin {Inicio del programa principal}
Gd:=DETECT; {Se autodetecta el tipo de tarjeta}
Initgraph(GD,GM,);
If Graphresult<>grok then
Begin
Writeln(No encuentro los archivos con extensión *.BGI y *.CHR);
Readln;{Hace una espera hasta que se presione la tecla Enter}
halt(1);{Termina}
End;{Final del if}
Setbkcolor(blue);{Fija el color del fondo de la pantalla a AZUL}
cleardevice;{Limpia la pantalla}
Setcolor(YELLOW); {Fija el color a AMARILLO, todo lo que se pinte de aquí en adelante, quedará de este color}
outtext('Este es el modo gráfico ');
columnas:=getmaxX;{A La variable columnas se le asigna el número máximo de las columnas en el modo gráfico actual}
filas:=getmaxy;{A La variable filas se le asigna el número máximo de las filas en el modo gráfico actual}
readkey;{Se espera hasta que se presione cualquier tecla}
restorecrtmode;{Se restaura el modo texto}
textcolor(LightGreen);{Se fija el color del modo texto a verde brillante}
{A continuación se imprimen una serie de texto y valores en modo texto}
writeln('Estamos en modo texto, y las dimensiones de este monitor en modo gráfico son: ');
writeln('Columnas = ',columnas);
writeln('Filas = ',filas);
readln;{Espera hasta que se presione la tecla ENTER}
setgraphmode(getgraphmode);{Se regresa de nuevo al modo gráfico}
Setcolor(LightMagenta);{Fija el color a Magenta Brillante, todo lo que se pinte de aquí en adelante, quedará de este color}
{Imprimimos una serie de texto en modo gráfico}
outtext('Ahora estamos de nuevo en el modo gráfico ');
outtext(' Presione cualquier tecla para borrar este mensaje');
readkey;{Se espera hasta que se presione cualquier tecla}
cleardevice;{Se limpia la pantalla}
Setcolor(LightCyan);{Fija el color a Aguamarina, todo lo que se pinte de aquí en adelante, quedará de este color}
outtext(' Este es un nuevo mensaje'); outtext('Presione cualquier tecla para cerrar el modo gráfico y terminar el programa');
readkey;{Se espera hasta que se presione cualquier tecla}
closegraph;{Se cierra el modo gráfico}
End.{Final del programa}
El siguiente programa grafica algunas funciones trigonométricas. Para leer el tipo de función a gráficar y los intervalos de graficación se pasa al modo texto mediante RestoreCrtMode, una vez tenga estos datos vuelve al modo gráfico con SetGraphMode(GetGraphMode);
Ver Código Fuente
![]()
Regresar