COMO PONER FOTO EN XBROWSE

COMO PONER FOTO EN XBROWSE

Postby carloslmm » Fri May 11, 2012 5:12 pm

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

Re: COMO PONER FOTO EN XBROWSE

Postby elmoiquique » Fri May 11, 2012 6:11 pm

Esto te puede servir

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 ), 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-Xharbour 11.07, Iquique, Chile
elmoiquique
 
Posts: 310
Joined: Wed May 16, 2007 9:40 pm
Location: Region de Ñuble, Chile

Re: COMO PONER FOTO EN XBROWSE

Postby FranciscoA » Fri May 11, 2012 9:58 pm

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  Expand view
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.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: COMO PONER FOTO EN XBROWSE

Postby carloslmm » Sat May 12, 2012 5:53 am

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

Re: COMO PONER FOTO EN XBROWSE

Postby José Luis Sánchez » Mon May 14, 2012 4:06 pm

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  Expand view
  @ 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  Expand view
 ACTIVATE DIALOG oApp():oDlg NOWAIT ;
      ON INIT ( ResizeWndMain(),;
                     LiBarImage(oBar, nBrwSplit),;


2.- Cargo la imagen

Code: Select all  Expand view
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  Expand view
 xbrowse:bChange    := { || RefreshCont( oCont, "LI", "Libros: "), RefreshLiImage() }


Code: Select all  Expand view
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
User avatar
José Luis Sánchez
 
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Re: COMO PONER FOTO EN XBROWSE

Postby carloslmm » Wed May 16, 2012 2:45 am

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


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 52 guests