Listview Format UDF - Fragen

  • Danke für die UDF habe es geschafft mein ODBC Tool auf diese UDF umzubasteln.
    Ich hänge nun an 2 Stellen das Problem hatte ich vorher auch schon.
    Ich bin hier schon weiter gekommen als vorher da die Sortierung etc quasi frei Haus geliefert wird Thx @ BugFix

    1. Wie schaffe ich es die Auswahl auszulesen und weiterzuverarbeiten

    DSN|DB Server|DB|Collation
    1aa|AAAAAAAA|AA|LATIN
    2aa|AAAAAAAA|AA|LATIN
    3aa|AAAAAAAA|AA|LATIN
    4aa|AAAAAAAA|AA|LATIN

    also wenn 1aa und 4aa markiert sind benötige ich alle Infos der Zeile und möchte diese in einer Schleife abarbeiten

    2. wie kann ich es erreichen die Zeilen wo die Collation <> Latin ist einzufärben, direkt oder hinterher je nachdem was besser ist

    Ich habe mir dein Beispiel Script umgebastelt also inhaltlich wäre es darauf anwendbar

    [autoit]

    GUICtrlCreateLabel("Konfigurierbare MSSQL-Datenquellen", 16, 40)
    $ListView_Label = "DSN-Name|Datenbankserver|Datenbankname|DB-Collation"
    $ListView_DSN_DB = GUICtrlCreateListView($ListView_Label, 16, 56, 465, 321,$LVS_REPORT)

    [/autoit]

    $LVS_REPORT habe ich für Multiselect mit reingenommen, das stört doch nicht oder :rolleyes:

    Gruß Dietmar

    [Edit BugFix: mal hierher verschoben]

    Achtung Anfänger! :whistling:

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

    Einmal editiert, zuletzt von BugFix (1. November 2009 um 09:07)

    • Offizieller Beitrag

    Das könntest du so lösen: (Bitte zum Erstellen, Löschen, Einfügen von Item unbedingt meine Funktionen nutzen.)

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    #include <LV_Format_include.au3>

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

    $GUI = GUICreate('')
    $lv = GUICtrlCreateListView('DSN|DB Server|DB|Collation', 10, 10, 300, 150)
    $hLV = GUICtrlGetHandle($lv)
    For $i = 0 To 3
    _GUICtrlListView_SetColumnWidth($hLV, $i, 73)
    Next

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

    ; initialize Global vars
    _GUICtrlListView_Formatting_Startup($GUI, $hLV)

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

    ; add new Items
    _GUICtrlListView_AddOrIns_Item($hLV, '1aa|AAAAAAAA|AA|LATIN')
    _GUICtrlListView_AddOrIns_Item($hLV, '2aa|AAAAAAAA|AA|LATIN')
    _GUICtrlListView_AddOrIns_Item($hLV, '3aa|AAAAAAAA|AA|GERMAN')
    _GUICtrlListView_AddOrIns_Item($hLV, '4aa|AAAAAAAA|AA|LATIN')
    _GUICtrlListView_AddOrIns_Item($hLV, '5aa|AAAAAAAA|AA|DUTCH')
    _GUICtrlListView_AddOrIns_Item($hLV, '6aa|AAAAAAAA|AA|LATIN')

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

    ; set format
    For $i = 0 To _GUICtrlListView_GetItemCount($hLV) -1
    If _GUICtrlListView_GetItemText($hLV, $i, 3) <> 'LATIN' Then _
    _GUICtrlListView_FormattingCell($hLV, $i, 3, 0xff0000, -1, -1, 600, 'Times New Roman')
    Next

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = -3
    ; clear ressources
    _GUICtrlListView_Formatting_Shutdown()

    [/autoit]

    Edit:
    Da du, wenn ich das richtig verstehe, nur eine Farbe benötigst und nicht speziell eine einzelne Zelle formatieren mußt, kannst du auch die einfache Methode zum Einfärben von Zeilen nutzen:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    Global $aItemID[6]

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

    $GUI = GUICreate('')
    $lv = GUICtrlCreateListView('DSN|DB Server|DB|Collation', 10, 10, 300, 150)
    $hLV = GUICtrlGetHandle($lv)
    For $i = 0 To 3
    _GUICtrlListView_SetColumnWidth($hLV, $i, 73)
    Next

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

    ; add new Items
    $aItemID[0] = GuiCtrlCreateListviewItem("1aa|AAAAAAAA|AA|LATIN", $lv)
    $aItemID[1] = GuiCtrlCreateListviewItem("2aa|AAAAAAAA|AA|LATIN", $lv)
    $aItemID[2] = GuiCtrlCreateListviewItem("3aa|AAAAAAAA|AA|GERMAN", $lv)
    $aItemID[3] = GuiCtrlCreateListviewItem("4aa|AAAAAAAA|AA|LATIN", $lv)
    $aItemID[4] = GuiCtrlCreateListviewItem("5aa|AAAAAAAA|AA|DUTCH", $lv)
    $aItemID[5] = GuiCtrlCreateListviewItem("6aa|AAAAAAAA|AA|LATIN", $lv)

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

    ; set format
    For $i = 0 To _GUICtrlListView_GetItemCount($hLV) -1
    If _GUICtrlListView_GetItemText($hLV, $i, 3) <> 'LATIN' Then _
    GUICtrlSetBkColor($aItemID[$i], 0xff0000)
    Next

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • Hier werden Sie geholfen ;)

    Spoiler anzeigen
    [autoit]


    Func _Mark_DSN($Target_Listbox)
    For $i = 0 To _GUICtrlListView_GetItemCount($Target_Listbox) -1
    If StringLeft(_GUICtrlListView_GetItemText($Target_Listbox, $i, 3),5) <> 'LATIN' Then
    _GUICtrlListView_FormattingCell($Target_Listbox, $i, 3, 0xff0000, -1, -1, 600);, 'Times New Roman')
    EndIf
    Next
    EndFunc

    [/autoit]

    Konnte ich bei mir reinbasteln besten Dank :)
    Wie muss man eigentlich den Bereich formatieren damit die Schrift nicht fett ist?
    EDIT : _GUICtrlListView_FormattingCell($Target_Listbox, $i, 3, 0xff0000, -1, -1, 300)
    steht ja da :thumbup:

    Bin bei dem Auslesen der Markierung etwas weitergekommen,
    Versuch mich dem gerade so zu nähern

    Spoiler anzeigen
    [autoit]

    $DB_Selection = _GUICtrlListView_GetSelectedIndices($hListView_DSN_DB, True)
    If $DB_Selection = "" Then
    MsgBox(0,"Keine Auswahl getroffen","Keine DSNs erzeugt")
    Else
    For $i = 0 To UBound($DB_Selection,1) -1

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

    MsgBox(0,"",$DB_Selection[$i])
    Next
    EndIf

    [/autoit]

    Wie erreiche ich das beim Buttonklick die Markierung erhalten bleibt, neu setzen?

    Gruß und Danke Dietmar

    Achtung Anfänger! :whistling:

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

    2 Mal editiert, zuletzt von Dietmar (31. Oktober 2009 um 23:02)

    • Offizieller Beitrag

    Wie erreiche ich das beim Buttonklick die Markierung erhalten bleibt, neu setzen?


    Verstehe ich grad nicht. Meinst du die Farbmarkierung? Die ändert sich doch nicht. Oder meinst du die Selektionsmarkierung - die muß ja verschwinden, falls du in das Listview klickst ohne STRG oder SHIFT zu drücken.
    Wäre vielleicht ganz sinnvoll, wenn du sagst, was du im weiteren vorhast (mit der farblich markierten und/oder Maus-selektierten Auswahl.

  • Hallo Bugfix

    Bin schon recht weit, Export von markierten Elementen in Registry // Backup in Datei von Registry usw.
    Ich meine folgendes ich habe >=1 Elemente markiert und rücke nun den Löschen oder Import Button
    dann verliert die die Markierung.

    Dauert auch nicht mehr lange bis ich das Script online stellen kann, wenigstens mal etwa was auch andere gebrauchen können. :)

    Gruß Dietmar

    Achtung Anfänger! :whistling:

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

    • Offizieller Beitrag

    Ich meine folgendes ich habe >=1 Elemente markiert und rücke nun den Löschen oder Import Button
    dann verliert die die Markierung.


    Wenn du mit meiner ListviewFormat UDF arbeitest, mußt du auch zum Löschen von Items die von mir bereitgestellten Funktionen nutzen. Nicht umsonst habe ich diese Funktionen erstellt ;)
    Nutzt du die normalen ListView-UDF Funktionen, erfolgt keine Änderung der Format-Daten im zugehörigen Array (ist im Include).

    Code
    Delete one, selected or all Item:
    _GUICtrlListView_FormattedDeleteItem($hWnd, $iIndex)
    _GUICtrlListView_FormattedDeleteItemsSelected($hWnd)
    _GUICtrlListView_FormattedDeleteAllItems($hWnd)