0% encontró este documento útil (0 votos)
53 vistas23 páginas

Capitulo 09 - Introduccion A La Windows

El documento describe los componentes principales de la ventana en PowerBuilder, incluyendo propiedades, eventos y controles. Las propiedades permiten definir la apariencia y comportamiento de la ventana, los eventos son acciones que ocurren en respuesta a interacciones del usuario, y los controles son objetos que se pueden agregar a la ventana como botones y cuadros de datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
53 vistas23 páginas

Capitulo 09 - Introduccion A La Windows

El documento describe los componentes principales de la ventana en PowerBuilder, incluyendo propiedades, eventos y controles. Las propiedades permiten definir la apariencia y comportamiento de la ventana, los eventos son acciones que ocurren en respuesta a interacciones del usuario, y los controles son objetos que se pueden agregar a la ventana como botones y cuadros de datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 23

PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase

Capítulo 9: El Objeto Windows Pág. 65 Lic. Raul Larreinegabe

Capítulo
9
Introducción a la Windows
Referencia Rápida
La Windows es la interfase entre el usuario y la aplicación de PowerBuilder. La Windows
despliega información, requiere información al usuario y responde a las acciones del teclado
y mouse indicadas por el usuario.

La Windows consta de:

♦ Propiedades: donde se define la apariencia y las características de la Windows.


Por ejemplo: el título, el tipo, si aparecerá minimizada, etc.

♦ Eventos: son sucesos que ocurren automáticamente o por invocación del usuario.
Por ejemplo: presionar la tecla Escape, o cerrar una ventana, etc.

♦ Controles: son facultades que posee la Windows sobre los objetos que se van
“pegando” a la misma. Por ejemplo: botones, DataWindow, líneas de edición,
dibujos, etc.

Propiedades de la Windows
Examinemos la opción de propiedades del objeto Windows. La primera “pestaña” indica las
propiedades Generales de la Windows, desde aquí podemos el título que aparecerá en la
cabecera de la ventana, el menú asociado a la misma, las propiedades como: si será visible o
invisible, esta habilitada, poseerá los botones superiores del lado derecho de la ventana para
Maximiza, minimiza o
cambiar el tamaño, el tipo
de ventana y los colores de
la misma.
Los tipos de Ventanas que
maneja el PowerBuilder
son:

♦ Main: son ventanas


que pueden
ejecutarse solas, sin
necesitad de estar
contenidas en otras
ventanas y en
independencia total
de otra ventana.

♦ Popup: son
típicamente las
ventanas que se
abren dentro de
otra, deben poseer
por lo menos un
padre. Pueden
abrirse ilimitada
cantidad de
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 66 Lic. Raul Larreinegabe

ventanas al mismo tiempo y cuando se cierre la ventana principal éstas pueden


continuar abiertas.

♦ Child: son las ventanas que se abren dentro de una ventana Main o Popup, pueden
abrirse ilimitada cantidad. Cuando la ventana principal – padre se cierra, entonces
las ventanas Child dependientes también lo hacen. No posee las características de
asociar un título o de navegación minimizando, maximizando o cambiar de tamaño.

♦ Response: son las ventanas que toman el control de la navegación de la aplicación


impidiendo que se puedan abrir otras ventanas hasta que se cierre esta.

♦ MDI frames: permite abrir múltiples ventanas a la vez en una ventana principal,
acompañando las características de la principal. Cuando la ventana principal –
padre se cierra, entonces las ventanas MDI dependientes también lo hacen. Existen
dos tipos: MDI frame y MDI frame con MicroHelp que permite mostrar un mensaje
al pie de la ventana.
Otras propiedades que posee el objeto ventana son: Position que permite ubicar en
coordenadas Y-X dentro de la pantalla del computador, Pointer que permite escoger el
puntero del mouse que se activará al cruzar el mismo sobre la ventana, Icon permite
indicar el icono que acompañara a la ventana tanto en el título como en la barra del sistema
– por defecto toma el indicado en la Aplicación, Scroll permite definir las propiedades de
activar una barra de movimiento y Toolbar permite indicar las características y posiciones
que ocupará la botonera, si posee, que acompaña a la ventana.
Eventos de la Windows
Como sucedía en la Aplicación, la Window también posee eventos que asociados a una
acción, pueden ser programados por el desarrollador. Si hacemos click presionando el
botón derecho del mouse sobre la Window y en el menú desplegado escogemos la opción
Script se abría una ventana de edición similar a la que vimos en la programación de los
eventos de Aplicación, sin embargo los eventos son otros:
Evento Ocurre cuando ...
Ocurre inmediatamente después de abrirse la ventana. El foco se
Activate
encuentra sobre la ventana activa
Sucede cuando se hace click en una ventana, no así cuando se
Clicked realiza dentro de un control (botón, DataWindow, etc.) que posee
su propio evento click,
Close Ocurre inmediatamente antes de cerrarse la venta activa.
Los “query de ventanas” permiten manejar cualquier detalle último
Close Query
antes de que se termine un evento.
Este evento se ejecuta antes que se pierda el foco sobre la
Deactivate
ventana.
Similar al evento clicked se ejecuta cuando se realiza un doble
Double Clicked
click sobre la ventana.
DragDrop
DragEnter
DragLeave
DragWithin
Hide Cuando la ventana activa se oculta.
Ocurre después que una conexión DDE (Dynamic Data Exchange)
HotLinkAlarm
ha sido efectuada
Ocurre cuando una tecla es presionada en la ventana, no así
Key
cuando se realiza dentro de un control (botón, DataWindow, etc.)
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 67 Lic. Raul Larreinegabe

Evento Ocurre cuando ...


