Jump to content

help to finish Rich text Editor


Recommended Posts

Hello everybody

I'm working on Rich text Editor to be able to use in any app

but I've faced two problems

1- after I set (e.g bold) to selected text then press enter to make new blank line then Enter once again, the text in html preview txt disappear and wait to make a new set for text to appear

2- when I insert an image or video ink it doesn't appear well

3- I've set a font in html view but it's working only with "bold" and if I set center align or anything else, the font changing to default

Also I hope you guys help me to make it more advanced or make the code shorter as much as possible

#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <array.au3>
;-------------------------------------------------------
Local $bld_arr[0], $rt_algn_arr[0],$lft_algn_arr[0],$cntr_algn_arr[0],$undr_ln_arr[0],$dots_arr[0],$numbrd_arr[0],$italic_arr[0], $strike_arr[0]
Local $IMG_ins_arr[0],$vid_ins_arr[0], $vid_html
Local $ib=0, $irt=0, $ilft=0, $icntr=0 , $iundr=0, $idt=0, $itlc=0, $istrk=0, $iIMG=0, $ivid=0
Local $html_fl = @ScriptDir&"\file.html"
Local $html_txt,$html_txt_tmp, $text
;-------------------------------------------------------
Local $slctd_txt_arr[0][9], $irc = 0, $text, $html_txt=""
Local $bld = "bld", $rtln = "rtln", $cntr = "cntr", $lftln = "lftln", $undrln = "undrln", $dots = "dots", $itlc = "itlc", $strk = "strk"
Local $bld_s = "<b>", $bld_e = "</b>"
Local $rt_s = '<div style="text-align: right;">'
Local $cntr_s = '<div style="text-align: center;">'
Local $lft_s = '<div style="text-align: left;">'
Local $p_e = '</div>'
Local $dots_s = '<li>'
Local $dots_e = '</li>'
Local $undrl_s = '<u>'
Local $undrl_e = '</u>'
Local $itlc_s = '<em>'
Local $itlc_e = '</em>'
Local $strk_s = '<s>'
Local $strk_e = '</s>'
;-------------------------------------------------------
;icons
Local $bold_ico = @ScriptDir&"\res\richicon\bold.ico"
Local $rt_algn_ico = @ScriptDir&"\res\richicon\rt_algn.ico"
Local $lft_algn_ico = @ScriptDir&"\res\richicon\lft_algn.ico"
Local $cntr_algn_ico = @ScriptDir&"\res\richicon\cntr_algn.ico"
Local $undr_ln_ico = @ScriptDir&"\res\richicon\undr_ln.ico"
Local $dots_ico = @ScriptDir&"\res\richicon\dots.ico"
Local $numbrd_ico = @ScriptDir&"\res\richicon\numbrd.ico"
Local $italic_ico = @ScriptDir&"\res\richicon\italic.ico"
Local $strk_ico = @ScriptDir&"\res\richicon\strk.ico"
Local $IMG_ins_ico = @ScriptDir&"\res\richicon\img.ico"
Local $vid_ins_ico = @ScriptDir&"\res\richicon\vid.ico"
Local $rst_frmat_ico = @ScriptDir&"\res\richicon\rst_frmat.ico"
;-------------------------------------------------------
Local $hGUI = GUICreate('Test', 760, 450)
;---------------------------------------
Local $bold_btn = GUICtrlCreateButton('bold', 10, 10, 30, 30,$BS_ICON)
GUICtrlSetImage($bold_btn,$bold_ico)
;---------------------------------------
Local $lft_algn_btn = GUICtrlCreateButton('lft', 40, 10, 30, 30,$BS_ICON)
GUICtrlSetImage ($lft_algn_btn, $lft_algn_ico)
;---------------------------------------
Local $cntr_algn_btn = GUICtrlCreateButton('cntr', 70, 10, 30, 30,$BS_ICON)
GUICtrlSetImage ($cntr_algn_btn, $cntr_algn_ico)
;---------------------------------------
Local $rt_algn_btn = GUICtrlCreateButton('rt', 100, 10, 30, 30,$BS_ICON)
GUICtrlSetImage ($rt_algn_btn,$rt_algn_ico)
;---------------------------------------
Local $dots_btn = GUICtrlCreateButton('dots', 130, 10, 30, 30,$BS_ICON)
GUICtrlSetImage ($dots_btn,$dots_ico)
;---------------------------------------
Local $undr_ln_btn = GUICtrlCreateButton('rundr', 160, 10, 30, 30,$BS_ICON)
GUICtrlSetImage ($undr_ln_btn,$undr_ln_ico)
;---------------------------------------
Local $italic_btn = GUICtrlCreateButton('dots', 190, 10, 30, 30,$BS_ICON)
GUICtrlSetImage ($italic_btn,$italic_ico)
;---------------------------------------
Local $strike_btn = GUICtrlCreateButton('strk', 220, 10, 30, 30,$BS_ICON)
GUICtrlSetImage ($strike_btn,$strk_ico)
;---------------------------------------
Local $IMG_ins_btn = GUICtrlCreateButton('img', 250, 10, 30, 30,$BS_ICON)
GUICtrlSetImage ($IMG_ins_btn,$IMG_ins_ico)
;---------------------------------------
Local $vid_ins_btn = GUICtrlCreateButton('img', 280, 10, 30, 30,$BS_ICON)
GUICtrlSetImage ($vid_ins_btn,$vid_ins_ico,2)
;---------------------------------------
Local $rst_frmat_btn = GUICtrlCreateButton('rstfrmt', 310, 10, 30, 30,$BS_ICON)
GUICtrlSetImage ($rst_frmat_btn,$rst_frmat_ico)
;---------------------------------------
;---------------------------------------
Local $ed_Main = GUICtrlCreateEdit("", 10, 40, 330, 400,BitOR($ES_WANTRETURN, $WS_VSCROLL))
GUICtrlSetFont(-1, 12,0,0, "Segoe UI")
;---------------------------------------
GUICtrlCreateGroup("Preview",350,10,400,430)
Local $ie = ObjCreate("Shell.Explorer.2")
Local $html_out = GUICtrlCreateObj($ie, 360, 30, 380, 400,BitOR($ES_WANTRETURN, $WS_VSCROLL))
$ie.navigate("about:blank")
GUISetState(@SW_SHOW)
;=========================================================
;=========================================================
Func Richtxt_ED($slctd_txt,$var)
   ;=========================================================
   if StringLen($slctd_txt)>0 Then
      ;-----------------------------
      $Slctd_srch = _ArraySearch($slctd_txt_arr,$slctd_txt)
      if $Slctd_srch = -1 then ; -1 = no search result
         ;-----------------------------
         ReDim $slctd_txt_arr[UBound($slctd_txt_arr)+1][9]
         $slctd_txt_arr[$irc][0] = $slctd_txt ; here save selected txt
         ;-----------------------------
         ;MsgBox(0,"",$slctd_txt&@CRLF&$var)
         ;-----------------------------
         Select
         case $var = $bld
            $slctd_txt_arr[$irc][1] = $bld
            ;-----------------------------
         case $var = $rtln
            $slctd_txt_arr[$irc][2] = $rtln
            $slctd_txt_arr[$irc][3] = ""
            $slctd_txt_arr[$irc][4] = ""
            $slctd_txt_arr[$irc][6] = ""
            ;-----------------------------
         case $var = $cntr
            $slctd_txt_arr[$irc][3] = $cntr
            $slctd_txt_arr[$irc][2] = ""
            $slctd_txt_arr[$irc][4] = ""
            $slctd_txt_arr[$irc][6] = ""
            ;-----------------------------
         case $var = $lftln
            $slctd_txt_arr[$irc][4] = $lftln
            $slctd_txt_arr[$irc][2] = ""
            $slctd_txt_arr[$irc][3] = ""
            $slctd_txt_arr[$irc][6] = ""
            ;-----------------------------
         case $var = $undrln
            $slctd_txt_arr[$irc][5] = $undrln
            ;-----------------------------
         case $var = $dots
            $slctd_txt_arr[$irc][6] = $dots
            $slctd_txt_arr[$irc][2] = ""
            $slctd_txt_arr[$irc][3] = ""
            $slctd_txt_arr[$irc][4] = ""
            ;-----------------------------
         case $var = $itlc
            $slctd_txt_arr[$irc][7] = $itlc
            ;-----------------------------
         case  $var = $strk
            $slctd_txt_arr[$irc][8] = $strk
         EndSelect
         ;-----------------------------
         $irc = $irc+1
      Else
         Select
         Case $var = $bld
            if $slctd_txt_arr[$Slctd_srch][1] = $bld then
               $slctd_txt_arr[$Slctd_srch][1] = ""
            Else
               $slctd_txt_arr[$Slctd_srch][1] = $bld
            EndIf
            ;-----------------------------
         Case $var = $rtln
            if $slctd_txt_arr[$Slctd_srch][2] = $rtln then
               $slctd_txt_arr[$Slctd_srch][2] = ""
            Else
               $slctd_txt_arr[$Slctd_srch][2] = $rtln
               $slctd_txt_arr[$Slctd_srch][3] = ""
               $slctd_txt_arr[$Slctd_srch][4] = ""
               $slctd_txt_arr[$Slctd_srch][6] = ""
            EndIf
            ;-----------------------------
         Case $var = $cntr
            if $slctd_txt_arr[$Slctd_srch][3] = $cntr then
               $slctd_txt_arr[$Slctd_srch][3] = ""
            Else
               $slctd_txt_arr[$Slctd_srch][3] = $cntr
               $slctd_txt_arr[$Slctd_srch][2] = ""
               $slctd_txt_arr[$Slctd_srch][4] = ""
               $slctd_txt_arr[$Slctd_srch][6] = ""
            EndIf
            ;-----------------------------
         Case $var = $lftln
            if $slctd_txt_arr[$Slctd_srch][4] = $lftln then
               $slctd_txt_arr[$Slctd_srch][4] = ""
            Else
               $slctd_txt_arr[$Slctd_srch][4] = $lftln
               $slctd_txt_arr[$Slctd_srch][2] = ""
               $slctd_txt_arr[$Slctd_srch][3] = ""
               $slctd_txt_arr[$Slctd_srch][6] = ""
            EndIf
            ;-----------------------------
         Case $var = $undrln
            if $slctd_txt_arr[$Slctd_srch][5] = $undrln then
               $slctd_txt_arr[$Slctd_srch][5] = ""
            Else
               $slctd_txt_arr[$Slctd_srch][5] = $undrln
            EndIf
            ;-----------------------------
         Case $var = $dots
            if $slctd_txt_arr[$Slctd_srch][6] = $dots then
               $slctd_txt_arr[$Slctd_srch][6] = ""
            Else
               $slctd_txt_arr[$Slctd_srch][6] = $dots
               $slctd_txt_arr[$Slctd_srch][2] = ""
               $slctd_txt_arr[$Slctd_srch][3] = ""
               $slctd_txt_arr[$Slctd_srch][4] = ""
            EndIf
            ;-----------------------------
         Case $var = $itlc
            if $slctd_txt_arr[$Slctd_srch][7] = $itlc then
               $slctd_txt_arr[$Slctd_srch][7] = ""
            Else
               $slctd_txt_arr[$Slctd_srch][7] = $itlc
            EndIf
            ;-----------------------------
         Case $var = $strk
            if $slctd_txt_arr[$Slctd_srch][8] = $strk then
               $slctd_txt_arr[$Slctd_srch][8] = ""
            Else
               $slctd_txt_arr[$Slctd_srch][8] = $strk
            EndIf
         EndSelect
         ;-----------------------------
      EndIf
   EndIf

   $html_txt = $text
   ;-----------------------------
   ;_ArrayDisplay($slctd_txt_arr)
   ;-----------------------------
   if UBound($slctd_txt_arr)>0 Then
      ;-------------
      for $ir=0 to ubound($slctd_txt_arr)-1

         $slctd_txt_tmp = $slctd_txt_arr[$ir][0]
         ;-------------
         ;Select
         if $slctd_txt_arr[$ir][1] = $bld then
            $slctd_txt_tmp = $bld_s&$slctd_txt_tmp&$bld_e
            $html_txt = StringReplace($html_txt,$slctd_txt_arr[$ir][0],$slctd_txt_tmp)
         EndIf

            ;-----------------------------
         if $slctd_txt_arr[$ir][2] = $rtln Then
            $slctd_txt_tmp = $rt_s&$slctd_txt_tmp&$p_e
            $html_txt = StringReplace($html_txt,$slctd_txt_arr[$ir][0],$slctd_txt_tmp)
         EndIf

            ;-----------------------------
         if $slctd_txt_arr[$ir][3] = $cntr then
            $slctd_txt_tmp = $cntr_s&$slctd_txt_tmp&$p_e
            $html_txt = StringReplace($html_txt,$slctd_txt_arr[$ir][0],$slctd_txt_tmp)
         EndIf

            ;-----------------------------
         if $slctd_txt_arr[$ir][4] = $lftln then
            $slctd_txt_tmp = $lft_s&$slctd_txt_tmp&$p_e
            $html_txt = StringReplace($html_txt,$slctd_txt_arr[$ir][0],$slctd_txt_tmp)
         EndIf

            ;-----------------------------
         if $slctd_txt_arr[$ir][5] = $undrln then
            $slctd_txt_tmp = $undrl_s&$slctd_txt_tmp&$undrl_e
            $html_txt = StringReplace($html_txt,$slctd_txt_arr[$ir][0],$slctd_txt_tmp)
         EndIf

            ;-----------------------------
         if $slctd_txt_arr[$ir][6] = $dots Then
            $slctd_txt_tmp = $dots_s&$slctd_txt_tmp&$dots_e
            $html_txt = StringReplace($html_txt,$slctd_txt_arr[$ir][0],$slctd_txt_tmp)
         EndIf

            ;-----------------------------
         if $slctd_txt_arr[$ir][7] = $itlc Then
            $slctd_txt_tmp = $itlc_s&$slctd_txt_tmp&$itlc_e
            $html_txt = StringReplace($html_txt,$slctd_txt_arr[$ir][0],$slctd_txt_tmp)
         EndIf
            ;-----------------------------
         if $slctd_txt_arr[$ir][8] = $strk Then
            $slctd_txt_tmp = $strk_s&$slctd_txt_tmp&$strk_e
            $html_txt = StringReplace($html_txt,$slctd_txt_arr[$ir][0],$slctd_txt_tmp)
         EndIf
         ;----------------------------
      Next
      ;-----------------------------
      $html_txt = StringReplace($html_txt,@CRLF,"<br>")
   EndIf
   ;=========================================================
