COMO PONER FOTO EN XBROWSE

Post Reply
carloslmm
Posts: 71
Joined: Sat Oct 20, 2007 3:02 pm
Location: Sinaloa Mexico

COMO PONER FOTO EN XBROWSE

Post 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
elmoiquique
Posts: 257
Joined: Wed May 16, 2007 9:40 pm
Location: Iquique Chile

Re: COMO PONER FOTO EN XBROWSE

Post 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

//----------------------------------------------------------------------------//
 
Fivewin 11.07
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: COMO PONER FOTO EN XBROWSE

Post 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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
carloslmm
Posts: 71
Joined: Sat Oct 20, 2007 3:02 pm
Location: Sinaloa Mexico

Re: COMO PONER FOTO EN XBROWSE

Post 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
User avatar
José Luis Sánchez
Posts: 484
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

Re: COMO PONER FOTO EN XBROWSE

Post 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:

Image

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
carloslmm
Posts: 71
Joined: Sat Oct 20, 2007 3:02 pm
Location: Sinaloa Mexico

Re: COMO PONER FOTO EN XBROWSE

Post 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
Post Reply