Browse com images
Moderador: Moderadores
-
carlos_dornelas
- Usuário Nível 3

- Mensagens: 400
- Registrado em: 25 Ago 2004 21:54
Browse com images
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
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
BROWSE COM IMAGES
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
Ou veja neste outro tópico do site oficial do HMG serve: Clique aqui
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
carlos_dornelas
- Usuário Nível 3

- Mensagens: 400
- Registrado em: 25 Ago 2004 21:54
BROWSE COM IMAGES
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.
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 BROWSEBROWSE COM IMAGES
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" }
No método IMAGE
IMAGE { "fig00", "fig01", "fig03" }
NO .RC
fig00 BITMAP BR_OK.BMP
fig01 BITMAP BR_NO.BMP
fig03 BITMAP CHAR.BMP
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
IMAGE { "fig00", "fig01", "fig03" }
NO .RC
fig00 BITMAP BR_OK.BMP
fig01 BITMAP BR_NO.BMP
fig03 BITMAP CHAR.BMP
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
BROWSE COM IMAGES
Ricardo,
O TSBrowse tem muito mais recursos que o browse, inclusive com definição de imagens para colunas.
O TSBrowse tem muito mais recursos que o browse, inclusive com definição de imagens para colunas.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
BROWSE COM IMAGES
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
exemplo.rc
exemplo.hbm
exemplo.prg
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
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
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
# ---------------------------
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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
-
carlos_dornelas
- Usuário Nível 3

- Mensagens: 400
- Registrado em: 25 Ago 2004 21:54
Browse com images
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
Antonio Carlos
Browse com images
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
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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
