Professor_Bernd Posted April 21, 2021 Author Share Posted April 21, 2021 22 minutes ago, argumentum said: Why not on the fly ?. Just StringReplace() the colors in the RTF and load the resultant. "On the fly" was my intention as well. However, not as elegant as your idea. My idea was to read and invert the color of each character individually in RichEdit, e.g. with this suggestion from wakillon. 26 minutes ago, argumentum said: After all RTF is not, a so difficult markup. I am curious about your "colorizer". 👍 Link to comment Share on other sites More sharing options...
argumentum Posted April 21, 2021 Share Posted April 21, 2021 (edited) reworked code at comment=1480296 Edited April 21, 2021 by argumentum move the code below Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
Professor_Bernd Posted April 21, 2021 Author Share Posted April 21, 2021 Wow, you are fast! I will test. Link to comment Share on other sites More sharing options...
argumentum Posted April 21, 2021 Share Posted April 21, 2021 and a creative one, for fun: I'll have to change the background in the rtf control to the button color, ... next, a few more minutes. Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
Professor_Bernd Posted April 21, 2021 Author Share Posted April 21, 2021 (edited) Great that you posted the screenshots. I only get to see the light colors on mine as in your first screenshot. I have set the default app mode to dark in Windows as a test. Explorer goes black and white, but the About dialog stays bright. Edited April 21, 2021 by Professor_Bernd Link to comment Share on other sites More sharing options...
argumentum Posted April 21, 2021 Share Posted April 21, 2021 ok, fixed. The code is in the other post 3 minutes ago, Professor_Bernd said: Explorer goes black and white, but the About dialog stays bright. Yes. That is the reason of the link to the high contrast mod. I had to put together, while the makers of the OS decide to finish their dark mode. Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
Professor_Bernd Posted April 21, 2021 Author Share Posted April 21, 2021 Off-topic in the spoiler. Spoiler 1 hour ago, argumentum said: You can use the "My fine tuned High Contrast theme" to make your own while we wait for M$ to do something about it. 15 minutes ago, argumentum said: That is the reason of the link to the high contrast mod. I had to put together, while the makers of the OS decide to finish their dark mode. A few months ago I had looked at your wonderful work and tried it out. Many, many tests! Can't stop screwing around with it. - Just now I took another look at your "My fine tuned High Contrast theme" and will probably try it out again soon, but that's another topic. 23 minutes ago, argumentum said: ok, fixed. The code is in the other post Unfortunately, it only seems to work as desired for you. For me it looks like this, even when I set "high contrast". Unfortunately, it only seems to work as desired for you. For me it looks like this, even when I set "high contrast". Your idea is not bad though. However, I think it's too much effort for an about dialog to iron out what Microsoft doesn't do. By that I mean using the system colors. If you agree, I'll try a more general solution with switchable light/dark modes where the colors are reversed (to opposite colors). As I said, so that it would do something for users who have the normal Windows color mode set (without high contrast) but still want to use various programs in a dark mode. Link to comment Share on other sites More sharing options...
argumentum Posted April 21, 2021 Share Posted April 21, 2021 it works well even in XP, so, if not for the high contrast themes, at least for general use should work as advertised. Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
argumentum Posted April 21, 2021 Share Posted April 21, 2021 (edited) ...also take into account that you'd have to add a GUIRegisterMsg($WM_SYSCOLORCHANGE, "WM_SYSCOLORCHANGE") to handle theme change on the fly but is not something of importance. If you reload the GUI it should show as expected. If reloading the GUI does not show as expected then, ... no clue. Edited April 21, 2021 by argumentum oops Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
Professor_Bernd Posted April 21, 2021 Author Share Posted April 21, 2021 So you don't want a dark mode in the about dialog like I suggested above? Link to comment Share on other sites More sharing options...
Professor_Bernd Posted April 21, 2021 Author Share Posted April 21, 2021 I'll start with the dark mode mentioned above. Then you can take a look and see if you like it. Link to comment Share on other sites More sharing options...
argumentum Posted April 21, 2021 Share Posted April 21, 2021 What I posted is "industry standard", going about without the WinAPI where one can actually ask the OS what color is declared, it's a shame. No a crying shame but, a shame nonetheless. Going with gray because it looks good on the developer setup ... I don't know. It's your baby. I just pitch in what I think is good for the project. Or maybe, I just want to have my nick clearly viewable for everyone I don't know @Professor_Bernd, if the code I provided is not functional, then is not functional. I thought it was a good idea Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
argumentum Posted April 21, 2021 Share Posted April 21, 2021 2 minutes ago, Professor_Bernd said: I'll start with the dark mode mentioned above and how are you gonna determine the user is using a dark theme ?. Even windows dark theme is not dark in the win32 controls and a high contrast can also be light. I have no idea other than the code what I posted. Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
Professor_Bernd Posted April 21, 2021 Author Share Posted April 21, 2021 12 minutes ago, argumentum said: Or maybe, I just want to have my nick clearly viewable for everyone I think that' s it. This is what you went to all that work for. 10 minutes ago, argumentum said: It's your baby. Too late! Now it's "our" baby! 14 minutes ago, argumentum said: I don't know @Professor_Bernd, if the code I provided is not functional, then is not functional. I thought it was a good idea It is a good idea! But Microsoft makes it too hard for us: to handle the Windows themes, the high contrast, ... 14 minutes ago, argumentum said: and how are you gonna determine the user is using a dark theme ?. Even windows dark theme is not dark in the win32 controls and a high contrast can also be light. I have no idea other than the code what I posted. These are the same questions I asked myself. ... I don't know the answer at the moment. So back to my previous suggestion: 2 modes in the about dialog, a light (light gray) mode and a dark mode with opposite colors. The "developer user" can decide when to show which mode. He can include a detection for the Windows theme, or simply adapt the About dialog to his program design. If the "end" user selects a dark mode in a program, the dark mode is also used in the About dialog. This may not be as elegant as what you would have wanted, but it would be feasible for many applications. What do you think about it? Link to comment Share on other sites More sharing options...
argumentum Posted April 21, 2021 Share Posted April 21, 2021 (edited) 11 hours ago, Professor_Bernd said: Unfortunately, it only seems to work as desired for you. For me it looks like this, even when I set "high contrast". Again, if you change the theme you'll have to reload the GUI or register the event $WM_SYSCOLORCHANGE to set the new $iBackColor to those controls using it. Here is the full code as it should be to account for theme change on the fly expandcollapse popup#NoTrayIcon #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Language=1000 #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/mo #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ; #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 ; = Info =========================================================================================== ; Title : AboutDialog.au3 ; -------------------------------------------------------------------------------------------------- ; ; Version (vnots) : 0.0.12.6 ; Date : 2021-04-12 ; Author(s) : Professor Bernd ; ; Requirements : ; Language : https://www.autoitscript.com/forum/topic/205604-about-dialog-with-credits-area/?do=findComment&comment=1480296 ; Description : About-Dialog mit Kontaktmöglichkeiten und Danksagungen. ; : About dialog with contact options and credits. ; ================================================================================================== ; ============================================================================== ; ------------------------------------------------------------------------------ ; ; Anpassen des About Dialogs. / Customize the About dialog. ; ; Zum Anpassen des About Dialogs können die Bereiche benutzt werden, die mit ; Doppellinien gekennzeichnet sind, wie die über und unter diesem Hinweis. ; ; To customize the About dialog, you can use the areas marked with double ; lines, like the ones above and below this note. ; ------------------------------------------------------------------------------ ; ============================================================================== #include <File.au3> #include <FontConstants.au3> #include <GUIConstantsEx.au3> #include <GuiRichEdit.au3> #include <MsgBoxConstants.au3> #include <StaticConstants.au3> #include <WinAPIGdi.au3> #include <WindowsConstants.au3> ; General settings. ; ============================================================================== ; ------------------------------------------------------------------------------ ; Constants for captions and texts Global Const $sGuiTitle = "About 'AboutDialog'" Global Const $sPathRTF = _PathFull(".\About.rtf", @ScriptDir) ; Relative paths must NOT start with "\"! Global Const $sVersionNum = "Version 1.0" ; Three of the dimensions of the additional controls. Only "Top" is set individually for each control. Global Const $iCtrls_Left = 455 Global Const $iCtrls_Width = 180 Global Const $iCtrls_Height = 20 ; BackColor for GUI and controls. Global $iBackColor = _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_BTNFACE)) ; 0xC0C0C0 ; medium light gray 0xC0C0C0 ; mod. ; Visited Color for LinkLabels. Global Const $iLinkVisitedColor = 0xAC00A9 ; RichEdit with or without borders. Global $bRichEditFrameless = True ; ------------------------------------------------------------------------------ ; ============================================================================== ; Wenn die RTF-Datei nicht existiert, eine Meldung zeigen und abbrechen. ; If the RTF file does not exist, show a message and abort. If Not FileExists($sPathRTF) Then MsgBox($MB_SYSTEMMODAL + $MB_ICONINFORMATION, $sGuiTitle, "File does not exist: " & @CRLF & @CRLF & $sPathRTF) Exit EndIf ; Global variables. Global $g_hParent ; Used e.g. in OnAutoItExit(). Global $g_hGui, $lblVersionNum, $lblSupport ; for re-coloring Global $g_hRichEdit Global $g_hUser32DLL = DllOpen("user32.dll") Global $aLinkLabels[0][2] ; Caret verstecken, wenn das RichEdit mit dem Scrollbalken gescrollt wird. ; Hide caret when the RichEdit is scrolled with the scrollbar. GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ; Klickbare Links im RichEdit ermöglichen. Wichtig: Die Links müssen beim Erstellen der RTF-Datei als Links eingerichtet werden! ; Enable clickable links in RichEdit. Important: The links must be set up as links when creating the RTF file! GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") OnAutoItExitRegister('OnAutoItExit') Main_Func() ; Clean up. DllClose($g_hUser32DLL) ; ============================================================================== ; Main_Func ; ; Main function. ;-) ; ------------------------------------------------------------------------------ Func Main_Func() Local $iMsg, $idx Local $bHotkeyForTabIsSet = False $g_hParent = WinGetHandle("[active]") ; Get parent window. ; Code nur ausführen, wenn das Handle zu einem PSPad-Fenster gehört. ; Execute code only if the handle belongs to a PSPad window. ; If _WinAPI_IsClassName($g_hParent, "TfPSPad") Then ; <= Uncomment if needed and insert the desired window class. ; Parent-Fenster disablen. (Wird in "OnAutoItExit()" wieder enabled!) ; Achtung: Parent-Fenster bleibt unbenutzbar, wenn nicht wieder enabled wird! ; ; Disable parent window. (Will be enabled again in "OnAutoItExit()"!) ; => Attention: Parent window remains unusable, if not enabled again! <= WinSetState($g_hParent, "", @SW_DISABLE) ; Disable parent window. ; GUISetState(@SW_DISABLE, $g_hParent) ; Disable parent window for own AutoIt GUIs. ; GUI - Die GUI ist modal zum Parent-Fenster, hat kein TrayIcon und keinen ; Taskbar-Eintrag. (Wenn hParent verwendet wird, ist die GUI NICHT topmost!) ; ; GUI - The GUI is modal to the parent window, has no tray icon and no ; taskbar entry. (If hParent is used, the GUI is NOT topmost!) $g_hGui = GUICreate($sGuiTitle, 640, 360, -1, -1, BitOR($WS_CAPTION, $WS_POPUPWINDOW), -1, $g_hParent) GUISetBkColor($iBackColor, $g_hGui) ; mod. ; $g_hRichEdit = _GUICtrlRichEdit_Create($g_hGui, "", 10, 10, 440, 340, _ ; BitOR($ES_MULTILINE, $WS_HSCROLL, $WS_VSCROLL, $ES_AUTOVSCROLL, $ES_READONLY), $WS_EX_TRANSPARENT) If $bRichEditFrameless = False Then ; Create the RichEdit with borders. $g_hRichEdit = _GUICtrlRichEdit_Create($g_hGui, "", 10, 10, 440, 340, BitOR($ES_MULTILINE, $WS_HSCROLL, $WS_VSCROLL, $ES_READONLY)) Else ; Create the RichEdit without borders. $g_hRichEdit = _GUICtrlRichEdit_Create($g_hGui, "", 10, 10, 440, 340, BitOR($ES_MULTILINE, $WS_HSCROLL, $WS_VSCROLL, $ES_READONLY), 0) EndIf ; Den Wert für die Hintergrundfarbe für das RichEdit von RGB zu BGR konvertieren. ; Convert the background color value for the RichEdit from RGB to BGR. _GUICtrlRichEdit_SetBkColor($g_hRichEdit, _WinAPI_SwitchColor($iBackColor)) ; mod. ; Set settings that allow RichEdit to recognize links and make them clickable. _GUICtrlRichEdit_AutoDetectURL($g_hRichEdit, True) _GUICtrlRichEdit_SetEventMask($g_hRichEdit, $ENM_LINK) ; Read RTF file and display it in RichEdit. Local $sRTF = FileRead($sPathRTF) ReColorizeTheRTF($sRTF) _GUICtrlRichEdit_SetText($g_hRichEdit, $sRTF) Local $Image_AU3 = StringMid(_Autoit_Logo(), 31) Local $binRtf = "{\rtf1{\pict\dibitmap\picw3969\pich3916\picwgoal2250\pichgoal2220 " & $Image_AU3 & "}}" _GUICtrlRichEdit_AppendText($g_hRichEdit, $binRtf) _GUICtrlRichEdit_ScrollLines($g_hRichEdit, -1000) ; Creating the additional controls (labels and buttons). ; ========================================================================== ; -------------------------------------------------------------------------- ; Die zusätzlichen Conrols (labels und buttons) werden alle auf der rechten Seite ; des Dialog angezeigt und haben alle die gleichen Maße für "left", "width und ; "hight" - nur der Wert für "Top" wird für jedes Control individuell eingestellt. ; The additional conrols (labels and buttons) are all displayed on the right side ; of the dialog and all have the same dimensions for "left", "width" and "height" ; - only the value for "top" is set individually for each control. $lblVersionNum = GUICtrlCreateLabel($sVersionNum, $iCtrls_Left, 20, $iCtrls_Width, $iCtrls_Height, $SS_CENTER) GUICtrlSetFont($lblVersionNum, 10, $FW_BOLD, $GUI_FONTNORMAL, "Segoe UI") ; GUICtrlSetBkColor($lblVersionNum, 0xFFFF00) ; Show background in color for debugging. Local $btnVersInfo = GUICtrlCreateButton("show versions info", $iCtrls_Left, 40, $iCtrls_Width) ; Label for the headline of LinkLabel-1. $lblSupport = GUICtrlCreateLabel("Support", $iCtrls_Left, 80, $iCtrls_Width, $iCtrls_Height, $SS_CENTER) ; Syntax: CreateLinkLabel ( $_iTop, $_sCaption, $_sUrlOrMailTo ) CreateLinkLabel(100, "support@info.com", "mailto:support@info.com?subject=Something") CreateLinkLabel(125, "even much better support", "mailto:example@info.com?subject=Something") CreateLinkLabel(220, "German AutoIt Forum", "https://autoit.de/board-list/") CreateLinkLabel(240, "English AutoIt Forum", "https://www.autoitscript.com/forum/") ; "Ok" button to close the about dialog. Local $btnOK = GUICtrlCreateButton("OK", $iCtrls_Left, 325, $iCtrls_Width) ; -------------------------------------------------------------------------- ; ========================================================================== GUISetState(@SW_SHOW) DllCall($g_hUser32DLL, "int", "HideCaret", "hwnd", $g_hRichEdit) ; <--- this hides caret initially GUIRegisterMsg($WM_SYSCOLORCHANGE, "WM_SYSCOLORCHANGE") ; this is better :) While True $iMsg = GUIGetMsg() ; Insert click events for buttons and labels - but NOT for LinkLabels! ; ======================================================================== ; ------------------------------------------------------------------------ Switch $iMsg Case $GUI_EVENT_CLOSE, $btnOK _GUICtrlRichEdit_Destroy($g_hRichEdit) ; needed unless script crashes GUIDelete() ; is OK too ExitLoop ; So that the script can execute commands, e.g. to clean up. ("DllClose()", ...) Case $btnVersInfo MsgBox($MB_SYSTEMMODAL + $MB_ICONINFORMATION, "Version info", _ $sVersionNum & @CRLF & @CRLF & "version info example") EndSwitch ; ------------------------------------------------------------------------ ; ======================================================================== ; LinkLabel: detect click events. $idx = -1 For $i = 0 To UBound($aLinkLabels) - 1 If $aLinkLabels[$i][0] = $iMsg Then $idx = $i ExitLoop EndIf Next ; Execute commands for LinkLabel clicks. If $idx > -1 Then ShellExecute($aLinkLabels[$idx][1]) GUICtrlSetColor($iMsg, $iLinkVisitedColor) EndIf ; RichEdit: Hide caret and catch tab key. If IsFocused($g_hGui, $g_hRichEdit) Then ; Hiding the caret of the RichEdit. ; If _IsPressed("01", $g_hUser32DLL) Or _IsPressed("02", $g_hUser32DLL) Then ; <= "02": Does NOT work for the right mouse button! DllCall($g_hUser32DLL, "int", "HideCaret", "hwnd", $g_hRichEdit) ; <--- this hides caret ; EndIf ; Wenn man den Tab-Key drückt, wird der gesamte Text markiert und ans Ende ; gescrollt. Um das zu verhindern, wird der Tab-Key per "HotKeySet()" abgefangen. ; Im Moment ist die Funktion für HotKeySet() eine Dummy-Funktion. 2021-04-08. ; ; If you press the tab key, the whole text will be selected and scrolled ; to the end. To prevent this, the tab key is intercepted by "HotKeySet()". ; At the moment the function "TabPress()" is a dummy function. 2021-04-08. If $bHotkeyForTabIsSet = False Then $bHotkeyForTabIsSet = True HotKeySet("{TAB}", "TabPress") EndIf Else If $bHotkeyForTabIsSet = True Then $bHotkeyForTabIsSet = False HotKeySet("{TAB}") EndIf EndIf ; If IsFocused($g_hGui, $g_hRichEdit) WEnd ; EndIf ; If _WinAPI_IsClassName($g_hParent, "TfPSPad") ; <= Uncomment if needed. EndFunc ;==>Main_Func ; ============================================================================== ; CreateLinkLabel ; ; Routine zum Erstellen der LinkLabels. ; ; Routine to create the LinkLabels. ; ------------------------------------------------------------------------------ Func CreateLinkLabel($_iTop, $_sCaption, $_sUrlOrMailTo) ReDim $aLinkLabels[UBound($aLinkLabels) + 1][2] $aLinkLabels[UBound($aLinkLabels) - 1][0] = GUICtrlCreateLabel($_sCaption, $iCtrls_Left, $_iTop, $iCtrls_Width, $iCtrls_Height, $SS_CENTER) $aLinkLabels[UBound($aLinkLabels) - 1][1] = $_sUrlOrMailTo GUICtrlSetFont(-1, -1, -1, $GUI_FONTUNDER) ; underlined GUICtrlSetColor(-1, _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_HOTLIGHT))) ; blue ? GUICtrlSetCursor(-1, 0) ; hand cursor EndFunc ;==>CreateLinkLabel ; ============================================================================== ; IsFocused ; ; Routine zum Ermitelln, ob ein bestimmtes Control den Fokus besitzt. ; ; Routine to determine if a certain control has the focus. ; ; Autor: MrCreatoR, 2007-10-01. ; https://www.autoitscript.com/forum/topic/54322-edit-control-tab-key/?do=findComment&comment=411666 ; ------------------------------------------------------------------------------ Func IsFocused($hWnd, $nCID) Return ControlGetHandle($hWnd, '', $nCID) = ControlGetHandle($hWnd, '', ControlGetFocus($hWnd)) EndFunc ;==>IsFocused ; ============================================================================== ; OnAutoItExit ; ; Routine die aufgerufen werden soll, wenn das Script beendet wird. ; Sie wurde mit "OnAutoItExitRegister('OnAutoItExit')" registriert. ; ; Routine that should be called when the script is finished. ; It was registered with "OnAutoItExitRegister('OnAutoItExit')". ; ------------------------------------------------------------------------------ Func OnAutoItExit() WinSetState($g_hParent, "", @SW_ENABLE) ; Important! Otherwise Parent window is unusable! EndFunc ;==>OnAutoItExit ; ============================================================================== ; TabPress ; ; Wenn man den Tab-Key drückt, wird der gesamte Text markiert und ans Ende ; gescrollt. Um das zu verhindern, wird der Tab-Key per "HotKeySet()" abgefangen. ; Im Moment ist die Funktion "TabPress()" eine Dummy-Funktion. 2021-04-08. ; ; If you press the tab key, the whole text will be selected and scrolled to the ; end. To prevent this, the tab key is intercepted by "HotKeySet()". At the ; moment the function "TabPress()" is a dummy function. 2021-04-08. ; ; Autor: MrCreatoR, 2007-10-01. ; https://www.autoitscript.com/forum/topic/54322-edit-control-tab-key/?do=findComment&comment=411666 ; ------------------------------------------------------------------------------ Func TabPress() ; Send("^{TAB}") ;This is the tip from Siao - Thanks! EndFunc ;==>TabPress ; ============================================================================== ; WM_COMMAND ; ; Wenn das RichEdit mit dem Scrollbalken gescrollt wird, wird das Caret sichtbar, solange ; der Scrollbalken festgehalten wird. Diese Funktion versteckt das Caret beim Scrollen ; mit dem Scrollbalken. Trotzdem blitzt das Caret beim Scrollen manchmal ein wenig auf. ; ; When the RichEdit is scrolled with the scrollbar, the caret becomes visible as long as ; the scrollbar is held. This function hides the caret when scrolling with the scrollbar. ; Nevertheless, the caret sometimes flashes a little when scrolling. ; ; Tip from pixelsearch, 2021-04-12. ; https://www.autoitscript.com/forum/topic/205604-about-dialog-with-credits-area/?do=findComment&comment=1479582 ; ------------------------------------------------------------------------------ Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam If $lParam = $g_hRichEdit Then DllCall($g_hUser32DLL, 'int', 'HideCaret', 'hwnd', $g_hRichEdit) Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND ; ============================================================================== ; WM_NOTIFY ; ; Zum Ermöglichen von klickbare Links im RichEdit. ; Wichtig: Die Links müssen beim Erstellen der RTF-Datei als Links eingerichtet werden! ; ; To enable clickable links in RichEdit. ; Important: The links must be set up as links when creating the RTF file! ; ; From a demo by InunoTaishou, 2016-02-26. ; https://www.autoitscript.com/forum/topic/180900-richedit-hyperlinks-friendly/ ; ------------------------------------------------------------------------------ Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $tEnLink = DllStructCreate($tagENLINK, $lParam) Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam) Local $tMsgFilter = DllStructCreate($tagMSGFILTER, $lParam) Switch (DllStructGetData($tNMHDR, "hWndFrom")) Case $g_hRichEdit Switch (DllStructGetData($tNMHDR, "Code")) Case $EN_LINK If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONUP Then ShellExecute(_GUICtrlRichEdit_GetTextInRange($g_hRichEdit, DllStructGetData($tEnLink, "cpMin"), DllStructGetData($tEnLink, "cpMax"))) EndIf EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 Func _Autoit_Logo($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Autoit_Logo $Autoit_Logo &= 'NrsgQk0WXAACADYEqAAAKABwlgAYlAAYmAEACAPAAAASCwMMAQUAFBYUAKKOhAAAfFI8AItyZAAA08rEAJ2epAAAdHR0AFRWXAAAp6KcADg2NAAAjY6MAIRVRAAAxLasAEVCRAAArIJsAKR+dAAArHJUAIRiXAAAuJaMAGRGNAAAmYJ0AJNiTAAAfF5MAMWqpAAAwL7EAFQ4LAQApABbNCYcAGEAUkwAoZqUAGQAZmQAz6KMAMQAjnQA5ObkALNBACvLwrwAnAA7qwCGdABnSkQAhBCChABxAC+cemwAAJWWnAAxLCwAANmvnACRenQAALy6vACKalwAAKp6ZADJmoQAANzc3ABMPjQAAKiRjAC0npwAAIJybADNnowAAMqonACkioQEAFeAJ2xqbAC0ALK0AL+JdACEAG5sAJ1tXAC2AHxkAIpaRADDBYAVbIBfW0A0AMEQlYQAmIAZ1NLUAABtYFwAu3pcAACkakwAeVpMQAA9OjwAzICBxACCZACUalQAvACyrACEXlQAKAAhHAC3pqQAhEGATZWWlAC0gIuIAGNUAMyypAA8ACkkANSqlACsAKysAKmIfABGADIsAIltZACIAF1MAGRCNABIADYsAMTGxABkAFpUAJycnADKAKOUAJaGhACTAYCvmXZsAFROVAAAtI58AHJSRBgAnHKARYAzXF5cAAC8opQAlJKUBAC2gKeRgnwAVABUVAB8bmQAxACWfAD09vQAPAHAGc2+vACnfWwEAKrAZ0xMTABsAcA9c048ALS2tAAATEZMAHNfVIAA7O7sAIB+wDsA1tQAfGZcAOQA4uQAzr60AMQAimwA/P78ALwFwBDcwDHVqpwAJAAaHAB8dnwApAHAG1dGPAAoJiQAAMCQfABsVlQAAEA+PACia1QAACQiJABBLiQAALmelACMiowEAHLANcfGzACMAn7AMG50AMzMzAQAp8AxxK6sAKQBwDfs6uwAnWZUAACHhowA3t7kQAC8' $Autoit_Logo &= 'inwAnMAxtwB+bABuSTwAVABBPAC/hGwAfEB8fAC0dVzATDwAAEU4NACvkIQAAJl0ZABkYmQAALiknAD8+vwAAPTy9AB4aGQhwCkUAKyiwGN2dAAAnJKMAFRGRJQAtMCstMCnxJrAAwA6NACsm5QAvBCrpADUwJ20h3QAAHRORAB8VkwQADwuLMCcdACUAGxcANSchACMBHRswHm0AJReRBgAzJbAysC7zLq0QAA0IhwAlMAtvFXAMbTALJTALJTAvayBwJ/UppQAfFTAaxCFfABkwEZcTkxAAMS5tAB8wFtkAEc8ADQoJADMAJJ8AExAPACsEG5UAMjAkaSmrBAAOjI0wGqUANZQ1twA1MCEnMCAfFXAbHzAbMTAU3zAUqRBwDVcWlwAPMAwlFXANkXANqrANYZgN7sBYBuUZkwAya6kgADEwsQAqXbgI3FgGszGvGAs4D9gHIUVYEtzYAKc4CuIiIiAs7O0tLSBgYAA3nZgACABCwDAArOgBOEEhnYBBCIFtHZ2s6MC/QQAs2IHoAJIAmMChAgoBl/jAsUKwAFjB0gHAOESdoiBITICAIUhhQMBCQwAIbRABrN2gaGh6AOFoYG0KBOzYwi4hYF2CBXpBaELoWMPyLN2oeEChaHBCuIPGcIEIYHHCeMSIYOdAPeJiYn3nUdHDJ1iIQEKAPedMqESdqASITKnA/dinQadAAtHHLQhR2KJEIlinYVkDYiztJihMoOpCUAGgzJCETizgTLgDcIKIwWFnQ1hB0dmB+MSoWIuW4BkcJiYcFtkAAAIcAqYDABwbYMhgrSgDJ33fm1VogMAcGRbW1t+iWIig6cQnTztQAhkiQyDoSICwBiFR2J+g2EChAjtW1s8LmAPAIF2s4WJW2QKIJgKfp2F4hK092HBAZjt9zIHJuESMgCT/SerBnw78QD9c3sGBgZ8fA474HigAAUADasyoQCBIYOJq3t7cwKxYQM7sXN7e3wQZFs8icYjtG4noSAI' $Autoit_Logo &= 'HvF+R2MgdkAiQJhze24eOwIGOwA7bnvxsWRtWwCJnTKBdgoGq0AGOx6T7WLjEjJC7qEPbm4ug+sSiADtmJ2d9y5bVcDxCg1kfi4AAIEAAn4BADw8W21wewBHIYGhnXx7qxBtWzx+4wM8W+0ABg2xZFsunSEStOIIgQagKVvteww8neISIDUKewbtA+UFQQZbbavxbmQEW36gNwo8Yi48IG1zZPcyggcyqyCdiTxtCu8Ss3wCLkBBiTyrcyd7yH73nQMAYvdBQ+EHADyFgYFic5hbDH4uwkqkA35bBg3EcFt1G4EGR2EedAngs7QyHjtACfcCAAAhkA+rDQptgAmYPCpHoCPudwlHwAdwboZ+tAR2CYiB7keBCQBbbgYeBomdRzCDgzKDISuRCTwGAP0ygbQyc1suM5ArMAtHg8M1kDI8cIiTZDw0IoEGg7EG4XQJdjKxClQM9QIRAwBifmRMmFsuRxwnftEDeAngAH5VboMwIHwJiImrMoWACWBt8Zh7J1AgAQB+Ip1xCS5V7hAjdqse7cAAAQAQHPAr9zKFAIUyR/c8q25bF7AFwQRyCYl0CbO0BtIKEjj3iZEEPAAAMC4ChZAJLlUNZFtidKs8fAkyIDJ/CZEcJwJbgAZifgoNcHwAq5hVZGRVeyfLgRwQEImgLYWxYBhABgBusatw7e3tZECYfAYyhTJwDHsmZEQhewmJOzINPB4Ybphk8AIhAwaxYpAhhYNioAxtiX8JQ38JcwmIdm6dgAb3ADwG7u08YjKhCKGJc9AO94l+sSJVwDuzW1VwCYlbRPFtljyDsYPhAjsmJ8QEewmx91AgLmREe20YSaEebaEMW+DxZH4GW38JfwmEBiJ8khxbc6uRKUdzIlsSDwqxg3EG/YnBUC2Jq6tihdM3AADkbe3BBP07dgngAHQJCLOFfIAxiTx77QuIBqBEO3AFYn4GBo48fwl/CXUJiO1VkBwAnS5kDVVbLmKEBpjhEi5te2IiaMQn' $Autoit_Logo &= 'YoAELm5kBEdyDBvBBNAnfoNB+RKz9wqxgGGJZHOJBkEsCiMDR38Jfwl3CbN89yIm/UB77Vv9sX6yOG7S7VMtJ51yCe3EN8IEgidBBmTuPJ0hewkgIXazW2SwN4mrxgbAOncciLMysETgCh7ueRzhAX8JeQmIobGCgyImsTtkDW2xNLguJ3xRHH8JewmFwHgsdqF2CeAAWzEeiScofFuJEFl2BQCBncIGQUxk7i4Gdi9AaRizdoNwQnAJ7n5HHiGgBLOAeAnFQlt7CcJwsEeJLu17wQ9/CZF7CWIyIQAAMjuxEABbe1v3g4UhPESYg/Ao7fHtYWeFg+EBAACFMpiYYtEwBG739TiJgyGhobghIWJwVfBLogShUYqJfAmz/cJCiWSrgFpg94k8c1tlGHIJfgt/CXAJW0KInfexYokRO3tt8WJ+O52QBtQ87oBofhdiW7BkED6IqyeddVWJnYMADPydPHEUcAlwLXFYopJ5CTiItLHBQiCHYQl+Bg6rVkH/EncJiWJiiSB+flvuiSCNW3sTQFkwcXsucWdbc7GGVeAAAwBb/fFk0w6QfjL9fvEi7mRQAkmxA2R8MTZVcxGHfop+kX2zewmIgzvhUvECaC5kc6SBeQkyLncJiTA37h5ghG5u7vFOIIk8DXPuAAB8BnQ7iYEJPBCI8QAAAHMQeztbLuEHcDuDCCEKLnIJmG4GBiA7sW5uc3EJiWQ6k7IDq7CAYBp7CYhk/FWFICaRXoNedgmABH8JicE1fB6QZm3t7fFOBvew4QAAVXMGewoy9yGmiX4inQAA7TwtICv3ESiQR3BxCX5uCGTu/XAU7e1qtYjtfvcAAC7tZAAAAHDxmFuJRyF2CAAAiAkAs3z3hQAyg52dYi47VQiFgbMFWCedMkeAYomxW50hdgUkBDInAE73ZLEusSBkR0edYgYA9/cAiX5t8Zh7Cp14gzKDAzAA6AEMAKr3AFtzLqF2s3AugQBOfm5tiXMuDjuAZA1t' $Autoit_Logo &= 'fp0ytAyXAIihbkeFhTJHMJ1VOzIHlgGXg0c4Yh4uCBMAlwAmWzvgnUfu9zIAHQYAAH4Aie17WzsGYjINAACDhwwADJjunYEIdrOIgEsynfceIH6DnW5HjR0ucCBziZ0ygY1LiGKCsYAnnWTuMrQHS4SI/YFLnXydIQcKgYNLPAYyoUceAS4DBwCALvdVO4NbbhCrLkeDhgxHnS7Q/e5kIYBKiIFLgAcyOwAnfgYLHYEdqycMMqGOlwA4BgarO0aYAWsHAAoGqwAAcxIyCAWFboEEfAq0MHazfjuBAgkABgaA8Vu0dp2YBsASgUQEfDurPLSzww+UZHxBBHuAE7NwBQhBhw4Gk512s88liMyIIYlwAgC0IQIASQXcs6GCBEIKggKFCQAEBryIdoUGQFpHD4gTs0ICv8wOQGXRJT8APwD9JbMCAHx2doBkAgB/JP8SPRJ2wHa0tIGBoQM6AADgoaGBtLQhFJ8H/xLD/xJzErSBoSFAnQBo0wCQI5SdneFvIaATfxMv/xJ/BK4SgBIhoKpi94Aufltbbe3tIrUA7e1tW1s8LonyYgCqIaFAEx8J/xIfAImIEqGFIL1+W22gxhiY/SdCe6J9J/2YAApwVWTtW373/WAToUuNHwD/ErkSICWBEgBkVf2rfDseHpAeOzt8AAA7O2EBBaABBqATClVkbTw9gLYhPxP/Eh8AohKFgyJigBKYBjtBEKv9JpggJAMACgphJwZ8EB6xHnxhE2Rtfjz3RwC3PxP/Er8SR/cEPO2BEgar/QpwTTAlbTAlBABtbWAmcAQK/bAJsbF8BifwmHDtW0ATnwkPAA8AB38JDwAEAHa0IYNikDxkqzuAEphwIAkAWzw8fi4uLokDAwCQAH5+PFtb7YBkVQonqzuxogv6ZDCLhd8cDwB/CX8JDwAB0i4hMmI8VQYeqAaCmOAjWyAJGLNBCwYAg4ouwAntZHD9/6AJQBOfCQ8ADwB/CQ8AJRwwMp0uZFAJkAZt' $Autoit_Logo &= 'W3h+LokwCSgJ2gnQQzxQWwVVmJAJOzETPD/AHI8JDwB/CQ8AbAm0IQBH9+2rOwb9cGJkIUr3YpoPCQcAmgGCTe1kmKt8sXyAq/1wbS5HhV8mHw8AfwkPAJolwBJb/R61UAkFUAn3jxIPAGIAHQcATjET0ChkPGIygR+Wrg8ADwB/Cc8SdqGD4PdknHwnshJfCQ8ABaQJiTATVf0GsR7Aq/1VW/eDvxwPAAd/CQ8ANxydPCc7qw8QLF8JDwA9E+1wJ3zxIRPtfp2/HA8AfwkPACFkCYWdWwbAEu1bJ1AJbglAEVAiAQBQ28L3nwma94k8QVjwLz+wHI8JDwB/CQ8AZQlkO2AGmGRbfgB5KwlQAB3YA/Pc3NxLAuxAANzcEfPJRpQI200C9yETqzuyHB9AJo8JDwB/CW8JtDJiGAoeq8MS6QZ+HS3A3EtLS+xLIgkGAEDs3F7YU4kcFTz0bVWxHCePCQ8AfwkPAMHSEmL9O6twUHhnCdkAStXJQQk1CVcCAMcJOPNyWzoMUX7gLwYnPnCACa8cDwB/CW8Jq3wG/TAcB0tiYn5G3IL+RAlXV/PzLwcAhPPz1Qle1SOatgkGmrAcQSacqwpt94+PCQ8Afwl8SyGdgmQJcVcJ2Nz+YAlBCTEJXmTTsAcAXsexCYIJSxheHSNXMoAJBQqNAzBWGxPKtxKIGAAAABbQdqGdACd8mGRbLvdiAp0CAGL3iQHc/gD+S0tL3FdX85Avx9OwAABoKQUAAmgBHF7HL/NX3ADc3EtLXgj3YgEEcJ1iiTztcKsAsZyrcFudhXYGsxmQHpezoYOYfKL9CpYI8ygBltwFlOgpKXkAAPIDAAAJAE4zAU2FTC3KBR0DTAaxgAYnVVudIXa5S2CztDJVOwVLAQH3EIly/msASxZXV/uESgNJJQUAhE0Am4NMAGAUHfeETGIBTAoGbsAG/WQug4EgmJVLQLO0hW07J0dLYhCJW/NrgSVRV/OUx8eCSg6AJMLS' $Autoit_Logo &= 'AAAeagEAAQICJ0BNsLDHIi8CJktn20ZbiTwABZgGbqv9ZIkMMrQfJtUldqGJHjCrVVt+wIgBFveJRNVLgiVX0C9AJTBDQiUAJWqRkUUFAJGKkQAnwkImsLDTgUyAS0v+L9Ej90VMAFtk/TuxqwptCGKFtPUls4GdBggGcG2BJZpimpoA9y4B/mtrKMSYFlfQAktAJcLCCiXjxSaAJiXyDkEmgUwAJgjcbYkFJi5bZCfkHjvAvkehHkzTJQCXQJh8mO08iUBLmgCaYvcuZvxra2hrxF+AJWwBS0AlwqKRQyUxMb0EADFFJq/ATAITISZALB0DE2LACABbcKtuBidkLsYyXkzzEnahW2BewhJhAAD3fmf84BLEEvhNgiWlohKAEkI3BQBCQkJDE5HSwsIDEy8EVxYCEy6JmpqdQJpiYhh+bWBfqxiYbWJ+cvISs4FHDnyAS2Be4SX3LnL8BPzDxBL4MHkOvBTCPaMSvaARHx9l/QQAH0ATJhNgOUQ5gHgAEw5i4CWBckBMHqtwPAZHHSbyEnaFmJwK5u1iXqEvRvzAJdMSoBJe1gYAQhMiEwMT+CIm/sD+a0ttLvcCJiA5wlUgOf1k94UcJvESGLOBLkCEpDj3fuUAa6j8w9dfX9CYxz/4gDjEEjExoRJd4hFaAgAjEwMTkQITKckAE/NXACZr3GQvoAkbIDlgcjxdX/ESdoUGA4BmJAl+t2uoffxU10vBEp7AErvBEpHzwxJiJVqLBABCE0EmBRMhYEw/x9BXAIxrXow8LgB7JDmxfCceJkHwErO0PDuYpTguANHNqKj8a0tf5FdPwBIwecASQV7GEh2gEiwDACETCRPCwg4EeTAAE1dfxGtr8Pxnfi4iTGFyQF8+TIHwEnYyBqsqW6Q4gDwtqKioa9eAS1I/gUu7wlIczEQcWh5aVQmjCSEThQmlwrwDIiYAE/5r/GtVfvEVBe2jHsA+DxN/CQsAMLRbO5gSVVEcVais3ajCJeIS' $Autoit_Logo &= 'p+ASIOMSF28JhQlxCTEAEz3CuwB5MPhsx9BfS/Br/Pzcs2OiLwITb3IPfwlqHNAl5RIuW0sTvt3iEmYJ5hJQHEccioYJEQUTkZGlggmwP9CIV1/XgAktPH6kL3EAE3z97X+FfwlqHIkMO6PSJXBePHITEwLd4BIV0JQ/njB15RLM7BKKAgBEJgETH4g3McwOE/zVPDMYgokAE7GrVS4yX3IjfwlIQv0GVeUSbWsEExPhEhXQP56e8DBAu6p/CX8JcgmIHIECE/x9qC9bPAUTwP0eBphbna9CfwkRdwmDO/3lElu4E6ATE33XQfMS+IMJ/1BCZS+IHFcJ8iUBOXMcdAkgw6iofbnWIXAGTh6vQn8JahxtBrBLYuKd4HoubfxgHHEJgAl7ACZyQrugcWJCISaRQjgPBgAjX2ByQo/Cwrx5BWMcV3Acfd3d3c0BABOanZ2a9zxkOoKAHH6PHH8JBgChq0yrZIEgYGM8m+AS3fAC1wsLkgmAVVB7wYQL4V5xcPQAAEJC6+sm69BxUABCQvAARUV4r69qEKKwq6F7UgnXAGt9qN2t3d1VEluQhZqdAA+YO3wPgBwfOX8JZRxHfJhtE+ASAACJItAl3ajXgQAAw8Nra9fEwFVBkL3TsCny0jCgakpcAACvAwA0NIQAr2EwASUU6P/VtAGFawD83d2tREREYDBgtVt+opiQL40e3P1kX4V/CWYcW1Ev0BYAnZ08Rt1gE6g2fWAJ0A4TcBjQe/5LAJnc815oDyXSgeEHZ2cUco7YBgAAjo4UZ2ctKckAyQNeXi+E3NwCgDEJJt2PRDO+RL4zgQmo7VsSD/c4fgUnHzl/CUlV/ScEZH5ynPdbhGATAEOoAtcZXZaWAFne3lnFd12uAK4z4Kk6mS9oCLCEtQUAfOnp6SQ2NkAAfHzhAEhIAEhjY9kc2jo6ALrg4K6uYXfFgN7e3hsbG97wEhBgcluJIqIuWwr4OwYKr1V/CcbZsF5jHAQuCFIv' $Autoit_Logo &= 'AgsZAHMAc+5usR4eOzsEfAYAAB6TgC9eAHs7Jyf9mAoKMHBwcFUEAKAAcAoACgqYmP39JycIq6ursQJ8fDs7AB6xbu5zkFJgQN1gYNxbPKEFmnIYIEw7/Z9Cfwl1CZ0D0DgyDZ08ZhNgYACo6gtBQVlzCoBk7Vs8PH4uAQAAPFtuus1eL3PwZFt+ifbhCgBCSgAAAImJiS4ufjxbAG1kcHyMYKioBeAE1YUcZIIeJ+3cYiF/CX8Jcglb0TjCBQRbtWEc1wtfFV8IUgZkoEedR0eDAIODR52JbXscEIRegDvQREeDMvgyMoUFAKAA4AAIAOICAp2Q4/2Qvn19qAVwDmYROaK3AJ2dYi5tmDurIGSJhXaIFAAAAAEKOHYKJ+0uYp0BAACJW/xgYN19ANdBXxX7qCtwADz3nTIyhYUyAQAAnS4Kk5nzXgAc/S6dgzKFIW0AAKEAAAIIoQEaAgCFAwQAAC5iPGQNWX0A19d93WBgtVsGLgFcAF0KfAZVLkIyJZe0q5jjAzl+AB1gYGCo6gtBANT7opQZ8e2JBp0AlgNqnX4Gk4CALy/aZPeDMgOOBwQAhkoITjJH91s7QFJ9CwvX14BLawRbPIIu91tVBgYQcDyDtKRLhatwBFuJghw8ZmBgEwCoAgtBFaKUlDCiG3w8hksATFvu4DrcL4DugQmAloWXB4AEDkuBYpiVqEFfkF8L16iAdAhbg0sAPGSrfApbR7Ris6NLgwZVgNgBAFsGNsFLwyXh4V+QCgyJRwMmwBuD92QN4BzcLxwGwASEcRMlQQAAg/ftTBmAJV8AQdeoE2BgCm0BQolifu0nO5hbhJ2B4yWzYqtkwyXAYm3cYGBDgJfDJWDhqAltYgGYw0BHAC6Y7/7cL/FwD0ByQpgSAMRWbt5BFQQVFcAlfUNgYC0MbRiCFwG+/W2doSHkJX6rZH4CNPftEmuCvQtfwSWenp4MXW5EcgEcMp08HgCTS1fce233Rx6DwcIGAMIH' $Autoit_Logo &= 'SHFHLv0AUtcV+6IVX18JwiVebQW+mHwn7dXmJW2A45rCDdWC44C9BBWUwCWsrOFSqwYuRHJBZ2Jte49LAFf+7m1+LomJYIn3iff3wACgAGIGgwQTwxKDiWQrYABfopSi9RVfC1EBctxtfuQScOASYpP/EuMS7aPkGS5VoFSK3cFxJOMSrEEr4W8BJjmJVQkmS1ePUHNubrEGAG6AAR4mYiFQJ2RzlsASlJQS++QS/u0EcjxVBjAnZGKhFYXsElWYucRxLrmACMKE4RIQ4BIwrGDxW2KYxWyrdwBr3FdXx7CwsAb4AQDgAMdXS67umJ2FISUTgQRSC+FTqeYSa+0FcirhEiH/EhHiEmQKW+JSnX4KBecS4eElSayeWTsCfouFrihRxzDCCD2R3wEAID3CQGBs/pNbgyUEoThVWJB9+6Bm4xLqQAr84tXjEmJ+ZP8S6hLDhCR+RsWqJKLjEklJDqKAhSc5AIDxHPNoIPKRRcg3AADIMYBFkXkvCZj3AHQBRQRibfFhFZQQgBDh4aL7FUHiJaz8ZP8S8RJw7xL74kth4BKsAivtR0xgX2SAe80DKVyRzAITgDFF0g9jq/fIJWCdPDvPX4F54iVB7+Ml6RL/Xu4lPOoS4UsBEwwZc4OFI25Hiat7AIQD/9KRzDHIgjHAJfLNbn5H4ogRhZxS16JhjOGUonz71PAl/xLvOOdL5xJJB8NCFUoAEbEc87B5AsKACcx1kfKwe4xtncUBgl4JRPuhFvVxCSR5CUd0CX9Vfwl4L1JHAAAu8HUJFXgJSTDUkGRiFl4BJHuS44IJAADyaDrCJbUBcDH0WRUSRhBhHHQJ8DjhBd9yCfBef2h/CQEAW3FCcgkf8ktyVXAJgQlyCUn+7gJ+BxOFg4kKDZkAL7B5PZE9wikM+R64FKABmLYLlI0BDZ5yCXRoS+08cwlxcEKYW0d/CX8JAQB+ZP1tcwn3ZPBe8HELBstwCQYTTj3COgaGLjIklBx+fA2A' $Autoit_Logo &= 'gAngvA4p3HvgTWYJsTg4xKLhcU9gL+A4ywtiAnEJzdV+cglxVQrPcI5/CX8JAABi/fBegQO4YmT+cAnyhAImVnEJgKogID15k1WQHBuRU9QacyCPMFUv4FVjOGihJzr4p2EJYRyUiWEv16hwCT5kiXMJwFtwBnB+Mv+XfwnHco7wcXIJndXNdI5xoUTh4XEJqj0ggAkvB2FfZiQgj0z83PMvDPPgQI92FKSDif3ATD95qqpAcAlRQsVhLwLxly1kYuIFAKu4BlWJ/6p/CXOh/fGEnYEDbfKXBTkBE6o9AgAYqmuxJybRQKsJ/Dj+/o8SRFYB0ApXMLS7qoAJVlBVYy/qcQkEmGRjD4ltmKtkjvf/vX8Jc7SYVTxyCfhHWydQBIEvACYSOUAG4XMJp64nidBTghySHAAH5I+pCWRi5iNDo9QdJhqnEAOqqkfjEuAlYhzdZG1zCS647f2rb0J/CYVCcAFfYwM5cAlDfQKALwImQOF1CT2qbExCCCAIBKlgk64rJxjCJUQnfpAGrj8wYgmqqtBLKWcc/mRiQkdgQqv9n+84fwmOQocvgRyUrEEZYZMJqqpLezWig3JwHCtuUbZ0hOF65Ff4MeMSqrtAQY5lHHRk4i7kOGSrCm8vfwkHORmFLwh0BCaAHErhQGVkBoeCCal8MaLGn2IGZPF8tjhi4/FrGsPxFQEAp6ee+8BxU1XwYP1kmuU47+N/CQcAZqGBtKIWW/2EHAETrARAp4QJqoeHqqr4MAmYkoVhCJEIZpnjegixvp5VHKenQDDFQmgC4SX8cO2yBWIvn1+0fwkHJoAvAyaJVRC+MaRoovgwBRMDANBMPuPyaOO+AwDzJgA6o+Qm0FYcYAn4P2YchGSgPEeDg4NhLyfvJZt/CQkmCgEmwQNktRM5zaBV4XAJiwn8ByImFrPDpQlgMAVM/p5UHNASDXAJnjCOwV7FtwBgYHJkBEdHgwBHR2I8ZKtkLkgytIgWAAAADECDAP3t' $Autoit_Logo &= 'Lp1Hg4NHAINbRhNgYEOoAAILQdQ/+PgwEEBAp6oHAECuq4AuRzKFhSGFAAAFAQghAgKFMp1bBwipPzAEKqdAQDAA+BqeFUEL6qhAYGBg/FXtAFmDAEedGFtwq+1iBCF2KJe0CmQ8YiEBPYNiVZkAS6jqYAIL1D+eA5gImT/w5GT3gwBHgEYCSAMAADJHLqt30PhAA4NKAkv4nj/QC9dEfUOAJTZV2wEsRwCdLu2Y/TxHgYKzqEuIW3BbiQGYMINH7ZuAJQGYXz9hEExLDVudAJgEACEDAAAAT4OJKitfnieDrAZLgEvqqIBL3QoEZJ2CS2J+ZKtVTIkyGJeQSzKYA3KDEIOJVf4AJt19AgBfxz+eGvj4QMMAAAcmQKkefkFyCQDAMmJbf90/g0tAJURAQIIlx1cCgku1RFU8gRWDnfeAcW0MnSGYS9Als3BVPGL3wiVHZFRAE0ByXz7QAExATEEag2gBAPh3DP2JBCbEcTKdPDu+XYAlwAhCJYElgUtXQpcEqJiDS4Odie39GJg8g5lx0CWI9woCbQNyg4lwS2BEIGBDfV/QESanVyAJ7WKDpEhLRy4uCkFxAVWKJV9BcWB0CYRLg52AcXA8R6EiduqXiLSYRb5H7cL9AkzXV9DHCCYFc0BA3Wk8nYOGcjLgR/ftTCbBJQQAxBIz4BLBEiZwxCWghHCrwApt94MhtBcT8BKMiC4hX0IIYlWEQV8Oa+ISIExMX6euBjwEneakhTKDYltuVKmeQ4SngF4wgF4aEaBL0FfEoRtUVS4BwyVHYlv9BidwMG1+nTJXJvESoZgUZH4AJuYgAFsK/AEBJvMvx7Cw+DAAeXmnu7u7qsIFAAA9AQDCMJMnfiEgJjKkhTKgJTwGEOCwp7uhA8KquwC7p6d5efj4sCCmxy/za2AIgHAJYJcyg2AKg508mAAGBquYZFuJgw6hVSbxEgQm5ubmMghHZJuAqxMRXrCAsGgpeXkOvGQSCCAgkQEAPXnx' $Autoit_Logo &= 'BoOjimCSbTu6oLwDFgI9oAS8vA55KSkgaLCwXi+gXvwKFFWdAArmQROdiVvMVScgEyClnYUUE/ISRSRMMgAAYh10gB1LRANowBLy8iXgDaUDIhIFAMKZ2XA8LgAYiS5bmHOAJQlmA6WlIAXy8g95ICloyQPzIAibVQ4uwQkBAAITZHCrBvir/VUWE/ISQXJgmIIIAjyhvqjJaMbo8kDyXFzS0mqgDkUBCQDySO4GJyd8GNlIDwcDYARq0tIAXCXy8ujGaMkAS2Bg6VVtg+YFBRPmIJh+W2SjBmAGJ1VbnbPR8xJ2MGRkW/cBRwATWwpBwEPNLeiOXAAArySvryMPMb0HAEUU2C0tFOACYwIxAwQgBQHgBY4U6C3J3WAYzVXVohxGJp1iLpBbZAqrABM8RxITYfMSiDIK7UBfMgRHAO1GqGCoLY7YBFw5sAavRRIS9GHhB0JCQjcIAOAAQkVCAELBAfQSErECrwA5XNiOcuxg/hhVZJ1pCYAJR52J9DztgAn9YIUPVn8JBQAQfnBbLgMTMp1kAP2oYOzYRgEBiK80ElAJ9PTrAAA+ZQ8AAwDBATACkAI0rwABOUZmyWD+cCxk92sJsBxHsBxtcMCrq5jt94UPE38JMaUvZGQ8lByDCV4BADQ0enr0cXGXlJeXAwg4DwA4OKMBATACcfT0eno0NIABjqj+CmSJbQn1shz3EBMGkF8faX8JmBwBhwkEZP38E2d6iHrlv1AJb2+y7wiRDACyb2+QCb/lkAmYa0twbwmGCWT9kByOYg8TfwkGAJ0KbdFVARMT1Qr+3Y6/vxiXNbIBAJAHFxcXcvYPAPb2cAFxCQEANYC/v780S4RVRxw0R1sEAH6ECYBMq6s4cH6Dv0J/CXaFW1UDICZkNJ3tcICoZ6niBlPAJQlYAQDiBQAL0gDFCcCiArJ6Sz4IVWRiFhI8sScnUqsAACcnJDWaAKIGcJhbnaF/CX8JxkJtBlWxXKUOVcmoybKiwAEA' $Autoit_Logo &= '9vafowhNDQARYwGf9vZyAlMBSwhyVe2YOFtuJ6ugbnNze6t0CTKQmHAqqydkny9/CQgAgQdQTPBoRAV+ZP3+3Ky/0QAAsQcMYQjODAANsgkM4QFhAiLJhPAMZFvlAwEAbW4nCjBHnZ0edgkgj+39HqugYH8JfwkIfFVkPAEWEzJiCFU2/C0A0eIMDAzb29s9pAiGBwAUAbABEAIM4nB6hJtVHC9xCWAAO+yrJ9UKECZwETme0X8JB4oJEhOFCYN+ZAqEGP7YUJAHYAmGhngHDgDSCeEB278DNlWMZFtKXnAJc3wnewn5EtsKWy/IfwkdE4gJQNhYZEbNkAlTCCMBAMELBADCACODAdu/XjYY8GTtBy91L25uq+cQCXgJsasnmH8JfwkfEwxbLuVCwRxtZAq1QGte5dsjYgEA5wMIAAIBYvp4wBTccLhwZAhPS3EIQQAnhXcJ5iDb/ZhtnX8JO38JjF9tgQnWL5AJW2QAVZuA/i9GwNsE5wQMACNQ5cnNYLVyVWRtXwmmCe33sELmBGCb/YBCfwl/Ce1CYH5VbX73txywBH4AZB1wcrX+a9xAydi/stHboRtQAMC/AS3z/tw+IP1VZGTRW3pqswIyCQBicCerBokBBnCdiW39mFtHyIGziAsAAAAMQBAAAJ1V7VsuYkeDAQi6nTztZGRV/UBUdM1La/wAAGsAa5mEPlQKVWQwZO3RYgqHDABiezBuq5idCEgAlwpbDIO0DXMhl4iF7WQgW373nUcKYZ33iDxbZAEAHVVVgEdhAQBtPImdiV4RAFsw8XsGZIckgEuYcMR+MrNLiHYuApmMTEEAAIOdYveJAgBiQ55IhZixe6uYBiSdgC7t/WSJhXazS3CIiDJtQUNQJhcAgyxHR8p+ASFigHCdcwSrJ0Vyg51+ZJgYbZ0hjZfmJYh2nU5kAHNBJuJFg0dCUvehSlFtsSdkgAaxxyWAR/dbVQo8g4696+clQCaJQCY8gBpeJgIlIi6A' $Autoit_Logo &= 'n21bici4Mm0KbsIlbsclnYlbCgxk949x6SWIiIH3OcG2LvcBTdYmgBKd9wCJflvtVW2dhSjtW/coP1viEjKrAeYSR2J+ZApbRw6hziX/EgsAtJ3tZGztW0ITcBODYRKCEm1RQCtHgbSAP34oOVsBICX9/f0nJyed6IWFpMMlcNIl/xINAOizMi5CE35iE6ATBQALgQFASi6DEmKFtHYZoCC07SA5BhM8k7GaHgIAfOMlwSVwfrBLw/8SEk2Fie1VYEeBExUghPcCAIkgEjw8WxBt7WRVgBKBdrMhgw1HZDz3hUmFg1QKBgIAq6A5hYFxLuBbcFudIdAl/xJVTYiDiVtAvmTtbeATCQEAbe3CATxiMoHmdiElBQBbZCCygRIBAAsmOkEBg6A4ZO2dhUduqv8SOzp2oYVgC4mGPAEAwDqdg4WhgDcDBCUGGO3tfmJH5g8EEwAA4UrDEvc8ZGS49zK0sDj/Eh8AiCAR4wMA0wMhZG0gJmFMJROB4iZHnYk8ZFWgJb/TBv8SDwAPAA8AiQntcXPvQ0/FHPBrQBxkbwl/CQ8ADw8ADwAPAA8AgW1kWx1gHp11RdFEsERkbUf+IW8JfwkPAA8ADwAPAA8AvIj3kEUxbGFFFE5k0Hr+gZ84fwkPAA8ADwAPAA8A2QAAoS4zT2BFLhBOUAn+fnA7zxJ/CQ8ADwAPAA8A2w8AxByd4FZQRW0QTmBX/iFiVw8AfwkPAA8ADwAPAP8PAKYJsKSBmhxODwB/CQ8Afw8ADwAPAA8ADwAPAHoJ' $Autoit_Logo = _WinAPI_Base64Decode($Autoit_Logo) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Autoit_Logo) & ']') DllStructSetData($tSource, 1, $Autoit_Logo) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 23574) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\AutoIt3_logo_alpha.bmp", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Autoit_Logo Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize) $tOutput = DllStructCreate("byte[" & $iBufferSize & "]") If @error Then Return SetError(1, 0, 0) Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0) If @error Then Return SetError(2, 0, 0) If $aRet[0] Then Return SetError(3, $aRet[0], 0) Return $aRet[6] EndFunc ;==>_WinAPI_LZNTDecompress Func ReColorizeTheRTF(ByRef $sRTF) Local $RGB = _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_HOTLIGHT)) Local $R = _WinAPI_GetRValue($RGB) Local $G = _WinAPI_GetGValue($RGB) Local $B = _WinAPI_GetBValue($RGB) $sRTF = StringReplace($sRTF, "\red0\green0\blue128", "\red" & Int($R) & "\green" & Int($G) & "\blue" & Int($B)) EndFunc ;==>ReColorizeTheRTF ;~ Func WM_THEMECHANGED($hWnd, $Msg, $wParam, $lParam) ;~ #forceref $hWnd, $Msg, $wParam, $lParam ;~ ConsoleWrite('+ Func WM_THEMECHANGED(' & $hWnd & ', ' & $Msg & ', ' & $wParam & ', ' & $lParam & ')' & @CRLF) ;~ If $lParam And $wParam Then AdlibRegister("Adlib_RefreshDefaultColors", 1000) ;~ Return $GUI_RUNDEFMSG ;~ EndFunc ;==>WM_THEMECHANGED Func WM_SYSCOLORCHANGE($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $wParam, $lParam ConsoleWrite('+ Func WM_SYSCOLORCHANGE(' & $hWnd & ', ' & $Msg & ', ' & $wParam & ', ' & $lParam & ')' & @CRLF) AdlibRegister("Adlib_RefreshDefaultColors", 1000) Return $GUI_RUNDEFMSG EndFunc ;==>WM_SYSCOLORCHANGE Func Adlib_RefreshDefaultColors() AdlibUnRegister("Adlib_RefreshDefaultColors") $iBackColor = _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_BTNFACE)) $HOTLIGHT = _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_HOTLIGHT)) $BTNTEXT = _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_BTNTEXT)) GUISetBkColor($iBackColor, $g_hGui) GUICtrlSetColor($lblVersionNum, $BTNTEXT) GUICtrlSetColor($lblSupport, $BTNTEXT) _GUICtrlRichEdit_SetBkColor($g_hRichEdit, _WinAPI_SwitchColor($iBackColor)) For $n = 0 To UBound($aLinkLabels) - 1 If $aLinkLabels[$n][0] Then GUICtrlSetColor($aLinkLabels[$n][0], $HOTLIGHT) EndIf Next Local $sRTF = FileRead($sPathRTF) ReColorizeTheRTF($sRTF) _GUICtrlRichEdit_SetText($g_hRichEdit, $sRTF) _WinAPI_RedrawWindow($g_hGui) EndFunc ;==>Adlib_RefreshDefaultColors Edit 3: change from using WM_THEMECHANGED to WM_SYSCOLORCHANGE. Edited April 21, 2021 by argumentum better code Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
Professor_Bernd Posted April 21, 2021 Author Share Posted April 21, 2021 4 minutes ago, argumentum said: Again, if you change the theme you'll have to reload the GUI or register the event $WM_THEMECHANGED to set the new $iBackColor to those controls using it. Oh, thanks. I had not considered that. But I'm not going to test it right now, because the changes to the Windows themes and the high contrast mess up my view and then I have to restart the PC. But let's keep in mind, if your code works, it still doesn't change anything in the About dialog for a user who has a dark theme set in the dialog's parent program, but uses the normal, light mode in Windows. Is that right? And to change the colors in the RTF you would have to read each color and RegExes would be needed (not my favorite area) to detect the locations in the RTF. But with which colors should one replace the colors in the RTF? Not every color corresponds to a system color. Maybe you get a text color that you can't see on the background color. This is not an easy task. Link to comment Share on other sites More sharing options...
argumentum Posted April 21, 2021 Share Posted April 21, 2021 Don't over think. Run the code. Read the code. It's all there in prefect Chinese AutoIt. Professor_Bernd 1 Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
Professor_Bernd Posted April 21, 2021 Author Share Posted April 21, 2021 @argumentum Here is my first draft. Can you try it out? The code basically works as it is intended, but it is very slow! It took me 1/2 hour to write the code. To get it faster I've been sitting on it for 4 hours without success. The changes are from line 162 to 170 and in various places I have set the background color of GUI and RichEdit and the font color of LinkLabels to opposite colors. "OppositeColor" functions are there from line 278. Please bear with me, the code is not pretty and only meant for testing purposes. 2 dark mode.zip Link to comment Share on other sites More sharing options...
argumentum Posted April 21, 2021 Share Posted April 21, 2021 2 hours ago, Professor_Bernd said: Please bear with me, the code is not pretty Why do you feel is not pretty ?. To me, a code that runs is a beautiful code. Your code does make the RTF readable, and that was the complain, so, success Now, the use of _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_*)) is what should be used on every standard GUI that needs coloring. Change my mind. Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
Professor_Bernd Posted April 21, 2021 Author Share Posted April 21, 2021 2 hours ago, argumentum said: Your code does make the RTF readable, and that was the complain, so, success Thanks! 2 hours ago, argumentum said: Now, the use of _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_*)) is what should be used on every standard GUI that needs coloring. Change my mind. My English and my knowledge of American TV shows is not that great. So I have to ask: do you think I should change your mind, or that you changed it? 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