Tengo varias columnas que quiero recorrer, por ejemplo: 1.-Unidad es de 2 dígitos, 2.-Cod_pago es de 8 dígitos, 3.-Subunidad es de 2 dígitos, 4.-Rfc es de 13 dígitos, etc Si yo quisiera que la columna 2 no se visualizara, recorro la columna 3 a la 2 y la 4 a la 3, pero como power builder se recorre por medio de matrices cuando recorro la columna 3 a la 2 me deja 6 espacios, y cuando recorro la columna 4 a la 3 se ve separado de la columna 3, no se si esta un poco enredoso, mi pregunta es como le indico para que al recorrer las columnas no me deje espacios...
1 respuesta
Respuesta de Antonio Garcia
1
1
Antonio Garcia, clipper todas sus versiones (manejo total) power builder todas...
Hace unos dias atras respondi algo relacionado con el movimiento de las columnas. Permiteme incluir esa misma respuesta aqui. Creo que puede servirte de mucho. Aquí una Cada columna u objeto del datawindow object posee 2 propiedades que delimitan la ubicación física de dicho objeto, estas propiedades son por, y cada una corresponde a las coordenadas horizontal y vertical, respectivamente. Las propiedades en función de un objeto que se encuentra en un datawindow object, pueden ser modificadas por la función MODIFY(), que posee el datawindow control, Por ejemplo cambiar la ubicación horizontal de una columna debería ser. dw_1.MODIFY('<columna>.x = <nueva posicion>') La función modify, devuelve un valor del tipo string, si es "" todo fue bien de lo contrario marcará un error. Por ultimo recuerda que esta intentar va en función de la banda en donde se encuentra el objeto. El datawindow object contiene varias bandas, entr ellas, la cabecera, el detalle, sumario y pie, y por cada grupo de selección crea una nueva banda, por lo que los objetos se mueven dentro de dicha banda. Existe una propiedad que determina si el objeto forma parte de la banda o no, pero cambiar esta propiedad puede afectar visualmente el resultado final del datawindo Ademas encontré otra que igual te puede servir. No te preocupes, estoy para servirte, mi propuesta esta vez es que estipules un numero de orden en una propiedad de la columna, este valor lo puedes integrar en una propiedad llamada tag. La cual no tiene ningún efecto en power builder, simplemente es una propiedad para que el programador la pueda usar. Una vez tienes definido el orden ahora tendrás que hacer un par de funciones. (Lastimosamente power builder no tiene una ubicación por orden de columna sino que por cuadrante por, y) 2 funciones: La primera función, esta basada en el valor de la propiedad tag de cada columna, y guarda este valor de orden en una matriz de 3 columnas y n filas, Las columnas tienen: 1.- Orden 2.- posicion x 3.- posicion y Esta función lee las columnas del datawindow en el momento de abrir la pantalla o bien en el momento de la creación o en el evento CONSTRUCTOR, del datawindow control. Entonces dicha función lee los datos directamente de las columnas, esto lo consigues construyendo un ciclo del tipo for. De 1 a el valor que te devuenva la función describe (por cierto esta función devuelve valores string, tendrás que convertirlo a integer), con respecto a la propiedad COLUMN. COUNT esta propiedad posee el numero de columnas que tiene tu datawindow object. Una vez tienes el numero de columnas entras al proceso de lectura. por medio del for. Con la función describe(), preguntas los valores de por, y de cada columna, por medio de su intentar en el datawindow, al igual que preguntas por el valor de tag. Ejm. INTEGER li_col INTEGER li_for STRING ls_col_name li_col = INTEGER(dw_1.Describe("DataWindow.Column.Count")) FOR li_for = 1 TO li_col ls_col_name = dw_1.describe('#'+string(for)+'.name') matriz[li_for, 1] = INTEGER(dw_1.describe(ls_col_name+'.tag')) matriz[li_for, 2] = INTEGER(dw_1.describe(ls_col_name+'.y')) matriz[li_for, 3] = INTEGER(dw_1.describe(ls_col_name+'.y')) NEXT Cuando termine de hacer el for, ya tienes la intentar original de cada columna y el orden de ubicación. Ahora tienes que crear una función que haga lo contrario, utilizando la matriz (que por cierto debe ser global para tu pantalla.) En lugar de utilizar un describe(), ahora utilizas MODIFY(). Colocando los parámetros correspondientes. Y forzando a el datawindow object a poner las columnas en su intentar original. Finalizando. antes de modificar cualquier posicion en el datawindow object. Utiliza la función SETREDRAW(<true/false>), esta función apaga el movimiento del video o actividad de despliegue del datawindow object. Si le envías un argumento FALSE, lo apaga y si es TRUE lo enciende. Entonces antes de hacer la re-ubicación de las columnas, apagas el movimiento del video y cuando finalices lo encientes.