Ooops
October 17, 2021, 11:52:57

Author Topic: [bb] textfield by b32 [ 1+ years ago ]  (Read 724 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] textfield by b32 [ 1+ years ago ]
« on: June 29, 2017, 00:28:39 »
Title : textfield
Author : b32
Posted : 1+ years ago

Description : This graphic control works a bit like notepad. You can use a string for filtering the input characters. You can copy/paste text, however then, any character is allowed. For the use of the clipbaord, you need the decls from jim brown.

Code :
Code: BlitzBasic
  1. ;keywords are defined at the bottom, it doesn't recognize strings "". Comments are lines that start with //
  2. ;-------------------------------------------------------------------------------------------------------
  3. ;                                                                                               Globals etc
  4. ;-------------------------------------------------------------------------------------------------------
  5.        
  6.         ;allowed characters
  7.         Global          abc$ = "<>{}1234567890-=QWERTYUIOP[]ASDFGHJKL;'XCVBNM,./* 789-456+1230.,/?!@#$%^&():" + Chr$(34)
  8.  
  9.         ;number of lines       
  10.         Global          numlines
  11.         Global          ActiveText.TTextField
  12.        
  13.         Global          Cursor_X, Cursor_Y
  14.         Global          curx, cury, curline.TLine
  15.        
  16.         Dim             Cursor_Hit(2)
  17.  
  18.         ;highlighted keywords (see ReadKeyWords)
  19.         Type KeyWord
  20.                 Field s$
  21.         End Type
  22.        
  23.         ;selection type
  24.         Type TSelection
  25.                 Field l.Tline
  26.                 Field c
  27.         End Type
  28.                
  29.         Dim tsel.TSelection(2)
  30.        
  31.         For i = 1 To 2
  32.                 tsel(i) = New TSelection
  33.         Next
  34.        
  35.         ;storage of lines
  36.         Type TStorage
  37.                 Field s$
  38.                 Field id
  39.                 Field t.TTextField
  40.         End Type
  41.  
  42.         ;line type             
  43.         Type TLine
  44.                 Field s$
  45.                 Field id
  46.         End Type
  47.        
  48.         ;textfield type
  49.         Type TTextField
  50.                 Field x
  51.                 Field y
  52.                 Field width
  53.                 Field height
  54.                 Field font
  55.                 Field CharWidth
  56.                 Field CharHeight
  57.                 Field ofx, ofy
  58.                 Field passwordmask$
  59.                 Field limitchars
  60.                 Field noenter
  61.                
  62.                 Field curx, cury
  63.                 Field curline.TLine
  64.  
  65.                 Field backgroundcolor
  66.                 Field bordercolor
  67.                 Field textcolor
  68.                 Field sel_backgroundcolor
  69.                 Field sel_textcolor
  70.                 Field cursorcolor
  71.                 Field commentcolor
  72.                 Field keywordcolor
  73.                                                
  74.                 Field idle
  75.         End Type
  76.        
  77.         ReadKeyWords()
  78.  
  79.  
  80.  
  81.  
  82. ;-------------------------------------------------------------------------------------------------------
  83. ;                                                                                               Test Program
  84. ;-------------------------------------------------------------------------------------------------------
  85.  
  86.         Graphics 800, 600, 0, 2
  87.         SetBuffer BackBuffer()
  88.  
  89.         ;create textfield      
  90.         t2.TTextField = CreateTextField(50, 320, 80, 15, 10, "*", 1)
  91.         t1.TTextField = CreateTextField(50, 50, 700, 240)
  92.                
  93.         ;main loop
  94.         Repeat
  95.                
  96.                 Cls
  97.                
  98.                 DrawTextFields()
  99.                
  100.                 ;F1/F2         
  101.                 If KeyHit(59) Then SaveTextFile("test.txt")
  102.                 If KeyHit(60) Then LoadTextFile("test.txt")
  103.                
  104.                 Flip
  105.                
  106.         Until KeyHit(1)
  107.        
  108.         End
  109.  
  110.  
  111.        
  112. ;-------------------------------------------------------------------------------------------------------
  113. ;                                                                                               DrawTextFields()
  114. ;-------------------------------------------------------------------------------------------------------
  115. Function DrawTextFields()
  116.  
  117.         Cursor_X = MouseX()
  118.         Cursor_Y = MouseY()
  119.         Cursor_Hit(1) = MouseHit(1)
  120.  
  121.         test = 0
  122.         For t.TTextField = Each TTextField
  123.                 DrawTextField(t)
  124.                 If RectsOverlap(Cursor_X, Cursor_Y, 1, 1, tx, ty, twidth, theight) And Cursor_Hit(1) Then
  125.                         SetActiveText t
  126.                         test = 1
  127.                 End If
  128.         Next
  129.        
  130.         If Cursor_Hit(1) And (test = 0) Then SetActiveText Null
  131.  
  132. End Function
  133.  
  134. ;-------------------------------------------------------------------------------------------------------
  135. ;                                                                                       CreateTextField()
  136. ;-------------------------------------------------------------------------------------------------------
  137. Function CreateTextField.TTextField(x, y, ww$, hh$, limitchars = 0, pwmask$ = "", noenter = 0)
  138.  
  139.         t.TTextField = New TTextField
  140.        
  141.         ;position
  142.         tx = x
  143.         ty = y
  144.         twidth = ww
  145.         theight = hh
  146.        
  147.         ;font
  148.         tfont = LoadFont("Blitz")
  149.         SetFont tfont
  150.        
  151.         ;font size
  152.         tCharWidth = StringWidth("X")
  153.         tCharHeight = StringHeight("X")
  154.        
  155.         ;scroll
  156.         tofx = 0
  157.         tofy = 0
  158.        
  159.         tlimitchars = limitchars
  160.         tpasswordmask$ = pwmask$
  161.         t
  162. oenter = noenter
  163.  
  164.         tackgroundcolor                = $225588
  165.         tordercolor                    = $555555
  166.         t       extcolor                                = $FFFFFF
  167.         tkeywordcolor                   = $AADDFF
  168.         tsel_backgroundcolor    = $DDAA77
  169.         tsel_textcolor                  = $000000
  170.         tcursorcolor                    = $DDAA77
  171.         tcommentcolor                   = $FFEE00
  172.                
  173.         tidle = CreateImage(twidth, theight)
  174.  
  175.         SetMarker(1, 0, 0)
  176.         SetMarker(2, 0, 0)
  177.  
  178.         SetActiveText t
  179.                
  180.         Return t
  181.        
  182. End Function
  183.  
  184. ;-------------------------------------------------------------------------------------------------------
  185. ;                                                                                       DrawTextField()
  186. ;-------------------------------------------------------------------------------------------------------
  187. Function DrawTextField(t.TTextField, update = 0)
  188.  
  189.         If (t <> ActiveText) And (Not update) Then
  190.                 DrawBlock tidle, tx, ty
  191.                 Return
  192.         End If
  193.        
  194.         limitchars = tlimitchars
  195.  
  196.         curline.TLine = tcurline
  197.         curx = tcurx
  198.         cury = tcury
  199.         If limitchars > 0 Then If curx > limitchars Then curx = limitchars
  200.         If t
  201. oenter Then If cury > 0 Then cury = 0
  202.  
  203.         ;max width/height in characters
  204.         maxchar = (twidth / tCharWidth)
  205.         maxlines = (theight / tCharHeight)
  206.  
  207.         ;scroll textfield
  208.         If cury - tofy >= maxlines Then tofy = cury - maxlines + 1
  209.         If cury - tofy < 0 Then tofy = cury
  210.         If curx - tofx < 0 Then tofx = curx
  211.         If curx - tofx >= maxchar Then tofx = curx - maxchar + 1
  212.        
  213.  
  214.         ;draw frame    
  215.         Color 0, 0, tackgroundcolor
  216.         Rect tx, ty, twidth, theight
  217.         Color 0, 0, tordercolor
  218.         Rect tx, ty, twidth, theight, 0
  219.        
  220.         Viewport tx, ty, twidth, theight
  221.  
  222.         ;determine bottom      
  223.         bottom = ty + theight
  224.                
  225.         ;get selection
  226.         If tsel(1)l <> Null Then
  227.                 sel1y = tsel(1)lid
  228.                 sel1x = tsel(1)c - tofx
  229.         Else
  230.                 sel1y = 0
  231.                 sel1x = 0
  232.         End If
  233.        
  234.         If tsel(2)l <> Null Then
  235.                 sel2y = tsel(2)lid
  236.                 sel2x = 0
  237.         Else
  238.                 sel2y = 0
  239.                 sel2x = 0
  240.         End If
  241.  
  242.         sel2x = tsel(2)c - tofx
  243.  
  244.         If sel1x < 0 Then sel1x = 0
  245.         If sel1x > maxchar Then sel1x = maxchar
  246.         If sel2x < 0 Then sel2x = 0
  247.         If sel2x > maxchar Then sel2x = maxchar
  248.  
  249.         ;determine order               
  250.         If sel2y < sel1y Then
  251.                 tempx = sel1x
  252.                 tempy = sel1y
  253.                 sel1x = sel2x
  254.                 sel1y = sel2y
  255.                 sel2x = tempx
  256.                 sel2y = tempy
  257.         End If
  258.        
  259.         If sel1y = sel2y Then
  260.                 If sel2x < sel1x Then
  261.                         tempx = sel1x
  262.                         tempy = sel1y
  263.                         sel1x = sel2x
  264.                         sel1y = sel2y
  265.                         sel2x = tempx
  266.                         sel2y = tempy
  267.                 End If
  268.         End If
  269.  
  270.         ;delete lines if needed
  271.         For l.TLine = Each TLine
  272.                 If t
  273. oenter Then If l <> First TLine Then Delete l
  274.         Next
  275.  
  276.         ;draw text area
  277.         SetFont tfont
  278.         iy = ty - tofy * tCharHeight
  279.         init = 0
  280.         For l.TLine = Each TLine
  281.                 If limitchars > 0 Then If Len(ls$ > limitchars) Then ls$ = Left$(ls$, limitchars)
  282.                 If lid = tofy Then init = 1
  283.                
  284.                 linetext$ = ls$
  285.                 If tpasswordmask$ <> "" Then linetext$ = String$(tpasswordmask$, Len(ls$))
  286.                
  287.                 If init Then
  288.                
  289.                         ;draw text
  290.                         If (lid > sel1y) And (lid < sel2y) Then
  291.  
  292.                                 SelText t, tx, iy, Mid$(linetext$, tofx + 1, maxchar)
  293.  
  294.                         ElseIf (lid = sel1y) And (lid < sel2y) Then
  295.  
  296.                                 d$ = Mid$(linetext$, tofx + 1, maxchar)
  297.                                                                
  298.                                 d1$ = Left$(d$, sel1x)
  299.                                 d2$ = Mid$(d$, sel1x + 1)
  300.                                                        
  301.                                 ;BoxText t, tx, iy, d1$
  302.                                 BoxText2 t, tx, iy, linetext$, tofx + 1, sel1x
  303.                                 SelText t, tx + Len(d1$) * tCharWidth, iy, d2$
  304.  
  305.                         ElseIf (lid > sel1y) And (lid = sel2y) Then
  306.  
  307.                                 d$ = Mid$(linetext$, tofx + 1, maxchar)
  308.                                                                
  309.                                 d1$ = Left$(d$, sel2x)
  310.                                 d2$ = Mid$(d$, sel2x + 1)
  311.                                                        
  312.                                 ;BoxText t, tx + Len(d1$) * tCharWidth, iy, d2$
  313.                                 BoxText2 t, tx + Len(d1$) * tCharWidth, iy, linetext$, tofx + 1 + sel2x, maxchar - sel2x
  314.                                 SelText t, tx, iy, d1$
  315.  
  316.                         ElseIf (lid = sel1y) And (lid = sel2y) Then
  317.  
  318.                                 d$ = Mid$(linetext$, tofx + 1, maxchar)
  319.                                 d2$ = Mid$(d$, sel1x + 1, sel2x - sel1x)
  320.                                
  321.                                 BoxText2 t, tx, iy, linetext$, tofx + 1, maxchar
  322.                                 ;BoxText t, tx, iy, d$
  323.                                 SelText t, tx + (sel1x * tCharWidth), iy, d2$
  324.  
  325.                         Else
  326.  
  327.                                 ;BoxText t, tx, iy, Mid$(linetext$, tofx + 1, maxchar)
  328.                                 BoxText2 t, tx, iy, linetext$, tofx + 1, maxchar
  329.  
  330.                         End If
  331.                                                
  332.                 End If
  333.  
  334.                 iy = iy + tCharHeight
  335.                 If iy + tCharHeight > bottom Then Exit
  336.  
  337.         Next
  338.  
  339.         ;get cursor line
  340.         curline.TLine = GetLine(cury)
  341.         maxdd = Len(curlines$)
  342.        
  343.         ;draw cursor   
  344.         cgx = tx + (tCharWidth * (curx - tofx))
  345.         cgy = ty + (tCharHeight * (cury - tofy))
  346.         Color 0, 0, tsel_backgroundcolor
  347.         If Not update Then Line cgx, cgy, cgx, cgy + tCharHeight
  348. ;       Color 255, 255, 255
  349. ;       Text cgx, cgy, Mid$(curlines$, curx + 1, 1)
  350.  
  351.         ;shift hit
  352.         If KeyHit(42) Then
  353.                 SetMarker(1, cury, curx)
  354.                 SetMarker(2, cury, curx)
  355.         End If
  356.        
  357. ;       ;current line size
  358. ;       maxdd = Len(curlines$)
  359.                
  360.         ;ctrl
  361.         ctrl = KeyDown(29)
  362.         If ctrl Then
  363.        
  364.                 ;CTRL+A
  365.                 If KeyHit(30) Then
  366.                         SetMarker(1, 0, 0)
  367.                         l.TLine = GetLine(numlines - 1)
  368.                         SetMarker(2, numlines - 1, Len(ls$))
  369.                         FlushKeys()
  370.                 End If
  371.                 ;CTRL+D
  372.                 If KeyHit(32) Then
  373.                         SetMarker(1, 0, 0)
  374.                         SetMarker(2, 0, 0)
  375.                         FlushKeys()
  376.                 End If
  377.                 ;CTRL+X
  378.                 If KeyHit(45) Then
  379.                         WriteClipBoardText(GetSelection$())
  380.                         DeleteSel()
  381.                         ResetSel()
  382.                         FlushKeys()
  383.                 End If
  384.                 ;CTRL+C
  385.                 If KeyHit(46) Then
  386.                         WriteClipBoardText(GetSelection$())
  387.                         ResetSel()
  388.                         FlushKeys()
  389.                 End If
  390.                 ;CTRL+V
  391.                 If MyKeyHit(47) Then
  392.                         If CheckSelected() Then DeleteSel(): ResetSel(1)
  393.                         rok$ = ReadClipBoardText$()
  394.                         InsertLines(rok$, curx, cury, tlimitchars)
  395.                         curline = GetLine(cury)
  396.                         maxdd = Len(curlines$)
  397.                         ResetSel()
  398.                 End If         
  399.  
  400.                 ;home
  401.                 If KeyHit(199) Then
  402.                         curx = 0
  403.                         cury = 0
  404.                         curline = GetLine(cury)
  405.                         maxdd = Len(curlines$)
  406.                         ResetSel
  407.                 End If
  408.                
  409.                 ;end
  410.                 If KeyHit(207) Then
  411.                         cury = numlines - 1
  412.                         curline = GetLine(cury)
  413.                         maxdd = Len(curlines$)
  414.                         curx = maxdd
  415.                         ResetSel
  416.                 End If
  417.  
  418.         Else           
  419.  
  420.                 ;KEYBOARD INPUT
  421.                 ok = GetKey()
  422.                 ;INSERT
  423.                 If MyKeyHit(210) Then ok = 32
  424.                 ;A-Z keys      
  425.                 If ok <> 0 Then
  426.                         If curx < 0 Then curx = 0
  427.                         If cury < 0 Then cury = 0
  428.                         ;check against abc$
  429.                         If Instr(abc$, Upper$(Chr$(ok))) > 0 Then
  430.                                 DeleteSel()
  431.                                 ;add character                 
  432.                                 curlines$ = Left$(curlines$, curx) + Chr$(ok) + Mid$(curlines$, curx + 1)
  433.                                 maxdd = Len(curlines$)
  434.                                 curx = curx + 1
  435.                                 ResetSel(1)
  436.                         End If
  437.                 End If
  438.                
  439.                 ;tab
  440.                 If MyKeyHit(15) Then
  441.                         If CheckSelected() Then
  442.                                 TabSelected(0)
  443.                         Else
  444.                                 ;add tab
  445.                                 curlines$ = Left$(curlines$, curx) + "    " + Mid$(curlines$, curx + 1)
  446.                                 maxdd = Len(curlines$)
  447.                                 curx = curx + 4
  448.                                 ResetSel(1)
  449.                         End If
  450.                 End If         
  451.                
  452.                 ;enter
  453.                 If MyKeyHit(28) Then
  454.                         DeleteSel()
  455.                         nl$ = Mid$(curlines$, curx + 1)
  456.                         curlines$ = Left$(curlines$, curx)
  457.                         l.TLine = AddLine(nl$)
  458.                         Insert l After curline
  459.                         cury = cury + 1
  460.                         curx = 0
  461.                         curline = l
  462.                         maxdd = Len(curlines$)
  463.                         UpdateLines()
  464.                         ResetSel(1)
  465.                 End If
  466.                
  467.                 ;backspace
  468.                 If MyKeyHit(14) Then
  469.                         If CheckSelected() Then
  470.                                 DeleteSel()
  471.                                 ResetSel(1)
  472.                         Else
  473.                                 If curx > 0 Then
  474.                                         curlines$ = Left$(curlines$, curx - 1) + Mid$(curlines$, curx + 1)
  475.                                         curx = curx - 1
  476.                                         maxdd = Len(curlines$)
  477.                                         ResetSel(1)
  478.                                 Else
  479.                                         If cury > 0 Then
  480.                                                 l.TLine = GetLine(cury - 1)
  481.                                                 curx = Len(ls$)
  482.                                                 ls$ = ls$ + curlines$
  483.                                                 Delete curline
  484.                                                 numlines = numlines - 1
  485.                                                 UpdateLines()
  486.                                                 cury = cury - 1
  487.                                                 curline = l
  488.                                                 maxdd = Len(ls$)
  489.                                                 ResetSel(1)
  490.                                         End If
  491.                                 End If
  492.                         End If
  493.                 End If
  494.  
  495.                 ;home/end
  496.                 If KeyHit(199) Then curx = 0: ResetSel
  497.                 If KeyHit(207) Then curx = maxdd: ResetSel
  498.        
  499.         End If
  500.  
  501.         ;pgup  
  502.         If MyKeyHit(201) Then
  503.                 ncury = cury - maxlines
  504.                 If ncury < 0 Then ncury = 0
  505.                 cury = ncury
  506.                 curline = GetLine(cury)
  507.                 maxdd = Len(curlines$)
  508.                 ResetSel
  509.         End If
  510.        
  511.         ;pgdn
  512.         If MyKeyHit(209) Then
  513.                 ncury = cury + maxlines
  514.                 If ncury >= numlines Then ncury = numlines - 1
  515.                 cury = ncury
  516.                 curline = GetLine(cury)
  517.                 maxdd = Len(curlines$)
  518.                 ResetSel
  519.         End If
  520.        
  521.         ;left  
  522.         If MyKeyHit(203) Then
  523.                 If ctrl Then
  524.                         Repeat
  525.                                 curx = curx - 1
  526.                                 If curx < 1 Then Exit
  527.                                 If Mid$(curlines$, curx, 1) = " " Then Exit
  528.                         Forever
  529.                 Else
  530.                         curx = curx - 1
  531.                 End If
  532.                 If curx < 0 Then
  533.                         If cury > 0 Then
  534.                                 cury = cury - 1
  535.                                 curline.TLine = GetLine(cury)  
  536.                                 maxdd = Len(curlines$)
  537.                                 curx = maxdd
  538.                         Else
  539.                                 curx = 0
  540.                         End If
  541.                 End If
  542.                 ResetSel
  543.         End If
  544.  
  545.         ;right 
  546.         If MyKeyHit(205) Then
  547.                 If ctrl Then
  548.                         Repeat
  549.                                 curx = curx + 1
  550.                                 If curx >= maxdd Then Exit
  551.                                 If Mid$(curlines$, curx, 1) = " " Then Exit
  552.                         Forever
  553.                 Else
  554.                         curx = curx + 1
  555.                 End If
  556.                 If curx > maxdd Then
  557.                         If cury < numlines - 1 Then
  558.                                 curx = 0
  559.                                 cury = cury + 1
  560.                                 curline = GetLine(cury)
  561.                                 maxdd = Len(curlines$)
  562.                         End If
  563.                 End If
  564.                 ResetSel
  565.         End If
  566.  
  567.         ;up    
  568.         If MyKeyHit(200) Then
  569.                 cury = cury - 1
  570.                 If cury < 0 Then cury = 0
  571.                 curline.TLine = GetLine(cury)
  572.                 maxdd = Len(curlines$)
  573.                 ResetSel
  574.         End If
  575.        
  576.         ;down
  577.         If MyKeyHit(208) Then
  578.                 cury = cury + 1
  579.                 If cury >= numlines Then cury = numlines - 1
  580.                 curline.TLine = GetLine(cury)
  581.                 maxdd = Len(curlines$)
  582.                 ResetSel
  583.         End If
  584.        
  585.         If curx > maxdd Then curx = maxdd
  586.        
  587.         ;delete knop
  588.         If KeyHit(211) Then
  589.                 If CheckSelected() Then
  590.                         DeleteSel(): ResetSel(1)
  591.                 Else
  592.                         If curx >= 0 Then
  593.                                 curlines$ = Left$(curlines$, curx) + Mid$(curlines$, curx + 2)
  594.                                 maxdd = Len(curlines$)
  595.                                 ResetSel(1)
  596.                         End If
  597.                 End If
  598.         End If
  599.  
  600.         tcurline = curline
  601.         tcurx = curx
  602.         tcury = cury
  603.        
  604.         Viewport 0, 0, GraphicsWidth(), GraphicsHeight()
  605.                                                
  606. End Function
  607.  
  608. ;-------------------------------------------------------------------------------------------------------
  609. ;                                                                                     AddLine()
  610. ;-------------------------------------------------------------------------------------------------------
  611. Function AddLine.TLine(s$)
  612.  
  613.         l.TLine = New TLine
  614.         ls$ = s$
  615.         UpdateLines()
  616.        
  617.         Return l
  618.        
  619. End Function
  620.  
  621. ;-------------------------------------------------------------------------------------------------------
  622. ;                                                                              UpdateLines()
  623. ;-------------------------------------------------------------------------------------------------------
  624. Function UpdateLines()
  625.  
  626.         id = 0
  627.         For l.TLine = Each TLine
  628.                 lid = id
  629.                 id = id + 1
  630.         Next
  631.        
  632.         numlines = id
  633. ;       curline.TLine = GetLine(cury)
  634.        
  635. End Function
  636.  
  637. ;-------------------------------------------------------------------------------------------------------
  638. ;                                                                                       SetMarker()
  639. ;-------------------------------------------------------------------------------------------------------
  640. Function SetMarker(id, liney, char)
  641.  
  642.         l.TLine = Null
  643.         For il.TLine = Each TLine
  644.                 If ilid = liney Then l = il: Exit
  645.         Next
  646.         If l = Null Then Return
  647.  
  648.         tsel(id)l = l
  649.         tsel(id)c = char
  650.        
  651.         If tsel(1)l = Null Then Return
  652.         If tsel(2)l = Null Then Return
  653.                
  654. End Function
  655.  
  656. ;-------------------------------------------------------------------------------------------------------
  657. ;                                                                                          SelText()
  658. ;-------------------------------------------------------------------------------------------------------
  659. ;draw selected text
  660. Function SelText(t.TTextField, x, y, s$)
  661.        
  662.         ww = StringWidth(s$)
  663.         hh = StringHeight(s$)
  664.         Color 0, 0, tsel_backgroundcolor
  665.         Rect x, y, ww, hh
  666.         Color 0, 0, tsel_textcolor
  667.         Text x, y, Replace$(s$, Chr$(13), "")
  668.                
  669. End Function
  670.  
  671. ;-------------------------------------------------------------------------------------------------------
  672. ;                                                                                          BoxText()
  673. ;-------------------------------------------------------------------------------------------------------
  674. ;draw non-selected text
  675. Function BoxText(t.TTextField, x, y, s$)
  676.  
  677.         q$ = Trim$(s$)
  678.         If Left$(q$, 2) = "//" Then
  679.                 Color 0, 0, tcommentcolor
  680.                 test = 1
  681.         Else
  682.                 Color 0, 0, t   extcolor
  683.                 test = 0
  684.         End If
  685.         Text x, y, s$
  686.        
  687.         If test Then Return
  688.  
  689.         Color 0, 0, tkeywordcolor
  690.         l$ = " " + Lower$(s$)   + " "
  691.         For k.KeyWord = Each KeyWord
  692.                
  693.                 If Instr(l$, Lower$(ks$)) Then
  694.  
  695.                         test = 0
  696.                         Repeat
  697.                        
  698.                                 test = Instr(l$, Lower$(ks$), test + 1)
  699.                                 If test < 1 Then Exit
  700.                                                                
  701.                                 Text x + (test - 1) * tCharWidth, y, Mid$(s$, test, Len(ks$) - 2)
  702.                                
  703.                         Forever
  704.                        
  705.                 End If
  706.                
  707.         Next
  708.                
  709. End Function
  710.  
  711.  
  712. ;-------------------------------------------------------------------------------------------------------
  713. ;                                                                                          BoxText2()
  714. ;-------------------------------------------------------------------------------------------------------
  715. ;draw non-selected text
  716. Function BoxText2(t.TTextField, x, y, s$, st, ll)
  717.  
  718.         q$ = Trim$(s$)
  719.         If Left$(q$, 2) = "//" Then
  720.                 Color 0, 0, tcommentcolor
  721.                 test = 1
  722.         Else
  723.                 Color 0, 0, t   extcolor
  724.                 test = 0
  725.         End If
  726.         Text x, y, Mid$(s$, st, ll)
  727.        
  728.         If test Then Return
  729.  
  730.         Color 0, 0, tkeywordcolor
  731.         l$ = " " + Lower$(s$)   + " "
  732.         For k.KeyWord = Each KeyWord
  733.                
  734.                 If Instr(l$, Lower$(ks$)) Then
  735.  
  736.                         test = 0
  737.                         Repeat
  738.                        
  739.                                 test = Instr(l$, Lower$(ks$), test + 1)
  740.                                 If test < 1 Then Exit
  741.                                
  742.                                 x1 = x + (test - st) * tCharWidth
  743.                                 ll = (Len(ks$) - 2) * tCharWidth
  744.                                
  745.                                 If (x1 + ll >= tx) And (x1 <= tx + twidth) Then
  746.                                         Text x1, y, Mid$(s$, test, Len(ks$) - 2)
  747.                                 End If
  748.                                
  749.                         Forever
  750.                        
  751.                 End If
  752.                
  753.         Next
  754.                
  755. End Function
  756.  
  757.  
  758. ;-------------------------------------------------------------------------------------------------------
  759. ;                                                                                               GetLine()
  760. ;-------------------------------------------------------------------------------------------------------
  761. ;gets a specific line, else creates it
  762. Function GetLine.TLine(i)
  763.  
  764.         If i < 0 Then i = 0
  765.         If i > 65536 Then i = 65536
  766.  
  767.         il.TLine = Null
  768.         For l.TLine = Each TLine
  769.                 If lid = i Then il = l: Exit
  770.         Next
  771.        
  772.         If il = Null Then
  773.                 Repeat
  774.                         il.TLine = AddLine("")
  775.                         If ilid = i Then Exit
  776.                 Until ilid = 65536
  777.         End If
  778.                
  779.         Return il
  780.        
  781. End Function
  782.  
  783. ;-------------------------------------------------------------------------------------------------------
  784. ;                                                                                               ResetSel()
  785. ;-------------------------------------------------------------------------------------------------------
  786. Function ResetSel(rs = 0)
  787.  
  788.         ;shift
  789.         If KeyDown(42) And (Not rs) Then
  790.                 SetMarker(2, cury, curx)               
  791.         Else
  792.                 If rs Then
  793.                         SetMarker(1, 0, 0)
  794.                         SetMarker(2, 0, 0)
  795.                 Else
  796.                         SetMarker(1, cury, curx)               
  797.                         SetMarker(2, cury, curx)               
  798.                 End If
  799.         End If
  800.        
  801.         FlushKeys()
  802.        
  803. End Function
  804.  
  805. ;-------------------------------------------------------------------------------------------------------
  806. ;                                                                                          DeleteSel()
  807. ;-------------------------------------------------------------------------------------------------------
  808. Function DeleteSel()
  809.  
  810.         ;retreive selection
  811.         If tsel(1)l <> Null Then sel1y = tsel(1)lid Else Return
  812.         If tsel(2)l <> Null Then sel2y = tsel(2)lid Else Return
  813.        
  814.         If (tsel(1)l = tsel(2)l) And (tsel(1)c = tsel(2)c) Then Return
  815.        
  816.         sel1x = tsel(1)c
  817.         sel2x = tsel(2)c
  818.  
  819.         If sel1x < 0 Then sel1x = 0
  820.         If sel2x < 0 Then sel2x = 0
  821.  
  822.         ;determine order
  823.                
  824.         id1 = 1
  825.         id2 = 2
  826.        
  827.         If sel2y < sel1y Then
  828.                 id1 = 2
  829.                 id2 = 1
  830.                 tempx = sel1x
  831.                 tempy = sel1y
  832.                 sel1x = sel2x
  833.                 sel1y = sel2y
  834.                 sel2x = tempx
  835.                 sel2y = tempy
  836.         End If
  837.        
  838.         If sel1y = sel2y Then
  839.                 If sel2x < sel1x Then
  840.                         id1 = 2
  841.                         id2 = 1
  842.                         tempx = sel1x
  843.                         tempy = sel1y
  844.                         sel1x = sel2x
  845.                         sel1y = sel2y
  846.                         sel2x = tempx
  847.                         sel2y = tempy
  848.                 End If
  849.         End If
  850.  
  851.         ;reset cursor  
  852.         curx = tsel(id1)c
  853.         cury = tsel(id1)lid
  854.  
  855.         ;remove lines in between       
  856.         For l.TLine = Each TLine
  857.                 If (lid > sel1y) And (lid < sel2y) Then Delete l
  858.         Next
  859.  
  860.         ;same line?
  861.         If tsel(id1)l = tsel(id2)l Then
  862.                 If (sel1x = 0) And (sel2x = Len(tsel(id2)ls$)) Then
  863.                         Delete tsel(id1)l
  864.                 Else
  865.                         tsel(id1)ls$ = Left$(tsel(id1)ls$, sel1x) + Mid$(tsel(id1)ls$, sel2x + 1)
  866.                 End If
  867.         Else
  868.                 test = 1
  869.  
  870.                 ;cut first line        
  871.                 If sel1x = 0 Then
  872.                         Delete tsel(id1)l
  873.                         test = 0
  874.                 Else
  875.                         tsel(id1)ls$ = Left$(tsel(id1)ls$, sel1x)                      
  876.                 End If
  877.  
  878.                 ;cut last line         
  879.                 If sel2x = Len(tsel(id2)ls$) Then
  880.                         Delete tsel(id2)l
  881.                         test = 0
  882.                 Else
  883.                         tsel(id2)ls$ = Mid$(tsel(id2)ls$, sel2x + 1)
  884.                 End If
  885.  
  886.                 ;paste together if needed              
  887.                 If test Then
  888.                         tsel(id1)ls$ = tsel(id1)ls$ + tsel(id2)ls$
  889.                         Delete tsel(id2)l
  890.                 End If
  891.                
  892.         End If
  893.  
  894.         ;update indexes and reset selection            
  895.         UpdateLines()  
  896.         ResetSel(1)
  897.        
  898.         curline = GetLine(cury)
  899.                
  900. End Function
  901.  
  902. ;-------------------------------------------------------------------------------------------------------
  903. ;                                                                                               GetSelection()
  904. ;-------------------------------------------------------------------------------------------------------
  905. Function GetSelection$()
  906.  
  907.         ;retreive selection
  908.         If tsel(1)l <> Null Then sel1y = tsel(1)lid Else Return
  909.         If tsel(2)l <> Null Then sel2y = tsel(2)lid Else Return
  910.        
  911.         sel1x = tsel(1)c
  912.         sel2x = tsel(2)c
  913.        
  914.         id1 = 1
  915.         id2 = 2
  916.        
  917.         ;determine order
  918.        
  919.         If sel2y < sel1y Then
  920.                 id1 = 2
  921.                 id2 = 1
  922.         End If
  923.        
  924.         If sel1y = sel2y Then
  925.                 If sel2x < sel1x Then
  926.                         id1 = 2
  927.                         id2 = 1
  928.                 End If
  929.         End If
  930.  
  931.         ;same line ?           
  932.         If tsel(id1)l = tsel(id2)l Then
  933.                 If tsel(id1)c = tsel(id2)c Then
  934.                         Return
  935.                 Else
  936.                         ss = tsel(id1)c + 1
  937.                         ll = tsel(id2)c - ss + 1
  938.                         Return Mid$(tsel(id1)ls$, ss, ll)
  939.                 End If
  940.         End If
  941.  
  942.         ;get selection
  943.         s$ = ""
  944.         init = 0
  945.         For l.TLine = Each TLine
  946.                 If l = tsel(id2)l Then
  947.                         s$ = s$ + Left$(tsel(id2)ls$, tsel(id2)c)
  948.                         init = 0
  949.                 End If
  950.                 If init Then
  951.                         s$ = s$ + ls$ + Chr$(13)
  952.                 End If
  953.                 If l = tsel(id1)l Then
  954.                         s$ = s$ + Mid$(tsel(id1)ls$, tsel(id1)c + 1) + Chr(13)
  955.                         init = 1
  956.                 End If
  957.         Next
  958.  
  959.         ;return selection      
  960.         Return s$
  961.  
  962. End Function
  963.  
  964.  
  965. ;-----------------------------------------------------------------------------------------------------
  966. ;                                                                                       WriteClipBoardText()
  967. ;-----------------------------------------------------------------------------------------------------
  968. Function WriteClipBoardText(txt$)
  969.  
  970.         If txt$="" Then Return
  971.        
  972.         txt$ = Replace$(txt$, Chr$(13), Chr$(13) + Chr$(10))
  973.                
  974.         Local cb_TEXT=1
  975.         If OpenClipboard(0)
  976.                 EmptyClipboard
  977.                 SetClipboardData cb_TEXT,txt$
  978.                 CloseClipboard
  979.         EndIf
  980.        
  981.         FreeBank txtbuffer
  982.        
  983. End Function
  984.  
  985. ;-----------------------------------------------------------------------------------------------------
  986. ;                                                                                         ReadClipBoardText()
  987. ;-----------------------------------------------------------------------------------------------------
  988. Function ReadClipBoardText$()
  989.  
  990.         Local cb_TEXT=1
  991.         Local txt$=""
  992.         If OpenClipboard(0)
  993.                 If ExamineClipboard(cb_TEXT)
  994.                         txt$=GetClipboardData$(cb_TEXT)
  995.                 EndIf
  996.                 CloseClipboard
  997.         EndIf
  998.         txt$ = Replace$(txt$, Chr$(13) + Chr$(10), Chr$(13))
  999.         txt$ = Replace$(txt$, Chr$(9), "    ")
  1000.         Return txt$
  1001.        
  1002. End Function
  1003.  
  1004. ;-----------------------------------------------------------------------------------------------------
  1005. ;                                                                                               InsertLine()
  1006. ;-----------------------------------------------------------------------------------------------------
  1007. Function InsertLine(r$, x, y)
  1008.  
  1009.         If Right$(r$, 1) = Chr$(13) Then add = 1: r$ = Left$(r$, Len(r$) - 1)
  1010.  
  1011.         If y < 0 Then y = 0
  1012.         If x < 0 Then x = 0
  1013.         If y > numlines Then y = numlines
  1014.        
  1015.         l.TLine = GetLine(y)
  1016.  
  1017.         If add Then    
  1018.                 If x > 0 Then
  1019.                         r2$ = Mid$(ls$, x + 1)
  1020.                         ls$ = Left$(ls$, x) + r$
  1021.                         l2.TLine = AddLine(r2$)
  1022.                         Insert l2 After l
  1023.                         curx = 0
  1024.                         cury = cury + 1
  1025.                 Else           
  1026.                         l2.TLine = AddLine(r$)
  1027.                         Insert l2 Before l
  1028.                         curx = 0
  1029.                         cury = cury + 1
  1030.                 End If
  1031.         Else
  1032.                 ls$ = Left$(ls$, x) + r$ + Mid$(ls$, x + 1)
  1033.                 curx = curx + Len(r$)
  1034.         End If
  1035.        
  1036.         UpdateLines()
  1037.                        
  1038. End Function           
  1039.  
  1040. ;-----------------------------------------------------------------------------------------------------
  1041. ;                                                                                               InsertLines()
  1042. ;-----------------------------------------------------------------------------------------------------
  1043. Function InsertLines(r$, x, y, limitchars = 0)
  1044.  
  1045.         If Instr(r$, Chr$(13)) > 0 Then
  1046.                
  1047.                 Repeat
  1048.                
  1049.                         cc = Instr(r$, Chr$(13))
  1050.                         If cc = 0 Then Exit
  1051.                        
  1052.                         r1$ = Left$(r$, cc)
  1053.                         r2$ = Mid$(r$, cc + 1)
  1054.                         InsertLine(r1$, x, y)
  1055.                         init = 0
  1056.                         x = 0
  1057.                         y = y + 1
  1058.                         r$ = r2$
  1059.                        
  1060.                 Forever
  1061.        
  1062.         End If
  1063.        
  1064.         InsertLine(r$, x, y)
  1065.        
  1066.         If limitchars > 0 Then
  1067.                 For l.TLine = Each TLine
  1068.                         If Len(ls$) > limitchars Then ls$ = Left$(ls$, limitchars)
  1069.                 Next
  1070.         End If
  1071.        
  1072. End Function
  1073.  
  1074. ;-----------------------------------------------------------------------------------------------------
  1075. ;                                                                                       UpdateText()
  1076. ;-----------------------------------------------------------------------------------------------------
  1077. ;grab screenshot to 'idle' image
  1078. Function UpdateText(t.TTextField)
  1079.  
  1080.         DrawTextField t, 1
  1081.         ;store idle
  1082.         CopyRect tx, ty, twidth, theight, 0, 0, BackBuffer(), ImageBuffer(tidle)
  1083.  
  1084. End Function
  1085.  
  1086. ;-----------------------------------------------------------------------------------------------------
  1087. ;                                                                                       DeleteTextField()
  1088. ;-----------------------------------------------------------------------------------------------------
  1089. Function DeleteTextField(t.TTextField)
  1090.  
  1091.         ;free image
  1092.         FreeImage tidle
  1093.        
  1094.         ;delete storage
  1095.         For st.TStorage = Each TStorage
  1096.                 If st    = t Then Delete st
  1097.         Next
  1098.  
  1099.         ;delete temp lines
  1100.         If t = ActiveText Then Delete Each TLine
  1101.  
  1102.         ;free font     
  1103.         FreeFont tfont
  1104.        
  1105.         ;delete type
  1106.         Delete t
  1107.        
  1108. End Function
  1109.        
  1110.  
  1111. ;-----------------------------------------------------------------------------------------------------
  1112. ;                                                                                  SetActiveText()
  1113. ;-----------------------------------------------------------------------------------------------------
  1114. Function SetActiveText(t.TTextField)
  1115.  
  1116.         ;if another is selected
  1117.         If ActiveText <> Null Then
  1118.                 ;delete storage
  1119.                 For st.TStorage = Each TStorage
  1120.                         If st    = ActiveText Then Delete st
  1121.                 Next
  1122.                 ;store temp lines
  1123.                 For l.TLine = Each TLine
  1124.                         st.TStorage = New TStorage
  1125.                         sts$ = ls$
  1126.                         stid = lid
  1127.                         st       = ActiveText
  1128.                 Next
  1129.                 ;store screenshot
  1130.                 UpdateText(ActiveText)
  1131.         End If
  1132.                
  1133.         ;delete temp lines
  1134.         Delete Each TLine
  1135.  
  1136.         ;select another text
  1137.         ActiveText = t
  1138.         If ActiveText = Null Then Return
  1139.        
  1140.         ;get lines from storage
  1141.         For st.TStorage = Each TStorage
  1142.                 If st    = t Then
  1143.                         l.TLine = New TLine
  1144.                         ls$ = sts$
  1145.                         lid = stid
  1146.                 End If
  1147.         Next
  1148.         UpdateLines()
  1149.  
  1150.         ;reset cursor  
  1151.         SetMarker 1, 0, 0
  1152.         SetMarker 2, 0, 0
  1153.                
  1154. End Function
  1155.  
  1156. ;-----------------------------------------------------------------------------------------------------
  1157. ;                                                                                               SaveTextFile()
  1158. ;-----------------------------------------------------------------------------------------------------
  1159. Function SaveTextFile(f$)
  1160.  
  1161.         ff = WriteFile(f$)
  1162.         For l.TLine = Each TLine
  1163.                 WriteLine ff, ls$
  1164.         Next
  1165.         CloseFile ff
  1166.        
  1167. End Function
  1168.  
  1169. ;-----------------------------------------------------------------------------------------------------
  1170. ;                                                                                               LoadTextFile()
  1171. ;-----------------------------------------------------------------------------------------------------
  1172. Function LoadTextFile(f$)
  1173.  
  1174.         If FileType(f$) <> 1 Then Return
  1175.  
  1176.         Delete Each TLine
  1177.         ff = ReadFile(f$)
  1178.         While Not(Eof(ff))
  1179.                 AddLine(ReadLine(ff))
  1180.         Wend
  1181.         CloseFile ff
  1182.        
  1183.         UpdateLines()
  1184.  
  1185.         ;reset cursor  
  1186.         SetMarker 1, 0, 0
  1187.         SetMarker 2, 0, 0
  1188.        
  1189. End Function
  1190.  
  1191. ;-----------------------------------------------------------------------------------------------------
  1192. ;                                                                                                 MyKeyHit()
  1193. ;-----------------------------------------------------------------------------------------------------
  1194. Global toldkey, timestart
  1195. Function MyKeyhit(key)
  1196.  
  1197.         If KeyHit(key) Then
  1198.                 timestart = MilliSecs()
  1199.                 Return 1
  1200.         End If
  1201.        
  1202.         If KeyDown(key) Then
  1203.                 Return (MilliSecs() - timestart) > 500
  1204.         End If
  1205.        
  1206. End Function
  1207.  
  1208. ;-----------------------------------------------------------------------------------------------------
  1209. ;                                                                                               CheckSelected()
  1210. ;-----------------------------------------------------------------------------------------------------
  1211. Function CheckSelected()
  1212.  
  1213.         Return (tsel(1)l <> tsel(2)l) Or (tsel(1)c <> tsel(2)c)
  1214.        
  1215. End Function
  1216.  
  1217.  
  1218. Function TabSelected(tab)
  1219.  
  1220.         ;retreive selection
  1221.         If tsel(1)l <> Null Then sel1y = tsel(1)lid Else Return
  1222.         If tsel(2)l <> Null Then sel2y = tsel(2)lid Else Return
  1223.        
  1224.         sel1x = tsel(1)c
  1225.         sel2x = tsel(2)c
  1226.        
  1227.         ;determine order       
  1228.         If sel2y < sel1y Then
  1229.                 sel1y = tsel(2)lid
  1230.                 sel2y = tsel(1)lid
  1231.         End If
  1232.  
  1233.         Select tab
  1234.        
  1235.         Case 0
  1236.                 ;add tabs
  1237.                 For l.TLine = Each TLine
  1238.                         If (lid >= sel1y) And (lid <= sel2y) Then ls$ = "    " + ls$
  1239.                 Next
  1240.                
  1241.         Case 1
  1242.                 ;remove tabs
  1243.                 For l.TLine = Each TLine
  1244.                         If (lid >= sel1y) And (lid <= sel2y) Then
  1245.                                 If Left$(ls$, 4) = "    " Then ls$ = Mid$(ls$, 5)
  1246.                         End If
  1247.                 Next
  1248.                
  1249.         End Select
  1250.        
  1251. End Function
  1252.  
  1253. ;-----------------------------------------------------------------------------------------------------
  1254. ;                                                                                               ReadKeyWord()
  1255. ;-----------------------------------------------------------------------------------------------------
  1256. Function ReadKeyWords()
  1257.  
  1258.         Restore
  1259.        
  1260.         Repeat
  1261.        
  1262.                 Read o$
  1263.                 If o$ = "*STOP*" Then Exit
  1264.                
  1265.                 k.KeyWord = New KeyWord
  1266.                 ks$ = " " + o$ + " "
  1267.                
  1268.         Forever
  1269.        
  1270. End Function
  1271.  
  1272. Data "Else"
  1273. Data "Then"
  1274. Data "Position"
  1275. Data "Move"
  1276. Data "Turn"
  1277. Data "Locate"
  1278. Data "If"
  1279. Data "Print"
  1280. Data "Call"
  1281. Data "Set"
  1282. Data "End"
  1283. Data "Return"
  1284. Data "{"
  1285. Data "}"
  1286. Data "*STOP*"


