El documento describe diversos comandos de programación para gráficos en HP Prime, incluyendo DIMGROB_P para establecer el tamaño de una gráfica, TEXTOUT_P para dibujar texto, GETKEY para obtener la tecla presionada, MOUSE para obtener la posición del puntero del mouse, y ejemplos de uso de estos comandos para dibujar texto, crear menús y detectar teclas y mouse.
1. DIMGROB_P.-Establece las dimensiones de GROB G en ancho*alto.Inicializa la gráfica G con color o
con datos de gráfica proporcionadosen la lista. Si la gráfica se inicializa utilizando datos de gráfica, lista
será una lista de enteros. Cada entero, como se muestra en la base 16, describe un color cada 16 bits.Los
colores cuentan con formato A1R5G5B5 (es decir,1 bit para cada canal alfa y 5 bits para R, G y B).
Sintaxis:DIMGROB_P(G,w, h, [color])
Ejemplo 1.-Mostrar la parte restante del texto “manual de programación HP-
PRIME.escribir en antalla” .
EXPORT programName ()
BEGIN
LOCAL TEXT_MOSTAR:="MANUAL DE PROGRAMACION HP-PRIME ESCRIBIR EN PANTALLA-2019";
DIMGROB_P(G1,640,240,RGB(255,255,255));
TEXTOUT_P(TEXT_MOSTAR,G1,0,100,2,RGB(0,0,255));
BLIT_P(G0,G1,320,0);
FREEZE;
END;
TEXTOUT_P.-Dibuja texto de color c1 en la posición x,y de la gráfica G con la fuente especificada. No
dibuje texto con un ancho en píxeles mayor que el especificado y borre elfondo antes de dibujar el texto
utilizando el color c2. G puede ser cualquiera de las variables gráficas y es opcional. El valor
predeterminado es G0. La fuente puede ser:
0: fuente actual seleccionada en la pantalla de modo,
1: fuente pequeña
2: fuente grande.
La fuente es opcional y, si no se especifica, es la fuente actual seleccionada en la pantalla Configuración de Inicio. c1
puede ser cualquier color especificado como #RRGGBB. El valor predeterminado es negro (#000000). ancho es opcional
y, si no se especifica, no se realiza ningún recorte.B).
2. Ejemplo 2.-mostar el texto “PRONTO” después del texto “MANUAL DE
PROGRAMACION HP PRIME “.
EXPORT programName()
BEGIN
LOCAL SI;
LOCAL TEXT_ESCRI:="MANUAL DE PROGRAMACION HP PRIME";
DIMGROB_P(G1,320,240,RGB(255,255,255));
SI:=TEXTOUT_P(TEXT_ESCRI,G1,10,50,2,RGB(0,0,255),320,RGB(255,255,255));
TEXTOUT_P("PRONTO",G1,SI+2,50,2,RGB(0,0,255),320,RGB(255,255,255));
BLIT_P(G0,G1);
FREEZE;
END;
GETKEY .-Devuelve el ID de la primera tecla del búfer de teclado o -1 si no se ha pulsado ninguna tecla
desde la última llamada a GETKEY. Los ID de tecla son enteros de 0 a 50, numerados desde la esquina
superior izquierda (tecla 0) a la esquina inferior derecha (tecla 50) como se muestra en la figura 27-1.
Sintaxis:GETKEY
Ejemplo 3.-mostara un mensaje de texto que identifique la tecla presionada.
En este caso la tecla del comando “-”tiene un ID 45 y la tecla del comando “+”
tiene un ID 50
3. EXPORT programName()
BEGIN
DIMGROB_P(G1,320,240,RGB(255,255,255));
BLIT_P(G0,G1);
LOCAL TECLA;
REPEAT
TECLA:=GETKEY;
CASE
IF TECLA==-1 THEN TEXTOUT_P(STRING(TECLA),G0,10,20,7) ;END;
IF TECLA==45 THEN MSGBOX("-");BLIT_P(G0,G1);END;
IF TECLA==50 THEN MSGBOX("+");BLIT_P(G0,G1);END;
END;
UNTIL
TECLA == 4
END;
END;
MOUSE .-Devuelve dos listas que describen la ubicación actualde cada punteropotencial(o listas vacías
si no se utilizan punteros). La salida es {x , y, z original, y original, tipo} donde tipo es 0 (para nuevo), 1
(para completado), 2 (para arrastrar), 3 (para alargar), 4 (para girar) y 5 (para un clic largo). El índice de
parámetros opcionales el elemento n-ésimo que se devolvería (x, y, x original, etc.) sise hubiera omitido
el parámetro (o –1 si no se registra actividad del puntero).
Ejemplo4.-eneste ejemplo se muestraloque hace el comando MOUSE, para el
cual se ha agregadoel comando WAIT (), para evitar el parpadeo de la pantalla.
EXPORT programName()
BEGIN
DIMGROB_P(G1,320,240,RGB(0,0,0));
BLIT_P(G0,G1);
DRAWMENU("","","","BORRAR","ATRAS","OK");
LOCAL TACTIL;
LOCAL TOCAR;
REPEAT
TACTIL:=WAIT(-1);
TOCAR:=MOUSE();
BLIT_P(G0,G1);
5. Si se hace un clic enel área de menú se queda,se puede verel indice igual a1.
Si se hace clic y anti-clicala vezpor largotiempoapareceráel indice 7.
Ejemplo 5.-crear un menú en la variable grafica G2
ICON name5L
89504E470D0A1A0A0000000D494844520000002A000000140103000000C17D3DC500000006504C5445
FFFBF0000000F82165E
80000000274524E5300007693CD380000005649444154780175CEB10D80300C44D12FA5A0CC081925A
3304AB2012BB10123843128900F2720A8A89E2C59FAC724E980E89C901C83AC3D098AB6A68AB434AD
4E1CD883BF0EDA3F16BEAB742AB9E32163B6377B8FB80059885C7192B359A10000000049454E44AE42
6082;
ICON name6L
89504E470D0A1A0A0000000D494844520000002A000000140103000000C17D3DC500000006504C5445
FFFBF0000000F82165E80000000274524E5300007693CD380000004D49444154780155CEB11180300C4
3D1DF516604466134329AB7610452E410068B0237EF72B6E5B0481AD092096B72C19608F6878E744A9
11C45B4975EF07BB9E749EF65C517E6681FF2D9FAC40D3F905C8C788CCEC60000000049454E44AE4260
82;
ICON name7L
89504E470D0A1A0A0000000D494844520000002A000000140103000000C17D3DC500000006504C5445
FFFBF0000000F82165E80000000274524E5300007693CD38000000544944415478012DCEBB1180300C0
35075D06501EE324A464B26E3330B4340C14558B61BBF7361C95848BE40313EA01A136806812E063479
8A23A8CE5E9CCDB7B936DFEC468C38B8825B743E0ACBE82CCADA78E20724BF5BCB5C25E3160000000
049454E44AE426082;
LOCAL CAS_MEN:={{181,215,223,235},{225,215,267,235},{269,215,311,235}};
7. 11: THEN
12: POS:=TEXTOUT_P("1",G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
13: END;
14: END;
15: UNTIL
16: TECLA= 4
17: END;
18: END;
1: Exporta a nivel global
2: inicio del programa principal
3: dimensionamiento de la pantalla graficaguardada en G1
4: sobrepone el objeto grafico contenido en G1, en G0
5: crea la variablelocal TECLA
6: crea la variablelocal POS (POS:=100 es la posición dondese inicia paraescribir)
7: iniciala estructura derepetición
8: se asigna valora la variablelocal TECLA
9: inicio dela estructura de selección múltiple
10: si sepresiona la tecla que tiene un ID 42
11: hacer
12: se asigna la siguienteposición del número a escribir
13: fin
14: final dela estructura de selección múltiple
15: hasta que
16: comparación tecla quetiene un ID 4(para terminar el programa) con el 4
17: final dela estructura de repetición
Ejemplo 7.-escribir en pantalla, el numero 0.123456789
EXPORT programName()
BEGIN
DIMGROB_P(G1,320,240,RGB(255,255,255));
BLIT_P(G0,G1);
LOCAL TECLA;
LOCAL POS:=100;
8. REPEAT
TECLA:=GETKEY;
CASE
IF TECLA = 42 THEN
POS:=TEXTOUT_P("1",G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
IF TECLA = 43 THEN
POS:=TEXTOUT_P("2", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
IF TECLA = 44 THEN
POS:=TEXTOUT_P("3", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
IF TECLA = 37 THEN
POS:=TEXTOUT_P("4", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
IF TECLA = 38 THEN
POS:=TEXTOUT_P("5", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
IF TECLA = 39 THEN
POS:=TEXTOUT_P("6", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
IF TECLA = 32 THEN
POS:=TEXTOUT_P("7", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
IF TECLA = 33 THEN
POS:=TEXTOUT_P("8", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
IF TECLA = 34 THEN
POS:=TEXTOUT_P("9", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
IF TECLA = 47 THEN
POS:=TEXTOUT_P("0", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
IF TECLA = 48 THEN
POS:=TEXTOUT_P(".",G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
END;
END;
UNTIL TECLA= 4
END;
END;
9. Ejemplo 8.-escribir en pantalla, el numero 11111 Y borrar
1: EXPORT programName()
2: BEGIN
3: DIMGROB_P(G1,320,240,RGB(255,255,255));
4: BLIT_P(G0,G1);
5: LOCAL TECLA;
6: LOCAL POS:=100;
7: LOCAL POS_LIST:={100};
8: LOCAL INC:=1;
9: REPEAT
10: TECLA:=GETKEY;
11: CASE
12: IF TECLA = 42
13: THEN
14: POS:=TEXTOUT_P("1",G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
15: INC:=INC+1;
16: POS ▶ POS_LIST(INC);
17: END;
18: IF TECLA = 19 AND SIZE(POS_LIST)>1
19: THEN
20: INC:=INC-1;
21: TEXTOUT_P("1",G0,POS_LIST(INC),200,7,RGB(255,255,255),50,RGB(255,255,255));
22: POS_LIST:=tail(revlist(POS_LIST));
23: POS_LIST:=revlist(POS_LIST);
24: POS:=POS_LIST(INC);
25: END;
26: IF TECLA = 50
27: THEN
28: TEXTOUT_P(POS_LIST,G0,50,20,3,RGB(0,0,255),320,RGB(255,255,255));
29: END;
30: END;
31: UNTIL TECLA= 4
32: END;
33: END;
1: Exporta a nivel global
2: Incio del programa
3: Dimensionamiento del objeto grafico en G1
4: Reemplazando el objeto grafico contenido en G1
5: Variablelocal TECLA
6: Variablelocal POS(posición horizontal dondese inicia es escribir)
7: Variablelocal POS_LIST(lista deposiciones lo losnúmeros )
8: Variableloca INC(para guardar laposición del siguientecarácter a escribir)
9: Inicio deestructura de repetición
10: Asignación dela variableTECLA
10. 11: iniciaestructura deselección múltiple
12: Si la tecla que sepresiona correspondea la tecla de ID 42
13: Hacer
14: Posición del siguientenúmero a escribir
15: Incrementa la variableINC en una unidad
16: Se guarda la posición del siguientenúmero a escribir en la posición 2 dela lista
17: Fin
18: Si la tecla que sepresiona correspondea la tecla de ID 19 y tamaño de lista es mayor que 1
19: Hacer
20: Disminuye la variableINC en una unidad
21: Escribeel número a borrar,de color blanco
22: Invierte la lista y seelimina el primer elemento de la lista
23: Invierte la lista
24: Posición del siguientenúmero a escribir
25: Fin
26: Si la tecla presionada correspondea la tecla de ID 50
27: Hacer
28: Mostrar texto(en este caso el texto es la lista deposicionesdelos números)
29: Fin
30: Fin de la estructura e selección múltiple
31: Hasta que se presione la tecla de ID 4
32: Final dela estructura de repetición
33: Final del programa
Ejemplo 9.-escribir en pantalla, el número 0.123456789 Y borrar
EXPORT programName()
BEGIN
DIMGROB_P(G1,320,240,RGB(255,255,255));
BLIT_P(G0,G1);
LOCAL TECLA;
LOCAL POS:=100;
LOCAL POS_LIST:={100};
LOCAL INC:=1;
REPEAT
TECLA:=GETKEY;
CASE
IF TECLA = 42 THEN
11. POS:=TEXTOUT_P("1",G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
POS ▶ POS_LIST(INC);
END;
IF TECLA = 43 THEN
POS:=TEXTOUT_P("2", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
POS ▶ POS_LIST(INC);
END;
IF TECLA = 44 THEN
POS:=TEXTOUT_P("3", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
POS ▶ POS_LIST(INC);
END;
IF TECLA = 37 THEN
POS:=TEXTOUT_P("4", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
POS ▶ POS_LIST(INC);
END;
IF TECLA = 38 THEN
POS:=TEXTOUT_P("5", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
POS ▶ POS_LIST(INC);
END;
IF TECLA = 39 THEN
POS:=TEXTOUT_P("6", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
POS ▶ POS_LIST(INC);
END;
IF TECLA = 32 THEN
POS:=TEXTOUT_P("7", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
POS ▶ POS_LIST(INC);
END;
IF TECLA = 33 THEN
POS:=TEXTOUT_P("8", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
POS ▶ POS_LIST(INC);
END;
IF TECLA = 34 THEN
POS:=TEXTOUT_P("9", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
POS ▶ POS_LIST(INC);
END;
IF TECLA = 47 THEN
POS:=TEXTOUT_P("0", G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
POS ▶ POS_LIST(INC);
END;
IF TECLA = 48 THEN
POS:=TEXTOUT_P(".",G0, G0,POS,200,7,RGB(0,0,255),50,RGB(255,255,255));
INC:=INC+1;
12. POS ▶ POS_LIST(INC);
END;
IF TECLA = 19 AND SIZE(POS_LIST)>1 THEN
INC:=INC-1;
TEXTOUT_P("1",G0,POS_LIST(INC),200,7,RGB(255,255,255),50,RGB(255,255,255));
POS_LIST:=tail(revlist(POS_LIST));
POS_LIST:=revlist(POS_LIST);
POS:=POS_LIST(INC);
END;
IF TECLA = 50 THEN
TEXTOUT_P(POS_LIST,G0,50,20,3,RGB(0,0,255),320,RGB(255,255,255));
END;
END;
UNTIL TECLA= 4
END;
END;
Ejemplo 10.-fondo de pantalla para carga distribuida
ICON name5
89504E470D0A1A0A0000000D494844520000002A000000140103000000C17D3DC500000006504C5445
FFFBF0000000F82165E80000000274524E5300007693CD380000005649444154780175CEB10D80300C4
4D12FA5A0CC081925A3304AB2012BB10123843128900F2720A8A89E2C59FAC724E980E89C901C83AC3
D098AB6A68AB434AD4E1CD883BF0EDA3F16BEAB742AB9E32163B6377B8FB80059885C7192B359A100
00000049454E44AE426082;
ICON name6
89504E470D0A1A0A0000000D494844520000002A000000140103000000C17D3DC500000006504C5445
FFFBF0000000F82165E80000000274524E5300007693CD380000004D49444154780155CEB11180300C4
3D1DF516604466134329AB7610452E410068B0237EF72B6E5B0481AD092096B72C19608F6878E744A9
11C45B4975EF07BB9E749EF65C517E6681FF2D9FAC40D3F905C8C788CCEC60000000049454E44AE4260
82;
ICON name7
89504E470D0A1A0A0000000D494844520000002A000000140103000000C17D3DC500000006504C5445
FFFBF0000000F82165E80000000274524E5300007693CD38000000544944415478012DCEBB1180 300C0
35075D06501EE324A464B26E3330B4340C14558B61BBF7361C95848BE40313EA01A136806812E063479
13. 8A23A8CE5E9CCDB7B936DFEC468C38B8825B743E0ACBE82CCADA78E20724BF5BCB5C25E3160000000
049454E44AE426082;
LOCAL
CA_MEN:={{5,215,47,235},{49,215,91,235},{93,215,135,235},{137,215,179,235},{181,215,223,235},{225,
215,267,235},{269,215,311,235}};
EXPORT programName()
BEGIN
LOCAL j;
DIMGROB_P(G4,320,240,RGB(255,255,255));
BLIT_P(G4,CA_MEN(5,1),CA_MEN(5,2),"name5");
BLIT_P(G4,CA_MEN(6,1),CA_MEN(6,2),"name6");
BLIT_P(G4,CA_MEN(7,1),CA_MEN(7,2),"name7");
FOR j FROM 1 TO 4 DO
TEXTOUT_P("NC:",G4,20+j,180-j+2,2,RGB(192,192,192),120);
RECT_P(G4,40+j,180-j,40+j+25,180-j+15,RGB(0,0,0),RGB(255,255,255));
TEXTOUT_P("Xo:",G4,75+j,180-j+2,2,RGB(192,192,192),120);
RECT_P(G4,90+j,180-j,90+j+40,180-j+15,RGB(255,255,255),RGB(0,0,0));
TEXTOUT_P("Wo:",G4,140+j,180-j+2,2,RGB(192,192,192),120);
RECT_P(G4,160+j,180-j,160+j+40,180-j+15,RGB(255,255,255),RGB(0,0,0));
TEXTOUT_P("Xf:",G4,75+j,180-j+2+20,2,RGB(192,192,192),120);
RECT_P(G4,90+j,180-j+16,90+j+40,180-j+15+16,RGB(0,0,0),RGB(255,255,255));
TEXTOUT_P("Wf:",G4,140+j,180-j+2+20,2,RGB(192,192,192),120);
RECT_P(G4,160+j,180-j+16,160+j+40,180-j+15+16,RGB(0,0,0),RGB(255,255,255));
END;
TEXTOUT_P("1:",G4,1,220+2,2,RGB(0,0,0),120,RGB(255,255,255));
RECT_P(G4,1,178,1+15,178+15,RGB(0,0,0),RGB(255,255, 255));
TEXTOUT_P("◀",G4,1,170+2,7,RGB(0,0,255),120);
RECT_P(G4,210,178,210+15,178+15,RGB(0,0,0),RGB(255,255,255));
TEXTOUT_P("▶",G4,210,170+2,7,RGB(0,0,255),120);
TEXTOUT_P("NC:",G4,20,180+2,2,RGB(255,0,0),120);
RECT_P(G4,40,180,40+25,180+15,RGB(0,0,0),RGB(255,255,255));
TEXTOUT_P("1",G4,45,180+5,1,RGB(255,0,0),120);
TEXTOUT_P("Xo:",G4,75,180+2,2,RGB(0,0,255),120);
RECT_P(G4,90,180,90+40,180+15,RGB(0,0,0),RGB(255,255,255));
TEXTOUT_P("Wo:",G4,140,180+2,2,RGB(0,0,255),120);
RECT_P(G4,160,180,160+40,180+15,RGB(0,0,0),RGB(255,255,255));
TEXTOUT_P("Xf:",G4,75,180+2+20,2,RGB(0,0,255),120);
RECT_P(G4,90,180+16,90+40,180+15+16,RGB(0,0,0),RGB(255,255,255));
TEXTOUT_P("Wf:",G4,140,180+2+20,2,RGB(0,0,255),120);
RECT_P(G4,160,180+16,160+40,180+15+16,RGB(0,0,0),RGB(255,255,255));
BLIT_P(G0,G4);
FREEZE;
END;
14. QUE ES PROGRAMACION MODULAR
Uno de los métodos más conocidas para resolver un problema es dividirlo en problemas más pequeños,
llamados subproblemas,deesta manera, en lugar deresolver una tarea compleja y tediosa,resolveremos
otras más sencilla y a partir deellasllegamos a la solución .esta técnica seusa mucho en programación ya
que programar no es más que resolver problemas, y sele suelellamar diseño descendente, metodología
dividey vencerás o programación top-Down. Es evidente que si esta metodología nos lleva a tratar con
subproblemas, entonces también tengamos necesidad de poder crear y trabajar con subprogramas para
resolverlos .a estos subprogramas seles suele llamar módulos,deahí viene el nombre de programación
modular.
Los procedimientos
Un procedimiento es un subprograma querealiza una tarea específica.para invocarlo,es decir,parahacer
que se ejecute, basta con escribir su nombre en el cuerpo de otro procedimiento o en el programa
principal .pero hay que tener en cuenta que su declaración debe hacerse antes de que sea llamado por
otro modulo
Para escribirun número en pantalla serequiereuna posición inicial horizontal y vertical
Ejemplo 11.-fondo de pantalla para escribir en una casilla
LOCAL FONDO();
EXPORT programName()
BEGIN
FONDO();
END;
FONDO()
BEGIN
DIMGROB_P(G4,320,240,RGB(255,255,255));
LOCAL j;
FOR j FROM 1 TO 4 DO
TEXTOUT_P("Xo:",G4,75+j,180-j+2,2,RGB(192,192,192),120);
1 1 1 1
16. 1: Declaración devariablelocal TECLA
2: Declaración devariablelocal TOCAR
3: Declaración devariablelocal FONDO()
4: Se establecomo variableglobal programName()
5: Inicio deprograma principal
6: Subprograma FONDO(),este subprograma coloca el fondo de pantalla
7: Inicio deestructura de repetición
8: Asignación devariable(seasigna el código detecla al presionar una tecla)
9: Asignación devariable(si setoca la pantalla)
10: Inicio deestructura de selección múltiple
11: Si el tamaño de la primera lista es igual a cero(sin elementos) hacer
12: Fin
13: Si el tamaño de la primera lista es igual a uno(un elemento) hacer
14: Fin
15: Fin de la estructura de selección múltiple
16: Hasta que se presión una tecla cuyo código se a 4 (ID 4)
17: Fin de la estructura de repetición
18: Fin del programa principal