Jump to content

About dialog with credits area


Recommended Posts

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 post
Share on other sites
  • Replies 70
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

An about dialog is a nice little thing, often hardly bigger than a message box and usually just a minor thing. But almost every program has an about dialog, if only to put its "stamp" on it, insert a

I agree so much on that statement. I have no words to explain that. You are "right on the money" with that. Now we need to synchronize. I'm not into this coloring stuff, there are those users h

It's a nice old school design.  The GUI is flickering when scrolling the text only using the scrollbar.  What about an automatic slow scrolling of the text until user intervention? Might

Posted Images

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. :huh2:

 

Edited by Professor_Bernd
Link to post
Share on other sites

image.png.263e7c4d341a4bede5318b4c4baf75a7.png

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. :(

Link to post
Share on other sites

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".

2021-04-21_052948.jpg.de77e12cc9c9200a3f5f70894317c11e.jpg

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 post
Share on other sites

...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 by argumentum
oops
Link to post
Share on other sites

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 :D
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 :)

Link to post
Share on other sites
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.:huh2:

Link to post
Share on other sites
12 minutes ago, argumentum said:

Or maybe, I just want to have my nick clearly viewable for everyone :D

I think that' s it. This is what you went to all that work for. :P

10 minutes ago, argumentum said:

It's your baby.

Too late! Now it's "our" baby! :D

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. :huh2:

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 post
Share on other sites
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
 

#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 by argumentum
better code
Link to post
Share on other sites
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. :think:

Link to post
Share on other sites

@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 post
Share on other sites
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

Link to post
Share on other sites
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 post
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
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...