1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. teh_hahn

Beiträge von teh_hahn

  • Information aus dokument extrahieren

    • teh_hahn
    • 22. Mai 2007 um 00:02

    Uups, korrekt Bernd... Hab doch tatsächlich aus den Zeichen Bits gemacht. ^^

    Dann ist es natürlich richtig. Will nix gesagt haben. :D

  • Information aus dokument extrahieren

    • teh_hahn
    • 21. Mai 2007 um 20:53

    Die 4.095 (also MAX_LINESIZE) ist die Anzahl der Zeichen, die eine AutoIt-Zeile lang sein darf (wie z.B. eine If-Abfrage)

    Die Länge eines Strings in Autoit beträgt angeblich 2.147.483.647 (entspricht 256 Megabyte) Zeichen, was ich aber nicht weiter kommentieren kann (solche großen Datenmengen würde ich nicht mit AutoIt verarbeiten).

    Hoffe ich konnt Die helfen.

    Schönen abend ebenfalls!

    PS: Die Länge einer Skriptzeile beträgt ca 0.5 Kilobyte, nicht 4KB!

  • Information aus dokument extrahieren

    • teh_hahn
    • 21. Mai 2007 um 20:06

    Achso, dann habe ich Deine Frage falsch verstanden.

    Also, beim Hilfe Beispiel wird solange EIN Zeichen ausgegeben, bis das Ende der Datei erreicht ist. die Variable $chars wird in der While-Schleife jedesmal aufs neue überschrieben, richtig. Wenn Du dir die Variable $chars nach der While-Schleife anschauen würdest, so hättest Du nur das letzte Zeichen der Datei darin stehen.

    Was meinst Du mit dem Ende? Die Searchstrings musst Du gegebenenfalls oben anpassen, wobei ich jetzt aber kein problem mit einem Leerzeichen sehe. Ansonsten einfach

    [autoit]

    Local $a_searchstrings[2] = ["pos=", "neg="]

    [/autoit]

    anpassen...

    Wegen des StringRegExp fragst Du am besten th.meger... Da bin ich jetzt nicht soo bewannt...

  • Information aus dokument extrahieren

    • teh_hahn
    • 21. Mai 2007 um 19:45

    Hi. Werd mal versuchen Deine Fragen so gut wie möglich zu beantworten...

    1. Soweit ich weiß, gibt es eine maximale Länge für Strings (schaust am besten mal in die aktuelle Hilfe...) Wenn Deine Datei also zu lang ist, musst du aud die Länge des Strings prüfen und dann den Rest der Datei in eine neue Variable schreiben (usw...)

    2. Ja, die Exits in AutoIt gleichen dem ERRORLEVEL der Windows Batch. Somit könnte man nacher abfangen, ob das Programm korrekt beendet wurder (ERRORLEVEL = 0) oder nicht. Ist Geschmackssache. Ich mach es ganz gerne...

    3. Hab mich bisher nicht mit Pascal beschäftigt, aber in AutoIt ist es einfach so, dass das "=" sowohl Zuweisung als auch Überprüfung in If/Case-Anweisungen ist (eigentlich sehr schweinisch...) Das "==" überprüft auch Groß/Kleinschreibung (case-sensitive). Ich finds so einfach besser. Ebenfalls Geschmackssache...

    4. Nein, dabei wird immer ein Zeichen ausgegeben, bis das Dateiende (EOF) erreicht ist. Der zweite Parameter ($i_count) von FileRead bewirkt dies.

    Fragen kost' ja nix und wenn ich keine Lust hätte Dir zu antworten, dann würd ichs einfach lassen. ;) Also np...

  • Information aus dokument extrahieren

    • teh_hahn
    • 21. Mai 2007 um 19:09

    OK, ich geb mich geschlagen...
    th.megers Lösung ist auf jeden Fall eleganter! Habs Dir mal zusammen gefasst. Viel Spaß noch!

    [autoit]

    #NoTrayIcon
    Opt("MustDeclareVars", 1)

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

    Local Const $S_TXTFILE = @ScriptDir & "\textfile.log"
    Local $h_file, $a_found = -1
    Local $s_filecontent, $s_variableb, $s_variablec = ""
    Local $a_searchstrings[2] = ["pos=", "neg="]

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

    $h_file = FileOpen($S_TXTFILE, 0)
    If $h_file == -1 Then
    MsgBox(48, "Warning", "The file can not be opened!")
    Exit (2)
    EndIf

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

    While 1
    $s_filecontent &= FileRead($h_file)
    If @error = -1 Then
    ExitLoop 1
    EndIf
    WEnd

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

    If $s_filecontent == "" Then
    MsgBox(48, "Warning", "The file is empty!")
    Exit (1)
    EndIf

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

    For $i = 0 To UBound($a_searchstrings, 1) - 1 Step 1
    $a_found = StringRegExp($s_filecontent, '(?<=' & $a_searchstrings[$i] & ')\w{1,}', 3)
    If IsArray($a_found) == 1 Then
    For $p = 0 To UBound($a_found) - 1
    MsgBox(0, "Debug", $a_found[$p])
    Next
    EndIf
    Next

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

    Exit (0)

    [/autoit]

    Gefixed...

  • Information aus dokument extrahieren

    • teh_hahn
    • 21. Mai 2007 um 18:22

    Jupp, sollte wirklich kein Problem sein. Versuch mal folgendes:

    [autoit]

    #NoTrayIcon
    #include <String.au3>
    Opt("MustDeclareVars", 1)

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

    Local Const $S_TXTFILE = @ScriptDir & "\textfile.log"
    Local $h_file = -1
    Local $s_filecontent, $s_variableb, $s_variablec = ""

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

    $h_file = FileOpen($S_TXTFILE, 0)
    If $h_file == -1 Then
    MsgBox(48, "Warning", "The file can not be opened!")
    Exit(2)
    EndIf
    While 1
    $s_filecontent &= FileRead($h_file)
    If @error = -1 Then
    ExitLoop 1
    EndIf
    WEnd

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

    If $s_filecontent == "" Then
    MsgBox(48, "Warning", "The file is empty!")
    Exit(1)
    EndIf

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

    $s_variableb = _StringBetween($s_filecontent, "pos=", " neg")
    $s_variablec = _StringBetween($s_filecontent, "neg=", " ")
    If IsArray($s_variableb) == 1 And IsArray($s_variablec) == 1 Then
    MsgBox(0, "Debug", "ValB: " & $s_variableb[0] & @CR & "ValC: " & $s_variablec[0])
    EndIf

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

    Exit(0)

    [/autoit]

    Beim 2. StringBetween musst Du eventuell ein wenig tricksen, bzw. mit StringInStr und Konsorten arbeiten.

  • Frage zu Array

    • teh_hahn
    • 11. Mai 2007 um 08:20

    Hi,

    wolte mir das auslese aus einer Configdatei erleichtern, habe dazu folgendes geschrieben:

    [autoit]

    Global $i_udpstart = 1
    Global $s_ipaddress = @IPAddress1
    Global $i_udpport = 514

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

    Local $a_tmpval = -1
    Local $s_xroot = "Settings/"
    Local $a_xpaths[3] = [$s_xroot & "UDPEnabled", $s_xroot & "IPAddress", $s_xroot & "UDPPort"]
    Local $a_options[3] = [$i_udpstart, $s_ipaddress, $i_udpport]
    ; Jetzt stehen die oben definierten Werte im Array.

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

    For $i = 0 To UBound($a_options, 1) - 1 Step 1
    $a_tmpval = _XMLGetValue($a_xpaths[$i])
    If $a_tmpval <> -1 Then
    If UBound($a_tmpval, 1) == 2 Then
    $a_options[$i] = $a_tmpval[1]
    EndIf
    EndIf
    Next
    ; Jetzt stehen auch die aus der Configdatei ausgelesenen Werte im Array.
    ; ...

    [/autoit]

    Was ich nun erreichen möchte ist, dass die oben definierten globalen Variablen den Inhalt der Arrayvariablen bekommen, beim erstellen des Arrays werden diese aber ja nur kopiert, wie bekomme ich es also hin?

    Bin für alles zu haben! :D

  • Icons in ListViewColumn zentrieren

    • teh_hahn
    • 29. März 2007 um 08:00

    Hehe, sorry. War etwas schreibfaul...

    Hier ein Beispiel:

    [autoit]

    #include <GuiConstants.au3>
    #include <GuiListView.au3>

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

    Local $array[256]
    Local $index = 0

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

    $gui = GUICreate("Icons in ListViews", 320, 240, -1, -1, $WS_CAPTION + $WS_VISIBLE + $WS_MINIMIZEBOX + $WS_SYSMENU)

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

    $listview = GUICtrlCreateListView("Icon|Beschreibung", 10, 10, 300, 220, $WS_BORDER + $LVS_NOSORTHEADER + $LVS_SHOWSELALWAYS + $LVS_NOLABELWRAP, $LVS_EX_FULLROWSELECT + $LVS_EX_SUBITEMIMAGES)
    $array[$index] = GUICtrlCreateListViewItem("|Testtext", $listview)
    GUICtrlSetImage($array[$index], "icon.ico", 0, 0)
    _GUICtrlListViewJustifyColumn($listview, 0, 2)
    $index += 1

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

    While 1
    $msg = GUIGetMsg()
    If $msg == $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    [/autoit]

    Jetzt nochmal die Frage: Ist es irgendwie möglich die erste Spalte zu zentrieren, hab außer

    [autoit]

    _GUICtrlListViewJustifyColumn($listview, 0, 2)

    [/autoit]

    nichts gefunden!

  • Icons in ListViewColumn zentrieren

    • teh_hahn
    • 28. März 2007 um 13:54

    Hi!

    hab nochmal eine Frage zur ListView. Wie lässt sich ein Icon in einer Spalte zentrieren?

    [autoit]

    _GUICtrlListViewJustifyColumn($clientlistview, 0, 2)

    [/autoit]

    scheint bei icons nicht zu funktionieren, wohl aber bei Text. Gibt es da eine Möglichkeit?

    Bin wie immer gespannt auf Ideen...
    :D

  • GUICtrlSetImage auf ListViewItems unter Vista

    • teh_hahn
    • 28. März 2007 um 10:29

    Hi!

    lol, lag wirklich an der Icon-Größe (war mir fast sicher, dass ich sowohl 16x16 als auch 32x32 in den .ico-Dateien hatte) ^^.

    Jetzt funzt es auch unter Vista! Super Sache.

    Danke!

    PS: Gibt es auch eine Möglichkeit die Threads selber zu schließen? Wenn ja finde ich die nicht.

  • GUICtrlSetImage auf ListViewItems unter Vista

    • teh_hahn
    • 27. März 2007 um 20:45

    Nein, ich beziehe mich auf mein Skript. :D
    Zieh mir grad den Source-Code von Galenda rein:

    [autoit]

    GUICtrlSetImage($gui_textmode_list_ids[0][$i + 1], @ScriptDir & "\Resources\bell.ico", 0)

    [/autoit]

    Da ist es ja. Mhh, wieso funktioniert es denn bei mir nicht?
    An den ListView-Style ($WS_BORDER + $LVS_NOSORTHEADER + $LVS_SHOWSELALWAYS + $LVS_NOLABELWRAP, $LVS_EX_FULLROWSELECT + $LVS_EX_SUBITEMIMAGES) liegt es auch nicht. Wenn ich sie weg lasse das selbe. Auch an der selbst erstellten icon-dll kann es nicht liegen, funktioniert auch mit den .ico-dateien nicht.

    [Zeit in der ich weiter probiert habe...]

    Ich fasse es nicht. Es liegt tatsächlich an den .ico-dateien. Womit habt Ihr die gemacht. Ich habe IconXP verwendet, scheint jawohl ziemlicher Mist zu sein.

  • GUI-While mit ständiger UDP-Abfrage

    • teh_hahn
    • 27. März 2007 um 19:41

    Hi,

    auch hier nun die Lösung (danke peethebee, hab mir zwar schon gedacht, das es in einem Skript nicht machbar ist, aber naja...):

    Ich glaube man darf AdlibEnable() nicht überstrapazieren ^^. Bei einem Sleep-Wert von 100 schmierte die ganze GUI immer ab, weswegen ich dachte auch das funktioniert nicht. Hier der Code (wie gesagt, lag nur am Sleep-Wert - 200 läuft super):

    [autoit]

    AdlibEnable("_CheckUDPRecv", 200)

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

    Func _CheckUDPRecv()
    $udpmsg = UDPRecv($boundedsocket, $udpport)
    If $udpmsg <> "" Then
    [...]
    EndIf
    EndFunc

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

    While 1
    $msg = GUIGetMsg(1)

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

    [...]
    WEnd

    [/autoit]
  • GUICtrlSetImage auf ListViewItems unter Vista

    • teh_hahn
    • 27. März 2007 um 19:29

    Hi,

    ich nutze nun auch seit kurzer Zeit Windows Vista und habe nun mal ein Skript von mir auf Vista laufen lassen, wobei mir sofort etwas auffiel:

    Das setzen eines Icons mit GUICtrlSetImage() in einer ListView funktioniert unter Vista anscheinend nicht, oder ich mache etwas falsch. Ich verweise auch nochmal auf folgendes, was unter Windows XP auch funktioniert: Icon für ListViewItem

    Ausschnitt aus meinem Code:

    [autoit]

    Local $clientarray[$maxitems]
    Local $clientindex = 0

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

    [...]

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

    $clientlistview = GUICtrlCreateListView("Status|Hostname|IP-Address", 10, 35, 780, 400, $WS_BORDER + $LVS_NOSORTHEADER + $LVS_SHOWSELALWAYS + $LVS_NOLABELWRAP, $LVS_EX_FULLROWSELECT + $LVS_EX_SUBITEMIMAGES)
    $clientarray[$clientindex] = GUICtrlCreateListViewItem("|" & $hostname & "|-", $clientlistview)

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

    GUICtrlSetImage($clientarray[$clientindex], $respath & "\icons.dll", 0)
    $clientindex += 1

    [/autoit]

    Ich setze also auf die ID des ListViewItems das Icon. Im Nachhinein betrachtet fällt mir aber auf, dass das Icon ja automatisch in die erste Spalte der ListView gesetzt wird. Gibt es auch eine Möglichkeit dies explizit zu machen (evtl. zweidimensionales Array, was auch die Spalte enthält)?

    Kriegt das jemand unter Windows Vista zum laufen? Das wäre echt super!

  • MenuItems auf ListViewItems

    • teh_hahn
    • 27. März 2007 um 19:13

    Hi,

    hab letztens doch noch die Kurve gekriegt. ^^

    Musste aber einen Workaround anwenden, da mir wie gesagt zwar die Erschaffung des/der jeweiligen Menu/MenuItems für jedes ListViewItem gelang, nicht aber die Abfrage dieser im Falle eines Clicks.

    Hier nun (die nicht ganz perfekte Lösung):

    [autoit]

    Local $clientundercursor = -1
    Local $contextenabled = False

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

    [...]

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

    While 1
    [...]

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

    $clientundercursor = _GUICtrlListViewGetHotItem($clientlistview)
    If $clientundercursor == -1 And $contextenabled == True Then
    GUICtrlDelete($clientcontext)
    $contextenabled = False
    ElseIf $clientundercursor <> -1 And $contextenabled == False Then
    _GUICreateClientContext()
    $contextenabled = True
    EndIf
    WEnd

    [/autoit]

    Ich prüfe die ganze Zeit über, ob sich ein ListViewItem unter dem Cursor befindet. Ist dies nicht der Fall (-1), dann wird das komplette ContextMenu gelöscht. Befindet sich jedoch ein ListViewItem unter dem Cursor so wird das ContextMenu einfach neu erstellt.

    Somit habe ich nur ein ContextMenu, kann aber trotzdem alle ListViewItems anwählen, da ich über die ContextMenuItems die ID des ListViewItems auslese und damit weiter mache.

    Einziger Nachteil dabei ist folgender:

    Klickt man direkt mit der rechten Maustaste (aus dem geöffneten ContextMenu heraus) auf eine Stelle der ListView ohne ListViewItem so erscheint das ContextMenu trotzdem, da die Abfrage dies nicht berücksichtigt.

  • MenuItems auf ListViewItems

    • teh_hahn
    • 26. März 2007 um 15:05

    Hi again,

    das Thema hier lässt mir keine Ruhe. Habe jetzt mal folgendes probiert:

    [autoit]


    Local $maxclients = 256
    Local $clientarray[$maxclients]
    Local $clientcontext[$maxclients]
    Local $pingcmitem[$maxclients]
    Local $rdpcmitem[$maxclients]
    Local $clientindex = 0

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

    $clientlistview = GUICtrlCreateListView("Status|Hostname|IP-Address", 10, 30, 780, 400, $LVS_NOSORTHEADER + $LVS_SHOWSELALWAYS, $LVS_EX_FULLROWSELECT + $LVS_EX_SUBITEMIMAGES)
    $clientarray[$clientindex] = GUICtrlCreateListViewItem("Icon|Test1|192.168.0.1, $clientlistview)

    $clientcontext[$clientindex] = GUICtrlCreateContextMenu($clientarray[$clientindex])

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

    $pingcmitem[$clientindex] = GUICtrlCreateMenuitem("Ping", $clientcontext[$clientindex], 1, 0)
    $rdpcmitem[$clientindex] = GUICtrlCreateMenuitem("RDP", $clientcontext[$clientindex], 2, 0)

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

    While 1
    $msg = GUIGetMsg(1)
    For $i = 1 To $pingcmitem[0] Step 1
    If $msg[0] == $pingcmitem[$i] Then
    _GetSelectionAndCallFunc("_PingClient")
    EndIf
    Next
    WEnd

    [/autoit]

    Jedes MenuItem ist somit eindeutig identifizierbar (z.B. $pingcmitem[0] = 4167, wobei 4167 der control-identifier ist). Wie frage ich dieses aber nun in der GUI-While-Schleife ab? Der obige Versuch bricht in der Zeile

    [autoit]

    If $msg[0] == $pingcmitem[$i] Then

    [/autoit]

    mit der Fehlermeldung ab, dass das Skript ausserhalb des Arrays läuft. Hier gibt es doch sicherlich eine Möglichkeit das Ganze abzufangen, oder nicht?

    Alternativ wäre mir auch damit geholfen, dass es eine Möglichkeit gibt, das beim Rechtsclicken auf die ListView überprüft wird, ob ein ListViewItem darunter liegt. Das Kontextmenü darf dann nur gezeigt werden, wenn dies der Fall ist. Beim clicken auf eine leere Stelle der ListView dürfte KEIN KontextMenü erscheinen. Lässt sich dies irgendwie realisieren=

    Dies sind die beiden Dinge die mir einfallen, weil es so doch etwas unglücklich ist!

    MFG

    PS: Sry, hab bisher gar nicht gesehen, dass es hier einen Extra-Tag für AutoIt-Code gibt. Bisher immer den normalen [CODE]-Tag genommen.

  • GUI-While mit ständiger UDP-Abfrage

    • teh_hahn
    • 26. März 2007 um 12:04

    Hallo,

    ich habe ein Programm geschrieben, dass den GUI-MessageLoop Modus (mit While 1-Schleife) verwendet. Das Programm soll ständig auf UDP-Nachrichten "horchen", weswegen ich die Abfrage auf UDP-Empfang auch in der While 1-GUI-Schleife durchführe. Das Problem dabei ist, dass die GUI immer ein wenig "nachhängt", was doch etwas störend ist. Auch die Funktion AdlibEnable brachte mir da keinen Erfolg.

    Was ich benötige, sind zwei parallele While 1-Schleifen, wobei eine GUI-Abfragen und die andere UDP-Abfragen durchführt, ohne dass diese sich gegenseitig ausbremsen.

    Hier noch ein Teilauschnitt vom Code:

    Code
    While 1
    ;~ Receives constantly UDP messages
    ;~ -----------------------------------------------------------------------------
    	$syslogmsg = UDPRecv($boundedsocket, $syslogport)
    	If $syslogmsg <> "" Then
    		_AddSyslogEntry($syslogmsg)
    	EndIf
    ;~ -----------------------------------------------------------------------------
    	$msg = GUIGetMsg(1)
    	Select
    		Case $msg[0] == $GUI_EVENT_CLOSE Or $msg[0] == $exitmitem And $msg[1] = $maingui
    			If MsgBox(1+64, "Exit", "Do you really want to quit " & $apptitle & "?") == 1 Then
    				ExitLoop
    			EndIf
    	EndSelect
    WEnd
    Exit
    Alles anzeigen
  • MenuItems auf ListViewItems

    • teh_hahn
    • 23. März 2007 um 08:52

    Ähh ja, sowas in der RIchtung schwebte mir auch vor. Folgendes Testbeispiel:

    Code
    #include <GuiConstants.au3>
    
    
    Global $clientcontext[20]
    Global $pingcmitem[20]
    Global $rdpcmitem[20]
    Global $counter = 0
    
    
    $maingui = GUICreate("ListViewItems ContextMenu Test", 800, 600, -1, -1, $WS_CAPTION + $WS_VISIBLE + $WS_MINIMIZEBOX + $WS_SYSMENU)
    $clientlistview = GUICtrlCreateListView("Hostname|IP-Address", 10, 30, 780, 400, $LVS_SHOWSELALWAYS + $LVS_NOSORTHEADER)
    $testbt = GUICtrlCreateButton("&Add item", 10, 440, -1, -1)
    
    
    While 1
    	$msg = GUIGetMsg(1)
    	Select
    		Case $msg[0] == $GUI_EVENT_CLOSE
    			ExitLoop
    		Case $msg[0] == $testbt
    			_CreateListViewItem()
    		Case $msg[0] == $pingcmitem
    			MsgBox(0, $pingcmitem, GUICtrlRead($pingcmitem))
    		Case $msg[0] == $rdpcmitem
    			MsgBox(0, $rdpcmitem, GUICtrlRead($rdpcmitem))
    	EndSelect
    WEnd
    GUIDelete($maingui)
    Exit
    
    
    Func _CreateListViewItem()
    	$clientid = GUICtrlCreateListViewItem("Item " & $counter & "|Host", $clientlistview)
    	$clientcontext[$counter] = GUICtrlCreateContextMenu($clientid)
    	$pingcmitem[$counter] = GUICtrlCreateMenuitem("Ping", $clientcontext, 1, 0)
    	$rdpcmitem[$counter] = GUICtrlCreateMenuitem("RDP", $clientcontext, 2, 0)
    	$counter = $counter + 1
    EndFunc
    Alles anzeigen

    Jedesmal, wenn ein Item erzeugt wird, soll ein Contexmenü mit einer eindeutigen ID erstellt werden. Das klappt auch schon mal nicht.
    Doof ist auch, dass die MenuItems global deklariert werden müssen, da ich diese in der While 1-GUI Schleife abfragen muss.

    Irgendwie bereitet mir das momentan doch leichte Probleme.

  • MenuItems auf ListViewItems

    • teh_hahn
    • 22. März 2007 um 13:21

    Hallo nochmal,

    ganz vergessen, das ich diesen Post mal eröffnet habe, auf jedenfall muss ich grade wieder etwas mit Kontextmenüs in ListViews machen und frage mich, wie ich das mit dem MessageLoop-Modus realisieren kann.

    Der Funktion _GUICreateClientContext übergebe ich den ItemIndex der ListView!

    Hier ein wenig Code:

    Code
    Func _GUICreateClientContext($clientid)
    	Local $clientcontext, $pingcmitem, $rdpcmitem
    
    
    	$clientcontext = GUICtrlCreateContextMenu($clientid)
    	$pingcmitem = GUICtrlCreateMenuitem("Ping", $clientcontext, 1, 0)
    	$rdpcmitem = GUICtrlCreateMenuitem("RDP", $clientcontext, 2, 0)

    Drauf zugreifen möchte ich nun aus meine GUI-While-Schleife, folgendes klappt aber (logischerweise) nicht:

    Code
    Case $msg[0] == $pingcmitem
    		_PingClient($clientid)


    Wie PeeTheBee bereits erwähnte muss ich irgendwie ein zweidimensionales Array erschaffen, dass die ClientID mit der jeweiligen MenuItemID verbinde.

    Ich weiß bloß nicht, wie ich das realisieren kann!

    Wie immer für jeden Vorschlag zu haben!

  • GUICtrlSetBkColor auf Zelle in ListView

    • teh_hahn
    • 22. März 2007 um 08:11

    Ja, es geht darum eine nur eine Zelle einzufärben. Tam0rs Lösung ist zwar möglich, aber wirklich etwas unglücklich, wenn man öfters ein neues Item zur ListView hinzufügen möchte, wie in meinem Fall.
    Naja, gebe mich damit zufrieden, dass ich zumindest die jeweilige Zeile einfärben kann.

    Vielen Dank!

  • GUICtrlSetBkColor auf Zelle in ListView

    • teh_hahn
    • 21. März 2007 um 15:25

    Hallo zusammen,

    Ich möchte gerne eine Zelle in einer ListView farbig hinterlegen, finde aber keine Möglichkeit dies in AutoIt zu realisieren, da ich nicht weiß, wie ich auf eine Zelle zugreifen kann. Die meisten Funktionen liefern mir nur den Index zurück, der aber nur die Zeile angibt, nicht aber die Spalte.

    Man bräuchte eine Funktion, die mir ein zweidimensionales Array zurückliefert, auf das ich dann mit der GUICtrlSetBkColor() zugreifen könnte.

    Nachfolgend meine momentane Lösung, die aber immer nur jede Zeile einfärbt.

    Code
    $sysloggui = GUICreate($apptitle & " Syslog", 640, 480, -1, -1, $WS_CAPTION + $WS_SYSMENU)
    $sysloglistview = GUICtrlCreateListView("Timestamp|Severity|Hostname|Message", 10, 10, 620, 460, $LVS_NOSORTHEADER)
    
    
    ...
    
    
    	Select
    		Case $severity[0] == 9
    			$severitymeaning = "Alarm"
    			$color = "0x000000"
    			$bkcolor = "0xff0000"
    		Case $severity[0] == 12
    			$severitymeaning = "Warning"
    			$color = "0x000000"
    			$bkcolor = "0xffff00"
    		Case $severity[0] == 14
    			$severitymeaning = "Information"
    			$color = "0x000000"
    			$bkcolor = "0xffffff"
    		Case $severity[0] == 102
    			$severitymeaning = "NTP"
    			$color = "0xffffff"
    			$bkcolor = "0x000000"
    		Case Else
    			$severitymeaning = "Undefined"
    			$color = "0x000000"
    			$bkcolor = "0xffffff"
    	EndSelect
    
    
    	$itemindex = GUICtrlCreateListViewItem($timestamp & "|" & $severitymeaning & "|" & $syslogsplit[4] & "|" & $message, $sysloglistview)
    	GUICtrlSetColor($itemindex, $color)
    	GUICtrlSetBkColor($itemindex, $bkcolor)
    Alles anzeigen

    Bin wie immer für jeden Vorschlag zu haben! ^^

    MFG

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™