Ejemplos Power Builder 10.5

  • View
    10.865

  • Download
    27

Embed Size (px)

Transcript

EJEMPLOS DE POWER BUILDER 10.5Este documento contiene muchos ejemplos de script sobre el manejo de aplicaciones y proyectos realizados a base de power builder. Si le interesa aprender este lenguaje de programacin este documento posee la mayora cdigos para el desarrollo de sistemas informticos.

Manejo de Power builder 10.5

Ejemplos Power builder 10.51. LLAMADOS A LAS API DE WINDOWS DESDE POWER BUILDERPower Builder al igual que otros lenguajes de programacin, provee la capacidad de extender las posibilidades del lenguaje tomando funcionalidades que pertenecen al sistema operativo o controles de terceras partes. Este proceso es lo que se llama API (Application Programming Interface). Algunas personas incluyen DLLs que han realizado en C o C++, para usarlos en Power Builder. Pero los mas comunes llamados son los que se hacen a las API del sistema operativo, para que el programador acceda directamente a funciones que desde power builder tocara desarrollarlas, y el sistema operativo ya las tiene implementadas. COMO SE HACE EL LLAMADO Los llamados a los API se realizan a travs de la declaracin de funciones externas (External Function), que pueden ser globales o locales. Las Global external function, pueden ser utilizadas en cualquier lugar de la aplicacin y son guardadas con otras variables globales. las Local external function hacen parte de la definicin de una ventana, un men, o un objeto de usuario. Ahora en el bloque de cdigo de la external function, definimos la funcin que deseamos incluir, la cual tiene esta sintaxis: {acceso} FUNCTION tipodedatoqueretorna Nombredelafuncion ({argumentos}) LYBRARY nombredelalibreria {ALIAS FOR nombreexterno} La declaracin de acceso solo es valido para las local external functions donde puede ser Public, Private, y Protected. tipodedatoqueretorna es el tipo de dato que retorna la funcion. Nombredelafuncion es el nombre de la funcin tal como aparece en el archivo DLL. nombredelalibreria es el nombre del archivo DLL donde la funcin se encuentra. ALIAS FOR nombreexterno es un nombre diferente que se le puede dar a la funcin para usarla en el power script. Si por ejemplo usted necesita copiar un archivo de un directorio a otro, usted puede usar una funcin que se encuentra en Kernel32.dll llamada CopyFileA. Esta funcin le permite copiar un archivo de un sito a otro. Entonces en el bloque de instrucciones donde declara las Global External Function, coloca este cdigo (o la definicin de la funcin que necesite segn la tabla): FUNCTION boolean CopyFileA(ref string cfrom, ref string cto, boolean flag) LIBRARY Kernel32.dll Y luego desde el power script de la ventana o el sitio de la aplicacin donde necesite copiar un archivo, hace el llamado a la funcin as: string ls_desde, ls_hasta boolean lb_flag, lb_ rtn lb_flag = false ls_desde = c:prueba.bmp ls_hasta = c:directorio est.bmp lb_rtn = CopyFileA(ls_desde, ls_hasta, lb_flag) Si desea conocer mas profundamente informacin acerca de las funciones disponibles consulte la pagina web de los APIS de Windows (En Ingles).

EJEMPLO DE LLAMADO A UN API DE WINDOWS

1

2. Poner las nuevas filas en otro colorEste truco muestra como cuando se inserta una nueva fila se pone de un color diferente, y asi mismo se muestra como hacer para que las filas nuevas sean editables mientras que las existentes se dejan como solo lectura. Para poner las filas nuevas de un color diferente abra la expresin (expression) del campo de background color coloque la siguiente sentencia if ( IsRowNew(), 1090519039, Long(Describe(Datawindow.Color))) donde 1090519039 es color regular de una ventana Usando la misma idea, se puede hacer que las filas existentes sean de solo lectura y las nuevas sean editables, el codigo siguiente se coloca en la expresin (expression) de Protect: if ( IsRowNew() , 0 , 1 )

3. Rutina para buscar y remplazar un stringEsta Rutina trabaja genericamente para todos los strings. Por ejemplo si OLD_STR = red y NEW_STR = green, todas las ocurrencias de red sern remplazadoas con green. long ll_StartPos = 1 string ls_old_str, ls_new_str, ls_txt_str ls_txt_str = sle_1.Text ls_old_str = red ls_new_str = green // Busca la primera ocurrencia de ls_old_str ... ll_StartPos = Pos(ls_txt_str, ls_old_str, ll_StartPos) // Unicamente entra al loop si uted busca ls_old_str ... DO WHILE ll_StartPos > 0 // Remplaza old_str con ls_new_str ... ls_txt_str = Replace(ls_txt_str, ll_StartPos, Len(ls_old_str), ls_new_str) // Busca la siguiente ocurrencia de ls_old_str ll_StartPos = Pos(ls_txt_str, ls_old_str, ll_StartPos + Len(ls_old_str)) LOOP sle_2.Text = ls_txt_str

4. Funcin para encriptar y desencriptar un stringA continuacin se presenta la funcion of_encrypt que recibe un string y devuelve la cadena encriptada, y la funcion of_decrypt que recibe una cadena encriptada y la desencripta. [function string of_encrypt(as_str)] integer i, j string ls_enctext = CONSTANT string CRYPT_KEY = $#@%%@&* j = len(as_str) FOR i = 1 TO j ls_enctext += mid(CRYPT_KEY , mod(i,10) + 1, 1) ls_enctext += String(Char(255 - Asc(Mid(as_str, i, 1)))) NEXT RETURN ls_enctext [function string of_decrypt(as_str)] integer i, j string ls_encchar, ls_temp, ls_unasstr = ** Encryption Error boolean lb_ok = true CONSTANT string CRYPT_KEY = $#@%%@&*

