Input field removal? - matalog - 04-05-2022 11:00 PM
I am going to try to create an input method for my own simple calculator, what I would like to know is, is there a way to remove the Vertical line from the left hand side of the second last line from bottom of screen that this creates?
It is the only trace that an INPUT has been called, and I don't want to use it, because I want the field of entry to update as I type it in.
EXPORT BTest()
BEGIN
LOCAL D:="";
RECT_P();
INPUT({{D,[2],{0,0,6}}},"Number Entry","","");
TEXTOUT_P(D,23,45);
WAIT(1);
END;
RE: Input field removal? - Gene222 - 04-07-2022 01:39 AM
You should not use the INPUT command to create a graphic background screen. The INPUT command stops or pauses program execution, so you can't write text over the INPUT screen using TEXTOUT_P. The text you are writing in the screens shot is just the edit line for the INPUT textbox for variable D.
If you want to create your own INPUT screen, take a look at the AASHTO-93 1.0 app located on hpcalc.org under HP Prime Science Apps.
RE: Input field removal? - Jacob Wall - 04-07-2022 02:53 AM
It appears it is not possible to hide the field completely, like you're trying to do. It is not overly difficult to make your completely custom Input programs, which would give you total control. I can share an example if you're interested.
RE: Input field removal? - matalog - 04-07-2022 09:06 PM
(04-07-2022 01:39 AM)Gene222 Wrote: You should not use the INPUT command to create a graphic background screen. The INPUT command stops or pauses program execution, so you can't write text over the INPUT screen using TEXTOUT_P. The text you are writing in the screens shot is just the edit line for the INPUT textbox for variable D.
If you want to create your own INPUT screen, take a look at the AASHTO-93 1.0 app located on hpcalc.org under HP Prime Science Apps.
Thanks, I have downloaded that app and installed it onto the Virtual Calculator. The program doesn't seem to show up in the Programs part of the connectivity kit. Is there a way to view the contents of the program on a PC?
RE: Input field removal? - matalog - 04-07-2022 09:46 PM
(04-07-2022 02:53 AM)Jacob Wall Wrote: It appears it is not possible to hide the field completely, like you're trying to do. It is not overly difficult to make your completely custom Input programs, which would give you total control. I can share an example if you're interested.
Yes Jacob, it would be good to see an example if you have one, thanks.
RE: Input field removal? - Gene222 - 04-08-2022 01:36 AM
(04-07-2022 09:06 PM)matalog Wrote: Thanks, I have downloaded that app and installed it onto the Virtual Calculator. The program doesn't seem to show up in the Programs part of the connectivity kit. Is there a way to view the contents of the program on a PC?
To view the app program, in the Calculator panel, expand the Application Library and double click AASHTO 93. On the left panel click the program tab.
AASHTO 93 was the only input program I could find that had a drop box, touch navigation, and left and right arrow navigation.
RE: Input field removal? - Jacob Wall - 04-11-2022 02:36 AM
(04-07-2022 09:46 PM)matalog Wrote: (04-07-2022 02:53 AM)Jacob Wall Wrote: It appears it is not possible to hide the field completely, like you're trying to do. It is not overly difficult to make your completely custom Input programs, which would give you total control. I can share an example if you're interested.
Yes Jacob, it would be good to see an example if you have one, thanks.
The example below is a stripped down version of something I made a while back. It should at the very least show one way of doing it. I had a bunch of other stuff built into it, like clipboard copy/paste, custom input types that a parser would check for, alpha handling and so forth.
Code:
#pragma mode( separator(.,;) integer(h32) )
// support routines
ResetCMD();
DrawHeaderBg();
GetMK_in();
FlushKeysMouse();
ClearMouse();
InputLine();
ResetTExit();
ResetShift();
UpdateCursorPos();
FlashBtn();
FlashMenu();
// global variables
KS_shift,CMD_cursor_pos,CMD_edit_left,CMD_edit_right;
IL_init,IL_title,IL_prompt,IL_help,IL_menu,IL_result,IL_stat;
MK_in,MK_mx,MK_my;
TExit:=10,TExit_count;
main_color:=#000000h,main_bg:=#FFFFFFh,dark_accent:=#FB0000h,title_color:=#FFFFFFh,invhi_color:=#FB0000h;
num_keys:={42,43,44,37,38,39,32,33,34,47,48,49,50,45,40,35,29};
num_strings:={"1","2","3","4","5","6","7","8","9","0","."," ","+","-","*","/",","};
EXPORT IL()
BEGIN
TExit_count:=0;
IL_init:="123";
IL_title:="Test Me";
IL_prompt:="Prompt";
IL_help:={"Multiple lines","of help text"};
IF InputLine==1 THEN
MSGBOX(IL_result);
END;
END;
ResetCMD()
BEGIN
KS_shift:=0;
CMD_cursor_pos:=0;
CMD_edit_left:="";
CMD_edit_right:="";
END;
// draw title to header
DrawHeaderBg(title_string)
BEGIN
RECT_P(G0,0,0,319,18,dark_accent);
LINE_P(G0,0,19,319,19,main_color);
TEXTOUT_P(title_string,G0,2,1,3,title_color,270);
END;
GetMK_in()
BEGIN
IF TExit_count==TExit THEN
MK_in:=400;
ELSE
REPEAT
IFERR MK_in:=WAIT(-1); THEN
MK_in:=4;
FlushKeysMouse();
END;
UNTIL TYPE(MK_in)==0 OR IFTE(SIZE(MK_in)>1,MK_in(1)==3,0);
ClearMouse();
IF TYPE(MK_in)==6 THEN // list
MK_mx:=MK_in(2);
MK_my:=MK_in(3);
TExit_count:=0;
END;
END;
END;
// get all keys and mouse events out of the system
FlushKeysMouse()
BEGIN
LOCAL j,ksum;
REPEAT
ksum:=0;
FOR j FROM 0 TO 50 DO
ksum:=ksum+ISKEYDOWN(j);
END;
UNTIL ksum==0;
ClearMouse();
END;
ClearMouse()
BEGIN
LOCAL m;
REPEAT
m:=MOUSE();
UNTIL SIZE(m(1))==0;
END;
// single line input
// IL_init is initial edit line value
// IL_title is title of input screen
// IL_prompt is the prompt for input text above input line
// IL_help is multiple lines of help text above the prompt
InputLine()
BEGIN
LOCAL draw_screen:=1,j,exit_IL:=0,max_chars:=32,dim_left,dim_right;
LOCAL dim_str,start_left,cur_item;
IL_stat:=0;
ResetCMD();
CMD_edit_left:=IL_init;
IL_menu:={"","","","","Cancel","OK"};
FlushKeysMouse();
REPEAT
IF draw_screen THEN
DrawHeaderBg(IL_title); // title
RECT_P(G0,0,20,319,175,main_bg); // help
FOR j FROM 1 TO SIZE(IL_help) DO
TEXTOUT_P(IL_help(j),G0,0,40+(j-1)*15,3,main_color,315);
END;
RECT_P(G0,0,176,319,195,main_bg); // prompt
TEXTOUT_P(IL_prompt,G0,0,178,3,invhi_color,315);
LINE_P(G0,0,196,319,196,invhi_color);
DRAWMENU(IL_menu);
draw_screen:=0;
END;
RECT_P(G0,277,0,319,18,dark_accent);
IF KS_shift THEN
TEXTOUT_P("■S",G0,280,4,2,title_color);
END;
RECT_P(G0,0,197,319,219,main_bg);
dim_left:=MAX({28,32-DIM(CMD_edit_left)});
dim_right:=MIN({DIM(CMD_edit_right),dim_left});
dim_left:=MIN({DIM(CMD_edit_left),max_chars-dim_right});
start_left:=MAX({1,DIM(CMD_edit_left)-dim_left+1});
CMD_cursor_pos:=TEXTOUT_P(MID(CMD_edit_left,start_left,IFTE(dim_left,dim_left,1)),G0,0,200,4,main_color);
TEXTOUT_P(CHAR(9615),G0,CMD_cursor_pos,200,4,main_color);
TEXTOUT_P(MID(CMD_edit_right,1,IFTE(dim_right,dim_right,1)),G0,CMD_cursor_pos+1,200,4,main_color);
GetMK_in();
IF TYPE(MK_in)==0 THEN // keyboard
IF MK_in==-1 THEN // timeout after 60 seconds
TExit_count:=TExit_count+1;
ELSE
ResetTExit();
CASE
IF POS({4,46,400},MK_in) THEN // ESC or ON or TExit timeout
IL_stat:=0;
exit_IL:=1;
END;
IF MK_in==7 THEN // LEFT CURSOR
IF KS_shift THEN
CMD_edit_right:=CMD_edit_left+CMD_edit_right;
CMD_edit_left:="";
ELSE
dim_str:=DIM(CMD_edit_left);
IF dim_str>1 THEN
CMD_edit_right:=MID(CMD_edit_left,dim_str)+CMD_edit_right;
CMD_edit_left:=MID(CMD_edit_left,1,DIM(CMD_edit_left)-1);
ELSE
CMD_edit_right:=CMD_edit_left+CMD_edit_right;
CMD_edit_left:="";
END;
END;
END;
IF MK_in==8 THEN // RIGHT CURSOR
IF KS_shift THEN
CMD_edit_left:=CMD_edit_left+CMD_edit_right;
CMD_edit_right:="";
ELSE
dim_str:=DIM(CMD_edit_right);
IF dim_str>1 THEN
CMD_edit_left:=CMD_edit_left+LEFT(CMD_edit_right,1);
CMD_edit_right:=MID(CMD_edit_right,2);
ELSE
CMD_edit_left:=CMD_edit_left+CMD_edit_right;
CMD_edit_right:="";
END;
END;
END;
IF MK_in==19 THEN // backspace
IF KS_shift THEN
CMD_edit_left:="";
ELSE
IF DIM(CMD_edit_left)>1 THEN
CMD_edit_left:=MID(CMD_edit_left,1,DIM(CMD_edit_left)-1);
ELSE
CMD_edit_left:="";
END;
END;
END;
IF MK_in==30 THEN // ENTER
IL_result:=CMD_edit_left+CMD_edit_right;
IL_stat:=1;
exit_IL:=1;
END;
IF MK_in==41 THEN // shift
KS_shift:=IFTE(KS_shift,0,1);
END;
CASE
IF POS(num_keys,MK_in) THEN
CMD_edit_left:=CMD_edit_left+num_strings(POS(num_keys,MK_in));
END;
IF MK_in==27 THEN
dim_str:=DIM(CMD_edit_left);
IF dim_str THEN
IF LEFT(CMD_edit_left,1)=="−" THEN
CMD_edit_left:=IFTE(dim_str>1,MID(CMD_edit_left,2),"");
ELSE
CMD_edit_left:="−"+CMD_edit_left;
END;
ELSE
dim_str:=DIM(CMD_edit_right);
IF dim_str THEN
IF LEFT(CMD_edit_right,1)=="−" THEN
CMD_edit_right:=IFTE(dim_str>1,MID(CMD_edit_right,2),"");
ELSE
CMD_edit_right:="−"+CMD_edit_right;
END;
ELSE
CMD_edit_left:="−";
END;
END;
END;
IF MK_in==28 THEN
CMD_edit_left:=CMD_edit_left+"(";
CMD_edit_right:=")"+CMD_edit_right;
END;
END;
END;
ResetShift();
END;
ELSE // touch events
CASE
IF 196<MK_my<220 THEN // input area
UpdateCursorPos(0);
END;
IF MK_my>219 THEN // menu
FlashMenu();
draw_screen:=1;
CASE
IF 264>MK_mx>211 THEN // Cancel
IL_stat:=0;
exit_IL:=1;
END;
IF MK_mx>264 THEN // OK
IL_result:=CMD_edit_left+CMD_edit_right;
exit_IL:=1;
IL_stat:=1;
END;
END;
END;
END;
END;
UNTIL exit_IL;
RETURN IL_stat;
END;
ResetTExit()
BEGIN
IF TYPE(MK_in)==0 THEN
IF MK_in<>400 THEN
TExit_count:=0;
END;
END;
END;
ResetShift()
BEGIN
IF TYPE(MK_in)==0 THEN
IF MK_in<>41 THEN
KS_shift:=0;
END;
END;
END;
UpdateCursorPos(x1)
BEGIN
LOCAL temp_x;
CASE
IF MK_mx<(x1+4) THEN
CMD_edit_right:=CMD_edit_left+CMD_edit_right;
CMD_edit_left:="";
END;
IF MK_mx<=CMD_cursor_pos THEN
IF DIM(CMD_edit_left) THEN
REPEAT
CMD_edit_right:=RIGHT(CMD_edit_left,1)+CMD_edit_right;
IF DIM(CMD_edit_left)>1 THEN
CMD_edit_left:=MID(CMD_edit_left,1,DIM(CMD_edit_left)-1);
ELSE
CMD_edit_left:="";
END;
temp_x:=TEXTOUT_P(CMD_edit_left,G9,x1,0,5)+1;
UNTIL (temp_x<=MK_mx) OR (DIM(CMD_edit_left)==0);
END;
END;
IF MK_mx>CMD_cursor_pos THEN
IF DIM(CMD_edit_right) THEN
REPEAT
CMD_edit_left:=CMD_edit_left+LEFT(CMD_edit_right,1);
IF DIM(CMD_edit_right)>1 THEN
CMD_edit_right:=MID(CMD_edit_right,2);
ELSE
CMD_edit_right:="";
END;
temp_x:=TEXTOUT_P(CMD_edit_left,G9,x1,0,5)+1;
UNTIL (temp_x>=MK_mx) OR (DIM(CMD_edit_right)==0);
END;
END;
END;
END;
FlashBtn(indx)
BEGIN
LOCAL x1:={0,52,105,158,211,264},x2:={52,105,158,211,264,319};
INVERT_P(G0,x1(indx),219,x2(indx),239);
WAIT(0.1);
END;
FlashMenu()
BEGIN
CASE
IF MK_mx<52 THEN
FlashBtn(1);
END;
IF 105>MK_mx>52 THEN
FlashBtn(2);
END;
IF 158>MK_mx>105 THEN
FlashBtn(3);
END;
IF 211>MK_mx>158 THEN
FlashBtn(4);
END;
IF 264>MK_mx>211 THEN
FlashBtn(5);
END;
IF MK_mx>264 THEN
FlashBtn(6);
END;
END;
END;
|