Página 1 de 1

Browse com images

Enviado: 08 Set 2011 17:13
por carlos_dornelas
Amigos,

Alguém te um exemplo de como colocar imagens no browse e alterá-las dependendo do status do registro. São 5 status diferentes. Outra questão: é possível mais de uma coluna com imagens? Como definir qual será essa coluna?

Grato

Antonio Carlos

BROWSE COM IMAGES

Enviado: 09 Set 2011 21:32
por Pablo César
Veja se o exemplo que há no \C:\HMG3.0.3 ? \SAMPLES\GRID.08 ajuda o seu entendimento.

Ou veja neste outro tópico do site oficial do HMG serve: Clique aqui

BROWSE COM IMAGES

Enviado: 11 Set 2011 12:52
por carlos_dornelas
Pablo, grato pelas dicas. Esqueci de mencionar que estou utilizando a Minigui Extended. Mas olhando o exemplo da própria minigui, consegui um pequeno avanço no entendimento de como funciona o IMAGES. No trecho abaixo, funciona a exibição de imagens (apenas duas imagens) pois a condição Deleted() vai retornar ou 0 ou 1. Eu precisaria algo para substituir o Deleted() para retornar mais opções (5). Tentei utilizar codeblocks, mas não consegui o resultado esperado (talvez por não utilizá-lo corretamente). Se você ou alguém mais puder me dar mais uma luz, agradeço.

Esse código abaixo funciona. Só que eu precisaria talvez incluir no lugar de "iif(deleted(),0,1)" uma outra forma de retornar de 0 a 5, dependendo da situação do registro. Tentei utilizar, por exemplo: |x|x=ascan(aOcor,situacao) mas não deu certo.

Código: Selecionar todos

DEFINE BROWSE Browse_1
   PARENT form_1
   ROW 85
   COL 20
   WIDTH 1550                                                                               
   HEIGHT 720
   FONTNAME 'Courier New'
   FONTSIZE 20
   HEADERS {nil, 'Hora','PV','Situacao','Detalhe','Oc1','Oc2','Oc3','Oc4','Oc5'}
   WIDTHS  {     20, 100  , 60 ,   180    ,   1090  , 500 , 500 , 500 , 500 , 500 }
   WORKAREA csr
   FIELDS { 'iif(deleted(),0,1)','hora','previa','situacao','dados' ,'oc1','oc2','oc3','oc4','oc5' } 
   VALUE 1
   IMAGE { "br_ok", "aceita" }
   LOCK .T.
   READONLY { .T. , .T. , .T. , .F. , .T. , .T. , .T. , .T. , .T. , .T. }
   ONLOSTFOCUS xTransfer()
   INPLACEEDIT     .T.
   ALLOWEDIT       .T.

END BROWSE

BROWSE COM IMAGES

Enviado: 11 Set 2011 18:43
por asimoes
Ricardo,

Tem um exemplo na pasta \basic\browse_8

Fiz um teste para sua situação usando as imagens do próprio exemplo da minigui veja

FIELDS { 'iif(campo="A",0,iif(campo="B",1,2))','hora','previa','situacao','dados' ,'oc1','oc2','oc3','oc4','oc5' }
IMAGE { "br_ok", "aceita","outra imagem" }

Código: Selecionar todos

 IF !Empty(aNewFiles)
      Use (aNewFiles[1]) Shared New
      nCamp := Fcount()
      aEst  := DBstruct()
      //aNomb := {'iif(deleted(),0,1)'} ; aJust := {0} ; aLong := {0}
      aNomb := {'iif(state="AK",0,iif(State="AL",1,2))'} ; aJust := {0} ; aLong := {0} //AQUI JÁ FUNCIONOU
      For i := 1 to nCamp
          aadd(aNomb,aEst[i,1])
          aadd(aJust,iif(aEst[i,2]=='N',1,0))
          aadd(aLong,Max(100,Min(160,aEst[i,3]*14)))
      Next
      CreaBrowse( Alias(), aNomb, aLong, aJust )
   Endif

No método IMAGE
IMAGE { "fig00", "fig01", "fig03" }

NO .RC