Comments :


Yahfree(Posted 1+ years ago)

 Wierid... Alot mroe advanced then mine for sure, i'v yet to understand how DLLs and delcs work completely, i like this, WHERE WAS THIS WHEN I WAS MAKING MINE?!!?Also, win32, whats in that DLL, windows stuff(like their GUI)? and where do i learn how to access it?


b32(Posted 1+ years ago)

 I spend a lot more time on this than I was planning .. I rewrote it 5 times before it worked .. :S Never imagined that this would be so complex ..You can find more info on the windows .dll commands in the msdn:http://www.google.com/search?hl=en&q=setcursorpos+site%3Amsdn.microsoft.com&btnG=Google+SearchUsually, however, I learn it from this site, or with the help of a VB example.Here is more info on user32, it is a standard windows dll:<a href="http://www.processlibrary.com/directory/files/user32/" target="_blank">http://www.processlibrary.com/directory/files/user32/[/url]


Yahfree(Posted 1+ years ago)

 Cool, how do i change the color of the cursor? also is there a way to get rid of some stuff, like for example, i don't want the user to be able to break into a new line.heres some suggestions:*Create a system to see if a key is still being pressed, so the user doesnt have to press backspace over and over to delete*make an option for 2 types of test fields, 1 that just scrolls verticly and doesnt create a new line when enter is pressed, and 2: a notepad type thing like this, where if you get to the boarder it creates a new line. Not just stops.i like being able to change the color scheems though, i'll mess with ti some more, its very niceEdit: also you should include your IgetKey() function to enable the num-pad...


