home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / FlowChart1722823212004.psc / CodeBox.ctl < prev    next >
Text File  |  2003-10-23  |  44KB  |  1,055 lines

  1. VERSION 5.00
  2. Begin VB.UserControl CodeBox 
  3.    ClientHeight    =   4575
  4.    ClientLeft      =   0
  5.    ClientTop       =   0
  6.    ClientWidth     =   6570
  7.    ScaleHeight     =   305
  8.    ScaleMode       =   3  'Pixel
  9.    ScaleWidth      =   438
  10.    ToolboxBitmap   =   "CodeBox.ctx":0000
  11.    Begin VB.PictureBox picTextBuffer 
  12.       Appearance      =   0  'Flat
  13.       AutoRedraw      =   -1  'True
  14.       BackColor       =   &H00FFFFFF&
  15.       BorderStyle     =   0  'None
  16.       BeginProperty Font 
  17.          Name            =   "Courier New"
  18.          Size            =   9.75
  19.          Charset         =   161
  20.          Weight          =   400
  21.          Underline       =   0   'False
  22.          Italic          =   0   'False
  23.          Strikethrough   =   0   'False
  24.       EndProperty
  25.       ForeColor       =   &H80000008&
  26.       Height          =   4245
  27.       Left            =   195
  28.       MousePointer    =   3  'I-Beam
  29.       ScaleHeight     =   283
  30.       ScaleMode       =   3  'Pixel
  31.       ScaleWidth      =   424
  32.       TabIndex        =   0
  33.       Top             =   255
  34.       Visible         =   0   'False
  35.       Width           =   6360
  36.    End
  37.    Begin VB.PictureBox PicTextArea 
  38.       AutoRedraw      =   -1  'True
  39.       BackColor       =   &H00FFFFFF&
  40.       BorderStyle     =   0  'None
  41.       BeginProperty Font 
  42.          Name            =   "Courier New"
  43.          Size            =   9.75
  44.          Charset         =   161
  45.          Weight          =   400
  46.          Underline       =   0   'False
  47.          Italic          =   0   'False
  48.          Strikethrough   =   0   'False
  49.       EndProperty
  50.       Height          =   4245
  51.       Left            =   0
  52.       MousePointer    =   3  'I-Beam
  53.       ScaleHeight     =   283
  54.       ScaleMode       =   3  'Pixel
  55.       ScaleWidth      =   424
  56.       TabIndex        =   3
  57.       Top             =   0
  58.       Width           =   6360
  59.    End
  60.    Begin VB.Timer Timer1 
  61.       Interval        =   400
  62.       Left            =   6510
  63.       Top             =   1080
  64.    End
  65.    Begin VB.PictureBox Selector 
  66.       AutoRedraw      =   -1  'True
  67.       BackColor       =   &H00FF0000&
  68.       BorderStyle     =   0  'None
  69.       BeginProperty Font 
  70.          Name            =   "Courier New"
  71.          Size            =   9.75
  72.          Charset         =   161
  73.          Weight          =   400
  74.          Underline       =   0   'False
  75.          Italic          =   0   'False
  76.          Strikethrough   =   0   'False
  77.       EndProperty
  78.       Height          =   225
  79.       Left            =   150
  80.       ScaleHeight     =   15
  81.       ScaleMode       =   3  'Pixel
  82.       ScaleWidth      =   442
  83.       TabIndex        =   2
  84.       Top             =   4530
  85.       Visible         =   0   'False
  86.       Width           =   6630
  87.    End
  88.    Begin VB.PictureBox LineBuffer 
  89.       AutoRedraw      =   -1  'True
  90.       BackColor       =   &H00FFFFFF&
  91.       BorderStyle     =   0  'None
  92.       BeginProperty Font 
  93.          Name            =   "Courier New"
  94.          Size            =   9.75
  95.          Charset         =   161
  96.          Weight          =   400
  97.          Underline       =   0   'False
  98.          Italic          =   0   'False
  99.          Strikethrough   =   0   'False
  100.       EndProperty
  101.       Height          =   255
  102.       Left            =   135
  103.       ScaleHeight     =   17
  104.       ScaleMode       =   3  'Pixel
  105.       ScaleWidth      =   438
  106.       TabIndex        =   1
  107.       Top             =   4845
  108.       Visible         =   0   'False
  109.       Width           =   6570
  110.    End
  111. End
  112. Attribute VB_Name = "CodeBox"
  113. Attribute VB_GlobalNameSpace = False
  114. Attribute VB_Creatable = True
  115. Attribute VB_PredeclaredId = False
  116. Attribute VB_Exposed = False
  117. 'Advanced Code Edit control by: Lefteris Eleftheriades
  118. 'Portion of projects VBScript Pad & Advanced Flowchart Programming
  119. 'ùùùùùùùùùùùùùùùùùùùùùùùùùùùAdvanced Code Edit Controlùùùùùùùùùùùùùùùùùùùùùùùùùù
  120. 'This control acts like a regular textbox  but automatically colors blue
  121. 'each word that matches any of the given in the Keywords property.
  122. 'it does not leave traces and it has all the functionalities of a regular textbox
  123. 'plus can set a background image.
  124. 'This control was designed for any person that wishes to make a programing interface
  125. 'for any purpose
  126. 'The control could be used in HTML editors, VBScript Editors,Javascript Editors
  127. 'your own programming language, as a VIP name hilighter or as a batch file editor,
  128. 'to hilight keywords.
  129. 'ùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùù
  130. 'YOU MAY USE THIS CODE TO ANY OF YOUR PROGRAMS AS LONG AS YOU MENTION THE
  131. 'CREATOR'S NAME IN THE ABOUT BOX OF YOUR APPLICATION(if you have one).
  132. 'THE CONTROL CAN BE MODIFIED AS DESIRED BUT CAN NOT BE CLAIMED AS YOUR OWN.
  133. 'You are allowed to take any function of this code if you mention me in your
  134. 'about box. 2K+3 AdvCodeBox.Ctl SRA OS 76 1000
  135. 'ùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùù
  136. Option Explicit
  137. Private Declare Function GetFocus Lib "user32.dll" () As Long
  138. Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, _
  139.                ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, _
  140.                ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, _
  141.                ByVal BLENDFUNCT As Long) As Long
  142. Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
  143. Private Const SRCAND As Long = &H8800C6
  144. Private Const SRCCOPY As Long = &HCC0020
  145. Private Const SRCINVERT As Long = &H660046
  146.  
  147. Dim TextBoxLines(1000) As String
  148. Dim Lineproperties(1000) As Byte
  149. Dim CurretLeft As Long, CurerentLine As Long
  150. Dim BlinkingLineX As Long
  151. Dim BlinkState As Boolean
  152. Dim sSelStart As Long
  153. Dim vbsKeywords() As String
  154. Dim NoOfLines As Long
  155. Dim SelectedAreaFrom(1000) As Long
  156. Dim SelectedAreaLength(1000) As Long
  157. Dim LineSelected(1000) As Boolean
  158.  
  159. Dim SelectionX1&, SelectionX2&
  160. Dim SelectionY1&, SelectionY2&
  161. Dim PrevEventsHandled As Boolean
  162.  
  163. Const CommentSymbol As String = "'" ' "//"
  164. Const StringSymbol As String = """" ' "'"
  165. Dim DownChr&, MoveChr&
  166. Dim DownLne&, MoveLne&
  167. 'Event Declarations:
  168. Event Click() 'MappingInfo=PicTextArea,PicTextArea,-1,Click
  169. Attribute Click.VB_Description = "Occurs when the user presses and then releases a mouse button over an object."
  170. Event DblClick() 'MappingInfo=PicTextArea,PicTextArea,-1,DblClick
  171. Attribute DblClick.VB_Description = "Occurs when the user presses and releases a mouse button and then presses and releases it again over an object."
  172. Event KeyDown(KeyCode As Integer, Shift As Integer) 'MappingInfo=PicTextArea,PicTextArea,-1,KeyDown
  173. Attribute KeyDown.VB_Description = "Occurs when the user presses a key while an object has the focus."
  174. Event KeyPress(KeyAscii As Integer) 'MappingInfo=PicTextArea,PicTextArea,-1,KeyPress
  175. Attribute KeyPress.VB_Description = "Occurs when the user presses and releases an ANSI key."
  176. Event KeyUp(KeyCode As Integer, Shift As Integer) 'MappingInfo=PicTextArea,PicTextArea,-1,KeyUp
  177. Attribute KeyUp.VB_Description = "Occurs when the user releases a key while an object has the focus."
  178. Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=PicTextArea,PicTextArea,-1,MouseDown
  179. Attribute MouseDown.VB_Description = "Occurs when the user presses the mouse button while an object has the focus."
  180. Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=PicTextArea,PicTextArea,-1,MouseMove
  181. Attribute MouseMove.VB_Description = "Occurs when the user moves the mouse."
  182. Event MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=PicTextArea,PicTextArea,-1,MouseUp
  183. Attribute MouseUp.VB_Description = "Occurs when the user releases the mouse button while an object has the focus."
  184. Event Resize() 'MappingInfo=UserControl,UserControl,-1,Resize
  185. Attribute Resize.VB_Description = "Occurs when a form is first displayed or the size of an object changes."
  186. Event LineChanged(PreviewsLine As Integer, NewLine As Integer)
  187.  
  188. 'Default Property Values:
  189. Const m_def_Number_of_Lines = 0
  190. Const m_def_Top_Line = 0
  191. Const m_def_Keywords = "Me,Mod,Line,GoTo,True,False,While,Until,Wend,Private,Public,Global,Sub,Function,End,If,Then,Else,Dim,For,Next,To,TypeOf,Is,Long,Integer,Boolean,Single,Double,Byte,Currency,String,Object,With,ByVal,(ByVal,ByRef,(ByRef,As,Type,Enum,Const,ReDim,Declare,Lib,Alias,Static,UBound,LBound,Do,Loop,Open,Close,And,Or,Not,Xor,Append,BF,Binary,Call,Select,Case,CBool,CByte,CCur,CDate,CDbl,CDec,CInt,CLng,AddressOf,Collection,Control,CSng,CStr,Cstr,CVar,ElseIf,Error,Exit,Explicit,Friend,Get,Let,Set,Input,New,Nothing,On,Option,Optional,(Optional,Output,Print,Property,Random,Step,Tokens,VarPtr"
  192. Const m_def_KeywordColor = 0
  193. Const m_def_CommentColor = 0
  194. Const m_def_TextboxLine = ""
  195. 'Property Variables:
  196. Dim m_Number_of_Lines As Integer
  197. Dim m_Top_Line As Integer
  198. Dim m_Keywords As String
  199. Dim m_KeywordColor As OLE_COLOR
  200. Dim m_CommentColor As OLE_COLOR
  201. Dim m_TextboxLine As String
  202. Dim VisibleLines&
  203. Public Sub Alpha_Blend(DestinationHdc&, SourceHdc&, X&, Y&, CropX&, CropY&, CropW&, CropH&, Width&, Height&, Optional TransparancyLevel& = 128)
  204.     AlphaBlend DestinationHdc&, X&, Y&, Width&, Height&, SourceHdc&, CropX&, CropY&, CropW&, CropH&, TransparancyLevel * &H10000
  205. End Sub
  206.  
  207. Private Sub PicTextArea_KeyDown(KeyCode As Integer, Shift As Integer)
  208.     RaiseEvent KeyDown(KeyCode, Shift)
  209. If PrevEventsHandled Then
  210. PrevEventsHandled = False
  211.   Dim TL&, TT&, CL&
  212.  'Part 1: The special keys handler
  213.   DeselectAll
  214.   RedrawLine
  215.   Select Case KeyCode
  216.       Case vbKeyLeft
  217.            If CurretLeft > 1 Then CurretLeft = CurretLeft - 1
  218.       Case vbKeyRight
  219.            If CurretLeft <= Len(TextBoxLines(CurerentLine)) Then
  220.               CurretLeft = CurretLeft + 1
  221.            End If
  222.       Case vbKeyUp
  223.            If CurerentLine > 0 Then
  224.               CurerentLine = CurerentLine - 1
  225.               RaiseEvent LineChanged(CurerentLine + 1, (CurerentLine))
  226.               DoEvents
  227.            End If
  228.            If CurretLeft > Len(TextBoxLines(CurerentLine)) Then CurretLeft = Len(TextBoxLines(CurerentLine)) + 1
  229.            PropertyChanged "Current_Line"
  230.       Case vbKeyDown
  231.            CurerentLine = CurerentLine + 1
  232.            RaiseEvent LineChanged(CurerentLine - 1, (CurerentLine))
  233.            If CurretLeft > Len(TextBoxLines(CurerentLine)) Then CurretLeft = Len(TextBoxLines(CurerentLine)) + 1
  234.            PropertyChanged "Current_Line"
  235.            DoEvents
  236.       Case vbKeyBack
  237.            If CurretLeft > 1 Then
  238.              TextBoxLines(CurerentLine) = Mid(TextBoxLines(CurerentLine), 1, CurretLeft - 2) & Mid(TextBoxLines(CurerentLine), CurretLeft)
  239.              CurretLeft = CurretLeft - 1
  240.            ElseIf CurretLeft = 1 And CurerentLine > 0 Then
  241.               'The tricky part move the text 1 line up
  242.               TT = CurerentLine
  243.               CurerentLine = CurerentLine - 1
  244.               TL = Len(TextBoxLines(CurerentLine))
  245.               TextBoxLines(CurerentLine) = TextBoxLines(CurerentLine) & TextBoxLines(CurerentLine + 1)
  246.               RedrawLine False
  247.               For CL = TT To 999
  248.                   TextBoxLines(CL) = TextBoxLines(CL + 1)
  249.                   If CL < 30 Then
  250.                      RedrawLine False, CL
  251.                   End If
  252.               Next
  253.               PicTextArea.Refresh
  254.               TextBoxLines(1000) = ""
  255.               RedrawLine False
  256.               CurerentLine = TT - 1
  257.               CurretLeft = TL + 1
  258.               RaiseEvent LineChanged((TT), TT - 1)
  259.               PropertyChanged "Current_Line"
  260.            End If
  261.            
  262.            If CurretLeft > Len(TextBoxLines(CurerentLine)) Then CurretLeft = Len(TextBoxLines(CurerentLine)) + 1
  263.            RedrawLine
  264.       Case vbKeyDelete
  265.             'Todo: code the shit for delete again
  266.            If CurretLeft <= Len(TextBoxLines(CurerentLine)) Then
  267.              TextBoxLines(CurerentLine) = Mid(TextBoxLines(CurerentLine), 1, CurretLeft - 1) & Mid(TextBoxLines(CurerentLine), CurretLeft + 1)
  268.            Else
  269.               TT = CurerentLine
  270.               TL = Len(TextBoxLines(CurerentLine))
  271.               TextBoxLines(CurerentLine) = TextBoxLines(CurerentLine) & TextBoxLines(CurerentLine + 1)
  272.               RedrawLine False
  273.               For CL = TT + 1 To 999
  274.                   TextBoxLines(CL) = TextBoxLines(CL + 1)
  275.                   If CL < TT + PicTextArea.Height \ PicTextArea.TextHeight("|") Then
  276.                         RedrawLine False, CL
  277.                   End If
  278.               Next
  279.               PicTextArea.Refresh
  280.               TextBoxLines(1000) = ""
  281.               RedrawLine False
  282.               CurerentLine = TT - 1
  283.               If CurerentLine < 0 Then CurerentLine = 0
  284.               RaiseEvent LineChanged((TT), (CurerentLine))
  285.               CurretLeft = TL + 1
  286.               PropertyChanged "Current_Line"
  287.            End If
  288.            RedrawLine
  289.       Case vbKeyReturn
  290.            'Shift all lines under the currentline down
  291.            TT = CurerentLine
  292.                       
  293.            For CL = 999 To TT + 2 Step -1
  294.                 TextBoxLines(CL) = TextBoxLines(CL - 1)
  295.                 'scroll affected
  296.                 If CL < TT + PicTextArea.Height \ PicTextArea.TextHeight("|") Then
  297.                    RedrawLine False, CL
  298.                 End If
  299.             Next
  300.             DoEvents
  301.             PicTextArea.Refresh
  302.             TextBoxLines(TT + 1) = Mid(TextBoxLines(TT), CurretLeft)
  303.             RedrawLine False, TT + 1
  304.             TextBoxLines(TT) = Mid(TextBoxLines(TT), 1, CurretLeft - 1)
  305.             RedrawLine False, TT
  306.             PicTextArea.Refresh
  307.             CurerentLine = CurerentLine + 1
  308.             NoOfLines = NoOfLines + 1
  309.             RaiseEvent LineChanged((TT), (CurerentLine))
  310.             PropertyChanged "Current_Line"
  311.       Case vbKeyHome
  312.             CurretLeft = 1
  313.       Case vbKeyEnd
  314.             CurretLeft = Len(TextBoxLines(CurerentLine)) + 1
  315.   End Select
  316.   RedrawLine True
  317.   BitBlt picTextBuffer.hdc, 0, 0, PicTextArea.Width, PicTextArea.Height, PicTextArea.hdc, 0, 0, SRCCOPY
  318.   DoEvents
  319.   PrevEventsHandled = True
  320. End If
  321. End Sub
  322.  
  323. Sub RedrawLine(Optional BlinkSt As Boolean = False, Optional ByVal lLine As Long = -1)
  324.    Dim WordsInLine() As String, CurrX As Long
  325.    Dim ChrX&, IsComment As Boolean
  326.    Dim IsStringBlock As Boolean, cSelection As Boolean
  327.    Dim I&
  328.    'Dim WordsInLine2() As String,TempLine As String
  329.    If lLine = -1 Then lLine = CurerentLine
  330.    LineBuffer.Cls
  331.       
  332. '      TempLine = Trim(TextBoxLines(CurerentLine))
  333. '      TempLine = Replace(TempLine, "(", " ")
  334. '      TempLine = Replace(TempLine, ")", " ")
  335. '      TempLine = Replace(TempLine, ".", " ")
  336. '      TempLine = Replace(TempLine, ",", " ")
  337.       
  338.    If CurerentLine < 0 Then Exit Sub
  339.       
  340.    If Lineproperties(lLine) = 0 Then
  341.       If LineSelected(lLine) Then
  342.          LineBuffer.BackColor = BlendColors(Selector.Point(1, 1), PicTextArea.BackColor, 90)
  343.  
  344.          '&HFFA5A5
  345.          LineBuffer.ForeColor = &H5A0000
  346.          'If TextBoxLines(lLine) <> "" Then
  347.             cSelection = True
  348.          'End If
  349.       Else
  350.          LineBuffer.BackColor = PicTextArea.BackColor: LineBuffer.ForeColor = 0
  351.          cSelection = False
  352.       End If
  353.       WordsInLine = Split(" " & TextBoxLines(lLine), " ")
  354.       'WordsInLine2 = Split(" " & TextBoxLines(CurerentLine) & " ", " ")
  355.       CurrX = 0
  356.       For I = 1 To UBound(WordsInLine())
  357.          LineBuffer.CurrentX = CurrX
  358.          LineBuffer.CurrentY = 0
  359.          If IsKeyword(WordsInLine(I)) And Not (IsComment Or IsStringBlock) Then
  360.             LineBuffer.ForeColor = &HFF0000
  361.          Else
  362.             If CountChars(WordsInLine(I), StringSymbol) + 2 Mod 2 = 1 Then IsStringBlock = Not IsStringBlock
  363.             
  364.             If InStr(1, WordsInLine(I), CommentSymbol) <> 0 And Not IsStringBlock Then
  365.                'LineBuffer.ForeColor = &H9000&
  366.                'IsComment = True
  367.             
  368.             ElseIf IsComment And Not IsStringBlock Then
  369.                'LineBuffer.ForeColor = &H9000&
  370.             Else
  371.                If LineSelected(lLine) Then
  372.                   LineBuffer.ForeColor = &H5A0000
  373.                Else
  374.                   ''''The next foked things up. it cleared the buffer'''''LineBuffer.BackColor = vbWhite
  375.                   LineBuffer.ForeColor = vbBlack
  376.                   DoEvents
  377.                End If
  378.             End If
  379.          End If
  380. '         Debug.Print LineBuffer.CurrentX; LineBuffer.CurrentY
  381.          LineBuffer.Print WordsInLine(I)
  382.          LineBuffer.Refresh
  383.          CurrX = CurrX + LineBuffer.TextWidth(WordsInLine(I)) + LineBuffer.TextWidth(" ")
  384.          'ChrX = ChrX + Len(WordsInLine(I))
  385.       Next I
  386.    Else
  387.          Select Case Lineproperties(CurerentLine)
  388.                 Case 1: LineBuffer.BackColor = vbYellow: LineBuffer.ForeColor = 0
  389.                 Case 2: LineBuffer.BackColor = &H80: LineBuffer.ForeColor = vbWhite
  390.                 Case 3: LineBuffer.BackColor = vbWhite: LineBuffer.ForeColor = vbRed
  391.          End Select
  392.          LineBuffer.Print TextBoxLines(lLine)
  393.    End If
  394.       DrawBlinkingLine BlinkSt, cSelection
  395.       CopyBufferToTextbox lLine
  396. End Sub
  397.  
  398. Function CountChars(String1$, Charac$)
  399.    Dim I&, C&
  400.    For I = 1 To Len(String1) - Len(Charac$) + 1
  401.        If Mid(String1, I, Len(Charac)) = Charac Then C = C + 1
  402.    Next I
  403.    CountChars = C
  404. End Function
  405.  
  406. Function IsKeyword(ByVal Word As String) As Boolean
  407. Attribute IsKeyword.VB_Description = "Returns if a word is a keyword"
  408.    Dim Flag As Boolean, I&
  409.    Flag = False
  410.    On Error GoTo Skoops
  411.    If Word <> "" Then
  412.      Word = UCase(Word)
  413.      For I = 1 To UBound(vbsKeywords())
  414.         If UCase(vbsKeywords(I)) = Word Then
  415.            Flag = True
  416.            Exit For
  417.         End If
  418.      Next I
  419.      IsKeyword = Flag
  420.    End If
  421. Exit Function
  422. Skoops:
  423. If Err.Number <> 0 Then IsKeyword = False
  424. End Function
  425.  
  426. Private Sub PicTextArea_KeyPress(KeyAscii As Integer)
  427.    RaiseEvent KeyPress(KeyAscii)
  428.    On Error Resume Next
  429.    DeselectAll
  430.    If KeyAscii >= 32 And CurretLeft > 0 Then
  431.       TextBoxLines(CurerentLine) = Mid(TextBoxLines(CurerentLine), 1, CurretLeft - 1) & Chr(KeyAscii) & Mid(TextBoxLines(CurerentLine), CurretLeft)
  432.       CurretLeft = CurretLeft + 1
  433.       RedrawLine True
  434.       BitBlt picTextBuffer.hdc, 0, 0, PicTextArea.Width, PicTextArea.Height, PicTextArea.hdc, 0, 0, SRCCOPY
  435.    End If
  436.    
  437.    'PicTextArea.Refresh
  438. End Sub
  439. '
  440. 'Sub DrawBlinkingLine(lVisible As Boolean, Optional cSelection As Boolean)
  441. '
  442. ' If CurretLeft > 0 Then
  443. '   BlinkingLineX = LineBuffer.TextWidth(Mid(TextBoxLines(CurerentLine), 1, CurretLeft - 1))
  444. '   '(-DrawBlinkingLine * vbWhite) is a combination of boolean algebra with maths
  445. '   If cSelection Then
  446. '      LineBuffer.Line (BlinkingLineX, 0)-(BlinkingLineX, LineBuffer.Height), &HFFA5A5
  447. '   Else
  448. '      LineBuffer.Line (BlinkingLineX, 0)-(BlinkingLineX, LineBuffer.Height), ((lVisible + 1) * vbWhite)
  449. '   End If
  450. ' End If
  451. 'End Sub
  452.  
  453. Private Sub PicTextArea_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  454.    RaiseEvent MouseDown(Button, Shift, X, Y)
  455.    Dim I&, FoundCharOver As Boolean
  456. If Button = 1 Then DeselectAll
  457.   
  458.    RedrawLine
  459.    CurerentLine = Int(Y / (LineBuffer.TextHeight("|") + 0))
  460.    If CurerentLine < 0 Then Exit Sub
  461.    If CurerentLine > NoOfLines Then CurerentLine = NoOfLines
  462.    For I = 1 To Len(TextBoxLines(CurerentLine))
  463.       If X < LineBuffer.TextWidth(Mid(TextBoxLines(CurerentLine), 1, I)) Then
  464.          CurretLeft = I
  465.          FoundCharOver = True
  466.          Exit For
  467.       End If
  468.    Next I
  469.       
  470.    If Not FoundCharOver Then CurretLeft = Len(TextBoxLines(CurerentLine)) + 1
  471.  
  472. If Button = 1 Then
  473.    DownChr& = CurretLeft
  474.    DownLne& = CurerentLine
  475.  
  476.    'Alpha_Blend PicTextArea.hdc, Selector.hdc, (X), (Y), 0, 0, 20, Selector.Height, 20, Selector.Height, 128
  477.    RedrawLine
  478.    Timer1.Enabled = False
  479. End If
  480. MoveChr = 0
  481. MoveLne = 0
  482. End Sub
  483.  
  484. Private Sub PicTextArea_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  485. RaiseEvent MouseMove(Button, Shift, X, Y)
  486. On Error Resume Next
  487. Dim FoundCharOver As Boolean
  488. Dim XLeft&, XRight&, XWidth&, XTmp&, I&, ML&, YLn&
  489. Dim X2Left&, X2Right&, X2Width&
  490. If DownChr > 0 And Button = 1 Then
  491.    For I = 1 To Len(TextBoxLines(CurerentLine))
  492.       If X < LineBuffer.TextWidth(Mid(TextBoxLines(CurerentLine), 1, I)) Then
  493.          ML = I
  494.          FoundCharOver = True
  495.          Exit For
  496.       End If
  497.    Next I
  498.    YLn = Int(Y / (LineBuffer.TextHeight("|") + 0))
  499.    If YLn < 0 Then YLn = 0
  500.    
  501.    If Not FoundCharOver Then ML = Len(TextBoxLines(YLn))
  502.   ' If YLn > DownLne Then ML = Len(TextBoxLines(DownLne))
  503.  
  504.    'Debug.Print YLn; DownLne
  505.    XLeft = LineBuffer.TextWidth(Mid(TextBoxLines(DownLne), 1, DownChr - 1))
  506.    XRight = LineBuffer.TextWidth(Mid(TextBoxLines(YLn), 1, ML))
  507.    PicTextArea.Refresh
  508.    If XLeft > XRight Then
  509.       XTmp = XLeft
  510.       XLeft = XRight
  511.       If X < 2 Then XLeft = 0
  512.       XRight = XTmp
  513.    End If
  514.    If YLn > DownLne Then
  515.       XLeft = LineBuffer.TextWidth(Mid(TextBoxLines(DownLne), 1, DownChr - 1))
  516.       XRight = LineBuffer.TextWidth(TextBoxLines(DownLne))
  517.       
  518.       X2Left = 0
  519.       X2Right = LineBuffer.TextWidth(Mid(TextBoxLines(YLn), 1, ML))
  520.    End If
  521.    
  522.    XWidth = XRight - XLeft
  523.    X2Width = X2Right - X2Left
  524.  
  525.    BitBlt PicTextArea.hdc, 0, 0, PicTextArea.Width, PicTextArea.Height, picTextBuffer.hdc, 0, 0, SRCCOPY
  526.    If YLn > DownLne Then
  527.      For I = DownLne + 1 To YLn - 1
  528.        LineSelected(I) = True
  529.        RedrawLine False, I
  530.      Next
  531.    Else
  532.      For I = YLn + 1 To DownLne
  533.        LineSelected(I) = True
  534.        RedrawLine False, I
  535.      Next
  536.    End If
  537.    MoveChr = ML
  538.    MoveLne = YLn
  539.    Alpha_Blend PicTextArea.hdc, Selector.hdc, XLeft + 1, DownLne * LineBuffer.TextHeight("|"), 0, 0, XWidth, Selector.Height, XWidth, Selector.Height, 90
  540.    Alpha_Blend PicTextArea.hdc, Selector.hdc, X2Left + 1, YLn * LineBuffer.TextHeight("|"), 0, 0, X2Width, Selector.Height, X2Width, Selector.Height, 90
  541.    'if YLn = DownLne and DownChr = XRight
  542.    PicTextArea.Refresh
  543. End If
  544. End Sub
  545.  
  546. Private Sub PicTextArea_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  547.    RaiseEvent MouseUp(Button, Shift, X, Y)
  548.    If MoveChr = 0 And MoveLne = 0 Then
  549.       Timer1.Enabled = True
  550.    End If
  551. End Sub
  552.  
  553. Private Sub Timer1_Timer()
  554.   BlinkState = Not BlinkState
  555.   'If GetFocus = PicTextArea.hWnd Or GetFocus = UserControl.hWnd Then
  556.      RedrawLine BlinkState
  557.   'Else
  558.   '   RedrawLine False
  559.   'End If
  560.   LineBuffer.Refresh
  561. End Sub
  562.  
  563. Sub CopyBufferToTextbox(Optional ByVal lLine As Long = -1)
  564.    If lLine = -1 Then lLine = CurerentLine
  565.    PicTextArea.Line (0, lLine * (LineBuffer.TextHeight("|") + 0))-(1000, lLine * (LineBuffer.TextHeight("|") + 0) + (LineBuffer.TextHeight("|") - 1)), PicTextArea.BackColor, BF
  566.    PicTextArea.PaintPicture LineBuffer.Image, 1, lLine * (LineBuffer.TextHeight("|") + 0), LineBuffer.TextWidth(TextBoxLines(lLine)) + 1, , , , LineBuffer.TextWidth(TextBoxLines(lLine)) + 1
  567. End Sub
  568. '75mins
  569.  
  570. Private Sub UserControl_Initialize()
  571.  
  572.    'LineSelected(1) = True
  573. End Sub
  574. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  575. 'MappingInfo=PicTextArea,PicTextArea,-1,BackColor
  576. Public Property Get BackColor() As OLE_COLOR
  577. Attribute BackColor.VB_Description = "Returns/sets the background color used to display text and graphics in an object."
  578.     BackColor = PicTextArea.BackColor
  579. End Property
  580.  
  581. Public Property Let BackColor(ByVal New_BackColor As OLE_COLOR)
  582.     PicTextArea.BackColor() = New_BackColor
  583.     picTextBuffer.BackColor() = New_BackColor
  584.     PropertyChanged "BackColor"
  585. End Property
  586.  
  587. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  588. 'MappingInfo=PicTextArea,PicTextArea,-1,BorderStyle
  589. Public Property Get BorderStyle() As Integer
  590. Attribute BorderStyle.VB_Description = "Returns/sets the border style for an object."
  591.     BorderStyle = PicTextArea.BorderStyle
  592. End Property
  593.  
  594. Public Property Let BorderStyle(ByVal New_BorderStyle As Integer)
  595.     PicTextArea.BorderStyle() = New_BorderStyle
  596.     PropertyChanged "BorderStyle"
  597. End Property
  598.  
  599. Private Sub PicTextArea_Click()
  600.     RaiseEvent Click
  601. End Sub
  602.  
  603. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  604. 'MappingInfo=PicTextArea,PicTextArea,-1,Cls
  605. Public Sub Cls()
  606. Attribute Cls.VB_Description = "Clears graphics and text generated at run time from a Form, Image, or PictureBox."
  607.     PicTextArea.Cls
  608. End Sub
  609.  
  610. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  611. 'MappingInfo=PicTextArea,PicTextArea,-1,CurrentX
  612. Public Property Get CurrentX() As Single
  613. Attribute CurrentX.VB_Description = "Returns/sets the horizontal coordinates for next print or draw method."
  614.     CurrentX = PicTextArea.CurrentX
  615. End Property
  616.  
  617. Public Property Let CurrentX(ByVal New_CurrentX As Single)
  618.     PicTextArea.CurrentX() = New_CurrentX
  619.     PropertyChanged "CurrentX"
  620. End Property
  621.  
  622. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  623. 'MappingInfo=PicTextArea,PicTextArea,-1,CurrentY
  624. Public Property Get CurrentY() As Single
  625. Attribute CurrentY.VB_Description = "Returns/sets the vertical coordinates for next print or draw method."
  626.     CurrentY = PicTextArea.CurrentY
  627. End Property
  628.  
  629. Public Property Let CurrentY(ByVal New_CurrentY As Single)
  630.     PicTextArea.CurrentY() = New_CurrentY
  631.     PropertyChanged "CurrentY"
  632. End Property
  633.  
  634. Private Sub PicTextArea_DblClick()
  635.     RaiseEvent DblClick
  636. End Sub
  637.  
  638. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  639. 'MappingInfo=PicTextArea,PicTextArea,-1,DrawWidth
  640. Public Property Get DrawWidth() As Integer
  641. Attribute DrawWidth.VB_Description = "Returns/sets the line width for output from graphics methods."
  642.     DrawWidth = PicTextArea.DrawWidth
  643. End Property
  644.  
  645. Public Property Let DrawWidth(ByVal New_DrawWidth As Integer)
  646.     PicTextArea.DrawWidth() = New_DrawWidth
  647.     PropertyChanged "DrawWidth"
  648. End Property
  649.  
  650. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  651. 'MappingInfo=PicTextArea,PicTextArea,-1,Enabled
  652. Public Property Get Enabled() As Boolean
  653. Attribute Enabled.VB_Description = "Returns/sets a value that determines whether an object can respond to user-generated events."
  654.     Enabled = PicTextArea.Enabled
  655. End Property
  656.  
  657. Public Property Let Enabled(ByVal New_Enabled As Boolean)
  658.     PicTextArea.Enabled() = New_Enabled
  659.     PropertyChanged "Enabled"
  660. End Property
  661.  
  662. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  663. 'MappingInfo=LineBuffer,LineBuffer,-1,Font
  664. Public Property Get Font() As Font
  665. Attribute Font.VB_Description = "Returns a Font object."
  666. Attribute Font.VB_UserMemId = -512
  667.     Set Font = LineBuffer.Font
  668. End Property
  669.  
  670. Public Property Set Font(ByVal New_Font As Font)
  671.     Set LineBuffer.Font = New_Font
  672.     Set PicTextArea.Font = New_Font
  673.     Set picTextBuffer.Font = New_Font
  674.     Set Selector.Font = New_Font
  675.     LineBuffer.Height = LineBuffer.TextHeight("|")
  676.     Selector.Height = LineBuffer.TextHeight("|")
  677.     PropertyChanged "Font"
  678. End Property
  679.  
  680. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  681. 'MappingInfo=PicTextArea,PicTextArea,-1,ForeColor
  682. Public Property Get ForeColor() As OLE_COLOR
  683. Attribute ForeColor.VB_Description = "Returns/sets the foreground color used to display normal text and graphics in an object."
  684.     ForeColor = PicTextArea.ForeColor
  685. End Property
  686.  
  687. Public Property Let ForeColor(ByVal New_ForeColor As OLE_COLOR)
  688.     PicTextArea.ForeColor() = New_ForeColor
  689.     PropertyChanged "ForeColor"
  690. End Property
  691.  
  692. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  693. 'MappingInfo=PicTextArea,PicTextArea,-1,hDC
  694. Public Property Get hdc() As Long
  695. Attribute hdc.VB_Description = "Returns a handle (from Microsoft Windows) to the object's device context."
  696.     hdc = PicTextArea.hdc
  697. End Property
  698.  
  699. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  700. 'MappingInfo=PicTextArea,PicTextArea,-1,HasDC
  701. Public Property Get HasDC() As Boolean
  702. Attribute HasDC.VB_Description = "Determines whether a unique display context is allocated for the control."
  703.     HasDC = PicTextArea.HasDC
  704. End Property
  705.  
  706. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  707. 'MappingInfo=PicTextArea,PicTextArea,-1,hWnd
  708. Public Property Get hwnd() As Long
  709. Attribute hwnd.VB_Description = "Returns a handle (from Microsoft Windows) to an object's window."
  710.     hwnd = PicTextArea.hwnd
  711. End Property
  712.  
  713. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  714. 'MappingInfo=Timer1,Timer1,-1,Interval
  715. Public Property Get Interval() As Long
  716. Attribute Interval.VB_Description = "Returns/Sets the number of seconds the curret will be blinking"
  717.     Interval = Timer1.Interval
  718. End Property
  719.  
  720. Public Property Let Interval(ByVal New_Interval As Long)
  721.     Timer1.Interval() = New_Interval
  722.     PropertyChanged "Interval"
  723. End Property
  724.  
  725. Private Sub PicTextArea_KeyUp(KeyCode As Integer, Shift As Integer)
  726.     RaiseEvent KeyUp(KeyCode, Shift)
  727. End Sub
  728.  
  729. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  730. 'MappingInfo=PicTextArea,PicTextArea,-1,Line
  731. Public Sub Line(ByVal X1 As Single, ByVal Y1 As Single, ByVal X2 As Single, ByVal Y2 As Single, ByVal Color As Long)
  732. Attribute Line.VB_Description = "Draws lines and rectangles on an object."
  733.     PicTextArea.Line (X1, Y1)-(X2, Y2), Color
  734. End Sub
  735.  
  736. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  737. 'MappingInfo=PicTextArea,PicTextArea,-1,MouseIcon
  738. Public Property Get MouseIcon() As Picture
  739. Attribute MouseIcon.VB_Description = "Sets a custom mouse icon."
  740.     Set MouseIcon = PicTextArea.MouseIcon
  741. End Property
  742.  
  743. Public Property Set MouseIcon(ByVal New_MouseIcon As Picture)
  744.     Set PicTextArea.MouseIcon = New_MouseIcon
  745.     PropertyChanged "MouseIcon"
  746. End Property
  747.  
  748. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  749. 'MappingInfo=PicTextArea,PicTextArea,-1,MousePointer
  750. Public Property Get MousePointer() As Integer
  751. Attribute MousePointer.VB_Description = "Returns/sets the type of mouse pointer displayed when over part of an object."
  752.     MousePointer = PicTextArea.MousePointer
  753. End Property
  754.  
  755. Public Property Let MousePointer(ByVal New_MousePointer As Integer)
  756.     PicTextArea.MousePointer() = New_MousePointer
  757.     PropertyChanged "MousePointer"
  758. End Property
  759.  
  760. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  761. 'MappingInfo=PicTextArea,PicTextArea,-1,PaintPicture
  762. Public Sub PaintPicture(ByVal Picture As Picture, ByVal X1 As Single, ByVal Y1 As Single, Optional ByVal Width1 As Variant, Optional ByVal Height1 As Variant, Optional ByVal X2 As Variant, Optional ByVal Y2 As Variant, Optional ByVal Width2 As Variant, Optional ByVal Height2 As Variant, Optional ByVal Opcode As Variant)
  763. Attribute PaintPicture.VB_Description = "Draws the contents of a graphics file on a Form, PictureBox, or Printer object."
  764.     PicTextArea.PaintPicture Picture, X1, Y1, Width1, Height1, X2, Y2, Width2, Height2, Opcode
  765. End Sub
  766.  
  767. 'The Underscore following "Point" is necessary because it
  768. 'is a Reserved Word in VBA.
  769. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  770. 'MappingInfo=PicTextArea,PicTextArea,-1,Point
  771. Public Function Point(X As Single, Y As Single) As Long
  772. Attribute Point.VB_Description = "Returns, as an integer of type Long, the RGB color of the specified point on a Form or PictureBox object."
  773.     Point = PicTextArea.Point(X, Y)
  774. End Function
  775.  
  776. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  777. 'MappingInfo=UserControl,UserControl,-1,PopupMenu
  778. Public Sub PopupMenu(ByVal Menu As Object, Optional ByVal Flags As Variant, Optional ByVal X As Variant, Optional ByVal Y As Variant, Optional ByVal DefaultMenu As Variant)
  779. Attribute PopupMenu.VB_Description = "Displays a pop-up menu on an MDIForm or Form object."
  780.     UserControl.PopupMenu Menu, Flags, X, Y, DefaultMenu
  781. End Sub
  782.  
  783. 'The Underscore following "PSet" is necessary because it
  784. 'is a Reserved Word in VBA.
  785. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  786. 'MappingInfo=PicTextArea,PicTextArea,-1,PSet
  787. Public Sub PSet_(X As Single, Y As Single, Color As Long)
  788.     PicTextArea.PSet Step(X, Y), Color
  789. End Sub
  790.  
  791. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  792. 'MappingInfo=PicTextArea,PicTextArea,-1,Refresh
  793. Public Sub Refresh()
  794. Attribute Refresh.VB_Description = "Forces a complete repaint of a object."
  795.     PicTextArea.Refresh
  796. End Sub
  797.  
  798. Private Sub UserControl_Resize()
  799.     RaiseEvent Resize
  800.     PicTextArea.Move 0, 0, UserControl.Width / 15, UserControl.Height / 15
  801.     picTextBuffer.Move 0, 0, UserControl.Width / 15, UserControl.Height / 15
  802.     LineBuffer.Width = UserControl.Width / 15
  803. End Sub
  804.  
  805. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  806. 'MappingInfo=LineBuffer,LineBuffer,-1,TextHeight
  807. Public Function TextHeight(ByVal Str As String) As Single
  808. Attribute TextHeight.VB_Description = "Returns the height of a text string as it would be printed in the current font."
  809.     TextHeight = LineBuffer.TextHeight(Str)
  810. End Function
  811.  
  812. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  813. 'MappingInfo=LineBuffer,LineBuffer,-1,TextWidth
  814. Public Function TextWidth(ByVal Str As String) As Single
  815. Attribute TextWidth.VB_Description = "Returns the width of a text string as it would be printed in the current font."
  816.     TextWidth = LineBuffer.TextWidth(Str)
  817. End Function
  818.  
  819. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  820. 'MappingInfo=PicTextArea,PicTextArea,-1,ToolTipText
  821. Public Property Get ToolTipText() As String
  822. Attribute ToolTipText.VB_Description = "Returns/sets the text displayed when the mouse is paused over the control."
  823.     ToolTipText = PicTextArea.ToolTipText
  824. End Property
  825.  
  826. Public Property Let ToolTipText(ByVal New_ToolTipText As String)
  827.     PicTextArea.ToolTipText() = New_ToolTipText
  828.     PropertyChanged "ToolTipText"
  829. End Property
  830.  
  831. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  832. 'MemberInfo=14
  833. Public Function DrawBlinkingLine(lVisible As Boolean, Optional cSelection As Boolean) As Variant
  834.    'To do: make it blink
  835.    If CurretLeft > 0 Then
  836.       BlinkingLineX = LineBuffer.TextWidth(Mid(TextBoxLines(CurerentLine), 1, CurretLeft - 1))
  837.    End If
  838.    '(-DrawBlinkingLine * vbWhite) is a combination of boolean algebra with maths
  839.    If cSelection Then
  840.       LineBuffer.Line (BlinkingLineX, 0)-(BlinkingLineX, LineBuffer.Height), &HFFA5A5
  841.    Else
  842.       LineBuffer.Line (BlinkingLineX, 0)-(BlinkingLineX, LineBuffer.Height), ((lVisible + 1) * vbWhite)
  843.    End If
  844. End Function
  845.  
  846. 'Load property values from storage
  847. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  848.     Dim I&
  849.     
  850.     UserControl.ScaleMode = vbPixels
  851.     PicTextArea.AutoRedraw = True
  852.     PicTextArea.ScaleMode = vbPixels
  853.     LineBuffer.AutoRedraw = True
  854.     LineBuffer.ScaleMode = vbPixels
  855.     
  856.     PicTextArea.BackColor = PropBag.ReadProperty("BackColor", &H80000005)
  857.     picTextBuffer.BackColor = PropBag.ReadProperty("BackColor", &H80000005)
  858.     PicTextArea.BorderStyle = PropBag.ReadProperty("BorderStyle", 0)
  859.     PicTextArea.CurrentX = PropBag.ReadProperty("CurrentX", 0)
  860.     PicTextArea.CurrentY = PropBag.ReadProperty("CurrentY", 0)
  861.     PicTextArea.DrawWidth = PropBag.ReadProperty("DrawWidth", 1)
  862.     PicTextArea.Enabled = PropBag.ReadProperty("Enabled", True)
  863.     Set LineBuffer.Font = PropBag.ReadProperty("Font", Ambient.Font)
  864.     Set PicTextArea.Font = PropBag.ReadProperty("Font", Ambient.Font)
  865.     Set picTextBuffer.Font = PropBag.ReadProperty("Font", Ambient.Font)
  866.     Set Selector.Font = PropBag.ReadProperty("Font", Ambient.Font)
  867.     PicTextArea.ForeColor = PropBag.ReadProperty("ForeColor", &H80000012)
  868.     Timer1.Interval = PropBag.ReadProperty("Interval", 0)
  869.     Set MouseIcon = PropBag.ReadProperty("MouseIcon", Nothing)
  870.     PicTextArea.MousePointer = PropBag.ReadProperty("MousePointer", 3)
  871.     PicTextArea.ToolTipText = PropBag.ReadProperty("ToolTipText", "")
  872.     m_Keywords = PropBag.ReadProperty("Keywords", m_def_Keywords)
  873.     m_KeywordColor = PropBag.ReadProperty("KeywordColor", m_def_KeywordColor)
  874.     m_CommentColor = PropBag.ReadProperty("CommentColor", m_def_CommentColor)
  875.     
  876.     For I = 0 To UBound(TextBoxLines)
  877.          TextBoxLines(I) = PropBag.ReadProperty("TextboxLine" & I, m_def_TextboxLine)
  878.          If I < 40 Then RedrawLine False, I
  879.     Next I
  880.     
  881.     Erase vbsKeywords
  882.     vbsKeywords = Split("," & m_Keywords & ",", ",")
  883.        
  884.     CurerentLine = 0
  885.     CurretLeft = 1
  886.     LineBuffer.Height = LineBuffer.TextHeight("|")
  887.     Selector.Height = LineBuffer.TextHeight("|")
  888.      
  889.     BitBlt picTextBuffer.hdc, 0, 0, PicTextArea.Width, PicTextArea.Height, PicTextArea.hdc, 0, 0, SRCCOPY
  890.     NoOfLines = 4
  891.    
  892.    
  893.     CurerentLine = PropBag.ReadProperty("Current_Line", 0)
  894.     m_Top_Line = PropBag.ReadProperty("Top_Line", m_def_Top_Line)
  895.     m_Number_of_Lines = PropBag.ReadProperty("Number_of_Lines", m_def_Number_of_Lines)
  896.     
  897.     PrevEventsHandled = True
  898. End Sub
  899.  
  900. 'Write property values to storage
  901. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  902.     Dim I&
  903.     Call PropBag.WriteProperty("BackColor", PicTextArea.BackColor, &H80000005)
  904.     Call PropBag.WriteProperty("BorderStyle", PicTextArea.BorderStyle, 0)
  905.     Call PropBag.WriteProperty("CurrentX", PicTextArea.CurrentX, 0)
  906.     Call PropBag.WriteProperty("CurrentY", PicTextArea.CurrentY, 0)
  907.     Call PropBag.WriteProperty("DrawWidth", PicTextArea.DrawWidth, 1)
  908.     Call PropBag.WriteProperty("Enabled", PicTextArea.Enabled, True)
  909.     Call PropBag.WriteProperty("Font", LineBuffer.Font, Ambient.Font)
  910.     Call PropBag.WriteProperty("ForeColor", PicTextArea.ForeColor, &H80000012)
  911.     Call PropBag.WriteProperty("Interval", Timer1.Interval, 0)
  912.     Call PropBag.WriteProperty("MouseIcon", MouseIcon, Nothing)
  913.     Call PropBag.WriteProperty("MousePointer", PicTextArea.MousePointer, 3)
  914.     Call PropBag.WriteProperty("ToolTipText", PicTextArea.ToolTipText, "")
  915.     Call PropBag.WriteProperty("Keywords", m_Keywords, m_def_Keywords)
  916.     Call PropBag.WriteProperty("KeywordColor", m_KeywordColor, m_def_KeywordColor)
  917.     Call PropBag.WriteProperty("CommentColor", m_CommentColor, m_def_CommentColor)
  918.     For I = 0 To UBound(TextBoxLines)
  919.          If I < 40 Then Call PropBag.WriteProperty("TextboxLine" & I, TextBoxLines(I), m_def_TextboxLine)
  920.     Next I
  921.     Call PropBag.WriteProperty("Current_Line", CurerentLine, 0) 'CurrentLine =0
  922.     Call PropBag.WriteProperty("Top_Line", m_Top_Line, m_def_Top_Line)
  923.     Call PropBag.WriteProperty("Number_of_Lines", m_Number_of_Lines, m_def_Number_of_Lines)
  924. End Sub
  925.  
  926. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  927. 'MemberInfo=10,0,0,0
  928. Public Property Get Keywords() As String
  929. Attribute Keywords.VB_Description = "Returns/Sets The keywords that will be hilighted. Seperate each word with a comma"
  930.     Keywords = m_Keywords
  931. End Property
  932.  
  933. Public Property Let Keywords(ByVal New_Keywords As String)
  934.     m_Keywords = New_Keywords
  935.     PropertyChanged "Keywords"
  936. End Property
  937.  
  938. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  939. 'MemberInfo=10,0,0,0
  940. Public Property Get KeywordColor() As OLE_COLOR
  941. Attribute KeywordColor.VB_Description = "Returns/Sets the hilight color of the keywordwords"
  942.     KeywordColor = m_KeywordColor
  943. End Property
  944.  
  945. Public Property Let KeywordColor(ByVal New_KeywordColor As OLE_COLOR)
  946.     m_KeywordColor = New_KeywordColor
  947.     PropertyChanged "KeywordColor"
  948. End Property
  949.  
  950. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  951. 'MemberInfo=10,0,0,0
  952. Public Property Get CommentColor() As OLE_COLOR
  953. Attribute CommentColor.VB_Description = "Returns/Sets the color Commented line will appear in"
  954.     CommentColor = m_CommentColor
  955. End Property
  956.  
  957. Public Property Let CommentColor(ByVal New_CommentColor As OLE_COLOR)
  958.     m_CommentColor = New_CommentColor
  959.     PropertyChanged "CommentColor"
  960. End Property
  961.  
  962. ''WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  963. ''MemberInfo=13,0,0,""
  964. Public Property Get TextboxLine(ByVal Index As Integer) As String
  965.     TextboxLine = TextBoxLines(Index)
  966. End Property
  967.  
  968. Public Property Let TextboxLine(ByVal Index As Integer, ByVal New_TextboxLine As String)
  969.     TextBoxLines(Index) = New_TextboxLine
  970.     RedrawLine False, Index
  971.     BitBlt picTextBuffer.hdc, 0, 0, PicTextArea.Width, PicTextArea.Height, PicTextArea.hdc, 0, 0, SRCCOPY
  972.     PropertyChanged "TextboxLine" & Index
  973. End Property
  974.  
  975. 'Initialize Properties for User Control
  976. Private Sub UserControl_InitProperties()
  977.     m_Keywords = m_def_Keywords
  978.     m_KeywordColor = m_def_KeywordColor
  979.     m_CommentColor = m_def_CommentColor
  980.     m_TextboxLine = m_def_TextboxLine
  981.     m_Top_Line = m_def_Top_Line
  982.     m_Number_of_Lines = m_def_Number_of_Lines
  983. End Sub
  984.  
  985. Sub DeselectAll()
  986.    Dim I&
  987.    For I = 0 To 1000
  988.        LineSelected(I) = False
  989.    Next
  990.    BitBlt PicTextArea.hdc, 0, 0, PicTextArea.Width, PicTextArea.Height, picTextBuffer.hdc, 0, 0, SRCCOPY
  991.    PicTextArea.Refresh
  992.    Timer1.Enabled = True
  993. End Sub
  994.  
  995. Function BlendColors(Color1&, Color2&, Strength As Byte, Optional Brightness As Byte = 0) As Long
  996.    'Function to blend two colors.
  997.    'Splits Both color R, G, B's
  998.    'Add up the colors ( 0.4 * Red1 + (1-0.4) * Red2 = RedOut) and so on
  999.    Dim Power#
  1000.    Dim B1&, G1&, R1&
  1001.    Dim B2&, G2&, R2&
  1002.    
  1003.    Power# = Strength / 255
  1004.    
  1005.    B1 = (Color1 And &HFF&) * Power
  1006.    G1 = ((Color1 And &HFF00&) \ &H100&) * Power
  1007.    R1 = ((Color1 And &HFF0000) \ &H10000) * Power
  1008.    
  1009.    B2 = (Color2 And &HFF&) * (1 - Power)
  1010.    G2 = ((Color2 And &HFF00&) \ &H100&) * (1 - Power)
  1011.    R2 = ((Color2 And &HFF0000) \ &H10000) * (1 - Power)
  1012.    
  1013.    BlendColors = RGB(B1 + B2 + Brightness, G1 + G2 + Brightness, R1 + R2 + Brightness)
  1014. End Function
  1015. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  1016. 'MemberInfo=7,0,0,0
  1017. Public Property Get Current_Line() As Integer
  1018. Attribute Current_Line.VB_Description = "The Line The Curret is currently over"
  1019.     Current_Line = CurerentLine
  1020. End Property
  1021.  
  1022. Public Property Let Current_Line(ByVal New_Current_Line As Integer)
  1023.     CurerentLine = New_Current_Line
  1024.     PropertyChanged "Current_Line"
  1025. End Property
  1026.  
  1027. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  1028. 'MemberInfo=7,0,0,0
  1029. Public Property Get Top_Line() As Integer
  1030.     Top_Line = m_Top_Line
  1031. End Property
  1032.  
  1033. Public Property Let Top_Line(ByVal New_Top_Line As Integer)
  1034.     m_Top_Line = New_Top_Line
  1035.     PropertyChanged "Top_Line"
  1036. End Property
  1037.  
  1038. 'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
  1039. 'MemberInfo=7,0,0,0
  1040. Public Property Get Number_of_Lines() As Integer
  1041.     Number_of_Lines = m_Number_of_Lines
  1042. End Property
  1043.  
  1044. Public Property Let Number_of_Lines(ByVal New_Number_of_Lines As Integer)
  1045.     m_Number_of_Lines = New_Number_of_Lines
  1046.     PropertyChanged "Number_of_Lines"
  1047. End Property
  1048.  
  1049. Sub LineSyntaxHilight(Line_No As Integer, HilightType As Byte)
  1050.     Lineproperties(Line_No) = HilightType
  1051.     RedrawLine False, Line_No
  1052.     PicTextArea.Refresh
  1053. End Sub
  1054.  
  1055.