Controls werden nicht sauber ausgeblendet

  • Ich schreibe zurzeit an einem IRC Client.
    Nun habe ich folgendes Problem.

    Ich lasse Tabs für einmal Status und jewalls für jeden Channel erstellen

    Da ich leider die Controlls nicht direkt auf die tabs verweisen kann muss ich sie ausblenden wenn sie nicht gebraucht werden.
    Leider werden die Controlls nicht sauber ausgeblendet
    Sie verschwinden er in den Hintergrund bzw das fenster müsste komplett neu gezeichnet werden.
    Lange rede kurzer Sinn ich häng einfach mal ein wenig beispiel code ran wo man das gut sehen kann.

    AutoIt Code
    [autoit]

    #include <Array.au3>
    #include <StructureConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListBox.au3>
    #include <GuiRichEdit.au3>
    #include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <GuiTab.au3>
    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: Gummibaer

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    IRC Client.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here
    AutoItSetOption ( "GUICloseOnESC",0)
    AutoItSetOption ( "TrayMenuMode",1)
    AutoItSetOption ( "TrayIconDebug",0)
    AutoItSetOption ( "TrayAutoPause",0)
    Global $IRCserver = "xxxxxxxxxxxx"
    Global $IRCchannel = '#yyyyy'
    Global $IRCident = "hhh"
    Global $IRCident = "test"
    Global $IRCnick = IniRead ( "chat.ini", "User", "nick", "<Dein Nickname>" )
    Global $IRCport = 6667
    Global $IRCFullName, $IRCanick, $ChannelFenster
    Global Const $SW_HIDE = 0
    Global Const $SW_SHOW = 5

    [/autoit] [autoit][/autoit] [autoit]

    Global $Channels[1][6], $Servers[1][7]
    $Channels[0][0] = 0
    $Servers[0][0] = 0

    [/autoit] [autoit][/autoit] [autoit]

    _AddChannel(_AddServer($Servers, $IRCserver, $IRCport, $IRCnick,$IRCident),$Channels,$IRCchannel)

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlRichEdit_AppendTextUTF8(_gethwndforchannel(1,$IRCchannel),"[JOIN] du hast "&$IRCchannel&" betreten!")
    _GUICtrlRichEdit_AppendTextUTF8(_gethwndforchannel(1,$IRCchannel),"14[048*Nemesis14] Zitat: Wenn ich die Folgen geahnt hätte, wäre ich Uhrmacher geworden.Albert Einstein")
    _GUICtrlRichEdit_AppendTextUTF8(_gethwndforchannel(1,$IRCchannel),"10» Cassiopeia setzt mode: +l 11")
    _GUICtrlRichEdit_AppendTextUTF8($Servers[1][5],"Bissel Text im Status Fenster")
    _GUICtrlRichEdit_AppendTextUTF8($Servers[1][5],"und noch mehr")
    _GUICtrlRichEdit_AppendTextUTF8($Servers[1][5],"usw")
    _GUICtrlRichEdit_AppendTextUTF8($Servers[1][5],"....")
    $Nicklist = _gethwndforchannel(1,$IRCchannel,"nicklist")
    _GUICtrlListBox_AddString($Nicklist,"hanspeter")
    _GUICtrlListBox_AddString($Nicklist,"Josef")
    _GUICtrlListBox_AddString($Nicklist,"Cassiopeia")
    _GUICtrlTab_SetCurFocus(GUICtrlGetHandle($Servers[1][3]), 1)
    ;Hauptschleife
    While 1

    [/autoit] [autoit][/autoit] [autoit]

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    Local $tNMHDR, $IDFrom, $iCode
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $IDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Local $tempindex = _ArraySearch($Servers, $hWnd, 0, 0, 0, 1, 1, 2)
    If $tempindex == -1 then Return
    ;~ ConsoleWrite("$iCode "&$iCode & @CRLF)
    ;~ ConsoleWrite("$IDFrom "&$IDFrom & @CRLF)
    ;~ ConsoleWrite("$Servers[$tempindex][3] "&$Servers[$tempindex][3] & @CRLF)
    Switch $IDFrom
    Case $Servers[$tempindex][3]
    ;~ ConsoleWrite("$iCode "&$iCode & @CRLF)
    Switch $iCode
    Case $TCN_SELCHANGE
    $iCurSel = _GUICtrlTab_GetCurSel(GUICtrlGetHandle($Servers[$tempindex][3]))
    Local $tindex = _ArraySearch($Channels, $iCurSel, 0, 0, 0, 1, 1, 2)
    if $iCurSel <> 0 Then ; wenn nicht status
    ConsoleWrite("Verstecke Status "& @CRLF)
    ;~ GUICtrlSetState($Servers[$tempindex][4],$GUI_HIDE)
    ;~ GUICtrlSetState($Servers[$tempindex][5],$GUI_HIDE)
    ConsoleWrite("$Servers[$tempindex][4] $SW_HIDE " & $Servers[$tempindex][4] & @CRLF)
    ConsoleWrite("$Servers[$tempindex][5] $SW_HIDE " & $Servers[$tempindex][5] & @CRLF)
    DllCall("User32.dll", "int", "ShowWindow", "hwnd", $Servers[$tempindex][4], "int", $SW_HIDE)
    DllCall("User32.dll", "int", "ShowWindow", "hwnd", $Servers[$tempindex][5], "int", $SW_HIDE)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 to $Channels[0][0]
    if $tindex <> $i Then
    ConsoleWrite("Verstecke Channel "& $Channels[$i][0]& @CRLF)
    GUICtrlSetState($Channels[$i][3],$GUI_HIDE)
    ;~ GUICtrlSetState($Channels[$i][4],$GUI_HIDE)
    ;~ GUICtrlSetState($Channels[$i][5],$GUI_HIDE)
    ConsoleWrite("$Channels[$i][3] $SW_HIDE " & $Channels[$i][3] & @CRLF)
    ConsoleWrite("$Channels[$i][4] $SW_HIDE " & $Channels[$i][4] & @CRLF)
    ConsoleWrite("$Channels[$i][5] $SW_HIDE " & $Channels[$i][5] & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ DllCall("User32.dll", "int", "ShowWindow", "hwnd", $Channels[$i][3], "int", $SW_HIDE)
    DllCall("User32.dll", "int", "ShowWindow", "hwnd", $Channels[$i][4], "int", $SW_HIDE)
    DllCall("User32.dll", "int", "ShowWindow", "hwnd", $Channels[$i][5], "int", $SW_HIDE)
    Else
    ConsoleWrite("Zeige Channel "& $Channels[$i][0]& @CRLF)
    ConsoleWrite("$Channels[$i][3] $SW_SHOW " & $Channels[$i][3] & @CRLF)
    ConsoleWrite("$Channels[$i][4] $SW_SHOW " & $Channels[$i][4] & @CRLF)
    ConsoleWrite("$Channels[$i][5] $SW_SHOW " & $Channels[$i][5] & @CRLF)
    ;~ DllCall("User32.dll", "int", "ShowWindow", "hwnd", $Channels[$i][3], "int", $SW_SHOW)
    DllCall("User32.dll", "int", "ShowWindow", "hwnd", $Channels[$i][4], "int", $SW_SHOW)
    DllCall("User32.dll", "int", "ShowWindow", "hwnd", $Channels[$i][5], "int", $SW_SHOW)
    GUICtrlSetState($Channels[$i][3],$GUI_SHOW)
    ;~ GUICtrlSetState($Channels[$i][4],$GUI_SHOW)
    ;~ GUICtrlSetState($Channels[$i][5],$GUI_SHOW)
    EndIf
    Next
    if $iCurSel == 0 Then
    ConsoleWrite("Zeige Status "& @CRLF)
    ConsoleWrite("$Servers[$tempindex][4] $SW_SHOW " & $Servers[$tempindex][4] & @CRLF)
    ConsoleWrite("$Servers[$tempindex][5] $SW_SHOW " & $Servers[$tempindex][5] & @CRLF)
    ;~ GUICtrlSetState($Servers[$tempindex][4],$GUI_SHOW)
    ;~ GUICtrlSetState($Servers[$tempindex][5],$GUI_SHOW)
    DllCall("User32.dll", "int", "ShowWindow", "hwnd", $Servers[$tempindex][4], "int", $SW_SHOW)
    DllCall("User32.dll", "int", "ShowWindow", "hwnd", $Servers[$tempindex][5], "int", $SW_SHOW)
    EndIf
    ;~ _ArrayDisplay($Channels)
    ;~ _ArrayDisplay($Servers)
    EndSwitch
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _gethwndforchannel($servernum,$chan,$target = "")
    Local $c = _GUICtrlTab_GetItemCount($Servers[$servernum][3])
    For $i = 0 To $c-1
    $channel = _GUICtrlTab_GetItemText($Servers[$servernum][3], $i)
    If $chan == $channel Then
    Local $tindex = _ArraySearch($Channels, $i, 0, 0, 0, 1, 1, 2)
    If $target == "" or $target == "main" then return $Channels[$tindex][4]
    If $target == "nicklist" then return $Channels[$tindex][3]
    If $target == "input" then return $Channels[$tindex][5]
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _AddChannel($servernum,ByRef $avArray,$vValue)
    If Not IsArray($avArray) Then Return SetError(1, 0, -1)
    Local $iUBound = UBound($avArray)
    ReDim $avArray[$iUBound + 1][6]
    ;~ ConsoleWrite("$servernum "&$servernum & @CRLF)
    ;~ _ArrayDisplay($Servers)
    $Servers[$servernum][6] = $Servers[$servernum][6] + 1
    _InsertTab($Servers[$servernum][3], $Servers[$servernum][6], $vValue)
    ConsoleWrite($Servers[$servernum][3] & @CRLF)
    Local $Status = _GUICtrlRichEdit_Create($Servers[$servernum][2], "", 16, 34, 785, 569, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL,$ES_READONLY ))
    Local $Input = GUICtrlCreateInput("", 16, 610, 945, 21)
    Local $Nicklist = GUICtrlCreateList("", 808, 34, 153, 565)
    $avArray[$iUBound][0] = $vValue
    $avArray[$iUBound][1] = "UserListe userxy bernd peter"
    $avArray[$iUBound][2] = $Servers[$servernum][6]
    $avArray[$iUBound][3] = GUICtrlGetHandle($Nicklist)
    $avArray[$iUBound][4] = $Status
    $avArray[$iUBound][5] = GUICtrlGetHandle($Input)
    $avArray[0][0] = $iUBound
    Return $iUBound
    EndFunc
    Func _AddServer(ByRef $avArray,$IRCserver, $IRCport, $IRCnick,$IRCident)
    If Not IsArray($avArray) Then Return SetError(1, 0, -1)
    Local $iUBound = UBound($avArray)
    ReDim $avArray[$iUBound + 1][7]
    ;~ $sock = _IRCConnect($IRCserver, $IRCport, $IRCnick,$IRCident); Verbindung zu IRC und Identifizierung Nickname
    $sock = Random(1,10000)
    $Form = GUICreate($IRCserver, 985, 644, 192, 124)
    ;~ $Nicklist = GUICtrlCreateList("", 808, 16, 153, 565)
    Global $Input = GUICtrlCreateInput("", 16, 592, 945, 21)
    $hTab = GUICtrlCreateTab(8, 8, 969, 633)
    _InsertTab($hTab, 0, "Status "&$IRCserver)
    _GUICtrlTab_SetCurFocus($hTab, -1) ; Auswahl aufheben
    _GUICtrlTab_SetCurFocus($hTab, 0) ; 1 Tab wählen
    $Status = _GUICtrlRichEdit_Create($Form, "", 16, 34, 945, 569, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL,$ES_READONLY ))
    $Input = GUICtrlCreateInput("", 16, 610, 945, 21)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUISetState(@SW_SHOW)
    $avArray[$iUBound][0] = $sock
    $avArray[$iUBound][1] = $IRCserver
    $avArray[$iUBound][2] = $Form
    $avArray[$iUBound][3] = $hTab
    $avArray[$iUBound][4] = GUICtrlGetHandle($Input)
    $avArray[$iUBound][5] = $Status
    $avArray[$iUBound][6] = 0
    $avArray[0][0] = $iUBound
    Return $iUBound
    EndFunc
    Func _InsertTab(ByRef $hTabParent, $iIndex, $sName)
    _GUICtrlTab_InsertItem($hTabParent, $iIndex, $sName)
    EndFunc ;==>_InsertTab

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GUICtrlRichEdit_AppendTextUTF8($hWnd, $sText)
    return _GUICtrlRichEdit_AppendText($hWnd,_ParseColors($sText))
    EndFunc
    Func _ParseColors($string)
    Local $RichEdit = "{\rtf1\utf8\deff0{\colortbl;\red0\green0\blue0;\red0\green0\blue127;\red0\green147\blue0;\red255\green0\blue0;\red127\green0\blue0;\red156\green0\blue156;\red252\green127\blue0;\red255\green255\blue0;\red0\green252\blue0;\red0\green147\blue147;\red0\green255\blue255;\red0\green0\blue252;\red255\green0\blue255;\red127\green127\blue127;\red210\green210\blue210;}"
    $Testx = StringRegExpReplace($string, Chr(3)& '([0-9]{1,2}),([0-9]{1,2})', "\\highlight$2\\cf$1")
    $Testx = StringRegExpReplace($Testx, Chr(3)& '([0-9]{1,2})', "\\cf$1\\highlight0")
    $Testx = StringRegExpReplace($Testx, '(.+?)', "{\\b $1}")
    $Testx = StringRegExpReplace($Testx, '(.+?)', "{\\i $1}")
    $Testx = StringRegExpReplace($Testx, "", "\\cf0\\highlight0\\i0\\b0 ")
    $Testx = StringReplace($Testx, "", "")
    $Testx = StringReplace($Testx, "", "")
    $RichEdit &= _NowTime()&" "&$Testx
    $RichEdit &= "\line}"
    return $RichEdit
    EndFunc

    [/autoit]
    Bilder


    Wenn ich nicht gleich auf Tabindex 1 wechsel, sieht man wie die Nickliste noch überschneidet
    und der Text vom eigentlichen Channelfenster darin auftaucht.
    [Blockierte Grafik: http://img688.imageshack.us/img688/1230/screenshotox.jpg]
    [Blockierte Grafik: http://img64.imageshack.us/img64/6552/screenshotpi.jpg]
    [Blockierte Grafik: http://img339.imageshack.us/img339/1156/screenshottwf.jpg]


    Wenn man nun vom Tab 1 zb auf Tab 0 wechselt bleibt die Nickliste weiterhin sichtbar und auch die Editbox
    Wie man dem Code entnehmen kann habe ich schon
    GUICtrlSetState und ein DLLCall versucht um das Problem in den griff zu kriegen.

    hat noch wer eine Idee ?

  • Tabstatus abfragen und in Abhängigkeit davon die Controls ein/ausblenden.

    Bei mir funktionierte das ootb mit allen Controls, ohne zutun außer bei den IP Eingabeboxen.
    Die waren überall sichtbar und dort habe ich es mit Hilfe aus dem Forum dann so gelöst.

    [autoit]


    $Wol_Gui = GUICreate("Wake on LAN - GUI", 283, 400,935,5)
    $Wol_Tabs = GUICtrlCreateTab(0, 0, 290, 25)
    ....
    und weiter unten
    ....
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE ; Aktion - Schliessen via [x]
    Exit
    Case $Wol_Tabs ; GUI - Durchscheinen des IP Dialoges verhindern
    $current = GUICtrlRead($Wol_Tabs)
    Switch $current
    Case 0
    _GUICtrlIpAddress_ShowHide ($Inp_Client_IP, @SW_HIDE)
    _GUICtrlIpAddress_ShowHide ($Inp_Client_BC, @SW_HIDE)
    _GUICtrlIpAddress_ShowHide ($Inp_Tunnel_zIP, @SW_HIDE)
    Case 1
    _GUICtrlIpAddress_ShowHide ($Inp_Client_IP, @SW_SHOW)
    _GUICtrlIpAddress_ShowHide ($Inp_Client_BC, @SW_SHOW)
    _GUICtrlIpAddress_ShowHide ($Inp_Tunnel_zIP, @SW_HIDE)

    [/autoit]

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • ootb ??
    Bitte Formuliere deine Antwort auch so das man sie verstehen kann .. Abkürzungen helfen da nicht..
    Danke

    Edit:

    So ich bin nun etwas weiter leider auf das nächste Problem gestoßen.
    Er Blendet nun nicht die Input und die Nickliste ab dem Zweiten Channel nicht mehr ein

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <StructureConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListBox.au3>
    #include <GuiRichEdit.au3>
    #include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <GuiTab.au3>
    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: Gummibaer
    Script Function:
    IRC Client.

    [/autoit] [autoit][/autoit] [autoit]

    Alpha 0.0.2
    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here
    AutoItSetOption ( "GUICloseOnESC",0)
    AutoItSetOption ( "TrayMenuMode",1)
    AutoItSetOption ( "TrayIconDebug",0)
    AutoItSetOption ( "TrayAutoPause",0)
    Global $IRCserver = "irc.quakenet.org"
    Global $IRCchannel = '#test.priv'
    Global $IRCident = "TestIdent"
    Global $IRCident = "aNewClientTest"
    Global $IRCnick = IniRead ( "chat.ini", "User", "nick", "<Dein Nickname>" )
    Global $IRCport = 6667
    Global $IRCFullName, $IRCanick, $ChannelFenster
    Global Const $SW_HIDE = 0
    Global Const $SW_SHOW = 5

    [/autoit] [autoit][/autoit] [autoit]

    Global $Channels[1][6], $Servers[1][8]
    $Channels[0][0] = 0
    $Servers[0][0] = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $FormConnect = GUICreate("Verbinden", 310, 65, 192, 124)
    GUICtrlCreateLabel("Nickname:", 24, 24, 55, 17)
    $FormConnectYournickname = GUICtrlCreateInput($IRCnick, 80, 20, 121, 21)
    $FormConnectButton = GUICtrlCreateButton("Verbinden", 208, 18, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If _IsPressed('0D') Then
    if GUICtrlRead($FormConnectYournickname) <> "<Dein Nickname>" Then
    $IRCnick = GUICtrlRead($FormConnectYournickname)
    IniWrite("chat.ini", "User", "nick", $IRCnick)
    GUIDelete($FormConnect)
    ExitLoop
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $FormConnectButton
    if GUICtrlRead($FormConnectYournickname) <> "<Dein Nickname>" Then
    $IRCnick = GUICtrlRead($FormConnectYournickname)
    GUIDelete($FormConnect)
    ExitLoop
    EndIf
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    TCPStartup ()
    _AddServer($Servers, $IRCserver, $IRCport, $IRCnick,$IRCident)

    [/autoit] [autoit][/autoit] [autoit]

    ;Hauptschleife
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    For $i = 1 to $Servers[0][0]
    $servernum = $i
    $sock = $Servers[$i][0]
    $IRCnick = $Servers[$i][7]
    $cTab = _GUICtrlTab_GetCurSel(GUICtrlGetHandle($Servers[$servernum][3]))

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $cTab == 0 Then
    $sTabInput = GUICtrlRead($Servers[$servernum][4])
    If _IsPressed('0D') And $sTabInput <> "" Then
    ;~ ConsoleWrite("$cTab: "&$cTab &" $sTabInput: "&$sTabInput & @CRLF)
    _GUICtrlRichEdit_AppendTextUTF8($Servers[$servernum][5],'Befehl: ' & BinaryToString(StringToBinary($sTabInput, 4), 1) & @CRLF)
    _IRCSendMessage($sock,$sTabInput)
    GUICtrlSetData($Servers[$servernum][4],"")
    _ArrayDisplay($Servers)
    _ArrayDisplay($Channels)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Else
    $cTabInput = GUICtrlRead($Channels[$cTab][5])
    If _IsPressed('0D') And $cTabInput <> "" Then
    ;~ ConsoleWrite("$cTab: "&$cTab &" $cTabInput: "&$cTabInput & @CRLF)
    _GUICtrlRichEdit_AppendTextUTF8($Channels[$cTab][4],'14<4' & $IRCnick & '14> ' & BinaryToString(StringToBinary($cTabInput, 4), 1) & @CRLF)
    _IRCSendMessage($sock,$cTabInput,$Channels[$cTab][0])
    GUICtrlSetData($Channels[$cTab][5],"")
    EndIf
    EndIf
    $recv = TCPRecv($sock, 8192); Empfängt vom Server
    If @error Then
    MsgBox(1, "IRC Example", "Server has errored or disconnected"); Verbindung zum Server besteht nicht mehr
    Exit
    EndIf
    Local $sData = StringSplit($recv, @CRLF); Splittet die Nachrichten, wenn sie vom Server gruppiert werden
    For $i = 1 To $sData[0] Step 1; behandelt jede Nachricht einzeln
    Local $sTemp = StringSplit($sData[$i], " "); Splittet die Nachricht an den Leerzeichen
    If $sTemp[1] = "" Then ContinueLoop; Weiter, wenn leer
    If $sTemp[1] = "PING" Then _IRCPing($sock, $sTemp[2]); Prüft ob PING zurückgegeben wird
    If $sTemp[0] <= 2 Then ContinueLoop; meist nutzlose Informationen
    Switch $sTemp[2]; Splittet die Command Nachricht
    Case "266"; Indikator der zeigt, dass alle Infos gesendet wurden
    ;~ _AddChannel($servernum,$Channels,$IRCchannel)
    _IRCJoinChannel ($sock, $IRCchannel)
    _IRCChangeMode ($sock, "+ix", $IRCnick)
    Case "332" ; Raumthema
    $titel = ''
    For $k = 6 To $sTemp[0]
    $titel &= $sTemp[$k] & ' '
    Next
    _GUICtrlRichEdit_AppendTextUTF8(_gethwndforchannel($servernum,$sTemp[3]),'3Thema: ' & $titel & @CRLF)
    Case "333" ; Thema von
    _GUICtrlRichEdit_AppendTextUTF8(_gethwndforchannel($servernum,$sTemp[3]),'3Thema von: ' & $sTemp[5] & @CRLF)
    Case "353" ; Userlist
    ;~ ConsoleWrite("353 Raw: "&$sData[$i] & @CRLF)
    $text = ""
    $Nicklist = _gethwndforchannel($servernum,$sTemp[5],"nicklist")
    GUICtrlSetData($Nicklist,"")
    For $k = 6 To $sTemp[0]
    If $k = 6 Then
    if StringTrimLeft($sTemp[$k],1) <> "" Then
    _GUICtrlListBox_AddString($Nicklist,StringTrimLeft($sTemp[$k],1))
    $text &= StringTrimLeft($sTemp[$k],1) & "|"
    EndIf
    Else
    if $sTemp[$k] <> "" Then
    _GUICtrlListBox_AddString($Nicklist,$sTemp[$k])
    $text &= $sTemp[$k] & "|"
    EndIf
    EndIf
    Next
    $Channels[_getchannelidbyname($servernum,$sTemp[5])][1] = $text
    ConsoleWrite('User: ' &$text & @CRLF)
    Case 'PRIVMSG' ; Nachricht empfangen
    $ChannelFenster = _gethwndforchannel($servernum,$sTemp[3])
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $text = ''
    $txtUSER = ''
    For $k = 4 To $sTemp[0]
    $text &= ' ' & $sTemp[$k]
    Next
    $text = StringTrimLeft($text, 1)
    If StringInStr($sTemp[4], 'PING', 1) Then
    _IRCSendMessage($sock,"NOTICE "& $USER &" :PING "&$sTemp[5] )
    ElseIf StringInStr($text, 'TIME', 1) Then
    _GUICtrlRichEdit_AppendTextUTF8($ChannelFenster, '15' & $USER & ' fragt deine Version ab'& @CRLF)
    _IRCSendMessage($sock,"NOTICE "& $USER &" :TIME http://www.wiki-bierkiste.de !!!Unten rechts ist eine UHR!!!" )
    ElseIf StringInStr($text, 'FINGER', 1) Then
    _GUICtrlRichEdit_AppendTextUTF8($ChannelFenster, '15' & $USER & ' fingert dich'& @CRLF)
    _IRCSendMessage($sock,"NOTICE "& $USER &" :FINGER *Finger abbeiß*" )
    ElseIf StringInStr($text, 'VERSION', 1) Then
    _GUICtrlRichEdit_AppendTextUTF8($ChannelFenster, '15' & $USER & ' fragt deine Version ab'& @CRLF)
    _IRCSendMessage($sock,"NOTICE "& $USER &" :VERSION http://www.wiki-bierkiste.de" )
    ElseIf StringInStr($text, 'ACTION', 1) Then ; Aktion von USER
    $text = StringTrimLeft($text, 8)
    $text = StringLeft($text, StringLen($text)-2)

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlRichEdit_AppendTextUTF8($ChannelFenster, '6***' & $USER & ' ' & $text & @CRLF)
    ElseIf StringInStr($text, 'DCC CHAT', 1) Then ; Direkt-Chatanfrage
    $text = '14DCC-Chatanfrage von ' & $USER
    ;~ _GUICtrlRichEdit_AppendTextUTF8($ChannelFenster, $text)
    _GUICtrlRichEdit_AppendTextUTF8($Servers[$servernum][5],$text & @CRLF)
    Else
    _GUICtrlRichEdit_AppendTextUTF8($ChannelFenster, '14<12' & $USER & '14> ' & $text & @CRLF); USER spricht
    EndIf
    ;~ ConsoleWrite("RAW: "&$text & @CRLF)
    Case 'JOIN' ; Chatraum wird betreten
    local $channel = StringReplace($sTemp[3],":","")
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    if $USER == $IRCnick Then
    _GUICtrlTab_SetCurFocus(GUICtrlGetHandle($Servers[$servernum][3]),_AddChannel($servernum,$Channels,$channel))
    EndIf
    $ChannelFenster = _gethwndforchannel($servernum,$channel,"")
    _GUICtrlRichEdit_AppendTextUTF8($ChannelFenster,'3*** ' & $USER & ' betritt den Raum' & @CRLF)
    Case 'NICK' ; Nick wird gewechselt
    $USER_alt = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $USER = StringTrimLeft($sTemp[3], 1)
    Local $c = _GUICtrlTab_GetItemCount($Servers[$servernum][3])
    For $x = 0 To $c-1
    $channel = _GUICtrlTab_GetItemText($Servers[$servernum][3], $i)
    Local $tindex = _ArraySearch($Channels, $x, 0, 0, 0, 1, 1, 2)
    _GUICtrlRichEdit_AppendTextUTF8($Channels[$tindex][4],'10*** ' & $USER_alt & ' heißt jetzt: ' & $USER & @CRLF)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Case 'PART' ; Chatraum wird verlassen
    $ChannelFenster = _gethwndforchannel($servernum,StringReplace($sTemp[3],":",""))
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $txt = '2'&$USER & ' verläßt den Chatraum '
    $text = ''
    If $sTemp[0] > 3 Then
    For $k = 4 To $sTemp[0]
    If $k = 4 Then
    $text &= StringTrimLeft($sTemp[$k], 1) & ' '
    Else
    $text &= $sTemp[$k] & ' '
    EndIf
    Next
    $text = StringTrimRight($text, 1)
    EndIf
    ;~ ConsoleWrite($txt & $text & @CRLF)
    _GUICtrlRichEdit_AppendTextUTF8($ChannelFenster,$txt & $text & @CRLF)
    Case 'QUIT' ; Server wird verlassen
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $txt = '4'&$USER & ' verläßt den Chatraum '
    If $sTemp[0] > 3 Then
    For $k = 4 To $sTemp[0]
    $text &= $sTemp[$k] & ' '
    Next
    $text = StringTrimRight($text, 1)
    $text = $txt & $text
    EndIf
    Local $c = _GUICtrlTab_GetItemCount($Servers[$servernum][3])
    For $x = 0 To $c-1
    $channel = _GUICtrlTab_GetItemText($Servers[$servernum][3], $i)
    Local $tindex = _ArraySearch($Channels, $x, 0, 0, 0, 1, 1, 2)
    _GUICtrlRichEdit_AppendTextUTF8($Channels[$tindex][4],$txt & $text & @CRLF)
    Next
    Case Else ; alle Nachrichten, die nicht in andere Kategorien passen, z.B. Server-Infos
    $text = ""
    For $k = 4 To $sTemp[0]
    $text &= $sTemp[$k] & ' '
    Next
    _GUICtrlRichEdit_AppendTextUTF8($Servers[$servernum][5],$text & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ConsoleWrite('sonstiges: ' & $sData[$i] & @CRLF)
    EndSwitch
    Next
    Next
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    TCPShutdown()
    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    Local $tNMHDR, $IDFrom, $iCode
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $IDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Local $tempindex = _ArraySearch($Servers, $hWnd, 0, 0, 0, 1, 1, 2)
    If $tempindex == -1 then Return
    ;~ ConsoleWrite("$iCode "&$iCode & @CRLF)
    ;~ ConsoleWrite("$IDFrom "&$IDFrom & @CRLF)
    ;~ ConsoleWrite("$Servers[$tempindex][3] "&$Servers[$tempindex][3] & @CRLF)
    Switch $IDFrom
    Case $Servers[$tempindex][3]
    ;~ ConsoleWrite("$iCode "&$iCode & @CRLF)
    Switch $iCode
    Case $TCN_SELCHANGE
    $iCurSel = _GUICtrlTab_GetCurSel(GUICtrlGetHandle($Servers[$tempindex][3]))
    Local $tindex = _ArraySearch($Channels, $iCurSel, 0, 0, 0, 1, 1, 2)
    ;~ ;4 = Input 5 = Status
    if $iCurSel <> 0 Then ; wenn nicht status
    ConsoleWrite("Switch Tab Nummer: "&$iCurSel&" Channel: "&$Channels[$tindex][0] & " Nicklisthwnd: "&$Channels[$tindex][3]&@CRLF)
    GUICtrlSetState($Servers[$tempindex][4], $GUI_HIDE)
    _WinAPI_ShowWindow($Servers[$tempindex][5],@SW_HIDE)
    Else
    ConsoleWrite("Switch Tab Nummer: "&$iCurSel&" Statusfenster" & @CRLF)
    GUICtrlSetState($Servers[$tempindex][4], $GUI_SHOW)
    _WinAPI_ShowWindow($Servers[$tempindex][5],@SW_SHOW)
    EndIf
    ;~ ;3 = Nickliste 4 = Raumtext 5 = Input
    For $i = 1 to $Channels[0][0]
    if $tindex <> $i Then
    ;~ _WinAPI_ShowWindow($Channels[$i][3],@SW_HIDE)
    GUICtrlSetState($Channels[$i][3], $GUI_HIDE)
    _WinAPI_ShowWindow($Channels[$i][4],@SW_HIDE)
    ;~ GUICtrlSetState($Channels[$i][4], $GUI_HIDE)
    GUICtrlSetState($Channels[$i][5], $GUI_HIDE)
    Else
    ;~ GUICtrlSetData($Channels[$i][3],"")
    ;~ GUICtrlSetData($Channels[$i][3],$Channels[$i][1])
    ;~ _WinAPI_ShowWindow($Channels[$i][3],@SW_SHOW)
    GUICtrlSetState($Channels[$i][3], $GUI_SHOW)
    _WinAPI_ShowWindow($Channels[$i][4],@SW_SHOW)
    ;~ GUICtrlSetState($Channels[$i][4], $GUI_SHOW)
    GUICtrlSetState($Channels[$i][5], $GUI_SHOW)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _gethwndforchannel($servernum,$chan,$target = "")
    Local $c = _GUICtrlTab_GetItemCount($Servers[$servernum][3])
    For $i = 0 To $c-1
    $channel = _GUICtrlTab_GetItemText($Servers[$servernum][3], $i)
    If $chan == $channel Then
    Local $tindex = _ArraySearch($Channels, $i, 0, 0, 0, 1, 1, 2)
    If $target == "" or $target == "main" then return $Channels[$tindex][4]
    If $target == "nicklist" then return $Channels[$tindex][3]
    If $target == "input" then return $Channels[$tindex][5]
    EndIf
    Next
    EndFunc
    Func _getchannelidbyname($servernum,$chan)
    Local $c = _GUICtrlTab_GetItemCount($Servers[$servernum][3])
    For $i = 0 To $c-1
    $channel = _GUICtrlTab_GetItemText($Servers[$servernum][3], $i)
    If $chan == $channel Then return $i
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _AddChannel($servernum,ByRef $avArray,$vValue)
    If Not IsArray($avArray) Then Return SetError(1, 0, -1)
    Local $iUBound = UBound($avArray)
    ReDim $avArray[$iUBound + 1][6]
    ;~ ConsoleWrite("$servernum "&$servernum & @CRLF)
    ;~ _ArrayDisplay($Servers)
    $Servers[$servernum][6] = $Servers[$servernum][6] + 1
    _InsertTab($Servers[$servernum][3], $Servers[$servernum][6], $vValue)

    [/autoit] [autoit][/autoit] [autoit]

    Local $Status = _GUICtrlRichEdit_Create($Servers[$servernum][2], "", 16, 34, 785, 569, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL,$ES_READONLY ))
    Local $Input = GUICtrlCreateInput("", 16, 610, 945, 21)
    Local $Nicklist = GUICtrlCreateList("", 808, 34, 153, 565)
    $avArray[$iUBound][0] = $vValue
    $avArray[$iUBound][1] = "UserListe userxy bernd peter"
    $avArray[$iUBound][2] = $Servers[$servernum][6]
    $avArray[$iUBound][3] = $Nicklist
    $avArray[$iUBound][4] = $Status
    $avArray[$iUBound][5] = $Input
    $avArray[0][0] = $iUBound
    ConsoleWrite("Tab Nummer: "&$Servers[$servernum][6]&" Channel: "&$vValue &" NicklistHWND: "&$Nicklist& @CRLF)
    Return $iUBound
    EndFunc
    Func _AddServer(ByRef $avArray,$IRCserver, $IRCport, $IRCnick,$IRCident)
    If Not IsArray($avArray) Then Return SetError(1, 0, -1)
    Local $iUBound = UBound($avArray)
    ReDim $avArray[$iUBound + 1][8]
    $Form = GUICreate($IRCserver, 985, 644, 192, 124)
    ;~ $Nicklist = GUICtrlCreateList("", 808, 16, 153, 565)
    $hTab = GUICtrlCreateTab(8, 8, 969, 633)
    _InsertTab($hTab, 0, "Status "&$IRCserver)
    _GUICtrlTab_SetCurFocus($hTab, -1) ; Auswahl aufheben
    _GUICtrlTab_SetCurFocus($hTab, 0) ; 1 Tab wählen
    $Status = _GUICtrlRichEdit_Create($Form, "", 16, 34, 945, 569, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL,$ES_READONLY ))
    $Input = GUICtrlCreateInput("", 16, 610, 945, 21)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUISetState(@SW_SHOW)
    $sock = _IRCConnect($IRCserver, $IRCport, $IRCnick,$IRCident); Verbindung zu IRC und Identifizierung Nickname
    $avArray[$iUBound][0] = $sock
    $avArray[$iUBound][1] = $IRCserver
    $avArray[$iUBound][2] = $Form
    $avArray[$iUBound][3] = $hTab
    $avArray[$iUBound][4] = $Input
    $avArray[$iUBound][5] = $Status
    $avArray[$iUBound][6] = 0
    $avArray[$iUBound][7] = $IRCnick
    $avArray[0][0] = $iUBound
    Return $iUBound
    EndFunc
    Func _InsertTab(ByRef $hTabParent, $iIndex, $sName)
    _GUICtrlTab_InsertItem($hTabParent, $iIndex, $sName)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    #region IRC-Func
    ;===============================================================================
    ;
    ; Description: Connects you to a IRC Server, and gives your chosen Nick
    ; Parameter(s): $server - IRC Server you wish to connect to
    ; $port - Port to connect to (Usually 6667)
    ; $nick - Nick you choose to use (You can change later)
    ; Requirement(s): TCPStartup () to be run
    ; Return Value(s): On Success - Socket identifer
    ; On Failure - It will exit on error
    ; Author(s): Chip
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCConnect ($server, $port, $nick ,$ident)
    Local $i = TCPConnect(TCPNameToIP($server), $port)
    If $i = -1 Then Exit MsgBox(1, "IRC.au3 Error", "Server " & $server & " is not responding.")
    TCPSend($i, "NICK " & $nick & @CRLF)
    $ping = tcprecv($i,2048)
    if stringleft($ping,4) = "PING" Then
    $pong = stringreplace($ping,"PING :","")
    tcpsend($i,"PONG " & $pong & @LF)
    EndIf
    TCPSend($i, "USER "& $ident&" 0 0 " & $nick &@CRLF)
    Return $i
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Close the IRC Connection
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $msg - Message to send with quit
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): BugFix
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCQuit($irc, $msg="")
    If $irc = -1 Then Return 0
    TCPSend($irc, "QUIT :" & $msg & @CRLF)
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Leave the IRC Channel
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $msg - Message to send with part
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): BugFix
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCLeaveChannel ($irc, $msg="", $chan="")
    If $irc = -1 Then Return 0
    TCPSend($irc, "PART " & $chan & " :" & $msg & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Joins an IRC Channel
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $chan - Channel you wish to join
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): Chip
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCJoinChannel ($irc, $chan)
    If $irc = -1 Then Return 0
    TCPSend($irc, "JOIN " & $chan & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Sends a message using IRC
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $msg - Message you want to send
    ; $chan - Channel/Nick you wish to send to
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): Chip
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCSendMessage ($irc, $msg, $chan="")
    If $irc = -1 Then Return 0
    If $msg = "" Then Return 0
    If $chan = "" Then
    TCPSend($irc, $msg & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndIf
    TCPSend($irc, "PRIVMSG " & $chan & " :" & $msg & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Sends a message as ACTION using IRC
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $msg - Message you want to send
    ; $chan - Channel/Nick you wish to send to
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): BugFix
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCSendAction ($irc, $msg, $chan="")
    If $irc = -1 Then Return 0
    If $chan = "" Then
    TCPSend($irc, $msg & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndIf
    TCPSend($irc, "PRIVMSG " & $chan & " :" & Chr(1) & "ACTION " & $msg & Chr(1) & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Changes a MODE on IRC
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $mode - Mode you wish to change
    ; $chan - Channel/Nick you wish to send to
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): Chip
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCChangeMode ($irc, $mode, $chan="")
    If $irc = -1 Then Return 0
    If $chan = "" Then
    TCPSend($irc, "MODE " & $mode & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndIf
    TCPSend($irc, "MODE " & $chan & " " & $mode & @CRLF)
    If @error Then
    MsgBox(1, "IRC.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Returns a PING to Server
    ; Parameter(s): $irc - Socket Identifer from _IRCConnect ()
    ; $ret - The end of the PING to return
    ; Requirement(s): _IRCConnect () to be run
    ; Return Value(s): On Success - 1
    ; On Failure - -1 = Server disconnected.
    ; Author(s): Chip
    ; Note(s): English only
    ;
    ;===============================================================================
    Func _IRCPing($irc, $ret)
    If $irc = -1 Then Return 0
    If $ret = "" Then Return -1
    TCPSend($irc, "PONG " & $ret & @CRLF)
    If @error Then
    MsgBox(1, "irc.au3", "Server has disconnected.")
    Return -1
    EndIf
    Return 1
    EndFunc
    #endregion IRC-Func
    Func _GUICtrlRichEdit_AppendTextUTF8($hWnd, $sText)
    return _GUICtrlRichEdit_AppendText($hWnd,_ParseColors($sText))
    EndFunc
    Func _ParseColors($string)
    Local $RichEdit = "{\rtf1\utf8\deff0{\colortbl;\red0\green0\blue0;\red0\green0\blue127;\red0\green147\blue0;\red255\green0\blue0;\red127\green0\blue0;\red156\green0\blue156;\red252\green127\blue0;\red255\green255\blue0;\red0\green252\blue0;\red0\green147\blue147;\red0\green255\blue255;\red0\green0\blue252;\red255\green0\blue255;\red127\green127\blue127;\red210\green210\blue210;}"
    $Testx = StringRegExpReplace($string, Chr(3)& '([0-9]{1,2}),([0-9]{1,2})', "\\highlight$2\\cf$1")
    $Testx = StringRegExpReplace($Testx, Chr(3)& '([0-9]{1,2})', "\\cf$1\\highlight0")
    $Testx = StringRegExpReplace($Testx, '(.+?)', "{\\b $1}")
    $Testx = StringRegExpReplace($Testx, '(.+?)', "{\\i $1}")
    $Testx = StringRegExpReplace($Testx, "", "\\cf0\\highlight0\\i0\\b0 ")
    $Testx = StringReplace($Testx, "", "")
    $Testx = StringReplace($Testx, "", "")
    $RichEdit &= _NowTime()&" "&$Testx
    $RichEdit &= "\line}"
    return $RichEdit
    EndFunc

    [/autoit]

    Ich hab mal den Code komplett gepostet
    zum testen einfach mit einem IRC Server Connecten (oben einfach anpassen)
    Das Script folgt auch Autojoin selbständig
    Alternative im Status Fenster einfach "join #channel" eingeben wird alles als direkter Befehl angesehen
    vorher noch Zeile97 und 98 die beiden _arraydisplay ausdokumentieren

    Einmal editiert, zuletzt von Gummibaer (22. Juli 2011 um 17:35)

  • ootb --> out of the box :)

    Was ich meinte in dem Bereich wo man die definiert was passieren soll wenn man auf Button xyz drücken soll,
    dort habe ich mit dem Switch für $Woltabs das Verhalten auch für die tabs abgebildet.
    Naja nicht ich, der Tip kam hier mal im Forum.
    Also was soll passieren wenn ich auf Tab1 ,2 oder 3 klicke.
    Der Rückgabewert der Tabs ist dann 0 1 2 3 usw je nach Anzahl Tabs
    Also habe ich dann passend für die jeweiligen Tabs die Controls aus bz. eingeblendet so wie benötigt.
    Wie gesagt alle anderen außer die IP Controls machten auch keine Probleme von daher kann bei Dir noch ein
    anderes Problem sein. Für hartnäckige Controls kann man sich er aber gut der von mir geposteten Sonderbehandlung bedienen.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Die _GUICtrlIpAddress_ShowHide funktion nutzt auch nur die _WinAPI_ShowWindow
    von daher sind die gleich
    Na bin ja schonmal etwas weiter .. ein Channel funktioniert ja schonmal .. aber ich frag mich warum der Rest auf einmal im zweiten Channel fehlt..

    *harre ausreiß*

    Die Handels passen .. werden Sauber im Array abgelegt und auch in der WM_NOTIFY aufgerufen .. aber warum zeigt er sie nicht an..
    vom Ablauf sollte es korrekt sein ...

  • ich kann nur dummy eingeben beim login und sehe nur einen tab quakenet
    trotz ehem. Online Zockerzeit immer um irc etc rumgekommen :)
    Schnall auch nicht so richtig wo du die tabs auf den Weg bringst,
    generell sieht es ja so aus...

    [autoit]

    GUICtrlCreateTabItem("Client Verwaltung") ;Tab 2 Client-Verwaltung (Gui für Anlage der PCs die mittels WOL/Ping/SSH /RDP erreicht werden sollen)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlCreateGroup("",25,30,230,50)
    $Cbo_Client_Aktion = GUICtrlCreateCombo("", 40, 48, 198, 25, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1,"Anlage eines neuen Clients|Ändern/Löschen eines Clients","Anlage eines neuen Clients")
    GUICtrlCreateGroup("", -99, -99, 1, 1)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlCreateGroup("",25,80,230,220)
    GUICtrlCreateLabel("Matchcode", 40, 107)
    $Inp_Client_MC = GUICtrlCreateInput("Name für die Auswahl", 114, 104, 124, 21)
    $Cbo_Client_MC = GUICtrlCreateCombo("", 114, 104, 124, 21)
    GUICtrlSetState($Cbo_Client_MC,$GUI_HIDE)
    GUICtrlCreateLabel("PC-Name", 40, 139)
    $Inp_Client_Host = GUICtrlCreateInput("Computer-Beispiel", 114, 136, 124, 21)
    GUICtrlCreateLabel("Mac-Adresse", 40, 171)
    $Inp_Client_Mac = GUICtrlCreateInput("aabbccddeeff", 114, 168, 124, 21)
    GUICtrlCreateLabel("IP-Adresse", 40, 203)
    $Inp_Client_IP = _GUICtrlIpAddress_Create($Wol_Gui, 114, 200, 124, 21)
    _GUICtrlIpAddress_Set($Inp_Client_IP, "1.1.1.1")
    _GUICtrlIpAddress_ShowHide ($Inp_Client_IP, @SW_HIDE)
    GUICtrlCreateLabel("Broadcast", 40, 235)
    $Inp_Client_BC = _GUICtrlIpAddress_Create($Wol_Gui, 114, 232, 124, 21)
    _GUICtrlIpAddress_Set($Inp_Client_BC, "1.1.1.255")
    _GUICtrlIpAddress_ShowHide ($Inp_Client_BC, @SW_HIDE)
    GUICtrlCreateLabel("System (OS)", 40, 267)
    $Cbo_Client_OS = GUICtrlCreateCombo("",114, 264, 124, 21, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1,"Windows|Linux|Bitte OS auswählen","Windows")
    GUICtrlCreateGroup("", -99, -99, 1, 1)

    [/autoit][autoit][/autoit][autoit]

    $Btn_Client_Del = GUICtrlCreateButton("Client löschen", 30, 310, 91, 33, 0)
    GUICtrlSetState($Btn_Client_Del,$GUI_HIDE)
    $Btn_Client_Save = GUICtrlCreateButton("Client speichern", 160, 310, 91, 33, 0)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    GUICtrlCreateTabItem("Tunnel Verwaltung") ; ;Tab 3 Tunnel Verwaltung (Gui für Anlage von Routerkonfigurationen(SSH) und Hinterlegung von SSH Tunneln)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlCreateGroup("Routerkonfiguration für WOL und SSH Tunnel", 10,30,265,150) ; Router
    $Cbo_Router_Aktion = GUICtrlCreateCombo("",20,50,200,21,$CBS_DROPDOWNLIST)

    [/autoit]

    Also GUICtrlCreateTabItem("Blablabla") und darunter die dazugehörigen Controls
    Und dann das nächste GUICtrlCreateTabItem("lalala") und darunter die dazugehörigen Controls usw.

    [autoit]


    GUICtrlCreateTabItem

    [/autoit]

    kommt bei Dir gar nicht vor?

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • ganz so leicht wie bei dir ist es leider nicht

    wenn da der tab "Status Quakenet" auf geht udn es geht kein weiter tab auf dann unetn in die Inputbox einfach "join #belibigerchannel" eingeben
    der erste tab geht sauber auf es wird das status fenster + editbox versteckt
    und für Tab1 ( erster Channel) werden auch die richtigen sachen angezeigt
    Das problem entsteht erst beim zweiten channel
    also nochmal im tab 0 "Status Quakenet" in der Input leiste nochmal "join #einandererchannel" eingeben und schwubs geht der Tab 2 auf

    Die Tabs sind ja 0 bassierend
    Wenn also der dritte Tab also Tab2 auf ist fehlt dort aber die Inputbox und die Nickliste
    er zeigt sie nicht an obwohl der Befehl fürs anzeigen ausgeführt wird

    Ich habe mir auch mit GUICtrlGetState die statuswerte gehollt und danach wechselt er show und hide auch korrekt
    aber sie kommen einfach nicht zum vorschein

    Ich kann leider nicht die Controlls direkt auf den Tabs plazieren das ich durch einfaches wechseln der Tabs diese anzeigen lassen könnte,
    daher muss ich ja immer alles ausblenden und nur das was wichtig ist einblenden

    Ich such mitlerweile seit knapp 14 stunden den fehler und find ihn einfach nicht..

    Es fehlt AutoIT eigentlich die funktion das man den Controlls direkt ein Tab Handle zuweisen könnte.

    Vllt hat ja der ein oder andere hier noch eine Idee

  • Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------
    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #include <GuiIPAddress.au3> ;für IP Box

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Example()

    [/autoit] [autoit][/autoit] [autoit]

    Func Example()
    Local $tab, $tab0, $tab0OK, $tab0input
    Local $tab1, $tab1combo, $tab1OK
    Local $tab2, $tab2OK, $msg
    Local $Gui, $Inp_Client_IP ; für IPBox Test
    $Gui = GUICreate("Meine GUI mit Tabs", 350, 175); Erstellt ein GUI-Fenster welches mittig ausgerichtet wird

    [/autoit] [autoit][/autoit] [autoit]

    GUISetBkColor(0x00E0FFFF)
    GUISetFont(9, 300)

    [/autoit] [autoit][/autoit] [autoit]

    $tab = GUICtrlCreateTab(10, 10, 300, 100)

    [/autoit] [autoit][/autoit] [autoit]

    $tab0 = GUICtrlCreateTabItem("Tab0")
    GUICtrlCreateLabel("Beschriftung0", 30, 80, 80, 20)

    [/autoit] [autoit][/autoit] [autoit]

    $Inp_Client_IP = _GUICtrlIpAddress_Create($Gui, 180, 80, 80, 20)
    _GUICtrlIpAddress_Set($Inp_Client_IP, "1.1.1.1")

    [/autoit] [autoit][/autoit] [autoit]

    $tab0OK = GUICtrlCreateButton("OK0", 20, 50, 50, 20)
    $tab0input = GUICtrlCreateInput("Standard", 80, 50, 70, 20)

    [/autoit] [autoit][/autoit] [autoit]

    $tab1 = GUICtrlCreateTabItem("Tab----1")
    GUICtrlCreateLabel("Beschriftung1", 30, 80, 80, 20)
    $tab1combo = GUICtrlCreateCombo("", 20, 50, 60, 120)
    GUICtrlSetData(-1, "Trids|CyberSlug|Larry|Jon|Tylo", "Jon") ; Standardwert Jon
    $tab1OK = GUICtrlCreateButton("OK1", 80, 50, 50, 20)

    [/autoit] [autoit][/autoit] [autoit]

    $tab2 = GUICtrlCreateTabItem("Tab2")
    GUICtrlSetState(-1, $GUI_SHOW) ; Erscheint zuerst
    GUICtrlCreateLabel("Beschriftung2", 30, 80, 80, 20)
    $tab2OK = GUICtrlCreateButton("OK2", 140, 50, 50)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateTabItem(""); Beendet die Tab Definition

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Klicke auf einen Tab und dessen Beschriftung wird sichtbar", 20, 130, 250, 40)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    While 1
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg = $tab Then
    ; Der angeklickte Tab erscheint
    WinSetTitle("Meine GUI mit Tabs", "", "Meine GUI mit Tabs" & GUICtrlRead($tab))
    EndIf
    WEnd
    EndFunc ;==>Example

    [/autoit]

    hier mal das Beispiel aus der Hilfe um eine IP Box erweitert dann siehst du was ich meine,
    zum einen wie das regulär mit den Tabs gemacht wird und zum anderen das es controls gibt die wennn man nix daggegen macht überall zusehen sind.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------
    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #include <GuiIPAddress.au3> ;für IP Box

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Example()

    [/autoit] [autoit][/autoit] [autoit]

    Func Example()
    Local $tab, $tab0, $tab0OK, $tab0input
    Local $tab1, $tab1combo, $tab1OK
    Local $tab2, $tab2OK, $msg
    Local $Gui, $Inp_Client_IP, $current ; für IPBox Test
    $Gui = GUICreate("Meine GUI mit Tabs", 350, 175); Erstellt ein GUI-Fenster welches mittig ausgerichtet wird

    [/autoit] [autoit][/autoit] [autoit]

    GUISetBkColor(0x00E0FFFF)
    GUISetFont(9, 300)

    [/autoit] [autoit][/autoit] [autoit]

    $tab = GUICtrlCreateTab(10, 10, 300, 100)

    [/autoit] [autoit][/autoit] [autoit]

    $tab0 = GUICtrlCreateTabItem("Tab0")
    GUICtrlCreateLabel("Beschriftung0", 30, 80, 80, 20)

    [/autoit] [autoit][/autoit] [autoit]

    $Inp_Client_IP = _GUICtrlIpAddress_Create($Gui, 180, 80, 80, 20)
    _GUICtrlIpAddress_Set($Inp_Client_IP, "1.1.1.1")

    [/autoit] [autoit][/autoit] [autoit]

    $tab0OK = GUICtrlCreateButton("OK0", 20, 50, 50, 20)
    $tab0input = GUICtrlCreateInput("Standard", 80, 50, 70, 20)

    [/autoit] [autoit][/autoit] [autoit]

    $tab1 = GUICtrlCreateTabItem("Tab----1")
    GUICtrlCreateLabel("Beschriftung1", 30, 80, 80, 20)
    $tab1combo = GUICtrlCreateCombo("", 20, 50, 60, 120)
    GUICtrlSetData(-1, "Trids|CyberSlug|Larry|Jon|Tylo", "Jon") ; Standardwert Jon
    $tab1OK = GUICtrlCreateButton("OK1", 80, 50, 50, 20)

    [/autoit] [autoit][/autoit] [autoit]

    $tab2 = GUICtrlCreateTabItem("Tab2")
    GUICtrlSetState(-1, $GUI_SHOW) ; Erscheint zuerst
    GUICtrlCreateLabel("Beschriftung2", 30, 80, 80, 20)
    $tab2OK = GUICtrlCreateButton("OK2", 140, 50, 50)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateTabItem(""); Beendet die Tab Definition

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Klicke auf einen Tab und dessen Beschriftung wird sichtbar", 20, 130, 250, 40)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $tab ; GUI - Durchscheinen des IP Dialoges verhindern
    $current = GUICtrlRead($tab)
    Switch $current
    Case 0
    _GUICtrlIpAddress_ShowHide ($Inp_Client_IP, @SW_SHOW)
    Case 1
    _GUICtrlIpAddress_ShowHide ($Inp_Client_IP, @SW_HIDE)
    Case 2
    _GUICtrlIpAddress_ShowHide ($Inp_Client_IP, @SW_HIDE)
    EndSwitch
    Case $GUI_EVENT_CLOSE
    ExitLoop
    ;~ If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    ;~ If $msg = $tab Then
    ; Der angeklickte Tab erscheint
    ;~ WinSetTitle("Meine GUI mit Tabs", "", "Meine GUI mit Tabs" & GUICtrlRead($tab))
    ;~ EndIf
    EndSwitch
    WEnd
    EndFunc ;==>Example

    [/autoit]

    und hier das anfangs von mir gepostete reingebastelt und ip box nur auf dem ersten Tab

    Falls du viele controls ausblenden musst empfiehlt es sich das arry tutorial von BugFix einzusehen,
    dort werden in einem Beispiel die controls in enem Array verwaltet dann kann man in ener schleife Controls erstellen ausblenden etc

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • *kotzkrampf krieg der 100 Zeiler futsch weil die Katze über die Tastertur gelaufen ist*

    So nochmal
    die Funktion _AddChannel erstellt immer ein weiteren Tab und dazu auch 3 Controlls
    _GUICtrlRichEdit_Create, GUICtrlCreateInput und GUICtrlCreateList
    die zurückgelieferten Handels werden in eimen Array gespeichert und mit dem Tabhandle gespeichert

    bei den zwei standartfunktionen GUICtrlCreateList GUICtrlCreateInput arbeitet _WinAPI_ShowWindow nicht korrekt daher habe ich dort GUICtrlSetState im einsatz
    bei dem Sonderncotroll _GUICtrlRichEdit_Create arbeitet _WinAPI_ShowWindow wunderbar (funtkioniert wie es soll)

    bei Tabaktion wird WM_NOTIFY auch aufgerufen
    dort wird erkannt welcher tab zu welchen Channel gehort bzw ob es der 0 Tab ist der als Statusfenster(Tabindex 0) dient

    Dort läuft auch alles soweit zufriedendstellen bis auf den kleinen manko das wenn ein 2 3 4 .. Channel erstellt wird,
    die Standartcontrolls GUICtrlCreateInput und GUICtrlCreateList ab dem dritten Tab (Tabindex 2) nicht mehr angezeigt werden

    klickt man auf den zweiten Tab (Tabindex 1) wird der erste Channel sauber angezeigt
    Klickt man auch den ersten Tab (Tabindex 0 = Statusfenster) wird auch sauber alles ausgeblendet und nur vom Statusfenster die zwei Controlls angezeigt.
    alles was Tabindex 2 oder höher ist werden die Standartcontrolls nicht mehr angezeigt

    Da sind sie was ich mittels GUICtrlGetState auch überprüft hatte.

    Sprich eigentlich arbeiten die Funktionen wie sie sollen .. kommen aber am dem 3ten Tab nicht mehr ganz mitt und vergessen die Controlls einzublenden

    Ich habe extra deutlich auch die Consolwrite drin gelassen damit man auch bissel nachprüfen kann was passiert


    EDIT:
    Hast du dir den Code überhaupt mal angesehen ?
    Ich arbeite mit meheren Array´s falls du das nicht gesehen haben solltest