fig00 BITMAP BR_OK.BMP
fig01 BITMAP BR_NO.BMP
fig03 BITMAP CHAR.BMP

BROWSE COM IMAGES

Enviado: 12 Set 2011 08:02
por asimoes
Ricardo,

O TSBrowse tem muito mais recursos que o browse, inclusive com definição de imagens para colunas.

BROWSE COM IMAGES

Enviado: 12 Set 2011 09:39
por asimoes
Ricardo,

Um exemplo compacto usando imagens nas colunas (celulas) de um tbrowse.
A pasta \image você encontra em \Minigui\SAMPLES\Advanced\Tsb_SpecHeader
O DBF employee você encontra ma pasta \Minigui\SAMPLES\Advanced\Tsb_SpecHeader

r.bat

Código: Selecionar todos

@echo off
SET PATH=%PATH%;D:\BORLAND\BCC58\BIN
SET HB_COMPILER=bcc
D:\MINIGUI\HARBOUR\BIN\HBMK2 EXEMPLO.HBM 
pause
exemplo.rc

Código: Selecionar todos

// Using a resource file like this, you can include bitmaps, icons and sounds
// inside EXE.
//
//   Resource name	Resource Type	Resource FileName
//
EDIT     BITMAP		IMAGE\EDIT.BMP
EXIT2    BITMAP		IMAGE\EXIT2.BMP
FIND     BITMAP		IMAGE\FIND.BMP
NAVI2    BITMAP		IMAGE\NAVI2.BMP
SAVE	  BITMAP		IMAGE\SAVE.BMP
br_ok    BITMAP		IMAGE\BR_OK.BMP
br_no    BITMAP		IMAGE\BR_NO.BMP
br_em    BITMAP      IMAGE\BR_EM.BMP
exemplo.hbm

Código: Selecionar todos

# ---------------------------
# Nome do Executável
# ---------------------------
-oexemplo
# ---------------------------
# Bibliotecas
# ---------------------------
-ltsbrowse
-lpropgrid
-lminigui
-lhmg_qhtm
-lminiprint
-lhbprinter 
-lgtgui
-ltip
# ---------------------------
# Caminho dos Includes
# ---------------------------
-incpath=d:\minigui\include;
-incpath=d:\minigui\harbour\include;
# ---------------------------
# Caminho das Libs da MiniGui
# ---------------------------
-Ld:\minigui\lib
-Ld:\minigui\harbour\lib
# ---------------------------
# Outros Parâmetros
# ---------------------------
-workdir=.\OBJ\
-gtgui
-head=full
-n
-dVERSAO_DE_TESTE1
-dVERSAO_DE_TESTE2
-nowarn
-inc
# ---------------------------
# Prg(s) e Rc(s)
# ---------------------------
exemplo
exemplo.rc
# ---------------------------
# Fim
# ---------------------------
exemplo.prg

Código: Selecionar todos

#include "minigui.ch"
#include "TSBrowse.ch"

#define PROGRAM 'TsBrowse Auto Function Demo'
#define VERSION ' version 1.01'
#define COPYRIGHT ' 2010-2011 by Janusz Pora'
#define CLR_DEFAULT   0xff000000
#define DB_TABLE    'Employee'
//---------------------------------------------------------------------
FUNCTION MAIN
//---------------------------------------------------------------------

  DEFINE WINDOW Form_1 ;
    AT 0,0 ;
    WIDTH 670 ;
    HEIGHT 500 ;
    TITLE PROGRAM ;
    ICON 'STAR.ICO' ;
    MAIN ;
    NOMAXIMIZE NOSIZE ;
    ON RELEASE CloseTable()

    DEFINE MAIN MENU
      POPUP '&Database'
        MENUITEM "ENUMERATOR"    ACTION ViewState(1,1)
        SEPARATOR
        ITEM 'Exit' ACTION thiswindow.release
      END POPUP
    END MENU
  END WINDOW
  CENTER WINDOW Form_1
  ACTIVATE WINDOW Form_1
