Capitulo 09 - Introduccion A La Windows
Capitulo 09 - Introduccion A La Windows
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.
♦ 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:
♦ 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
♦ 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.
♦ 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
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
En el ejemplo anterior las variables param1, param2 y param3 pueden ser reemplazadas por
valores. Por ejemplo:
El GetItem... toma los datos del tipo indicado y puede ser asignado a una variable. Por ejemplo:
En el ejemplo anterior las variables Fila y Columna pueden ser reemplazadas por el número de las
filas y la columna. Por ejemplo:
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:
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)
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
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()
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
dw_datos.Reset()
dw_datos.InsertRow(0)
dw_datos.SetFocus()
if this.GetColumn() = 1 then
parent.triggerevent('ue_buscar')
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
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
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.
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.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.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
NombreObjeto.TriggerEvent ( evento {, word, long } ) Dispara un evento asociado a un objeto específico, se ejecuta
inmediatamente.
Ver también: Event, Post, PostEvent, Send
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
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()
This.SetTransObject(SQLCA)
dw_datos.Modify("DataWindow.Print.Preview = yes") // cambia la propiedad de la DW a preview
dw_datos.Reset()
dw_datos.InsertRow(0)
dw_datos.SetFocus()
em_inicial.text = “”
em_final.text = “”
Event ue_deshabilita()
cb_imprimir.Enabled = false
cb_primero.Enabled = false
cb_siguiente.Enabled = false
cb_anterior.Enabled = false
cb_ultimo.Enabled = false
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
dw_datos.Print(True)
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)
dw_datos.ScrollNextPage()
dw_datos.ScrollPriorPage()
long ll_nextrow
ll_nextrow = dw_datos.RowCount()
dw_datos.ScrollToRow(ll_nextrow)
dw_datos.SetRow(ll_nextrow)
close(this)
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)
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
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
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()
This.SetTransObject(SQLCA)
dw_datos.Reset()
dw_detalles.Reset()
dw_datos.InsertRow(0)
dw_detalles.InsertRow(0)
dw_datos.SetFocus()
if this.GetColumn() = 1 then
parent.triggerevent('ue_buscar')
end if
long i, j
any lavalor1
string lstipo
dw_datos.Accepttext()
dw_detalles.Accepttext()
for i = 1 to dw_detalles.RowCount()
dw_detalles.SetItem(i,1,lavalor1)
next
dw_detalles.deleterow(dw_detalles.getrow())
if dw_detalles.getrow() < 1 then
dw_detalles.insertrow(0)
end if
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
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.