/* * MINIGUI - Harbour Win32 GUI library Demo */ #define _HMG_OUTLOG #include "minigui.ch" #include "tsbrowse.ch" #include "dbinfo.ch" // ----------------------------------- FUNCTION Main() // ----------------------------------- LOCAL cFont := "Tahoma", nSize := 10 LOCAL cAls := "TEST", cDbf LOCAL cFil := "test.dbf" SET OOP ON SET AUTOADJUST ON NOBUTTONS SET FONT TO cFont, nSize DEFINE FONT Normal FONTNAME cFont SIZE nSize DEFINE FONT Bold FONTNAME cFont SIZE nSize BOLD DEFINE FONT Italic FONTNAME cFont SIZE nSize ITALIC SET DEFAULT ICON TO GetStartupFolder() + "\demo.ico" fErase("_MsgLog.txt") cDbf := hb_dirBase() + cFil if !file( cDbf ) ; CreateTable() endif USE ( cDbf ) ALIAS ( cAls ) NEW DEFINE WINDOW sample AT 0, 0 WIDTH 640 HEIGHT 480 ; TITLE "Open Table via SBrowse" ; MAIN NOSHOW ; ON INIT _wPost( 0) ; ON RELEASE _wSend(98) This.Cargo := oHmgData() This.Cargo:cDbf := cDbf This.Cargo:cAls := cAls This.Cargo:aStru := (cAls)->( dbStruct() ) with object This.Object :Event( 0, {|ow| Local aData aData := my_Sbrowse(ow) _wSend( 1, ow, aData) _wSend(99, ow) Return Nil }) :Event( 1, {|ow,ky,aArr| ky := ow:Cargo:cAls IF Select(ky) > 0 (ky)->( dbZap() ) (ky)->( HMG_ArrayToDBF( aArr ) ) (ky)->( dbGoTop() ) ENDIF Return Nil }) :Event(98, {|ow|(ow:Cargo:cAls)->( dbCloseArea() ) }) :Event(99, {|ow| ow:Release() }) end with END WINDOW sample.Center() sample.Activate() RETURN NIL // ----------------------------------- FUNCTION my_SBrowse( ow ) // ----------------------------------- Local o := ow:Cargo Local bSetup := {|obrw,laft| SetMyBrowser(obrw, laft)} Local cTitle := "Test Browse: Right Click For Record View" Local cAls := o:cAls Local aData := (cAls)->( HMG_DbfToArray() ) SBrowse( aData, cTitle, bSetup,, 950, 430,,, .T. ) RETURN aData // ----------------------------------- FUNCTION CreateTable // ----------------------------------- LOCAL cT dbCreate( "Test", { { "CODE", "C", 3, 0 }, { "NAME", "C", 50, 0 }, { "RESIDENTS", "N", 11, 0 }, { "NOTES", "M", 10, 0 } },, .T. ) dbAppend() REPLACE CODE WITH 'LTU', NAME WITH 'Lithuania', RESIDENTS WITH 3369600 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'USA', NAME WITH 'United States of America', RESIDENTS WITH 305397000 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'POR', NAME WITH 'Portugal', RESIDENTS WITH 10617600 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'POL', NAME WITH 'Poland', RESIDENTS WITH 38115967 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'AUS', NAME WITH 'Australia', RESIDENTS WITH 21446187 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'FRA', NAME WITH 'France', RESIDENTS WITH 64473140 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'RUS', NAME WITH 'Russia', RESIDENTS WITH 141900000 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT USE RETURN NIL // ----------------------------------- FUNCTION SetMyBrowser( oBrw, lAft ) // ----------------------------------- LOCAL cTitle, oCol, nCol LOCAL hFont := GetFontHandle( "Bold" ) LOCAL ow := _WindowObj( oBrw:cParentWnd ) LOCAL om := _WindowObj( _HMG_MainHandle ) LOCAL o := om:Cargo // main cargo IF Empty( lAft ) SetProperty( ow:Name, "MinWidth" , 950 ) SetProperty( ow:Name, "MinHeight", 430 ) ON KEY CONTROL+W OF &(ow:Name) ; ACTION {|| Local oBrw := This.oBrw.Object If oBrw:IsEdit // tsb field edit oBrw:aColumns[ oBrw:nCell ]:oEdit:Save() oBrw:SetFocus() EndIf Return Nil } WITH OBJECT oBrw :nHeightCell += 5 :nHeightHead += 12 :nClrFocuFore := CLR_BLACK :nClrFocuBack := COLOR_GRID :hFontSupHd := hFont :nHeightSuper := oBrw:nHeightHead END WITH cTitle := "Code" ADD SUPER HEADER TO oBrw FROM 1 TO 2 TITLE " Array" ADD SUPER HEADER TO oBrw FROM 3 TO oBrw:nColCount() TITLE cTitle FOR EACH oCol IN oBrw:aColumns nCol := hb_enumindex(oCol) oCol:hFontHead := hFont oCol:cName := o:aStru[ nCol, 1 ] oCol:cDataType := o:aStru[ nCol, 2 ] oCol:cField := oCol:cName oCol:nFieldLen := o:aStru[ nCol, 3 ] oCol:nFieldDec := o:aStru[ nCol, 4 ] oCol:cHeading := oCol:cName IF oCol:cName == "NOTES" oCol:nWidth += 200 oCol:lEditBox := oCol:cDataType == "M" oCol:cDataType := "C" ELSEIF oCol:cName == "NAME" oCol:nWidth += 70 ENDIF NEXT ELSE ow:Enabler("Btn_1", .F.) ow:Enabler("Btn_2", .F.) oCol := oBrw:GetColumn( "ARRAYNO" ) oCol:hFont := GetFontHandle( "Italic" ) oCol:hFontFoot := hFont oCol:cDataType := Valtype(oBrw:GetValue(oCol)) FOR EACH oCol IN oBrw:aColumns ? hb_enumindex(oCol), oCol:cDataType, oCol:cName, oCol:cField NEXT oCol := ATail( oBrw:aColumns ) ATail( oBrw:aSuperHead )[ 2 ] := oBrw:nColumn( oCol:cName ) IF oBrw:nLen > oBrw:nRowCount() oBrw:ResetVScroll( .T. ) ENDIF oBrw:AdjColumns() oBrw:SetNoHoles() oBrw:SetFocus() ENDIF RETURN .T. // editable browse (return .F. is readonly)
|