que posee su propio evento Key.
MouseDown Ocurre cuando se presiona el botón izquierdo del mouse.
MouseMove Ocurre cuando se ha movido dentro de la ventana.
Ocurre cuando el mouse es soltado dentro de la ventana y el
MouseUp
puntero no esta localizado dentro de cualquier otro control activo.
Open Este es el primer evento que se ejecuta en al abrirse una ventana.
Raramente se usa este evento. Todos los eventos de otras
Other ventanas que han sido invocados desde los eventos de esta
ventana son encaminados al evento Other.
Rbutton Down Ocurre cuando se presiona el botón derecho del mouse.
Resize Ocurre cuando se cambia el tamaño de la ventana.
Show Ocurre cuando se activa una ventana oculta.
Ocurre antes que el sistema actué a la orden de la combinación de
SystemKey
la tecla ALT + otra tecla.
Ocurre en intervalos especificados de tiempo. Antes de utilizar
Timer este evento debe especificarse los intervalos en los cuales se
ejecutara este evento.
Si deseamos realizar alguna acción inmediatamente después de que la aplicación se ponga
en marcha, solo tenemos que escoger el evento open y escribir en el lenguaje PowerScript
las instrucciones que deseemos.

También pueden crearse y definirse eventos de usuario (User Event) asociados a la ventana.

Controles de la Windows
Los diferentes objetos que pueden ir agregándose al objeto ventana poseen sus propios controles,
allí pueden ser configuradas sus propiedades y agregado su codificación correspondiente. Los
diferentes controles poseen sus propios eventos, y de la misma manera que la window, los mismos
pueden ser codificados, invocados, etc.

Nombres referenciales
El PowerScript permite el uso genérico de nombres referenciales para invocar a los diferentes
objetos.

Parent: es utilizado cuando se invoca al objeto que contiene al objeto actual. Usado principalmente
en el script de: windows, menus, objetos de usuario, etc. Por ejemplo:

Close(Parent)

Parent.Disable()

This: es utilizado para referenciar al actual objeto. Usado en el script del propio objeto. Por
ejemplo:

This.Check()

ReCalc (this)

Super: es utilizado cuando en script de un descendiente debe invocar al script del ancestro. Por
ejemplo:

Super::Event Clicked()
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 68 Lic. Raul Larreinegabe

Super:: wf_mi_funcion(param1, param2)

Uso de los Comandos SetItem y GetItem... Retrieve y Update


El uso del comando Retrieve permite recuperar datos de la Base de Datos al Buffer de memoria1,
valiéndose de la idea de que los datos se representan en forma de matriz (filas = registros, columnas
= campos). Al realizar una consulta puede retornar más de un registro, por ende existirán tantas
filas como registros lograron recuperarse. Lo mismo ocurre entre las columnas y los campos.

El comando Retrieve permite ubicar parámetros de datos que reemplazaran al argumento de


recuperación de la DataWindow, de esta forma se filtraran solo los datos que cumplan con la
condición SQL de la DataWindow. Por ejemplo:

dw_datos.Retrieve (param1, param2, param3)

En el ejemplo anterior las variables param1, param2 y param3 pueden ser reemplazadas por
valores. Por ejemplo:

dw_datos.Retrieve (2, “Juan Perez”, date(“2001/2/15”))

El comando GetItem... (en cualquiera de sus acepciones: GetItemNumber, GetItemDecimal,


GetItemString, GetItemDate, GetItemDecimal) y el comando SetItem sirven para manipular los
datos del buffer de memoria.

El GetItem... toma los datos del tipo indicado y puede ser asignado a una variable. Por ejemplo:

Var1 = dw_datos.GetItemNumber (fila, columna)

En el ejemplo anterior las variables Fila y Columna pueden ser reemplazadas por el número de las
filas y la columna. Por ejemplo:

Var1 = dw_datos.GetItemNumber (1, 2)

O bien por el nombre de la columna. Por ejemplo:

Var1 = dw_datos.GetItemNumber (1, “nombre_cliente”)

El SetItem asigna una variable a el Buffer de datos. Por ejemplo:

dw_datos.SetItem (fila, columna, Var1)

En el ejemplo anterior las variables Fila y Columna pueden ser reemplazadas por sus valores,
incluso la columna por el nombre; la variable puede ser reemplazada por un valor. Por ejemplo:

dw_datos.SetItem (1, 2, “juan perez”)


dw_datos.SetItem (1, “nombre_cliente”, “juan_perez”)

El comando Update registra la transacción del Buffer de memoria a la Base de Datos, sin embargo el
manejo de errores y la confirmación (commit) o rehacer (rollback) la transacción se debe indicar en
un evento en PowerScript.

1
El buffer de memoria es un almacenamiento intermedio entre los datos de la Base de Datos y los datos en pantalla, puede
ser una referencia a datos de una Base de Datos en un instante dado. Por ejemplo: el código de un cliente, el nombre o la
dirección son datos que se encuentran en memoria pero realmente son referencias a datos reales recuperados de una Base
de Datos, éstos datos en la memoria pueden ser alterados, modificados e incluso borrados en memoria. Solo al confirmar la
transacción el dato será realmente almacenado en la Base de Datos.
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 69 Lic. Raul Larreinegabe

dw_datos.Retrieve(Campo1)

Campo1=dw_datos.GetItemNumber(1,2)

Window Buffer en Memoria Base de Datos

Columnas
Base de
Campo1: Datos

Filas

dw_datos.Update(true,false)

dw_datos.SetItem(1,2,Campo1)
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 70 Lic. Raul Larreinegabe

Ejemplo de PowerScript para eventos de un Ancestro de Windows de ABM


con una DataWindow de un solo argumento de recuperación

Para el modelo desarrollado en clase nos basamos en la siguiente pantalla, donde se deben
incorporar a la Windows los siguientes eventos:
1. ue_buscar()
2. ue_nuevo()
3. ue_grabar()
4. ue_borrar()
5. ue_salir()
Y los siguientes objetos:
1. DataWindow: llamado dw_datos, donde se irán a recuperar los datos para
luego almacenarlos.
2. Botón Aceptar: llamado cb_grabar, previamente creado con su script
correspondiente invocando al evento Ue_grabar().
3. Botón Eliminar: llamado cb_borrar, previamente creado con su script
correspondiente invocando al evento Ue_borrar().
4. Botón Cancelar: llamado cb_nuevo, previamente creado con su script
correspondiente invocando al evento Ue_nuevo().
5. Botón Cerrar: llamado cb_salir, previamente creado con su script
correspondiente invocando al evento Ue_salir().

