Código: Selecionar todos
#ifndef __XHARBOUR__
SET PROCEDURE TO tget\tget.prg
SET PROCEDURE TO tget\tgetint.prg
#endif
Moderador: Moderadores

Código: Selecionar todos
#ifndef __XHARBOUR__
SET PROCEDURE TO tget\tget.prg
SET PROCEDURE TO tget\tgetint.prg
#endif

Código: Selecionar todos
FUNCTION gui_Browse( xDlg, xControl, nRow, nCol, nWidth, nHeight, oTbrowse, cField, xValue, workarea )
LOCAL aHeaderList := {}, aWidthList := {}, aFieldList := {}, aItem
IF Empty( xControl )
xControl := gui_newctlname( "BROW" )
ENDIF
FOR EACH aItem IN oTbrowse
AAdd( aHeaderList, aItem[1] )
AAdd( aFieldList, aItem[2] )
AAdd( aWidthList, Max( Len( aItem[3] ), Len( Transform(FieldGet(FieldNum(aItem[1] ) ), "" ) ) ) * 10 + 10 )
NEXT
DEFINE BROWSE ( xControl )
PARENT ( xDlg )
ROW nRow
COL nCol
WIDTH nWidth - 20
HEIGHT nHeight - 20
ONDBLCLICK gui_BrowseDblClick( xDlg, xControl, workarea, cField, @xValue )
HEADERS aHeaderList
WIDTHS aWidthList
WORKAREA ( workarea )
FIELDS aFieldList
END BROWSE
//@ nRow, nCol GRID ( xControl ) ;
// OF ( xDlg ) ;
// WIDTH nWidth - 20 ;
// HEIGHT nHeight - 20 ;
// ON DBLCLICK gui_BrowseDblClick( xDlg, xControl, workarea, cField, @xValue ) ;
// HEADERS aHeaderList ;
// WIDTHS aWidthList ;
// ROWSOURCE ( workarea ) ;
// COLUMNFIELDS aFieldList
(xDlg);(cField);(xValue);(workarea)
RETURN Nil

Código: Selecionar todos
DEFINE BROWSE ( xControl )
PARENT ( xDlg )
ROW nRow
COL nCol
WIDTH nWidth - 20
HEIGHT nHeight - 20
ONDBLCLICK gui_BrowseDblClick( xDlg, xControl, workarea, cField, @xValue )
HEADERS aHeaderList
WIDTHS aWidthList
WORKAREA ( workarea )
FIELDS aFieldList
#xcommand BROWSESYNC => _HMG_BrowseSyncStatus := .T.
BROWSESYNC
END BROWSE