b32(Posted 1+ years ago)

 To disable line breaks, search for ;enter (in bb, with ctrl+f) and disable that piece of code.The color scheme is placed in the CreateTextField function, you can change it there or after creating a textfield, by setting the    extcolor field etc. The cursor color is the same as the selection background color, search for 'draw cur' to change that, you could make an extra field for the cursor color.Each Textfield can use it's own font and colors, however you can only use fixed-width fonts, else the cursor messes up.Here is the igetkey.bb module, in the code above, uncomment:Include "igetkey.bb" and search for iGetKey() and iFlushKeys() to uncomment them too.
Code: [Select]
;-----------------------------------------------------------------------------------------------------
;   **LIB IGETKEY**
;-----------------------------------------------------------------------------------------------------

InitGetKey()

;-----------------------------------------------------------------------------------------------------
; ScanCode Type
;-----------------------------------------------------------------------------------------------------
Type TKeyDown
Field s.ScanCode
End Type

;type to hold scancodes
Type ScanCode
Field code
Field key$
Field upkey$
Field isdown
End Type

;-----------------------------------------------------------------------------------------------------
; InitGetKey()
;-----------------------------------------------------------------------------------------------------
;reads all scancodes into ScanCode type
Function InitGetKey()

;read scancodes
tel = 1
Restore scancodez
Repeat
Read scanc
If scanc = -1 Then Exit
s.ScanCode = New ScanCode
scode = scanc
skey$ = Lower$(Mid$("1234567890-=QWERTYUIOP[]ASDFGHJKL;'XCVBNM,./* 789-456+1230.,/" + Chr$(8) + Chr$(13) + Chr$(13), tel, 1))
supkey$ = Mid$("!@#$%^&*()_+QWERTYUIOP{}ASDFGHJKL:" + Chr$(34) + "|ZXCVBNM<>?* 789-456+1230.,/" + Chr$(8) + Chr$(13) + Chr$(13), tel, 1)
tel = tel + 1
Forever

