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. skyteddy

Beiträge von skyteddy

  • Gibt es InetGetDate oder vergleichbares?

    • skyteddy
    • 25. Februar 2010 um 16:35

    Ich heb mal nichmal vorsichtig den Finger! :)

    Hat jemand ne Idee?

    Besten Dank im voraus!
    R@iner

  • Gibt es InetGetDate oder vergleichbares?

    • skyteddy
    • 23. Februar 2010 um 21:27

    Hallo Andy,

    hab mich heute mal dem Thema angenommen und Deinen Beispiel-Code genommen.

    Bei Downloads via http vom AVM-Server bekomme ich brav das Last-Modification-Date und ich kann das auch rausfiltern.
    Beispiel-File: http://www.avm.de/de/Service/Ser…labor-16352.zip

    Wenn ich jetzt aber eine Datei via http vom Telekom-Server runterladen will, werden mir die Infos im Header erst garnicht angezeigt :(
    Beispiel-File: http://hilfe.telekom.de/dlp/eki/downlo…v34.04.57.image

    Muss der Aufruf/Header irgendwie modifiziert werden?

    Besten Dank schon mal!
    R@iner

  • Gibt es InetGetDate oder vergleichbares?

    • skyteddy
    • 7. Februar 2010 um 19:41

    Super, damit sollte ich in der Lage sein, mir für ftp und http was zu basteln!

    Allen vielen Dank und viele Grüße!
    R@iner

  • Gibt es InetGetDate oder vergleichbares?

    • skyteddy
    • 7. Februar 2010 um 19:21

    Hallo,

    besten Dank, damit könnte ich den Teil mit ftp-Files lösen. Wie kann ich das bei http-Links machen? Gibt es da auch eine Lösung oder ne Idee,

    Besten Dank und viele Grüße!
    R@iner

  • Gibt es InetGetDate oder vergleichbares?

    • skyteddy
    • 6. Februar 2010 um 01:56

    Hallo,

    danke für Deinen Code, aber das funktioniert leider nicht.

    Mein Wunsch ist ne Funktion, die mir das FileDatum der Datei auf dem Server zurück liefert.

    Also FileGetSize() liefert mir die Größe der Datei und ich hätte gerne das vergleichbar mit "FileGetDate()", oder wie die Funktion auch immer heissen mag :)

    Machen wir es anhand von 2 konkreten Beispielen:

    FTP:
    Geh auf folgende Seite: ftp://ftp.avm.de/fritz.box/frit…rmware/deutsch/
    Jetzt siehst Du 2 Dateien, die Firmware und die info.txt

    Local $erg = _HTTPGetDate("ftp://ftp.avm.de/fritz.box/fritzbox.fon_wlan_7270/firmware/deutsch/FRITZ.Box_Fon_WLAN_7270.54.04.80.image")
    _ArrayDisplay($erg) ; Sollte folgendes irgendwie rauskommen: 15.12.2009, 10:16:00


    HTTP:
    Geh auf folgende Seite: http://download.avm.de/fritz.box/frit…rmware/deutsch/
    Jetzt siehst Du ebenfalls 2 Dateien, die Firmware und die info.txt

    Local $erg = _HTTPGetDate("http://download.avm.de/fritz.box/fritzbox.fon_wlan_7270/firmware/deutsch/FRITZ.Box_Fon_WLAN_7270.54.04.80.image")
    Auch ohne http:// funktioniert es nicht.
    Local $erg = _HTTPGetDate("download.avm.de/fritz.box/fritzbox.fon_wlan_7270/firmware/deutsch/FRITZ.Box_Fon_WLAN_7270.54.04.80.image")
    _ArrayDisplay($erg) ; Sollte folgendes irgendwie rauskommen: 15.12.2009, 11:16:00 (Achtung: +1 Stunde)


    Alle Arrays zeigen mir das aktuelle Datum an, nicht aber das gewünschte Datum/Uhrzeit der Datei auf dem Server.

    Besten Dank und viele Grüße!
    R@iner

  • Gibt es InetGetDate oder vergleichbares?

    • skyteddy
    • 6. Februar 2010 um 01:13

    Genau das ist ja das Problem, daß die heruntergeladene Datei das Datum hat, zu dem Zeitpunkt, wo der Download abgeschlossen wurde.

    Ich muß irgendwie das Datum/Uhrzeit der Datei auf dem Server "auslesen" und dann die runtergeladene Datei mit FileSetTime umsetzen.

    Happy computing!
    R@iner

  • Gibt es InetGetDate oder vergleichbares?

    • skyteddy
    • 6. Februar 2010 um 00:34

    Hallo Zusammen,

    mit InetGetSize kann man ja die Größe einer Datei ermitteln, egal ob http oder ftp, und mit InetGet kann ich die Datei runterladen.

    Ich würde aber gerne anschliessend das Dateidatum auf das Datum umsetzen, was sie auf dem FTP-Server hat.

    In der neuen Beta-Version 3.3.5.1 habe ich auch nichts gefunden. Gibt es sowas nicht und wenn nein, kann ich das irgendwie anders realisieren?

    Besten Dank im voraus!
    R@iner

  • GUICtrlCreateGraphic, Tabs und der Refresh

    • skyteddy
    • 26. November 2009 um 16:51

    Super, vielen Dank. Oben vor dem GUISetState(@SW_SHOW, $MyGui) hatte ich GUICtrlCreateTabItem("") schon drin, aber unten nicht!

    Merci nochmal für die schnelle Hilfe und weiterhin happy computing!
    R@iner

  • GUICtrlCreateGraphic, Tabs und der Refresh

    • skyteddy
    • 26. November 2009 um 16:02

    Hallo Zusammen,

    ich such jetzt schon seit 2 Stunden nach einer Lösung, aber irgendwie hab ich bisher nicht den richtigen Befehl oder Option zum Refreshen gefunden.

    In einem normalen Fenster ohne Tabs funktioniert das GUICtrlCreateGraphic und GUICtrlDelete per Knopfdruck. Sobald ich aber mit Tabs arbeite, klappt es nicht mehr. Oft reicht ein Umschalten der Tabs oder ein Minimieren mit anschließendem Maximieren. Ich hätte das aber gerne ohne diesen Workaround :)

    Was ist die entscheidende Option oder Befehl?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    TestOhneTab()
    TestMitTabs()

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

    ; Gui ohne Tabs
    Func TestOhneTab()

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

    Local Const $MyGuiWidth = 400
    Local Const $MyGuiHeight = 300
    Local Const $SignSize = 15
    Local $MySign1 = -1
    Local $MySign2 = -1
    Local $msg

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

    Local $MyGui = GUICreate("Test ohne Tab", $MyGuiWidth, $MyGuiHeight)

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

    $MySign1 = GUICtrlCreateGraphic(50, 50, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00FF00, 0x00FF00)
    GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 0, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)

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

    $MySign2 = GUICtrlCreateGraphic(50, 100, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00FFFF, 0x00FFFF)
    GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 0, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)

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

    Local $MyTestButtonAdd = GUICtrlCreateButton("Add", $MyGuiWidth - 100, 50, 50, 20)

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

    Local $MyTestButtonDelete = GUICtrlCreateButton("Delete", $MyGuiWidth - 100, 100, 50, 20)

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

    GUISetState(@SW_SHOW, $MyGui)

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    Switch $msg

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

    Case $GUI_EVENT_CLOSE
    ExitLoop

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

    Case $MyTestButtonDelete
    If $MySign1 == -1 Then
    MsgBox(16 + 262144, "Fehler", "Signs sind bereits gelöscht!")
    Else
    GUICtrlDelete($MySign1)
    $MySign1 = -1
    GUICtrlDelete($MySign2)
    $MySign2 = -1
    EndIf

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

    Case $MyTestButtonAdd
    If $MySign1 == -1 Then
    $MySign1 = GUICtrlCreateGraphic(50, 50, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00FF00, 0x00FF00)
    GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 0, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)

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

    $MySign2 = GUICtrlCreateGraphic(50, 100, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00FFFF, 0x00FFFF)
    GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 0, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)
    Else
    MsgBox(16 + 262144, "Fehler", "Signs sind bereits da!")
    EndIf
    EndSwitch
    WEnd

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

    GUIDelete($MyGui)

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

    EndFunc ;==>TestOhneTab

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

    ; Gui mit Tabs
    Func TestMitTabs()

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

    Local Const $MyGuiWidth = 400
    Local Const $MyGuiHeight = 300
    Local Const $SignSize = 15
    Local $MySign1 = -1
    Local $MySign2 = -1
    Local $msg

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

    Local $MyGui = GUICreate("Test mit Tabs", $MyGuiWidth, $MyGuiHeight)

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

    Local $MyTabs = GUICtrlCreateTab(0, 0, $MyGuiWidth - 10, $MyGuiHeight - 10)

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

    Local $MyTabOne = GUICtrlCreateTabItem("Tab 1")

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

    $MySign1 = GUICtrlCreateGraphic(50, 50, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00FF00, 0x00FF00)
    GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 0, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)
    GUICtrlSetState(-1, $GUI_ONTOP) ; <--

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

    $MySign2 = GUICtrlCreateGraphic(50, 100, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00FFFF, 0x00FFFF)
    GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 0, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)
    GUICtrlSetState(-1, $GUI_ONTOP) ; <--

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

    Local $MyTestButtonAdd = GUICtrlCreateButton("Add", $MyGuiWidth - 100, 50, 50, 20)

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

    Local $MyTestButtonDelete = GUICtrlCreateButton("Delete", $MyGuiWidth - 100, 100, 50, 20)

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

    Local $MyTabTwo = GUICtrlCreateTabItem("Tab 2")

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

    Local $MyTestButtonClose = GUICtrlCreateButton("Close", $MyGuiWidth - 150, $MyGuiHeight - 150, 50, 20)

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

    GUICtrlCreateTabItem("") ; close tabitem creation

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

    GUISetState(@SW_SHOW, $MyGui)

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    Switch $msg

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

    Case $GUI_EVENT_CLOSE, $MyTestButtonClose
    ExitLoop

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

    Case $MyTestButtonDelete
    If $MySign1 == -1 Then
    MsgBox(16 + 262144, "Fehler", "Signs sind bereits gelöscht!")
    Else
    ; GUISwitch($MyGui, $MyTabs)
    GUISwitch($MyGui, $MyTabOne)

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

    GUICtrlDelete($MySign1)
    $MySign1 = -1
    GUICtrlDelete($MySign2)
    $MySign2 = -1
    EndIf

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

    Case $MyTestButtonAdd
    If $MySign1 == -1 Then
    ; GUISwitch($MyGui, $MyTabs)
    GUISwitch($MyGui, $MyTabOne)

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

    $MySign1 = GUICtrlCreateGraphic(50, 50, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00FF00, 0x00FF00)
    GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 0, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)
    GUICtrlSetState(-1, $GUI_ONTOP) ; <--

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

    $MySign2 = GUICtrlCreateGraphic(50, 100, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00FFFF, 0x00FFFF)
    GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 0, $SignSize, $SignSize)
    GUICtrlSetGraphic(-1, $GUI_GR_REFRESH)
    GUICtrlSetState(-1, $GUI_ONTOP) ; <--

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

    ; GUISetState(@SW_SHOW, $MyGui)
    Else
    MsgBox(16 + 262144, "Fehler", "Signs sind bereits da!")
    EndIf
    EndSwitch
    WEnd

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

    GUIDelete($MyGui)

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

    EndFunc ;==>TestMitTabs

    [/autoit]

    Besten Dank und happy computing!
    R@iner

  • Kleines Problem

    • skyteddy
    • 12. August 2009 um 20:55

    @FunHocker:
    Der Code ist ja verschlimmbessert. Die "&" sind bei Text schon besser wie das "+".

    Aber das ist nicht das eigentliche Problem. Geh in deine Windows-Dienste und deaktivere den Dienst "Universeller Plug&Play Gerätehost" und ruf anschließend das Script nochmal auf. Dann siehste das Problem Nummer 1, ganz easy ;)

    Happy computing!
    R@iner

  • Kleines Problem

    • skyteddy
    • 12. August 2009 um 20:42

    Hallo,

    argl, ja der Dienst stand auf "Manuell". TuneUp-Gedönse kommen definitiv nicht an meine Rechner!

    Trotzdem sehr erschrecken, daß gleich das Programm abstürzt, nur weil der Dienst nicht läuft.

    Einige Programme finden trotzdem alle die UPnP-Devices, auch mit abgeschaltenem Windows-Dienst UPnP. Ich hab da auch schon ne Vermutung, wie das realisiert wird und im autoscript-Forum hab ich einen Ansatz gefunden, den ich jetzt mal ausprobieren werde.

    Besten Dank und happy computing!
    R@iner

  • Kleines Problem

    • skyteddy
    • 12. August 2009 um 18:49

    Hallo Oscar,

    danke für die Antwort. Daß die Variable $Devices dann leer sein würde, könnte ich ja noch verstehen, wenn angenommen keine solchen Devices vorhanden sind, aber das dann gleich das Programm abstürzt?!

    Das klingt mir eher nach einem syntaktischen Fehler. Funktioniert das bei Dir?

    Ich habe in meinem Netz mehrere Geräte die UPnP sprechen und auch darauf antworten. Ich hab auch mal verschiedene Einträge bei $DeviceType durchprobiert, aber es kommt immer der gleiche Fehler. Und das auf 3 unterschiedlichen Rechnern.

    Happy computing!
    R@iner

  • Kleines Problem

    • skyteddy
    • 12. August 2009 um 13:10

    Hallo Zusammen,

    ich wollte das mal ausprobieren und bekomme dann in der Zeile

    $Devices = $deviceFinder.FindByType($DeviceType, 0)

    folgenden Fehler:

    Zitat


    ==> Variable must be of type "Object".:
    $Devices = $deviceFinder.FindByType($DeviceType, 0)
    $Devices = $deviceFinder^ ERROR


    Was mache ich falsch?

    Besten Dank im voraus!
    R@iner

  • ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3)

    • skyteddy
    • 13. Juli 2009 um 16:13

    BugFix besten Dank! Dann bau ich das mal diese Woche alles um. Auch habe ich noch nen DoubleClick-Handler von Dir entdeckt, den werde ich auch versuchen mit einzubauen.

    Besten Dank nochmal und weiterhin happy computing!
    R@iner

  • ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3)

    • skyteddy
    • 12. Juli 2009 um 16:10

    Hallo Zusammen,

    ja, es scheint die Hintergrundfarbe zu sein. Wenn die die Höhe des ListViewControlls verändere, dann paßt es irgendwann.

    Eine abschließende Frage habe ich jetzt noch, bevor ich alles in meinem ursprünglichen Programm ändern muß.

    Derzeit benutze ich
    GUICtrlCreateListView
    _GUICtrlListView_InsertColumn
    _GUICtrlListView_AddItem

    Wenn ich jetzt die abwechselnden Farben benutzen will, muß ich mein Script auf
    GUICtrlCreateListViewItem
    umstellen, oder?

    Ich habe keine vergleichbaren Funktionen gefunden und in meinem Schnelltest ging das colorieren bei den oben genannten Befehlen mit
    GUICtrlSetBkColor(-1, 0xFFFF23) ; Farbe gerade Zeilen
    nicht

    Happy computing!
    R@iner

  • ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3)

    • skyteddy
    • 11. Juli 2009 um 08:16

    Hallo BugFix,

    danke Dir für deine Beschleunigung. Es ist schon viel besser. Ich werd das heute mal austesten und schauen, ob das flüssig genug ist.

    Mir war dann schon klar, daß die eigentliche Funktion das WM_NOTIFY ist. In dem von mir fälschlich ausgewähltem alten Beispiel von Dir gibt es aber viele Funktionen drumherum. Aber das ist ja nicht mehr notwendig :) Ich kann mir jetzt auch ungefähr zusammenreimen, was die WM_NOTIFY macht.

    Nochmal zu Deinem Beispiel zurück und meiner Leerzeile. In Deinem Original-Beispiel mit der einfachen toogle-Variante ist es bei 10 Zeilen sogar ein großer Leerbereich unten.
    Das verstehe ich ja noch, da das ListView größer ist und die 10 Zeilen den Bereich nicht einnehmen. Erhöhe ich aber die Zeilenanzahl sehe ich trotzdem einen Leerbereich. Leerzeile ist wohl wieder unglücklich ausgedrückt. Besser ist Leerbereich.

    Hier das Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    GUICreate('Test')

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

    $ListView1 = GUICtrlCreateListView("Spalte 1|Spalte 2", 15, 15, 300, 250)
    GUICtrlSetBkColor(-1, 0xFF4400) ; Farbe ungerade Zeilen
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
    _GUICtrlListView_SetColumnWidth($ListView1, 0, 148)
    _GUICtrlListView_SetColumnWidth($ListView1, 1, 148)

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

    For $i = 1 To 21
    GUICtrlCreateListViewItem(Random(10000, 1000000, 1) & '|' & Random(10000, 1000000, 1), $ListView1)
    GUICtrlSetBkColor(-1, 0xFFFF23) ; Farbe gerade Zeilen
    Next

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]


    Hier mal ein Screenshot:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    Woher kommt dieser Leerbereich?

    Happy computing!
    R@iner

  • ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3)

    • skyteddy
    • 10. Juli 2009 um 19:58

    Hallo Bugfix,

    vielen herzlichen Dank für den neuen Code!

    Ich habe ihn mal mit mehr Reihen und Spalten versehen. Aber auf meinem 1,8 GHz P4 ist das Scrollen grausam rucklig und sehr langsam :( Speziell horizontal, also links-rechts. Von der Geschwindigkeit an meinem Notebook, P3, 648 Mhz will ich erst garnicht reden.

    Spoiler anzeigen
    [autoit]


    #include <FontConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)

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

    ; --- Spalten und Reihen ---
    Global $my_rows = 90
    Global $my_colms = 18
    Global $my_colWidth=240
    Global $Content

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

    #Region - GUI
    ; Gui erzeugen
    Global $GUI = GUICreate("Test", 600, 440)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_exit')

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

    ; ListView 1 erzeugen
    Global $cListView1 = GUICtrlCreateListView("", 2, 2, 290, 250, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    Global $hListView1 = GUICtrlGetHandle($cListView1)

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

    ; ListView 2 erzeugen
    Global $cListView2 = GUICtrlCreateListView("", 300, 2, 290, 250, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    Global $hListView2 = GUICtrlGetHandle($cListView2)

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

    ; Beide Tabellen "füllen"
    For $c = 0 To $my_colms-1
    ; Überschriften LV1 erzeugen
    _GUICtrlListView_InsertColumn($hListView1, $c, "Column " & $c, $my_colWidth)
    ; Überschriften LV2 erzeugen
    _GUICtrlListView_InsertColumn($hListView2, $c, "Column " & $c, $my_colWidth)

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

    ; Zeilen "füllen"
    For $r = 0 To $my_rows-1
    $Content = "Row" & $r & ": Col " & $c
    If $c == 0 Then
    ; Spalte 0
    _GUICtrlListView_AddItem($hListView1, $Content, $r)
    _GUICtrlListView_AddItem($hListView2, $Content, $r)
    Else
    ; Spalte >0
    _GUICtrlListView_AddSubItem($hListView1, $r, $Content, $c)
    _GUICtrlListView_AddSubItem($hListView2, $r, $Content, $c)
    EndIf
    Next
    Next
    #EndRegion - GUI

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

    #Region - Global settings
    Global $hFont, $defColLV = 0x000000
    ; Array mit Farben für jede Zeile:
    Global $aColor[$my_rows] = [ _
    0x0033FF, 0xCCFFFF, 0x3333FF, 0x99FFFF, 0x6633FF, 0xFF99FF, 0x0099FF, 0xCC99FF, 0x00FFFF, 0xFF33FF, _
    0xFFFF00, 0x003300, 0x99FF00, 0x663300, 0xFF9900, 0x009900, 0xFF3300, 0x669900, 0x00BFFF, 0xDAA520, _
    0x87CEEB, 0xD2691E, 0xFFDEAD, 0x7B68EE, 0xDEB887, 0xEE82EE, 0x3CB371, 0xF4A460, 0xADD8E6, 0x00FF7F, _
    0x0033FF, 0xCCFFFF, 0x3333FF, 0x99FFFF, 0x6633FF, 0xFF99FF, 0x0099FF, 0xCC99FF, 0x00FFFF, 0xFF33FF, _
    0xFFFF00, 0x003300, 0x99FF00, 0x663300, 0xFF9900, 0x009900, 0xFF3300, 0x669900, 0x00BFFF, 0xDAA520, _
    0x87CEEB, 0xD2691E, 0xFFDEAD, 0x7B68EE, 0xDEB887, 0xEE82EE, 0x3CB371, 0xF4A460, 0xADD8E6, 0x00FF7F, _
    0x0033FF, 0xCCFFFF, 0x3333FF, 0x99FFFF, 0x6633FF, 0xFF99FF, 0x0099FF, 0xCC99FF, 0x00FFFF, 0xFF33FF, _
    0xFFFF00, 0x003300, 0x99FF00, 0x663300, 0xFF9900, 0x009900, 0xFF3300, 0x669900, 0x00BFFF, 0xDAA520, _
    0x87CEEB, 0xD2691E, 0xFFDEAD, 0x7B68EE, 0xDEB887, 0xEE82EE, 0x3CB371, 0xF4A460, 0xADD8E6, 0x00FF7F _
    ]
    #EndRegion - Global settings

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUISetState(@SW_SHOW, $GUI)

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

    While True
    Sleep(100)
    WEnd

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

    ; ---------- Funktions-Definitionen ----------

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

    Func _exit()
    _WinAPI_DeleteObject($hFont)
    Exit
    EndFunc ;==>_exit

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

    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR

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

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

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

    Switch $hWndFrom
    Case $hListView1, $hListView2
    Switch $iCode
    Case $NM_CUSTOMDRAW
    If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
    Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
    Local $iDrawStage, $iItem, $hDC
    $iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
    Switch $iDrawStage
    Case $CDDS_ITEMPREPAINT
    Return $CDRF_NOTIFYSUBITEMDRAW
    Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
    $iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aColor[$iItem])) ; Hintergrundfarbe aus Array
    DllStructSetData($tCustDraw, 'clrText', RGB2BGR($defColLV)) ; Standardschriftfarbe
    $hFont = _WinAPI_CreateFont(14, 0, 0, 0, $FW_NORMAL, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, _
    $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial')
    _WinAPI_SelectObject($hDC, $hFont)
    Return $CDRF_NEWFONT
    EndSwitch
    EndSwitch
    EndSwitch

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

    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func RGB2BGR($iColor)
    Local $sH = Hex($iColor, 6)
    Return '0x' & StringRight($sH, 2) & StringMid($sH, 3, 2) & StringLeft($sH, 2)
    EndFunc ;==>RGB2BGR

    [/autoit]


    Wenn ich dagegen auf die 2 Farben-Lösung umsteigen würde, wie Du es auch oben schon mal vorgeschlagen hast, dann habe ich keine Ruckler und alles geht zügig.

    Hier mal ein Vergleich mit gleicher Anzahl an Reihen und Spalten.

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    GUICreate('Test')

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

    ; 18 Spalten
    ; 90 Reihen

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

    ; --- Spalten und Reihen ---
    Global $my_rows = 90
    Global $my_colms = 18
    Global $my_colWidth = 240
    Global $headline = "Col 0"
    Global $line

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

    ; Headline erzeugen
    For $c = 1 To $my_colms - 1
    $headline &= "|Col " & $c
    Next
    ; ListView mit Headline erzeugen
    $ListView1 = GUICtrlCreateListView($headline, 15, 15, 300, 250)
    GUICtrlSetBkColor(-1, 0xFF4400) ; Farbe ungerade Zeilen
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
    ; Auf Breite einstellen
    For $c = 0 To $my_colms - 1
    _GUICtrlListView_SetColumnWidth($ListView1, $c, $my_colWidth)
    Next

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

    ; Zeilen hinzufügen
    For $r = 0 To $my_rows - 1
    ; Zeile erzeugen
    $line = "Reihe " & $r
    For $c = 1 To $my_colms - 1
    $line &= "|" & Random(10000, 1000000, 1)
    Next
    ; Zeile hinzufügen
    GUICtrlCreateListViewItem($line, $ListView1)
    GUICtrlSetBkColor(-1, 0xFFFF23) ; Farbe gerade Zeilen
    Next

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]


    Ich würde schon gerne Deine Mehrfarbenlösung benutzen. Hast Du noch ne Idee, wie man das beschleunigen kann?

    Besten Dank und viele Grüße!
    R@iner

    PS. Weißt Du warum am Ende meines zweiten Beispiels unten ein Leerzeile sichtbar ist?

  • ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3)

    • skyteddy
    • 10. Juli 2009 um 10:40

    Hallo BugFix,

    danke für deine Antwort. Ich hab mich wohl etwas unglücklich ausgedrückt. Besser sollte es heissen:

    Mein eigentliches Ziel ist es, in meiner Tabelle (ca. 70 Zeilen, 15 Spalten), jede zweite Reihe farbig mit irgendeiner Farbe zu versehen. Nicht abwechselnd 2 Farben.
    Z.B. Zeile 1 in rot, Zeile 2 weiß, Zeile 3 orange, Zeile 4 weiß, Zeile 5 in grün, ....

    Und genau dafür brauche ich deinen Lösung, oder kann man das anders auch lösen?

    Happy computing!
    R@iner

  • ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3)

    • skyteddy
    • 9. Juli 2009 um 23:26

    Hallo BugFix,

    das hab ich alles gelesen, trotzdem hat es mich gewundert, das die letzte Version abgespeckt und vor allem ohne Kommentare war. Egal.

    Ich hab Dein Script jetzt mal als Basis genommen um zu verstehen, wie das colorieren funktioniert. So richtig verstanden habe ich es nicht, aber den Aufruf von _SetItemParam hab ich verstanden. :)

    Mein eigentliches Ziel ist es, in meiner Tabelle (ca. 70 Zeilen, 15 Spalten), jede zweite Reihe farbig mit einer Farbe zu versehen. Font ist mir derzeit nicht wichtig.

    Ich hab jetzt mal dein Script genommen und es etwas erweitert, allerdings ist das Scrollen der Listen, egal ob horizontal oder vertikal, sehr träge.
    Deaktiviere ich den WM_NOTIFY, werden die Felder logischerweise nicht mehr farbig gemacht, aber der Geschwindigkeitsunterschied ist schon sehr deutlich.
    Gut, mein Rechner ist alt, aber vielleicht haste noch ne Idee, wo man was noch schneller machen könnte.

    Hier mein Wurf:

    Spoiler anzeigen
    [autoit]


    ; Original von User BugFix aus Thread http://www.autoit.de/index.php?page=Thread&threadID=10104

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

    #cs Änderungen:

    - Mehr Kommentare eingefügt
    - Spalten und Zeilen starten bei 0, also auch in der Bezeichnung
    - Funktionen gruppiert (Region)
    - MustDeclareVars gesetzt
    - Anzahl Reihen und Spalten definierbar gemacht
    - Neue Funktionen: _ColorRow, _ColorColumn

    Für einen Test:
    70 Reihen, 18 Spalten
    LV1: Wahllos irgendwelche Reihe einfärben
    LV2: Jede zweite Reihe einfärben
    #ce

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

    #include <FontConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)

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

    #cs
    #Region Funktions-Definitionen

    #Region Knoepfe aus der Gui
    Func _exit() ; Programm-Exit
    Func _GetLV() ; Liefert die selektierte ListView zurück
    Func _SetInput($aRet) ; Schreibt in die Gui das selektierte Feld zurück (Reihe, Spalte)
    Func _btSet() ; Knopf "Set"
    Func _btOff() ; Knopf "Off"
    Func _btDo() ; Knopf "Do"
    #EndRegion Knoepfe aus der Gui

    #Region LV-Funktionen
    Func _ColorRow($hWnd, $row, $iBkCol = -1, $iCol = -1) ; Färbt eine Reihe. Font wird nicht berücksichtigt!
    Func _ColorColumn($hWnd, $col, $iBkCol = -1, $iCol = -1) ; Färbt eine Spalte. Font wird nicht berücksichtigt!
    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam) ; Window-Handler
    Func _SetItemParam($hWnd, $iItem, $iSubitem, $iBkCol = -1, $iCol = -1, $iSize = -1, $iWeight = -1, $sFont = -1) ; eigentliche Funktion zum Setzen
    Func _DrawItemCol(ByRef $hDC, ByRef $tCustDraw, $hWnd, $iItem, $iSubitem) ; ???
    Func _DrawDefault(ByRef $hDC, ByRef $tCustDraw) ; ???
    Func RGB2BGR($iColor)
    #EndRegion LV-Funktionen

    #Region Help-Functions
    Func dd($a, $b = "", $c = "", $d = "", $e = "", $f = "") ; Debug-Ausgabe in Console
    #EndRegion Help-Functions

    #EndRegion Funktions-Definitionen
    #ce

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

    ; --- Spalten und Reihen ---
    Global $my_rows = 70 ; Starts with 0
    Global $my_colms = 18 ; Starts with 0
    ; Farben
    ; Global $my_rowBKColor = 0xFFFFC6 ; ganz helles Gelb
    Global $my_rowBKColor = 0xAEFFFF ; helles Blau
    Global $my_rowColor = 0x0000FF ; Blau
    ; Global $my_rowColor = 0x000000 ; Schwarz

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

    ; Temp
    Global $Content

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

    #Region - GUI
    ; Gui erzeugen
    Global $GUI = GUICreate("Listview Custom Draw [ You can choose element by leftclick ]", 600, 440)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_exit')

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

    ; ListView 1 erzeugen
    Global $cListView1 = GUICtrlCreateListView("", 2, 2, 290, 250, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    Global $hListView1 = GUICtrlGetHandle($cListView1)

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

    ; ListView 2 erzeugen
    Global $cListView2 = GUICtrlCreateListView("", 300, 2, 290, 250, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    Global $hListView2 = GUICtrlGetHandle($cListView2)

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

    ; Beide Tabellen "füllen"
    For $c = 0 To $my_colms
    ; Überschriften LV1 erzeugen
    _GUICtrlListView_InsertColumn($hListView1, $c, "Column " & $c, 90)
    ; Überschriften LV2 erzeugen
    _GUICtrlListView_InsertColumn($hListView2, $c, "Column " & $c, 90)

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

    ; Zeilen "füllen"
    For $r = 0 To $my_rows
    $Content = "Row" & $r & ": Col " & $c
    If $c == 0 Then
    ; Spalte 0
    _GUICtrlListView_AddItem($hListView1, $Content, $r)
    _GUICtrlListView_AddItem($hListView2, $Content, $r)
    Else
    ; Spalte >0
    _GUICtrlListView_AddSubItem($hListView1, $r, $Content, $c)
    _GUICtrlListView_AddSubItem($hListView2, $r, $Content, $c)
    EndIf
    Next
    Next

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

    ; Group: Settings for
    GUICtrlCreateGroup(' Settings for ', 2, 255, 590, 40)
    Global $rLV1 = GUICtrlCreateRadio('ListView 1', 130, 270, 150, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    Global $rLV2 = GUICtrlCreateRadio('ListView 2', 430, 270, 150, 17)
    GUICtrlCreateGroup('', -99, -99, 1, 1)

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

    ; Group: Settings
    GUICtrlCreateGroup(' Settings ', 2, 315, 290, 120)
    GUICtrlCreateLabel('Item', 32, 332, 50, 17)
    GUICtrlCreateLabel('or Row', 32, 344, 50, 17)
    Global $inItem = GUICtrlCreateInput('10', 80, 334, 25, 20)

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

    GUICtrlCreateLabel('SubItem', 116, 332, 45, 17)
    GUICtrlCreateLabel('or Column', 116, 344, 50, 17)
    Global $inSubItem = GUICtrlCreateInput('1', 175, 334, 25, 20)
    GUICtrlCreateLabel('( 0-Index )', 215, 337, 50, 17)

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

    GUICtrlCreateLabel('Bk-Color', 32, 366, 40, 17)
    GUICtrlCreateLabel('or odd', 32, 378, 40, 17)
    Global $inBkCol = GUICtrlCreateInput('0x3DF8FF', 80, 368, 60, 20)

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

    GUICtrlCreateLabel('Color', 160, 366, 40, 17)
    GUICtrlCreateLabel('or even', 160, 378, 40, 17)
    Global $inCol = GUICtrlCreateInput('0xFF0000', 200, 368, 60, 20)

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

    GUICtrlCreateLabel('Font', 32, 405, 40, 17)
    Global $inFont = GUICtrlCreateInput('14,600,Comic Sans MS', 80, 402, 180, 20)
    GUICtrlCreateGroup('', -99, -99, 1, 1)

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

    ; Group: Single Item
    GUICtrlCreateGroup(' Single Item ', 320, 315, 90, 120)
    Global $btSet = GUICtrlCreateButton('Set', 340, 350, 50, 20)
    GUICtrlSetOnEvent(-1, '_btSet')

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

    Global $btOff = GUICtrlCreateButton('Off', 340, 390, 50, 20)
    GUICtrlSetOnEvent(-1, '_btOff')
    GUICtrlCreateGroup('', -99, -99, 1, 1)

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

    ; Group; Columns or rows
    GUICtrlCreateGroup(' Columns or rows ', 440, 315, 150, 120)
    ; Global $rRows = GUICtrlCreateRadio('Rows rotatory', 445, 330, 130)
    ; $rCols = GUICtrlCreateRadio('Columns rotatory', 445, 350, 130)
    Global $rOneRow = GUICtrlCreateRadio('Single Row', 445, 370, 130)
    GUICtrlSetState(-1, $GUI_CHECKED)
    Global $rOneCol = GUICtrlCreateRadio('Single Column', 445, 390, 130)
    Global $btDo = GUICtrlCreateButton('Do', 450, 412, 50, 18)
    GUICtrlSetOnEvent(-1, '_btDo')
    ; $btOff2 = GUICtrlCreateButton('Off', 530,
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    #EndRegion - GUI

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

    #Region - Global settings (needed, whenever you want to use formatting)
    ; create an array for every LV with same count of elements like in LV
    ; IMPORTANT:
    ; By deleting an LV-Item it's required to delete also the according item from array!
    ; Also by insert an item in LV or sort LV you must modulate the array!
    ; [Item][SubItem][0] = iBkCol
    ; [Item][SubItem][1] = iCol
    ; [Item][SubItem][2] = iSize
    ; [Item][SubItem][3] = iWeight
    ; [Item][SubItem][4] = sFont
    Global $aLV1[_GUICtrlListView_GetItemCount($hListView1)][_GUICtrlListView_GetColumnCount($hListView1)][5]
    Global $aLV2[_GUICtrlListView_GetItemCount($hListView2)][_GUICtrlListView_GetColumnCount($hListView2)][5]
    ; create array to hold ListView-handle and accordingly array
    Global $ahWndSets[2][2] = [[$hListView1, $aLV1],[$hListView2, $aLV2]]
    Global $hFont, $defColLV = 0x000000, $defBkColLV = 0xFFFFFF
    #EndRegion - Global settings (needed, whenever you want to use formatting)

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

    ; Windows-Handler registrieren
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    ; Fenster zeigen
    GUISetState(@SW_SHOW, $GUI)

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

    ; -- Hauptschleife --
    ; Wahllos irgendwelche Reihen einfärben - LV1
    _GUICtrlListView_BeginUpdate($hListView1) ; Refresh stoppen
    Local $max = 10
    If $max > $my_rows Then $max = $my_rows
    For $a = 1 To $max
    _ColorRow($hListView1, Random(0, $my_rows, 1), $my_rowBKColor, $my_rowColor)
    Next
    _GUICtrlListView_EndUpdate($hListView1) ; Refresh wieder erlauben

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

    ; Jede zweite Reihe einfärben - LV2
    _GUICtrlListView_BeginUpdate($hListView2) ; Refresh stoppen
    For $a = 0 To $my_rows
    If Mod($a, 2) Then _ColorRow($hListView2, $a, $my_rowBKColor, $my_rowColor)
    Next
    _GUICtrlListView_EndUpdate($hListView2) ; Refresh wieder erlauben

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

    ; GUIRegisterMsg($WM_NOTIFY, "") ; Zum Deaktivieren des Handlers

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

    While True
    Sleep(100)
    WEnd

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

    #Region Funktions-Definitionen

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

    #Region Knoepfe aus der Gui
    Func _exit() ; Programm-Exit
    _WinAPI_DeleteObject($hFont)
    Exit
    EndFunc ;==>_exit

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

    Func _GetLV() ; Liefert die selektierte ListView zurück
    If BitAND(GUICtrlRead($rLV1), $GUI_CHECKED) Then
    Return $hListView1
    Else
    Return $hListView2
    EndIf
    EndFunc ;==>_GetLV

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

    Func _SetInput($aRet) ; Schreibt in die Gui das selektierte Feld zurück (Reihe, Spalte)
    If $aRet[0] = $hListView1 Then
    GUICtrlSetState($rLV1, $GUI_CHECKED)
    Else
    GUICtrlSetState($rLV2, $GUI_CHECKED)
    EndIf
    GUICtrlSetData($inItem, $aRet[1])
    GUICtrlSetData($inSubItem, $aRet[2])
    EndFunc ;==>_SetInput

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

    Func _btSet() ; Knopf "Set"
    Local $setIndex = GUICtrlRead($inItem) ; Row
    Local $setSubIndex = GUICtrlRead($inSubItem) ; Column

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

    If ($setIndex <> '' And $setSubIndex <> '') Then
    Local $aFont = StringSplit(GUICtrlRead($inFont), ',')
    _SetItemParam(_GetLV(), $setIndex, $setSubIndex, GUICtrlRead($inBkCol), GUICtrlRead($inCol), $aFont[1], $aFont[2], $aFont[3])
    EndIf
    EndFunc ;==>_btSet

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

    Func _btOff() ; Knopf "Off"
    Local $setIndex = GUICtrlRead($inItem)
    Local $setSubIndex = GUICtrlRead($inSubItem)
    If ($setIndex <> '' And $setSubIndex <> '') And BitAND(_GUICtrlListView_GetItemParam(_GetLV(), $setIndex), 2 ^ $setSubIndex) Then _
    _SetItemParam(_GetLV(), $setIndex, $setSubIndex, -1, -1, -1, -1, -1)
    EndFunc ;==>_btOff

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

    Func _btDo() ; Knopf "Do"

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

    Local $setIndex = GUICtrlRead($inItem)
    Local $setSubIndex = GUICtrlRead($inSubItem)
    Local $SelectedLV = _GetLV()

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

    _GUICtrlListView_BeginUpdate($SelectedLV)

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

    ; Eine Reihe einfärben
    If BitAND(GUICtrlRead($rOneRow), $GUI_CHECKED) Then ; Single Row
    ; If ($setIndex <> '' And $setSubIndex <> '') And BitAND(_GUICtrlListView_GetItemParam($SelectedLV, $setIndex), 2 ^ $setSubIndex) Then _
    If $setIndex <> '' And $setSubIndex <> '' Then _
    _ColorRow($SelectedLV, $setIndex, GUICtrlRead($inBkCol), GUICtrlRead($inCol))

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

    ElseIf BitAND(GUICtrlRead($rOneCol), $GUI_CHECKED) Then ; Single Column
    ; If ($setIndex <> '' And $setSubIndex <> '') And BitAND(_GUICtrlListView_GetItemParam($SelectedLV, $setIndex), 2 ^ $setSubIndex) Then _
    If $setIndex <> '' And $setSubIndex <> '' Then _
    _ColorColumn($SelectedLV, $setSubIndex, GUICtrlRead($inBkCol), GUICtrlRead($inCol))
    EndIf

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

    _GUICtrlListView_EndUpdate($SelectedLV) ; Refresh wieder erlauben

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

    EndFunc ;==>_btDo
    #EndRegion Knoepfe aus der Gui

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

    #Region LV-Funktionen

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

    Func _ColorRow($hWnd, $row, $iBkCol = -1, $iCol = -1) ; Färbt eine Reihe. Font wird nicht berücksichtigt!

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

    dd("_ColorRow", $hWnd, $row, $iBkCol, $iCol) ; Console-Ausgaben

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

    For $c = 0 To _GUICtrlListView_GetColumnCount($hWnd) - 1
    _SetItemParam($hWnd, $row, $c, $iBkCol, $iCol, -1, -1, -1)
    Next
    EndFunc ;==>_ColorRow

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

    Func _ColorColumn($hWnd, $col, $iBkCol = -1, $iCol = -1) ; Färbt eine Spalte. Font wird nicht berücksichtigt!

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

    dd("_ColorColumn", $hWnd, $col, $iBkCol, $iCol) ; Console-Ausgaben

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

    For $r = 0 To _GUICtrlListView_GetItemCount($hWnd) - 1
    _SetItemParam($hWnd, $r, $col, $iBkCol, $iCol, -1, -1, -1)
    Next
    EndFunc ;==>_ColorColumn

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

    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam) ; Window-Handler
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hListView1, $hListView2
    Switch $iCode
    Case $NM_CLICK ; only to set index to input in example
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
    Local $aRet[3] = [$hWndFrom, DllStructGetData($tInfo, "Index"), DllStructGetData($tInfo, "SubItem")]
    Return _SetInput($aRet)
    Case $NM_CUSTOMDRAW
    If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
    Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
    Local $iDrawStage, $iItem, $iSubitem, $hDC, $tRect
    $iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
    Switch $iDrawStage
    Case $CDDS_ITEMPREPAINT
    Return $CDRF_NOTIFYSUBITEMDRAW
    Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
    $iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
    $iSubitem = DllStructGetData($tCustDraw, 'iSubItem')
    If BitAND(_GUICtrlListView_GetItemParam($hWndFrom, $iItem), 2 ^ $iSubitem) Then
    _DrawItemCol($hDC, $tCustDraw, $hWndFrom, $iItem, $iSubitem)
    Else
    _DrawDefault($hDC, $tCustDraw)
    EndIf
    Return $CDRF_NEWFONT
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    ; use _SetItemParam() with defaults to set off
    ; to mark an SubItem as set, 2^SubItem-index are stored in ItemParam as sum for all SubItem,
    ; so the max. count of columns are 31 !!
    Func _SetItemParam($hWnd, $iItem, $iSubitem, $iBkCol = -1, $iCol = -1, $iSize = -1, $iWeight = -1, $sFont = -1) ; eigentliche Funktion zum Setzen
    Local $accArray, $sumParam = 0
    For $i = 0 To UBound($ahWndSets) - 1
    If $ahWndSets[$i][0] = $hWnd Then
    $accArray = $ahWndSets[$i][1] ; temp array
    ExitLoop
    EndIf
    Next
    If $iBkCol = -1 Then
    $iBkCol = $defBkColLV
    $sumParam += 1
    EndIf
    If $iCol = -1 Then
    $iCol = $defColLV
    $sumParam += 1
    EndIf
    If $iSize = -1 Then
    $iSize = 14
    $sumParam += 1
    EndIf
    If $iWeight = -1 Then
    $iWeight = 400
    $sumParam += 1
    EndIf
    If $sFont = -1 Then
    $sFont = 'Arial'
    $sumParam += 1
    EndIf
    $accArray[$iItem][$iSubitem][0] = $iBkCol
    $accArray[$iItem][$iSubitem][1] = $iCol
    $accArray[$iItem][$iSubitem][2] = $iSize
    $accArray[$iItem][$iSubitem][3] = $iWeight
    $accArray[$iItem][$iSubitem][4] = $sFont
    $ahWndSets[$i][1] = $accArray ; write back to original array
    ; if SubItem not registered in IParam OR all values by -1 (delete Sub from IParam) ==> switch Sub value in IParam
    If (Not BitAND(_GUICtrlListView_GetItemParam($hWnd, $iItem), 2 ^ $iSubitem)) Or ($sumParam = 5) Then _
    _GUICtrlListView_SetItemParam($hWnd, $iItem, BitXOR(_GUICtrlListView_GetItemParam($hWnd, $iItem), 2 ^ $iSubitem))
    If BitAND(_GUICtrlListView_GetItemParam($hWnd, $iItem), 2 ^ $iSubitem) Then _WinAPI_InvalidateRect($hWnd) ; only if values changed
    EndFunc ;==>_SetItemParam

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

    Func _DrawItemCol(ByRef $hDC, ByRef $tCustDraw, $hWnd, $iItem, $iSubitem) ; ???
    Local $accArray
    For $i = 0 To UBound($ahWndSets) - 1
    If $ahWndSets[$i][0] = $hWnd Then
    $accArray = $ahWndSets[$i][1]
    ExitLoop
    EndIf
    Next
    Local $aDefFont[14] = [14, 0, 0, 0, $FW_NORMAL, False, False, False, _
    $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial']
    $aDefFont[0] = $accArray[$iItem][$iSubitem][2]
    $aDefFont[4] = $accArray[$iItem][$iSubitem][3]
    $aDefFont[13] = $accArray[$iItem][$iSubitem][4]
    $hDC = DllStructGetData($tCustDraw, 'hdc')
    DllStructSetData($tCustDraw, 'clrText', RGB2BGR($accArray[$iItem][$iSubitem][1]))
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($accArray[$iItem][$iSubitem][0]))
    $hFont = _WinAPI_CreateFont($aDefFont[0], $aDefFont[1], $aDefFont[2], $aDefFont[3], $aDefFont[4], $aDefFont[5], $aDefFont[6], _
    $aDefFont[7], $aDefFont[8], $aDefFont[9], $aDefFont[10], $aDefFont[11], $aDefFont[12], $aDefFont[13])
    _WinAPI_SelectObject($hDC, $hFont)
    EndFunc ;==>_DrawItemCol

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

    Func _DrawDefault(ByRef $hDC, ByRef $tCustDraw) ; ???
    $hDC = DllStructGetData($tCustDraw, 'hdc')
    DllStructSetData($tCustDraw, 'clrText', RGB2BGR($defColLV))
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($defBkColLV))
    $hFont = _WinAPI_CreateFont(14, 0, 0, 0, $FW_NORMAL, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, _
    $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial')
    _WinAPI_SelectObject($hDC, $hFont)
    EndFunc ;==>_DrawDefault

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

    Func RGB2BGR($iColor)
    Local $sH = Hex($iColor, 6)
    Return '0x' & StringRight($sH, 2) & StringMid($sH, 3, 2) & StringLeft($sH, 2)
    EndFunc ;==>RGB2BGR

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

    #EndRegion LV-Funktionen

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

    #Region Help-Functions

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

    Func dd($a, $b = "", $c = "", $d = "", $e = "", $f = "") ; Debug-Ausgabe in Console
    ConsoleWrite($a)
    If $b <> "" Then ConsoleWrite(", " & $b)
    If $c <> "" Then ConsoleWrite(", " & $c)
    If $d <> "" Then ConsoleWrite(", " & $d)
    If $e <> "" Then ConsoleWrite(", " & $e)
    If $f <> "" Then ConsoleWrite(", " & $f)
    ConsoleWrite(@CRLF)
    EndFunc ;==>dd

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

    #EndRegion Help-Functions

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

    #EndRegion Funktions-Definitionen

    [/autoit]

    Besten Dank im voraus!
    R@iner

  • ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3)

    • skyteddy
    • 9. Juli 2009 um 17:52

    Hallo BugFix,

    nette Funktionen, aber irgendwie stimmt da was nicht mit deinen Dateien.

    Du schreibst, daß die aktuellste Version in der Datei "FormatSubItemLV_new.au3" zu finden ist. Die ist aber viel kleiner als "FormatSubItemLVex.au3" (10 anstatt 18kb).
    Obendrein ist nichts kommentiert und es fehlen Funktionen, wie z.B. _OneRowSetCol.

    Ist das Absicht, oder Versehen?

    Besten Dank im voraus und weiterhin happy computing!
    R@iner

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™