09-03-2017, 05:25 AM (This post was last modified: 09-03-2017 05:30 AM by webmasterpdx.)
Post: #1
 webmasterpdx Senior Member Posts: 541 Joined: Sep 2015
The prime really doesn't have much to help you program menus.....which I hope they'll fix in a future release. I found a few useful titbits to help get around that shortfall.
Here are 2 very useful utilities to put in your programming utilities. PUTMENU and GETMENU. See here... https://www.thecalculatorstore.com/Calcu...e-HP-Prime
I'll try to post an example using them when I get a chance...
-Donald
09-03-2017, 06:46 AM (This post was last modified: 09-03-2017 06:50 AM by webmasterpdx.)
Post: #2
 webmasterpdx Senior Member Posts: 541 Joined: Sep 2015
Here is a simple example that I just wrote and works fine....a lot simpler than programming from scratch. This example puts a few menu selections. I've only implemented the EXIT selection.

Code:
 EXPORT MENU() BEGIN LOCAL men,m,m1,mx,my,s; // initialize WHILE MOUSE(1)>=0 DO END; men:={"","HEX","OCT","DEC","BIN","EXIT"}; PUTMENU(men); // Have to put menu twice...first time here REPEAT // main loop REPEAT // read mouse m:=MOUSE; m1:=m(1); UNTIL SIZE(m1)>0; mx:=m1(1); my:=m1(2); PUTMENU(men); // Have to put menu twice...second time here s:=GETMENU(mx,my,men); // This is where you process s for menu selections UNTIL (s==6); END; // BEGIN
09-03-2017, 05:46 PM
Post: #3
 primer Member Posts: 135 Joined: Sep 2015
Hi,
You can also use libMenu, something I made and share here :

it does not work exactly the same as you,
you have to define a function for each of your menu entries.
these functions will be called-back on user action.

it's quite easy to use, and you also have more enhanced versions that can handle enhanced features (toggle menu...)

primer
09-03-2017, 07:44 PM
Post: #4
 webmasterpdx Senior Member Posts: 541 Joined: Sep 2015
LibMenu looks nice. I like mine though for simple apps....as it's so simple, and I retain control over everything.....my "lib" is just 2 functions. I should post them here as the link I gave isn't exactly what I'm using....I changed the GETMENU function slightly.

Code:
 // DEFINE MENU EXPORT PUTMENU(mTXT) BEGIN DRAWMENU(mTXT(1),mTXT(2),mTXT(3),mTXT(4),mTXT(5),mTXT(6)); END; // SETS mSEL GLOBAL VIA MENU SELECT EXPORT GETMENU(mx,my,mTXT) BEGIN LOCAL mSEL; mSEL:=0; IF my≥220 AND my≤239 THEN CASE  IF mx≥0 AND mx≤51 AND mTXT(1)>"" THEN   mSEL:=1;  END;  IF mx≥53 AND mx≤104 AND mTXT(2)>"" THEN   mSEL:=2;  END;  IF mx≥106 AND mx≤157 AND mTXT(3)>"" THEN   mSEL:=3;  END;  IF mx≥159 AND mx≤210 AND mTXT(4)>"" THEN   mSEL:=4;  END;  IF mx≥212 AND mx≤263 AND mTXT(5)>"" THEN   mSEL:=5;  END;  IF mx≥265 AND mx≤319 AND mTXT(6)>"" THEN   mSEL:=6;  END; END; // CASE END; // IF MENU RETURN mSEL; END; // BEGIN
09-04-2017, 11:08 AM
Post: #5
 webmasterpdx Senior Member Posts: 541 Joined: Sep 2015
I found that it executes better if the WAIT call is used instead of MOUSE as in this example...

Code:
 EXPORT MBase(A,B,C) BEGIN LOCAL men,m,m1,mx,my,s; // initialize WHILE MOUSE(1)≥0 DO END; men:={"","HEX","OCT","DEC","BIN","EXIT"}; REPEAT // MAIN LOOP PUTMENU(men); REPEAT // WAIT FOR A MOUSE CLICK  m:=WAIT(−1); UNTIL (m(1)==3 OR m(1)==7); mx:=m(2); my:=m(3); s:=GETMENU(mx,my,men); CASE  IF (s==2) THEN s:=0; PRINT(A); END;  IF (s==3) THEN s:=0; PRINT(B); END;  IF (s==4) THEN s:=0; PRINT(C); END;  DEFAULT   PRINT();   PRINT(""); END; UNTIL (s==6); // REPEAT... END; // BEGIN
 « Next Oldest | Next Newest »

User(s) browsing this thread: 1 Guest(s)