RETURN NIL
FUNCTION ViewState(met,nVer)
  LOCAL Tyt, Brw_1
  LOCAL aPos := GetChildPos('Form_1')
  LOCAL aHead, aWidth, aFld , cInfo
  LOCAL blUserSearch := NIL
  LOCAL blUserFilter := NIL
  LOCAL nRec :=1
  
  LOCAL aBmp[ 2 ]
  
  aBmp[ 1 ] := LoadImage ("image\br_ok.bmp")
  aBmp[ 2 ] := LoadImage ("image\br_no.bmp")

  IF .Not. IsWindowActive (Form_Gr)

    OpenTable()

    Tyt :='Browse Database Via DBFNTX'
    
    Select("EMPLOYEE")

    DEFINE WINDOW Form_Gr ;
      AT aPos[1]+50,aPos[2]+20 ;
      WIDTH 740 HEIGHT 580 ;
      TITLE tyt;
      CHILD NOMAXIMIZE ;
      ON INIT Refresh_Win("Form_Gr", Brw_1) ;
      ON RELEASE CloseTable()

      DEFINE IMAGELIST Im_edit ;
        BUTTONSIZE 26 , 26  ;
        IMAGE {'edit'} ;
        COLORMASK CLR_DEFAULT;
        IMAGECOUNT 5;
        MASK

      DEFINE IMAGELIST im_navi ;
        BUTTONSIZE 20 , 20  ;
        IMAGE {'navi2'} ;
        COLORMASK CLR_DEFAULT;
        IMAGECOUNT 6;
        MASK

      DEFINE SPLITBOX

        DEFINE TOOLBAREX Tb_Edit BUTTONSIZE 26,26 IMAGELIST "im_edit" FLAT CAPTION 'Edition'

          BUTTON Button_2 PICTUREINDEX 2 TOOLTIP 'Edit record' ACTION {||EditDan(aHead,aFld,aWidth), Refresh_Win("Form_Gr", Brw_1)}
          BUTTON Button_3 PICTUREINDEX 3 TOOLTIP 'Add record' ACTION MsgInfo('Click!')
          BUTTON Button_4 PICTUREINDEX 1 TOOLTIP 'Delete record' ACTION MsgInfo('Click!') SEPARATOR

        END TOOLBAR

        DEFINE TOOLBAREX Tb_Navi BUTTONSIZE 20,20 IMAGELIST "im_navi" FLAT CAPTION 'Navigations'

          BUTTON top  PICTUREINDEX 0 TOOLTIP "Top Table"    ACTION {||TbMove(1, Brw_1), Refresh_Win("Form_Gr", Brw_1)}
          BUTTON prve PICTUREINDEX 1 TOOLTIP "Prev Screen"  ACTION {||TbMove(2, Brw_1), Refresh_Win("Form_Gr", Brw_1)}
          BUTTON prev PICTUREINDEX 2 TOOLTIP "Prev Record"  ACTION {||TbMove(3, Brw_1), Refresh_Win("Form_Gr", Brw_1)}
          BUTTON next PICTUREINDEX 3 TOOLTIP "Next Record"  ACTION {||TbMove(4, Brw_1), Refresh_Win("Form_Gr", Brw_1)}
          BUTTON nxte PICTUREINDEX 4 TOOLTIP "Next Screen"  ACTION {||TbMove(5, Brw_1), Refresh_Win("Form_Gr", Brw_1)}
          BUTTON bott PICTUREINDEX 5 TOOLTIP "Botton Table" ACTION {||TbMove(6, Brw_1), Refresh_Win("Form_Gr", Brw_1)}

        END TOOLBAR

        DEFINE TOOLBAREX ToolBar_3 BUTTONSIZE 28,28 FONT "Arial" SIZE 9 FLAT CAPTION 'Exit'
          BUTTON Exit PICTURE "exit2" ACTION Release_Brw1("Form_Gr") TOOLTIP "Exit"
        END TOOLBAR

      END SPLITBOX

      SetProperty("Form_Gr","Button_3","Enabled",.f.)
      SetProperty("Form_Gr","Button_4","Enabled",.f.)

      aHead := { 'First' , 'Last', 'Street', 'City','State', 'Zip','Age','Salary', 'Notes' }
      aWidth:= { 110 , 150 ,150, 150, 50, 80,50,80, 200 }
      aFld  := {'First' , 'Last', 'Street', 'City','State', 'Zip','Age','Salary', 'Notes' }

      DBGoTo(nRec)

      DEFINE TBROWSE Brw_1 AT 50,10 ALIAS 'EMPLOYEE' ;
         WIDTH 710   ;
         HEIGHT 390   ;
         HEADERS 'First' , 'Last', 'Street', 'City','State', 'Zip','Age','Salary', 'Notes' ;
         WIDTHS  110 , 150 ,150, 150,50, 80, 50, 80, 200 ;
         FIELDS EMPLOYEE->First , EMPLOYEE->Last, EMPLOYEE->Street, EMPLOYEE->City,EMPLOYEE->State, EMPLOYEE->Zip,EMPLOYEE->Age,EMPLOYEE->Salary, EMPLOYEE->Notes ;
         VALUE nRec;
         ENUMERATOR ;
         ON CHANGE Refresh_Win("Form_Gr",Brw_1) ;
         ON DBLCLICK  (EditDan(aHead,aFld,aWidth), Refresh_Win("Form_Gr", Brw_1))
      END TBROWSE

      Brw_1:aColumns[ 2 ]:uBmpCell := {||IIF(EMPLOYEE->Age > 30,aBmp[1],)}
      Brw_1:aColumns[ 2 ]:nAlign := nMakeLong( DT_LEFT, DT_RIGHT )


      Brw_1:nHeightHead += 5

      Brw_1:SetColor( { 1, 3, 5, 6, 13, 15 }, ;
                      { CLR_BLACK,  CLR_YELLOW, CLR_WHITE, ;
                      { CLR_HBLUE, CLR_BLUE }, ;     // degraded cursor background color
                      CLR_HGREEN, CLR_BLACK } )      // text colors
      Brw_1:SetColor( { 2, 4, 14 }, ;
                      { { CLR_WHITE, CLR_HGRAY }, ;  // degraded cells background color
                      { CLR_WHITE, CLR_BLACK }, ;    // degraded headers backgroud color
                      { CLR_HGREEN, CLR_BLACK } } )  // degraded order column background color

      Brw_1:nLineStyle := LINES_VERT
      Brw_1:aColumns[ 1 ]:cOrder := "FIRST"
      Brw_1:aColumns[ 4 ]:cOrder := "CITY"
      Brw_1:SetAppendMode( .T. )
      Brw_1:SetIndexCols( 1, 2 )


      Brw_1:GoPos(nRec)

      cInfo := AllTrim(Str(recno()))+"/"+ AllTrim(Str(RecCount()))
      @ 510, 520 LABEL Lbl_10a VALUE "Recno:" AUTO
      @ 510, 620 LABEL Lbl_10b VALUE cInfo AUTO BOLD

    END WINDOW

    ACTIVATE WINDOW Form_Gr

  ELSE

    RESTORE WINDOW Form_Gr

  ENDIF


