Um exemplo compacto usando imagens nas colunas (celulas) de um tbrowse.
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