Jump to content

Recommended Posts

Posted (edited)

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

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
×
×
  • Create New...