Control de
Datawindow
predefinido

Botones
predefinidos

Evento Open
Al ingresar a la ventana se deben inicializar y limpiar variables, eventos, controles y otros,
tarea que se realiza en el evento de usuario ue_nuevo()

Event ue_nuevo()

Evento Constructor para el control de DataWindow


Antes incluso que el evento Open se ejecutan las “construcciones” de todos los objetos que
esta Windows posee. Por ejemplo el evento Constructor del objeto DataWindow se
ejecutará primero – para recordar: en el script de la DataWindow se realizaba la
definición del Objeto transaccional que realiza la comunicación a la Base de Datos.

This.SetTransObject(SQLCA)
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 71 Lic. Raul Larreinegabe

Evento de usuario Ue_nuevo


Para el ejemplo: limpia la DataWindow del control dw_datos. Inserta un registro, para
dar el efecto de que se dispone de un lugar para ingresar los datos. Finalmente se realiza
un foco sobre el control de la DataWindow.

dw_datos.Reset()
dw_datos.InsertRow(0)
dw_datos.SetFocus()

Evento ItemChanged para el control de DataWindow


Partiendo de las siguientes premisas:
a) Se trata de un modelo de un DataWindow que posee un solo argumento de
recuperación;
b) Se asume que el primer dato de la DataWindow es la clave de la tabla, por ejemplo:
código de empleado en la tabla de empleados;
c) Se debió haber ingresado un valor en el primer elemento de la DataWindow.
Bajo todo esto es que se presume que al alternarse el primer elemento de la DataWindow
es que se ingreso un código o un futuro argumento de recuperación. Entonces se
llama al evento de usuario Ue_buscar() que se encuentra en la windows.

if this.GetColumn() = 1 then
parent.triggerevent('ue_buscar')
end if

Evento de usuario Ue_buscar


Este es el principal evento de la lógica del programa, el mismo se ejecuta solo por
requerimiento del evento ItemChanged del control de DataWindow. En él se recupera el
dato correspondiente en la Base de Dato, o bien se inicializa la DataWindow para recibir los
nuevos datos. Partiendo de las siguientes premisas:
a) Se desconoce el tipo de dato (numérico, alfabético, fecha, etc.) que es el primer
campo2.
b) Para cualquiera sea el tipo de dato el efecto debe ser el mismo: recuperar los datos
asociados o inicializar la DataWindow3.

Long licant_filas // variable donde se almacenarán las filas recuperadas


String lstipo // variable donde se almacena el tipo de dato
any lavalor1 // variable donde se almacena el valor del dato
dw_datos.AcceptText()

lstipo = dw_datos.describe("#"+string(1)+".coltype") // toma el tipo de dato

if lstipo = "number" or left(lstipo,7)="integer" or left(lstipo,4) ="long" then


lavalor1 = dw_datos.GetItemNumber(1,1) // lee el 1er. Dato Numérico
elseif left(lstipo,7)="decimal" then
lavalor1 = dw_datos.GetItemNumber(1,1) // lee el 1er. Dato Numérico
elseif left(lstipo,4)="char" then
lavalor1 = dw_datos.GetItemString(1,1) // lee el 1er. Dato Alfanumérico
elseif lstipo ="date" then
lavalor1 = dw_datos.GetItemDate(1,1) // lee el 1er. Dato Fecha
end if

2
Paradigma de objeto: “no se permite a los objetos manipular las propiedades o conocer sus aspectos internos de otros
objetos (encapsulación)”
3
Paradigma de objeto: “diferentes objetos deberían poder responder de manera propia a estímulos iguales (polimorfismo)”.
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 72 Lic. Raul Larreinegabe

licant_filas = dw_datos.retrieve(lavalor1) // recupera los datos

if licant_filas < 0 then


rollback using sqlca;
MessageBox("Atencion", &
"Se ha producido un error durante la lectura de datos", StopSign!)
elseif licant_filas > 0 then
commit using sqlca;
elseif licant_filas = 0 then
event ue_nuevo()
dw_datos.SetItem(1,1,lavalor1)
end if
dw_datos.SetFocus()

Evento de usuario Ue_grabar


Este evento se ejecuta solo por requerimiento del usuario ya sea desde un botón grabar o
por una tecla especifica de grabación. Nótese el uso del SQL embebido para realizar el
commit o el rollback a la base de datos.

dw_datos.accepttext() // obliga la lectura de la DataWindow


if dw_datos.update(true,false) = 1 then // actualiza la DataWindow
commit using sqlca; // confirmar la transacción
dw_datos.resetupdate() // limpiar el buffer de comunicación
event ue_nuevo()
else
rollback using sqlca; // retroceder la transacción
MessageBox("Error de grabacion", "La aplicación ha encontrado un error",Stopsign!)
end if

Evento de usuario Ue_borrar


Este evento se ejecuta solo por requerimiento del usuario ya sea desde un botón borrar o
por una tecla especifica de borrado. Nótese que el borrado se realiza en la DataWindow, es
decir en el buffer de memoria y luego debe invocar al evento Ue_grabar, que se encargará
de la confirmación del borrado en la Base de Datos.

if MessageBox("Atencion","Esta seguro?",StopSign!,Okcancel!,2) = 1 then


dw_datos.deleteRow(0)
event ue_grabar()
end if

Evento de Usuario Ue_salir


Este evento se ejecuta solo por requerimiento del usuario ya sea desde un botón salir o por
una tecla especifica de salida.

close(this)
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 73 Lic. Raul Larreinegabe

Lista de comandos, funciones y eventos utilizados en la lección.

Comando Descripción
Close(NombreObjeto) Cierra una Window, y libera el espacio ocupado por la misma y
todos los controles de la windows.
Ver también: Hide, Open , Diversas sintaxis de Close.

COMMIT {USING ObjectoTrasaccional} ; SQL embebido. Actualiza la transacción en la Base de Datos.


Ver también: Close Cursor, Open Cursor , Disconnect

