Page 1 of 1
COMO PONER FOTO EN XBROWSE
Posted: Fri May 11, 2012 5:12 pm
by carloslmm
Hola a todos
un saludo antes que anda amigos
Tengo la necesidad de usar un xbrowse, y poner una foto de la persona por cada registro, he checado los ejemplos que vienen en samples incluso en de testxbr3.prg pero solo lo hacen con una funcion :setcheck() y con un bitmap, mi necesidad es la de que en cada registro esta la ruta de la foto a mostrar y ya le busque y no he dado con la solucion.
si alguien tiene algun ejemplo de como usarlo con dbfs no con arreglos le agradeceria mucho
Gracias
Saludos
Carlos I. De La Rosa
fwh. 12.04 harbour 582
Re: COMO PONER FOTO EN XBROWSE
Posted: Fri May 11, 2012 6:11 pm
by elmoiquique
Esto te puede servir
Code: Select all
#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 ), space( 10 ) } )
next
DEFINE DIALOG oDlg title "TEST" size 800,600
@ 0,0 XBROWSE oBrw OF oDlg columns {1,2,3};
Array aArray sizes {100,300, 100} LINES CELL autocols fastedit
oBrw:nMarqueeStyle := 1
oBrw:nRowHeight := 33
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" ) }
oBrw:aCols[ 3 ]:nEditType := 1
oBrw:aCols[ 3 ]:bOnPostEdit := {|oCol, xVal, nKey| if ( alltrim( xVal ) == "1", oBrw:nMoveType := 5, oBrw:nMoveType := 6 ), oCol:Value( xVal ) }
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
//----------------------------------------------------------------------------//
Re: COMO PONER FOTO EN XBROWSE
Posted: Fri May 11, 2012 9:58 pm
by FranciscoA
Hola Carlos. Tengo algo parecido, y lo hago asi:
En una carpeta tengo las imagenes cuyos nombres corresponden al codigo del producto.
Code: Select all
oBrw:Descrip:bFooter = {|| "Click aqui para ver imagen del producto" }
oBrw:descrip:bLClickFooter := {|r,c,f,o| VerImagen(MaeProdT->Codigo) }
//-------------------------//VER IMAGEN DEL PRODUCTO
Function VerImagen()
local oDlg, oImage, oSay, oFont, oBrush
local cCodigo:=MaeProdt->codigo
local cAnexar:=""
DEFINE FONT oFont NAME "ARIAL" BOLD
DEFINE BRUSH oBrush FILENAME ".\WALL.BMP"
DEFINE DIALOG oDlg RESOURCE "IMAGENPROD" BRUSH oBrush TRANSPARENT
REDEFINE IMAGE oImage ID 201 OF oDlg
REDEFINE SAY oSay PROMPT MaeProdt->Codigo+" - "+MaeProdt->Descrip+CRLF+;
"Existencia: "+Transform(MaeProdt->existencia,"999,999.99")+CRLF+;
"Precio de Venta: "+Transform(MaeProdt->pventa,"9,999,999.99")+CRLF+;
"Estante: "+maeprodt->estante+" Casilla: "+maeprodt->casilla ID 100 OF oDlg FONT oFont
REDEFINE BUTTONBMP ID 103 OF oDLG BITMAP "Printer" TEXTRIGHT ACTION ( oImage:HardCopy(4))
REDEFINE BUTTONBMP ID 104 OF oDLG BITMAP "Attach" TEXTRIGHT ACTION ( fEmail(cAnexar) )
REDEFINE BUTTONBMP ID 102 OF oDLG BITMAP "SALIR" TEXTRIGHT ACTION ( oDlg:End()) CANCEL
ACTIVATE DIALOG oDlg CENTERED ON INIT if(!GetImagen(oImage,cCodigo, @cAnexar),oDlg:End(),)
oFont:End()
oBrush:End()
oImage:End()
RETURN NIL
//----------------------
Function GetImagen( oImage, cCodigo, cAnexar )
local gcFile:=".\ImagProd\"
local aNombres:={},aExtenc:={}, aDirectorio, n
local lRet
aDirectorio:=Directory(gcFile+"*.*","D")
aEval(aDirectorio, {|aFich| aadd(aNombres,cFileNoExt(aFich[F_NAME])), aadd(aExtenc,Right(aFich[F_NAME],3)), SysRefresh() })
if ( n := Ascan(aNombres,alltrim(cCodigo)) ) !=0
gcFile := gcFile + aNombres[n] +"."+ aExtenc[n]
else
MsgInfo("Imagen "+alltrim(cCodigo)+" no disponible.","Informacion")
lRet := .f.
gcFile := ""
endif
if ! Empty( gcFile ) .and. File( gcFile )
oImage:LoadBmp( gcFile )
oImage:lStretch := .t.
oImage:Refresh()
cAnexar:= CurDrive()+":\"+Curdir()+"\"+Substr(gcFile,3,len(gcFile)) //imagen a anexar al Email
lret:=.t.
endif
Return lRet
Espero te sirva de guia.
Re: COMO PONER FOTO EN XBROWSE
Posted: Sat May 12, 2012 5:53 am
by carloslmm
Muchas Gracias Amigos
a muchas gracia a los dos, son buenas las sugerencias la primera el detalle es que es con arreglos asi funciona muy bien
la puedes cambiar y todo, pero con dbfs no he encontrado como hacerlo, asi es como lo quiero hacer que la dbf me guarde la ruta y poner las fotos al momento de abrir la dbf.
francisco tu respusta tambien es buena de echo la tango asi al agregar los articulos, tambien funciona
mi idea es hacerlo con el xbrowse para aprovechar su potencial y hacerlo tipo touch, ais no tenemos limites de ir agregando articulos y poder desplasarlos con minitores touch
Gracias y ojala alguin tenga alguna sugerencia mas
Saludos
Re: COMO PONER FOTO EN XBROWSE
Posted: Mon May 14, 2012 4:06 pm
by José Luis Sánchez
Hola,
Yo lo hago de otra manera en mi Cuaderno de Bitácora. La imagen no la pongo en el xbrowse, la pongo en el taskbar que hay en el diálogo. Mira esta imagen y fíjate en el grupo portada del vtaskbar:
La manera de hacerlo es la siguiente:
1.- Defines la imagen en el vtaskbar. Primero el contenedor y en el aranque del dialogo la imagen
Code: Select all
@ 165, 05 VMENU oBar SIZE nBrwSplit-10, 190 OF oApp():oDlg ;
COLOR CLR_BLACK, GetSysColor(15) ;
HEIGHT ITEM 22 XBOX
oBar:nClrBox := MIN(GetSysColor(13), GetSysColor(14))
DEFINE TITLE OF oBar;
CAPTION i18n("Portada");
HEIGHT 25 ;
COLOR GetSysColor(9), GetSysColor(3), GetSysColor(2) ;
VERTICALGRADIENT
Code: Select all
ACTIVATE DIALOG oApp():oDlg NOWAIT ;
ON INIT ( ResizeWndMain(),;
LiBarImage(oBar, nBrwSplit),;
2.- Cargo la imagen
Code: Select all
function LiBarImage(oBar, nBrwSplit)
oLiImage := TZoomImage():New(35,10,(2*nBrwSplit)-40,(2*nBrwSplit)-40,,,.t.,oBar,,,,,,,,,.t.,,)
if File(lfn2sfn(rtrim(LI->LiImagen)))
oLiImage:LoadBmp(lfn2sfn(rtrim(LI->LiImagen)))
endif
return nil
3.- Cada vez que cambio de registro en el browse cambio la imagen
Code: Select all
xbrowse:bChange := { || RefreshCont( oCont, "LI", "Libros: "), RefreshLiImage() }
Code: Select all
function RefreshLiImage()
if File(lfn2sfn(rtrim(LI->LiImagen)))
oLiImage:Show()
oLiImage:LoadBmp(lfn2sfn(rtrim(LI->LiImagen)))
else
oLiImage:Hide()
endif
oLiImage:Refresh()
return nil
y listo.
Ya que muestro el código, agradezco a Paco García y a Silvio Falconi por su ayuda para hacerlo.
Saludos,
José Luis Sánchez
http://alanit.com
Re: COMO PONER FOTO EN XBROWSE
Posted: Wed May 16, 2012 2:45 am
by carloslmm
Jose Luis
Muchas Gracias, me agrado la forma que lo estas haciendo, voy a probar de esa forma se ve muy agradable, que eso es precisamente
lo que ando buscando que sea agradable al usuario
Gracias a todo por su ayuda.
Carlos I. De La Rosa
carloslmm@hotmail.com
y a sus ordenes compañeros.
fwh 12.04 harbour