FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Una columna check en un browse.
Posts: 632
Joined: Thu Jan 19, 2006 10:45 AM
Una columna check en un browse.
Posted: Wed May 05, 2010 07:00 AM
Hola compañeros, hasta ahora nunca había necesitado poner filigranas a mi browse puesto que tan solo mostraba datos de la BD. Ahora quiero poner columnas que bien muestren una imagen determinada o realicen chequeos de ficheros externos referenciados desde la base de datos. Deciros que el browse se forma en tiempo de ejecución y varia de una de una base de datos a otra. Os pongo un ejemplo para ver si me podeis ayudar.


Code (fw): Select all Collapse
 //Así funciona perfecto.
/*-----------------------------------
//En fichero externo guardo las columnas que quiero que muestre el browse es la zona del [DB]
//El primer campo que guardo es el nombre del campo y por cada uno lo guardo en un array  que llamo f_expd[]
//El segundo campo es un array con el nombre que aparece en las columnas f_nomd[]
//El tercero el numero de orden de la columna.....
[DB]
ID;NOMBRE;1;;
FECHA;FECHA;2;;
HORA;HORA;3;;
NOTAS;NOTAS;4;;
[TEXT]
N§.PAG;if(type("x_npag")<>"U",str(x_npag,3),"");
[FIN]
--------------------------------------*/

//Zona de codigo del browse.
  for nPos := 1 to Len(f_expd)                         // Array con NOMBRE DE CAMPOS
           ADD COLUMN TO BROWSE oBrw;                         //
                  HEADER f_nomd[nPos] OEM ;                      // Array con TITULOS DE LAS COLUMNAS
                  DATA FieldWBlock( f_expd[nPos] , Select())     // Aca se genera el CodeBlock para el CAMPO
  Next


Hasta aqui todo perfecto tanto con TCBROWSE como con XBROWSE funciona perfecto, pero ahora me gustaria implemenetar lo que os he comentado, una columna de chequeo o que aparezca una imagen cumpliendo una condición. He empezado por hacerlo fácil solo quiero que me ponga un carácter para ver como lo tengo que hacer. Para ver lo que quiero hacer fijaros en lo que he añadido en [DB] una columna mas con un if para que me muestre un caracter determinado.

Code (fw): Select all Collapse
 //Así con la incorporación de otra columna a mostrar falla.
/*-----------------------------------
//En fichero externo guardo las columnas que quiero que muestre el browse es la zona del [DB]
//El primer campo que guardo es el nombre del campo y por cada uno lo guardo en un array  que llamo f_expd[]
//El segundo campo es un array con el nombre que aparece en las columnas f_nomd[]
//El tercero el numero de orden de la columna.....
//El cuarto es un if de control que almaceno en otro array que solo se ejecuta si esta presente, que le llamo f_fund[]
[DB]
ID;NOMBRE;1;;
;VOZ  ;2;iif(file('.\DAT\SND\'+alltrim(q_t)+'.Wav'),'X', '');   <<<<<<<<<<<<<<<<Aqui despues de la sección de nº de orden de la columna le añado una condición
FECHA;FECHA;3;;
HORA;HORA;4;;
NOTAS;NOTAS;5;;
[TEXT]
N§.PAG;if(type("x_npag")<>"U",str(x_npag,3),"");
[FIN]
---------------------------------------------------------*/

//Zona de codigo del browse.
//Si le añado la columna a mano funciona 
//    ADD COLUMN TO BROWSE oBrw ;
//         HEADER "Voz" OEM ;
//         DATA  iif(file('.\DAT\SND\'+alltrim(q_t)+'.Wav'),'X', ''));
//         CENTER 
//Si lo hago en tiempo de ejecución no funciona....

  for nPos := 1 to Len(f_expd)                         // Array con NOMBRE DE CAMPOS
        if  Empty(f_fund[nPos])
               ADD COLUMN TO BROWSE oBrw;                      //
                       HEADER f_nomd[nPos] OEM ;                          // Array con TITULOS DE LAS COLUMNAS
                       DATA FieldWBlock( f_expd[nPos] , Select())     // Aca se genera el CodeBlock para el CAMPO
        else
            ADD COLUMN TO BROWSE oBrw;        //
                        HEADER f_nomd[nPos] OEM ; // Array con TITULOS DE LAS COLUMNAS
                        DATA   {|| f_fund[nPos] ) ; //Array con una FUNCION en mi caso es un iif(,,) <<<<<Aqui el error
                        CENTER    
        endif

    next


