Está en la página 1de 16

44.

Ddee llaa CCaarraacctteerriissttiiccaass PPrrooggrraammaacciióónn


SSQQLLWWiinnddoowwss eenn..
44..11.. VVaarriiaabblleess..
Prefijos y tipos de variables.
EeDD TTiippoossdd aattooss PPrreeffiijjoo UUssoo BBoooolleeaann b Valor lógico
(TRUE/FALSE ).
DDaattee//dt TTiimmee Fecha / Hora.
FFiillee HHaannddllee fh Manija de nueve meses.
Ls SSttrriinngg LLoonngg Cadena de caracteres mayores a 255.
N NNuummbbeerr Numérico.
SSQQLL HHaannddllee hSql Manija para conexiones SQL.
SSttrriinngg s Cadena de caracteres menor o igual a 255.
Manija WWiinnddooww HHaannddllee hWnd de Ventanas.
Al igual que en los lenguajes tradicionales, se recurre al uso de
variables para almacenamiento de valores, estas variables pueden ser:
 GGlloobbaalleess seccionGGlloobbaall DDeeccllaarraattiioonnss definidas en los
ángeles.
 LLooccaalleess definidas en la secciónWWiinnddooww VVaarriiaabblleessde las
ventanas.
Se recomienda seguir usando la notación para asignación de nombres:
Prefijo en minúsculas.
La primera letra de cada palabra en myúscula.
SQLWindows 53