End Function

Function iFlushKeys()

;read scancodes
For s.ScanCode = Each ScanCode
sisdown = KeyDown(scode)
Next
FlushKeys()

End Function

Global oldkdown
;-----------------------------------------------------------------------------------------------------
; iGetKey()
;-----------------------------------------------------------------------------------------------------
;imitates GetKey() using scancodes
Function iGetKey()

;read scancodes
For s.ScanCode = Each ScanCode
down = KeyDown(scode)
If down And (Not sisdown) Then
tk.TKeyDown = New TKeyDown
tks = s
End If
sisdown = down
Next

tk.TKeyDown = First TKeyDown
If tk = Null Then Return

sel.ScanCode = tks
If sel = Null Then Return

oldkdown = selcode

Delete tk

;shift for uppercase
If KeyDown(42) Or KeyDown(54) Then
sc$ = selupkey$
Else
sc$ = selkey$
End If

;return ascii value of key
Return Asc(sc$)

End Function

;"1234567890-=QWERTYUIOP[]ASDFGHJKL;'XCVBNM,./* 789-456+7890.,/" (no shift)
;"!@#$%^&*()_+QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?* 789-456+7890.,/" (shift)
.scancodez
Data 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Data 12, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25
Data 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38
Data 39, 40, 43, 44, 45, 46, 47, 48, 49, 50, 51
Data 52, 53, 55, 57, 71, 72, 73, 74, 75, 76, 77
Data 78, 79, 80, 81, 82, 83, 179, 181
Data 14, 28, 156
Data -1
I would also like to include key repetition, and tweak some editing keys so it works more like a 'tmemo' object. I'm not sure where it will end, but if I will update the code if I have something new. If you add anything, feel free to post it.