EndFunc
;=========================================================
;=========================================================
Func realtime_txt()

   Local $html_txt_tmp = $html_txt

   $HTML_END = ""

   if UBound($slctd_txt_arr)=0 then
      $HTML_END = StringReplace($text,@CRLF,"<br>")
   Else
      $html_txt_tmp = StringReplace($html_txt_tmp,$bld_s,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$bld_e,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$rt_s,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$p_e,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$cntr_s,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$lft_s,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$undrl_s,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$undrl_e,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$dots_s,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$dots_e,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$itlc_s,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$itlc_e,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$strk_s,"")
      $html_txt_tmp = StringReplace($html_txt_tmp,$strk_e,"")
      ;-----------------------------
      if StringReplace($html_txt_tmp,"<br>",@CRLF) <> $text Then
         if StringInStr($text,$html_txt_tmp) >0 Then
            $HTML_END = $html_txt&"<br>"&StringReplace($text,$html_txt_tmp,"")
         EndIf
      Else
         $HTML_END = $html_txt
      EndIf
      ;-----------------------------
   EndIf
   ;-----------------------------
   $HTML_END = StringReplace($HTML_END,"<br><br>","<br>")
   ;-----------------------------
   Local $html_code = '<!DOCTYPE html>'&@CRLF& _
                  '<html>'&@CRLF& _
                     '<head>'&@CRLF& _
                    ' </head>'&@CRLF& _
                     '<body>'&@CRLF& _
                        '<p style = "font-family:Segoe UI;font-size:16px;">'&@CRLF&$HTML_END&@CRLF& _
                        '</p>'&@CRLF& _
                     '</body>'&@CRLF& _
                  '</html>'
   _IEDocWriteHTML($ie, $html_code)
   ;-----------------------------
