Are you sure?
GUI menu is a bad thing.
Check on samples the function buildmenu()
Not sure if this can help, because I use a recursive array.
STATIC FUNCTION MenuWvg( mMenuOpt )
LOCAL oMenu
oMenu := wvgSetAppWindow():MenuBar()
BuildMenu( oMenu, mMenuOpt )
...
FUNCTION BuildMenu( oMenu, acMenu )
LOCAL oElement, oSubMenu, cbCode, m_ProgTxt
FOR EACH oElement IN acMenu
IF Len( oElement[ 2 ] ) == 0
m_Prog := oElement[ 3 ]
IF ValType( m_Prog ) == "C"
cbCode := [{ || RunModule( "] + m_Prog + [", "] +
m_ProgTxt + [" ) }]
oMenu:AddItem( oElement[ 1 ] , &( cbCode ) )
ELSE
oMenu:AddItem( oElement[ 1 ], oElement[ 3 ] )
ENDIF
ELSE
oSubMenu := WvgMenu():new( oMenu, , .T. ):Create()
BuildMenu( oSubMenu, oElement[ 2 ] )
oMenu:AddItem( oSubMenu, oElement[ 1 ] )
ENDIF
NEXT
RETURN NIL
Array have this format:
{ cCaption, {}, cModule }
Second parameter may be another array with same format, with a submenu.
Third parameter may be a text or a codeblock
José M. C. Quintas
I have built and successfully used a tool, WVWClip, for doing just what you are about to do but it is based on GTWVW.
Good part is that your original Clipper code will require minimum of changes. I can share my work with you.
GUI menu is a bad thing.
Check on samples the function buildmenu()
Not sure if this can help, because I use a recursive array.
Hi PeteLook at this function which is self-explanatory.But this menu option may be special - as you want to intercept inkey() loop:oMenu:AddItem( "Exit" , {|| __Keyboard( K_ESC ) } )Vis this mechanism you can push keys in keyboard buffer and handled via inkey(). Is this sufficient ?
--
--
You received this message because you are subscribed to the Google
Groups "Harbour Users" group.
Unsubscribe: harbour-user...@googlegroups.com
Web: http://groups.google.com/group/harbour-users
---
You received this message because you are subscribed to the Google Groups "Harbour Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to harbour-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/harbour-users/edfd8c83-81ba-4f28-9936-adb26d3dce5a%40googlegroups.com.
Pete,I invite you to think twice about switching the menu system.My program has a very basic, let's say "3270 era" menu system. Everytime you make a selection, a new menu opens, nidified. In this way users can - from whatever point in the menu system they are, just press ESC several times (ESC exits the current menu and control returns to the previous) up to the main menu (ESC doesn't working on main menu).So, to create an invoice, from any menu they are they can press ESC ESC ESC ESC ESC 4 1 1 and the "emit invoice form opens". or ESC ESC ESC ESC 6 3 1 to open the form to check if a client have sums to pay...I think that forcing them to use mouse may make them lose time...What to do when you open a form for creating a invoice? would you disable the menu until the form is closed? Or would you start using MT to have several forms opened (it would be my dream)?
On Thu, May 28, 2020 at 12:27 PM Pete <pete...@gmail.com> wrote:
--Hi all,Any gtwvg power user around here? ;-)
I've been asked to renovate an old (but reliably working) application.
I'm thinking to add some GUI "bells & whistles", starting from a (windows like) GUI Menu.The rest UI will be remain as is, and gradually in the future I'll, possibly, add, some additionalGUY elements. For now, that's all I want to do. Just a GUI menu.The question(s) is, is it possible to be done as described and if yes,
has anybody got (and wants to share) a `SIMPLE` sample code, for this thing?
I've looked in `gtwvg\tests` but I found it a little-bit more complicated than I wished it to be.
Any contribution, "as simple as possible and even more simple", is very welcome!regards,Pete
--
You received this message because you are subscribed to the Google
Groups "Harbour Users" group.
Unsubscribe: harbou...@googlegroups.com
Web: http://groups.google.com/group/harbour-users
---
You received this message because you are subscribed to the Google Groups "Harbour Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to harbou...@googlegroups.com.
Pete,I invite you to think twice about switching the menu system.
My program has a very basic, let's say "3270 era" menu system. Everytime you make a selection, a new menu opens, nidified. In this way users can - from whatever point in the menu system they are, just press ESC several times (ESC exits the current menu and control returns to the previous) up to the main menu (ESC doesn't working on main menu).
... Or would you start using MT to have several forms opened (it would be my dream)?
Unsubscribe: harbour-user...@googlegroups.com
Web: http://groups.google.com/group/harbour-users
---
You received this message because you are subscribed to the Google Groups "Harbour Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to harbour-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/harbour-users/491efe82-d6de-4982-9e4d-93d9998191fb%40googlegroups.com.
Hello Pete,Attached is a sample application using GTWVG. It uses ideas from WVWClip. Please compile as shown below.
To view this discussion on the web visit https://groups.google.com/d/msgid/harbour-users/491efe82-d6de-4982-9e4d-93d9998191fb%40googlegroups.com.
Hi Ash.
On Saturday, 30 May 2020 17:27:09 UTC+3, Ash wrote:Hello Pete,Attached is a sample application using GTWVG. It uses ideas from WVWClip. Please compile as shown below.Hi Ash,
thank you very much for your sample-code. Now, we are making some real progress... ;-)
Pete, buenas noches.
Pete,
> Wouldn't multiple active open windows be confusing to the user?
> If the program is well constructed, there should be very little reason to use two windows at the same time.
>And the few times it's helpful, one could run two copies of the program.
INIT PROCEDURE MainInit()
// better than : SET MULTIPLE OFF WARNING
LOCAL cTitle := 'HBFM ' + cVersion
LOCAL hWndDlg := FindWindowEx(,,, cTitle )
IF !( hWndDlg == 0 )
SetForegroundWindow( hWndDlg )
BringWindowToTop( hWndDlg )
ShowWindow( hWndDlg, 1 )
UpdateWindow( hWndDlg )
QUIT // It is a second instance. Bye Bye
ENDIF
RETURN
FUNCTION Main
// here Main begin
Pete,I invite you to think twice about switching the menu system.My program has a very basic, let's say "3270 era" menu system. Everytime you make a selection, a new menu opens, nidified. In this way users can - from whatever point in the menu system they are, just press ESC several times (ESC exits the current menu and control returns to the previous) up to the main menu (ESC doesn't working on main menu).So, to create an invoice, from any menu they are they can press ESC ESC ESC ESC ESC 4 1 1 and the "emit invoice form opens". or ESC ESC ESC ESC 6 3 1 to open the form to check if a client have sums to pay...I think that forcing them to use mouse may make them lose time...What to do when you open a form for creating a invoice? would you disable the menu until the form is closed? Or would you start using MT to have several forms opened (it would be my dream)?
On Thu, May 28, 2020 at 12:27 PM Pete <pete...@gmail.com> wrote:
--Hi all,Any gtwvg power user around here? ;-)
I've been asked to renovate an old (but reliably working) application.
I'm thinking to add some GUI "bells & whistles", starting from a (windows like) GUI Menu.The rest UI will be remain as is, and gradually in the future I'll, possibly, add, some additionalGUY elements. For now, that's all I want to do. Just a GUI menu.The question(s) is, is it possible to be done as described and if yes,
has anybody got (and wants to share) a `SIMPLE` sample code, for this thing?
I've looked in `gtwvg\tests` but I found it a little-bit more complicated than I wished it to be.
Any contribution, "as simple as possible and even more simple", is very welcome!regards,Pete
--
You received this message because you are subscribed to the Google
Groups "Harbour Users" group.
Unsubscribe: harbou...@googlegroups.com
Web: http://groups.google.com/group/harbour-users
---
You received this message because you are subscribed to the Google Groups "Harbour Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to harbou...@googlegroups.com.
Hello Marek,
Hi
I in my case, added this function (from webpage of Jose Quintas):
#include "hbdyn.ch"
// esta funcionou
Function WAPI_GetSysColor( pGetSysColor )
Local hHandleDll := 0, nColor := 0
HB_SYMBOL_UNUSED( hHandleDll )
HB_SYMBOL_UNUSED( nColor )
hHandleDll := hb_LibLoad("user32.dll")
nColor := hb_DynCall( { "GetSysColor", hHandleDll,
HB_DYN_CALLCONV_STDCALL }, pGetSysColor ); HB_SYMBOL_UNUSED(
nColor )
hb_LibFree( hHandleDll )
Return nColor
I hope this helps.
BR
GVARONAS
Unsubscribe: harbour-user...@googlegroups.com
Web: http://groups.google.com/group/harbour-users
---
You received this message because you are subscribed to the Google Groups "Harbour Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to harbour-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/harbour-users/e72253dc-1e08-40d7-a7ed-e778ef114da5%40googlegroups.com.
The only `stopper` for someone to exploit the capabilities of GTWVG is not the "usual suspect", the documentation, :-)but, IMO, the lack of small compile-able samples, displaying the functionality of different GUI elements and functions of the library.
--
--
You received this message because you are subscribed to the Google
Groups "Harbour Users" group.
Unsubscribe: harbour-user...@googlegroups.com
Web: http://groups.google.com/group/harbour-users
---
You received this message because you are subscribed to the Google Groups "Harbour Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to harbour-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/harbour-users/e1cfba4e-cc9c-486d-b30f-f2a1db533bedn%40googlegroups.com.
My menu is an array.
I do not like windows menu, but can use it.
STATIC FUNCTION MenuWvg( mMenuOpt )
LOCAL oMenu, nKey
oMenu := wvgSetAppWindow():MenuBar()
BuildMenu( oMenu, mMenuOpt )
DO WHILE .T.
nKey := Inkey( INKEY_IDLE )
DO CASE
CASE nKey == HB_K_GOTFOCUS
CASE nKey == HB_K_LOSTFOCUS
CASE nKey == K_ESC
EXIT
ENDCASE
ENDDO
wvgSetAppWindow():oMenu := NIL
wapi_SetMenu( wapi_GetActiveWindow(), NIL )
wapi_DestroyMenu( oMenu:hWnd )
RETURN NIL
FUNCTION BuildMenu( oMenu, acMenu )
LOCAL oElement, oSubMenu, cbCode, m_ProgTxt
FOR EACH oElement IN acMenu
IF Len( oElement[ 2 ] ) == 0
m_Prog := oElement[ 3 ]
IF ValType( m_Prog ) == "C"
m_ProgTxt := AppEmpresaApelido() + " (" +
AppUserName() + ") (" + m_Prog + ") " + Upper( oElement[ 1 ] )
cbCode := [{ || RunModule( "] + m_Prog + [", "] +
m_ProgTxt + [" ) }]
oMenu:AddItem( oElement[ 1 ] , &( cbCode ) )
ELSE
oMenu:AddItem( oElement[ 1 ], oElement[ 3 ] )
ENDIF
ELSE
oSubMenu := WvgMenu():new( oMenu, , .T. ):Create()
BuildMenu( oSubMenu, oElement[ 2 ] )
oMenu:AddItem( oSubMenu, oElement[ 1 ] )
ENDIF
NEXT
RETURN NIL
For array creation:
nMenuLevel := 0
oMenuOptions := {}
MenuOption( "Faturamento" )
MenuDrop()
MenuOption( "Pedidos/Notas/Manifesto" )
MenuDrop()
MenuOption( "Orçamentos/Pedidos",
"PJPPEDIDO" )
MenuOption( "Orçamentos/Pedidos SubOpções" )
MenuDrop()
MenuOption( "(I)Ped.Cancelamento",
"ADMPEDCAN" )
MenuOption( "(I)Reemite Cupom pra Pedido",
"PJPPEDIDOCUPOM" )
MenuOption( "(I)Ped.Duplicar Pedidos",
"ADMPEDCLO" )
MenuUndrop()
MenuUndrop()
MenuUnDrop()
//
STATIC FUNCTION MenuOption( cCaption, cModule, bCode )
LOCAL nCont, oLastMenu
oLastMenu := oMenuOptions
FOR nCont = 1 TO nMenuLevel
oLastMenu := oLastMenu[ Len( oLastMenu ) ]
oLastMenu := oLastMenu[ 2 ]
NEXT
AAdd( oLastMenu, { cCaption, {}, cModule, bCode, 1 } )
RETURN NIL
STATIC FUNCTION MenuDrop()
nMenuLevel++
RETURN NIL
STATIC FUNCTION MenuUnDrop()
nMenuLevel--
RETURN NIL
José M. C. Quintas
To view this discussion on the web visit https://groups.google.com/d/msgid/harbour-users/CADhhxhyvATNz3rDx1vZhoF0oK5C%2B3KU05%3D_MmMJVC7oFohab4Q%40mail.gmail.com.
Same code I already send.
José M. C. Quintas
To view this discussion on the web visit https://groups.google.com/d/msgid/harbour-users/d326d6a5-6af9-4709-aa79-700305a2d478n%40googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/harbour-users/a5ae42a3-e4f4-3159-98f8-204fa3272c57%40gmail.com.
On tests I mix GTWVG with HWGUI, HMG, HMG Extended, OOHG.
I do not have console module, use GTWVG for all.
I use multithread, then each module have it's own thread, and more than one module can be opened at same time, including the same.
Console uses the Windows console, I think it is not a good option
to mix.
José M. C. Quintas
---
You received this message because you are subscribed to the Google Groups "Harbour Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to harbour-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/harbour-users/ca25fadd-20bd-4b1b-bc55-66f2df3418een%40googlegroups.com.
Using REQUEST HB_GT_WIN_DEFAULT, you are using console, not GTWVG.
Change to REQUEST HB_GT_WVG_DEFAULT
Note: when using GUI/GTWVG, may be you need a new errorsys, I
change it to write to HB_OUT.LOG and open on notepad.
José M. C. Quintas
To view this discussion on the web visit https://groups.google.com/d/msgid/harbour-users/2bee50f1-4fd9-4f1d-a8ea-99bc8a5af6a8n%40googlegroups.com.
my mistake:
REQUEST HB_GTWVG_DEFAULT
José M. C. Quintas
| Assunto: | Re: [harbour-users] Re: simple GTWVG sample code? |
|---|---|
| Data: | Thu, 1 Dec 2022 13:53:31 -0300 |
| De: |
| José M. C. Quintas <jmcqu...@gmail.com> |
Hi PeteJust remove or comment-out these lines from demowvg.prg. and you will get a pure console window without GETs GUIed.oLastMenu:disableItem( 11 )oLastMenu:checkItem( 1 )oLastMenu:insItem( 11, { "I am inserted later !", ;{|| wvg_MessageBox( , "Hi " + iif( oLastMenu:isItemChecked( 1 ), "Yes", "No" ) + ;iif( oLastMenu:isItemEnabled( 12 ), " Yes", " No" ) ) } } )oLastMenu:setItem( 14, { "This is Set Against Prev Menu", {|| wvg_MessageBox( , "Hi" ) } } )SetMode( MaxRow() + 1, MaxCol() + 1 ) /* Needed to accommodate attached menu */SetKey( K_F12 , {|| hb_gtInfo( HB_GTI_ACTIVATESELECTCOPY ) } )SetKey( K_CTRL_V , {|| __Keyboard( hb_gtInfo( HB_GTI_CLIPBOARDDATA ) ) } )SetKey( K_RBUTTONDOWN, {|| __Keyboard( hb_gtInfo( HB_GTI_CLIPBOARDDATA ) ) } )hPopup := wvt_SetPopupMenu()pGT := SetGT( 1, hb_gtSelect() )/* Force mouse pointer right below the Harbour label */wvt_SetMousePos( 2, 40 )AAdd( aBlocks, {|| wvt_SetIcon( GetResource( "vr_1.ico" ) ) } )AAdd( aBlocks, {|| Wvt_SetTitle( "Vouch" ) } )AAdd( aBlocks, {|| wvt_DrawLabel( 1, 40, cLabel, 6,, RGB( 255, 255, 255 ), RGB( 198, 198, 198 ), "Arial", 26, , , , , .T., .T. ) } )AAdd( aBlocks, {|| wvt_DrawBoxRaised( nTop, nLft, nBtm, nRgt ) } )AAdd( aBlocks, {|| wvt_DrawBoxRecessed( 7, 61, 13, 70 ) } )AAdd( aBlocks, {|| wvt_DrawBoxGroup( 15, 59, 18, 72 ) } )AAdd( aBlocks, {|| wvt_DrawBoxGroup( 5, 6, 19, 44 ) } )AAdd( aBlocks, {|| wvt_DrawImage( 8, 62, 12, 69, IMAGE_VOUCH, , .T. ) } )AAdd( aBlocks, {|| wvt_DrawBoxRecessed( 7, 48, 13, 55 ) } )AAdd( aBlocks, {|| wvt_DrawLine( MaxRow() - 2, 0, MaxRow() - 2, MaxCol(), WVT_LINE_HORZ, WVT_LINE_RECESSED, WVT_LINE_BOTTOM ) } )AAdd( aBlocks, {|| wvt_DrawLine( MaxRow() - 1, 41, MaxRow(), 41, WVT_LINE_VERT, WVT_LINE_RECESSED, WVT_LINE_CENTER ) } )AAdd( aBlocks, {|| AEval( GetList, {| oGet | wvt_DrawBoxGet( oGet:Row, oGet:Col, Len( Transform( oGet:VarGet(), oGet:Picture ) ) ) } ) } )AAdd( aBlocks, {|| wvt_Mouse( -1000001 ) } )aLastPaint := WvtSetBlocks( aBlocks )/* Xbase++ compatible pure GUI controls onto CUI console */BuildButtons()It is as simple as that. GUI controls are glued on top of pure character interface. You need not to if so desired.Pritpal Bedia student of software analysis & concepts
Submenu is the same as menu.
You create a menu and add as an option on another menu.
My primary use is gtwvg with multithread, together with hwgui and fivewin, on same EXE.
Look this, creating menu from array with any level.
oMenu := wvgSetAppWindow():MenuBar()
BuildMenu( oMenu, mMenuOpt )
FUNCTION BuildMenu( oMenu, acMenu )
LOCAL oElement, oSubMenu, cbCode, xFrmNameTxt
FOR EACH oElement IN acMenu
IF Len( oElement[ 2 ] ) == 0
oMenu:AddItem( oElement[ 1 ], oElement[ 3 ] ) // here
add a single option
ELSE
oSubMenu := WvgMenu():new( oMenu, , .T. ):Create() //
here create the submenu
BuildMenu( oSubMenu, oElement[ 2 ] )
oMenu:AddItem( oSubMenu, oElement[ 1 ] ) // here add
submenu as an option
ENDIF
NEXT
RETURN NIL
--
You received this message because you are subscribed to the Google Groups "Harbour Users" group.
Unsubscribe: harbour-user...@googlegroups.com
Web: https://groups.google.com/group/harbour-users
---
You received this message because you are subscribed to the Google Groups "Harbour Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to harbour-user...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/harbour-users/e007c510-7656-454b-90e2-c9a6371936e9n%40googlegroups.com.
I use a traditional menu creation, may be gtwvg, hwgui, fivewin, minigui.
Use same style on Visual Basic 6 a long time ago.
As an array, it is easy to add or remove options, and setup for each user/password.
MEMVAR xFrmName, nMenuLevel, oMenuOptions
FUNCTION MenuCria()
PRIVATE nMenuLevel, oMenuOptions
hb_Default( @lInterno, .T. )
nMenuLevel := 0
oMenuOptions := {}
MenuOption( "Faturamento" )
MenuDrop()
MenuOption( "Pedidos/Notas/Manifesto" )
MenuDrop()
MenuOption( "Orçamentos/Pedidos",
"PJPPEDIDO" )
MenuOption( "-", "-" ) // separator
MenuOption( "Orçamentos/Pedidos SubOpções" )
MenuDrop()
MenuOption( "(I)Ped.Cancelamento",
"ADMPEDCAN" )
MenuOption( "Any codeblock", { || Nil } )
MenuUndrop()
MenuUnDrop()
RETURN oMenuOptions
STATIC FUNCTION MenuOption( cCaption, cModule, bCode )
LOCAL nCont, oLastMenu
oLastMenu := oMenuOptions
FOR nCont = 1 TO nMenuLevel
oLastMenu := oLastMenu[ Len( oLastMenu ) ]
oLastMenu := oLastMenu[ 2 ]
NEXT
AAdd( oLastMenu, { cCaption, {}, cModule, bCode, 1 } )
RETURN NIL
STATIC FUNCTION MenuDrop()
nMenuLevel++
RETURN NIL
STATIC FUNCTION MenuUnDrop()
nMenuLevel--
RETURN NIL
FUNCTION MenuWvg( mMenuOpt )
LOCAL oMenu, nKey
oMenu := wvgSetAppWindow():MenuBar()
BuildMenu( oMenu, mMenuOpt )
DO WHILE .T.
nKey := Inkey( INKEY_IDLE )
DO CASE
CASE nKey == HB_K_GOTFOCUS
CASE nKey == HB_K_LOSTFOCUS
CASE nKey == K_ESC
EXIT
ENDCASE
ENDDO
wvgSetAppWindow():oMenu := NIL
wapi_SetMenu( wapi_GetActiveWindow(), NIL )
wapi_DestroyMenu( oMenu:hWnd )
RETURN NIL
FUNCTION BuildMenu( oMenu, acMenu )
LOCAL oElement, oSubMenu, cbCode, xFrmNameTxt
FOR EACH oElement IN acMenu
IF Len( oElement[ 2 ] ) == 0
xFrmName := oElement[ 3 ]
IF ValType( xFrmName ) == "C"
xFrmNameTxt := AppEmpresaApelido() + " (" +
AppUserName() + ") (" + xFrmName + ") " + Upper( oElement[ 1 ] )
cbCode := [{ || RunModule( "] + xFrmName + [", "]
+ xFrmNameTxt + [" ) }]
oMenu:AddItem( oElement[ 1 ] , &( cbCode ) )
ELSE
oMenu:AddItem( oElement[ 1 ], oElement[ 3 ] ) //
codeblock
ENDIF
ELSE
oSubMenu := WvgMenu():new( oMenu, , .T. ):Create()
BuildMenu( oSubMenu, oElement[ 2 ] )
oMenu:AddItem( oSubMenu, oElement[ 1 ] )
ENDIF
NEXT
RETURN NIL
José M. C. Quintas
To view this discussion visit https://groups.google.com/d/msgid/harbour-users/7ce46396-e62b-4e02-b990-177a09015829n%40googlegroups.com.
It is ready to use, why create another?
I use it for traditional or GUI
{ "name of the option", {}, "module", { || block() }, 1 }
Submenu is added to second option, unlimited level
What is the problem on doing this:
IF !L_PRODUCTION
MenuOption( "Developer" )
MenuDrop()
MenuOption( "MF Test Func", { || Test() } )
MenuOption( "-", "-" )
MenuOption( "Refresh MVP Points",{|| RefreshMVP( "MENU" ) }
)
MenuOption( "Switch Shareware", {|| SwitchShareware()
} )
MenuUnDrop()
ENDIF
MenuOption( "Matches" )
MenuDrop()
MenuOption( "View Match", {|| SelectFixture("VIEW") } )
IF CCA_ADMIN
MenuOption( "Add New Match", {|| EnterAnalysis("NEW") } )
MenuOption( "Import Match", {|| EnterAnalysis("IMPORT") } )
MenuOption( "Edit Match", {|| SelectFixture("EDIT") } )
ENDIF
MenuUnDrop()
MenuOption( "Analysis" )
MenuDrop()
MenuOption( "Cumulative Individual" , {|| Averages("CI")
} )
MenuOption( "Seasonal Individual" , {|| Averages("SI")
} )
MenuOption( "Captaincy & Toss Individual" , {||
Averages("CAPTAIN") } )
MenuOption( "Appearances Individual" , {|| Averages("A")
} )
MenuOption( "Cumulative Team" , {|| Averages("T")
} )
MenuOption( "Seasonal Team" , {|| Averages("ST")
} )
MenuOption( "All Records Team" , {|| Averages("E")
} )
MenuOption( "Player Form", {|| Averages("FORM") } )
MenuOption( "Player Selection", {|| Averages("PS") } )
MenuOption( "Player Retention", {|| Averages("PR") } )
MenuUnDrop()
MenuOption( "Data Files" )
MenuDrop()
MenuOption( "Players", {|| VariBrowse("PLAYERS") } )
MenuOption( "Opponents", {|| VariBrowse("OPPONENTS") } )
MenuOption( "Team Types", {|| VariBrowse("TEAMTYPE") } )
MenuUnDrop()
MenuOption( "Maintenance" )
MenuDrop()
IF CCA_ADMIN
MenuOption( "Merge Player Records" , {|| MergePlayer() } )
MenuOption( "Re-Index Files" , {||
ReindexFiles("FUNC") } )
MenuOption( "Pack Files", {|| ReindexFiles("PACK") } )
MenuOption( "Cumulative Validation" , {|| SumCheck("MENU") }
)
ENDIF
MenuOption( "Membership Check", {|| MembershipCheck() } )
IF CCA_ADMIN
MenuOption( "Reset Memberships", {|| ResetMemberships() } )
ENDIF
MenuUndrop()
MenuOption( "Other" )
MenuDrop()
MenuOption( "Quit", {|| CCAExit() } )
IF CCA_ADMIN
MenuOption( "Set Junior Age", {|| SetJuniorAge() } )
MenuOption( "Set Score Format", {|| SetScoreFormat() } )
MenuOption( "Set Season Break", {|| SetSplitYear() } )
IF .T. // control->shareware
MenuOption( "Register", {|| RegisterCCA() } )
ELSE
MenuOption( "Check for Update", {|| CheckForAppUpdate() }
)
MenuOption( "Test Print", {|| Print("TEST") } )
ENDIF
ENDIF
MenuOption( "User Guide", {|| Help("MANUAL") } )
MenuOption( "About " + CCA_SHORT_NAME, {|| About() } )
MenuUndrop()
José M. C. Quintas
To view this discussion visit https://groups.google.com/d/msgid/harbour-users/1d28bb25-e1ec-4396-87fe-72f44123e5een%40googlegroups.com.
I send all source code with them on previous emails.
MenuOption() allways add on array of current level.
MenuDrop() and MenuUndrop() moves the level up/down.
They are not part of WVG.
Adjust all these functions for your needs
José M. C. Quintas
To view this discussion visit https://groups.google.com/d/msgid/harbour-users/84047d6b-9ec8-4ed5-bba8-883bde4db027n%40googlegroups.com.