Los tipos de datos HHaannddllee (manija) son tipos especiales para identificar
un archivo, anu conexión SSQQLL o anu ventana mar según 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.
44..11..11.. Ddee VVaarriiaabblleess SSQQLLWWiinnddoowwss
VVaarriiaabbllee Tipod eD ato ato
Menejo HHWWnnddNNUULLLL TipoD variable de ventana SqlDatabase Secuencia
HHWWnnddFFoorrmm ManejoV entana SqlUser Secuencia
Secuencia SqlPassword HHWWnnddIItteemm Ventana Manejo
Manejo HHWWnnddMMDDII Ventana SqlNoRecovery
WWppaarraamm Boolean Número Número SqllnMessage
MMyyVVaalluuee <ref.item corriente>
Boolean BBssttaattiiccssAAssWWiinnddoowwss - cuando es
puesto en true, los objetos pasivos ningún hijo pintados en el formulario, sino que
creados como objetos de ventana.
Número NNaarrggCCoouunntt
SSttrrAArrggAArrrryy[[**] Arreglos de secuencias
("String")
44..11..22.. Ddee CCaalliiffiiccaacciióónn VVaarriiaabblleess..
RReeffeerreenncciiaa SSiimmppllee:
<variable/objeto_nombre>Ejemplo: set = SalDateCurrent dfDate()

RReeffeerreenncciiaa CCaalliiffiiccaaddaa SQLWindows 54:


<nom. De formato_nombre><variable/objeto_nom>Ejemplo: SetfrmMain.dfDate =()
RReeffeerr SalDateCurrent elified"): eenncciiaass CCaalliiffiiccaaddaass eenn ssuu
TToottaalliiddaadd(o "Ventana-qu <padre_ventana_mabejo><variable-/objeto_nom>
Ejemplo: SethWnd.dfDate = SalDateCurrent()
(o... Set.frmMain.dfDate hWnd = SalDateCurrent())
SQLWindows 55

44..22.. AArrrreeggllooss..
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.
44..22..11.. AArrrreeggllooss UUnniiddiimmeennssiioonnaalleess..
AArrrreeggllooss UUnniiddiimmeennssiioonnaalleess EEssttááttiiccooss..
Si se conoce el número máximo de números de elementos que puede contener un
arreglo, específique el número entre corchetes [ ], al momento de declararlo:
AArrrreeggllooss UUnniiddiimmeennssiioonnaalleess DDiinnáámmiiccooss..
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 una cola SQLWindows es un arreglo dinámico.

AArrrreeggllooss UUnniiddiimmeennssiioonnaalleess EEssttaattiiccooss..


Las variables
String :   sArchivo
 String : sPais
 número : nMaximo
 número : nValores [4]
SQLWindows 56

AArrrreeggllooss UUnniiddiimmeennssiioonnaalleess DDiinnaammiiccooss..


Las variables
String :   sEmpleados [4]
 String : sDeptos [4]

arreglos (vectores) fijos de 1 dim En pri ensiel ón, Elmer ej primeemplo r elem
ento ssPPaaiiss 0 s s nnVVaalloorreess el último hijo n-1.
En el segundo ejemplo ssEEmmpplleeaaddooss y ssDDeeppttooss hijo de tamaño
variables,
el primer elemento es el 0, pero el último depende de los elementos que se
almacenen en los arreglos.
44..22..22.. AArrrreeggllooss MMuullttiiddiimmeennssiioonnaalleess..

Ddee AAssiiggnnaacciióónn rraannggooss AArrrreeggllooss


UUnniiddiimmeennssiioonnaalleess eenn..
Las variables
String :   sEmpleados [1:10]
NNoottaa: Este arreglo consta de diez elementos (1-10), no se utiliza la posición
cero.
Las variables
String :   sEmpleados [1:*]
NNoottaa: Este arreglo es dinámico (1-n), no se especifica la posición cero.
Por omisión, se referencia al elemento primario de un arreglo con el
índice cero. Para controlar como referenciar al elemento primario de arreglo de la
ONU, se deben especificar los límites inferiores y superiores separados por dos
puntos.
Arreglos multidimensionales estaticos. Arreglos multidimensionales Dinámicos
 Variables Variables 
SQLWindows 57

 String : sEmpleados [10300]  String : sEmpleados [*,3]


NNoottaa: El arreglos presenta diez elementos en su NNoottaa: Este arreglo es
dinámico en la primera primera dimensión (0-9) y sólo tres en la segunda dimensión
(0-n) y tres elementos en la segunda dimensión (0-2). La dimensión (0-2).
Para declarar un arreglo estatico multidimensional basta con especificar
el número de elemento del número de la prime ra de la segunda dimensión. S e debe y
subsecuentes de separadimensiones d r cañada dimensiespués ón por medio de coma.
Es el tipo de arreglo multidimensional dinámico sólo se puede
especificar la dimensión dinámica de la imprimación.

Ddee AAssiiggnnaacciióónn rraannggooss AArrrreeggllooss


MMuullttiiddiimmeennssiioonnaalleess eenn..
Las variables
String :   sEmpleados [1:10 ; 1:3]
NNoottaa: 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.
Las variables
String :   sEmpleados [1:* , 1:3 , 1:10 ]
NNoottaa: 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

EEjjeerrcciicciioo.
1. Identifique los tipos de variables de acuerdo a la nomenclatura.
sTitulo _____________ nMaximo _____________ bFin _____________ nSqlMain
_____________ HWndPadre _____________
2. Declarar un arreglo unidimensional de 10 elementos del tipo Número.
SQLWindows 59

3. Declarar un arreglo unidimensional de 50 elementos del tipo cadena con un límite


inferior de 1.
4. Declarar un arreglo dinámico de tipo Boolean.
5. glo que representanuna anu matriz de 10x20 iniciando sus índices declarar a
partir el arre de 1.
6. Declarar un arreglo multidimensional de orden 3, cuya primera dimensión dinámica
del mar y las subsecuentes sean de 10 y 20 respectivamente. En todos los casos el
límite inferior de las dimensiones deberá de ser 1.
44..33.. CCoonnssttaanntteess..
Para definir constantes de usuario se utiliza la sección de la
sección GGlloobbaall CCoonnssttaannss DDeeccllaarraattiioonn.

No existe una nomenclatura en especial, salvo el uso extensivo de


mayúsculas.
Variables de
sistema  

 Usuario Número: PAM_Activa = SAM_Usuario + 1
60

 SQLWindows Número: PAM_Desactiva = SAM_Usuario + 2


 Cadena: MsgError = 'Error en la aplicación
EEjjeerrcciicciioo'.
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

44..33..11.. CCoonnssttaanntteess PPrreeddeeffiinniiddaass


existen en el lenguaje SQLWindows previamentes muchas constantes
definidas, estás se utilizan en el llamado a ciertas funciones llevan parámetros
cuyos valores restringidos, un ejemplo es la función:
(( SSaallMMeessssaaggeeBBooxx ssTTiittuulloo ssCCoonntteenniiddoo,,,,)
donde nOpciones nnOOppcciioonneess ) es una constante o combinación de constantes
apropiadas. Para combinarlas se utiliza el operador "" (barra vertical),
SQLWindows 62

Ejemplo:
Llamada SSaallMMeessssaaggeeBBooxx( ' Error en la aplicación ', 'Altas',
MB_IconStopMB_Reintentarcancelar)
Las opciones pueden tener una combinación de valores, algunos de ellos
son:
MB_mb_IconExclamation IconAsterisk MB_REINTENTARCANCELAR MB_mb_IconHand
IconQuestion MB_YesNo MB_OK_mb_YesNoCancel IconStop MB MB_OkCancel
MB_AbortRetryIgnore
44..44.. SAL LLeenngguuaajjee ..
Para agregar código a la aplicación de los elementos del lenguaje
SSAALL((SSQQLLWWiinnddoowwss AApppplliiccaattiioonn LLaanngguuaajjee)), 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.
44..44..11.. SAL
SSeett IInnssttrruucccciioonneess ddeell LLeenngguuaajjee
SQLWindows 63

• asigna una variable (ANU) GGlloobbaall LLooccaall o el resultado de una


expresión.
La expresión puede ser una expresión aritmética que involucro other variables o
incluso objetos.

SSiinnttaaxxiiss: Set <variable>= <expresión>

NAvance EEjjeemmpplloo: Set = 100 / nPuntos ncoste total CCaallll


• involucra una función anu GGlloobbaall LLooccaall interna, externa o interna, de
SSAALL.
• 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:

SSiinnttaaxxiiss: Llamada Funcion()

: Llamada SalSendMsg EEjjeemmpplloo( pbSalir, PAM_Init, 0, 0 )


Set bResultado =( )
IIff SalNumberSin nX,,,, EEllssee EEllssee IIff..
Permite colocar los elementos de decisión.
F1IG. F2IG. F3IG.
IIff, EEllssee .. IIff, EEllssee .. IIff, EEllssee EEllssee IIff ,, ..

SS||iinnttaaxxiiss:::
IIff SSiinnttaaxxiiss SSiinnttaaxxiiss &lt; condición &gt; condición IIff &lt;
1&gt; condición IIff &lt; 1&gt; código 1 código 1 código 1
EEllssee IIff &lt; 2 &gt; condición condición EEllssee IIff &lt; 2 &gt; código 2
código 2 código 2
condición EEllssee EEllssee IIff &lt; 3 &gt;

EEllssee SQLWindows 64 código 3 código 3 código 2 EEllssee


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 IIff en ocasiones es díficil de leer, en ese caso se
puede usar la setencia EEllssee IIff (Fig. 3).
SSeelleecctt ccaassee..
Esta instrucción permite ejecutar una acción dependiendo de un valor numérico.
SSiinnttaaxxiiss:
SSeelleecctt CCaassee
 CCaassee nNumero 1 código 1 romper
 CCaassee 2 código 2 romper
 DDeeffaauulltt
código n
se debe colocar una instrucción BBrreeaakk al final de cada código para separar
cada caso, si se desea que ejecute las instrucciones del siguiente CCaassee,
bastará con omitir el BBrreeaakk. Por ejemplo:
65

• SQLWindows nOpción
 Select Case Caso 2
Caso 3
  Código un

reak
 Caso B 4
Caso 5
  Código B

nValor  romper si es 2 o 3, se ejecuta el código, si vale 4 o 5 se ejecuta el


código B.
LLoooopp yy BBrreeaakk
La setencia LLoooopp ejecuta el código en el siguiente nivel n veces hasta
encontrar una instrucción o RReettuurrnn BBrreeaakk.

No evalúa ni expresiones valores en cada iteración incrementa en forma


automática.
Pueden colocarse varias instrucciones Break.
Ejemplo:
set = 0 nIndice 
SQLWindows 66

 LLoooopp
 Si nIndice &gt; 6
 BBrreeaakk
llamada  SalStrUpper([ ] nIndice Dias, Dias[ ] )
Conjunto  nIndice nIndice nIndice
WWhhiillee = + 1.
La setencia WWhhiillee es muy parecido un LLoooopp, sólo que no necesita una
sentencia BBrreeaakk, ya que evalúa la expresión hasta que esta mar FFAALLSSEE, sin
embargo anu instrucción BBrreeaakk o RReettuurrnn concluirá el ciclo en forma
inmediata".

SSiinnttaaxxiiss:
WWhhiillee &lt; condición &gt;

EEjjeemmpplloo:
Llamada  SqlFetchNext( hSql, nErr )
 WWhhiillee nErr != EOF
 codigo 1
 Si &lt; condición &gt;
Devolver
llamada   nErr SqlFetchNext( hSql, nErr )
RReettuurrnn
La instrucción RReettuurrnn concluye el procesamiento de cualquier código
que atiende un mensaje o bien, el código de una opción de menú.
Regresa el valor a la función que invocó o bien un SQLWindows.
SQLWindows 67

Si el programa encuentra la instrucción return, ignora las instrucciones


subsecuentes y el control regresa a donde se hizo el llamado.

SSiinnttaaxxiiss::RReettuurrnn EEjjeemmpplloo:
Set = nParametro  nIndice
nResultado  Set = nIndice

 bucle si nIndice &lt; 0
Conjunto  bError = TRUE

si nIndice  RReettuurrnn  &gt; 6


 romper
 nIndice nIndice Set = + 1
* ado nIndice
 Set nRSet nResultado = nresultado esultado = nResultado / 2
SSttrriinnggss.
Las cadenas tienen en SQLWindows anu manipulación similar a la que
se usa en otros lenguajes para concatenar dos o más SSttrriinnggss se utiliza el
operador "║" (doble barra), como en la fig. 1.
Fig. 1
Conjunto  sVariable1 = 'El día '
Conjunto  sVariable2 = 'viernes '
Conjunto  sVariable3 = ' se hará el evento. '
Establecer nExp 1 = sVariable1 || || sVariable sVariable23 El día viernes se hará
el evento. Conjunto  nExp2 = sVariable1 || 'sabado ' || sVariable3 El día sábado
se hará el evento.
SQLWindows 68

Existe un error en la fig. 2, pues el compilador IImmpprreennttaa


SSttrriinngg interpretaría como la ONU, y el resto de la expresión causaría un
error de compilación.
Para incluir un apóstrofe dentro de ONU SSttrriinngg 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
Conjunto  sTitulo = ' Imprenta ' La Hacienda ' ' ! Marca Error Solución de
Mayagüez: Usar \ antes de'
 sTitulo Set = ' Imprenta \' La Hacienda \' ' o bien usar "
Conjunto  sTitulo = " Imprenta " La Hacienda ' "
Si se dese incluir anu diagonal inversa dentro del ONU, se coloca cadena
doble diagonal inversa como muestra la fig. 3.
Fig. 3
Conjunto  sLinea = ' \\***** reporte semanal *****\\ ' sLinea -&gt; \***** *****\
OOppeerraaddoorreess reporte semanal.
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 centrales de comparación pueden ser usados con datos de tipo
fecha, cadena o numéricos.

69

• AArriittmmééttiiccooss OOppeerraaddoorreess SQLWindows


Adición: + Resta: - Multiplicación: * AREA: / • AArriittmmééttiiccaa
bboooolleeaannaa
Y &amp; o |
• LLóóggiiccooss
REMO ND NO
• CCoommppaarraacciióónn
Mayorq ue &gt; Mayoro i gual&gt; = Menor que &lt; Menor oi gual&lt; = Igual =
Diferente != &lt;&gt;
44..44..22.. FFuunncciioonneess ddeell LLeenngguuaajjee SSAALL..
Adicionalmente al conjunto de instrucciones SSAALL,, 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 DDDDEE, funciones de edición,
manipulación de archivos, de formateo y validación, especiales para
LLiisstt BBooxx y CCoommbboo BBooxx, manipulación de arreglos y números, impresión,
ejecutar operaciones SSQQLL, manipulación de cadenas, conversión de datos, manejo
de ventanas, ect.
Ddee EEjjeemmpplloo aallgguunnaass

SSaallDDiissaabblleeWWiinnddooww ffuunncciioonneess::(()) Deshabilita objeto de la


ONU.
SSaallEEnnaabblleeWWiinnddooww(() habilita un objeto.
SSaallWWaaiittCCuurrssoorr(() Cambia el cursor de arena o viceversa.
SSaallDDaatteeYYeeaarr(()) Proporciona el año de una variable del tipo fecha.
SSaallFFiilleeRReeaadd(() lee datos de un archivo.
SQLWindows 70

44..44..22..11.. FFuunncciioonneess iinntteerrnnaass..


Las funciones son rutinas de uso general que tienen como propósito
efectuar anu thaarea y regresa uno o varios valores como resultado de su operación,
se declaran en la seccón IInntteerrnnaall FFuunnccttiioonnss.
• Si la función va a regresar el valor de la ONU, solamente se especifica el tipo
del valor de retorno.
• Se pueden especificar parámetros nn los cuales se utilizan como variables
locales, los parámetros por defecto 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 RReecceeiivvee (paso por referencia).
• La función puede tener sus propias variables (variables locales).
• El código de la función utiliza el lenguaje SSAALL.

EEjjeemmpplloo:
IInntteerrnnaall FFuunnccttiioonnss

 Función: Promedio
 Descripción: Calcula el promedio de n números
SQLWindows 71

 Devuelve

parámetros   Number:
número: nValores  [ * ]
 Número: nCuantos
 Variables estáticas
 variables locales
 Number:
número: nResultado nIndice 
 Actions Set
Set  nIndice = 0 = 0
 nResultado mientras nIndice &lt; nCuantos
 Set + nValores nResultado nResultado =[ ]
 nIndice nIndice nIndice Set = + 1
= nResultado nResultado  Set / nCuantos

EEjjeerrcciicciiooss nResultado de retorno.

AA. CCaallccuulloo ddeell FFaaccttoorriiaall..


Desarrolle una aplicación que reciva número ONU y calcule el factorial del mismo.
1. Cree una aplicación nueva (sin las librerias de QuickObjects).
2. Agregue FFoorrmm WWiinnddooww onu, asignele el título Calculo del factorial.
3. Agregue un campo de datos de la ONU la forma, el nombre ddffDDaattoo asignele, y
asigne el tipo de
datos en serie.
4.
5.
Un rriba del campo de datos, coloque un texto de fondo con la leyenda dato!
Campo de datos de la onu gregue, asignele ddffRReessuullttaaddoo asigne el nombre y
el tipo de datos Número.
6. Arriba del campo de datos, coloque un texto de fondo con la leyenda Resultado.
7. Onu Agregur ppbbCCaallccuullaarr pulsador con nombre y título Calcular.
8. En la sección User de la sección Constantes defina el mensaje PPAAMM _
CCaallccuullaarr con
el valor SSAAMM__UUSSEERR ++ 11.
SQLWindows 72

9. En la sección interna de ons Functi declaraciones mundiales dree anu función


nueva
con nombre FFaaccttoorriiaall.
10. Defina el resultado como tipo Número.
11. Defina un parametro de tipo Número con nombre nnNNuummeerroo.
12. En el código de la función coloque el siguiente código.
IIff ((nnNNuummeerroo&lt;&lt;11) 00 EEllssee RReettuurrnn RReettuurrnn
FFaaccttoorriiaall((nnNNuummeerroo--11))
13. Localice la sección Mensaje Acciones del botón ppbbCCaallccuullaarr.
14. Agregue el siguiente código:
OOnn SSAAMM__CClliicckk CCaallll SSaallSSeennddMMssgg(( ddffRReessuullttaaddoo,
PPAAMM__CCaallccuullaarr,, 00, 00 ))
15. En el campo de datos dfCalcular coloque el siguiente código:
OOnn PPAAMM__CCaallccuullaarr SSeett MMyyVVaalluuee == ddffDDaattoo
FFaaccttoorriiaall(( ))
16. Corra la aplicación y pruebela.

BB.. Ddee CCoonnvveerrssiióónn GGrraaddooss FFaahhrreennhheeiitthh


CCeennttiiggrraaddooss aa..
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 (el pecado de QuickObjects rerias liga lib).
2. Agregue onu ventana Formulario, asignele el título de conversión.
3. Agregue un campo de datos de la ONU la forma, el nombre
ddffCCeennttiiggrraaddooss asignele, y asigne el tipo de datos en serie.
4. Coloque arriba del campo de datos de la ONU Texto de fondo con la leyenda CC.
5. Agregue el campo de datos de la ONU, asignele dfFahrenheit asigne el nombre y el
tipo de datos Número.
6. Coloque arriba del campo de datos de la ONU Texto de fondo con la leyenda FF.
7. Agregue un botón con nombre y tñitulo ppbbCCTTooFF CC --&gt;&gt; FF.
8. Debajo del botón pulsador onu agregue anterior ppbbFFTTooCC con nombre y título
FF --&gt;&gt; CC..
9. En la sección User de la sección Constans defina el mensaje
PPAAMM__CCoonnvveerrttiirr
con el valor SSAAMM__UUsseerr ++ 11.
SQLWindows 73

10. En la sección Funciones internas de declaraciones mundiales cree una función


nueva, con nombre CCeennttiiggrraaddoossDDeeFF.
11. Defina el resultado como tipo Número.
12. Defina el parametro del tipo Número con nombre nnGGrraaddFFaarr.
13. Agregue el siguiente código en la sección Acciones.
((NnGGrraaddFFaarr RReettuurrnn--3322)**55//99
14. Defina el resultado como tipo Número.
15. Ef . 16. D ina el parametro del tipo Número con nombre agregue el siguiente
código en la sección Acti
nnGGrraaddFFaarr
ons.
((NnGGrraaddFFaarr RReettuurrnn--3322)**55//99
17. Agregue otra función con nombre FFaahhrreennhheeiittDDeeCC.
18. Defina el resultado como tipo Número.
19. Defina un parametro del tipo Número con nombre nnGGrraaddCCeenn.
20. Agregue el siguiente código en la sección Acciones:

(( nnGGrraaddCCeenn RReettuurrnn ** 99 // 55 -- 3322 ))


21. Localice la sección Mensaje Acciones del botón ppbbCCTTooFF.
22. Agregue el siguiente código:
OOnn SSAAMM__CClliicckk CCaallll SSaallSSeennddMMssgg(( ddffFFaahhaarreennhheeiitt,
PPAAMM__CCoonnvveerrttiirr,, 00, 00 ))
23. Localice la sección Mensaje Acciones del botón ppbbFFTTooCC.
24. Agregue el siguiente código:
OOnn SSAAMM__CClliicckk CCaallll SSaallSSeennddMMssgg(( ddffCCeennttiiggrraaddooss,
PPAAMM__CCoonnvveerrttiirr,, 00, 00 ))
25. Localice el campo de datos ddffFFaahhrreennhheeiitt y agregue el siguiente
código:
OOnn PPAAMM__CCoonnvveerrttiirr SSeett MMyyVVaalluuee == ddffCCeennttiiggrraaddooss
ddffFFaahhrreennhheeiittDDeeCC(( ))
26. Localice el campo de datos ddffCCeennttiiggrraaddooss y agregue el siguiente
código:
OOnn PPAAMM__CCoonnvveerrttiirr SSeett MMyyVVaalluuee == ddffFFaahhrreennhheeiitt
ddffCCeennttiiggrraaddoossDDeeFF(( ))
27. Corra la aplicación y pruebela.
SQLWindows 74

44..55.. CCóóddiiggoo RReeuussaabbllee..


Una propiedad muy importante de SQLWindows (also principio de
OOOOPP) 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 tipo o similar; para ello provee de variables de uso general, como es el caso
y dehhWWnnddFFoorrmm
hhWWnnddFFoorrmm hhWWnnddIItteemm: • Se refiere a la ventana padre (TToopp
LLeevveell WWiinnddooww).
• HhWWnnddIItteemm se refiere a la ventana actual (padre o hijo).
Ejemplo:
Fig. 1
SQLWindows 75

En este caso se refiere a ppbbCCoonnssuullttaa hhWWnnddIItteemm hhWWnnddFFoorrmm y


se refiere a la ventana que contiene un ppbbCCoonnssuullttaa.
Ejemplo:
Fig. 2
En este caso un ffrrmmMMaaiinn hhWWnnddFFoorrmm se refiere, si se usara
hhWWnnddIItteemm also se referiría a ffrrmmMMaaiinn, ya que el objeto es real la
ventana padre.
SQLWindows 76

Utilizando las variables y hhWWnnddFFoorrmm hhWWnnddIItteemm, se puede usar el


mismo código en diferentes objetos, por ejemplo considerarse los pasos necesarios
para habilitar y deshabilitar los botones ejemplificados en la Fig. 1.

EEjjeerrcciicciioo.
1. Cargue la aplicación de captura otorgó de clientes.
2. Agregue los mensajes necesarios para habilitar y deshabilitar los botones, en la
sección de GGlloobbaall CCoonnssttaannss en UUsseerr DDeeccllaarraattiioonnss:

Número : PAM_Activa = SAM_Usuario + 1 Número : PAM_Desactiva = SAM_Usuario + 2


3. Agregue el código para que al inicio los botones estén encendidos/apagados mar
según el caso, esto es en la sección de MMeessssaaggee AAccttiioonnss de cañada
botón incluya la atención a los mensajes de PPAAMM__AAccttiivvaay
PPAAMM__DDeessaaccttiivvaa,, con su respectivo código ya visto con anterio ridad. Y
also agregue una cañada botón la atención al mensaje de SSAAMM__CCrreeaattee, donde
al crearse el propio objeto haremos que se mande una el mismo activar o desactiva,
respectivamente para cada uno de mar según el caso.
4. Entonces en el caso de los botones, y pbAyuda pbCo nsulta pbSalir el código en
el mensaje SAM_Crear será el siguiente:
MMeessssaaggee AAccttiioonnss OOnn SSAAMM__CCrreeaattee
CCaallll SSaallPPoossttMMssgg(( hhWWnnddIItteemm, PPAAMM__AAccttiivvaa,, 00, 00)

5. 77 SQLWindows y en el caso de los botones, pbPrimero pbSiguiente pbUltimo


pbAnterior,,,,, pbResta pbSuma pbBorra pbImprime pbCambio, y en código en el
mensaje SAM_Crear será el siguiente:
MMeessssaaggee AAccttiioonnss OOnn SSAAMM__CCrreeaattee
CCaallll SSaallPPoossttMMssgg(( hhWWnnddIItteemm, PPAAMM__DDeessaaccttiivvaa,, 00,
00)
• NNoottaa: Recuerde, no dibuje lo que pueda copiar, no copie lo que pueda calcar,
no calque lo que pueda recortar y pegar.
44..66.. Ddee MMeennúúss AAssoocciiaacciióónn AAcccciioonneess aa..
Las opciones del menú estan ligadas a los botones de la barra de herramientas del,
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
SSaalliissWWiinnddoowwEEnnaabblleedd(()) (¿Esta habilitada la ventana?), la cual
recibe el
HHaannddllee del objeto y regresa un valor TTRRUUEE si el objeto está habilitado, y
FFaallssee en caso contrario.
En la sección MMeennuu AAccttiioonnss se enviará el mensaje SSAAMM__CClliicckk al
botón
correspondiente:

EEjjeerrcciicciioo SQLWindows 78.


Implemente el código anterior y pruebe todas las opciones del menú.
• En la sección de de la forma ffrrmmMMaaiinn MMeennuu abra los MMeennuuIItteemmss
de cada opción del menú y agregue en su respectiva sección MMeennuu
SSeettttiinnggss de cañada onu lo siguiente:
MMeennuu AAccttiioonnss EEnnaabbllee SSaallIIssWWiinnddoowwEEnnaabbllee wwhheenn ::
(( ppbb......)
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 MMeennuu AAccttiioonnss de cañada botón el siguiente código:
MMeennuu AAccttiioonnss CCaallll SSaallSSeennddMMssgg(( ppbb......,
SSAAMM__CClliicckk,, 00, 00 ))
• Para el botón de salir llame a la funcón SSaallQQuuiitt(( )) en la sección de
MMeennuu AAccttiioonnss.
SQLWindows 79

44..77.. Ddee CCrreeaacciióónn VVeennttaannaass..


Como se comentó al inicio, la operación de una ventana tiene tres
modalidades.
Bloque MMooddaall todas las ventanas de la aplicación, todo el
procesamiento se centra en la ventana MMooddaall, y no se restablece hasta cerrar
la ventana.
SSyysstteemm MMooddaall Bloque todas las ventanas de Windows, todo el
procesamiento se centra en la ventana SSyysstteemm MMooddaall, y no se restablece
hasta cerrar la ventana.
MMooddeelleessss permite cambiar de ventana de trabajo en forma
indistinta.
SQLWindows 80

En las ventanas FFoorrmm WWiinnddooww SQLWindows y TTaabbllee WWiinnddooww hijo


MMooddeelleessss modales (no), 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 DDiiaalloogg BBooxx pueden ser configurados en cualquiera de las

debe modificar la propiedad de TTyyppee ooff DDiiaalloogg como tres formas, para
ello se 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.
nnaa ión TTiippoo ddee VVeennttaa MMooddaall // C Acc SSyysstteemm SalModal trasera
Función Diálogo
Cerrar SalEndDialog MMooddaall()()
() Crear SalCreateWindow MMooddeelleessss
Cerrar SalDestroyWindow()
SQLWindows 81

44..77..11..
• VVeennttaannaass MMaanneejjoo ddee 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 de palabra (rango: 0 a 64K-1)
• Los nombres de formatos pueden ser usados como parámetros de funciones que
requieren un parámetro del tipo "manejo de ventana"
44..77..22.. Ddee VVaarriiaabblleess MMaanneejjoo ddee VVeennttaannaa
hhWWnnddNNUULLLL Onu nulo (cero) de manejo de ventana; usando para
pasar, o revisar el párrafo, ONU número de manejo de ventana nula.
HHWWnnddFFoorrmm el "manejo de ventana" padre
hhWWnnddIItteemm activa el elemento que tiene el foco, o que está recibiendo el
mensaje en ese momento
hhWWnnddMMDDII el "manejo de ventana" para el MDI padre activo
Ejemplo: prototipo de función: bOk = SalDisableWindow (Window_Handle)
SQLWindows 82

Campo de datos:
Acciones de mensaje ddffFFiieelldd
sobre SAM_create
( ddffFFiieelldd SalDisableWindow llamada ) !impida entrada en campo llamada
hhWWnnddIItteemm SalDisableWindow( ) !equivalenta

EEjjeerrcciicciioo recomendado:
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 83

Cuando el botón de OOkk CClliicckk recibe de la ONU, debe cerrar la ventana "Acerca
de..."
• En el TTooooll BBooxx oprima el botón que dice Desde el
CCuussttoommiizzeerr DDiiaalloogg o haga doble clic en la opción de DDiiaalloogg
BBooxx.
• Ahora haga clic derecho sobre el nuevo DDiiaalloogg BBooxx y el de la propiedad
de TTyyppee ooff DDiiaallooggelija MMooddaall (si es que no está elejida).
• Ahorra configurar a su gusto esta ventana, pongale nombre de Naciones Unidas
(ONU), digAbout título,etc.
• Agregele algun BBaacckkggrroouunndd TTeexxtt 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 acciones de mensajes de dicho
botón lo siguiente:
__CClliicckk OOnn SSAAMM SSaallEEnnddDDiiaalloogg(())
SQLWindows 84

• Lo que hara cuando el usuario oprimael botón OOKK el DDiiaalloogg BBooxx se


cerrará.
• Ahora asocie esta ventana a la opción del menú AAbboouutt, con el código de la
página anterior ya visto.
" No modal, y pruebela, modifique la forma ¿ Puede crear variasde la ventana
"Acerca de... ventanas "Acerca de..." ?.
EEvvaalluuaacciióónn ddeell ccaappííttuulloo 44..
1. Para asignar un valor a una variable se uti liza la instrucción _______________.
2. Una función se puede invocar con anu instrucción _______________ o bien en forma
implícita en una expresión.
3. En la instrucción IIff, el control del código a ejecutar lo determina la
______________________ de las instrucciones.
4. Anu instrucción LLoooopp requiere de una instrucción __________________________
para concluir el ciclo.
5. A diferencia de la instrucción LLoooopp 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 la ONU TTRRUUEE WWiinnddooww
HHaannddllee y regresa en caso de que el objeto esté habilitado.
9. La función ___________________________ se utiliza para crear una ventana
MMooddaall.
10. La función _________________________ se utiliza para crear una ventana
SSyysstteemm MMooddaall.
SQLWindows 85

11. Para concluir la ope ración de anu ve ntana modal no se ut iliza 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 modal no es sólo se puede crear una ventana a la vez.
Cierto Falso
44.. DDEE LLAA CCAARRAACCTTEERRIISSTTIICCAASS PPRROOGGRRAAMMAACCIIÓÓNN EENN
SSQQLLWWIINNDDOOWWSS.......5533
44..11..
VVaarriiaabblleess.................................................................
...................................................................................
...................................................................................
.....................................................................5533
4.1.1. Variables de
SQLWindows.........................................................................
.......................................54 4.1.2. Calificación de
Variables..........................................................................
.........................................54
44..22..
AArrrreeggllooss...................................................................
...................................................................................
...................................................................................
.......................................................................5566
4.2.1. Arreglos
Unidimensionales...................................................................
.............................................56 4.2.2. Arreglos
multidimensionales.................................................................
..........................................57
44..33..
CCoonnssttaanntteess...............................................................
...................................................................................
...................................................................................
...................................................................6600
4.3.1. Constantes
Predefinidas.......................................................................
..............................................62
44..44.. LLeenngguuaajjee
SSAALL.............................................................................
...................................................................................
...................................................................................
.........................................6633
4.4.1. Instrucciones del Lenguaje
SAL................................................................................
........................63 4.4.2. Funciones del lenguaje
SAL................................................................................
.............................70
44..55.. 7755 CCóóddiiggoo
RReeuussaabbllee...................................................................
...................................................................................
...................................................................................
.......................................
44..66.. Ddee AAssoocciiaacciióónn
MMeennúúss.........................................................................
...................................................................................
..............................................................AAcccciioonneess aa
7788
44..77.. Ddee CCrreeaacciióónn
VVeennttaannaass...................................................................
...................................................................................
...................................................................................
.......................8800
4.7.1. Manejo de
ventanas...........................................................................
...............................................82 4.7.2. Variables de Manejo de
Ventana............................................................................
...........................82
SQLWindows 86

También podría gustarte