dwcontrol.AcceptText ( ) Obliga la aceptación de las reglas de edición de los datos en la


DataWindows, sin necesidad de presionar TAB.
Ver también: Update

dwcontrol.DeleteRow ( Fila ) Elimina una fila.


Ver también: DeleteCount, Retrieve, Update, InsertRow, Reset Update

dwcontrol.Describe ( ListaPropiedades ) Reporta y altera los valores de las propiedades del objeto
DataWindow y los objetos contenidos en él. Retorna el valor de
las propiedades un objeto.
Ver también: Create, Modify, Propiedades de la DataWindows

dwcontrol.GetColumn( ) Obtiene el número de la columna actual, la columna donde se


encuentra haciendo foco.
Ver también: GetClickedColumn, GetColumnName, GetRow, SetColumn,
SetRow

dwcontrol.GetColumnName( ) Obtiene el nombre de la columna actual, la columna donde se


encuentra haciendo foco.
Ver también: GetClickedRow, GetColumn

dwcontrol.GetItemDate( Fila, Columna {, dwbuffer, Lee el valor de una fila/columna de tipo fecha.
ValorOriginal } ) Ver también: GetItemDateTime, GetItemTime, GetItemString, GetItemNumber,
GetItemDecimal, GetText, SetText, SetItem

dwcontrol.GetItemNumber( Fila, Columna {, dwbuffer, Lee el valor de una fila/columna de tipo numérico.
ValorOriginal } ) Ver también: GetItemDateTime, GetItemTime, GetItemString, GetItemDate,
GetItemDecimal, GetText, SetText, SetItem

dwcontrol.GetItemString( Fila, Columna {, dwbuffer, Lee el valor de una fila/columna de tipo carácter.
ValorOriginal } ) Ver también: GetItemDateTime, GetItemTime, GetItemDate, GetItemNumber,
GetItemDecimal, GetText, SetText, SetItem

dwcontrol.InserRow ( Fila ) Inserta una fila.


Ver también: DeleteRow, Update

dwcontrol.Reset () Re-inicia los valores de la DataWindow.


Ver también: DeleteRow

Dwcontrol.ResetUpdate ( ) Limpia la actualización de la clave primaria en una


DataWindow.
Ver también: Update

Dwcontrol.Retrieve ( {, Argumento, Argumento . . . } ) Recupera los datos de la Base de Datos y los vuelca a variables
de una DataWindow.
Ver también: DeleteRow, InsertRow, SetTans, SetTransObject
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 74 Lic. Raul Larreinegabe

Comando Descripción
dwcontrol.SetItem ( Fila, Columna, valor ) Asigna un valor a una fila/columna.
Ver también: GetItemDate, GetItemDateTime, GetItemString, GetItemDecimal,
GetItemNumber, GetItemTime, GetText, SetText

dwcontrol.SetTransObject ( transacción ) Crea un objeto transaccional sobre una DataWindow u otro


objeto.
Ver también: GetTrans, SetTrans

dwcontrol.Update ( { aceptación {, borrarbandera } } ) Actualiza las variables de la DataWindows a la Base de Datos.


Ver también: AcceptText, Modify, ResetUpdate, Print, SaveAs, SetTrans,
SetTransObject

Event NombreEvento Llama un evento.


Ver también: TriggerEvent

Left ( Carácter, n ) Obtiene un especifico numero de caracteres desde el inicio de


una cadena alfanumérica.
Ver también: Mid, Pos, Right

NombreObjeto.SetFocus ( ) Dirige el foco sobre el objeto indicado.


Ver también: SetItem, SetState, SetTop

NombreObjeto.TriggerEvent ( evento {, word, long } ) Dispara un evento asociado a un objeto específico, se ejecuta
inmediatamente.
Ver también: Event, Post, PostEvent, Send

ROLLBACK {USING ObjectoTrasaccional} ; SQL embebido. Devuelve la transacción al estado original en la


Base de Datos.
Ver también: Commint, Connect, Objetos Transaccionales.
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 75 Lic. Raul Larreinegabe

Ejemplo de PowerScript para eventos de un Ancestro de Windows de


Reportes con una DataWindow de dos argumentos de recuperación

Para el modelo desarrollado en clase nos basamos en la siguiente pantalla, donde se deben
incorporar a la Windows los siguientes eventos:
1. ue_buscar()
2. ue_nuevo()
3. ue_primero()
4. ue_siguiente()
5. ue_anterior()
6. ue_ultimo()
7. ue_salir
Y los siguientes objetos:
1. DataWindow: llamado dw_datos, donde se irán a recuperar los datos para luego
imprimirlos.
2. Botón Ver: llamado cb_ver, previamente creado con su script correspondiente
invocando al evento Ue_buscar().
3. Botón Imprimir: llamado cb_imprimir, previamente creado con su script
correspondiente invocando al evento Ue_buscar()
4. Botón Primero: llamado cb_primero, previamente creado con su script
correspondiente invocando al evento Ue_primero().

Líneas de edición
predefinidas

Datawindow
para área de
prevista

Botones
predefinidos

5. Botón Anterior: llamado cb_anterior, previamente creado con su script


correspondiente invocando al evento Ue_anterior().
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 76 Lic. Raul Larreinegabe

6. Botón Siguiente: llamado cb_siguiente, previamente creado con su script


correspondiente invocando al evento Ue_siguiente().
7. Botón Ultimo: llamado cb_ultimo, previamente creado con su script
correspondiente invocando al evento Ue_ultimo().
8. Botón Cancelar: llamado cb_nuevo, previamente creado con su script
correspondiente invocando al evento Ue_nuevo().
9. Botón Cerrar: llamado cb_salir, previamente creado con su script correspondiente
invocando al evento Ue_salir().

Evento Open
Al ingresar a la ventana se deben inicializar y limpiar variables, eventos, controles y otros,
tarea que se realiza en el evento de usuario ue_nuevo()

Event ue_nuevo()

Evento Constructor para el control de DataWindow


