Sunteți pe pagina 1din 7

Como mostrar y escribir el Cero (0) en un Editmask

Normalmente cuando se definen edit mask los ceros no aparecen o no se pueden digitar. Este truco permite en los campos de un datawindow que sea editmask numrico, o en los controles editmask de tipo numerico, poder mostrar y escribir el cero (0). Es simple: la mascara del editmask se debe definir como ###,##0 en lugar de ###,###. Con esto en caso que el campo sea cero se vera en el editmask y al digitar tambin permitir escribir el cero.
Utilizar un men en una ventana 'response'

En el evento open de la ventana: ChangeMenu(m_menu) //m_menu -> men a mostrar en la ventana response
Hacer un control movible por Avron Polakow

En el evento mousedown poner: Send(handle(this), 274, 61458, 0) Si el control no tiene el evento mousedown define el evento como: ue_mousedown pbm_lbuttondown
Ordenar un array utilizando un Datastore por Ral Gagnon

datastore lds_temp //crear datastore string ls_err integer i // Cambia el type en el datastore en funcin del tipo de array que desees ordenar long ll_array[] = { 2 , 3, 6, 5 } string ls_dsdef = 'release 6; datawindow() table(column=(type=long name=a dbname="a") )' lds_temp = CREATE datastore lds_temp.Create(ls_dsdef, ls_err) // inserta el array el el datastore lds_temp.object.a.current = ll_array lds_temp.SetSort("a ASC") lds_temp.Sort() //asigna el nuevo orden en el array ll_array = lds_temp.object.a.current FOR i = 1 to Upperbound(ll_array) MessageBox("Nuevo orden", string(ll_array[i])) NEXT DESTROY lds_temp //destriur el datastore
Envio de correo desde Lotus Notes

string mailprogram int rc, hndl time starttime SetPointer(HourGlass!) mailprogram = ProfileString("win.ini","LotusMail","Program","") if mailprogram = "" THEN Messagebox("Error","Lotus Notes no esta instalado",StopSign!) Halt Close END IF hndl = OpenChannel("Notes","SendMail") if hndl < 1 then run(mailprogram, minimized!) starttime = Now() DO

Yield() hndl = openchannel("wmail","Sendmail") if hndl > 0 then exit LOOP UNTIL SecondsAfter(StartTime, Now()) > 15 if hndl < 1 then messagebox("Error", "No puedo arrancar Lotus Notes. Arranque el programa y teclee el password de Notes.", StopSign!) setpointer(Arrow!) return end if end if rc = ExecRemote("NewMessage", hndl) // Solo deben ejecutarse las variables que contengan algun texto. En caso contrario, LotusNotes da error rc = ExecRemote("To " + sle_to.text, hndl) // Login del usuario destino o direccion e-mail internet, pueden aadirse mas // separando los campos con comas rc = ExecRemote("CC " + sle_cc.text, hndl) // Igual que anterior rc = ExecRemote("Subject " + sle_subject.text, hndl) // Texto (Asunto del mensaje) rc = ExecRemote("Text " + mle_1.text, hndl) // Texto (Cuerpo del mensaje) rc = ExecRemote("AttachFile " + sle_attach.text, hndl) // path del fichero a anexar rc = ExecRemote("Send", hndl) rc = CloseChannel(hndl) SetPointer(Arrow!)

Ejecutar el Screen Saver actual en tiempo de ejecucin

/* ** WM_SYSCOMMAND 0x0112 274 ** SC_SCREENSAVE 0xF140 61760 */ send(handle(This),274,61760,0)