RETURN NIL

FUNCTION OpenTable(met)

   RddSetDefault( "DBFNTX" )    // Clipper-Harbour

   USE Employee SHARED NEW
   Index On Employee->First+Employee->Last To Name    // NTX
   Index On Employee->State To State                  // NTX
   Set Index To Name, State                           // NTX

RETURN NIL

FUNCTION Refresh_Win(fm_edit, oBrw)
  LOCAL cInfo

  IF _IsWIndowActive (fm_edit)
    oBrw:Refresh(.f.)
    cInfo := AllTrim(Str(recno()))+"/"+ AllTrim(Str(RecCount()))
    SetProperty(fm_edit,"Lbl_10b","Value",cInfo)
  ENDIF

RETURN NIL

FUNCTION EditDan(aHead,aFld,aWidth)
  LOCAL aPos:= GetChildPos('Form_Gr')
  LOCAL n, cLbl, cGBox, cValue

  IF RecCount() > 0
    IF .Not. IsWIndowActive (Form_Ed)

      DEFINE WINDOW Form_Ed;
        AT aPos[1]+50,aPos[2]+20 ;
        WIDTH 600 HEIGHT 125+ 30*Len(aHead) ;
        TITLE 'Edit current record' ;
        MODAL

        DEFINE SPLITBOX
          DEFINE TOOLBAREX ToolBar_1 BUTTONSIZE 28,28 FONT "Arial" SIZE 9 FLAT CAPTION 'Save'
            BUTTON saveItem PICTURE "save" ACTION SaveDan(aFld) TOOLTIP "Save date"  SEPARATOR
            BUTTON exititem PICTURE "exit2" ACTION thiswindow.release TOOLTIP "Exit"
          END TOOLBAR
        END SPLITBOX


        @ 50,20  FRAME Frame_2 CAPTION "Fields" WIDTH 120 HEIGHT 30*Len(aHead)+30

        FOR n:=1 TO Len(aHead)
          cLbl := "Lbl_"+AllTrim(Str(n))
          cGBox:= "GBox_"+AllTrim(Str(n))
          cValue:="EMPLOYEE->"+aFld[n]

          @ 50+n*30,30 LABEL &cLbl ;
            VALUE aHead[n] ;
            AUTO

          @ 50+n*30,160 GETBOX &cGBox ;
            HEIGHT 24 WIDTH aWidth[n];
            VALUE &cValue ;
            FONT "Arial" SIZE 9
        NEXT

      END WINDOW

         Form_Ed.Activate

    ELSE
      FOR n:=1 TO Len(aHead)
        cValue:="EMPLOYEE->"+aFld[n]
        cGBox:= "GBox_"+AllTrim(Str(n))
        SetProperty("Form_Ed",cGBox,'Value',&cValue)
      NEXT

      RESTORE WINDOW Form_Ed

    ENDIF

  ENDIF