EndFunc
;=========================================================
;=========================================================
While 1

   $text = _GUICtrlEdit_GetText($ed_Main)
   $aSel = _GUICtrlEdit_GetSel($ed_Main)
   $strt =  $aSel[0]
   $end =  $aSel[1]
   Local $slctd_txt = StringTrimRight(StringTrimLeft($text,$strt),stringlen($text)-$end)
   $slctd_txt = StringStripWS( $slctd_txt, $STR_STRIPLEADING + $STR_STRIPTRAILING + $STR_STRIPSPACES)
   realtime_txt()
   ;========================================================
   $iGUIGetMsg = GUIGetMsg()
   Select
   ;========================================================
   Case $iGUIGetMsg = $bold_btn ;$bld_arr, $ib, $bld_s, $bld_s
      ;--------------------------------------------
      Richtxt_ED($slctd_txt,$bld) ; $bld, $rtln, $cntr, $lftln, $undrln, $dots, $itlc, $strk
      ;========================================================
   Case $iGUIGetMsg = $rt_algn_btn ;$rt_algn_arr, $irt, $rt_s
      ;----------
      Richtxt_ED($slctd_txt,$rtln) ; $bld, $rtln, $cntr, $lftln, $undrln, $dots, $itlc, $strk
      ;========================================================
   Case $iGUIGetMsg = $cntr_algn_btn ;$cntr_algn_arr
      ;--------------------------------------------
      Richtxt_ED($slctd_txt,$cntr) ; $bld, $rtln, $cntr, $lftln, $undrln, $dots, $itlc, $strk
      ;========================================================
   Case $iGUIGetMsg = $lft_algn_btn ;
      ;--------------------------------------------
      Richtxt_ED($slctd_txt,$lftln) ; $bld, $rtln, $cntr, $lftln, $undrln, $dots, $itlc, $strk
      ;========================================================
   Case $iGUIGetMsg = $undr_ln_btn
      ;--------------------------------------------
      Richtxt_ED($slctd_txt,$undrln) ; $bld, $rtln, $cntr, $lftln, $undrln, $dots, $itlc, $strk
      ;========================================================
   Case $iGUIGetMsg = $dots_btn
      ;--------------------------------------------
      Richtxt_ED($slctd_txt,$dots) ; $bld, $rtln, $cntr, $lftln, $undrln, $dots, $itlc, $strk
      ;========================================================
   Case $iGUIGetMsg = $italic_btn
      ;--------------------------------------------
      Richtxt_ED($slctd_txt,$itlc) ; $bld, $rtln, $cntr, $lftln, $undrln, $dots, $itlc, $strk
      ;========================================================
   Case $iGUIGetMsg = $strike_btn
      ;--------------------------------------------
      Richtxt_ED($slctd_txt,$strk) ; $bld, $rtln, $cntr, $lftln, $undrln, $dots, $itlc, $strk
      ;========================================================
   Case $iGUIGetMsg = $rst_frmat_btn
      $html_txt = StringReplace($text,@CRLF,"<br>")
      ;------------------------
      ReDim $slctd_txt_arr[0][9]
      $irc = 0
      ;========================================================
   Case $iGUIGetMsg = $vid_ins_btn
      Local $vid_lnk = InputBox("insert a video link","the link must be like below"&@CRLF&@CRLF&"https://www.youtube.com/watch?v=B3QTAgHlwEg"&@CRLF& _
      @CRLF& "https://youtu.be/B3QTAgHlwEg","","",400,225)
      ;GUICtrlSetFont(-1, 20,0,0, "Arial")
      if @error then
         MsgBox(0,"warning","no link is inserted !")
      Else
         if StringInStr($vid_lnk,"https://youtu.be/") then $vid_lnk = "https://www.youtube.com/embed/"&StringReplace($vid_lnk,"https://youtu.be/","")
         if StringInStr($vid_lnk,"https://www.youtube.com/watch?v=") then $vid_lnk = "https://www.youtube.com/embed/"&StringReplace($vid_lnk,"https://www.youtube.com/watch?v=","")
         $vid_html = '<center><iframe src="'&$vid_lnk&'" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></center>'
         ;--------------------------------------------
         $html_txt = $html_txt&"<br>"&$vid_html
         ;--------------------------------------------
      EndIf
      $text = $text&@CRLF&$vid_html
      _GUICtrlEdit_SetText( $ed_Main, $text)
      ;========================================================
   Case $iGUIGetMsg = $IMG_ins_btn
      Local $IMG_Loc = FileOpenDialog("choose an image", @DesktopDir & "\", "Images (*.jpg)", $FD_FILEMUSTEXIST)
      If @error Then
         ; Display the error message.
         MsgBox(0,"warning","no image is selected !")
         $IMG_Loc = ""
      Else
         Local $IMG_html = '<center><img src="'&$IMG_Loc&'" alt="" width="500" height="600"></center>'
         $html_txt = $html_txt&"<br>"&$IMG_html
      EndIf
      ;--------------------------------------------
      $text = $text&@CRLF&$IMG_html
      _GUICtrlEdit_SetText( $ed_Main, $text)
   ;========================================================
   Case $iGUIGetMsg = $GUI_EVENT_CLOSE
      ExitLoop
    EndSelect
WEnd

 

res.zip

Edited by AlienStar
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...