Vertigo(Posted 1+ years ago)

 I toiled with something for weeks very similar.  I was tired of popping up hundreds of files in notepad to edit scripts for my game.  You just saved my life.  Is this public domain?  Kudos to you buddy!


Vertigo(Posted 1+ years ago)

 Also some simple tweaks.Add fields to the Type TTextFieldField passwordField MaxCharLengthCall Function CreateTextField.TTextField(x, y, width, height, password=False)With optional password field.For the Box and Sel text functions do something like:
Code: [Select]

If Tpassword=False Then
Text x, y, s$
Else
For starlength= 0 To Len(s$)
startext$ = startext$ + "*"
Next
Text x, y, startext$
End If

Now what you type shows up as those pretty stars.  For max length just hold that counter and when youre typing exceeds it, prevent it.Just my two cents for extra features.


b32(Posted 1+ years ago)

 I've posted the new version. I've added some sort of syntax highlighting and tweaked it a bit to include the password functions. In case somebody needs the previous version, this is it:
Code: [Select]
;-----------------------------------------------------------------------------------------------------
;   **LIB TEXTFIELDS**
;-----------------------------------------------------------------------------------------------------

;-------------------------------------------------------
;make a textfile "user32.decls" in c:program fileslitzuserlibs with the
;following content to be able to use the clipboard:
;-------------------------------------------------------