Antes incluso que el evento Open se ejecutan las “construcciones” de todos los objetos que
esta Windows posee. Por ejemplo el evento Constructor del objeto DataWindow se ejecutará
primero – para recordar: en el script de la DataWindow se realizaba la definición del Objeto
transaccional que realiza la comunicación a la Base de Datos.

This.SetTransObject(SQLCA)
dw_datos.Modify("DataWindow.Print.Preview = yes") // cambia la propiedad de la DW a preview

Evento de usuario Ue_nuevo


Para el ejemplo: limpia la DataWindow del control dw_datos, inserta un registro, para dar
el efecto de que se dispone de un lugar para ingresar los datos, luego realiza foco sobre el
control de la DataWindow. Ahora bien, al tratarse de objetos de línea de edición, se asigna
valores a em_inicial y em_final, y finalmente se invoca la evento ue_desabilita.

dw_datos.Reset()
dw_datos.InsertRow(0)
dw_datos.SetFocus()
em_inicial.text = “”
em_final.text = “”
Event ue_deshabilita()

Evento de usuario Ue_deshabilita


Inhabilita el uso de los botones de navegación entre páginas de listados.

cb_imprimir.Enabled = false
cb_primero.Enabled = false
cb_siguiente.Enabled = false
cb_anterior.Enabled = false
cb_ultimo.Enabled = false

Evento de usuario Ue_habilita


Habilita el uso de los botones de navegación entre páginas de listados.

cb_imprimir.Enabled = true
cb_primero.Enabled = true
cb_siguiente.Enabled = true
cb_anterior.Enabled = true
cb_ultimo.Enabled = true
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 77 Lic. Raul Larreinegabe

Evento de usuario Ue_buscar


Este es el principal evento de la lógica del programa, el mismo se “dispara” por
requerimiento del botón “Ver”. En él se recuperan los datos de la Base de Datos. Tomando
como parámetro de argumento de recuperación, el texto indicado en em_inicial y em_final.

Long licant_filas // variable de tipo Long


String lstipo1, lstipo2 // variables del tipo string
any lavalor1, lavalor2 // variables de cualquier tipo
MaskDataType mdtipo1, mdtipo2 // variables de tipo Máscara
dw_datos.AcceptText() // confirma la lectura de la dw

mdtipo1 = em_inicial.MaskDataType // toma el primer tipo de Dato


mdtipo2 = em_final.MaskDataType // toma el segundo tipo de Dato

if mdtipo1 = numericMask! or mdtipo1 = decimalMask! then


lavalor1 = long(em_inicial.text) // si es de tipo Numérico
elseif mdtipo1 = stringMask! then
lavalor1 = em_inicial.text // si es de tipo alfanumérico
elseif mdtipo1 = dateMask! then
lavalor1 = date(em_inicial.text) // si es de tipo fecha
elseif mdtipo1 = dateTimeMask! then
lavalor1 = datetime(em_inicial.text) // si es de tipo Fecha y Hora
elseif mdtipo1 = timeMask! then
lavalor1 = time(em_inicial.text) // si es de tipo Hora
end if

if mdtipo2 = numericMask! or mdtipo2 = decimalMask! then


lavalor2 = long(em_final.text) // si es de tipo Numérico
elseif mdtipo2 = stringMask! then
lavalor2 = em_final.text // si es de tipo alfanumérico
elseif mdtipo2 = dateMask! then
lavalor2 = date(em_final.text) // si es de tipo fecha
elseif mdtipo2 = dateTimeMask! then
lavalor2 = datetime(em_final.text) // si es de tipo Fecha y Hora
elseif mdtipo2 = timeMask! then
lavalor2 = time(em_final.text) // si es de tipo Hora
end if

licant_filas = dw_datos.retrieve(lavalor1,lavalor2) // recupera los datos

if licant_filas <= 0 then


MessageBox("Atención","No existen datos para el rango definido", Exclamation!)
event ue_deshabilita()
else
event ue_habilita()
end if

Evento de Usuario Ue_imprimir


Este evento se ejecuta solo por requerimiento del usuario ya sea presionando el botón
correspondiente o bien por una tecla específica.

dw_datos.Print(True)

Evento de Usuario Ue_primero


PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 78 Lic. Raul Larreinegabe

Este evento se ejecuta solo por requerimiento del usuario ya sea presionando el botón
correspondiente o bien por una tecla específica.

dw_datos.ScrollToRow(1)
dw_datos.SetRow(1)

Evento de Usuario Ue_siguiente


Este evento se ejecuta solo por requerimiento del usuario ya sea presionando el botón
correspondiente o bien por una tecla específica.

dw_datos.ScrollNextPage()

Evento de Usuario Ue_anterior


Este evento se ejecuta solo por requerimiento del usuario ya sea presionando el botón
correspondiente o bien por una tecla específica.

dw_datos.ScrollPriorPage()

Evento de Usuario Ue_ultimo


Este evento se ejecuta solo por requerimiento del usuario ya sea presionando el botón
correspondiente o bien por una tecla específica.

long ll_nextrow
ll_nextrow = dw_datos.RowCount()
dw_datos.ScrollToRow(ll_nextrow)
dw_datos.SetRow(ll_nextrow)

Evento de Usuario Ue_salir


Este evento se ejecuta solo por requerimiento del usuario ya sea desde un botón salir o por
una tecla especifica.

close(this)

Alternativa: Ancestro de Windows de Reportes con una DataWindow de dos


argumentos de recuperación utilizando el objeto función de usuario
La variante sobre el ejemplo anterior se basa en la idea de la reusabilidad de la lógica del
algoritmo, para ello podemos reemplazar en el evento de usuario Ue_buscar() los pasos de
evaluación de tipo del dato de los parámetros por una única función que realice este trabajo.
Por tanto el evento Ue_Buscar() debería invocar a la función f_tipo_dato_editmask(),
enviando como parámetro el dato y devolviendo el valor del elemento en el tipo de dato que
corresponda. La función f_tipo_dato_editmask() se crea como función de la ventana4.

Evento de usuario Ue_buscar


