Title : Gprint/Ginput/locate
Author : Alaric
Posted : 1+ years ago
Description : Uses the graphics screen to display text rather than a new console window. Be sure to globablize printx and printy. Please use the code that I have recently posted here as opposed to the original code. There are some major bugs which I believe that I have managed to stamp out.
Code :
;Note: other than the globals (and the functions), the rest of this program is just an example.
Graphics 800,600,16,2
SetBuffer(BackBuffer())
Global printx,printy
Color 255,0,0
Line 0,0,GraphicsHeight(),GraphicsWidth()
Strng$=ginput$("Hello? ")
Color 0,255,0
gprint "Hi!"
Color 0,0,255
locate(100,100)
Color 255,255,255
gprint(strng)
locate 0,0
For loop = 1 To 100
Color Rand(255),Rand(255),Rand(255)
gprint("Can you see me? "+loop)
Delay(50)
Next
WaitKey()
Function gInput$(PrintSTR$)
Local graphicsshiftbuffer=CreateImage(GraphicsWidth(),GraphicsHeight())
Local InputSTR$ = ""
Local NextKey = 0
Local NextLet$
If GraphicsHeight() <= printy;this entire "If" is just a way to shift the graphics buffer up when
;the bottom of the "graphics" is reached. This is (pretty much) the
;same as the old input command. See gprint for entire commentation.
CopyRect 0,0,GraphicsWidth(),GraphicsHeight(),0,0,FrontBuffer(),ImageBuffer(graphicsshiftbuffer)
CopyRect 0,0,GraphicsWidth(),GraphicsHeight(),0,-StringHeight(printstring),ImageBuffer(graphicsshiftbuffer),FrontBuffer()
Viewport 0,GraphicsHeight()-StringHeight(printstring),GraphicsWidth(),GraphicsHeight()
Cls
Viewport 0,0,GraphicsWidth(),GraphicsHeight()
Printy = GraphicsHeight()-StringHeight(printstring)
End If
Viewport printx,printy,GraphicsWidth()-printx,StringHeight(printstr$);I use this command to ensure
;that when I use the CLS command I don't
;clear the ENTIRE screen, just the
;Input line.
Cls ;clear the line where the Input will be placed.
Text printx,printy, printstr$ + inputstr$ ;draw the string.
Flip;flip the viewport area
Repeat
nextlet$ = ""
Nextkey = WaitKey() ;returns the ASCII value of whichever key was pressed.
If nextkey = 13 Then Exit ;check to see if return was hit.
If Nextkey <> 0 Then nextlet$ = Chr$(nextkey) ;If the key was actually pressed then make nextlet
;equal to the letter signified by the ASCII value
;inside of nextkey.
If NextLet$ <> "" And nextkey <> 8 ;check to see if nextlet is a letter or
InputSTR$ = InputSTR$ + NextLet$;add nextlet to the output
ElseIf nextkey = 8;check to see if delete was pressed.
InputSTR$ = Left$(InputSTR$,Len(InputSTR$) - 1) ;remove a letter from inputstr
End If
Cls ;clear the input line
Text printx,printy, printstr$ + inputstr$;draw the text to the screen
Flip ;flip the viewport buffer
Forever ;loop
Viewport 0,0,GraphicsWidth(),GraphicsHeight() ;return the viewport to normal.
printy=printy+15 ;increase the printy variable so that the next "gprint" or "ginput" command will
;not be right on top of this one.
Return inputstr ;return whatever the user typed in.
End Function
Function gPrint(printstring$)
Local graphicsshiftbuffer=CreateImage(GraphicsWidth(),GraphicsHeight())
If GraphicsHeight() <= printy+StringHeight(printstring);this entire "If" is just a way to shift the graphics buffer up when the
;bottom of the "graphics" is reached. This is (pretty much) the same
;as the old input command.
CopyRect 0,0,GraphicsWidth(),GraphicsHeight(),0,0,FrontBuffer(),ImageBuffer(graphicsshiftbuffer)
;this line copies the entire frontbuffer to the image graphicsshiftbuffer.
CopyRect 0,0,GraphicsWidth(),GraphicsHeight(),0,-StringHeight(printstring),ImageBuffer(graphicsshiftbuffer),FrontBuffer()
;this line copies the image graphicsshiftbuffer back to the frontbuffer, but down one
;line of text.
Viewport 0,GraphicsHeight()-StringHeight(printstring),GraphicsWidth(),GraphicsHeight()
;this command resets the origin to a different area and allows me to CLS without clearing
;the entire screen.
Cls
;clear the area specified by the Viewport command.
Flip
Viewport 0,0,GraphicsWidth(),GraphicsHeight()
;reset the viewport to the entire screen.
Text printx,printy, printstring$
;draw the text to the screen.
printy=printy-StringHeight(printstring)
Else
Text printx,printy, printstring
printy = printy + StringHeight(printstring)
;since the entire screen (including the above text) has been moved up, there is no need
;to move the next line of text down.
End If
Flip
End Function
Function locate(NewPrintX,NewPrintY)
printx = newprintx
printy = newprinty
End Function
Comments :
Kuron(Posted 1+ years ago)
Hmm, i might could use this. Thanks a lot =cD