; Clipboard Text Read / Write
; ===========================
; Syntax Error & Ed from Mars

; userlib declarations - 'user32.decls'
; *********************************************
; .lib "user32.dll"
; OpenClipboard%(hwnd%):"OpenClipboard"
; CloseClipboard%():"CloseClipboard"
; ExamineClipboard%(format%):"IsClipboardFormatAvailable"
; EmptyClipboard%():"EmptyClipboard"
; GetClipboardData$(format%):"GetClipboardData"
; SetClipboardData%(format%,txt$):"SetClipboardData"
; *********************************************

;-------------------------------------------------------
;the clipboard functions are written by Jim Brown:
;-------------------------------------------------------

; ID: 699
; Author: Jim Brown
; Date: 2003-05-21 14:30:46
; Title: Clipboard - Text Copy & Paste
; Description: Two functions to read & write to through the clipboard

; Clipboard Text Read / Write
; ===========================
; Syntax Error & Ed from Mars
;-----------------------------------
;Search: "WriteClipBoardText" and "ReadClipBoardText"

;-------------------------------------------------------------------------------------------------------
; Globals etc
;-------------------------------------------------------------------------------------------------------

; Include "igetkey.bb"

;allowed characters
Global abc$ = "{}1234567890-=QWERTYUIOP[]ASDFGHJKL;'XCVBNM,./* 789-456+1230.,/?!#$%^&():" + Chr$(34)

Global clipboard$

;number of lines
Global numlines
Global ActiveText.TTextField

Global Cursor_X, Cursor_Y
Global curx, cury

Dim Cursor_Hit(2)

;selection type
Type TSelection
Field l.Tline
Field c
End Type

Dim tsel.TSelection(2)

For i = 1 To 2
tsel(i) = New TSelection
Next

;storage of lines
Type TStorage
Field s$
Field id
Field t.TTextField
End Type

;line type
Type TLine
Field s$
Field id
End Type

;textfield type
Type TTextField
Field x
Field y
Field width
Field height
Field font
Field CharWidth
Field CharHeight
Field ofx, ofy

Field curx, cury
Field curline.TLine

Field backgroundcolor
Field bordercolor
Field textcolor
Field sel_backgroundcolor
Field sel_textcolor
Field cursorcolor

Field idle
End Type

;-------------------------------------------------------------------------------------------------------
; Test Program
;-------------------------------------------------------------------------------------------------------

Graphics 800, 600, 0, 2
SetBuffer BackBuffer()

;create textfield
t2.TTextField = CreateTextField(50, 320, 700, 240)
t1.TTextField = CreateTextField(50, 50, 700, 240)

;main loop
Repeat

Cls

DrawTextFields()

If KeyHit(59) Then SaveTextFile("test.txt")
If KeyHit(60) Then LoadTextFile("test.txt")

Flip

Until KeyHit(1)

End

;-------------------------------------------------------------------------------------------------------
; DrawTextFields()
;-------------------------------------------------------------------------------------------------------
Function DrawTextFields()

Cursor_X = MouseX()
Cursor_Y = MouseY()
Cursor_Hit(1) = MouseHit(1)

test = 0
For t.TTextField = Each TTextField
DrawTextField(t)
If RectsOverlap(Cursor_X, Cursor_Y, 1, 1, tx, ty, twidth, theight) And Cursor_Hit(1) Then
SetActiveText t
test = 1
End If
Next

If Cursor_Hit(1) And (test = 0) Then SetActiveText Null

End Function

;-------------------------------------------------------------------------------------------------------
; CreateTextField()
;-------------------------------------------------------------------------------------------------------
Function CreateTextField.TTextField(x, y, width, height)

t.TTextField = New TTextField

;position
tx = x
ty = y
twidth = width
theight = height

;use only fonts with a fixed width (ocr a extended, fixedsys, blitz etc.)
tfont = LoadFont("FixedSys");"Blitz"
SetFont tfont

;font size
tCharWidth = StringWidth("X")
tCharHeight = StringHeight("X")

;scroll
tofx = 0
tofy = 0

tackgroundcolor = $225588
tordercolor = $555555
t extcolor = $DDDDFF
tsel_backgroundcolor = $DDAA77
tsel_textcolor = $000000
tcursorcolor = $DDAA77

tidle = CreateImage(width, height)

SetMarker(1, 0, 0)
SetMarker(2, 0, 0)

SetActiveText t

Return t

End Function

;-------------------------------------------------------------------------------------------------------
; DrawTextField()
;-------------------------------------------------------------------------------------------------------
Function DrawTextField(t.TTextField, update = 0)

If (t <> ActiveText) And (Not update) Then
DrawBlock tidle, tx, ty
Return
End If

curline.TLine = tcurline
curx = tcurx
cury = tcury

;max width/height in characters
maxchar = (twidth / tCharWidth)
maxlines = (theight / tCharHeight)

