GuiCtrlCreateMenueItem HILFE

  • Hey,
    Ich bin gerade dabei eine Online Liste für einen Chat zu erstellen und will in das Menü alle Kontakte reinschreiben sie online sind. Das soll folgender maßen funktionieren: Der der sich anmeldet schickt einen Code mit dem usernamen ins WLan welcher vom Empfänger erkannt wird und dann erstellt das Programm im Menü Item den Namen. wenn man sich abmeldet löscht er den usernamen aus dem Menü Item. Das Programm muss aber gleichzeitig die ganze Zeit prüfen ob sich noch jmd anmeldet und diesen dann ebenfalls in die Liste schreibt.

    Vielen Dank für die Hilfe im Voraus,
    i7Clock

  • Das skript is nich von mir allein und ich weiß nich ob der mit dem ichs gemacht hab es möchte ich stelle das Problem dar wenns hilft...
    ich möchte das wie ichs erklärt habe verbinden komme aber auf keine Lösung außer wenn ich alles abspeichere und aufrufe was aber das Programm so extrem verlangsamen würde dass es im WLAN kein instant mehr wäre was ich eigentlich haben wollte.

    Spoiler anzeigen

    $nFileMenu = GUICtrlCreateMenu("Menu")
    $nExititem1 = GUICtrlCreateMenuItem("New Name", $nFileMenu)
    GUICtrlSetOnEvent(-1, "renameyou")
    $nExititem2 = GUICtrlCreateMenuItem("Logs delete", $nFileMenu)
    GUICtrlSetOnEvent(-2, "logsdelete")
    $nExititem3 = GUICtrlCreateMenuItem("Exit", $nFileMenu)
    GUICtrlSetOnEvent(-4, "quit")
    $nExititem4 = GuiCtrlCreateMenuItem("Logout", $nFileMenu)
    GUICtrlSetOnEvent(-5, "logout")
    $nFileMenu2 = GUICtrlCreateMenu ("Online contacts")
    ;das is das Menü

    ;FUNKTION TO LOGIN
    Func _login()
    UDPSend($reachcast, "logged in" & "|" & $username)
    EndFunc

    ;FUNKTION IF SOMEONE IS ONLINE
    Func _onlineCheck ()
    $ncontactsitem1 = GUICtrlCreateMenuItem ($username2, $nFileMenu2)
    EndFunc

    ;Das is die Funktion
    ;Jetz die wile schleife

    While 1

    ;RECIEVING THE DATA FROM AN OPEN SOCKET
    $reachdata = UDPRecv($reachserver, 250)

    ; YOU RECEIVED SUCCESSFULL, SO RUN THIS
    If $reachdata <> "" Then

    $tmp = StringSplit($reachdata, "|")

    $linedata = $tmp[2]

    ; If the user who typed the message is you... call this function!
    If StringInStr($linedata, $username) = 0 And StringInStr($tmp[1], ".") <> 4 Then
    $str = StringSplit($linedata, "|")
    $last = $str[0]

    _GUICtrlListView_AddItem($chatarea, $str[$last] & " says: " & $tmp[1])
    _FileWriteLog("logs.txt", $str[$last] & " says: " & $tmp[1])
    EndIf
    EndIf

    ;DECLARE THE VARIABLES

    $str = StringSplit ($linedata,"|")
    $last = $str[0]
    $username2 = $str[$last]

    ;INVISIBLE OR LOGOUT
    ;If $tmp[1] = "/invisivle" Then
    ; $ncontactsitem1 = GUICtrlCreateMenuItem ("", $nFileMenu2)
    ;EndIf

    ; SETTING THE HOTKEY OF SENDING MSGS BY PRESSING ENTER

    If WinActive ("Chat") Then
    HotKeySet("{ENTER}", "sendmsg")
    Sleep(50)
    EndIf

    ;CHECK IF SOMEONE IS ONLINE
    If $username2 = $username Then
    Sleep(1)
    ElseIf $username2 <> $username Then
    _onlineCheck ()
    Sleep (20)
    EndIf

    WEnd

    ;Logout Funktion
    Func logout()
    FileDelete ("username.ini")
    UDPSend($reachcast, "/invisible" & "|" & $username)
    quit()
    EndFunc

  • Hallo i7Clock,

    dein Skriptbeispiel ist wertlos, es hat ja noch nicht einmal eine GUI. Hier ein Beispiel in dem die Menüeinträge dynamisch erstellt werden:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <Constants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    Opt('GUIOnEventMode', 1)
    Opt('TrayOnEventMode', 1)
    Opt('TrayMenuMode', 1)
    Opt("TrayIconHide", 1) ;hide the Trayicon

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

    Global $aUsers[1], $aMenuItems[100]
    $aUsers[0] = 0

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

    $hGui = GUICreate('Test',575,334,100,100)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
    Global $hMnuMain = GUICtrlCreateMenu("&Benutzer")
    _addUser()
    _CheckUsers()

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

    ;$idBtnExit = GUICtrlCreateButton("be&enden",500,275,60,20)
    ;GUICtrlSetOnEvent(-1,'_Exit')

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

    GUISetState()
    AdlibRegister("_checkUsers")
    While 1
    Sleep(125)
    WEnd

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

    Func _addUser()
    if $aUsers[0] > 19 Then Return
    AdlibUnRegister("_addUser")
    $sNewUser = chr(Random(65,90,1))
    _ArrayAdd($aUsers,$sNewUser)
    $aUsers[0]=UBound($aUsers) -1
    ;_ArrayDisplay($aUsers)
    AdlibRegister("_addUser",Random(1250,3333,1))
    EndFunc

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

    Func _delUser()
    if $aUsers[0] < 5 Then Return
    AdlibUnRegister("_delUser")
    _ArrayDelete($aUsers,Random(1,UBound($aUsers)-1))
    $aUsers[0]=UBound($aUsers) -1
    ;_ArrayDisplay($aUsers)
    AdlibRegister("_delUser",Random(3333,9999,1))
    EndFunc

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

    Func _CheckUsers()
    ;_ArrayDisplay($aMenuItems)
    for $i = 1 to UBound($aMenuItems) -1
    GUICtrlDelete($aMenuItems[$i])
    $aMenuItems[$i] = -999
    Next
    _ArraySort($aUsers)
    ;_ArrayDisplay($aUsers)
    for $i = 1 to $aUsers[0]
    $aMenuItems[$i] = GUICtrlCreateMenuItem($aUsers[$i], $hMnuMain)
    GUICtrlSetOnEvent(-1,"_ShowUser")
    Next
    EndFunc

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

    Func _ShowUser()
    AdlibUnRegister("_addUser")
    AdlibUnRegister("_delUser")
    ConsoleWrite(@GUI_CtrlId &@CRLF);& $aUsers[@GUI_CtrlId] & @CRLF)
    ConsoleWrite("Benutzer: " & $aUsers[@GUI_CtrlId-3] & @CRLF)
    ;Achtung der Wert der von @GiCtrlId abgezogen weerden muss ist abhängig von der Anzahl zuvor erstelleter Controlls
    ;_ArrayDisplay($aUsers)
    AdlibRegister("_addUser",Random(1250,3333,1))
    AdlibRegister("_delUser",Random(3333,9999,1))
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Falls du damit nicht zurecht kommst poste ein Beispielskript, das lauffähig ist und in dem sich das Array, dass die Benutzer enthält zufällig füllt/verändert,

    mfg autoBert