Hallo zusammen,
ich habe eine alte UDF von einem Benutzer hier, leider weiß ich nicht mehr, von wem sie stammt. Er hat eine Chatbox mit RichEdit erstellt, die ziemlich klein und übersichtlich ist und für meine Zwecke vollkommen ausreicht. Da ich nicht weiterkomme, habe ich das Ganze nun auf das Wesentliche beschränkt. Leider funktioniert die Verlinkung zu Webseiten einfach nicht. Hat vielleicht jemand eine Idee?
Lieben Gruß,
OhnePlan
AutoIt
#include <GuiRichEdit.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIShellEx.au3>
#include <MsgBoxConstants.au3>
Global $hWh = GUICreate("RichEdit Link Test", 600, 400)
Global $hRichEdit = _ChatBoxCreate($hWh, 10, 10, 580, 380)
GUISetState()
$data = "Hier ist ein Link: https://www.autoit.de" & @CRLF
_ChatBoxAdd($hRichEdit, $data)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
Sleep(10)
WEnd
_GUICtrlRichEdit_Destroy($hRichEdit)
GUIDelete($hWh)
Exit
Func _ChatBoxCreate($gui, $x = 0, $y = 0, $w = 100, $h = 100)
$hRichEdit = _GUICtrlRichEdit_Create($gui, "", $x, $y, $w, $h, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
_GUICtrlRichEdit_AutoDetectURL($hRichEdit, True)
_GUICtrlRichEdit_SetEventMask($hRichEdit, $ENM_LINK) ; Setze das Ereignismask, um Link-Benachrichtigungen einzuschließen
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Return $hRichEdit
EndFunc
Func _ChatBoxAdd($box, $txt)
_GUICtrlRichEdit_AppendText($box, $txt)
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam, $lParam
; Struktur für NMHDR
Local $tNMHDR = DllStructCreate("struct;hwnd hWndFrom;uint_ptr idFrom;int code;endstruct", $lParam)
Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
Local $iCode = DllStructGetData($tNMHDR, "code")
If $hWndFrom = $hRichEdit And $iCode = $EN_LINK Then
; Struktur für ENLINK
Local $tENLINK = DllStructCreate("struct;uint cbSize;int idFrom;int code;hwnd hWnd;int msg;wparam wParam;lparam lParam;int cpMin;int cpMax;", $lParam)
If DllStructGetData($tENLINK, "msg") = $WM_LBUTTONUP Then
; Direkter Zugriff auf die CHARRANGE-Struktur
Local $cpMin = DllStructGetData($tENLINK, "lParam", "struct.cpMin")
Local $cpMax = DllStructGetData($tENLINK, "lParam", "struct.cpMax")
ConsoleWrite("cpMin: " & $cpMin & ", cpMax: " & $cpMax & @CRLF) ; Debug-Ausgabe
If $cpMax > $cpMin Then
Local $sLink = _GUICtrlRichEdit_GetTextInRange($hRichEdit, $cpMin, $cpMax)
ConsoleWrite("Erkannter Link: " & $sLink & @CRLF) ; Debug-Ausgabe
If StringLeft($sLink, 4) = "http" Then
Local $result = ShellExecute($sLink)
If @error Then
MsgBox($MB_ICONERROR, "Fehler", "Konnte den Link nicht öffnen: " & $sLink & @CRLF & "Fehler: " & @error)
Else
ConsoleWrite("ShellExecute Ergebnis: " & $result & @CRLF) ; Debug-Ausgabe
EndIf
EndIf
Else
ConsoleWrite("Ungültiger Bereich: cpMax ist kleiner oder gleich cpMin" & @CRLF)
EndIf
EndIf
EndIf
EndFunc
Alles anzeigen