Professional Documents
Culture Documents
5
Este 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.
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
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;
Algunas veces es necesario contar cuantas filas se han seleccionado en un datawindow. Para esto se puede usar la siguiente expresin. long ll_Selected ll_Selected = long(dw_1.describe(evaluate('sum( if(IsSelected(), 1, 0) for all)',1)))
if ( mod(getrow(),2) = 0, color1, color2 ) Donde color1 y color 2 los puede cambiar por sus colores favoritos asi: if ( mod(getrow(),2) = 0, RGB(159,166,213), RGB(232,218,140) )
//debajo de la barra de herramientas mdi_1.Resize (nWidth, nHeight - 200 ) //resto 200 para dar espacio a mi uo_1 // en la parte inferior de la ventana uo_1.move(0, mdi_1.height + 110 ) // muevo uo_1 hacia la parte inferior del workspace Espero les sirva en sus proyectos.
luego precionan el boton y vern //**************************script String ls_unidades[], ls_decenas[], ls_centenas[] string ls_valor1[] = {' mil ', ' millones ', ' billones '} string ls_valor2[] = {' mil ', ' milln ', ' billn '} String ls_decimal Integer li_len, i string oracion_hasta_aqui ls_unidades[1] = 'un' ls_unidades[2] = 'dos' ls_unidades[3] = 'tres' ls_unidades[4] = 'cuatro' ls_unidades[5] = 'cinco' ls_unidades[6] = 'seis' ls_unidades[7] = 'siete' ls_unidades[8] = 'ocho' ls_unidades[9] = 'nueve' ls_unidades[10] = 'diez' ls_unidades[11] = 'once' ls_unidades[12] = 'doce' ls_unidades[13] = 'trece' ls_unidades[14] = 'catorce' ls_unidades[15] = 'quince' ls_unidades[16] = 'dieciseis' ls_unidades[17] = 'diecisiete' ls_unidades[18] = 'dieciocho' ls_unidades[19] = 'diecinueve' ls_unidades[20] = 'veinte' ls_unidades[21] = 'veintiun' ls_unidades[22] = 'veintidos' ls_unidades[23] = 'veintitres' ls_unidades[24] = 'veinticuatro' ls_unidades[25] = 'veinticinco' ls_unidades[26] = 'veintiseis' ls_unidades[27] = 'veintisiete' ls_unidades[28] = 'veintiocho' ls_unidades[29] = 'veintinueve' ls_decenas[3] = 'treinta' ls_decenas[4] = 'cuarenta' ls_decenas[5] = 'cincuenta' ls_decenas[6] = 'sesenta' ls_decenas[7] = 'setenta' ls_decenas[8] = 'ochenta' ls_decenas[9] = 'noventa' ls_centenas[1] = 'ciento' ls_centenas[2] = 'doscientos' ls_centenas[3] = 'trescientos' ls_centenas[4] = 'cuatrocientos' ls_centenas[5] = 'quinientos' ls_centenas[6] = 'seiscientos' ls_centenas[7] = 'setecientos'
ls_centenas[8] = 'ochocientos' ls_centenas[9] = 'novecientos' STRING cadena_total, cadena_entera, oracion, parte, caso_0, caso_1, caso_2, concatena1, envio1, caso_3, caso_4, envio4, concatena4, envio3, & caso_5, caso_6, concatena7, caso_7, envio6, caso_8, envio9, caso_9, concatena10, caso_10, para10, valor9, caso_11, caso_12, dos_decimales long deci_punto, li_i double parte1, parte0, parte3, parte4, parte7, parte6, parte9, parte10 cadena_total = sle_1.text deci_punto = pos(cadena_total,.) cadena_entera = left(cadena_total,deci_punto - 1) dos_decimales = right(cadena_total,2) for li_i = li_i to len(cadena_entera) -1 parte = mid(cadena_entera,len(cadena_entera) - li_i, 1 ) choose case li_i case 0 caso_0 = ls_unidades[(double(parte))] parte0 = (double(parte)) oracion_hasta_aqui = ls_unidades[(double(parte))] case 1 if ls_unidades[(double(parte))] = un or ls_unidades[(double(parte))] = dos then envio1 = ls_unidades[(double(parte))] parte1 = (double(parte)) concatena1 = string(parte1)+ string(parte0) caso_1 = ls_unidades[(double(concatena1) ) ] oracion_hasta_aqui = caso_1 else caso_1 = ls_decenas[(double(parte))] + y oracion_hasta_aqui = caso_1 + caso_0 end if case 2 caso_2 = ls_centenas[(double(parte))] if envio1 = un or envio1 = dos then oracion_hasta_aqui = caso_2 + + caso_1 else oracion_hasta_aqui = caso_2 + + caso_1 + caso_0 end if case 3 parte3 = (double(parte)) envio3 = ls_unidades[(double(parte))] if ls_unidades[(double(parte))] = un then caso_3 = ls_valor1[1] else caso_3 = ls_unidades[(double(parte))] + ls_valor1[1] end if if envio1 = un or ls_unidades[(double(parte))] = dos then oracion_hasta_aqui = caso_3 + + caso_2 + + caso_1 else oracion_hasta_aqui = caso_3 + +caso_2 + + caso_1 + caso_0 end if case 4
10
if ls_unidades[(double(parte))] = un or ls_unidades[(double(parte))] = dos then parte4 = (double(parte)) concatena4 = string(parte4)+ string(parte3) caso_4 = ls_unidades[(double(concatena4) ) ] if envio1 = un or envio1 = dos then oracion_hasta_aqui = caso_4 + +ls_valor1[1] + + caso_2 + + caso_1 else oracion_hasta_aqui = caso_4 + +ls_valor1[1] + + caso_2 + + caso_1 + + caso_0 end if else caso_4 = ls_decenas[(double(parte))] + y if envio1 = un or envio1 = dos then if envio3 = un then oracion_hasta_aqui = caso_4 + +envio3+ +ls_valor1[1] + + caso_2 + + caso_1 else oracion_hasta_aqui = caso_4 + +envio3+ +ls_valor1[1] + + caso_2 + + caso_1 end if else if envio3 = un then oracion_hasta_aqui = caso_4 + + envio3 + +caso_3 + +caso_2 + +caso_1 + + caso_0 else oracion_hasta_aqui = caso_4 + +caso_3 + +caso_2 + +caso_1 + + caso_0 end if end if end if case 5 caso_5 = ls_centenas[(double(parte))] oracion_hasta_aqui = caso_5 + + oracion_hasta_aqui case 6 parte6 = (double(parte)) if ls_unidades[(double(parte))] = un then caso_6 = ls_unidades[(double(parte))] + ls_valor2[2] else caso_6 = ls_unidades[(double(parte))] + ls_valor1[2] end if envio6 = oracion_hasta_aqui oracion_hasta_aqui = caso_6 + + oracion_hasta_aqui case 7 if ls_unidades[(double(parte))] = un or ls_unidades[(double(parte))] = dos then parte7 = (double(parte)) concatena7 = string(parte7)+ string(parte6) caso_7 = ls_unidades[(double(concatena7) ) ] oracion_hasta_aqui = caso_7 + + ls_valor1[2] +envio6 else caso_7 = ls_decenas[(double(parte))] + y oracion_hasta_aqui = caso_7 + oracion_hasta_aqui end if case 8 caso_8 = ls_centenas[(double(parte))]
11
oracion_hasta_aqui = caso_8 + + oracion_hasta_aqui case 9 parte9 = (double(parte)) if ls_unidades[(double(parte))] = un then para10 = si caso_9 = ls_valor1[1] valor9 = ls_unidades[(double(parte))] else caso_9 = ls_unidades[(double(parte))] + ls_valor1[1] end if envio9 = oracion_hasta_aqui oracion_hasta_aqui = caso_9 + + oracion_hasta_aqui case 10 if ls_unidades[(double(parte))] = un or ls_unidades[(double(parte))] = dos then parte10 = (double(parte)) concatena10 = string(parte10)+ string(parte9) caso_10 = ls_unidades[(double(concatena10) ) ] oracion_hasta_aqui = caso_10+ + ls_valor1[1] +envio9 else if para10 = si then caso_10 = ls_decenas[(double(parte))] + y + valor9 oracion_hasta_aqui = caso_10 + oracion_hasta_aqui else caso_10 = ls_decenas[(double(parte))] + y oracion_hasta_aqui = caso_10 + oracion_hasta_aqui end if end if case 11 caso_11 = ls_centenas[(double(parte))] oracion_hasta_aqui = caso_11 + + oracion_hasta_aqui case 12 if ls_unidades[(double(parte))] = un then caso_12 = ls_unidades[(double(parte))] + ls_valor2[3] oracion_hasta_aqui = caso_12 + oracion_hasta_aqui else caso_12 = ls_unidades[(double(parte))] + ls_valor1[3] oracion_hasta_aqui = caso_12 + oracion_hasta_aqui end if end choose next messagebox(tome chichi, oracion_hasta_aqui + +con + + dos_decimales + /100)
12
Equivale escribir Cb_1.hide(); Cb_1.show(); Para la asignacin de la funcin Move(x,y); Cb_1.x = 100; Cb_1.Y = 200; Equivale escribir Cb_1.move(100,200); Para la asignacin de la funcin resize ( widht, height ); Cb_1.widht = 450; Cb_1.height = 500; Equivale escribir Cb_1.resize(450,500); Para la asignacin de valores a las variables b = b+1 equivale b++ b=b-1 Equivale b-b=b+3 equivale b+=3 NOT b AND NOT c equivale NOT(b or c) En caso de utilizar SQL. String ls_apellidos, ls_nombres; SELECT apaterno, nombre INTO :ls_apellidos, :ls_nombres FROM tpersonal WHERE dni=40284874; sle_1.text = ls_apellidos; sle_2.text= ls_nombres; Equivale escribir: SELECT apaterno, nombre INTO :sle_1.text, :sle_2.text FROM tpersonal WHERE dni=40284874; Para la asignaciones de valores en el control datawindow Dw_1.object.nombre[dw_1.getrow()] =RONY; Equivale escribir Dw_1.setitem(dw_1.getrow(),nombre,RONY); //a diferencia del object, en esta sentencia puedo utilizar variables en la asignacin de campos,
13
Ejemplo titulo: campo_t detalle : campo String ls_band, ls_name long ll_temp, i ls_band = this.GetBandAtPointer() ls_name = dwo.Name ls_name = Left(ls_name, Len(ls_name) - 2) // Verifico si dio el click en la cabecera if mid(ls_band,1,pos(ls_band,~t) - 1) = 'header' then // Verifico si es una columna if this.describe(ls_name + .ID) '!' then // Si es una columna pregunto ahora si tiene presionada la tecla de control if pos(is_sort, is_pre_sort) = 0 then if keydown( KeyControl! ) then // En el caso de que tuviese presionada la tecla de control se siguen sumando las columnas // seleccionadas con click if pos(is_sort, ls_name) = 0 then if is_sort then is_sort += , is_sort += ls_name + A else if pos(is_sort, ,) = 0 then is_sort = else if pos(is_sort, ls_name) = 1 then is_sort = replace(is_sort, pos(is_sort, ls_name), len(ls_name) + 4, ) else is_sort = replace(is_sort, pos(is_sort, ls_name) - 2, len(ls_name) + 4, ) end if end if end if else is_sort = This.SetSort(is_pre_sort + ls_name + A) This.Sort() This.GroupCalc() end if end if end if end if
14
END IF Esta solucin no la invent yo...es un dato de un amigo. Espero que les sirva.
15
millsec uint [evento clicked del boton] str_systemtime lstr_systemtime lstr_systemtime.year = 1999 lstr_systemtime.month = 1 // January = 1 and so on. lstr_systemtime.dayweek = 0 // not used lstr_systemtime.day = 3 lstr_systemtime.hour = 12 lstr_systemtime.min = 0 lstr_systemtime.sec = 0 lstr_systemtime.millsec = 0 SetLocalTime(lstr_systemtime)
28. Busqueda en un DW
Cdigo que permite hacer una busqueda en un DW tipo grid. Se ubica en la fila donde esta el dato buscado. El secreto esta en colocar los nombres de los titulos de las columnas del DW grid con el mismo nombre del campo adcionandole _t al final. Ejemplo: columna codigo, titulo codigo_t. En la propiedad text del titulo de la columna colocas Cdigo. Esta palabra ser la que se vea en la lista de campos a buscar Espero sea claro. /////////////////////////////////////////////////////////////////////////////////////////////////// // Nombre Programa :OPEN DE LA VENTANA DE BUSQUEDA // Fecha / Autor : ABAD // Descripcin: CARGA LOS DATOS DE LAS COLUMNAS DEL DATAWINDOWS ACTUAL ////////////////////////////////////////////////////////////////////////////////////////////////// // VARIABLES integer li_columnas, li_i, li_pos string ls_nombrecolumna, ls_name // //cargar las columnas del dw existente li_columnas = integer(w_mantenimiento.dw_1.Object.DataWindow.Column.Count) for li_i = 1 TO li_columnas w_mantenimiento.dw_1.setcolumn(li_i) ls_nombrecolumna = w_mantenimiento.dw_1.getcolumnname() ls_name = w_mantenimiento.dw_1.DESCRIBE(ls_nombrecolumna+_t.text) ls_name = ls_name +space(100)+*+ls_nombrecolumna ddlb_1.Additem(ls_name) NEXT sle_1.setfocus() dw_1.settransobject(sqlca) si_fila = 0 EVENTO CLIC DEL BOTON BUSCAR /////////////////////////////////////////////////////////////////////////////////////////////////// // // Nombre Programa :BUSCAR DATOS EN EL DATAWINDOW POR COLUMNA AL HACER CLIC EN ESTE BOTON // Fecha / Autor : ABAD
16
// // Descripcin: SE UBICA EN LA FILA DEL DATO BUSCADO // // Valor que Retorna : ninguno // ////////////////////////////////////////////////////////////////////////////////////////////////// // VARIABLES string ls_sql, ls_where, ls_columna, ls_buscar, ls_Dato, ls_dw integer li_pos, li_i // ls_sql = ddlb_1.text ls_dato = TRIM(sle_1.text) IF len(ls_dato) 0 THEN ls_dw = mid(ls_dw, 1, li_pos - 1) END IF // // adicionar al script del select el where de acuerdo a la columna // con el codigo a buscar ls_dw = ls_dw + WHERE +w_mantenimiento.dw_1.DESCRIBE(ls_columna+.dddw.datacolumn) + = '+ls_sql+' dw_1.setsqlselect(ls_dw) IF dw_1.retrieve() > 0 THEN ls_sql = TRIM(dw_1.getitemstring(1, w_mantenimiento.dw_1.DESCRIBE(ls_columna+.dddw.displaycolumn))) IF ls_sql = ls_dato THEN w_mantenimiento.dw_1.SelectRow(si_antselec, FAlSE) w_mantenimiento.dw_1.SelectRow(li_i, TRUE) w_mantenimiento.dw_1.scrolltorow(li_i) w_mantenimiento.dw_1.setrowfocusindicator(FocusRect! ,0,0) li_pos = li_i li_i = w_mantenimiento.dw_1.rowcount() END IF END IF NEXT ELSE w_mantenimiento.dw_1.setcolumn(ls_columna) //verificar si el valor es un numero ls_sql = ddlb_1.text IF pos(ls_sql, Valor, 1) > 0 THEN //es numerico ls_buscar = ls_columna + = +trim(sle_1.text)+ ELSE ls_buscar = ls_columna + = '+trim(sle_1.text)+' END IF li_pos = w_mantenimiento.dw_1.find(ls_buscar, 1, w_mantenimiento.dw_1.rowcount() ) IF li_pos > 0 THEN si_fila = li_pos w_mantenimiento.dw_1.SelectRow(si_antselec, FAlSE) w_mantenimiento.dw_1.SelectRow(li_pos, TRUE) w_mantenimiento.dw_1.scrolltorow(li_pos) w_mantenimiento.dw_1.setrowfocusindicator(FocusRect! ,0,0)
17
ELSE si_fila = 0 END IF END IF END IF END IF si_antselec = li_pos EVENTO CLIC DEL BOTON SIGUIENTE /////////////////////////////////////////////////////////////////////////////////////////////////// // Nombre Programa :BUSCAR DATOS EN EL DATAWINDOW POR COLUMNA AL HACER CLIC EN ESTE BOTON // DESDE LA FILA ACTUAL // Fecha / Autor : ABAD // Descripcin: SE UBICA EN LA FILA DEL DATO BUSCADO ////////////////////////////////////////////////////////////////////////////////////////////////// si_fila = w_mantenimiento.dw_1.getrow() IF si_fila = w_mantenimiento.dw_1.rowcount() THEN si_fila = 0 END IF cb_1.triggerevent(clicked!)
18
del
Control
Datawindow
con
la
funciones
Este ejemplo es practico para la recuperacin de la informacin que contiene nuestro control datawindow, quiero hacer mencin que la recuperacin que realiza esta funcin es solo para los campos de tipo caracater, pero descuiden que exiten otras funciones para la recuperacin de los distintos tipos de datos como (getitemdate, getitemdecimal, getitemnumber...) y la sintaxis es similar a esta. Para este ejemplo se esta utilizando la siguiente tabla |--------------------------|ttrabajador |--------------------------|idtrabajador (CHAR(20) |apaterno (CHAR(30) |amateno (CHAR(30) |nombres (CHAR(50) |--------------------------y los siguientes controles en nuestra aplicacin cb_extrae
19
dw_trabajador //----------------cb_extrae----------------------------------------------event clicked //-------------------------------------------------------------------------//declaramos las variables integer li_row; string ls_apaterno, ls_amaterno, ls_nombres; // ubicamos el registro activo del control datawindow li_row = dw_trabajador.getrow(); //recuperamos los datos desde el buffer del datawindow ls_apaterno = dw_trabajador.getitemstring(li_row,apaterno); //recuperamos el apellido paterno ls_amaterno = dw_trabajador.getitemstring(li_row,amaterno); //recuperamos el apellido materno ls_nombres = dw_trabajador.getitemstring(li_row,nombres); //recuperamos los nombres //visualizamos la informacin recuperada messagebox(trabajador, ls_apaterno+ +ls_amaterno+, +ls_nombres );
20
messagebox(Error al Guardar,s_msj, Exclamation! ); end if; //--------------------------------------------event dberror) //------------------------------------------CHOOSE CASE SQLdbcode CASE -195 //error por falta de datos S_MSJ =S_MSJ+ - Verifique que todos los datos esten registrados+char(13)+char(13); CASE -194 //cuando la tabla maestra no encuentra relacion al detalle S_MSJ =S_MSJ+ - El ruc o Und/Costo no esta creado o no es correcto+char(13)+char(13); CASE -193 //cuando existen datos duplicados S_MSJ =S_MSJ+ - La partida ingresada ya existe, verifique los datos ingresados+char(13)+char(13); CASE -198 //error cuando la tabla maestra no puede eliminar el detalle S_MSJ =S_MSJ+ - Para eliminar este tratamiento contable Debe elimar sus relaciones, Posiblemente ya se haya utilizado en algunos do*****entos si es asi NO SE PUEDE ELIMINAR +char(13)+char(13); CASE ELSE //para otros errores no previstos S_MSJ =S_MSJ+ STRING (SQLDBCODE)+ +SQLERRTEXT; END CHOOSE; // retorna el codigo que suprime el error RETURN 1;
21
SELECT 1 FROM DUAL WHERE 1 = 2; la llamamos dw_composite_hija, y la enganchamos 10 veces a la composite padre dandoles los nombres a los controles de dw_comp1, dw_comp2, dw_comp3, ... dw_comp10 a la composite la llamaremos dw_composite. me seguis a estas alturas? 3) asignamos las datawindows que deseamos imprimir a un array de datawindows que llamaremos adw_dw[] 4) creamos datawindows temporales en la libreria dinamica composite.pbd for li_idx = 1 to Min(UpperBound(adw_dw),10) ls_syntax = string(adw_dw[li_idx].object.datawindow.syntax) LibraryImport ('c:prjscomposite.pbd','dw_comp' + string(li_idx),ImportDataWindow!,ls_syntax,ls_er,'') next 5) Creamos un datastore con la composite original (la que tenia comodines) y reemplazamos las datawindows del array por las comodines, con un codigo del estilo siguiente: ds = CREATE datastore ds.dataobject = 'dw_composite' if UpperBound(adw_dw) > 0 then ds.object.dw_1.dataobject = 'dw_comp1' if UpperBound(adw_dw) > 1 then ds.object.dw_2.dataobject = 'dw_comp2' if UpperBound(adw_dw) > 2 then ds.object.dw_3.dataobject = 'dw_comp3' if UpperBound(adw_dw) > 3 then ds.object.dw_4.dataobject = 'dw_comp4' if UpperBound(adw_dw) > 4 then ds.object.dw_5.dataobject = 'dw_comp5' if UpperBound(adw_dw) > 5 then ds.object.dw_6.dataobject = 'dw_comp6' if UpperBound(adw_dw) > 6 then ds.object.dw_7.dataobject = 'dw_comp7' if UpperBound(adw_dw) > 7 then ds.object.dw_8.dataobject = 'dw_comp8' if UpperBound(adw_dw) > 8 then ds.object.dw_9.dataobject = 'dw_comp9' if UpperBound(adw_dw) > 9 then ds.object.dw_10.dataobject = 'dw_comp10' si has llegado hasta aqui ya te queda poco ... 6) Recuperamos los datos y los imprimimos ds.SetTransObject(SQLCA) ds.Retrieve() ds.Print () VOILA !!! Es un poco complejo pero funciona como la seda (El codigo lo tengo ya en produccion). Faltaran algunos detallitos: como recuperar el path de la pbd en ejecucion?, como recuperar el path de desarrollo? (para que funcione sin compilar) y alguna cosilla mas que no comento aqui por ser trucos ya comentados. Espero que el truquito os sea de tanta utilidad como a mi, y animo ... un saludo a todos de un programador ya veterano (desde la version PB3) Alfonso
22
LIBRARY kernel32.dll ALIAS FOR GetDriveTypeA [se declara una funcion que retorne un string of_GetCDRootPath()] integer li_ctr string ls_root ulong lul_drives, lul_rem lul_drives = GetLogicalDrives() DO lul_rem = MOD(lul_drives, 2) IF lul_rem = 1 THEN ls_root = Char(li_ctr + 64) + : IF GetDriveType(ls_root_path) = 5 THEN Return ls_root_path END IF li_ctr ++ END IF lul_drives /= 2 LOOP UNTIL lul_drives = 0 RETURN
23
24
OPEN DYNAMIC dyn_cursor; if sqlca.sqlcode < 0 then MessageBox(Error de Base de datos!, sqlca.sqlerrtext) return sqlca.sqlcode end if ddlb_parm.SetRedraw(false) ddlb_parm.Reset( ) Do While sqlca.sqlcode = 0 Fetch dyn_cursor into :ls_add_string; if sqlca.sqlcode = 0 then ddlb_parm.AddItem(ls_add_string) elseif sqlca.sqlcode < 0 then MessageBox(Error de Base de datos, sqlca.sqlerrtext) return sqlca.sqlcode else exit end if Loop ddlb_parm.SetRedraw(true) Close dyn_cursor; return 0
25
dw_1.Create((s1 + s2 + ')' + s3 + String(s4) + s5),errores) 45. EXPORTAR DATAWINDOWS A FICHERO Para exportar datawindos a Excel , se puede utilizar el mtodo SaveAsAscii del control DataWindow, por ejemplo: dw_listado.SaveAsAscii(ls_pathfichero, '~t', '') donde ls_pathfichero es la ruta entera del fichero en el cul queremos exportar el datawindow con extensin xls, txt etc ... El nombre del fichero lo podemos recoger con la funcin GetFileSaveName
26
d_FechaInicio = Date('01/01/'+String(Year(d_FechaActual))) l_Semanas = DaysAfter(d_FechaInicio, d_FechaActual) / 7 Donde l_Semanas capturar el nmero de la semana.
27
If b_juegocar Then // si es una palabra cambia las letras para realizar la busqueda str_texto= Replace(str_texto, i, 1,[+str_cambio[vocal]+]) i+=len([+str_cambio[vocal]+])-1 Else //para el caso de una frase si aplicas % no se puede utilizar [] str_texto= Replace(str_texto, i, 1,_) End if End if Next return str_texto end function
28
aux = aux + temp + Else lb_1.DirList( raiz + *.ppp,16 ) End If total = lb_1.TotalItems() For i=1 to total array[i] = mid(lb_1.Text(i), 2,(Len(lb_1.Text(i))-2)) Next For j=1 to total if array[j] .. Then var.Children = True var.Label = array[j] var.PictureIndex = 1 var.SelectedPictureIndex = 2 st_1.Text = aux + var.label posi = tv_1.InsertItemLast(pos,var) //tv_1.ExpandAll(pos) temp = var.Label pos = posi recursivo() pos = tv_1.FindItem( ParentTreeItem!, pos ) If pos [-Directorio-] */ //con el siguiente codigo Boolean flag = False Int a=1,b b = len(aux)-1 aux = Mid(aux,1,b) b=1 Do While flag = False If Pos ( aux, '' , b ) = 0 Then flag = true Else a = Pos ( aux, '' , b ) b=a+1 End If Loop aux = Mid ( aux, 1 , a ) /* y listo ya tienen tu treeview con todas las carpetas del sistema ;D */ Saludos desde Ciudad Victoria, Tamaulipas, Mexico Si quieren que les pase el PLB mandenme un mail para que se los envie :D
29
luego podemos crear una funcion para obtener el nombre de usario llamada f_user que devuelve un string y escribimos lo siguiente string ls_NullString, ls_UserName long ll_largo SetNull (ls_NullString) ls_UserName = Space (256) ll_largo = 256 WNetGetUser(ls_nullString, ls_UserName, ll_largo) return trim (ls_UserName) Luego creamos la funcion f_namehost que devuelve un string y escribimos lo siguiente string ls_ComputerName long ll_largo ls_ComputerName = space (256) ll_largo = 256 GetComputerName (ls_ComputerName, ll_largo) return trim (ls_ComputerName) Luego llamamos de cualquier parte de nuestro codigo a las funciones string ls_namehost , ls_user ls_namehost = f_namehost() ls_user= f_user()
30
istr_choosecolor.lpcustcolors = ibl_customcolors istr_choosecolor.lStructSize = 36 SetNull(istr_choosecolor.hwndOwner) istr_choosecolor.flags = 3 istr_ChooseColor.rgbresult = 0 ChooseColorA ( istr_choosecolor ) this.modify(Datawindow.color='+ string(istr_ChooseColor.rgbresult)+') * Al ejecutar y dar click derecho sobre la datawindow seleccionada cambiar el color de fondo de ella. * Hagan pruebas cambiando el valor de istr_choosecolor.flags * Hago el alcanse que a partir de PowerBuilder 8, existe la funcion ChooseColor, similar a esta solucin.
31
long lpMaximumComponentLength, REF long lpFileSystemFlags, REF string lpFileSystemNameBuffer, long nFileSystemNameSize) LIBRARY Kernel32.dll ALIAS FOR GetVolumeInformationA Luego en el powerscript de donde lo necesite coloca lo siguiente: String ls_volbuffer, ls_fsname Long ll_serial, ll_MaxCompLength, ll_FileSystemFlags, ll_rtn ls_volbuffer = Space(255) ls_fsname = Space(255) ll_maxCompLength = 0 ll_FileSystemFlags = 0 ll_rtn = GetVolumeinformation(C:, ls_volbuffer, 255, ll_serial, & ll_MaxCompLength, ll_FileSystemFlags , ls_fsname, 255) // ls volbuffer - Nombre del volumen // ll_serial - Numero serial del disco Duro // ls_fsname - Nombre del sistema de Archivos Ej.. NTFS
32
ELSE lb_Bool = FALSE END IF Nuevo script: lb_Bool = dw_1.GetItemString( 1, column ) = AND Saludos.
33
/*El argumento que se le pasa es la ltima fila a la que se le hizo click. Esta funcin usa una varianle de instacia existente llamada il_ultimafila para hace el scrolling. El cdigo de el evento es este:*/ integer li_i this.SetReDraw ( FALSE ) IF il_ultimafila = 0 THEN this.SelectRow ( al_fila, TRUE ) Return END IF IF il_ultimafila > al_fila THEN FOR li_i = il_ultimafila to al_fila STEP -1 this.selectrow( li_i, TRUE) NEXT ELSE FOR li_i = il_ultimafila to al_fila this.selectrow( li_i, TRUE) NEXT END IF this.SetReDraw ( TRUE ) 4. Coloque el siguiente cdigo en el evento clicked del datawindow /* Row es un argumento del evento clicked y contiene el nmero de fila al que se hizo click. Si row = 0, entonces el usuario no hizo en en una fila*/ IF row = 0 THEN Return IF KeyDown ( KeyShift! ) THEN /* El evento ue_seleccionarfila se describe en el punto 2 y 3 anteriormente */ this.Event ue_seleccionarfila ( row ) ELSEIF KeyDown ( KeyControl! ) THEN IF this.GetSelectedRow ( row - 1 ) = row THEN this.SelectRow ( row, FALSE ) ELSE this.SelectRow ( row, TRUE ) END IF ELSE this.SelectRow ( 0, FALSE ) this.SelectRow ( row, TRUE ) END IF // Salva la fila a la que se hace click en la variable de instancia para usarla en ue_seleccionarfila il_ultimafila = row
34
Para poder colocar el texto en negrilla de los botones de texto realiza lo siguiente: Si desea el texto en negrilla coloca cb_1.weight = 700 Pero si lo desea normal coloca cb_1.weight = 400
35