Making a TUI menu
How to make a userfull menu in TUI

11 Feb 2021 Fredrik Hussman 291 3 comments
  • EN Language
  • IT Language

The menu in computer terminology represents a list of functions (items) which are associated

Bios Award
Menu Demo

with shortcuts which can be other menus or functions. The menu, therefore, is to be considered a sort of list that facilitates the choice of a specific function associated with it. The menus can be presented in various video modes, that is, textual TUI or GUI graphics and in any case in both cases they can receive user input by means of keyboard shortcuts or simply by selecting the items listed with the mouse pointer.
Software that allows you to create simple menus have already existed since the dawn of the IT industry with the software-houses that developed later, but they do not, however, allow individual creation and management for a specific task and rarely do you have the opportunity to interface them yourself projects.

The following code generally indicates how to make one using the TPx-Dev framework in a very simple way without having any lack in terms of usability and adjustments that we can expect from a menu to interface it to our software needs.

CodeExample 1: Menu Demo / Source code: TPx-Dev (IDE Pascal)


{ MENU DEMO PROGRAM WITH TPx-Dev } uses stdlib, mouselib, menulib, Kbdlib, winlib; var M: TMenu; path: string; begin VideoInit($03,7,0); kbd.SetRate(1,0); ClrScreen(#176, 7, 0); FillChr(1,1,80, #32, 0,7); Mouse.Init; Mouse.show; HideCursor; { WRITE MENU PART ================================================================ } M.AddMenu(1,1,' ~F~ile ', kbALTF, true, 'This menu Open, Save and Edit a file.'); { add sub menu voice } M.AddItem(' ~O~pen ', kbAltO, true, 'Open a file'); M.AddItem(' ~C~lose ', kbAltC, true, 'Close a file'); M.AddItem(' Save F~i~le ', kbAltI, true, 'Save a file'); M.AddItem(' E~x~it ', kbAltX, true, 'Exit on this'); { add new menu voice } M.AddMenu(7,1,' ~E~dit ', kbAltE, true, ''); { add sub menu voice } M.AddItem(' Cl~e~ar the option ', kbAltG, true,''); { add a item separation } M.AddItem('Sub menu', kbNo, true, 'Sub menu example'); M.AddItem(' Fi~l~ls the name ', kbAltL, false,''); M.AddItem('Sub menu ', kbNo, true, 'Sub menu example'); M.AddItem(' Save File ~R~OM ', kbAltR, true,''); M.AddItem(' E~x~it ', kbAltX, true,''); { add new menu disabled voice } M.AddMenu(13,1,' ~S~earch ', kbAltS, false, ''); { add new menu voice } M.AddMenu(71,1,' ~ESC~ Exit ', kbAltH, true,'Exit'); { add sub menu voice } M.AddItem('E~x~it', kbAltX, true,''); M.Draw(true); { drawing menu } { open a window } window.open(3,3,77,22, ' ~Demo Menu with TPx-Dev~ ', 7,1,14,fwSingle, true); M.ShowHelpContext(true); M.ShowMenuBar(true); { CYCLE EVENTS =================================================================== } repeat vertretrace; { sets the mask colors of the menu } { <--- M.SetColors(7,0,7,0,15,0,7,1); remove comment and apply your change color --> } { Start menu events } M.Start(cmKey); kbd.getkey(cmKey);

{ In this condition add your demo function }
if m.cmdmenu = kbalto then begin
{ ... }
fPrint(20,20, ' Your selection menu ', 0,7,0);
{ ... }
end; until (M.cmdMenu = kbaltX); { END CYCLE EVENTS =============================================================== } Window.close; end.


As you can see, the code is very minimal even though keyboard and mouse events are integrated. In the code there are commented parts where I also introduced a function that allows the modification of the menu scheme colors. It is also possible to position a menu anywhere on the screen giving the desired X, Y coordinates to the primary items, in which case the primary item will not be displayed but it will be possible to recall it using the hot keys set for that item.

In the download is attached the source plus the compiled demo.

Minimal system configuration:

  • CPU 8088 / Pentium
  • RAM 640K
  • SO: DOS

Download
Menu Demo (TPx-Dev)
DOWNLOAD


Il menu nella terminologia informatica rappresenta una lista di funzioni (voci) alle quali sono

Bios Award
Menu Demo

associate delle scorciatoie che possono essere altri menu o funzioni. Il menu, quindi, e da considerarsi una sorta di elenco che facilita la scelta di una determinata funzioni ad'essa associata. I menu possono presentarsi in vari modi video, ovvero, testuali TUI o grafici GUI e comunque in entrambi i casi possono ricevere input dall'utente mediante tasti di scelta rapida eseguiti sulla tastiera o semplicemente selezionando le voci elencate con il puntatore del mouse.
Software che permettono di realizzare dei semplici menu esistono già dagli albori dell'industria informatica con le software-house sviluppatesi a seguito, ma non permettono comunque una realizzazione e gestione individuale a fronte di uno specifico compito e raramente si ha la possibilità di interfacciarli in propri progetti.

Il codice che segue indica in linea di massima come realizzarne uno usando il framework TPx-Dev in maniera molto semplice senza avere nessuna carenza in termini di usabilità e adeguamenti che possiamo pretendere da un menu per interfacciarlo alle nostre esigenze software.

CodeExample 1: Menu Demo / Source code: TPx-Dev (IDE Pascal)


{ MENU DEMO PROGRAM WITH TPx-Dev } uses stdlib, mouselib, menulib, Kbdlib, winlib; var M: TMenu; path: string; begin VideoInit($03,7,0); kbd.SetRate(1,0); ClrScreen(#176, 7, 0); FillChr(1,1,80, #32, 0,7); Mouse.Init; Mouse.show; HideCursor; { WRITE MENU PART ================================================================ } M.AddMenu(1,1,' ~F~ile ', kbALTF, true, 'This menu Open, Save and Edit a file.'); { add sub menu voice } M.AddItem(' ~O~pen ', kbAltO, true, 'Open a file'); M.AddItem(' ~C~lose ', kbAltC, true, 'Close a file'); M.AddItem(' Save F~i~le ', kbAltI, true, 'Save a file'); M.AddItem(' E~x~it ', kbAltX, true, 'Exit on this'); { add new menu voice } M.AddMenu(7,1,' ~E~dit ', kbAltE, true, ''); { add sub menu voice } M.AddItem(' Cl~e~ar the option ', kbAltG, true,''); { add a item separation } M.AddItem('Sub menu', kbNo, true, 'Sub menu example'); M.AddItem(' Fi~l~ls the name ', kbAltL, false,''); M.AddItem('Sub menu ', kbNo, true, 'Sub menu example'); M.AddItem(' Save File ~R~OM ', kbAltR, true,''); M.AddItem(' E~x~it ', kbAltX, true,''); { add new menu disabled voice } M.AddMenu(13,1,' ~S~earch ', kbAltS, false, ''); { add new menu voice } M.AddMenu(71,1,' ~ESC~ Exit ', kbAltH, true,'Exit'); { add sub menu voice } M.AddItem('E~x~it', kbAltX, true,''); M.Draw(true); { drawing menu } { open a window } window.open(3,3,77,22, ' ~Demo Menu with TPx-Dev~ ', 7,1,14,fwSingle, true); M.ShowHelpContext(true); M.ShowMenuBar(true); { CYCLE EVENTS =================================================================== } repeat vertretrace; { sets the mask colors of the menu } { <--- M.SetColors(7,0,7,0,15,0,7,1); remove comment and apply your change color --> } { Start menu events } M.Start(cmKey); kbd.getkey(cmKey);

{ In this condition add your demo function }
if m.cmdmenu = kbalto then begin
{ ... }
fPrint(20,20, ' Your selection menu ', 0,7,0);
{ ... }
end; until (M.cmdMenu = kbaltX); { END CYCLE EVENTS =============================================================== } Window.close; end.

Come si può verificare, il codice è molto minimale nonostante siano integrati gli eventi da tastiera e del mouse. Nel codice ci sono parti commentate dove ho introdotto anche una funzione che permette la modifica dei colori di schema del menu. Inoltre è possibile posizionare un menu in qualsiasi punto dello schermo dando le cordinate X,Y desiderate alle voci primarie, in tal caso la voce primaria non verrà visualizzata ma sarà possibile richiamarla attraverso i tasti di scelta impostati per quella voce.

Nel download è allegato il sorgente più il demo compilato.


Minimal system configuration:

  • CPU 8088 / Pentium
  • RAM 640K
  • SO: DOS

Download
Menu Demo (TPx-Dev)
DOWNLOAD






Programming, TPx-Dev




Comments (3)

Marco Cappellari
13 Feb 2021 at 10:22

very good

Davide
01 Mar 2021 at 10:22

Eccellente molto migliore dell'uso di TVision. Mi piace particolarmente anche la possibilità di personalizzare i colori e la posizione del blocco menu. La gestione degli eventi e notevolmente semplice e veloce.

D.Phill
11 Mar 2021 at 13:53

great work

Your name (required)

E-Mail (will not be published) (required)

Comment: * min 3 letters



Orbital Crew © 1992, 2020
Copyright. All Rights Reserved, Inc
Web Develope: F.H / A.Mazzola