;scroll textfield
If cury - tofy >= maxlines Then tofy = cury - maxlines + 1
If cury - tofy < 0 Then tofy = cury
If curx - tofx < 0 Then tofx = curx
If curx - tofx >= maxchar Then tofx = curx - maxchar + 1

;draw frame
Color 0, 0, tackgroundcolor
Rect tx, ty, twidth, theight
Color 0, 0, tordercolor
Rect tx, ty, twidth, theight, 0

;determine bottom
bottom = ty + theight

;get selection
If tsel(1)l <> Null Then sel1y = tsel(1)lid Else sel1y = 65536
If tsel(2)l <> Null Then sel2y = tsel(2)lid Else sel2y = -1

sel1x = tsel(1)c - tofx
sel2x = tsel(2)c - tofx

If sel1x < 0 Then sel1x = 0
If sel1x > maxchar Then sel1x = maxchar
If sel2x < 0 Then sel2x = 0
If sel2x > maxchar Then sel2x = maxchar

;determine order
If sel2y < sel1y Then
tempx = sel1x
tempy = sel1y
sel1x = sel2x
sel1y = sel2y
sel2x = tempx
sel2y = tempy
End If

If sel1y = sel2y Then
If sel2x < sel1x Then
tempx = sel1x
tempy = sel1y
sel1x = sel2x
sel1y = sel2y
sel2x = tempx
sel2y = tempy
End If
End If

;draw text area
iy = ty - tofy * tCharHeight
init = 0
For l.TLine = Each TLine
If lid = tofy Then init = 1
If init Then

;draw text
If (lid > sel1y) And (lid < sel2y) Then

SelText t, tx, iy, Mid$(ls$, tofx + 1, maxchar)

ElseIf (lid = sel1y) And (lid < sel2y) Then

d$ = Mid$(ls$, tofx + 1, maxchar)

d1$ = Left$(d$, sel1x)
d2$ = Mid$(d$, sel1x + 1)

BoxText t, tx, iy, d1$
SelText t, tx + Len(d1$) * tCharWidth, iy, d2$

ElseIf (lid > sel1y) And (lid = sel2y) Then

d$ = Mid$(ls$, tofx + 1, maxchar)

d1$ = Left$(d$, sel2x)
d2$ = Mid$(d$, sel2x + 1)

SelText t, tx, iy, d1$
BoxText t, tx + Len(d1$) * tCharWidth, iy, d2$

ElseIf (lid = sel1y) And (lid = sel2y) Then

d$ = Mid$(ls$, tofx + 1, maxchar)
d2$ = Mid$(d$, sel1x + 1, sel2x - sel1x)

BoxText t, tx, iy, d$
SelText t, tx + (sel1x * tCharWidth), iy, d2$

Else

BoxText t, tx, iy, Mid$(ls$, tofx + 1, maxchar)

End If

End If

iy = iy + tCharHeight
If iy + tCharHeight > bottom Then Exit

Next

;get cursor line
curline.TLine = GetLine(cury)
maxdd = Len(curlines$)

;draw cursor
cgx = tx + (tCharWidth * (curx - tofx))
cgy = ty + (tCharHeight * (cury - tofy))
Color 0, 0, tsel_backgroundcolor
If Not update Then Line cgx, cgy, cgx, cgy + tCharHeight
; Color 255, 255, 255
; Text cgx, cgy, Mid$(curlines$, curx + 1, 1)

;shift hit
If KeyHit(42) Then
SetMarker(1, cury, curx)
SetMarker(2, cury, curx)
End If

;max line size
maxdd = Len(curlines$)

;ctrl
If KeyDown(29) Then

;CTRL+A
If KeyHit(30) Then
SetMarker(1, 0, 0)
l.TLine = GetLine(numlines - 1)
SetMarker(2, numlines - 1, Len(ls$))
End If
;CTRL+D
If KeyHit(32) Then
SetMarker(1, 0, 0)
SetMarker(2, 0, 0)
End If
;CTRL+X
If KeyHit(45) Then
WriteClipBoardText(GetSelection$())
DeleteSel()
End If
;CTRL+C
If KeyHit(46) Then
WriteClipBoardText(GetSelection$())
ResetSel()
End If
;CTRL+V
If KeyHit(47) Then
rok$ = ReadClipBoardText$()
InsertLines(rok$, curx, cury)
curline = GetLine(cury)
maxdd = Len(curlines$)
ResetSel()
End If

;home
If KeyHit(199) Then
cury = 0
curline = GetLine(cury)
maxdd = Len(curlines$)
curx = 0
ResetSel
End If

;end
If KeyHit(207) Then
cury = numlines - 1
curline = GetLine(cury)
maxdd = Len(curlines$)
curx = maxdd
ResetSel
End If

Else

;KEYBOARD INPUT
ok = GetKey();iGetKey()
;INSERT
If KeyHit(210) Then ok = 32
;A-Z keys
If ok <> 0 Then
If curx < 0 Then curx = 0
If cury < 0 Then cury = 0
;check against abc$
If Instr(abc$, Upper$(Chr$(ok))) > 0 Then
;add character
curlines$ = Left$(curlines$, curx) + Chr$(ok) + Mid$(curlines$, curx + 1)
maxdd = Len(curlines$)
curx = curx + 1
ResetSel(1)
End If
End If

;enter
If KeyHit(28) Then
nl$ = Mid$(curlines$, curx + 1)
curlines$ = Left$(curlines$, curx)
l.TLine = AddLine(nl$)
Insert l After curline
cury = cury + 1
curx = 0
curline = l
maxdd = Len(curlines$)
UpdateLines()
ResetSel(1)
End If

;backspace
If KeyHit(14) Then
If curx > 0 Then
curlines$ = Left$(curlines$, curx - 1) + Mid$(curlines$, curx + 1)
curx = curx - 1
maxdd = Len(curlines$)
ResetSel(1)
Else
If cury > 0 Then
l.TLine = GetLine(cury - 1)
curx = Len(ls$)
ls$ = ls$ + curlines$
Delete curline
numlines = numlines - 1
UpdateLines()
cury = cury - 1
curline = l
maxdd = Len(ls$)
ResetSel(1)
End If
End If
End If

;home/end
If KeyHit(199) Then curx = 0: ResetSel
If KeyHit(207) Then curx = maxdd: ResetSel

End If

;pgup
If KeyHit(201) Then
ncury = cury - maxlines
If ncury < 0 Then ncury = 0
cury = ncury
curline = GetLine(cury)
maxdd = Len(curlines$)
ResetSel
End If

;pgdn
If KeyHit(209) Then
ncury = cury + maxlines
If ncury >= numlines Then ncury = numlines - 1
cury = ncury
curline = GetLine(cury)
maxdd = Len(curlines$)
ResetSel
End If

;left
If KeyHit(203) Then
curx = curx - 1
If curx < 0 Then
If cury > 0 Then
cury = cury - 1
curline.TLine = GetLine(cury)
maxdd = Len(curlines$)
curx = maxdd
Else
curx = 0
End If
End If
ResetSel
End If

;right
If KeyHit(205) Then
curx = curx + 1
If curx > maxdd Then
If cury < numlines - 1 Then
curx = 0
cury = cury + 1
curline = GetLine(cury)
maxdd = Len(curlines$)
End If
End If
ResetSel
End If

;up
If KeyHit(200) Then
cury = cury - 1
If cury < 0 Then cury = 0
curline.TLine = GetLine(cury)
maxdd = Len(curlines$)
ResetSel
End If

;down
If KeyHit(208) Then
cury = cury + 1
If cury >= numlines Then cury = numlines - 1
curline.TLine = GetLine(cury)
maxdd = Len(curlines$)
ResetSel
End If

If curx > maxdd Then curx = maxdd

;delete knop
If KeyHit(211) Then DeleteSel()

tcurline = curline
tcurx = curx
tcury = cury

End Function

;-------------------------------------------------------------------------------------------------------
;      AddLine()
;-------------------------------------------------------------------------------------------------------
Function AddLine.TLine(s$)

l.TLine = New TLine
ls$ = s$
UpdateLines()

Return l

End Function

;-------------------------------------------------------------------------------------------------------
;       UpdateLines()
;-------------------------------------------------------------------------------------------------------
Function UpdateLines()

id = 0
For l.TLine = Each TLine
lid = id
id = id + 1
Next

numlines = id
; curline.TLine = GetLine(cury)

End Function

;-------------------------------------------------------------------------------------------------------
; SetMarker()
;-------------------------------------------------------------------------------------------------------
Function SetMarker(id, liney, char)

l.TLine = Null
For il.TLine = Each TLine
If ilid = liney Then l = il: Exit
Next
If l = Null Then Return

tsel(id)l = l
tsel(id)c = char

If tsel(1)l = Null Then Return
If tsel(2)l = Null Then Return

End Function

;-------------------------------------------------------------------------------------------------------
;   SelText()
;-------------------------------------------------------------------------------------------------------
;draw selected text
Function SelText(t.TTextField, x, y, s$)

ww = StringWidth(s$)
hh = StringHeight(s$)
Color 0, 0, tsel_backgroundcolor
Rect x, y, ww, hh
Color 0, 0, tsel_textcolor
Text x, y, Replace$(s$, Chr$(13), "")

End Function

;-------------------------------------------------------------------------------------------------------
;   BoxText()
;-------------------------------------------------------------------------------------------------------
;draw non-selected text
Function BoxText(t.TTextField, x, y, s$)

Color 0, 0, t extcolor
Text x, y, s$

End Function

;-------------------------------------------------------------------------------------------------------
; GetLine()
;-------------------------------------------------------------------------------------------------------
;gets a specific line, else creates it
Function GetLine.TLine(i)