Determinar en ejecucin si el separador es decimal o de miles. string ls_decimal, ls_thousand string ls_regKey = "HKEY_CURRENT_USER/Control Panel/International" RegistryGet(ls_regKey, "sDecimal", ls_decimal) RegistryGet(ls_regKey, "sThousand", ls_thousand) Poner una fecha a Null date ld_date SetNull(ld_date) dw_1.object.datecolumn[row]=ld_date Saber que ficheros hay en un directorio Usando la funcin DirList() listboxname.DirList ( filespec, filetype {, statictext } ) La cual mostrar un ListBox con los ficheros que coincidan con el criterio especificado. Si no quieres que el usuario vea estos ficheros, tienes que hacer el ListBox invisible. Determinar si un bit est colocado en un nmero Las API de Windows usan a menudo cada bit en un Integer o Long para dar un sentido verdadero o falso. PowerBuilder no tiene ninguna funcin que pueda evaluar esto (aunque una PFC lo hace con n_cst_numerical.of_getbit()). Sin embargo, usando una pequea funcin matemtica podemos fcilmente determinar si un bit especifico est colocado. Int(Mod(numero_a_evaluar / (2 ^ (bit_number - 1)), 2)) > 0

Donde numero_a_evaluar es el nmero, tal como 16, a evaluar y bit_number es la posicin del bit. Cuando ests trabajando en binario siempre debes ir de derecha a izquierda. Por ejemplo, 16 aparecera como el siguiente (como un entero de 16 bits) en binario: 0000000000010000 En otras palabras, el quinto bit empezando desde la derecha est puesto a 1 (ON) y los otros estn a 0 (OFF) Obtener una lista de las impresoras instaladas Por Ral Gagnon En este truco abriremos un listbox con una lista de las impresoras instaladas: string printers[] int rtn, i, nbPrinters rtn = RegistryKeys("HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers", printers) nbPrinters = UpperBound(printers) FOR i = 1 TO nbPrinters lb_1.addItem(printers[i]) NEXT Chequear si un fichero est en uso por otra aplicacin. Por Ral Gagnon integer li_FileNum li_FileNum = FileOpen ( "mi_fichero.dat" , LineMode!, Read!, LockReadWrite!) IF IsNull(liFileNum) THEN MessageBox("Fichero en uso!") END IF Leer ficheros mayores de 32765 bytes La funcin Fileread est limitada para leer solo 32765 bytes de una vez. La solucin es leer el fichero hasta que no haya ms datos para ser leidos. blob lbl_data blob lbl_temp long ll_file ll_file = fileopen("mybigfile.txt",streammode!) DO WHILE FileRead(ll_file,lbl_temp) > 0 lbl_data += lbl_temp LOOP FileClose(ll_file) //Por Ral Gagnon Convertir una cadena hexadecimal en su decimal equivalente Crear la siguiente funcin of_hex2long(as_hex) que retorna un long] string ls_hex integer i,length long result = 0 length = len(as_hex) ls_hex = Upper(as_hex) FOR i = 1 to length result += (Pos ('123456789ABCDEF', mid(ls_hex, i, 1)) * ( 16 ^ ( length - i ) )) NEXT RETURN result Detectar la versin de PowerBuilder string ls_PBver environment env GetEnvironment(env)

ls_PBver = string(env.pbmajorrevision) + '.' + string(env.pbminorrevision) + '.' + string(env.pbfixesrevision) Obtener el ltimo da del mes Se coge una fecha, se incrementa el mes, se cambia el da por "01" y entonces restamos 1: int li_retdays, li_month, li_year li_month = Month(ad_date) li_year = year(ad_date) IF li_month < 12 THEN li_month ++ ELSE li_month = 1 li_year ++ END IF // construimos una fecha nueva ld_newdate = date(li_year,li_month,1) // extraemos el ltimo da del mes anterior ld_previousMonthLastDay = day(relativedate(ld_newdate, -1)) Convertir un nmero a hexadecimal Crear una funcin[of_long2hex(long alnumber, integer ai_digit) que devuelve un string] long ll_temp0, ll_temp1 char lc_ret IF ai_digit > 0 THEN ll_temp0 = abs(al_number / (16 ^ (ai_digit - 1))) ll_temp1 = ll_temp0 * (16 ^ (ai_digit - 1)) IF ll_temp0 > 9 THEN lc_ret = char(ll_temp0 + 55) ELSE lc_ret = char(ll_temp0 + 48) END IF RETURN lc_ret + of_num2hex(al_number - ll_temp1 , ai_digit - 1) END IF RETURN "" //Ejemplo: of_longhex(256, 4) returns "0100" //Ejemplo: of_longhex(256, 3) returns "100" Ejecutar una conexin Dial-up string command command='rundll rnaui.dll,RnaDial TuConexion' // Distingue entre maysculas y minsculas. Run(command) Retornar un valor desde una aplicacin PB Muchas veces un shell script o un programa hace una llamada a una aplicacin PowerBuilder. A menudo nos gustara que esa aplicacin PB devolviera, cuando finalizara, un cdigo de retorno. Por ejemplo, si la aplicacin PB finaliza satisfactoriamente. Para retornar un valor desde la aplicacin PB al programa o shell script que lo llama utilizamos la propiedad LongParm del objeto Message con el valor que queremos devolver en el evento CLOSE. Ejemplo: - Evento Close de la aplicacin If ib_endingOK then Message.LongParm = 1 Else Message.LongParm = 0 End If