Código: Selecionar todos
DEFINE BROWSE ( xControl )
PARENT ( xDlg )
ROW nRow
COL nCol
WIDTH nWidth - 20
HEIGHT nHeight - 20
ONDBLCLICK gui_BrowseDblClick( xDlg, xControl, workarea, cField, @xValue )
HEADERS aHeaderList
WIDTHS aWidthList
WORKAREA ( workarea )
FIELDS aFieldList
END BROWSE
@ nRow, nCol GRID ( xControl ) ;
OF ( xDlg ) ;
WIDTH nWidth - 20 ;
HEIGHT nHeight - 20 ;
ON DBLCLICK gui_BrowseDblClick( xDlg, xControl, workarea, cField, @xValue ) ;
HEADERS aHeaderList ;
WIDTHS aWidthList ;
ROWSOURCE ( workarea ) ;
COLUMNFIELDS aFieldList
Código: Selecionar todos
_HMG_SYSDATA[89] := .F. ; _DefineBrowse ( _HMG_SYSDATA[316]
_HMG_SYSDATA[250][1] := .T. ; _DefineBrowse ( ( xControl )
Código: Selecionar todos
#xtranslate _HMG_aBrowseSyncStatus => _HMG_SYSDATA\[250]
#xtranslate _HMG_BrowseSyncStatus => _HMG_aBrowseSyncStatus\[1]
#xtranslate _HMG_BrowseUpdateStatus => _HMG_aBrowseSyncStatus\[2]
Código: Selecionar todos
#xcommand @ <row>, <col> GRID <name> ;
...
_HMG_BrowseSyncStatus := .T. ;;
@ <row>, <col> BROWSE <name> ;
...
Código: Selecionar todos
#xcommand SET BROWSESYNC <x:ON,OFF> => _HMG_BrowseSyncStatus := ( Upper(<(x)>) == "ON" )

Código: Selecionar todos
#include <hmg.ch>
Function Main( )
local aMat:={{"codigo","N",5,0},{"descricao","c",100,0}},i
DbCreate("test",aMat)
use test
for i=1 to 1000
test->(DbAppend())
Test->Codigo:=i
test->descricao:="Testando "+Strzero(i,5)
Next
Test->(DbGotop())
DEFINE WINDOW Main AT 265, 980 WIDTH 572 HEIGHT 371 TITLE "" MAIN on release test->(DbCloseArea())
DEFINE TOOLBAREX Toolbar_1 BUTTONSIZE 40, 45 FONT 'Candara Light' SIZE 7 FLAT WRAP BORDER CUSTOMIZE MIXEDBUTTONS
BUTTON Toolbar_1Button1 CAPTION "close" PICTURE "Hbprint_close" SEPARATOR AUTOSIZE
BUTTON Toolbar_1Button2 CAPTION "Go Top" PICTURE "Edit_gotop" ACTION (Test->(DbGotop()),Main.oBrowse1.value:=Test->(Recno())) AUTOSIZE
BUTTON Toolbar_1Button3 CAPTION "Previous" PICTURE "Edit_previous" ACTION (Test->(DbSkip(-1)),IIF(Test->(Bof()),Test->(DbGotop()),Nil),Main.oBrowse1.value:=Test->(Recno())) AUTOSIZE
BUTTON Toolbar_1Button4 CAPTION "Next" PICTURE "Edit_next" ACTION (Test->(DbSkip(1)),IIF(Test->(eof()),Test->(DbGobottom()),Nil),Main.oBrowse1.value:=Test->(Recno())) AUTOSIZE
BUTTON Toolbar_1Button5 CAPTION "Bottom" PICTURE "Edit_gobottom" ACTION (Test->(DbGobottom()),Main.oBrowse1.value:=Test->(Recno())) AUTOSIZE
END TOOLBAR
DEFINE BROWSE oBrowse1
FIELDS { "codigo" , "descricao" }
HEADERS { "Código" , "Descrição" }
JUSTIFY { 1 , 0 }
WIDTHS { 150 , 250 }
WORKAREA "test"
VSCROLLBAR .T.
COL 13
HEIGHT 179
ROW 69
VALUE 0
WIDTH 529
OnDblClick (Test->(DbGoto(Main.oBrowse1.value)),Main.oText1.value := Test->Codigo,Main.oText2.value := Test->Descricao)
END BROWSE
DEFINE LABEL oLabel1
VALUE "Código:"
RIGHTALIGN .T.
VCENTERALIGN .T.
COL 23
HEIGHT 20
ROW 261
WIDTH 100
END LABEL
DEFINE LABEL oLabel2
VALUE "Descrição:"
RIGHTALIGN .T.
VCENTERALIGN .T.
COL 23
HEIGHT 20
ROW 293
WIDTH 100
END LABEL
DEFINE TEXTBOX oText1
NUMERIC .T.
READONLY .T.
COL 134
HEIGHT 20
ROW 261
WIDTH 100
END TEXTBOX
DEFINE TEXTBOX oText2
READONLY .T.
COL 134
HEIGHT 20
MAXLENGTH 100.00
ROW 293
WIDTH 404
END TEXTBOX
END WINDOW
Main.Center
Main.activate()
REturn .T.

Manual: olhava, testava, não funcionavaivanil escreveu:Na verdade, o que ocorre é que você esta desbravando o código sem olhar o manual;
o value do browse devolve o recno() do DBF; então em sua função DBclick, teria que ter um DbGoto();
Por padrão, acredito que fica desligado o sincronismo por conta de desempenho, quando a base cresce na rede, o browse demonstra baixa perfomance, há colegas que passaram a usar o TBrowse, sugiro dar uma olhada nele, um objeto altamente parametrizável, rápido, mas acabou se tornando complexo lembra muito o nosso velho tbrowse do clipper ;

Código: Selecionar todos
FUNCTION gui_BrowseDblClick( xDlg, xControl, workarea, cField, xValue )
IF ! Empty( cField )
// without SET BROWSESYNC ON
// &(workarea)->( dbGoto( GetProperty( xDlg, xControl, "VALUE" ) ) )
xValue := &(workarea)->( FieldGet( FieldNum( cField ) ) )
ENDIF
(xControl)
DoMethod( xDlg, "RELEASE" )
RETURN Nil

Código: Selecionar todos
#define CFG_BTABLE 19 // browse table
#define CFG_BKEYFROM 20 // browse field from main
#define CFG_BKEYTO 21 // browse field to
#define CFG_BKEYTO2 22 // browse field2 to
#define CFG_BVALUE 23 // browse key value
#define CFG_BEDIT 24 // can edit browse values
Código: Selecionar todos
#define CFG_EMPTY { "", "C", 1, 0, .F., "", "", .T., "", "", "", Nil, 0, TYPE_EDIT, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil }
Código: Selecionar todos
/* table, key */
aKeyList := { ;
{ "DBCLIENT", "IDCLIENT" }, ;
{ "DBPRODUCT", "IDPRODUCT" }, ;
{ "DBUNIT", "IDUNIT" }, ;
{ "DBSELLER", "IDSELLER" }, ;
{ "DBBANK", "IDBANK" }, ;
{ "DBGROUP", "IDGROUP" }, ;
{ "DBSTOCK", "IDSTOCK" }, ;
{ "DBFINANC", "IDFINANC" }, ;
{ "DBSTATE", "IDSTATE" }, ;
{ "DBTICKET", "IDTICKET" }, ;
{ "DBTICKETPRO", "Str( TPTICKET,10 ) + Str( IDTICKETPRO, 10 )" } }
Código: Selecionar todos
/* Related browse */
aBrowseList := { ;
{ "DBTICKET", "IDTICKET", "DBTICKETPROD", "TPTICKET", "IDTICKEDPROD" } }
Código: Selecionar todos
FOR EACH aItem IN ::aEditList
IF aItem[ CFG_CTLTYPE ] != Nil .AND. aItem[ CFG_CTLTYPE ] != TYPE_BROWSE
aItem[ CFG_VALUE ] := &( ::cFileDbf )->( FieldGet( FieldNum( aItem[ CFG_FNAME ] ) ) )
ENDIF
AAdd( ::aControlList, AClone( aItem ) )
NEXT







Código: Selecionar todos
FUNCTION gui_Browse( xDlg, xControl, nRow, nCol, nWidth, nHeight, oTbrowse, cField, xValue, workarea, aBlockList )
LOCAL aItem
IF ValType( aBlockList ) != "A"
aBlockList := { { VK_RETURN, { || gui_BrowseEnter( cField, @xValue, xDlg ) } } }
ENDIF
@ nCol, nRow BROWSE xControl DATABASE SIZE nWidth, nHeight STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL
// may be not current alias
xControl:Alias := workarea
FOR EACH aItem IN oTBrowse
ADD COLUMN { || Transform( &(workarea)->( FieldGet( FieldNum( aItem[2] ) ) ), aItem[3] ) } TO xControl ;
HEADER aItem[1] ;
LENGTH Max( Len( aItem[1] ), Len( Transform( &(workarea)->( FieldGet( FieldNum( aItem[2] ) ) ), aItem[3] ) ) ) ;
JUSTIFY LINE DT_LEFT
NEXT
xControl:bOther := { |xControl, msg, wParam, lParam| gui_BrowseKeyDown( xControl, msg, wParam, lParam, cField, @xValue, aBlockList, xDlg ) }
(xDlg); (workarea)
RETURN Nil
STATIC FUNCTION gui_BrowseEnter( cField, xValue, xDlg )
IF ! Empty( cField )
xValue := FieldGet( FieldNum( cField ) )
ENDIF
hwg_EndDialog()
(xDlg)
RETURN Nil
STATIC FUNCTION gui_BrowseKeyDown( xControl, msg, wParam, lParam, cField, xValue, aBlockList, xDlg )
LOCAL nKey, nPos
IF msg == WM_KEYDOWN
nKey := hwg_PtrToUlong( wParam )
nPos := hb_AScan( aBlockList, { | e | nKey == e[ 1 ] } )
IF nPos != 0
Eval( aBlockList[ nPos ][ 2 ], cField, @xValue, xDlg )
ENDIF
// IF nKey = VK_RETURN
// IF ! Empty( cField )
// xValue := FieldGet( FieldNum( cField, xValue ) )
// ENDIF
// hwg_EndDialog()
//ENDIF
ENDIF
(xControl)
(lParam)
RETURN .T.