Volviendo con los aportes y conocer la opnion de los usuarios, les presento otra adicion a la xbrowse para poder visualizar imagenes de cualquier formato dentro de las celdas...
Aparte de la diferencia que ya no solo se necesitan BMP o recursos, estas imagenes no hacen falta precargarlas en el array por columnas, es decir, para presentarlas no se necesitan los metodos
METHOD AddResource( cRes )
METHOD AddBmpFile( cFile )
METHOD AddBmpHandle( hBmp )
el prototipo mostrado tiene una nueva DATA bStrImage, es un codeblock que devuelve el nombre de la imagen, sea recurso o archivo, la seleccion es automatica, y un nuevo tipo en la data nEditType llamado TYPE_IMAGE con un valor de -1.
se pueden selecionar la imagen de 2 formas por medio de la nueva data ( bStrImage ) o simplemente colocando el nombre de la imagen en la celda, esta celda no es editable y tampoco se vera el texto de la misma, solo mostrara la imagen...
aqui les dejo un ejemplo (ejecutable) y el codigo del mismo para que detallen como seria su implementacion
en el ejemplo la columna 1 usa la imagen, puede hacer click derecho para desplegar un popmenu con algunas opciones, la columna 2 elije la imagen por medio cGetFile()
http://www.sitasoft.com/fivewin/test/xbimg.rar
- Code: Select all Expand view
- #include "FiveWin.ch"
#include "xbrowse.ch"
REQUEST DBFCDX
static hLib
function main()
local oDlg
local oBrw
local nI
local hBitMap1, hBitMap2, hBitMap3, hBitMap4
local aArray:={}
for nI = 1 to 5
aadd( aArray, { "", space( 255 ) } )
next
DEFINE DIALOG oDlg title "TEST" size 800,600
@ 0,0 XBROWSE oBrw OF oDlg columns {1,2};
Array aArray sizes {100,300} LINES CELL autocols
oBrw:nMarqueeStyle := 1
oBrw:nRowHeight := 33
oBrw:lAdjustLastCol := .t.
oBrw:aCols[ 1 ]:nEditType := TYPE_IMAGE
oBrw:aCols[ 1 ]:lBmpStretch := .t.
oBrw:aCols[ 1 ]:lBmpTransparent := .t.
oBrw:aCols[ 1 ]:bStrImage := {|oCol, oBrw| oBrw:aRow[ 2 ] }
oBrw:aCols[ 1 ]:nDataBmpAlign := AL_CENTER
oBrw:aCols[ 1 ]:bPopUp := { |o| ColMenu( o ) }
oBrw:aCols[ 2 ]:nEditType := EDIT_BUTTON
oBrw:aCols[ 2 ]:bEditBlock := {|nRow, nCol, oCol| oCol:Value := cGetFile( "*.*", "Select a file" ) }
oDlg:oClient := oBrw
oBrw:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED ON INIT oDlg:Resize()
return nil
static function ColMenu( ocol )
local oPop
MENU oPop POPUP 2007
MENUITEM "Left Align" WHEN oCol:nDataBmpAlign > 0 ;
ACTION ( oCol:nDataBmpAlign:= AL_LEFT, oCol:oBrw:Refresh() )
MENUITEM "Center Align" WHEN oCol:nDataBmpAlign != AL_CENTER ;
ACTION ( oCol:nDataBmpAlign := AL_CENTER, oCol:oBrw:Refresh() )
MENUITEM "Right Align" WHEN oCol:nDataBmpAlign != AL_RIGHT ;
ACTION ( oCol:nDataBmpAlign := AL_RIGHT , oCol:oBrw:Refresh() )
MenuAddItem( "Transparent", ,oCol:lBmpTransparent, .t., ;
{ |oItem| oCol:lBmpTransparent := !oCol:lBmpTransparent, ;
oItem:SetCheck( oCol:lBmpTransparent ), ;
oCol:oBrw:refresh() } )
MenuAddItem( "Stretch", ,oCol:lBmpStretch, .t., ;
{ |oItem| oCol:lBmpStretch := !oCol:lBmpStretch, ;
oItem:SetCheck( oCol:lBmpStretch ), ;
oCol:oBrw:refresh() } )
ENDMENU
return oPop
//----------------------------------------------------------------------------//