El mtodo de arriba es un ejemplo. El objeto Message puede ser utilizado con cualquier valor que se quiera retornar. Bsqueda inversa Declara una funcin que retorne un Long y pasa los siguientes parmetros: string string1, string string2, long start Llmal uf_ReversePos. // ************************************************************************************ // uf_ReversePos - Busca una cadena dentro de otra en sentido inverso. // // Sintaxis : // uf_ReversePos ( string1, string2 {, start } ) // // Descripcin de los argumentos: // string1 --> La cadena donde quieres buscar la cadena2 // string2 --> La cadena que quieres encontrar en cadena1 // start (opcional) -->Un long que indica donde empezar la bsqueda en cadena1. // El valor por defecto es el tamao de la cadena 1. // // Valor que retorna: // Long. Retorna un long cuyo valor es la posicin de comienzo de la primera ocurrencia // de la cadena2 en la cadena1 before the position specified in start. // Si la cadena2 no se encuentra en la cadena1 o si el valor de comienzo no // se encuentra en el tamao de la cadena1 uf_ReversePos devuelve 0 // Si algn argumento es nulo uf_ReversePos devuelve nulo. // //Uso: la funcin uf_ReversePos distingue entre maysculas y minsculas. // // Paul Mele 7/98 www.pmsys.com/pb pmele@pmsys.com // ************************************************************************************ Long ll_rtn, ll_pos // Realiza un chequeo y devuelve un valor If IsNull(string1) or IsNull(string2) Then Return Long(gstr_vars.a_null) ll_pos = Pos(Reverse(string1),Reverse(string2),Len(string1) - start + 1) ll_rtn = uf_iif(ll_pos>0,Len(string1) - Len(string2) - ll_pos + 2, 0) Return ll_rtn end function public function long uf_reversepos (string string1, string string2); // **************************************************************** // Funcin sobrecargada de la original para pasar un valor de comienzo opcional. // Ver la funcin original para los detalles y parmetros. // // Paul Mele 7/98 www.pmsys.com/pb pmele@pmsys.com // **************************************************************** Return uf_ReversePos(string1,string2,Len(string1)) end function Determinar el valor RGB Por Ganesh Babu. T.R. --> ganeshtr@hotmail.com Este articulo explica como determinar los componentes rojo, verde y azul para un color especfico en tu aplicacin. El programa de ejemplo de abajo usa la funcin MOD para separar el componente rojo, verde y azul del color especificado. 1.- Crea una aplicacin nueva en PowerBuilder. 2.- Crea una nueva ventana. 3.- Aade un control CommandButton y un control StaticText en la ventana. 4.- Aade el siguiente cdigo en el evento Click del control CommandButton: Long c, gc Integer R, G, B C= st_1.BackColor