Alguien se le ocurre como tengo que poner los datos para que funcione. Este es un ejemplo muy simple pero me gustaria que mostrara Bitmaps.... pero creo que una vez solucionado esto bastara poner BITMAP DATA . Supongo que es un tema de como tengo que mostrar el array en tiempo de ejecución, en el anterior se solucionó con el FieldWBlock, pero ignoro como hacerlo en este caso.
Saludos



Andrés González desde Mallorca
Posts: 632
Joined: Thu Jan 19, 2006 10:45 AM
Re: Una columna check en un browse.
Posted: Wed May 05, 2010 09:40 AM
Bueno después de mucho jugar con el código he conseguido que funcione de esta manera pero no me digáis que es lo que he hecho. Seguro que los especialistas en browses me podrán decir alguna manera más elegante de hacerlo.
Code (fw): Select all Collapse
//Añado una columna por cada campo de la base de datos u otra columna que ejecute un check de alguna condición
    for nPos := 1 to Len(f_expd)                         // Array con NOMBRE DE CAMPOS
        if  Empty(f_fund[nPos])
              ADD COLUMN TO BROWSE oBrw;                         //
            HEADER f_nomd[nPos] OEM ;                      // Array con TITULOS DE LAS COLUMNAS
            DATA FieldWBlock( f_expd[nPos] , Select())     // Aca se genera el CodeBlock para el CAMPO
        else
            x_temp := f_fund[nPos] //<<<<<<<<<<<<<<<<<Esto
                ADD COLUMN TO BROWSE oBrw;                         //
            HEADER f_nomd[nPos] OEM ;                      // Array con TITULOS DE LAS COLUMNAS
            DATA  &('{|| ' + x_temp + ' }')  ; //<<<<<<<<<<<<<<<Y esto
               CENTER    
        endif
Saludos



Andrés González desde Mallorca
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Una columna check en un browse.
Posted: Wed May 05, 2010 09:49 AM
Andrés,

Tienes un ejemplo usando bitmaps en FWH\samples\testxbr3.prg en la opción del menú: Window - Selected Cols - RDD
:-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 632
Joined: Thu Jan 19, 2006 10:45 AM
Re: Una columna check en un browse.
Posted: Wed May 05, 2010 10:09 AM
Finalmente me he saltado el paso de la variable. Lo he dejado asi.
Code (fw): Select all Collapse
    //Añado una columna por cada campo de la base de datos
    for nPos := 1 to Len(f_expd)                         // Array con NOMBRE DE CAMPOS
        if  Empty(f_fund[nPos])
              ADD COLUMN TO BROWSE oBrw;                         //
                      HEADER f_nomd[nPos] OEM ;                      // Array con TITULOS DE LAS COLUMNAS
                      DATA FieldWBlock( f_expd[nPos] , Select())     // Aca se genera el CodeBlock para el CAMPO
        else
                ADD COLUMN TO BROWSE oBrw;                         //
                        HEADER f_nomd[nPos] OEM ;                      // Array con TITULOS DE LAS COLUMNAS
                        DATA  &('{|| ' + (f_fund[npos]) + ' }')  ; // <<<<<<<<<<<<<<<<<<<<< Lo simplificado así.
            CENTER    
        endif

    next
Saludos



Andrés González desde Mallorca
Posts: 632
Joined: Thu Jan 19, 2006 10:45 AM
Re: Una columna check en un browse.
Posted: Wed May 05, 2010 10:17 AM

Si gracias Antonio, lo tenia presente, pero sabia que tenía que ser algo mas sencillo. Me refiero a lo mio, ya que era cuestión de como tenía que pasar el codeblock con la condición que yo quiero poner, ahora voy a mirar como me queda el tema de los Bitmaps.

Saludos



Andrés González desde Mallorca

Continue the discussion