Export To HTML

Category: Controls - RichEdit

Date: 02-16-2022

Return to Index


 
'Compiler Comments:
'This code is written to compile with PBWin10. To compile with PBWin9,
'add this line:
#Include "CommCtrl.inc"
 
'Compilable Example:  (Jose Includes)
#Compiler PBWin 10
#Compile EXE
#Dim All
%Unicode=1
#Include "win32api.inc
#Include "richedit.inc"
%IDC_RichEdit = 500
Global LWords() As String, UWords() As String, MWords() As String
Global hRichEdit As DWord, hDlg As DWord, OrigRichEditProc&, CodeCase&
 
Function PBMain() As Long
   'create some sample content for the RichEdit control
   Dim Content$
   Content$ = "Function Example" + $CrLf + "Select Case MyVar" + $CrLf + "Case 12 '1st case" + $CrLf + "End " + Chr$(34) + "the <> the" + Chr$(34) + " Select" + $CrLf + "End Function"
   Content$ = Content$ + $CrLf + "'For i = 1 to 10" + $CrLf + "Incr i" + $CrLf + "Next i"
   Content$ = Content$ + $CrLf + "If x <> 2 Then" + $CrLf + Chr$(34) + "nothing" + Chr$(34) + $CrLf + "End If"
   Dialog New Pixels, 0, "Syntax Test",300,300,350,400, %WS_OverlappedWindow To hDlg
   'create RichEdit and subclass (to intercept %WM_KeyUp actions)
   LoadLibrary("riched32.dll")
   InitCommonControls
   Control Add Option, hDlg, 201, "Upper", 10, 10, 50, 20
   Control Add Option, hDlg, 202, "Lower", 90, 10, 50, 20
   Control Add Option, hDlg, 203, "Mixed", 170, 10, 50, 20
   Control Add Button, hDlg, 204, "Export", 250, 10, 50, 20
   Control Add "RichEdit", hDlg, %IDC_RichEdit, Content$, 10, 40, 150, 100, _
      %WS_Child Or %WS_Visible Or %ES_MultiLine Or %WS_VScroll Or %ES_AutoHScroll _
      Or %WS_HScroll Or %ES_AutoVScroll Or %ES_WantReturn Or %ES_NoHideSel, _
      %WS_Ex_ClientEdge
   Control Handle hDlg, %IDC_RichEdit To hRichEdit
   SetFont
   OrigRichEditProc& = SetWindowLong(GetDlgItem(hDlg, %IDC_RichEdit), %GWL_WndProc, CodePTR(TextWndProc))
   SendMessage hRichEdit, %EM_SETEVENTMASK, 0, %ENM_SELCHANGE Or %ENM_CHANGE
   Dialog Show Modal hDlg Call DlgProc
End Function
 
CallBack Function DlgProc() As Long
   Select Case CB.Msg
      Case %WM_InitDialog
         CodeCase& = 3
         Control Set Option hDlg, 203, 201, 203
         synInitializeRWords
         synApplySyntax
      Case %WM_Size
         Dim w As Long, h As Long
         Dialog Get Client CB.Hndl To w,h
         Control Set Size CB.Hndl, %IDC_RichEdit, w-20, h-20
      Case %WM_Command
         Select Case CB.Ctl
            Case 201 : CodeCase& = 1 : synApplySyntax
            Case 202 : CodeCase& = 2 : synApplySyntax
            Case 203 : CodeCase& = 3 : synApplySyntax
            Case 204
               If CB.Ctlmsg = %BN_Clicked Then
                  Local fNumber&
                  fNumber& = FreeFile
                  Open Exe.path$ + "Export.htmFor Output as fNumber&
                  Print # fNumber&, "<html><body><font face='Comic Sans MS' size=-1><b>"
                  ExportToHTML (0, SendMessage(hRichEdit, %EM_GETLINECOUNT, 0, 0) - 1, fNumber&)
                  Print # fNumber&, "</font></body></html>"
                  Close # fNumber&
               End If
         End Select
   End Select
End Function
 
Function TextWndProc(ByVal hWnd As LongByVal wMsg As LongByVal wParam As LongByVal lParam As LongAs Long
   Select Case wMsg
      Case %WM_KeyUp         'trap key up, for syntax color check while editing
         Local CurLine As Long
         CurLine = SendMessage(hRichEdit, %EM_EXLINEFROMCHAR, 0, -1)
         ScanLine(CurLine, CurLine)               'check current line only
         Function = 0 : Exit Function                  'return zero
   End Select
   TextWndProc = CallWindowProc(OrigRichEditProc&, hWnd, wMsg, wParam, lParam)
End Function
 
Sub synApplySyntax()
   MousePTR 11                   'Scan all lines
   TurnOffCol
   ScanLine(0, SendMessage(hRichEdit, %EM_GETLINECOUNT, 0, 0) - 1)
   MousePTR 0
   SetFocus hRichEdit
End Sub
 
Sub synInitializeRWords
   Local temp$, i As Long
   ReDim UWords(1000), LWords(1000), MWords(1000)
   Open Exe.Path$ + "powerbasic.synFor Input As #1