Yes it does flicker a lot. But I do not have to courage to debug such a long script. Here a small reproducer that shows it is working well.
#include <GuiConstants.au3>
#include <WindowsConstants.au3>
#include <GuiRichEdit.au3>
Const $sRegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
Local $hGUI = GUICreate("Test", 400, 300, 400, 400)
$cCombo_Font = GUICtrlCreateCombo("", 10, 10, 170, 20, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
GUICtrlSetData($cCombo_Font, _RegEnumVal($sRegKey))
$cLabel = GUICtrlCreateLabel("Font preview", 230, 10, 155, 20)
$idRich = _GUICtrlRichEdit_Create($hGUI, "This is a test. Long enough to be seen even if the combo is active. Please select a part that you can see.", 10, 100, 380, 150, $ES_NOHIDESEL)
GUISetState()
While True
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case $cCombo_Font
GUICtrlSetFont($cLabel, 10, Default, Default, GUICtrlRead($cCombo_Font))
_GUICtrlRichEdit_SetFont($idRich, 10, GUICtrlRead($cCombo_Font))
EndSwitch
WEnd
Func _RegEnumVal($sKey)
Local $i = 1, $sVal, $sResult
While 1
$sVal = RegEnumVal($sKey, $i)
If @error Then ExitLoop
$i += 1
$sResult &= $sVal & "|"
WEnd
Return StringRegExpReplace($sResult, " \(.*?\)", "")
EndFunc ;==>_RegEnumVal