Beruflich Dokumente
Kultur Dokumente
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 seccin Window Variables de las ventanas. Se recomienda seguir usando la notacin para asignacin de nombres: Prefijo en minsculas. Primera letra de cada palabra en myscula.
SQLWindows
53
Los tipos de datos Handle (manija) son tipos especiales para identificar un archivo, una conexin SQL o una ventana segn sea el caso; no son variables con las que se pueden hacer operaciones ya que su funcin es slo de identificador, se utilizan cuando se hace uso de ciertas funciones.
Tipo de Dato Menejo de Ventana Manejo Ventana Manejo Ventana Manejo Ventana Nmero <ref.item corriente> Boolean - cuando es puesto en TRUE, los objetos pasivos no son pintados en el formulario, sino que creados como objetos de window. Nmero Arreglos de Secuencias (String)
NargCount StrArgArry[*]
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 dimensin uno.
4.2.1. Arreglos Unidimensionales. Arreglos Unidimensionales Estticos. Si se conoce el nmero mximo de nmeros de elementos que un arreglo puede contener, especfique el nmero entre corchetes [ ], al momento de declararlo: Arreglos Unidimensionales Dinmicos. Si no se puede predecir el nmero mximo de elementos contenidos en un arreglo, se deber utilizar un asterisco (*) en lugar de un nmero fijo de elementos, esto le indica a SQLWindows que es un arreglo dinmico. Arreglos Unidimensionales Estaticos. Variables String String : sArchivo : sPais
SQLWindows
56
Arreglos Unidimensionales Dinamicos. Variables String String : sEmpleados [4] : sDeptos [4]
En el primer ejemplo sPais y nValores son arreglos (vectores) fijos de 1 dimensin, el primer elemento 0 y el ltimo n-1. En el segundo ejemplo sEmpleados y sDeptos son de tamao 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. Asignacin de rangos en Arreglos Unidimensionales. Variables String Variables String : sEmpleados [1:*]
Nota: Este arreglo es dinmico (1-n), no se especifica la posicin cero.
: sEmpleados [1:10]
Nota: Este arreglo consta de diez elementos (1-10), no se utiliza la posicin cero.
Por omisin, 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.
Arreglos Multidimensionales Estaticos. Arreglos Multidimensionales Dinmicos
Variables
SQLWindows
Variables
57
Para declarar un arreglo multidimensional estatico basta con especificar el nmero de elementos de la segunda y subsecuentes dimensiones despus del nmero de la primera dimensin. Se debe de separar cada dimensin por medio de coma. En el tipo de arreglo multidimensional dinmico slo se puede especificar la primer dimensin dinmica. Asignacin de rangos en Arreglos Multidimensionales. Variables String : sEmpleados [1:10 , 1:3]
Nota: Este arreglo presenta en la primera dimensin diez elementos (1-10), sin declarar posicin cero y tres elementos en la segunda dimensin.
Se pueden controlar los limites de los elementos para cualquier dimensin, incluso si la primera dimensin es dinmica.
SQLWindows
58
Ejercicio. 1. Identifique los tipos de variables de acuerdo a la nomenclatura. sTitulo bFin HWndPadre _____________ nMaximo _____________ nSqlMain _____________ _____________ _____________
SQLWindows
59
3. Declare un arreglo unidimensional de 50 elementos del tipo String con un lmite inferior 1. 4. Declare un arreglo dinmico 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 dimensin sea dinmica y las subsecuentes sean de 10 y 20 respectivamente. en todos los casos el lmite inferior de las dimensiones deber de ser 1.
4.3. Constantes.
Para definir constantes de usuario se utiliza la seccin Constans de la seccin Global Declaration. No existe una nomenclatura en especial, salvo el uso extensivo de Maysculas.
Variables
System
User
Number: PAM_Activa
SQLWindows
= SAM_User + 1
60
Ejercicio. 1. Abra una nueva aplicacin SQLWindows. 2. Defina varias constantes en la aplicacin. 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 parmetros llevan valores restringidos, un ejemplo es la funcin: SalMessageBox( sContenido, sTitulo, nOpciones )
Donde nOpciones es una constante o combinacin de constantes apropiadas. Para combinarlas se utiliza el operador (barra vertical),
SQLWindows
62
Ejemplo:
Call SalMessageBox( ' Error en la aplicacin ', 'Altas, MB_IconStop MB_RetryCancel)
Las opciones pueden tener una combinacin de valores, algunos de ellos son: MB_IconAsterisk MB_IconHand MB_Ok MB_OkCancel MB_IconExclamation MB_RetryCancel MB_IconQuestion MB_YesNo MB_IconStop MB_YesNoCancel MB_AbortRetryIgnore
Para agregar cdigo a la aplicacin 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 generacin.
SQLWindows
63
Asigna a una variable (Local o Global) el resultado de una expresin. La expresin puede ser una expresin aritmtica que involucre otras variables o incluso objetos. Sintaxis: Ejemplo: Set <variable> = <expresin> Set nAvance = 100 nPuntos / nTotal
Call
Las funciones tambin pueden invocarse en forma implcita en una expresin, cuando se desea utilizar el resultado para alguna operacin, como en: Sintaxis: Ejemplo: Call Funcion() Call SalSendMsg( pbSalir, PAM_Init, 0, 0 ) Set bResultado = SalNumberSin( nX )
SQLWindows
El control del cdigo se hace por identacin, no se necesitan llaves o instrucciones tipo Begin-End (Fig. 1) Las setencias pueden anidarse (Fig. 2). La anidacin de setencias If en ocasiones es dficil de leer, en ese caso se puede usar la setencia Else If (Fig. 3).
Select case. Esta instruccin permite ejecutar una accin dependiendo de un valor numrico.
Sintaxis: Select Case nNumero Case 1 cdigo 1 Break Case 2 cdigo 2 Break Default cdigo n
Se debe colocar una instruccin Break al final de cada cdigo para separar cada CASO, si se desea que ejecute las instrucciones del siguiente Case, bastar con omitir el Break. Por ejemplo:
65
SQLWindows
Select Case nOpcin Case 2 Case 3 Cdigo a Break Case 4 Case 5 Cdigo B Break Si nValor es 2 o 3 se ejecuta el cdigo A, si vale 4 o 5 se ejecuta el cdigo B.
Loop y Break
La setencia Loop ejecuta el cdigo en el siguiente nivel n veces hasta encontrar una instruccin Break o Return. No evala expresiones ni incrementa valores en cada iteracin en forma automtica. Pueden colocarse varias instrucciones Break. Ejemplo: Set nIndice = 0
SQLWindows 66
Loop If nIndice > 6 Break Call SalStrUpper( Dias[ nIndice ], Dias[ nIndice ] ) Set nIndice = nIndice + 1
While. La setencia While es muy similar a Loop, slo que no necesita una sentencia Break, ya que evala la expresin hasta que esta sea FALSE, sin embargo una instruccin Break o Return concluir el ciclo en forma inmediata. Sintaxis: While < condicin > Ejemplo: Call SqlFetchNext( hSql, nErr ) While nErr != EOF codigo 1 If < condicin > Return nErr Call SqlFetchNext( hSql, nErr ) Return La instruccin Return concluye el procesamiento de cualquier cdigo que atiende un mensaje o bien, el cdigo de una opcin de men. Regresa valor a la funcin que invoc o bien a SQLWindows.
SQLWindows 67
Si el programa encuentra la instruccin 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. Las cadenas en SQLWindows tienen una manipulacin similar a la que se usa en otros lenguajes para concatenar dos o ms Strings se utiliza el operador (doble barra), como en la fig. 1.
Fig. 1 Set sVariable1 = El da Set sVariable2 = viernes Set sVariable3 = se har el evento. Set nExp1 = sVariable1 || sVariable2 || sVariable3 Set nExp2 = sVariable1 || sabado || sVariable3
SQLWindows
68
Existe un error en la fig. 2, pues el compilador interpretara Imprenta como un String, y el resto de la expresin causara un error de compilacin. Para incluir un apstrofe dentro de un String se utiliza la diagonal inversa antes del apstrofe o bien las dobles comillas para delimitar el inicio y el fin del string.
Fig. 2 Set sTitulo = Imprenta La Hacienda ! Marca Error Solucin: 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 Set sLinea = \\***** Reporte Semanal *****\\ sLinea -> \***** Reporte Semanal *****\
Operadores. Se siguen los mismos criterios que en lenguaje C para resolucin de operaciones: primero las multiplicaciones y divisione, luego las sumas y restas, se pueden utilizar parntesis para hacer ms clara la operacin. Los operadores de comparacin pueden ser usados con datos de tipo fecha, string o numricos.
Operadores
SQLWindows 69
Aritmticos Adicin: + Resta: Multiplicacin: * Divisin: / Aritmtica booleana AND & OR | Lgicos OR AND NOT Comparacin Mayor que > Mayor o igual >= Menor que < Menor o igual <= 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 propsitos: manipulacin de Fechas, comunicacin entre aplicaciones por medio de DDE, funciones de edicin, manipulacin de archivos, de formateo y validacin, especiales para List Box y Combo Box, manipulacin de arreglos y nmeros, impresin, ejecutar operaciones SQL, manipulacin de cadenas, conversin de datos, manejo de ventanas, ect. Ejemplo de algunas funciones: SalDisableWindow() SalEnableWindow() SalWaitCursor() SalDateYear() SalFileRead()
SQLWindows
Deshabilita un objeto. Habilita un objeto. Cambia el cursor de arena o viceversa. Proporciona el ao de una variable del tipo fecha. Lee datos de un archivo.
70
4.4.2.1.
Funciones internas.
Las funciones son rutinas de uso general que tienen como propsito efectuar una tarea y regresa uno o varios valores como resultado de su operacin, se declaran en la seccn Internal Functions. Si la funcin va a regresar un valor, solamente se especifica el tipo del valor de retorno.
Se pueden especificar n parmetros los cuales se utilizan como variables locales, por default los parmetros no pueden modificarse (paso por valor), en caso de necesitar regresar ms de un valor se deben definir dichos parmetros anteponiendo el tipo Receive (paso por referencia).
Ejemplo:
Internal Functions
Function: Promedio
Description: Calcula el promedio de n Nmeros
SQLWindows 71
Returns
Number: Parameters Number: nValores [ * ] 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
En la seccin Internal Functions de Global Declarations dree una funcin nueva con nombre Factorial. 10. Defina el resultado como tipo Number. 11. Defina un parametro de tipo Number con nombre nNumero. 12. En el cdigo de la funcin coloque el siguiente cdigo. If (nNumero<1) Return 0 Else Return Factorial(nNumero-1) 13. Localice la seccin Message Actions del botn pbCalcular. 14. Agregue el siguiente cdigo: On SAM_Click Call SalSendMsg( dfResultado, PAM_Calcular, 0, 0 ) 15. En el Data Field dfCalcular coloque el siguiente cdigo: On PAM_Calcular Set MyValue = Factorial( dfDato ) 16. Corra la aplicacin y pruebela.
9.
SQLWindows
En la seccin Internal Functions de Global Declarations cree una funcin 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 cdigo en la seccin 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 cdigo en la seccin Actions. Return (nGradFar-32)*5/9 17. Agregue otra funcin con nombre FahrenheitDeC. 18. Defina el resultado como tipo Number. 19. Defina un parametro del tipo Number con nombre nGradCen. 20. Agregue el siguiente cdigo en la seccin Actions: Return( nGradCen * 9 / 5 - 32 ) 21. Localice la seccin Message Actions del botn pbCToF. 22. Agregue el siguiente cdigo: On SAM_Click Call SalSendMsg( dfFaharenheit, PAM_Convertir, 0, 0 ) 23. Localice la seccin Message Actions del botn pbFToC. 24. Agregue el siguiente cdigo: On SAM_Click Call SalSendMsg( dfCentigrados, PAM_Convertir, 0, 0 ) 25. Localice el Data Field dfFahrenheit y agregue el siguiente cdigo: On PAM_Convertir Set MyValue = dfFahrenheitDeC( dfCentigrados ) 26. Localice el Data Field dfCentigrados y agregue el siguiente cdigo: On PAM_Convertir Set MyValue = dfCentigradosDeF( dfFahrenheit ) 27. Corra la aplicacin y pruebela.
10.
SQLWindows
74
hWndForm hWndItem
Se refiere a la ventana Padre (Top Level Window). Se refiere a la ventana actual (Padre o hijo).
Ejemplo: Fig. 1
SQLWindows
75
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 tambin se referira a frmMain, ya que el objeto actual es la ventana padre.
SQLWindows
76
Utilizando las variables hWndItem y hWndForm, se puede usar el mismo cdigo en diferentes objetos, por ejemplo considere los pasos necesarios para habilitar y deshabilitar los botones ejemplificados en la Fig. 1.
Ejercicio.
1. Cargue la aplicacin de captura de Clientes.
2.
Agregue los mensajes necesarios para habilitar y deshabilitar los botones, en la seccin Constans en User de Global Declarations: = SAM_User + 1 para que al inicio los botones estn
Number : PAM_Activa
3.
Number : PAM_Desactiva = SAM_User + 2 Agregue el cdigo encendidos/apagados segn sea el caso, esto es en la seccin de Message Actions de cada botn incluya la atencin a los mensajes de PAM_Activa y PAM_Desactiva, con su respectivo cdigo ya visto con anterioridad. Y tambin agregue a cada botn la atencin 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 segn sea el caso. 4. Entonces en el caso de los botones pbConsulta, pbAyuda y pbSalir el cdigo en el mensaje SAM_Create ser el siguiente: Message Actions On SAM_Create Call SalPostMsg( hWndItem, PAM_Activa, 0, 0)
SQLWindows 77
5. y en el caso de los botones pbPrimero, pbAnterior, pbSiguiente, pbUltimo, pbSuma, pbResta, pbCambio, pbBorra y pbImprime en cdigo 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
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 seccin Menu Actions se enviar el mensaje SAM_Click al botn correspondiente:
SQLWindows
78
Ejercicio. Implemente el cdigo anterior y pruebe todas las opciones del men.
En la seccin de Menu de la forma frmMain abra los MenuItems de cada opcin del men y agregue en su respectiva seccin 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 botn al cual va a estar asociada esta opcin del men.
Y en la seccin de Menu Actions de cada botn el siguiente cdigo: Call SalSendMsg( pb..., SAM_Click, 0, 0 )
Menu Actions
SQLWindows
Modal
Bloque todas las ventanas de la aplicacin, todo el procesamiento se centra en la ventana Modal, y no se restablece hasta cerrar la ventana. Bloque todas las ventanas de Windows, todo el procesamiento se centra en la ventana System Modal, y no se restablece hasta cerrar la ventana. Permite cambiar de ventana de trabajo en forma indistinta.
System Modal
Modeless
SQLWindows
80
En SQLWindows las ventanas Form Window y Table Window son Modeless (no modales), y puede definirse que se creen automticamente al tiempo de inicio de ejecucin, o tambin se pueden crear segn 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 cdigo contiene la plantilla de la ventana, para crear la ventana se debe invocar la funcin correspondiente. Tipo de Ventana Modal / System Modal Modeless Accin Crear Cerrar Crear Cerrar Funcin SalModalDialog() SalEndDialog() SalCreateWindow() SalDestroyWindow()
SQLWindows
81
4.7.1. Manejo de Ventanas Al crear una ventana el MSWindows establece un valor de manejo El valor de manejo se usa para accesar dicha ventana. El valor de manejo de la ventana permanece durante toda la existencia El manejo de ventana es un valor WORD (rango: 0 to 64K-1) Los nombres de formatos pueden ser usados como parmetros de
de esa ventana.
hWndNULL
Un NULL (cero) de manejo de ventana; usando para pasar, o revisar para, un nmero de manejo de ventana NULL. El manejo de ventana padre activa El item que tiene el foco, o que est recibiendo el mensaje en ese momento El manejo de ventana para el MDI padre activo
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 ..., progrmela y prubela, como se muestra en la siguiente imagen:
SQLWindows
83
En el Tool Box oprima el botn que dice Dialog o desde el Customizer haga doble click en la opcin 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).
Ahora agregue un botn (pbOk) para cerrar esta ventana que diga OK, y agreguele el siguiente cdigo en la seccin de Message Actions de dicho botn lo siguiente: On SAM_Click SalEndDialog()
SQLWindows
84
Lo que hara cuando el usuario oprimael botn OK el Dialog Box se cerrar. Ahora asocie esta ventana a la opcin del men About, con el cdigo de la pgina anterior ya visto.
Modifique la forma de la ventana Acerca de... a no modal, y pruebela, Puede crear varias ventanas Acerca de... ?.
En la instruccin If, el control del cdigo a ejecutar lo determina la ______________________ de las instrucciones. Una instruccin Loop requiere de una instruccin
4.
A diferencia de la instruccin Loop la instruccin __________________ evala una expresin para determinar el fin del ciclo. valores que recibe una funcin se definen en la seccin
6. Los
___________________________________ de la funcin. 7. Mediante el uso de las variables internas _____________ y _____________ es factible hacer cdigo que puede ser utilizado en ms de un objeto.
8.
La funcin ________________________________ recibe un Window Handle y regresa TRUE en caso de que el objeto est habilitado. La funcin ___________________________ se utiliza para crear una ventana Modal. La funcin _________________________ se utiliza para crear una ventana System Modal.
9.
10.
SQLWindows
85
Para concluir la operacin de una ventana No Modal se utiliza la funcin Las ventanas se crean Modales o No Modales con slo cambiar la funcin Falso Cuando una ventana es No Modal slo se puede crear una ventana a la vez. Falso
SQLWindows
86