Manuales Originales Centura Builder

49
4. Caracteristicas de la Programación en SQLWindows. 4.1. Variables. Prefijos y Tipos de Variables. Tipos de Datos Pref ijo 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. SQLWindows 53

Transcript of Manuales Originales Centura Builder

Page 1: Manuales Originales Centura Builder

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

Page 2: Manuales Originales Centura Builder

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

Page 3: Manuales Originales Centura Builder

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

Page 4: Manuales Originales Centura Builder

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

Page 5: Manuales Originales Centura Builder

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

Page 6: Manuales Originales Centura Builder

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

Page 7: Manuales Originales Centura Builder

Ejercicio.

1. Identifique los tipos de variables de acuerdo a la nomenclatura.

sTitulo _____________ nMaximo _____________

bFin _____________ nSqlMain _____________

HWndPadre _____________

SQLWindows 59

Page 8: Manuales Originales Centura Builder

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

Page 9: Manuales Originales Centura Builder

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

Page 10: Manuales Originales Centura Builder

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

Page 11: Manuales Originales Centura Builder

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

Page 12: Manuales Originales Centura Builder

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

Page 13: Manuales Originales Centura Builder

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

Page 14: Manuales Originales Centura Builder

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

Page 15: Manuales Originales Centura Builder

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

Page 16: Manuales Originales Centura Builder

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

Page 17: Manuales Originales Centura Builder

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.

Page 18: Manuales Originales Centura Builder

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

Page 19: Manuales Originales Centura Builder

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

Page 20: Manuales Originales Centura Builder

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

Page 21: Manuales Originales Centura Builder

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

Page 22: Manuales Originales Centura Builder

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

Page 23: Manuales Originales Centura Builder

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

Page 24: Manuales Originales Centura Builder

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

Page 25: Manuales Originales Centura Builder

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

Page 26: Manuales Originales Centura Builder

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

Page 27: Manuales Originales Centura Builder

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

Page 28: Manuales Originales Centura Builder

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

Page 29: Manuales Originales Centura Builder

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

Page 30: Manuales Originales Centura Builder

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

Page 31: Manuales Originales Centura Builder

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

Page 32: Manuales Originales Centura Builder

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

Page 33: Manuales Originales Centura Builder

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

Page 34: Manuales Originales Centura Builder

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

Page 35: Manuales Originales Centura Builder

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