RETURN NIL

FUNCTION GetChildPos(cFormName)
  LOCAL i, yw, xw, hrb:=0, hTit
  LOCAL hwnd,actpos:={0,0,0,0}

  hTit := GetMenubarHeight()
  hwnd := GetFormHandle(cFormName)
  GetWindowRect(hwnd,actpos)

  yw := actpos[2]
  xw := actpos[1]

  i := aScan ( _HMG_aFormHandles , hWnd )
  IF i > 0
    IF _HMG_aFormReBarHandle [i] > 0
      hrb = RebarHeight ( _HMG_aFormReBarHandle [i] )
    ENDIF
  ENDIF

  yw += (hrb + hTit)

RETURN {yw,xw}

FUNCTION TbMove(met,oBrw)

  DO CASE
    CASE met == 1
         oBrw:GoTop()
    CASE met == 2
         oBrw:PageUp()
    CASE met == 3
         oBrw:GoUp()
    CASE met == 4
        oBrw:GoDown()
    CASE met == 5
         oBrw:PageDown()
    CASE met == 6
         oBrw:GoBottom()
  ENDCASE

RETURN NIL

FUNCTION SaveDan(aFld)
  LOCAL n,value,cGBox, cFld

  IF RLock()

    FOR n:=1 TO Len(aFld)
      cFld  := aFld[n]
      cGBox := "GBox_"+AllTrim(Str(n))
      value :=GetProperty("Form_Ed",cGBox,'Value')
      replace &cFld   with value
    NEXT

    dbUnlock()

  ENDIF

  thiswindow.release

RETURN NIL

FUNCTION Release_Brw1(fm_edit)

    RELEASE WINDOW &fm_edit

RETURN NIL

PROCEDURE CloseTable
   DbCloseAll()
RETURN Nil

Browse com images

Enviado: 13 Set 2011 00:48
por carlos_dornelas
Asimoes, não sou o Ricardo (hehehe), mas sua dica foi preciosa e funcionou corretamente da forma como eu precisava. Quanto ao tsbrowse, pretendo estudá-lo num futuro próximo, pois realmente, pelo que já vi, tem muitos mais recursos. Grato também ao Pablo pelas dicas.

Antonio Carlos

Browse com images

Enviado: 13 Set 2011 06:53
por asimoes
Carlos,

Oops "ricardo" foi mal heheh, a limitação do browse você já deve ter percebido, somente a primeira coluna aceita trabalhar com imagens.
Já o Tbrowse você brinca com os recursos.

[]´s