gc = rgb(0,1,0) R = Mod(c, gc) C = C / gc G = Mod(c, gc) C = C / gc B = Mod(c, gc) MessageBox("Valor RGB", "Rojo = " + String(R) + " Verde = " + String(G) + " Azul= " +String(B)) Ejecuta el programa de ejemplo y pulsa el botn. Aparecer un mensaje indicndote los valores individuales rojo, verde y azul que representan la propiedad BackColor del StaticText. Realizar un "Mouse - Over" sobre un componente Suponte que tienes un Static Text sobre una ventana. Cuando el puntero del ratn pasa por encima, el color del texto del Static Text cambia a color rojo. Cuando el puntero del ratn sale del Static Text, el color del texto es negro. [Evento mousemove de la ventana] // Simplemente para visualizar algo st_1.text = string(xpos) + ", " + string(ypos) IF xpos >= st_1.X AND (xpos <= st_1.x + st_1.Width) AND ypos >= st_1.y AND (ypos <= st_1.y + st_1.Height) THEN st_1.textcolor = 255 ELSE st_1.textcolor = 0 END IF Abriendo ficheros de ayuda sobre W95 o NT4 Si has desarrollado un fichero de ayuda con alguna herramienta de generacin de ayudas de W95, la funcin ShowHelp solo abrir la primera pgina o el ndice. Llama al programa de ayuda de Windows directamente y vers como funciona. Run("Winhlp32 " + ls_help_file) Cmo trazar la ejecucin de una aplicacin PB Ejecuta tu .exe con el argumento /pbdebug. Ejemplo: prog.exe /pbdebug Un fichero llamado prog.dbg se crear en tu directorio de trabajo. Esto es muy til si tu aplicacin se bloquea inesperadamente y quieres saber que script estaba siendo ejecutado en el momento del bloqueo. Es tambin muy til cuando falla el ejecutable pero en desarrollo no falla. Necesitars la siguiente dll para ejecutar las trazas. PBTRA050.DLL Insertar un retorno de carro en una cadena Tienes que insertar en la parte de la cadena donde quieres hacer el retorno de carro lo siguiente: ~n~r Es til para Messagebox con varias lneas. Ejemplo: Messagebox ("Error", "La base de datos ~n~r no se ha actualizado correctamente") Reinicializar un array sin lmite superior Imagina que ests llenando un array con valores. Ahora tu quieres reinicializar el array a su estado original, es decir, vaciarlo. PowerBuilder no tiene una funcin explicita para reinicializar arrays, as que tendrs que hacerlo manualmente como se describe ms abajo. Declara un array del mismo tipo que el que quieres reinicializar. Nunca pongas valores en este array. Cuando quieras reinicializar el array de trabajo, asignal al valor el array vaco. Esto limpiar el array de trabajo y hara que la funcin UpperBound retorne el valor correcto(cero). Mira el cdigo de ms abajo. string ls_EmptyArray[] string ls_NameArray[]

ls_NameArray[1] = "James" ... ms ... // vaciar el array ls_NameArray ls_NameArray = ls_EmptyArray Centrar una ventana (til si es de tipo response). Por Adolfo Chairez. Long ll_screenWidth,ll_screenHeight environment lenv_display if GetEnvironment(lenv_display) = 1 then ll_screenWidth = PixelsToUnits(lenv_display.screenwidth,XPixelsToUnits!) ll_screenHeight = PixelsToUnits(lenv_display.screenheight,YPixelsToUnits!) this.x = (ll_screenWidth - this.width) / 2 this.y = (ll_screenHeight - this.height) / 2 end if Encontrar la ltima posicin de una cadena dentro de otra. Por Pierluigi Ippolito. /******************************************************************** Pierluigi Ippolito - 24/02/2001 gf_last_pos Desc: Funcin para encontrar la ltima posicin de una cadena dentro de otra. Retorna: Long: La ltima posicin de as_string2 en string1. 0 si as_string2 no existe en as_string1 Acceso: Pblico Argumentos: as_string1: El string que quieres buscar en string2 as_string2: La cadena donde vas a buscar. ********************************************************************/ Long ll_Pos String ls_string1 , ls_string2 ll_Pos = Pos( as_string1 , as_string2 , 1 ) IF ll_Pos = 0 THEN RETURN 0 ls_string1 = reverse(as_string1) ls_string2 = reverse(as_string2) return (len(as_string1) - len(as_string2) - pos ( ls_string1 , ls_string2) + 2) Valores numricos para los colores estandar de windows. Windows Background: 1090519039 Button Face: 79741120 Windows Text: 33554432 Application Workspace: 276856960

S-ar putea să vă placă și