Pra quem quiser acrescentar mais LIBs....
E lib_hmg3.prg, com a criação de um controle de cada, pegando lib_hmge.prg de referência pra ponto de partida.
Código: Selecionar todos
/*
lib_hmg3 - HMG 3 source selected by lib.prg
*/
#include "frm_class.ch"
FUNCTION gui_ButtonCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, cCaption, cResName, bAction )
IF Empty( xControl )
xControl := gui_newctlname( "BUTTON" )
ENDIF
DEFINE BUTTON ( xControl )
PARENT ( xDlg )
ROW nRow
COL nCol
WIDTH nWidth
HEIGHT nHeight
//ICON cResName
CAPTION cCaption
ACTION Eval( bAction )
//IMAGEWIDTH nWidth - 20
//IMAGEHEIGHT nHeight - 20
//FONTNAME DEFAULT_FONTNAME
//FONTSIZE 9
//FONTBOLD .T.
//FONTCOLOR COLOR_BLACK
//VERTICAL .T.
//BACKCOLOR COLOR_WHITE
//FLAT .T.
//NOXPSTYLE .T.
END BUTTON
(xDlg);(xControl);(nRow);(nCol);(nWidth);(nHeight);(cCaption);(cResName);(bAction)
RETURN Nil
FUNCTION gui_ButtonEnable( xDlg, xControl, lEnable )
SetProperty( xDlg, xControl, "ENABLED", lEnable )
RETURN Nil
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[3] )
AAdd( aWidthList, Len( Transform(FieldGet(FieldNum(aItem[3])),"")) * 10 )
NEXT
@ nRow, nCol GRID ( xControl ) ;
OF ( xDlg ) ;
WIDTH nWidth ;
HEIGHT nHeight ;
HEADERS aHeaderList ;
WIDTHS aWidthList ;
ROWSOURCE ( workarea ) ;
COLUMNFIELDS aFieldList
(xDlg);(cField);(xValue);(workarea)
RETURN Nil
FUNCTION gui_DialogActivate( xDlg, bCode )
IF ! Empty( bCode )
Eval( bCode )
ENDIF
DoMethod( xDlg, "CENTER" )
ACTIVATE WINDOW ( xDlg )
RETURN Nil
FUNCTION gui_DialogClose( xDlg )
DoMethod( xDlg, "RELEASE" )
RETURN Nil
FUNCTION gui_DialogCreate( xDlg, nRow, nCol, nWidth, nHeight, cTitle, bInit )
IF Empty( xDlg )
xDlg := gui_newctlname( "DIALOG" )
ENDIF
IF Empty( bInit )
bInit := { || Nil }
ENDIF
DEFINE WINDOW ( xDlg ) ;
AT nCol, nRow ;
WIDTH nWidth ;
HEIGHT nHeight ;
TITLE cTitle ;
MODAL ;
ON INIT Eval( bInit )
END WINDOW
RETURN Nil
FUNCTION gui_IsCurrentFocus( xDlg, xControl )
RETURN _GetFocusedControl( xDlg ) == xControl
FUNCTION gui_LabelCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, xValue, lBorder )
IF Empty( xControl )
xControl := gui_newctlname( "LABEL" )
ENDIF
// não mostra borda
//DEFINE LABEL ( xControl )
// PARENT ( xDlg )
// COL nCol
// ROW nRow
// WIDTH nWidth
// HEIGHT nHeight
// VALUE xValue
// BORDER lBorder
//END LABEL
IF lBorder
@ nRow, nCol LABEL ( xControl ) PARENT ( xDlg ) ;
VALUE xValue WIDTH nWidth HEIGHT nHeight BORDER
ELSE
@ nRow, nCol LABEL ( xControl ) PARENT ( xDlg ) ;
VALUE xValue WIDTH nWidth HEIGHT nHeight
ENDIF
(xDlg)
RETURN Nil
FUNCTION gui_LabelSetValue( xDlg, xControl, xValue )
SetProperty( xDlg, xControl, "VALUE", xValue )
RETURN Nil
FUNCTION gui_MLTextCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, xValue )
IF Empty( xControl )
xControl := gui_newctlname( "MLTEXT" )
ENDIF
DEFINE EDITBOX ( xControl )
PARENT ( xDlg )
COL nCol
ROW nRow
WIDTH nWidth
HEIGHT nHeight
VALUE xValue
TOOLTIP 'EditBox'
NOHSCROLLBAR .T.
END EDITBOX
(xDlg)
RETURN Nil
FUNCTION gui_MsgGeneric( cText )
RETURN Msgbox( cText )
FUNCTION gui_PanelCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight )
IF Empty( xControl )
xControl := gui_newctlname( "PANEL" )
ENDIF
(xDlg); (xControl); (nRow); (nCol); (nWidth); (nHeight)
RETURN Nil
FUNCTION gui_SetFocus( xDlg, xControl )
DoMethod( xDlg, xControl, "SETFOCUS" )
RETURN Nil
FUNCTION gui_TabCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight )
IF Empty( xControl )
xControl := gui_newctlname( "TAB" )
ENDIF
DEFINE TAB ( xControl ) ;
PARENT ( xDlg ) ;
AT nRow, nCol;
WIDTH nWidth ;
HEIGHT nHeight
(xDlg)
RETURN Nil
FUNCTION gui_TabEnd()
END TAB
RETURN Nil
FUNCTION gui_TabNavigate( xDlg, oTab, aList )
(xDlg);(oTab);(aList)
RETURN Nil
FUNCTION gui_TabPageBegin( xDlg, xControl, cText )
PAGE ( cText )
(xDlg); (xControl); (cText)
RETURN Nil
FUNCTION gui_TabPageEnd( xDlg, xControl )
END PAGE
(xDlg); (xControl)
RETURN Nil
FUNCTION gui_TextCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, ;
xValue, cPicture, nMaxLength, bValid )
IF Empty( xControl )
xControl := gui_newctlname( "TEXT" )
ENDIF
DEFINE TEXTBOX ( xControl )
PARENT ( xDlg )
ROW nRow
COL nCol
HEIGHT nHeight
WIDTH nWidth
FONTNAME DEFAULT_FONTNAME
IF ValType( xValue ) == "N"
NUMERIC .T.
INPUTMASK cPicture
ELSEIF ValType( xValue ) == "D"
DATE .T.
ELSE
MAXLENGTH nMaxLength
ENDIF
VALUE xValue
ON LOSTFOCUS Eval( bValid )
END TEXTBOX
(bValid);(xDlg)
RETURN Nil
FUNCTION gui_TextEnable( xDlg, xControl, lEnable )
SetProperty( xDlg, xControl, "ENABLED", lEnable )
RETURN Nil
FUNCTION gui_TextGetValue( xDlg, xControl )
(xDlg)
RETURN GetProperty( xDlg, xControl, "VALUE" )
FUNCTION gui_TextSetValue( xDlg, xControl, xValue )
// NOTE: string value, except if declared different on textbox creation
SetProperty( xDlg, xControl, "VALUE", iif( ValType( xValue ) == "D", hb_Dtoc( xValue ), xValue ) )
RETURN Nil
STATIC FUNCTION gui_newctlname( cPrefix )
STATIC nCount := 0
nCount += 1
hb_Default( @cPrefix, "ANY" )
RETURN cPrefix + StrZero( nCount, 10 )
E tá rodando compilando com HMG3.
Criação de telas pra todos os DBFs da pasta, edição, validação, browse.
O que eu duvido é que alguém faça isso funcionar com HMG 3 original.