AlienStar Posted August 31, 2020 Share Posted August 31, 2020 (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 expandcollapse popup#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 August 31, 2020 by AlienStar Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now