Este es el principal evento de la lógica del programa, el mismo se ejecuta por requerimiento
del botón “Ver”. En él se recuperan los datos de la Base de Datos. Tomando como parámetro
de argumento de recuperación, el texto indicado en em_inicial y em_final, utilizando la
función de usuario f_tipo_dato_editmask() que evalúa el tipo de dato.

Long licant_filas
any lavalor1, lavalor2
MaskDataType lstipo1, lstipo2
dw_datos.AcceptText()
lavalor1 = f_tipo_dato_editmask(em_inicial)
4
Para mayor referencia sobre creación, uso y manipulación de funciones referirse al Capítulo 10
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 79 Lic. Raul Larreinegabe

lavalor2 = f_tipo_dato_editmask(em_final)

licant_filas = dw_datos.Retrieve(lavalor1,lavalor2)

If licant_filas <= 0 Then


MessageBox("Atención",&
"No existen datos para el rango definido", Exclamation!)
Event ue_deshabilita()
Else
Event ue_habilita()
End if

Función f_tipo_dato_editmask()
La función recibe como parámetro el dato de tipo EditMask y le da el nombre de pa_referencia,
como se desconoce el tipo de dato que retornará se utiliza una variable de tipo Any

Any dato
MaskDataType tipo

tipo = pa_referencia.MaskDataType

If tipo = numericMask! or tipo = decimalMask! then


dato = long(pa_referencia.text)
Elseif tipo = stringMask! then
dato = pa_referencia.text
Elseif tipo = dateMask! then
dato = date(pa_referencia.text)
Elseif tipo = dateTimeMask! then
dato = datetime(pa_referencia.text)
Elseif tipo = timeMask! then
dato = time(pa_referencia.text)
End If
Return dato
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 80 Lic. Raul Larreinegabe

Lista de comandos y funciones utilizados en la lección.

Comando Descripción
Dwcontrol.Modify ( ModoString ) Modifica un objeto DataWindow según las especificaciones. Las
especificaciones son una lista de instrucciones que cambian la
definición de la DataWindows. Se puede cambiar la apariencia,
el formato, los valores y hasta la información de la relación
entre la DataWindows y la Base de Datos.
Ver también: Describe, Reset, SetBorderStyle, SetDataStyle, SetFilter,
SetFormat, SetPosition, SetRowFocusIndicator, SetSeriesStyle, SetSqlPreview,
SetSqlSelect, SetTabOrder, SetValidate, SintaxisFormSQL

Dwcontrol.Print ( { canceldialog } ) Envía el contenido de una DataWindows a la cola de impresión


de la impresiora predefinida.
Ver también: PrintDataWindow

Dwcontrol.RowCount ( ) Obtiene el número total de filas de una DataWindow.


Ver también: DeleteRow, DeletedCount, Filter, FilteredCount, InsertRow,
ModifiedCount, SetFilter, Update

Dwcontrol.ScrollNextPage ( ) Mueve la posición de una DataWindow a la siguiente página.


Ver también: Scroll, ScrollNextPage, ScrollToRow, ScrollPiorPage,
ScrollPriorRow, SetRow

Dwcontrol.ScrollPriorPage ( ) Mueve la posición de una DataWindow a la página anterior.


Ver también: Scroll, ScrollNextPage, ScrollToRow, ScrollPiorPage,
ScrollNextRow, SetRow

Dwcontrol.ScrollToRow ( row ) Mueve la posición de una DataWindow hasta la fila


especificada.
Ver también: Scroll, ScrollNextPage, ScrollNetxRow, ScrollPiorPage,
ScrollPriorRow, SetRow

Dwcontrol.SetRow ( row ) Posiciona en la fila de una DataWindow


Ver también: GetColumn, GetRow, SetColumn, SetRowFocusIndicator

NombreMáscara.SetMask( maskdatatype, mascara ) Cambia el tipo de máscara.


Referencia: de allí se utiliza las propiedades: MaskDataType, NumericMask!,
DecimalMask!, StringMask!; DateMask!, DateMask!, DateTimeMask!,
TimeMask!

NombreObjeto.Enabled Propiedad del objeto que lo habilita.


Ver también: Disable

NombreObjeto.Text Propiedad del objeto que muestra su contenido.


PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 81 Lic. Raul Larreinegabe

Ejemplo de PowerScript para eventos de un Ancestro de Windows de ABM


con dos DataWindow (tipo cabecera / detalles) de un solo argumento de
recuperación

Para el modelo desarrollado en clase nos basamos en la siguiente pantalla, donde se deben
incorporar a la Windows los siguientes eventos:
1. ue_buscar()
2. ue_nuevo()
3. ue_grabar()
4. ue_asigna_clave()
5. ue_borrar()
6. ue_borrar_item()
7. ue_nuevo_item()
8. ue_salir()

Control de
Objeto DW
cabecera

Control de
Objeto DW
detalles

Objetos
Botones
creados por
el usuario
Y los siguientes objetos:
1. DataWindow: llamado dw_datos, donde se irán a recuperar los datos de la cabecera para
luego almacenarlos. Y dw_detalles donde se irán a recuperar los datos de los detalles para
luego almacenarlos.
2. Botón Aceptar: llamado cb_grabar, previamente creado con su script correspondiente
invocando al evento Ue_grabar().
3. Botón Eliminar: llamado cb_borrar, previamente creado con su script correspondiente
invocando al evento Ue_borrar().
4. Botón Borrar Item: llamado cb_borrar_item, previamente creado con su script
correspondiente invocando al evento Ue_borrar_item().
5. Botón Cancelar: llamado cb_nuevo, previamente creado con su script correspondiente
invocando al evento Ue_nuevo().
6. Botón Cerrar: llamado cb_salir, previamente creado con su script correspondiente
invocando al evento Ue_salir().
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 82 Lic. Raul Larreinegabe

Evento Open
Al ingresar a la ventana se deben inicializar y limpiar variables, eventos, controles y otros,
tarea que se realiza en el evento de usuario ue_nuevo()

Event ue_nuevo()

Evento Constructor para el control de cada DataWindow


