manuales originales centura builder
TRANSCRIPT
4. Caracteristicas de la Programación en SQLWindows.
4.1. Variables.
Prefijos y Tipos de Variables.
Tipos de Datos Prefijo Uso
Boolean b Valor lógico (TRUE / FALSE ).
Date/Time dt Fecha / Hora.
File Handle fh Manija de Archivos.
Long String ls Cadena de Caracteres mayores a 255.
Number n Numérico.
SQL Handle hSql Manija para conexiones SQL.
String s Cadena de caracteres menor o igual a 255.
Window Handle hWnd Manija de Ventanas.
Al igual que en los lenguajes tradicionales, se recurre al uso de
variables para almacenamiento de valores, estas variables pueden ser:
Globales Definidas en la seccion Global Declarations.
Locales Definidas en la sección Window Variables de las
ventanas.
Se recomienda seguir usando la notación para asignación de nombres:
SQLWindows 53
Prefijo en minúsculas.
Primera letra de cada palabra en myúscula.
Los tipos de datos Handle (manija) son tipos especiales para identificar
un archivo, una conexión SQL o una ventana según sea el caso; no son
variables con las que se pueden hacer operaciones ya que su función es sólo
de identificador, se utilizan cuando se hace uso de ciertas funciones.
4.1.1. Variables de SQLWindows
Variable Tipo de Dato Variable Tipo Dato
HWndNULL Menejo de Ventana SqlDatabase Secuencia
HWndForm Manejo Ventana SqlUser Secuencia
HWndItem Manejo Ventana SqlPassword Secuencia
HWndMDI Manejo Ventana SqlNoRecovery Boolean
Wparam Número SqllnMessage Número
MyValue <ref.item corriente>
BstaticsAsWindows Boolean - cuando es
puesto en TRUE, los
objetos pasivos no son
pintados en el formulario,
sino que creados como
objetos de window.
NargCount Número
StrArgArry[*] Arreglos de Secuencias
(“String”)
SQLWindows 54
4.1.2. Calificación de Variables.
Referencia Simple:
<variable/objeto_nombre>
Ejemplo: Set dfDate = SalDateCurrent()
Referencia Calificada:
<nom. De formato_nombre> <variable/objeto_nom>
Ejemplo: SetfrmMain.dfDate = SalDateCurrent()
Referencias Calificadas en su Totalidad (o “Window-quelified”):
<padre_ventana_mabejo> <variable-/objeto_nom>
Ejemplo: SethWnd.dfDate = SalDateCurrent()
(o... Set hWnd.frmMain.dfDate = SalDateCurrent())
SQLWindows 55
4.2. Arreglos.
En SQLwindows se pueden crear arreglos unimendisionales y
multidimensionales de los diferentes tipos de variables provistos. Antes de
explicar como operan los arreglos multidimensionales, se deberá entender
como declarar los de dimensión uno.
4.2.1. Arreglos Unidimensionales.
Arreglos Unidimensionales Estáticos.
Si se conoce el número máximo de números de elementos que un
arreglo puede contener, específique el número entre corchetes , al
momento de declararlo:
Arreglos Unidimensionales Dinámicos.
Si no se puede predecir el número máximo de elementos contenidos en
un arreglo, se deberá utilizar un asterisco (*) en lugar de un número fijo
de elementos, esto le indica a SQLWindows que es un arreglo dinámico.
Arreglos Unidimensionales Estaticos.
Variables
String : sArchivo
String : sPais
Number : nMaximo
Number : nValores [4]
SQLWindows 56
Arreglos Unidimensionales Dinamicos.
Variables
String : sEmpleados [4]
String : sDeptos [4]
En el primer ejemplo sPais y nValores son arreglos (vectores) fijos de
1 dimensión, el primer elemento 0 y el último n-1.
En el segundo ejemplo sEmpleados y sDeptos son de tamaño variables,
el primer elemento es el 0, pero el último depende de los elementos que se
almacenen en los arreglos.
4.2.2. Arreglos Multidimensionales.
Asignación de rangos en Arreglos Unidimensionales.
Variables
String : sEmpleados [1:10]
Nota: Este arreglo consta de diez elementos (1-10), no se utiliza la posición cero.
Variables
String : sEmpleados [1:*]
Nota: Este arreglo es dinámico (1-n), no se especifica la posición cero.
Por omisión, se referencia al primer elemento de un arreglo con el
índice cero. Para controlar como referenciar al primer elemento de un arreglo,
se deben especificar los limites inferior y superior separados por dos puntos.
SQLWindows 57
Arreglos Multidimensionales Estaticos. Arreglos Multidimensionales Dinámicos
Variables
String : sEmpleados [10,3]
Nota: El arreglos presenta diez elementos en su
primera dimensión (0-9) y sólo tres en la segunda
dimensión (0-2).
Variables
String : sEmpleados [*,3]
Nota: Este arreglo es dinámico en la primera
dimensión (0-n) y tres elementos en la segunda
dimensión (0-2).
Para declarar un arreglo multidimensional estatico basta con especificar
el número de elementos de la segunda y subsecuentes dimensiones después
del número de la primera dimensión. Se debe de separar cada dimensión por
medio de coma.
En el tipo de arreglo multidimensional dinámico sólo se puede
especificar la primer dimensión dinámica.
Asignación de rangos en Arreglos Multidimensionales.
Variables
String : sEmpleados [1:10 , 1:3]
Nota: Este arreglo presenta en la primera dimensión diez elementos (1-10), sin declarar
posición cero y tres elementos en la segunda dimensión.
Variables
String : sEmpleados [1:* , 1:3 , 1:10 ]
Nota: Este arreglo es dinámico (1-n) en la primera dimensión, con tres elementos en la
segunda dimensión (1-3) y diez elementos en la tercera dimensión (1-10).
Se pueden controlar los limites de los elementos para cualquier
dimensión, incluso si la primera dimensión es dinámica.
SQLWindows 58
Ejercicio.
1. Identifique los tipos de variables de acuerdo a la nomenclatura.
sTitulo _____________ nMaximo _____________
bFin _____________ nSqlMain _____________
HWndPadre _____________
SQLWindows 59
2. Declare un arreglo unidimensional de 10 elementos del tipo Number.
3. Declare un arreglo unidimensional de 50 elementos del tipo String con un
límite inferior 1.
4. Declare un arreglo dinámico de tipo Boolean.
5. Declare el arreglo que representa una matriz de 10x20 iniciando sus índices
a partir de 1.
6. Declare un arreglo multidimensional de orden 3, cuya primera dimensión
sea dinámica y las subsecuentes sean de 10 y 20 respectivamente. en todos
los casos el límite inferior de las dimensiones deberá de ser 1.
4.3. Constantes.
Para definir constantes de usuario se utiliza la sección Constans de la
sección Global Declaration.
No existe una nomenclatura en especial, salvo el uso extensivo de
Mayúsculas.
SQLWindows 60
Variables
System
User
Number: PAM_Activa = SAM_User + 1
Number: PAM_Desactiva = SAM_User + 2
String: MsgError = 'Error en la Aplicación'
Ejercicio.
1. Abra una nueva aplicación SQLWindows.
2. Defina varias constantes en la aplicación.
3. En liste los tipos de constantes que se puede definir.
SQLWindows 61
4.3.1. Constantes Predefinidas
Existen en el lenguaje SQLWindows muchas constantes previamentes
definidas, estas se utilizan en el llamado a ciertas funciones cuyos parámetros
llevan valores restringidos, un ejemplo es la función:
SalMessageBox( sContenido, sTitulo, nOpciones )
SQLWindows 62
Donde nOpciones es una constante o combinación de constantes
apropiadas. Para combinarlas se utiliza el operador ““ (barra vertical),
Ejemplo:
Call SalMessageBox( ' Error en la aplicación ', 'Altas’, MB_IconStop MB_RetryCancel)
Las opciones pueden tener una combinación de valores, algunos de ellos
son:
MB_IconAsterisk MB_IconExclamation MB_RetryCancel
MB_IconHand MB_IconQuestion MB_YesNo
MB_Ok MB_IconStop MB_YesNoCancel
MB_OkCancel MB_AbortRetryIgnore
4.4. Lenguaje SAL.
Para agregar código a la aplicación los elementos del lenguaje
SAL(SQLWindows Application Languaje), el cual provee de un conjunto de
instrucciones para programar acciones de la misma manera como se hace en
un lenguaje de tercera generación.
SQLWindows 63
4.4.1. Instrucciones del Lenguaje SAL
Set
Asigna a una variable (Local o Global) el resultado de una
expresión. La expresión puede ser una expresión aritmética que
involucre otras variables o incluso objetos.
Sintaxis: Set <variable> = <expresión>
Ejemplo: Set nAvance = 100 nPuntos / nTotal
Call
Involucra a una función interna Global, Interna Local, Externa o de
SAL.
Las funciones también pueden invocarse en forma implícita en una
expresión, cuando se desea utilizar el resultado para alguna
operación, como en:
Sintaxis: Call Funcion()
Ejemplo: Call SalSendMsg( pbSalir, PAM_Init, 0, 0 )
Set bResultado = SalNumberSin( nX )
If, Else If, Else.
SQLWindows 64
Permite colocar elementos de decisión.
Fig. 1 Fig. 2 Fig. 3If, Else .
S|intaxis:If < condición >
código 1Else
código 2
If, Else .
Sintaxis:If < condición 1>
código 1If < condición 2 >
código 2Else
código 3Else
código 2
If, Else If , Else .
Sintaxis:If < condición 1>
código 1Else If < condición 2 >
código 2Else If < condición 3 >
código 3Else
código 4
El control del código se hace por identación, no se necesitan llaves o
instrucciones tipo Begin-End (Fig. 1)
Las setencias pueden anidarse (Fig. 2).
La anidación de setencias If en ocasiones es díficil de leer, en ese caso
se puede usar la setencia Else If (Fig. 3).
Select case.
Esta instrucción permite ejecutar una acción dependiendo de un valor numérico.
Sintaxis:Select Case nNumero
Case 1código 1Break
Case 2código 2Break
SQLWindows 65
Defaultcódigo n
Se debe colocar una instrucción Break al final de cada código para
separar cada CASO, si se desea que ejecute las instrucciones del
siguiente Case, bastará con omitir el Break. Por ejemplo:
Select Case nOpción
Case 2
Case 3
Código a
Break
Case 4
Case 5
Código B
Break
Si nValor es 2 o 3 se ejecuta el código A, si vale 4 o 5 se ejecuta el
código B.
Loop y Break
La setencia Loop ejecuta el código en el siguiente nivel n veces hasta
encontrar una instrucción Break o Return.
SQLWindows 66
No evalúa expresiones ni incrementa valores en cada iteración en forma
automática.
Pueden colocarse varias instrucciones Break.
Ejemplo:
Set nIndice = 0
Loop
If nIndice > 6
Break
Call SalStrUpper( Dias[ nIndice ], Dias[ nIndice ] )
Set nIndice = nIndice + 1
While.
La setencia While es muy similar a Loop, sólo que no necesita una
sentencia Break, ya que evalúa la expresión hasta que esta sea FALSE, sin
embargo una instrucción Break o Return concluirá el ciclo en forma
inmediata.
Sintaxis:
While < condición >
Ejemplo:
Call SqlFetchNext( hSql, nErr ) While nErr != EOF
codigo 1 If < condición >
SQLWindows 67
Return nErr Call SqlFetchNext( hSql, nErr )
Return
La instrucción Return concluye el procesamiento de cualquier código
que atiende un mensaje o bien, el código de una opción de menú.
Regresa valor a la función que invocó o bien a SQLWindows.
Si el programa encuentra la instrucción Return, ignora las instrucciones
subsecuentes y regresa el control a donde se hizo el llamado.
Sintaxis:
Return
Ejemplo:
Set nIndice = nParametro
Set nResultado = nIndice
Loop
If nIndice < 0
Set bError = TRUE
Return
If nIndice > 6
Break
Set nIndice = nIndice + 1
Set nResultado = nResultado * nIndice
Set nResultado = nResultado / 2
Strings.
SQLWindows 68
Las cadenas en SQLWindows tienen una manipulación similar a la que
se usa en otros lenguajes para concatenar dos o más Strings se utiliza el
operador “║“ (doble barra), como en la fig. 1.
Fig. 1
Set sVariable1 = ‘El día ’
Set sVariable2 = ‘viernes ’
Set sVariable3 = ‘ se hará el evento. ’
Set nExp1 = sVariable1 || sVariable2 || sVariable3
Set nExp2 = sVariable1 || ‘sabado ’ || sVariable3
Existe un error en la fig. 2, pues el compilador interpretaría Imprenta
como un String, y el resto de la expresión causaría un error de compilación.
Para incluir un apóstrofe dentro de un String se utiliza la diagonal inversa
antes del apóstrofe o bien las dobles comillas para delimitar el inicio y el fin
del string.
Fig. 2
Set sTitulo = ‘ Imprenta ’ La Hacienda ’ ’ ! Marca Error
Solución: Usar \ antes de’
Set sTitulo = ‘ Imprenta \’ La Hacienda \’ ’
o bien usar “
Set sTitulo = “ Imprenta ’ La Hacienda ’ “
Si se dese incluir una diagonal inversa dentro del un string, se coloca
doble diagonal inversa como muestra la fig. 3.
Fig. 3
SQLWindows 69
El día viernes se hará el evento.El día sabado se hará el evento.
Set sLinea = ‘ \\***** Reporte Semanal *****\\ ’
sLinea -> \***** Reporte Semanal *****\
Operadores.
Se siguen los mismos criterios que en lenguaje C para resolución de
operaciones: primero las multiplicaciones y divisione, luego las sumas y
restas, se pueden utilizar paréntesis para hacer más clara la operación.
Los operadores de comparación pueden ser usados con datos de tipo
fecha, string o numéricos.
Operadores
Aritméticos
Adición: +
Resta: -
Multiplicación: *
División: /
Aritmética booleana
AND &
OR |
Lógicos
OR
AND
NOT
Comparación
Mayor que > Mayor o igual >=
Menor que < Menor o igual <=
SQLWindows 70
Igual = Diferente != <>
4.4.2. Funciones del Lenguaje SAL.
Adicionalmente al conjunto de instrucciones SAL, se cuenta con una
gran variedad de funciones para gran cantidad de propósitos: manipulación de
Fechas, comunicación entre aplicaciones por medio de DDE, funciones de
edición, manipulación de archivos, de formateo y validación, especiales para
List Box y Combo Box, manipulación de arreglos y números, impresión,
ejecutar operaciones SQL, manipulación de cadenas, conversión de datos,
manejo de ventanas, ect.
Ejemplo de algunas
funciones:
SalDisableWindow() Deshabilita un objeto.
SalEnableWindow() Habilita un objeto.
SalWaitCursor() Cambia el cursor de arena o viceversa.
SalDateYear() Proporciona el año de una variable del tipo fecha.
SalFileRead() Lee datos de un archivo.
4.4.2.1. Funciones internas.
SQLWindows 71
Las funciones son rutinas de uso general que tienen como propósito
efectuar una tarea y regresa uno o varios valores como resultado de su
operación, se declaran en la seccón Internal Functions.
Si la función va a regresar un valor, solamente se especifica el tipo
del valor de retorno.
Se pueden especificar n parámetros los cuales se utilizan como
variables locales, por default los parámetros no pueden modificarse
(paso por valor), en caso de necesitar regresar más de un valor se
deben definir dichos parámetros anteponiendo el tipo Receive (paso
por referencia).
La función puede tener sus propias variables (variables locales).
El código de la función utiliza el lenguaje SAL.
Ejemplo:
Internal Functions
Function: Promedio
Description: Calcula el promedio de n Números
Returns
Number:
Parameters
Number: nValores [ * ]
SQLWindows 72
Number: nCuantos
Static Variables
Local variables
Number: nIndice
Number: nResultado
Actions
Set nIndice = 0
Set nResultado = 0
While nIndice < nCuantos
Set nResultado = nResultado + nValores[ nIndice ]
Set nIndice = nIndice + 1
Set nResultado = nResultado / nCuantos
Return nResultado
Ejercicios.
A. Calculo del Factorial.
Desarrolle una aplicación que reciva un número y calcule el factorial del mismo.
1. Cree una aplicación nueva (sin las librerias de QuickObjects).
2. Agregue un Form Window, asignele el título Calculo del Factorial.
3. Agregue a la forma un Data Field, asignele el nombre dfDato, y asigne el tipo de
datos en Number.
4. Arriba del Data Field, coloque un Background Text con la leyenda Dato!
5. Agregue un Data Field, asignele el nombre dfResultado y asigne el tipo de datos
Number.
6. Arriba del Data Field, coloque un Background Text con la leyenda Resultado.
SQLWindows 73
7. Agregur un Pushbutton con nombre pbCalcular y título Calcular.
8. En la sección User de la sección Constants defina el mensaje PAM_Calcular
con el valor SAM_USER + 1.
9. En la sección Internal Functions de Global Declarations dree una función nueva
con nombre Factorial.
10. Defina el resultado como tipo Number.
11. Defina un parametro de tipo Number con nombre nNumero.
12. En el código de la función coloque el siguiente código.
If (nNumero<1)
Return 0
Else
Return Factorial(nNumero-1)
13. Localice la sección Message Actions del botón pbCalcular.
14. Agregue el siguiente código:
On SAM_Click
Call SalSendMsg( dfResultado, PAM_Calcular, 0, 0 )
15. En el Data Field dfCalcular coloque el siguiente código:
On PAM_Calcular
Set MyValue = Factorial( dfDato )
16. Corra la aplicación y pruebela.
B. Conversión de Grados Centigrados a Fahrenheith.
Desarrolle una aplicación que haga una conversión de grados Centígrados a grados
Fahrenheit y viceversa.
C = (ºF-32)* 5/9
F = ºC*9/5 + 32
Deberá definir tres funciones internas.
1. Cree una aplicación nueva (sin las librerias de QuickObjects).
2. Agregue un Form Window, asignele el título conversión.
3. Agregue a la forma un Data Field, asignele el nombre dfCentigrados, y asigne
el tipo de datos en Number.
4. Coloque arriba del Data Field un Background Text con la leyenda C.
5. Agregue un Data Field, asignele el nombre dfFahrenheit y asigne el tipo de datos
Number.
6. Coloque arriba del Data Field un Background Text con la leyenda F.
7. Agregue un Pushbutton con nombre pbCToF y tñitulo C -> F.
SQLWindows 74
8. Debajo del botón anterior agregue un Pushbutton con nombre pbFToC y título F
-> C.
9. En la sección User de la sección Constans defina el mensaje PAM_Convertir
con el valor SAM_User + 1.
10. En la sección Internal Functions de Global Declarations cree una función
nueva, con nombre CentigradosDeF.
11. Defina el resultado como tipo Number.
12. Defina el parametro del tipo Number con nombre nGradFar.
13. Agregue el siguiente código en la sección Actions.
Return (nGradFar-32)*5/9
14. Defina el resultado como tipo Number.
15. Defina el parametro del tipo Number con nombre nGradFar.
16. Agregue el siguiente código en la sección Actions.
Return (nGradFar-32)*5/9
17. Agregue otra función con nombre FahrenheitDeC.
18. Defina el resultado como tipo Number.
19. Defina un parametro del tipo Number con nombre nGradCen.
20. Agregue el siguiente código en la sección Actions:
Return( nGradCen * 9 / 5 - 32 )
21. Localice la sección Message Actions del botón pbCToF.
22. Agregue el siguiente código:
On SAM_Click
Call SalSendMsg( dfFaharenheit, PAM_Convertir, 0, 0 )
23. Localice la sección Message Actions del botón pbFToC.
24. Agregue el siguiente código:
On SAM_Click
Call SalSendMsg( dfCentigrados, PAM_Convertir, 0, 0 )
25. Localice el Data Field dfFahrenheit y agregue el siguiente código:
On PAM_Convertir
Set MyValue = dfFahrenheitDeC( dfCentigrados )
26. Localice el Data Field dfCentigrados y agregue el siguiente código:
On PAM_Convertir
Set MyValue = dfCentigradosDeF( dfFahrenheit )
27. Corra la aplicación y pruebela.
SQLWindows 75
4.5. Código Reusable.
Una propiedad muy importante de SQLWindows (también principio de
OOP) es que nos permite reutilizar código, es decir que el código diseñado
para un objeto pueda ser utilizado igual o con ligeras modificaciones en
objetos del mismo o similar tipo; para ello provee de variables de uso general
como es el caso de hWndForm y hWndItem:
hWndForm Se refiere a la ventana Padre (Top Level Window).
hWndItem Se refiere a la ventana actual (Padre o hijo).
Ejemplo:
Fig. 1
SQLWindows 76
En este caso hWndItem se refiere a pbConsulta y hWndForm se
refiere a la ventana que contiene a pbConsulta.
Ejemplo:
Fig. 2
En este caso hWndForm se refiere a frmMain, si se usara
hWndItem también se referiría a frmMain, ya que el objeto actual
es la ventana padre.
SQLWindows 77
Utilizando las variables hWndItem y hWndForm, se puede usar el
mismo código en diferentes objetos, por ejemplo considere los pasos
necesarios para habilitar y deshabilitar los botones ejemplificados en la Fig. 1.
Ejercicio.
1. Cargue la aplicación de captura de Clientes.
2. Agregue los mensajes necesarios para habilitar y deshabilitar los botones, en
la sección Constans en User de Global Declarations:
Number : PAM_Activa = SAM_User + 1
Number : PAM_Desactiva = SAM_User + 2
3. Agregue el código para que al inicio los botones estén encendidos/apagados
según sea el caso, esto es en la sección de Message Actions de cada botón
incluya la atención a los mensajes de PAM_Activa y PAM_Desactiva, con
su respectivo código ya visto con anterioridad. Y también agregue a cada
botón la atención al mensaje de SAM_Create, donde al crearse el propio
objeto haremos que se mande a el mismo activar o desactiva,
respectivamente para cada uno según sea el caso.
4. Entonces en el caso de los botones pbConsulta, pbAyuda y pbSalir el código
en el mensaje SAM_Create será el siguiente:
Message Actions
On SAM_Create
SQLWindows 78
Call SalPostMsg( hWndItem, PAM_Activa, 0, 0)
5. y en el caso de los botones pbPrimero, pbAnterior, pbSiguiente, pbUltimo,
pbSuma, pbResta, pbCambio, pbBorra y pbImprime en código en el
mensaje SAM_Create será el siguiente:
Message Actions
On SAM_Create
Call SalPostMsg( hWndItem, PAM_Desactiva, 0, 0)
Nota: Recuerde, no dibuje lo que pueda copiar, no copie lo que pueda calcar, no calque
lo que pueda recortar y pegar.
4.6. Asociación de Acciones a Menús.
Las opciones del menú estan ligadas a los botones del tool bar, es decir
si el botón de consultas está habilitada el botón de consultas deberá estar
deshabilitado y así sucesivamente.
Para habilitar/deshabilitar las opciones, se usará la función
SalisWindowEnabled() (¿Esta habilitada la ventana?), la cual recibe el
Handle del objeto y regresa un valor TRUE si el objeto está habilitado, y
False en caso contrario.
En la sección Menu Actions se enviará el mensaje SAM_Click al
botón correspondiente:
SQLWindows 79
Ejercicio.
Implemente el código anterior y pruebe todas las opciones del menú.
En la sección de Menu de la forma frmMain abra los MenuItems de
cada opción del menú y agregue en su respectiva sección Menu
Settings de cada uno lo siguiente:
Menu Actions
Enable when : SalIsWindowEnable( pb...)
El prefijo (pb...) indica que en ese lugar va el nombre del botón al cual
va a estar asociada esta opción del menú.
Y en la sección de Menu Actions de cada botón el siguiente código:
Menu Actions
Call SalSendMsg( pb..., SAM_Click, 0, 0 )
Para el botón de salir llame a la funcón SalQuit( ) en la sección de
Menu Actions.
SQLWindows 80
4.7. Creación de Ventanas.
Como se comentó al inicio, la operación de una ventana tiene tres
modalidades.
Modal Bloque todas las ventanas de la aplicación, todo el
procesamiento se centra en la ventana Modal, y
no se restablece hasta cerrar la ventana.
System Modal Bloque todas las ventanas de Windows, todo el
procesamiento se centra en la ventana System
Modal, y no se restablece hasta cerrar la ventana.
Modeless Permite cambiar de ventana de trabajo en forma
indistinta.
SQLWindows 81
En SQLWindows las ventanas Form Window y Table Window son
Modeless (no modales), y puede definirse que se creen automáticamente al
tiempo de inicio de ejecución, o también se pueden crear según se requiera.
Las ventanas Dialog Box pueden ser configurados en cualquiera de las
tres formas, para ello se debe modificar la propiedad de Type of Dialog como
se muestra en la figura.
Recuerde que el código contiene la plantilla de la ventana, para crear la
ventana se debe invocar la función correspondiente.
Tipo de Ventana Acción Función
Modal / System
Modal
Crear
Cerrar
SalModalDialog()
SalEndDialog()
Modeless Crear SalCreateWindow()
SQLWindows 82
Cerrar SalDestroyWindow()
4.7.1. Manejo de Ventanas
Al crear una ventana el MSWindows establece un valor de manejo único
para ese objeto.
El valor de manejo se usa para accesar dicha ventana.
El valor de manejo de la ventana permanece durante toda la existencia de
esa ventana.
El “manejo de ventana” es un valor WORD (rango: 0 to 64K-1)
Los nombres de formatos pueden ser usados como parámetros de funciones
que requieren un parámetro del tipo “manejo de ventana”
4.7.2. Variables de Manejo de Ventana
hWndNULL Un NULL (cero) de manejo de ventana; usando para
pasar, o revisar para, un número de manejo de ventana
NULL.
HWndForm El “manejo de ventana” padre activa
SQLWindows 83
hWndItem El item que tiene el foco, o que está recibiendo el
mensaje en ese momento
hWndMDI El “manejo de ventana” para el MDI padre activo
Ejemplo: Prototipo de Función: bOk = SalDisableWindow (Window_Handle)
Campo de Datos: dfField
Acciones de Mensaje
On SAM_Create
Call SalDisableWindow( dfField ) !impida entrada en
campo
Call SalDisableWindow( hWndItem ) !equivalenta
recomendado
Ejercicio:
Cree una ventana “Acerca de ...”, prográmela y pruébela, como se
muestra en la siguiente imagen:
Agregue el siguiente código para la llamada de la ventana:
SQLWindows 84
Cuando el botón de Ok recibe un Click, debe cerrar la ventana “Acerca
de ...”
En el Tool Box oprima el botón que dice Dialog o desde el
Customizer haga doble click en la opción de Dialog Box.
Ahora haga click derecho sobre el nuevo Dialog Box y el de la
propiedad de Type of Dialog elija Modal (si es que no está elejida).
Ahorra configure a su gusto esta ventana, pongale un nombre
(digAbout), un título,etc.
Agregele algun Background Text como “Sistema para el Control de
Producción”.
Ahora agregue un botón (pbOk) para cerrar esta ventana que diga
OK, y agreguele el siguiente código en la sección de Message
Actions de dicho botón lo siguiente:
On SAM_Click
SalEndDialog()
SQLWindows 85
Lo que hara cuando el usuario oprimael botón OK el Dialog Box se
cerrará.
Ahora asocie esta ventana a la opción del menú About, con el código
de la página anterior ya visto.
Modifique la forma de la ventana “Acerca de...” a no modal, y pruebela,
¿ Puede crear varias ventanas “Acerca de...” ?.
Evaluación del capítulo 4.
1. Para asignar un valor a una variable se utiliza la instrucción _______________.
2. Una función se puede invocar con una instrucción _______________ o bien en
forma implícita en una expresión.
3. En la instrucción If, el control del código a ejecutar lo determina la
______________________ de las instrucciones.
4. Una instrucción Loop requiere de una instrucción
__________________________ para concluir el ciclo.
5. A diferencia de la instrucción Loop la instrucción __________________ evalúa
una expresión para determinar el fin del ciclo.
6. Los valores que recibe una función se definen en la sección
___________________________________ de la función.
7. Mediante el uso de las variables internas _____________ y _____________ es
factible hacer código que puede ser utilizado en más de un objeto.
8. La función ________________________________ recibe un Window Handle y
regresa TRUE en caso de que el objeto esté habilitado.
9. La función ___________________________ se utiliza para crear una ventana
Modal.
SQLWindows 86
10. La función _________________________ se utiliza para crear una ventana
System Modal.
11. Para concluir la operación de una ventana No Modal se utiliza la función
______________.
12. Las ventanas se crean Modales o No Modales con sólo cambiar la función
que las crea.
Cierto Falso
13. Cuando una ventana es No Modal sólo se puede crear una ventana a la vez.
Cierto Falso
4. CARACTERISTICAS DE LA PROGRAMACIÓN EN SQLWINDOWS.
4.1. Variables.4.1.1. Variables de SQLWindows4.1.2. Calificación de Variables.
4.2. Arreglos.4.2.1. Arreglos Unidimensionales.4.2.2. Arreglos Multidimensionales.
4.3. Constantes.4.3.1. Constantes Predefinidas
4.4. Lenguaje SAL.4.4.1. Instrucciones del Lenguaje SAL4.4.2. Funciones del Lenguaje SAL.
4.5. Código Reusable.
4.6. Asociación de Acciones a Menús.
4.7. Creación de Ventanas.4.7.1. Manejo de Ventanas4.7.2. Variables de Manejo de Ventana
SQLWindows 87