2

j = len(as_str) IF NOT Mod(j, 2) = 1 THEN ls_temp = FOR i = 2 TO (j + 1) STEP 2 ls_encchar = Mid(as_str, i - 1, 1) IF mid(CRYPT_KEY, Mod(i / 2, 10) + 1, 1) ls_encchar THEN lb_ok = FALSE EXIT END IF ls_encchar = Mid(as_str, i, 1) ls_temp += string(char(255 - asc(ls_encchar))) NEXT END IF IF lb_ok THEN ls_unasstr = ls_temp RETURN ls_unasstr

5. Como agregar animacin a las ventanasESTA API SOLO ESTA DISPONIBLE EN WINDOWS 98 Y 2000. AGREGA LA SIGUIENTE FUNCION EXTERNA: Function boolean AnimateWindow(long lhWnd, long lTm, long lFlags ) library 'user32' DONDE EL PRIMER PARAMETRO ES EL ?HANDLE? DE TU VENTANA, EL SEGUNDO ES EL TIEMPO QUE SE DEBE TOMAR PARA LA ANIMACIN (MAYOR VALOR = MAYOR LENTITUD EN LA ANIMACIN), Y POR ULTIMO EL TIPO DE ANIMACIN QUE DESEAS AGREGAR. PARA LLAMAR LA APLICACIN, AGREGA EL SIGUIENTE CODIGO AL EVENTO OPEN DE TU VENTANA: // Anima la ventana de izquierda a derecha Constant long AW_HOR_POSITIVO = 1 // Anima la ventana de derecha a izquierda Constant long AW_HOR_NEGATIVO = 2 // Anima la ventana de arriba hacia abajo Constant long AW_VER_POSITIVO = 4 // Anima la ventana de abajo hacia arriba Constant long AW_VER_NEGATIVO = 8 // Anima la ventana hacindola que aparezca del centro hacia los lados Constant long AW_CENTRO = 16 // Oculta la ventana Constant long AW_OCULTA = 65536 // Activa la ventana Constant long AW_ACTIVA = 131072 // Usa la animacin de tipo diapositivas Constant long AW_DIAP = 262144 // Usa la animacin con efecto de transparencia Constant long AW_TRANS = 524288 AnimateWindow( Handle( this ), 500, AW_TRANS )

6. Crear una tabla desde PowerScriptCon las siguientes instrucciones usted puede crear una tabla desde power script o hacer un cambio a la tabla con alter table. Debe verificar que el autocommit de la transaccin este en TRUE. SQLCA.AutoCommit = True

3

ls_sql = create table #tmp (abc varchar(255)) EXECUTE IMMEDIATE :ls_sql USING SQLCA; //Para modificar la tabla, use la misma idea: ls_sql = 'ALTER TABLE dba.tbl_name ADD col_name' EXECUTE IMMEDIATE :ls_sql USING SQLCA;

7. Cargar un arreglo con todos los nombres de las columnas de un DWEste truco muestra como hacer para obtener los nombres de las columnas de un datawindow, cargandolas a un arreglo. int colNum, numCols string colName[] numCols = Integer(dw_control.Describe(Datawindow.Column.Count)) FOR colNum = 1 TO numCols // Toma el nombre de la columna con describe colName[colNum] = dw_control.Describe(# + String(colNum) + .name) NEXT

8. Como saber cuales dlls usa mi aplicacin?Bueno lo que debes hacer es correr tu aplicacion desde el ejecutable (aplicacion.exe), debes tener cerrado Power builder, y todas las aplicaciones, vas a inicio / ejecutar y buscas el lugar donde esta el ejecuble y lo corres. Ya cuando tu aplicacion este corriendo vas a inicio / ejecutar y escribes msinfo32.exe, este es un utilitario que tiene windows 98, o si usas Office el tambien lo trae. Este es un programa de informacion del sistema que te muestra los programas y dlls que usas actualmente. Ahi entra a entorno de software, modulos de 32 bits cargados, en la parte derecha te va a mostrar un listado de dlls del sistema que corren actualmente, para saber cuales con los que usa tu aplicacion busca los que el fabricante es Sybase Inc y empiezan por PB*.dll. Ahi encontraras los dlls. Ademas de esos hay uno dll que no tine fabricante pero es de sybase tambien que es uno llamado libjcc.dll, ahi podras ver el .pbd o .dll de las librerias de tu aplicacion y el .exe de la aplicacion, obviamente estos tambien hacen parte de la aplicacion. Anota todos estos archivos, y luego crea una carpeta y copia todos estos archivos dentro de la carpeta. Esta carpeta es la que debes llevar al equipo donde vas a poner a correr la aplicacin. Y con esto ya debe correr la aplicacion en el equipo que no tine PB.

9. Sobrecarga del MessageboxMuchas veces se usa la funcin messagebox para mostrar el valor de una variable. Powerbuilder trae la funcin messagebox() sobrecargada para que usted pueda llamarla con cualquier tipo de dato. Normalmente la funcin tiene estos parmetros MessageBox ( titulo, texto {, icono {, botn {, default } } } ) Donde los parmetros obligatorios titulo y texto son de tipo string. Esto hace que por ejemplo para mostrar una variable de tipo entero se realice esta conversin Int li_numero li_numero = 2 messagebox(?titulo mensaje?,string(li_numero)) Con la sobrecarga que tiene esta funcin usted puede hacer esto Int li_numero li_numero = 2 messagebox(?titulo mensaje?, li_numero) obteniendo el mismo resultado

10. Tomar el numero de filas seleccionas en un DW

4

Algunas ve