It still doesn't work making the changes in bar.prg ( tbar class ) that you suggested. We get the same error.
Again, this is all on a dialog. There is a bar for the dialog. Then there are 7 folders ( refer to the picture ) and each has its own button bar. This worked perfectly in 11.09 ( at least with xHarbour ). Because these are bars on a dialog, they are all placed in a function which is called when the dialog is activated.
Here is an abbreviated example of the Bar controls for the folders. They must be called in the dialog Activate command.
FUNCTION OrdBar( )
MEMVAR cOrdLic, cSrvMil, aDuePm, oWrk, oDla, oLbx2, oDpa, oFld, aSrvUnt, aJobCost, ;
cWrkOrd, nDepAmt, aMsg, aConst, aFieldVals, nLbTx, nPaTx, aFlags, aPhones, ;
cStatus, oLbx1, oDpar, aTechs, oDlar, oSF3, oSF4, oLbx5, oRec, oRecr, oSf5, ;
oCli, oWdlg, oWdlg1
// Declare LOCAL variables for buttons
LOCAL oBar1,oBtn11,oBtn12,oBtn13,oBtn14,oBtn15,oBtn16,oBtn17,oBtn18, oBtn19
LOCAL oBar2,oBtn21,oBtn22,oBtn23,oBtn24,oBtn25,oBtn26,oBtn27,oBtn28,oBtn29, oBtn2a, oBtn2b
LOCAL oBar3,oBtn31,oBtn32,oBtn33,oBtn34,oBtn35,oBtn36
LOCAL oBar4,oBtn41,oBtn42,oBtn43,oBtn44,oBtn45,oBtn46
LOCAL oBar5,oBtn51,oBtn52,oBtn53,oBtn54
LOCAL oBar6,oBtn61,oBtn62,oBtn63
LOCAL oBtn1A, oBtn1B, oBtn1C, oBtn1D, oBtn1E, oBtnA5, oBtn20, oBtn47, oBtn55
// Define the workorder button bar. This is the main one for the dialog
DEFINE BUTTONBAR oBar1 SIZE 50,60 OF oWdlg1 2007
DEFINE BUTTON oBtn11 OF oBar1 RESOURCE "HRPM" PROMPT "P/M's" TOOLTIP "View P/M Schedule";
ACTION( PRO1051( cOrdLic, cSrvMil, aDuePM), sysRefresh() )
DEFINE BUTTON oBtn12 OF oBar1 RESOURCE "ORDER" PROMPT "History" TOOLTIP "View Service History" ;
ACTION ( PRO7500( oWrk:vehlic ) )
... more buttons defined for the main bar
// Define the general button bar ... this is Folder 1
DEFINE BUTTONBAR oBar2 SIZE 50,60 OF oFld:aDialogs[ 1 ] 2007
DEFINE BUTTON oBtn21 OF oBar2 RESOURCE "UNITS" PROMPT "Vehicle" TOOLTIP "Select/Edit Vehicle" ;
ACTION ( aSrvUnt := UnitData( oWrk, aSrvUnt ), aFieldVals[17] := aSrvUnt[9], aFieldVals[19] := aSrvUnt[29],;
nLbTx := aSrvUnt[39]*100, nPaTx := aSrvUnt[38]*100, oFld:update( ), oWdlg1:SetText( "Workorder: " + oWrk:wrkord +;
" Unit: " + oWrk:ordveh + " Client: " + oWrk:ordcom ), IIF( aSrvUnt[8] = "HLD", MsgInfo( "URGENT - Check client notes" ), ) )
DEFINE BUTTON oBtn22 OF oBar2 RESOURCE "INFO" PROMPT "Data" TOOLTIP "View Vehicle Data" ;
ACTION ShowVehicle( aSrvUnt )
... more are defined for this bar
// Define the parts button bar which is on folder 2
DEFINE BUTTONBAR oBar3 SIZE 50,60 OF oFld:aDialogs[ 2 ] 2007
DEFINE BUTTON oBtn31 OF oBar3 RESOURCE "HRADD" PROMPT "Add" TOOLTIP "Add a new part" ;
ACTION ( aFlags[1] := .T. , oLbx1:gobottom(), PartAdd( oDpa, cWrkOrd, cStatus ) , aFlags[ 26 ] := .T. , ;
oLbx1:skip(0), oDpar:load(), oFld:update( ), oSF3:SetFocus( ) )
DEFINE BUTTON oBtn32 OF oBar3 RESOURCE "HRSAVE" PROMPT "Save" TOOLTIP "Save a part" ;
ACTION ( oDpar:partot := oDpar:parqun * oDpar:parchg, oDpar:save( ), ;
PartSave( oDpar, cWrkOrd, cStatus ), oWrk := UpdateTotals( oWrk, oDpa, oDla, aSrvUnt ), ;
aJobCost := JobCost( aJobCost, oWrk ), oLbx1:refresh(), oDpar:load(), oFld:update( ), oLbx1:setfocus( ) )
DEFINE BUTTON oBtn33 OF oBar3 RESOURCE "HRDELETE" PROMPT "Delete" TOOLTIP "Delete a part" ;
ACTION ( PartDelete( oDpa, oDpar ), oWrk := UpdateTotals( oWrk, oDpa, oDla, aSrvUnt), aJobCost := JobCost(aJobCost,oWrk),;
oLbx1:Refresh( ), oLbx1:gotop( ), oDpar:load(), oFld:update(), oLbx1:setfocus())
... and there are several more
// Define the labor button bar which is folder 3
DEFINE BUTTONBAR oBar4 SIZE 50,60 OF oFld:aDialogs[ 3 ] 2007
DEFINE BUTTON oBtn41 OF oBar4 RESOURCE "HRADD" PROMPT "Add" TOOLTIP "Add a new labor item" ;
ACTION ( oLbx2:gobottom(), oDla:append( ), oDla:blank( ), oDlar:load(), oDlar:wrkord := oWrk:wrkord, ;
oDlar:wrkdat := DATE( ), oDlar:status := oWrk:status, oDlar:labtxf := IIF( aFlags[11], aFlags[6],.F.), ;
aFlags[4] := .T. , oDlar:labrat := aFieldVals[18], oDlar:depart := cDept, oDlar:labmec := aFieldVals[ 4 ],;
oDlar:labtot := 0.00, oDlar:save( ), SetLabor( oDlar ), aFlags[ 27 ] := .T. , oFld:update( ), oSF4:SetFocus( ) )
DEFINE BUTTON oBtn42 OF oBar4 RESOURCE "HRSAVE" PROMPT "Save" TOOLTIP "Save labor detail" ;
ACTION ( oDlar := LaborSave( oDlar, aTechs ), oDlar:save( ), oWrk := UpdateTotals( oWrk, oDpa, oDla, aSrvUnt ),;
aJobCost := JobCost( aJobCost, oWrk ), oDlar := GlossLink( oDla, oDlar, cWrkord, cStatus ), oLbx2:refresh(), oFld:update( ), oLbx2:setfocus( ) )
DEFINE BUTTON oBtn43 OF oBar4 RESOURCE "HRDELETE" PROMPT "Delete" TOOLTIP "Delete a labor item" ;
ACTION ( LaborDelete( oDla ), oWrk := UpdateTotals( oWrk, oDpa, oDla, aSrvUnt ), aJobCost := JobCost( aJobCost, oWrk ),;
oDla:skip( ), oLbx2:refresh(), oDlar:load(), oFld:update( ), oLbx2:setfocus( ) )
... and there are more
// Define the recommendations button bar which is folder 4
DEFINE BUTTONBAR oBar5 SIZE 50,60 OF oFld:aDialogs[ 4 ] 2007
DEFINE BUTTON oBtn51 OF oBar5 RESOURCE "HRADD" PROMPT "Add" TOOLTIP "Add a new recommendation" ;
ACTION ( oLbx5:gobottom(), oRec:append(), oRec:blank( ), oRecr:load(), oRecr:wrkord := oWrk:wrkord, oRecr:wrkdat := DATE( ),;
oRecr:vehlic := oWrk:ordlic, oRecr:save( ), oFld:update( ), oSF5:SetFocus( ) )
DEFINE BUTTON oBtn52 OF oBar5 RESOURCE "HRSAVE" PROMPT "Save" TOOLTIP "Save a recommendation" ;
ACTION ( oRecr:labdes := MEMOLINE( oRecr:rectxt, 60, 1,, .t. ),IIF( EMPTY( oRecr:labcod), oRecr:labcod := "None", ), ;
oRecr:save( ), oLbx5:refresh(), oRecr:load(), oFld:update( ), oLbx5:setfocus( ) )
... and there are more
// Define the totals button bar ... this is folder 5
DEFINE BUTTONBAR oBar6 SIZE 50,60 OF oFld:aDialogs[ 5 ] 2007
DEFINE BUTTON oBtn61 OF oBar6 RESOURCE "HRCALC" PROMPT "Re-sum" TOOLTIP "Re-calculate totals" ;
ACTION ( oWrk := CalcTotals( oWrk, oCli, oDpa, oDla ), oFld:update( ) )
DEFINE BUTTON oBtn62 OF oBar6 RESOURCE "INFO" PROMPT "A/R" TOOLTIP "A/R Account Balance" ;
ACTION AvailCredit(oWrk:acrnum)
RETURN NIL