Displaying data on screen
Displaying data on screen
hi Everyone,
I hope everyone is well
I would like some guidance on the following that I have been trying to work out.
I have the following screen
what I am after is advice on the following
1. how would i display data on the screen so they line up with the headers that are all ready created.
Like example beloew
2. how would i handle large qty of display data (I was thinking something like "pages")
I am assuming I would have to handle my own highlighting code (to show a box around the line that is select) or would it be better to use a ►to show what line is being selected?
I would appreciate it if someone could point me in the direction that i need to go (or if you have a sample code that i can read to understand the code) It would be appreciated
I hope everyone is well
I would like some guidance on the following that I have been trying to work out.
I have the following screen
what I am after is advice on the following
1. how would i display data on the screen so they line up with the headers that are all ready created.
Like example beloew
2. how would i handle large qty of display data (I was thinking something like "pages")
I am assuming I would have to handle my own highlighting code (to show a box around the line that is select) or would it be better to use a ►to show what line is being selected?
I would appreciate it if someone could point me in the direction that i need to go (or if you have a sample code that i can read to understand the code) It would be appreciated
Re: Displaying data on screen
1) like so?
2) Pages or scroll with scrollbar. Pages easier. (buttons/commands: first page, previous page, next page, last page)
Code: Select all
#include "string.bi"
enum H_ALIGN
H_ALIGN_LEFT
H_ALIGN_RIGHT
end enum
sub printAt(x as integer, y as integer, text as string, align as H_ALIGN)
if align = H_ALIGN_RIGHT then x -= len(text)
locate y, x
print text;
end sub
dim as integer xOffset = 30, yOffset = 5
dim as integer x, y
dim as string priceStr, headerStr = "Price"
randomize timer
printAt(xOffset, yOffset, headerStr, H_ALIGN_RIGHT)
for y = 1 to 10
priceStr = format(10 ^ (rnd * 5), "0.00")
printAt(xOffset + x, yOffset + y, priceStr, H_ALIGN_RIGHT)
next
Re: Displaying data on screen
I might have discovered a bug in Freebasic.
OK: priceStr = format(10 ^ (rnd * 5), "$0.00")
Not OK: priceStr = format(10 ^ (rnd * 5), "£0.00")
Edit: Not a bug, but unwanted behaviour. Solved by conversion to wstring:
OK: priceStr = format(10 ^ (rnd * 5), "$0.00")
Not OK: priceStr = format(10 ^ (rnd * 5), "£0.00")
Edit: Not a bug, but unwanted behaviour. Solved by conversion to wstring:
Code: Select all
#include "string.bi"
enum H_ALIGN
H_ALIGN_LEFT
H_ALIGN_RIGHT
end enum
sub printAt(x as integer, y as integer, text as wstring, align as H_ALIGN)
if align = H_ALIGN_RIGHT then x -= len(text)
locate y, x
print text;
end sub
dim as integer xOffset = 30, yOffset = 5
dim as integer x, y
dim as string priceStr, headerStr = "Price"
randomize timer
printAt(xOffset, yOffset, headerStr, H_ALIGN_RIGHT)
for y = 1 to 10
priceStr = format(10 ^ (rnd * 5), "£0.00")
printAt(xOffset + x, yOffset + y, priceStr, H_ALIGN_RIGHT)
next
Re: Displaying data on screen
That is ultra neat Badidea.
And getting the £ sign to show properly also.
And getting the £ sign to show properly also.
Re: Displaying data on screen
Thanks, works with the (3-wide) € sign as well, but it seems that you guys at the other side of the North Sea don't have to worry about that anytime soon.dodicat wrote:That is ultra neat Badidea.
And getting the £ sign to show properly also.
Re: Displaying data on screen
An option for question 2.
Keys "Page up", "page down", "home", "end" left as an exercise for the reader.
Keys "Page up", "page down", "home", "end" left as an exercise for the reader.
Code: Select all
#include "string.bi"
enum H_ALIGN
H_ALIGN_LEFT
H_ALIGN_RIGHT
end enum
sub printAt(x as integer, y as integer, text as wstring, align as H_ALIGN)
if align = H_ALIGN_RIGHT then x -= len(text)
locate y, x
print text;
end sub
const as string KEY_UP = chr(255) & "H"
const as string KEY_DN = chr(255) & "P"
const as string KEY_PGUP = chr(255) & "I"
const as string KEY_PGDN = chr(255) & "Q"
const as string KEY_ESC = chr(27)
function waitForKey() as string
dim as string key = inkey
while key = ""
key = inkey
sleep 1,1
wend
return key
end function
dim as string keyword(...) => {"Abs","Abstract","Access","Acos","Add","Alias","Allocate","Alpha","And","AndAlso","Append","As","Assert","AssertWarn","Asc","Asin","Asm","Atn","Base","Beep","Bin","Binary","Bit","BitReset","BitSet","BLoad","BSave","ByRef","ByVal","Call","CAllocate","Case","Cast","CByte","CDbl","cdecl","Chain","ChDir","Chr","CInt","Circle","Class","Clear","CLng","CLngInt","Close","Cls","Color","Command","Common","CondBroadcast","CondCreate","CondDestroy","CondSignal","CondWait","Const","Constructor","Continue","Cos","CPtr","CShort","CSign","CSng","CsrLin","CUByte","CUInt","CULng","CULngInt","CUnsg","CurDir","CUShort","Custom","CVD","CVI","CVL","CVLongInt","CVS","CVShort","Data","Date","DateAdd","DateDiff","DatePart","DateSerial","DateValue","Day","Deallocate","Declare","DefByte","DefDbl","defined","DefInt","DefLng","DefLongInt","DefShort","DefSng","DefStr","DefUByte","DefUInt","DefULongInt","DefUShort","Delete","Destructor","Dim","Dir","Do","Draw","DyLibFree","DyLibLoad","DyLibSymbol","Else","ElseIf","Encoding","End","EndIf","Enum","Environ","EOF","Eqv","Erase","Erfn","Erl","Ermn","Err","Error","Event","Exec","ExePath","Exit","Exp","Export","Extends","Extern","False","Field","FileAttr","FileCopy","FileDateTime","FileExists","FileLen","Fix","Flip","For","Format","Frac","Fre","FreeFile","Function","Get","GetJoystick","GetKey","GetMouse","GoSub","Goto","Hex","HiByte","HiWord","Hour","If","IIf","ImageConvertRow","ImageCreate","ImageDestroy","ImageInfo","Imp","Implements","Import","Inkey","Inp","Input","InStr","InStrRev","Int","Is","IsDate","IsRedirected","Kill","LBound","LCase","Left","Len","Let","Lib","Line","LoByte","Loc","Local","Locate","Lock","LOF","Log","Loop","LoWord","LPOS","LPrint","LSet","LTrim","Mid","Minute","MKD","MkDir","MKI","MKL","MKLongInt","Mks","MkShort","Mod","Month","MonthName","MultiKey","MutexCreate","MutexDestroy","MutexLock","MutexUnlock","Naked","Name","Namespace","Next","New","Not","Now","Oct","OffsetOf","On","Once","Open","Operator","Option","Or","OrElse","Out","Output","Overload","Override","Paint","Palette","pascal","PCopy","Peek","PMap","Point","PointCoord","Poke","Pos","Preserve","PReset","Print","Private","ProcPtr","Property","Protected","PSet","Public","Put","Random","Randomize","Read","Reallocate","ReDim","Rem","Reset","Restore","Resume","Return","RGB","RGBA","Right","RmDir","Rnd","RSet","RTrim","Run","SAdd","Scope","Screen","ScreenCopy","ScreenControl","ScreenEvent","ScreenInfo","ScreenGLProc","ScreenList","ScreenLock","ScreenPtr","ScreenRes","ScreenSet","ScreenSync","ScreenUnlock","Second","Seek","Select","SetDate","SetEnviron","SetMouse","SetTime","Sgn","Shared","Shell","Shl","Shr","Sin","SizeOf","Sleep","Space","Spc","Sqr","Static","stdcall","Step","Stick","Stop","Str","Strig","StrPtr","Sub","Swap","System","Tab","Tan","Then","This","ThreadCall","ThreadCreate","ThreadDetach","ThreadWait","Time","TimeSerial","TimeValue","Timer","To","Trans","Trim","Type","Typeof","UBound","UCase","Union","Unlock","Until","Using","Val","ValLng","ValInt","ValUInt","ValULng","Var","VarPtr","View","Virtual","Wait","WBin","WChr","WeekDay","WeekDayName","Wend","While","WHex","Width","Window","WindowTitle","WInput","With","WOct","Write","WSpace","WStr","Xor","Year"}
dim as integer firstKw, selKw, viewSel, pageSize = 15
dim as string key
dim as string displayText
print ubound(keyword)
locate ,,0 'disable cursor
while 1
printAt(1, 1, "viewSel: " + format(viewSel, "000"), H_ALIGN_LEFT)
printAt(1, 2, "firstKw: " + format(firstKw, "000"), H_ALIGN_LEFT)
printAt(1, 3, "selKw : " + format(selKw, "000"), H_ALIGN_LEFT)
printAt(80, 1, "keys: UP, DOWN, ESC", H_ALIGN_RIGHT)
displayText = string(20, " ")
mid(displayText, 1) = keyword(selKw)
printAt(1, 24, "keyword: " + displayText, H_ALIGN_LEFT)
printAt(30, 5, "KEYWORD", H_ALIGN_LEFT)
for i as integer = 0 to pageSize-1
displayText = string(20, ".")
mid(displayText, 1) = keyword(i + firstKw)
if i = viewSel then color 0, 7
printAt(30, 5 + 1 + i, displayText, H_ALIGN_LEFT)
color 7, 0
next
key = waitForKey()
select case key
case KEY_UP
viewSel -= 1
if viewSel < 0 then
viewSel = 0
firstKw -= 1
if firstKw < 0 then firstKw = 0
end if
case KEY_DN
viewSel += 1
if viewSel > pageSize - 1 then
viewSel = pageSize - 1
firstKw += 1
if firstKw > ubound(keyword) - (pageSize - 1) then
firstKw = ubound(keyword) - (pageSize - 1)
end if
end if
case KEY_PGUP
case KEY_PGDN
case KEY_ESC
exit while
end select
selKw = firstKw + viewSel
wend
Re: Displaying data on screen
thanks for the example code
how would i deal with say 1,00 products (with a limited number on screen)
how would i deal with say 1,00 products (with a limited number on screen)
Re: Displaying data on screen
Didn't badidea's code in the previous post already answered this?Gablea wrote:thanks for the example code
how would i deal with say 1,00 products (with a limited number on screen)
Re: Displaying data on screen
opps my bad I did not see that one
Re: Displaying data on screen
If the systems have a graphical screen, a gui toolkit like fltk may be easier. Making all these text based interfaces is a lot of work.
Re: Displaying data on screen
A GUI would be easier but it would mean learning how to use the tool kit.
The software is still crashing with just the text interface (I’m working on that)
The tool kits only aim at Linux and windows I would like to also support DOS (if anyone knows of a gui tool kit that works on dos I’ll be interested in looking at it)
The software is still crashing with just the text interface (I’m working on that)
The tool kits only aim at Linux and windows I would like to also support DOS (if anyone knows of a gui tool kit that works on dos I’ll be interested in looking at it)
Re: Displaying data on screen
If you're doing this in DOS, why not use a proper DMS, like those based on xBase , or FoxPro? Why are you doing this in plain FreeBasic is anyones' guess, especially given that you'll have to implement the TUI basically from scratch. Not to mention, console emulation in FreeBasic is too slow atm (if you want more performance, you'll either have to implement the console in a VGA mode, or use a library like ncurses)Gablea wrote:A GUI would be easier but it would mean learning how to use the tool kit.
The software is still crashing with just the text interface (I’m working on that)
The tool kits only aim at Linux and windows I would like to also support DOS (if anyone knows of a gui tool kit that works on dos I’ll be interested in looking at it)
Re: Displaying data on screen
The only reason why i was using DOS was because I know how to set up the autoexec
I would use Debian in frame buffer mode but I have no idea how to auto start a program in Linux.
and I would have to learn how to use FoxPro (as I know FoxPro does have a interface that can act like a Program) I am using plan FB as it's a language I know (I was thinking about using VBDOS but I keep hitting the 640KB limit with the apps I make in that)
I would use Debian in frame buffer mode but I have no idea how to auto start a program in Linux.
and I would have to learn how to use FoxPro (as I know FoxPro does have a interface that can act like a Program) I am using plan FB as it's a language I know (I was thinking about using VBDOS but I keep hitting the 640KB limit with the apps I make in that)
Re: Displaying data on screen
Fair enough, but do you really need an entire TUI for your program? How much functionality do you need, anyway? Perhaps some simple form generator will suffice. I did a lot of PoS/DB/Custom programs when I was in middle school to make a buck (mostly in BASICA, GW-BASIC, and FoxPro/dBase), and seldom needed a fully functional TUI (with overlapping windows and such). Eventually we (I worked with a lifelong friend on this 'endeavor' =D) did develop a full TUI, but by that time we had already moved to Win95 and never really looked back.Gablea wrote:...
and I would have to learn how to use FoxPro (as I know FoxPro does have a interface that can act like a Program) I am using plan FB as it's a language I know (I was thinking about using VBDOS but I keep hitting the 640KB limit with the apps I make in that)
Re: Displaying data on screen
most of what I need is just basic input screens etc that was why I though of the TUI for this project
Here in the UK we have a gap between manual cash registers and to of the range EPoS systems and nothing in between hence why I want to design this app (so small business can have the advantage of EPoS but not the cost)
I would love to hear your thoughts on the idea of PoS and any input you can offer Paul I would welcome it
I will admit My FB Skills are no as solid as my VB.net skills. (my app still crashes sometimes even when it is on the "signed off" screen)
Hell its getting to a point now where I want to Pay someone to debug my app and correct anything I have done wrong
Here in the UK we have a gap between manual cash registers and to of the range EPoS systems and nothing in between hence why I want to design this app (so small business can have the advantage of EPoS but not the cost)
I would love to hear your thoughts on the idea of PoS and any input you can offer Paul I would welcome it
I will admit My FB Skills are no as solid as my VB.net skills. (my app still crashes sometimes even when it is on the "signed off" screen)
Hell its getting to a point now where I want to Pay someone to debug my app and correct anything I have done wrong