Antes incluso que el evento Open se ejecutan las “construcciones” de todos los objetos que
esta Windows posee. Por ejemplo el evento Constructor del objeto DataWindow se ejecutará
primero – para recordar: en el script de la DataWindow se realizaba la definición del Objeto
transaccional que realiza la comunicación a la Base de Datos. Se debe agregar la siguiente
línea de codificación al evento contructor de cada DataWindow.

This.SetTransObject(SQLCA)

Evento de usuario Ue_nuevo


Similar al evento Ue_nuevo() del los ejemplo anteriores, en este caso se agrega la nueva
DataWindow denominada dw_detalles.

dw_datos.Reset()
dw_detalles.Reset()
dw_datos.InsertRow(0)
dw_detalles.InsertRow(0)
dw_datos.SetFocus()

Evento ItemChanged para el control de DataWindow dw_datos


Se presume que al alternarse el primer elemento de la DataWindow de la cabecera es que se
ingreso un código o un futuro argumento de recuperación. Entonces se llama al evento de
usuario Ue_buscar() que se encuentra en la windows.

if this.GetColumn() = 1 then
parent.triggerevent('ue_buscar')
end if

Evento de usuario Ue_buscar


Este es el principal evento de la lógica del programa, el mismo se ejecuta solo por
requerimiento del evento ItemChanged del control de DataWindow de la cabecera. En él se
recuperan los datos correspondientes a la cabecera y al detalle de la Base de Dato, o bien se
inicializan las DataWindow para recibir los nuevos datos.

Long licant_filas // variable donde se almacenarán las filas recuperadas


String lstipo // variable donde se almacena el tipo de dato
any lavalor1 // variable donde se almacena el valor del dato
dw_datos.AcceptText()

lstipo = dw_datos.describe("#"+string(1)+".coltype") // toma el tipo de dato

if lstipo = "number" or left(tipo,7)="integer" or left(tipo,4) ="long" then


lavalor1 = dw_datos.GetItemNumber(1,1) // lee el 1er. Dato Numérico
elseif left(lstipo,7)="decimal" then
lavalor1 = dw_datos.GetItemNumber(1,1) // lee el 1er. Dato Numérico
elseif left(lstipo,4)="char" then
lavalor1 = dw_datos.GetItemString(1,1) // lee el 1er. Dato Alfanumérico
elseif lstipo ="date" then
lavalor1 = dw_datos.GetItemDate(1,1) // lee el 1er. Dato Fecha
end if
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 83 Lic. Raul Larreinegabe

licant_filas = dw_datos.retrieve(lavalor1) // recupera los datos de la cabecera

if licant_filas > 0 then


licant_filas = dw_detalles.retrieve(lavalor1) // recupera los datos del detalle
if licant_filas < 0 then
rollback using sqlca;
MessageBox("Atencion", &
"Se ha producido un error durante la lectura de datos", StopSign!)
elseif licant_filas > 0 then
commit using sqlca;
elseif licant_filas = 0 then
dw_detalles.InsertRow(0)
end if
elseif licant_filas = 0 then
event ue_nuevo()
dw_datos.SetItem(1,1,valor1)
elseif licant_filas < 0 then
rollback using sqlca;
MessageBox("Atencion", &
"Se ha producido un error durante la lectura de datos", StopSign!)
end if
dw_datos.SetFocus()

Evento de usuario Ue_nuevo_item del control de DataWindow detalle


Este evento debe ser creado indicando en el Event ID = pbm_dwnKey. Se ejecutara para vez
que se presione una tecla y permitirá insertar un nuevo registro en el detalle.

if key = keyenter! then


this.InsertRow(0)
end if

Evento de usuario Ue_grabar


Este evento se ejecuta solo por requerimiento del usuario ya sea desde un botón grabar o
por una tecla especifica de grabación. Nótese el uso del SQL embebido para realizar el
commit o el rollback a la base de datos.

dw_datos.accepttext() // confirmar la lectura


