I see you're using Blitz UI, so here's some things :D
Caps-lock in BlitzUI.
Replace UpdateTextBox function with this, and it should work. Also includes holding shift while caps lock is activated. I haven't yet added End and Home, but I may do that at some point.
Function UpdateTextBox( win.Window )
gad.TextBox = Last TextBox
While gad <> Null
If gad\Owner <> Null
If gad\TabOwner <> Null
If gad\TabOwner\Owner\Active = gad\TabOwner
Valid = True
Else
Valid = False
EndIf
Else
Valid = True
EndIf
If gad\Owner = win And gad\Owner\Minimised = False And gad\Owner\Closed = False And Valid = True
SetFont app\fntTextBox
Valid = True
If win <> app\topWin And app\topWin <> Null
If app\topWin\Closed = False
Valid = False
EndIf
EndIf
If MouseOver( gad\Owner\X+gad\Owner\FX+gad\X, gad\Owner\Y+gad\Owner\FY+gad\Y, gad\W, gad\H ) And NoActiveGadgets() And win = app\overWin And Valid = True
If gad\Disabled = False app\MCurrent = app\MIBeam
app\ToolTipTimer = app\ToolTipTimer + 1
If app\ToolTipTimer > app\ToolTipDelay
app\ToolTip = gad\ToolTip
EndIf
EndIf
If gad\Disabled = True Valid = False
;Drawing
If gad\MultiLine = False
TempIH = gad\IH
gad\IH = gad\H - 3
EndIf
SetColor( SC_INPUT )
Rect gad\Owner\X+gad\Owner\FX+gad\X, gad\Owner\Y+gad\Owner\FY+gad\Y, gad\W, gad\H
SetColor( SC_INPUT,-80 )
Rect gad\Owner\X+gad\Owner\FX+gad\X+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1, gad\W-1, gad\H-1, 0
gad\RH = (gad\LineCount * gad\IH) - (gad\H - 3)
If gad\LineCount > gad\LineCountVisible And gad\H > gad\ScrollW*2 + 4 + 10
SetColor( SC_FORM,-40 )
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-gad\ScrollW-1, gad\Owner\Y+gad\Owner\FY+gad\Y+1+gad\ScrollW, 1, gad\H-2-gad\ScrollW*2, 0
If MouseOver( gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1, gad\ScrollW, gad\H ) = True And NoActiveGadgets() = True And win = app\overWin And Valid = True
app\MCurrent = app\MArrow
EndIf
;Top Button
If MouseOver( gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1, gad\ScrollW, gad\ScrollW ) = True And NoActiveGadgets() = True And win = app\overWin And Valid = True
gad\TBState =-1
If app\MB1 = 1
gad\TBActive = True
gad\Timer = 0
ElseIf app\MB1 = 2
If gad\TBActive = True
gad\TBState =-2
If gad\Timer = 0
If gad\ScrollY > 0
gad\ScrollY = gad\ScrollY - gad\Inc
EndIf
If gad\ScrollY <= 0
gad\ScrollY = 0
EndIf
EndIf
gad\Timer = gad\Timer + 1
If gad\Timer > gad\SDelay
gad\Timer = 0
EndIf
EndIf
EndIf
Else
gad\TBState = 0
EndIf
If app\MB1 = 0
If gad\TBActive = True
gad\TBActive = False
EndIf
EndIf
If gad\TBState =-2
XOFF = 1
Else
XOFF = 0
EndIf
SetColor( SC_FORM )
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1, gad\ScrollW, gad\ScrollW
If gad\TBState >-2
SetColor( SC_FORM, 40 )
Else
SetColor( SC_FORM,-40 )
EndIf
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1, gad\ScrollW+1, gad\ScrollW+1, 0
If gad\Disabled = True
SetColor( SC_FORM, 60 )
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2+XOFF+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\ScrollW/2+XOFF+1, 2, 1
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2-1+XOFF+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\ScrollW/2+1+XOFF+1, 4, 1
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2-2+XOFF+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\ScrollW/2+2+XOFF+1, 6, 1
SetColor( SC_FORM,-60 )
Else
SetColor( SC_FORMTEXT )
EndIf
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2+XOFF, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\ScrollW/2+XOFF, 2, 1
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2-1+XOFF, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\ScrollW/2+1+XOFF, 4, 1
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2-2+XOFF, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\ScrollW/2+2+XOFF, 6, 1
;Bottom Button
If MouseOver( gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\H-gad\ScrollW-1, gad\ScrollW, gad\ScrollW ) = True And NoActiveGadgets() = True And win = app\overWin And Valid = True
gad\BBState =-1
If app\MB1 = 1
gad\BBActive = True
gad\Timer = 0
ElseIf app\MB1 = 2
If gad\BBActive = True
gad\BBState =-2
If gad\Timer = 0
If gad\ScrollY < gad\RH
gad\ScrollY = gad\ScrollY + gad\Inc
EndIf
If gad\ScrollY >= gad\RH
gad\ScrollY = gad\RH
EndIf
EndIf
gad\Timer = gad\Timer + 1
If gad\Timer > gad\SDelay
gad\Timer = 0
EndIf
EndIf
EndIf
Else
gad\BBState = 0
EndIf
If app\MB1 = 0
If gad\BBActive = True
gad\BBActive = False
EndIf
EndIf
If gad\BBState =-2
XOFF = 1
Else
XOFF = 0
EndIf
SetColor( SC_FORM )
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\H-gad\ScrollW-1, gad\ScrollW, gad\ScrollW
If gad\BBState >-2
SetColor( SC_FORM, 40 )
Else
SetColor( SC_FORM,-40 )
EndIf
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\H-gad\ScrollW-1, gad\ScrollW+1, gad\ScrollW+1, 0
If gad\Disabled = True
SetColor( SC_FORM, 60 )
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2-2+XOFF+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\H-2-gad\ScrollW/2-1+XOFF+1, 6, 1
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2-1+XOFF+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\H-2-gad\ScrollW/2+XOFF+1, 4, 1
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2+XOFF+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\H-2-gad\ScrollW/2+1+XOFF+1, 2, 1
SetColor( SC_FORM,-60 )
Else
SetColor( SC_FORMTEXT )
EndIf
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2-2+XOFF, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\H-2-gad\ScrollW/2-1+XOFF, 6, 1
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2-1+XOFF, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\H-2-gad\ScrollW/2+XOFF, 4, 1
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1+gad\ScrollW/2+XOFF, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\H-2-gad\ScrollW/2+1+XOFF, 2, 1
;Scroll Bar
If gad\ScrollY > gad\RH gad\ScrollY = gad\RH
SBS# = gad\H - 4 - gad\ScrollW*2
gad\ScrollH = SBS - gad\LineCount
If gad\ScrollH < 6 gad\ScrollH = 6
SY# = Interpolate(gad\ScrollY, 0, gad\RH, 0, SBS-gad\ScrollH)
SetColor( SC_FORM, 40 )
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\ScrollW+2, gad\ScrollW, SBS
If MouseOver( gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1+gad\ScrollW+1+SY, gad\ScrollW, gad\ScrollH ) = True And NoActiveGadgets() = True And win = app\overWin And Valid = True
If app\MB1 = 1
gad\SBActive = True
gad\DragY = app\MY - (gad\Owner\Y+gad\Owner\FY+gad\Y+SY)
EndIf
EndIf
If app\MB1 = 2
If gad\SBActive = True
SY = app\MY - gad\DragY - (gad\Owner\Y+gad\Owner\FY+gad\Y)
If SY < 0 SY = 0
If SY > SBS-gad\ScrollH SY = SBS-gad\ScrollH
gad\ScrollY = Interpolate( SY, 0.0, SBS-gad\ScrollH, 0.0, gad\RH )
EndIf
ElseIf app\MB1 = 0
If gad\SBActive = True
gad\SBActive = False
EndIf
EndIf
SetColor( SC_FORM )
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1+gad\ScrollW+1+SY, gad\ScrollW, gad\ScrollH
SetColor( SC_FORM,-40 )
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1+gad\ScrollW+1+SY, gad\ScrollW, gad\ScrollH, 0
SetColor( SC_FORM, 40 )
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1+gad\ScrollW+1+SY, gad\ScrollW, 1, 0
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1+gad\ScrollW+1+SY, 1, gad\ScrollH, 0
Color 0, 0, 0
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+1+gad\ScrollW, gad\ScrollW, 1
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW+1, gad\Owner\Y+gad\Owner\FY+gad\Y+gad\H-gad\ScrollW-2, gad\ScrollW, 1
Rect gad\Owner\X+gad\Owner\FX+gad\X+gad\W-2-gad\ScrollW, gad\Owner\Y+gad\Owner\FY+gad\Y, 1, gad\H
Viewport gad\Owner\X+gad\Owner\FX+gad\X+3, gad\Owner\Y+gad\Owner\FY+gad\Y+3, gad\W-gad\ScrollW-6, gad\H-5
If MouseOver( gad\Owner\X+gad\Owner\FX+gad\X+2, gad\Owner\Y+gad\Owner\FY+gad\Y+2, gad\W-gad\ScrollW-4, gad\H-3 ) And NoActiveGadgets() = True And win = app\overWin And Valid = True
If app\MB1 = 1
FlushKeys
gad\Active = True
gad\CursorTimer = 0
EndIf
Else
If app\MB1 = 1
If gad\Active = True
gad\Active = False
app\Event = EVENT_GADGET
app\GadgetEvent = gad\ID
If gad\MultiLine = False
app\GadgetEventData = gad\Caption[0]
EndIf
EndIf
EndIf
EndIf
WOFF = gad\ScrollW - 1
Else
WOFF = 0
gad\ScrollY = 0
Viewport gad\Owner\X+gad\Owner\FX+gad\X+3, gad\Owner\Y+gad\Owner\FY+gad\Y+3, gad\W-5, gad\H-5
If MouseOver( gad\Owner\X+gad\Owner\FX+gad\X+2, gad\Owner\Y+gad\Owner\FY+gad\Y+2, gad\W-3, gad\H-3 ) And NoActiveGadgets() = True And win = app\overWin And Valid = True
If app\MB1 = 1
FlushKeys
gad\Active = True
gad\CursorTimer = 0
ElseIf app\MB1 = 0
If gad\SActive = True gad\SActive = False
EndIf
Else
If app\MB1 = 1
If gad\Active = True
gad\Active = False
app\Event = EVENT_GADGET
app\GadgetEvent = gad\ID
If gad\MultiLine = False
app\GadgetEventData = gad\Caption[0]
EndIf
EndIf
ElseIf app\MB1 = 0
If gad\SActive = True gad\SActive = False
EndIf
EndIf
EndIf
If gad\DCTimer > 0 gad\DCTimer = gad\DCTimer - 1
For A = 0 To gad\LineCount - 1
If (A+1)*gad\IH-gad\ScrollY >= 0 And (A+1)*gad\IH-gad\ScrollY <= gad\H
If MouseOver( gad\Owner\X+gad\Owner\FX+gad\X+2, gad\Owner\Y+gad\Owner\FY+gad\Y+2+A*gad\IH-gad\ScrollY, gad\W-4-WOFF, gad\IH ) And NoActiveGadgets() = True And win = app\overWin And Valid = True
If app\MB1 = 1
gad\SActive = True
gad\CursorTimer = 0
If gad\DCTimer = 0
gad\DClick = False
gad\DCTimer = 30
Else
gad\DClick = True
gad\DCTimer = 0
EndIf
XOFF = app\MX - (gad\Owner\X+gad\Owner\FX+gad\X+2-gad\ScrollX)
gad\SelStart =-1
gad\SelEnd =-1
For B = 0 To Len(gad\Caption[A])
WID = StringWidth( Left(gad\Caption[A], B) )
If WID > XOFF
If B > 0
If WID - XOFF < XOFF - StringWidth( Left(gad\Caption[A], B-1) )
gad\SelStart = B
gad\SelEnd = B
Else
gad\SelStart = B - 1
gad\SelEnd = B - 1
EndIf
Else
gad\SelStart = B
gad\SelEnd = B
EndIf
gad\LineStart = A
gad\LineEnd = A
Exit
EndIf
Next
If gad\SelStart =-1
gad\LineStart = A
gad\LineEnd = A
gad\SelStart = Len(gad\Caption[gad\LineStart])
gad\SelEnd = gad\SelStart
EndIf
ElseIf app\MB1 = 2
If gad\SActive = True
XOFF = app\MX - (gad\Owner\X+gad\Owner\FX+gad\X+2-gad\ScrollX)
gad\SelStart =-1
For B = 0 To Len(gad\Caption[A])
WID = StringWidth( Left(gad\Caption[A], B) )
If WID > XOFF
If B > 0
If WID - XOFF < XOFF - StringWidth( Left(gad\Caption[A], B-1) )
gad\SelStart = B
Else
gad\SelStart = B - 1
EndIf
Else
gad\SelStart = B
EndIf
If app\MX > gad\Owner\X + gad\Owner\FX + gad\X + gad\W - 10
If gad\ScrollX < StringWidth(gad\Caption[A])+6-gad\W
gad\ScrollX = gad\ScrollX + 2
Else
gad\ScrollX = StringWidth(gad\Caption[A])+6-gad\W
EndIf
ElseIf app\MX < gad\Owner\X + gad\Owner\FX + gad\X + 10
If gad\ScrollX > 0
gad\ScrollX = gad\ScrollX - 2
Else
gad\ScrollX = 0
EndIf
EndIf
gad\LineStart = A
Exit
EndIf
Next
If gad\SelStart =-1
gad\LineStart = A
gad\SelStart = Len(gad\Caption[gad\LineStart])
EndIf
EndIf
ElseIf app\MB1 = 0
If gad\SActive = True
gad\SActive = False
EndIf
If gad\DClick = True
gad\DClick = False
If gad\MultiLine = True
gad\SelStart = 0
gad\SelEnd = Len( gad\Caption[gad\LineCount] )
gad\LineStart = 0
gad\LineEnd = gad\LineCount - 1
Else
gad\SelStart = 0
gad\SelEnd = Len( gad\Caption[0] )
gad\LineStart = 0
gad\LineEnd = 0
EndIf
EndIf
EndIf
EndIf
If gad\LineStart = A
If gad\LineEnd = gad\LineStart
If gad\SelEnd > gad\SelStart
If gad\Disabled = True
SetColor( SC_INPUT,-60 )
Else
SetColor( SC_INPUTTEXT )
EndIf
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Left(gad\Caption[A], gad\SelStart), 0, 1
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelEnd))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Mid(gad\Caption[A], gad\SelEnd+1), 0, 1
SetColor( SC_INPUTHILIGHT )
Rect gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelStart))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+A*gad\IH-gad\ScrollY, StringWidth(Mid(gad\Caption[A], gad\SelStart+1, gad\SelEnd-gad\SelStart)), gad\IH
SetColor( SC_INPUTTEXTSEL )
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelStart))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Mid(gad\Caption[A], gad\SelStart+1, gad\SelEnd-gad\SelStart), 0, 1
Else
If gad\Disabled = True
SetColor( SC_INPUT,-60 )
Else
SetColor( SC_INPUTTEXT )
EndIf
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Left(gad\Caption[A], gad\SelEnd), 0, 1
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelStart))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Mid(gad\Caption[A], gad\SelStart+1), 0, 1
SetColor( SC_INPUTHILIGHT )
Rect gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelEnd))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+A*gad\IH-gad\ScrollY, StringWidth(Mid(gad\Caption[A], gad\SelEnd+1, gad\SelStart-gad\SelEnd)), gad\IH
SetColor( SC_INPUTTEXTSEL )
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelEnd))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Mid(gad\Caption[A], gad\SelEnd+1, gad\SelStart-gad\SelEnd), 0, 1
EndIf
ElseIf gad\LineEnd > gad\LineStart
If gad\Disabled = True
SetColor( SC_INPUT,-60 )
Else
SetColor( SC_INPUTTEXT )
EndIf
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Left(gad\Caption[A], gad\SelStart), 0, 1
SetColor( SC_INPUTHILIGHT )
Rect gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelStart))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+A*gad\IH-gad\ScrollY, StringWidth(Mid(gad\Caption[A], gad\SelStart+1)), gad\IH
SetColor( SC_INPUTTEXTSEL )
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelStart))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Mid(gad\Caption[A], gad\SelStart+1), 0, 1
ElseIf gad\LineEnd < gad\LineStart
If gad\Disabled = True
SetColor( SC_INPUT,-60 )
Else
SetColor( SC_INPUTTEXT )
EndIf
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelStart))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Mid(gad\Caption[A], gad\SelStart+1), 0, 1
SetColor( SC_INPUTHILIGHT )
Rect gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+A*gad\IH-gad\ScrollY, StringWidth(Left(gad\Caption[A], gad\SelStart)), gad\IH
SetColor( SC_INPUTTEXTSEL )
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Left(gad\Caption[A], gad\SelStart), 0, 1
EndIf
ElseIf gad\LineEnd = A
If gad\LineEnd > gad\LineStart
If gad\Disabled = True
SetColor( SC_INPUT,-60 )
Else
SetColor( SC_INPUTTEXT )
EndIf
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelEnd))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Mid(gad\Caption[A], gad\SelEnd+1), 0, 1
SetColor( SC_INPUTHILIGHT )
Rect gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+A*gad\IH-gad\ScrollY, StringWidth(Left(gad\Caption[A], gad\SelEnd)), gad\IH
SetColor( SC_INPUTTEXTSEL )
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Left(gad\Caption[A], gad\SelEnd), 0, 1
ElseIf gad\LineEnd < gad\LineStart
If gad\Disabled = True
SetColor( SC_INPUT,-60 )
Else
SetColor( SC_INPUTTEXT )
EndIf
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Left(gad\Caption[A], gad\SelEnd), 0, 1
SetColor( SC_INPUTHILIGHT )
Rect gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelEnd))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+A*gad\IH-gad\ScrollY, StringWidth(Mid(gad\Caption[A], gad\SelEnd+1)), gad\IH
SetColor( SC_INPUTTEXTSEL )
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2+StringWidth(Left(gad\Caption[A], gad\SelEnd))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, Mid(gad\Caption[A], gad\SelEnd+1), 0, 1
EndIf
Else
If gad\LineEnd > gad\LineStart
If A > gad\LineStart And A < gad\LineEnd
SetColor( SC_INPUTHILIGHT )
Rect gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+A*gad\IH-gad\ScrollY, StringWidth(gad\Caption[A]), gad\IH
SetColor( SC_INPUTTEXTSEL )
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, gad\Caption[A], 0, 1
Else
If gad\Disabled = True
SetColor( SC_INPUT,-60 )
Else
SetColor( SC_INPUTTEXT )
EndIf
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, gad\Caption[A], 0, 1
EndIf
ElseIf gad\LineEnd < gad\LineStart
If A > gad\LineEnd And A < gad\LineStart
SetColor( SC_INPUTHILIGHT )
Rect gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+A*gad\IH-gad\ScrollY, StringWidth(gad\Caption[A]), gad\IH
SetColor( SC_INPUTTEXTSEL )
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, gad\Caption[A], 0, 1
Else
If gad\Disabled = True
SetColor( SC_INPUT,-60 )
Else
SetColor( SC_INPUTTEXT )
EndIf
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, gad\Caption[A], 0, 1
EndIf
Else
If gad\Disabled = True
SetColor( SC_INPUT,-60 )
Else
SetColor( SC_INPUTTEXT )
EndIf
Text gad\Owner\X+gad\Owner\FX+gad\X+2+2-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\IH/2+A*gad\IH-gad\ScrollY, gad\Caption[A], 0, 1
EndIf
EndIf
EndIf
Next
If gad\Active = True
gad\CursorTimer = gad\CursorTimer + 1
If gad\CursorTimer < 30
Color 0, 0, 0
Rect gad\Owner\X+gad\Owner\FX+gad\X+2+1+StringWidth(Left(gad\Caption[gad\LineStart], gad\SelStart))-gad\ScrollX, gad\Owner\Y+gad\Owner\FY+gad\Y+2+gad\LineStart*gad\IH+2-gad\ScrollY, 1, gad\IH-4
EndIf
If gad\CursorTimer > 60 gad\CursorTimer = 0
If gad\MultiLine = False
If gad\SActive = False
; if app\MX > gad\Owner\X + gad\Owner\FX + gad\X + gad\W - 10
; if gad\ScrollX < stringwidth(gad\Caption[A])+5-gad\W
; gad\ScrollX = gad\ScrollX + 2
; else
; gad\ScrollX = stringwidth(gad\Caption[A])+5-gad\W
; endif
; elseif app\MX < gad\Owner\X + gad\Owner\FX + gad\X + 10
; if gad\ScrollX > 0
; gad\ScrollX = gad\ScrollX - 2
; else
; gad\ScrollX = 0
; endif
; endif
EndIf
Else
gad\ScrollX = 0
EndIf
;Input
gad\Key = GetKey()
If gad\Key = 0
Select True
Case KeyHit(71) gad\Key = Asc("7")
Case KeyHit(72) gad\Key = Asc("8")
Case KeyHit(73) gad\Key = Asc("9")
Case KeyHit(75) gad\Key = Asc("4")
Case KeyHit(76) gad\Key = Asc("5")
Case KeyHit(77) gad\Key = Asc("6")
Case KeyHit(79) gad\Key = Asc("1")
Case KeyHit(80) gad\Key = Asc("2")
Case KeyHit(81) gad\Key = Asc("3")
Case KeyHit(82) gad\Key = Asc("0")
Case KeyHit(83) gad\Key = Asc(".")
End Select
EndIf
gad\KeyTimer = gad\KeyTimer + 1
If gad\KeyTimer > 12
If KeyDown(14) gad\Key = 8
If KeyDown(28) gad\Key = 13
If KeyDown(211) gad\Key = 4
If KeyDown(200) gad\Key = 28
If KeyDown(208) gad\Key = 29
If KeyDown(205) gad\Key = 30
If KeyDown(203) gad\Key = 31
If KeyDown(57) gad\Key = 32
gad\KeyTimer = 0
EndIf
If gad\Key <> 0 And app\actMenu = Null And NoActiveGadgets()
gad\KeyTimer = 0
gad\CursorTimer = 0
;Alpha
If (gad\Key>96 And gad\Key<123) Or (gad\Key>64 And gad\Key<91) Or gad\Key=32 Or gad\Key = 46 And gad\Mode = 0
If gad\LineStart = gad\LineEnd
If gad\SelStart < gad\SelEnd
StartPos = gad\SelStart
EndPos = gad\SelEnd
Else
StartPos = gad\SelEnd
EndPos = gad\SelStart
EndIf
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], StartPos ) + Mid( gad\Caption[gad\LineStart], EndPos+1 )
gad\LineEnd = gad\LineStart
If gad\SelStart < gad\SelEnd gad\SelEnd = gad\SelStart Else gad\SelStart = gad\SelEnd
ElseIf gad\LineStart < gad\LineEnd
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], gad\SelStart ) + Mid( gad\Caption[gad\LineEnd], gad\SelEnd+1 )
gad\Caption[gad\LineEnd] = ""
For A = gad\LineStart+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineEnd-gad\LineStart)]
gad\Caption[A+(gad\LineEnd-gad\LineStart)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineEnd-gad\LineStart)
gad\LineEnd = gad\LineStart
gad\SelEnd = gad\SelStart
Else
gad\Caption[gad\LineEnd] = Left( gad\Caption[gad\LineEnd], gad\SelEnd ) + Mid( gad\Caption[gad\LineStart], gad\SelStart+1)
gad\Caption[gad\LineStart] = ""
For A = gad\LineEnd+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineStart-gad\LineEnd)]
gad\Caption[A+(gad\LineStart-gad\LineEnd)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineStart-gad\LineEnd)
gad\LineStart = gad\LineEnd
gad\SelStart = gad\SelEnd
EndIf
;gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Chr(gad\Key) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
IF api_GetKeyState($14) > 0
IF keydown(42)=0 AND keydown(54)=0
;DEBUGLOG "Attempting upper case Alpha"
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + upper(Chr(gad\Key)) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
ELSE
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + lower(Chr(gad\Key)) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
endif
else
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Chr(gad\Key) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
endif
gad\SelStart = gad\SelStart + 1
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If gad\MultiLine = False
LineLen = StringWidth( Left(gad\Caption[0],gad\SelStart) ) - gad\ScrollX
If LineLen > gad\W - 6
gad\ScrollX = (LineLen+gad\ScrollX) - (gad\W - 6)
ElseIf LineLen < 0
gad\ScrollX = (LineLen+gad\ScrollX)
EndIf
EndIf
;Minus
ElseIf gad\Key = 45 And gad\Mode > 0
If gad\SelStart = 0
If gad\LineStart = gad\LineEnd
If gad\SelStart < gad\SelEnd
StartPos = gad\SelStart
EndPos = gad\SelEnd
Else
StartPos = gad\SelEnd
EndPos = gad\SelStart
EndIf
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], StartPos ) + Mid( gad\Caption[gad\LineStart], EndPos+1 )
gad\LineEnd = gad\LineStart
If gad\SelStart < gad\SelEnd gad\SelEnd = gad\SelStart Else gad\SelStart = gad\SelEnd
ElseIf gad\LineStart < gad\LineEnd
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], gad\SelStart ) + Mid( gad\Caption[gad\LineEnd], gad\SelEnd+1 )
gad\Caption[gad\LineEnd] = ""
For A = gad\LineStart+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineEnd-gad\LineStart)]
gad\Caption[A+(gad\LineEnd-gad\LineStart)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineEnd-gad\LineStart)
gad\LineEnd = gad\LineStart
gad\SelEnd = gad\SelStart
Else
gad\Caption[gad\LineEnd] = Left( gad\Caption[gad\LineEnd], gad\SelEnd ) + Mid( gad\Caption[gad\LineStart], gad\SelStart+1)
gad\Caption[gad\LineStart] = ""
For A = gad\LineEnd+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineStart-gad\LineEnd)]
gad\Caption[A+(gad\LineStart-gad\LineEnd)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineStart-gad\LineEnd)
gad\LineStart = gad\LineEnd
gad\SelStart = gad\SelEnd
EndIf
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Chr(gad\Key) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; IF api_GetKeyState($14) > 0
; DEBUGLOG "Attempting upper case Minus"
; gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + upper(Chr(gad\Key)) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; else
; gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Chr(gad\Key) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; endif
gad\SelStart = gad\SelStart + 1
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If gad\MultiLine = False
LineLen = StringWidth( Left(gad\Caption[0],gad\SelStart) ) - gad\ScrollX
If LineLen > gad\W - 6
gad\ScrollX = (LineLen+gad\ScrollX) - (gad\W - 6)
ElseIf LineLen < 0
gad\ScrollX = (LineLen+gad\ScrollX)
EndIf
EndIf
EndIf
;Numeric
ElseIf (gad\Key>47 And gad\Key<58) Or (gad\Key>70 And gad\Key<74) Or (gad\Key>74 And gad\Key<78) Or (gad\Key>78 And gad\Key<83)
If gad\LineStart = gad\LineEnd
If gad\SelStart < gad\SelEnd
StartPos = gad\SelStart
EndPos = gad\SelEnd
Else
StartPos = gad\SelEnd
EndPos = gad\SelStart
EndIf
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], StartPos ) + Mid( gad\Caption[gad\LineStart], EndPos+1 )
gad\LineEnd = gad\LineStart
If gad\SelStart < gad\SelEnd gad\SelEnd = gad\SelStart Else gad\SelStart = gad\SelEnd
ElseIf gad\LineStart < gad\LineEnd
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], gad\SelStart ) + Mid( gad\Caption[gad\LineEnd], gad\SelEnd+1 )
gad\Caption[gad\LineEnd] = ""
For A = gad\LineStart+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineEnd-gad\LineStart)]
gad\Caption[A+(gad\LineEnd-gad\LineStart)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineEnd-gad\LineStart)
gad\LineEnd = gad\LineStart
gad\SelEnd = gad\SelStart
Else
gad\Caption[gad\LineEnd] = Left( gad\Caption[gad\LineEnd], gad\SelEnd ) + Mid( gad\Caption[gad\LineStart], gad\SelStart+1)
gad\Caption[gad\LineStart] = ""
For A = gad\LineEnd+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineStart-gad\LineEnd)]
gad\Caption[A+(gad\LineStart-gad\LineEnd)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineStart-gad\LineEnd)
gad\LineStart = gad\LineEnd
gad\SelStart = gad\SelEnd
EndIf
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Chr(gad\Key) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; IF api_GetKeyState($14) > 0
; DEBUGLOG "Attempting upper case Numeric"
; gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + upper(Chr(gad\Key)) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; else
; gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Chr(gad\Key) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; endif
gad\SelStart = gad\SelStart + 1
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If gad\MultiLine = False
LineLen = StringWidth( Left(gad\Caption[0],gad\SelStart) ) - gad\ScrollX
If LineLen > gad\W - 6
gad\ScrollX = (LineLen+gad\ScrollX) - (gad\W - 6)
ElseIf LineLen < 0
gad\ScrollX = (LineLen+gad\ScrollX)
EndIf
EndIf
;Float
ElseIf (gad\Key=46 Or gad\Key = 83) And gad\Mode = 2
If Instr(gad\Caption[gad\LineStart], ".") = 0
If gad\LineStart = gad\LineEnd
If gad\SelStart < gad\SelEnd
StartPos = gad\SelStart
EndPos = gad\SelEnd
Else
StartPos = gad\SelEnd
EndPos = gad\SelStart
EndIf
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], StartPos ) + Mid( gad\Caption[gad\LineStart], EndPos+1 )
gad\LineEnd = gad\LineStart
If gad\SelStart < gad\SelEnd gad\SelEnd = gad\SelStart Else gad\SelStart = gad\SelEnd
ElseIf gad\LineStart < gad\LineEnd
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], gad\SelStart ) + Mid( gad\Caption[gad\LineEnd], gad\SelEnd+1 )
gad\Caption[gad\LineEnd] = ""
For A = gad\LineStart+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineEnd-gad\LineStart)]
gad\Caption[A+(gad\LineEnd-gad\LineStart)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineEnd-gad\LineStart)
gad\LineEnd = gad\LineStart
gad\SelEnd = gad\SelStart
Else
gad\Caption[gad\LineEnd] = Left( gad\Caption[gad\LineEnd], gad\SelEnd ) + Mid( gad\Caption[gad\LineStart], gad\SelStart+1)
gad\Caption[gad\LineStart] = ""
For A = gad\LineEnd+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineStart-gad\LineEnd)]
gad\Caption[A+(gad\LineStart-gad\LineEnd)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineStart-gad\LineEnd)
gad\LineStart = gad\LineEnd
gad\SelStart = gad\SelEnd
EndIf
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Chr(gad\Key) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; IF api_GetKeyState($14) > 0
; DEBUGLOG "Attempting upper case Float"
; gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + upper(Chr(gad\Key)) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; else
; gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Chr(gad\Key) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; endif
gad\SelStart = gad\SelStart + 1
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If gad\MultiLine = False
LineLen = StringWidth( Left(gad\Caption[0],gad\SelStart) ) - gad\ScrollX
If LineLen > gad\W - 6
gad\ScrollX = (LineLen+gad\ScrollX) - (gad\W - 6)
ElseIf LineLen < 0
gad\ScrollX = (LineLen+gad\ScrollX)
EndIf
EndIf
EndIf
;Misc
ElseIf (gad\Key>32 And gad\Key<46) Or gad\Key = 47 Or (gad\Key>57 And gad\Key<65) Or gad\Key=83 Or (gad\Key>90 And gad\Key<97) Or (gad\Key>122 And gad\Key<127) Or gad\Key=163 Or gad\Key=172 And gad\Mode = 0
If gad\LineStart = gad\LineEnd
If gad\SelStart < gad\SelEnd
StartPos = gad\SelStart
EndPos = gad\SelEnd
Else
StartPos = gad\SelEnd
EndPos = gad\SelStart
EndIf
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], StartPos ) + Mid( gad\Caption[gad\LineStart], EndPos+1 )
gad\LineEnd = gad\LineStart
If gad\SelStart < gad\SelEnd gad\SelEnd = gad\SelStart Else gad\SelStart = gad\SelEnd
ElseIf gad\LineStart < gad\LineEnd
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], gad\SelStart ) + Mid( gad\Caption[gad\LineEnd], gad\SelEnd+1 )
gad\Caption[gad\LineEnd] = ""
For A = gad\LineStart+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineEnd-gad\LineStart)]
gad\Caption[A+(gad\LineEnd-gad\LineStart)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineEnd-gad\LineStart)
gad\LineEnd = gad\LineStart
gad\SelEnd = gad\SelStart
Else
gad\Caption[gad\LineEnd] = Left( gad\Caption[gad\LineEnd], gad\SelEnd ) + Mid( gad\Caption[gad\LineStart], gad\SelStart+1)
gad\Caption[gad\LineStart] = ""
For A = gad\LineEnd+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineStart-gad\LineEnd)]
gad\Caption[A+(gad\LineStart-gad\LineEnd)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineStart-gad\LineEnd)
gad\LineStart = gad\LineEnd
gad\SelStart = gad\SelEnd
EndIf
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Chr(gad\Key) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; IF api_GetKeyState($14) > 0
; DEBUGLOG "Attempting upper case Misc"
; gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + upper(Chr(gad\Key)) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; else
; gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Chr(gad\Key) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
; endif
gad\SelStart = gad\SelStart + 1
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If gad\MultiLine = False
LineLen = StringWidth( Left(gad\Caption[0],gad\SelStart) ) - gad\ScrollX
If LineLen > gad\W - 6
gad\ScrollX = (LineLen+gad\ScrollX) - (gad\W - 6)
ElseIf LineLen < 0
gad\ScrollX = (LineLen+gad\ScrollX)
EndIf
EndIf
;Enter
ElseIf gad\Key = 13
If gad\MultiLine = False
gad\Active = False
app\Event = EVENT_GADGET
app\GadgetEvent = gad\ID
If gad\MultiLine = False
app\GadgetEventData = gad\Caption[0]
EndIf
Else
If gad\LineStart = gad\LineEnd
If gad\SelStart < gad\SelEnd
StartPos = gad\SelStart
EndPos = gad\SelEnd
Else
StartPos = gad\SelEnd
EndPos = gad\SelStart
EndIf
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], StartPos ) + Mid( gad\Caption[gad\LineStart], EndPos+1 )
gad\LineEnd = gad\LineStart
If gad\SelStart < gad\SelEnd gad\SelEnd = gad\SelStart Else gad\SelStart = gad\SelEnd
ElseIf gad\LineStart < gad\LineEnd
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], gad\SelStart ) + Mid( gad\Caption[gad\LineEnd], gad\SelEnd+1 )
gad\Caption[gad\LineEnd] = ""
For A = gad\LineStart+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineEnd-gad\LineStart)]
gad\Caption[A+(gad\LineEnd-gad\LineStart)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineEnd-gad\LineStart)
gad\LineEnd = gad\LineStart
gad\SelEnd = gad\SelStart
Else
gad\Caption[gad\LineEnd] = Left( gad\Caption[gad\LineEnd], gad\SelEnd ) + Mid( gad\Caption[gad\LineStart], gad\SelStart+1)
gad\Caption[gad\LineStart] = ""
For A = gad\LineEnd+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineStart-gad\LineEnd)]
gad\Caption[A+(gad\LineStart-gad\LineEnd)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineStart-gad\LineEnd)
gad\LineStart = gad\LineEnd
gad\SelStart = gad\SelEnd
EndIf
If gad\LineStart+2 <= gad\LineCount
For A = gad\LineStart+2 To gad\LineCount
gad\Caption[gad\LineCount-(A-(gad\LineStart+2))] = gad\Caption[gad\LineCount-(A-(gad\LineStart+2))-1]
Next
EndIf
gad\Caption[gad\LineStart+1] = Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart)
gad\LineCount = gad\LineCount + 1
gad\LineStart = gad\LineStart + 1
gad\SelStart = 0
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If (gad\LineStart * gad\IH) - gad\ScrollY > gad\H - 4
gad\ScrollY = gad\ScrollY + gad\IH
EndIf
EndIf
;Backspace
ElseIf gad\Key = 8
If gad\LineStart = gad\LineEnd And gad\SelStart = gad\SelEnd
If gad\SelStart > 0
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart-1) + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
gad\SelStart = gad\SelStart - 1
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
Else
If gad\LineStart > 0
PrevLen = Len(gad\Caption[gad\LineStart-1])
gad\Caption[gad\LineStart-1] = gad\Caption[gad\LineStart-1] + gad\Caption[gad\LineStart]
gad\Caption[gad\LineStart] = ""
If gad\LineStart <= gad\LineCount-1
For A = gad\LineStart To gad\LineCount-1
gad\Caption[A] = gad\Caption[A+1]
Next
EndIf
gad\LineCount = gad\LineCount - 1
gad\LineStart = gad\LineStart - 1
gad\SelStart = PrevLen
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If (gad\LineStart * gad\IH) - gad\ScrollY < 0
gad\ScrollY = gad\ScrollY - gad\IH
EndIf
EndIf
EndIf
Else
If gad\LineStart = gad\LineEnd
If gad\SelStart < gad\SelEnd
StartPos = gad\SelStart
EndPos = gad\SelEnd
Else
StartPos = gad\SelEnd
EndPos = gad\SelStart
EndIf
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], StartPos ) + Mid( gad\Caption[gad\LineStart], EndPos+1 )
gad\LineEnd = gad\LineStart
If gad\SelStart < gad\SelEnd gad\SelEnd = gad\SelStart Else gad\SelStart = gad\SelEnd
ElseIf gad\LineStart < gad\LineEnd
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], gad\SelStart ) + Mid( gad\Caption[gad\LineEnd], gad\SelEnd+1 )
gad\Caption[gad\LineEnd] = ""
For A = gad\LineStart+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineEnd-gad\LineStart)]
gad\Caption[A+(gad\LineEnd-gad\LineStart)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineEnd-gad\LineStart)
gad\LineEnd = gad\LineStart
gad\SelEnd = gad\SelStart
Else
gad\Caption[gad\LineEnd] = Left( gad\Caption[gad\LineEnd], gad\SelEnd ) + Mid( gad\Caption[gad\LineStart], gad\SelStart+1)
gad\Caption[gad\LineStart] = ""
For A = gad\LineEnd+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineStart-gad\LineEnd)]
gad\Caption[A+(gad\LineStart-gad\LineEnd)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineStart-gad\LineEnd)
gad\LineStart = gad\LineEnd
gad\SelStart = gad\SelEnd
EndIf
EndIf
If gad\MultiLine = False
LineLen = StringWidth( Left(gad\Caption[0],gad\SelStart) ) - gad\ScrollX
If LineLen > gad\W - 6
gad\ScrollX = (LineLen+gad\ScrollX) - (gad\W - 6)
ElseIf LineLen < 0
gad\ScrollX = (LineLen+gad\ScrollX)
EndIf
EndIf
;Del
ElseIf gad\Key = 4
If gad\LineStart = gad\LineEnd And gad\SelStart = gad\SelEnd
If gad\SelStart < Len(gad\Caption[gad\LineStart])
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + Mid(gad\Caption[gad\LineStart], gad\SelStart+2)
Else
gad\Caption[gad\LineStart] = gad\Caption[gad\LineStart] + gad\Caption[gad\LineStart+1]
gad\Caption[gad\LineStart+1] = ""
If gad\LineStart+1 <= gad\LineCount-1
For A = gad\LineStart+1 To gad\LineCount-1
gad\Caption[A] = gad\Caption[A+1]
Next
gad\Caption[gad\LineCount] = ""
gad\LineCount = gad\LineCount - 1
EndIf
EndIf
Else
If gad\LineStart = gad\LineEnd
If gad\SelStart < gad\SelEnd
StartPos = gad\SelStart
EndPos = gad\SelEnd
Else
StartPos = gad\SelEnd
EndPos = gad\SelStart
EndIf
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], StartPos ) + Mid( gad\Caption[gad\LineStart], EndPos+1 )
gad\LineEnd = gad\LineStart
If gad\SelStart < gad\SelEnd gad\SelEnd = gad\SelStart Else gad\SelStart = gad\SelEnd
ElseIf gad\LineStart < gad\LineEnd
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], gad\SelStart ) + Mid( gad\Caption[gad\LineEnd], gad\SelEnd+1 )
gad\Caption[gad\LineEnd] = ""
For A = gad\LineStart+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineEnd-gad\LineStart)]
gad\Caption[A+(gad\LineEnd-gad\LineStart)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineEnd-gad\LineStart)
gad\LineEnd = gad\LineStart
gad\SelEnd = gad\SelStart
Else
gad\Caption[gad\LineEnd] = Left( gad\Caption[gad\LineEnd], gad\SelEnd ) + Mid( gad\Caption[gad\LineStart], gad\SelStart+1)
gad\Caption[gad\LineStart] = ""
For A = gad\LineEnd+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineStart-gad\LineEnd)]
gad\Caption[A+(gad\LineStart-gad\LineEnd)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineStart-gad\LineEnd)
gad\LineStart = gad\LineEnd
gad\SelStart = gad\SelEnd
EndIf
EndIf
;Tab
ElseIf gad\Key = 9 And gad\Mode = 0
If gad\LineStart = gad\LineEnd
If gad\SelStart < gad\SelEnd
StartPos = gad\SelStart
EndPos = gad\SelEnd
Else
StartPos = gad\SelEnd
EndPos = gad\SelStart
EndIf
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], StartPos ) + Mid( gad\Caption[gad\LineStart], EndPos+1 )
gad\LineEnd = gad\LineStart
If gad\SelStart < gad\SelEnd gad\SelEnd = gad\SelStart Else gad\SelStart = gad\SelEnd
ElseIf gad\LineStart < gad\LineEnd
gad\Caption[gad\LineStart] = Left( gad\Caption[gad\LineStart], gad\SelStart ) + Mid( gad\Caption[gad\LineEnd], gad\SelEnd+1 )
gad\Caption[gad\LineEnd] = ""
For A = gad\LineStart+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineEnd-gad\LineStart)]
gad\Caption[A+(gad\LineEnd-gad\LineStart)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineEnd-gad\LineStart)
gad\LineEnd = gad\LineStart
gad\SelEnd = gad\SelStart
Else
gad\Caption[gad\LineEnd] = Left( gad\Caption[gad\LineEnd], gad\SelEnd ) + Mid( gad\Caption[gad\LineStart], gad\SelStart+1)
gad\Caption[gad\LineStart] = ""
For A = gad\LineEnd+1 To gad\LineCount
gad\Caption[A] = gad\Caption[A+(gad\LineStart-gad\LineEnd)]
gad\Caption[A+(gad\LineStart-gad\LineEnd)] = ""
Next
gad\LineCount = gad\LineCount - (gad\LineStart-gad\LineEnd)
gad\LineStart = gad\LineEnd
gad\SelStart = gad\SelEnd
EndIf
gad\Caption[gad\LineStart] = Left(gad\Caption[gad\LineStart], gad\SelStart) + " " + Mid(gad\Caption[gad\LineStart], gad\SelStart+1)
gad\SelStart = gad\SelStart + 4
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If gad\MultiLine = False
LineLen = StringWidth( Left(gad\Caption[0],gad\SelStart) ) - gad\ScrollX
If LineLen > gad\W - 6
gad\ScrollX = (LineLen+gad\ScrollX) - (gad\W - 6)
ElseIf LineLen < 0
gad\ScrollX = (LineLen+gad\ScrollX)
EndIf
EndIf
;Up Arrow
ElseIf gad\Key = 28
If gad\LineStart > 0
gad\LineStart = gad\LineStart - 1
If gad\SelStart > Len(gad\Caption[gad\LineStart])
gad\SelStart = Len(gad\Caption[gad\LineStart])
gad\SelEnd = gad\SelStart
EndIf
gad\LineEnd = gad\LineStart
If (gad\LineStart * gad\IH) - gad\ScrollY < 0
gad\ScrollY = gad\ScrollY - gad\IH
EndIf
EndIf
;Down Arrow
ElseIf gad\Key = 29
If gad\LineStart < gad\LineCount - 1
gad\LineStart = gad\LineStart + 1
If gad\SelStart > Len(gad\Caption[gad\LineStart])
gad\SelStart = Len(gad\Caption[gad\LineStart])
gad\SelEnd = gad\SelStart
EndIf
gad\LineEnd = gad\LineStart
If (gad\LineStart * gad\IH) - gad\ScrollY > gad\H - 4
gad\ScrollY = gad\ScrollY + gad\IH;((gad\LineStart+1) * gad\IH) - (gad\H - 3)
EndIf
EndIf
;Right Arrow
ElseIf gad\Key = 30
If gad\SelStart < Len(gad\Caption[gad\LineStart])
gad\SelStart = gad\SelStart + 1
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If gad\MultiLine = False
LineLen = StringWidth( Left(gad\Caption[0],gad\SelStart) ) - gad\ScrollX
If LineLen > gad\W - 6
gad\ScrollX = (LineLen+gad\ScrollX) - (gad\W - 6)
ElseIf LineLen < 0
gad\ScrollX = (LineLen+gad\ScrollX)
EndIf
EndIf
Else
If gad\LineStart < gad\LineCount - 1
gad\LineStart = gad\LineStart + 1
gad\SelStart = 0
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If (gad\LineStart * gad\IH) - gad\ScrollY > gad\H - 4
gad\ScrollY = gad\ScrollY + gad\IH;((gad\LineStart+1) * gad\IH) - (gad\H - 3)
EndIf
EndIf
EndIf
;Left Arrow
ElseIf gad\Key = 31
If gad\SelStart > 0
gad\SelStart = gad\SelStart - 1
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If gad\MultiLine = False
LineLen = StringWidth( Left(gad\Caption[0],gad\SelStart) ) - gad\ScrollX
If LineLen > gad\W - 6
gad\ScrollX = (LineLen+gad\ScrollX) - (gad\W - 6)
ElseIf LineLen < 0
gad\ScrollX = (LineLen+gad\ScrollX)
EndIf
EndIf
Else
If gad\LineStart > 0
gad\LineStart = gad\LineStart - 1
gad\SelStart = Len(gad\Caption[gad\LineStart])
gad\SelEnd = gad\SelStart
gad\LineEnd = gad\LineStart
If (gad\LineStart * gad\IH) - gad\ScrollY < 0
gad\ScrollY = gad\ScrollY - gad\IH
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
Viewport 0, 0, app\W, app\H
Color 0, 0, 0
Rect gad\Owner\X+gad\Owner\FX+gad\X, gad\Owner\Y+gad\Owner\FY+gad\Y, gad\W, gad\H, 0
If TempIH gad\IH = TempIH
EndIf
EndIf
gad = Before gad
Wend
End Function
If you want any other things added in BlitzUI, I may have done it already. I have a list box (or maybe treeview) that returns EventData of entity selected, settable and gettable parameters for everything contained in a gadget (good for storing handles of entities and such), miscellaneous addons like setindex for combo boxes, CM_DELETE for combo boxes, and various other flags.
Also made a spinner gadget (external from blitzUI though, so a tiny bit harder to install), for which you can both press the buttons on the left and type in the text field. It's very simple, but you may want it.
Oh, and my movement pegs are free for use if you want them, and I also have an easily added object position console built in blitzUI so that objects can be moved and scaled and rotated with numbers rather than the mouse. It was hard for me to install, but that's just because I'm dumb and ended up with 2 different kinds of objects and 5 different modes, only 3 of which I need :D
Move pegs:
http://www.blitzbasic.com/codearcs/codearcs.php?code=1238I made a clean (although, it is a hack job) integration with blitzUI too, so they can be dragged about in a normal blitzUI window. That unreleased bit is not very customizable because I got lazy, but if you want it I'll pass it on.
Transformation console on request. (This post is huge as it is.)
PS:
Function NoUIActivity()
If noactiveGadgets() And app\overwin = Null
win.Window = First Window
If win\dragging = True Then Return False
Return True
EndIf
End Function
Sorry couldn't help myself :D
Handy, because likely you'll have a problem where objects are selected by accident when windows are dragged really fast. This helps fix that. (Should be self-explanatory)