InputBoxes Lib
Blitz3D Forums/Blitz3D Programming/InputBoxes Lib
| ||
I was kind of bored, and when you don't even have a girlfriend. What else could you do?. Yesh, Programming! LOL I made this little "Library", for the purpose of learning and using it later in future projects. You can create all the Inputboxes you want, hide and re-show them, get the text from them, etc. I will add better comments later, now I'm a bit tired. If you learned something from it or are planning to using it, please let me know :) Some feedbacks and what could I do to improve it will be appreciated. Thanks! AppTitle "Inputboxes Test by Chispon" Graphics 640, 480, 32, 2 SetBuffer BackBuffer() SetFont LoadFont("Arial", 16) Global mx Global my Global mh1 Global ibox_time Global ibox_active = -1 Global ibox_c$ = "" Global test_txt$ = "Hello!" Type input_box Field x Field y Field w Field h Field desc$ Field txt$ Field limit ;Field lim Field id Field hide Field img End Type For i = 0 To 9 CreateInputBox(100, 40 + i * 40, i, 100, 64, "ID(" + i + ") Test: ") If Rand(0, 1) = 0 Then HideInputBox(i) Next timer = CreateTimer(30) While Not KeyDown(1) WaitTimer(timer) mx = MouseX() my = MouseY() mh1 = MouseHit(1) ;get the data from a inputbox If KeyDown(59) Then test_txt$ = GetInputBoxText(1) EndIf ;just for test, F2 to reshow all boxes If KeyDown(60) Then For i = 0 To 9 ShowInputBox(i) Next EndIf UpdateInputBoxes() ;draw the text of the box you get the data from Text 400, 100, test_txt$ Flip ClsColor 128, 128, 128 Cls Wend End Function HideInputBox(id) For ib.input_box = Each input_box If id = ib\id Then ib\hide = 1 Next End Function Function ShowInputBox(id) For ib.input_box = Each input_box If id = ib\id Then ib\hide = 0 Next End Function Function GetInputBoxText$(id) For ib.input_box = Each input_box If id = ib\id Then Return ib\txt$ Next End Function Function CreateInputBox(x, y, id, width = 100, limit = 64, desc$ = "") ib.input_box = New input_box ib\x = x ib\y = y ib\w = width ;StringWidth("A") * limit + 10 ib\h = FontHeight() + 2 ib\desc$ = desc$ ib\limit = limit ;ib\lim = 0 ib\img = CreateImage(ib\w, ib\h) ib\id = id End Function Function UpdateInputBoxes() Local key ;Local swidth For ib.input_box = Each input_box If ib\hide = 0 Then If RectsOverlap(mx, my, 1, 1, ib\x, ib\y, ib\w, ib\h) Then If mh1 = 1 Then FlushKeys(): ibox_active = ib\id EndIf If ib\id = ibox_active Then ibox_time = ibox_time + 1 If ibox_time < 15 Then ibox_c$ = "|" Else ibox_c$ = "" If ibox_time > 30 Then ibox_time = 0 key = GetKey() If key > 31 And key < 128 Then If Len(ib\txt$) < ib\limit Then ib\txt$ = ib\txt$ + Chr(key) EndIf ;supr or del key If key = 8 Or key = 4 Then If Len(ib\txt$) > 0 Then ib\txt$ = Left(ib\txt$, Len(ib\txt$) - 1) EndIf ;enter key If key = 13 Then ibox_active = -1 Else ibox_c$ = "" EndIf Color 255, 255, 255 Rect ib\x, ib\y, ib\w, ib\h Text ib\x, ib\y - ib\h, ib\desc$ If StringWidth(ib\txt$ + "|") < ib\w Then Color 0, 0, 0 Text ib\x + 4, ib\y, ib\txt$ + ibox_c$ Else SetBuffer ImageBuffer(ib\img) Color 255, 255, 255 Rect 0, 0, ib\w, ib\h Color 0, 0, 0 Text ib\w - StringWidth(ib\txt$ + "|") - 1, 0, ib\txt$ + ibox_c$ SetBuffer BackBuffer() DrawImage ib\img, ib\x, ib\y EndIf Color 128, 128, 128 Rect ib\x + 1, ib\y + 1, ib\w - 1, ib\h - 1, 0 Color 0, 0, 0 Rect ib\x, ib\y, ib\w, ib\h, 0 ;failed attemp :( ;swidth = StringWidth(Right(ib\txt$ + "|", ib\lim)) ;StringWidth(ib\txt$ + "|") ; ;If StringWidth(Right(ib\txt$ + "|", ib\lim)) > ib\w Then ; Color 0, 0, 0 ; Text ib\x + 4, ib\y, Right(ib\txt$, ib\lim) + ibox_c$ ; ; ib\lim = Len(Right(ib\txt$ + "|", ib\lim)) ; If StringWidth(Right(ib\txt$ + "|", ib\lim)) > ib\w Then ib\lim = Len(ib\txt$ + "|") ;Else ; Color 0, 0, 0 ; Text ib\x + 4, ib\y, ib\txt$ + ibox_c$ ; ; ib\lim = Len(ib\txt$ + "|") ;EndIf EndIf Next End Function |