if dw_datos.rowcount() > 0 then // verifica que existan registros
para actualizarlos
event ue_asigna_clave()
end if
if dw_datos.update(true,false) = 1 then // actualizar la BD
if dw_detalles.update(true,false) = 1 then // actualizar la BD
commit using sqlca; // confirmar la transacción
dw_datos.resetupdate() // limpiar el buffer de comunicación
dw_detalles.resetupdate() // limpiar el buffer de comunicación
event ue_nuevo() // evento nuevo
else
rollback using sqlca; // retroceder la transacción
MessageBox("Error de grabacion", + &
"La aplicación ha encontrado un error al grabar” + &
“el detalle ",Stopsign!)
end if
else
rollback using sqlca; // retroceder la transacción
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 84 Lic. Raul Larreinegabe

MessageBox("Error de grabacion", + &


"La aplicación ha encontrado un error",Stopsign!)
end if

Evento de usuario Ue_asigna_clave


Este evento copia la clave de la cabecera a cada ítem del detalle a fin de poder relacionarlos
después. Se asume que el primer elemento de cada DataWindow será la clave y argumento
de recuperación.

long i, j
any lavalor1
string lstipo
dw_datos.Accepttext()
dw_detalles.Accepttext()

lstipo = dw_datos.describe("#"+string(1)+".coltype") // toma el tipo de dato

if lstipo = "number" or left(tipo,7)="integer" or left(tipo,4) ="long" then


lavalor1 = dw_datos.GetItemNumber(1,1) // lee el 1er. Dato Numérico
elseif left(lstipo,7)="decimal" then
lavalor1 = dw_datos.GetItemNumber(1,1) // lee el 1er. Dato Numérico
elseif left(lstipo,4)="char" then
lavalor1 = dw_datos.GetItemString(1,1) // lee el 1er. Dato Alfanumérico
elseif lstipo ="date" then
lavalor1 = dw_datos.GetItemDate(1,1) // lee el 1er. Dato Fecha
end if

for i = 1 to dw_detalles.RowCount()
dw_detalles.SetItem(i,1,lavalor1)
next

Evento de usuario Ue_borrar


Este evento se ejecuta solo por requerimiento del usuario ya sea desde un botón borrar o
por una tecla especifica de borrado. Nótese que el borrado se realiza en la DataWindow
cabecera pues por programación de la Integridad de la Base de Datos al eliminarse la
cabecera se elimina el detalle referenciado.

if MessageBox("Atencion","Esta seguro?",StopSign!,Okcancel!,2) = 1 then


dw_datos.deleteRow(0)
event ue_grabar()
end if

Evento de Usuario Ue_borrar_item


Este evento se ejecuta solo por requerimiento del usuario ya sea desde un botón salir o por
una tecla especifica de salida. Sirve para eliminar un ítem del DataWindow de detalles.

dw_detalles.deleterow(dw_detalles.getrow())
if dw_detalles.getrow() < 1 then
dw_detalles.insertrow(0)
end if

Evento de Usuario Ue_salir


Este evento se ejecuta solo por requerimiento del usuario ya sea desde un botón salir o por
una tecla especifica de salida.

close(this)
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 85 Lic. Raul Larreinegabe

Lista de comandos y funciones utilizado en la lección.

Comando Descripción
FOR variable = start TO end {STEP incremento} Produce una iteración desde un número hasta alcanzar otro, en
<Bloque Iteración> pasos incrementales positivos o negativos.
NEXT
Ver también: Do Until, Do While, Loop Until, Loop While
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 86 Lic. Raul Larreinegabe

Ejercicios
Si bien la mayoría de los ejercicios pueden ser resueltos al culminar esta lección, recién al
culminar completamente todas las lecciones se contarán con los conocimientos para
completarlos.

1) Modificar el modelo de Windows de ABM de una tabla para que permita tomar dos
parámetros como argumento de recuperación de la DataWindow (partiendo
siempre de la premisa que los dos primeros elementos de la DataWindow son las
columnas que utiliza para comparar).
2) Modificar el modelo de Windows de ABM cabecera / detalles para que permita
tomar dos parámetros como argumento de recuperación.
3) Modificar el ejercicio 1) y 2) para que en el evento Ue_buscar() se utilice la función
f_tipo_dato() que reciba como parámetro la DataWindow y el número de columna
y retorne el tipo de dato. Similar a la alternativa presentada como ejemplo de
modelo de reporte.
4) Modificar el modelo de Windows de Reporte para que tome cuatro parámetros
como argumento de recuperación de la DataWindow.
5) Modificar el modelo de Windows de ABM de una tabla para que permita tomar tres
parámetros como argumento de recuperación de la DataWindow.
6) Modificar el modelo de Windows de ABM de una tabla para que permita tomar “n”
parámetros como argumento de recuperación de la DataWindow.
7) Modificar el modelo de Windows de ABM cabecera / detalles para que permita
tomar “n” parámetros como argumento de recuperación de la DataWindow.
8) De acuerdo al sistema utilizado como ejemplo en la clase, crear todos los programas
necesarios para completar los ABM’s y reportes de todas las tablas.
9) Ampliar el ejercicio 8) para que realice las validaciones de integridad referencial
para los programas que posean referencias a otras tablas. Emitir un mensaje en
caso de error y no permitir la grabación del dato hasta que el mismo esté
consistente.
10) Modificar todos los modelos (ABM y Reporte) para que cambie la propiedad “titulo”
indicada en la cabecera de las ventanas para que en su lugar aparezca el nombre de
la Windows. Hacerlo en de forma dinámica durante la ejecución del programa.
11) Modificar el ejercicio 10) para que además del nombre del programa aparezca el
nombre del usuario conectado.
12) Modificar el modelo de Reporte (para todos los casos) para agregar un nuevo botón
que permita imprimir en calidad “borrador”.
13) Modificar el modelo de Reporte (para todos los casos) para agregar un nuevo botón
que permita direccionar la salida impresa a un archivo de texto.
14) Modificar el ejercicio 13) para que direccione a un archivo que el usuario pueda
elegir el tipo.
15) Modificar el modelo de Reporte (para todos los casos) para que al resultado de la
consulta se le pueda aplicar un filtro. Valerse de un botón para solicitar el criterio de
filtro.
16) Modificar todos los modelos de ABM para que al presionar la tecla ENTER se pueda
realizar la navegación entre los elementos editables.
17) Modificar el modelo de ABM cabecera / detalles para que al presionar la tecla
ENTER en la ultima columna del DataWindow detalles inserte una nueva fila. Sino
se trata de la ultima columna debe permitir navegar entre las columnas editables.
18) Modificar el ejercicio 17) para que al insertar una nueva fila en la DataWindow el
foco se posicione en el siguiente registro en la primera columna editable.
19) Modificar todos los modelos de ABM para que se puedan utilizar las siguientes
teclas de función:
a. La tecla F2 para grabar. Invocando al evento Ue_grabar()
b. La tecla F3 para eliminar. Invocando al evento Ue_borrar()
c. La tecla Escape para salir del programa. Invocando al evento Ue_salir()
PROGRAMACION IV – Universidad Católica – Análisis de Sistemas Guía de Clase
Capítulo 9: El Objeto Windows Pág. 87 Lic. Raul Larreinegabe

20) Modificar todos los modelos de Reportes para que se puedan utilizar las siguientes
teclas de función:
a. La tecla F2 para ver. Invocando al evento Ue_buscar()
b. La combinación ctrl. + P para imprimir. Invocando al evento
Ue_imprimir()
c. La tecla Retroceso de Página (PagUp) para pasar a la página anterior.
Invocando al evento Ue_anterior().
d. La tecla Avance de Página (PagDw) para pasar a la página siguiente.
Invocando al evento Ue_siguiente().
e. La tecla Inicio (Home) para que pase a la primera página del informe.
Invocando al evento Ue_primero().
f. La tecla Fin (End) para que pase a la última página del informe. Invocando
al evento Ue_ultimo()
g. La tecla Escape para salir del programa. Invocando al evento Ue_salir().
h. La tecla + para realizar un zoom in sobre la vista preliminar.
i. La tecla – para realizar un zoom out sobre la vista preliminar.

También podría gustarte