If i < 0 Then i = 0
If i > 65536 Then i = 65536

il.TLine = Null
For l.TLine = Each TLine
If lid = i Then il = l: Exit
Next

If il = Null Then
Repeat
il.TLine = AddLine("")
If ilid = i Then Exit
Until ilid = 65536
End If

Return il

End Function

;-------------------------------------------------------------------------------------------------------
; ResetSel()
;-------------------------------------------------------------------------------------------------------
Function ResetSel(rs = 0)

;shift
If KeyDown(42) And (Not rs) Then
SetMarker(2, cury, curx)
Else
SetMarker(1, cury, curx)
SetMarker(2, cury, curx)
End If

FlushKeys();iFlushKeys()

End Function

;-------------------------------------------------------------------------------------------------------
;   DeleteSel()
;-------------------------------------------------------------------------------------------------------
Function DeleteSel()

;retreive selection
If tsel(1)l <> Null Then sel1y = tsel(1)lid Else Return
If tsel(2)l <> Null Then sel2y = tsel(2)lid Else Return

sel1x = tsel(1)c
sel2x = tsel(2)c

If sel1x < 0 Then sel1x = 0
If sel2x < 0 Then sel2x = 0

;determine order

id1 = 1
id2 = 2

If sel2y < sel1y Then
id1 = 2
id2 = 1
tempx = sel1x
tempy = sel1y
sel1x = sel2x
sel1y = sel2y
sel2x = tempx
sel2y = tempy
End If

If sel1y = sel2y Then
If sel2x < sel1x Then
id1 = 2
id2 = 1
tempx = sel1x
tempy = sel1y
sel1x = sel2x
sel1y = sel2y
sel2x = tempx
sel2y = tempy
End If
End If

;reset cursor
curx = tsel(id1)c
cury = tsel(id1)lid

;remove lines in between
For l.TLine = Each TLine
If (lid > sel1y) And (lid < sel2y) Then Delete l
Next

;same line?
If tsel(id1)l = tsel(id2)l Then
If (sel1x = 0) And (sel2x = Len(tsel(id2)ls$)) Then
Delete tsel(id1)l
Else
tsel(id1)ls$ = Left$(tsel(id1)ls$, sel1x) + Mid$(tsel(id1)ls$, sel2x + 1)
End If
Else
test = 1

;cut first line
If sel1x = 0 Then
Delete tsel(id1)l
test = 0
Else
tsel(id1)ls$ = Left$(tsel(id1)ls$, sel1x)
End If

;cut last line
If sel2x = Len(tsel(id2)ls$) Then
Delete tsel(id2)l
test = 0
Else
tsel(id2)ls$ = Mid$(tsel(id2)ls$, sel2x + 1)
End If

;paste together if needed
If test Then
tsel(id1)ls$ = tsel(id1)ls$ + tsel(id2)ls$
Delete tsel(id2)l
End If

End If

;update indexes and reset selection
UpdateLines()
ResetSel(1)

End Function

;-------------------------------------------------------------------------------------------------------
; GetSelection()
;-------------------------------------------------------------------------------------------------------
Function GetSelection$()

;retreive selection
If tsel(1)l <> Null Then sel1y = tsel(1)lid Else Return
If tsel(2)l <> Null Then sel2y = tsel(2)lid Else Return

sel1x = tsel(1)c
sel2x = tsel(2)c

id1 = 1
id2 = 2

;determine order

If sel2y < sel1y Then
id1 = 2
id2 = 1
End If

If sel1y = sel2y Then
If sel2x < sel1x Then
id1 = 2
id2 = 1
End If
End If

;same line ?
If tsel(id1)l = tsel(id2)l Then
If tsel(id1)c = tsel(id2)c Then
Return
Else
ss = tsel(id1)c + 1
ll = tsel(id2)c - ss + 1
Return Mid$(tsel(id1)ls$, ss, ll)
End If
End If

;get selection
s$ = ""
init = 0
For l.TLine = Each TLine
If l = tsel(id2)l Then
s$ = s$ + Left$(tsel(id2)ls$, tsel(id2)c)
init = 0
End If
If init Then
s$ = s$ + ls$ + Chr$(13)
End If
If l = tsel(id1)l Then
s$ = s$ + Mid$(tsel(id1)ls$, tsel(id1)c + 1) + Chr(13)
init = 1
End If
Next

;return selection
Return s$

End Function


;-----------------------------------------------------------------------------------------------------
; WriteClipBoardText()
;-----------------------------------------------------------------------------------------------------
Function WriteClipBoardText(txt$)

If txt$="" Then Return

txt$ = Replace$(txt$, Chr$(13), Chr$(13) + Chr$(10))

;-(A)--------------------------------------------------------------windows clipboard------------------
Local cb_TEXT=1
If OpenClipboard(0) ;if you get an error here, read the manual above or use alternative code below
EmptyClipboard
SetClipboardData cb_TEXT,txt$
CloseClipboard
EndIf

FreeBank txtbuffer

;--(B)--------------------------------------------------------------string as clipboard----------------
;alternative
; clipboard$ = txt$

End Function

;-----------------------------------------------------------------------------------------------------
;  ReadClipBoardText()
;-----------------------------------------------------------------------------------------------------
Function ReadClipBoardText$()

;---(A)--

Local cb_TEXT=1
Local txt$=""
If OpenClipboard(0)
If ExamineClipboard(cb_TEXT)
txt$=GetClipboardData$(cb_TEXT)
EndIf
CloseClipboard
EndIf

;---(B)--

;alternative
; txt$ = clipboard$

;-----
txt$ = Replace$(txt$, Chr$(13) + Chr$(10), Chr$(13))
txt$ = Replace$(txt$, Chr$(9), "    ")
Return txt$

End Function

;-----------------------------------------------------------------------------------------------------
; InsertLine()
;-----------------------------------------------------------------------------------------------------
Function InsertLine(r$, x, y)

If Right$(r$, 1) = Chr$(13) Then add = 1: r$ = Left$(r$, Len(r$) - 1)

If y < 0 Then y = 0
If x < 0 Then x = 0
If y > numlines Then y = numlines

l.TLine = GetLine(y)

If add Then
If x > 0 Then
r2$ = Mid$(ls$, x + 1)
ls$ = Left$(ls$, x) + r$
l2.TLine = AddLine(r2$)
Insert l2 After l
curx = 0
cury = cury + 1
Else
l2.TLine = AddLine(r$)
Insert l2 Before l
curx = 0
cury = cury + 1
End If
Else
ls$ = Left$(ls$, x) + r$ + Mid$(ls$, x + 1)
curx = curx + Len(r$)
End If

UpdateLines()

End Function

;-----------------------------------------------------------------------------------------------------
; InsertLines()
;-----------------------------------------------------------------------------------------------------
Function InsertLines(r$, x, y)

If Instr(r$, Chr$(13)) > 0 Then

Repeat

cc = Instr(r$, Chr$(13))
If cc = 0 Then Exit

r1$ = Left$(r$, cc)
r2$ = Mid$(r$, cc + 1)
InsertLine(r1$, x, y)
init = 0
x = 0
y = y + 1
r$ = r2$

Forever

End If

InsertLine(r$, x, y)

End Function

;-----------------------------------------------------------------------------------------------------
; UpdateText()
;-----------------------------------------------------------------------------------------------------
;grab screenshot to 'idle' image
Function UpdateText(t.TTextField)

DrawTextField t, 1
;store idle
CopyRect tx, ty, twidth, theight, 0, 0, BackBuffer(), ImageBuffer(tidle)

End Function

;-----------------------------------------------------------------------------------------------------
; DeleteTextField()
;-----------------------------------------------------------------------------------------------------
Function DeleteTextField(t.TTextField)

;free image
FreeImage tidle

;delete storage
For st.TStorage = Each TStorage
If st = t Then Delete st
Next

;delete temp lines
If t = ActiveText Then Delete Each TLine

;free font
FreeFont tfont

;delete type
Delete t

End Function


;-----------------------------------------------------------------------------------------------------
;   SetActiveText()
;-----------------------------------------------------------------------------------------------------
Function SetActiveText(t.TTextField)

;if another is selected
If ActiveText <> Null Then
;delete storage
For st.TStorage = Each TStorage
If st = ActiveText Then Delete st
Next
;store temp lines
For l.TLine = Each TLine
st.TStorage = New TStorage
sts$ = ls$
stid = lid
st = ActiveText
Next
;store screenshot
UpdateText(ActiveText)
End If

;delete temp lines
Delete Each TLine

;select another text
ActiveText = t
If ActiveText = Null Then Return

;get lines from storage
For st.TStorage = Each TStorage
If st = t Then
l.TLine = New TLine
ls$ = sts$
lid = stid
End If
Next
UpdateLines()

;reset cursor
SetMarker 1, 0, 0
SetMarker 2, 0, 0

End Function

;-----------------------------------------------------------------------------------------------------
; SaveTextFile()
;-----------------------------------------------------------------------------------------------------
Function SaveTextFile(f$)

ff = WriteFile(f$)
For l.TLine = Each TLine
WriteLine ff, ls$
Next
CloseFile ff

End Function

;-----------------------------------------------------------------------------------------------------
; LoadTextFile()
;-----------------------------------------------------------------------------------------------------
Function LoadTextFile(f$)

Delete Each TLine
ff = ReadFile(f$)
While Not(Eof(ff))
AddLine(ReadLine(ff))
Wend
CloseFile ff

UpdateLines()

;reset cursor
SetMarker 1, 0, 0
SetMarker 2, 0, 0

End Function


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal