Danke für die Hilfe!
Kann ich GUICtrlSetResizing()auch für die komplette Anwendung übernehmen, damit ich das nicht bei jedem Ctrl einzeln machen muss?
LG
Danke für die Hilfe!
Kann ich GUICtrlSetResizing()auch für die komplette Anwendung übernehmen, damit ich das nicht bei jedem Ctrl einzeln machen muss?
LG
Hallo zusammen,
ich habe eine ListView, die ich per Knopfdruck mit Daten fülle. Nun ist dieser Button mit "aufklappen" markiert und soll genau dieses auch machen.
Drückt man drauf, soll sich die Mainform "erweitern" und untendrunter soll eine ListView stehen. Drückt man wieder drauf, das umgekehrte.
Ist das irgendwie realisierbar?
Sourcecode mit dem ich teste:
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
$frmMain = GUICreate("Aufklappen", 400, 40) ;expand zu 400
$cmdExpand = GUICtrlCreateButton("Aufklappen", 10, 10, 100, 25)
$lstExpand = GUICtrlCreateListView("txt1|txt2|txt3|txt4", 10, 50, 380, 340)
GUISetState(@SW_SHOW, $frmMain)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $cmdExpand
_Expand()
EndSwitch
WEnd
Func _Expand()
_GUICtrlListView_DeleteAllItems($lstExpand)
For $i = 0 To 14
GUICtrlCreateListViewItem("txt1: " & $i & "|txt2: " & $i & "|txt3: " & $i & "|txt4: " & $i,$lstExpand)
Next
EndFunc
Alles anzeigen
Ich danke vorab für alle Antworten.
LG,
der Robert
Oha.. Zehn mal kontrollgelesen und trotzdem nicht gesehen. dieses "Ctrl" kriegt mich jedes mal
Danke!!!
Hallo,
Das Ich nochmal
Ganz so einfach gehts wohl dann doch nicht.. Ich habe seit gestern versucht, per GUISetOnEvent() einen Buttonklick abzufangen. Allerdings tut sich rein gar nichts
Könnte jemand bitte einmal drüberschauen wo ich den Fehler habe?
#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
$frmMain = GUICreate("D2 Runcounter", 300, 50)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Event")
$cmdReset = GUICtrlCreateButton("Reset", 230, 10, 50, 25)
GUISetOnEvent(-1, "_Event")
$lblCountText = GUICtrlCreateLabel("Runs:", 10, 15, 50, 25)
GUICtrlSetFont(-1, 12, 700)
$lblCounter = GUICtrlCreateLabel(FileRead(@ScriptDir & "\\Runs.txt"), 62, 15, 150, 25)
GUICtrlSetFont(-1, 12, 700)
GUISetState(@SW_SHOW, $frmMain)
Global $sTimeStamp = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC
Global $sFileTimeInit = FileGetTime("D:\\Diablo II\\D2\\Save\\_LOD_SharedStashSave.sss", 0, 1)
While 1
Sleep(150)
_Counter()
WEnd
Func _Counter()
$sFileTimeCurr = FileGetTime("D:\\Diablo II\\D2\\Save\\_LOD_SharedStashSave.sss", 0, 1)
IF $sFileTimeInit < $sFileTimeCurr Then
$sFileTimeInit = $sFileTimeCurr
GUICtrlSetData($lblCounter, GUICtrlRead($lblCounter)+1)
EndIf
EndFunc
Func _Close()
FileDelete(@ScriptDir & "\\Runs.txt")
FileWrite(@ScriptDir & "\\Runs.txt", GUICtrlRead($lblCounter))
Exit
EndFunc
Func _Reset()
MsgBox(0, "", "TEST")
GUICtrlSetData($lblCounter, "0")
EndFunc
Func _Event()
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
_Close()
Case $cmdReset
_Reset()
EndSwitch
EndFunc
Alles anzeigen
Dankesehr!
Bei der IP müssten es glaube ich vier slashes sein. Glaube aber nicht, dass es daran liegen wird. Der Einwand von AutoIter klingt am logischsten, wenn der Code den du uns gepostet hast komplett ist, dann fehlt einfach der Aufruf der Funktion.
Verwende den OnEventModus für deine GUI, dann ist die Nachrichtenschleife praktisch nicht mehr existent und entkoppelt von deinem Sleep für die Prüfung.
Wenn du das ganze auf die Spitze treiben willst kannst du auch sowas wie SHNotify verwenden, womit Windows dann eine Eventfunktion von dir aufruft, wenn an einer Datei innerhalb eines Ordners etwas verändert wurde.
Oh Gott, ich bin so dumm. Danke dir, hat funktioniert
Mist, da bist du mir zuvor gekommen
Hallo zusammen,
eines vorweg zur besseren Vorstellung: Ich spiele Diablo 2 und mache gerade sog. Speedruns. Dabei macht man in schnellen Durchgängen immer wieder das selbe und zählt die Anzahl der Runs mit.
Um das nicht alles selbst machen zu müssen, habe ich mir ein Script gebastelt, welches einfach nur schaut, wann die Speicherzeit des Charakters sich geändert hat.
Das funktioniert soweit auch wunderbar. Allerdings ist das Problem, dass er beim schließen des Fensters ewig nicht reagiert weil ich im "While" ein "Sleep(150)" eingebaut habe mit anschließender Prüfung des last changed Attributes.
Hier der Code:
#include <MsgBoxConstants.au3>
#include <GUIConstants.au3>
$frmMain = GUICreate("D2 Runcounter", 300, 50)
$lblCountText = GUICtrlCreateLabel("Runs:", 10, 10, 100, 25)
$lblCounter = GUICtrlCreateLabel("0", 120, 10, 100, 25)
GUISetState(@SW_SHOW, $frmMain)
Global $sTimeStamp = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC
Global $sFileTimeInit = FileGetTime("D:\\Diablo II\\D2\\Save\\_LOD_SharedStashSave.sss", 0, 1)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_Save()
ExitLoop
EndSwitch
Sleep(150)
_Counter()
WEnd
Func _Counter()
$sFileTimeCurr = FileGetTime("D:\\Diablo II\\D2\\Save\\_LOD_SharedStashSave.sss", 0, 1)
IF $sFileTimeInit < $sFileTimeCurr Then
$sFileTimeInit = $sFileTimeCurr
GUICtrlSetData($lblCounter, GUICtrlRead($lblCounter)+1)
EndIf
EndFunc
Func _Save()
FileDelete(@ScriptDir & "\\Runs.txt")
FileWrite(@ScriptDir & "\\Runs.txt", GUICtrlRead($lblCounter))
EndFunc
Alles anzeigen
Wie schaffe ich es, dass das Script im Hintergrund _Counter() ausführt ohne dabei das GUI zu freezen?
Vielen Dank für alle Antworten und LG,
der Robert
P.S.: Das hier ist kein Bot, sondern soll einfach nur zählen
Der Code von Oscar ist schon Hochsprache, will ich meinen. Ich lese ihn mir auch gerade durch und ziehe meinen Hut. Hättest nur ein bisschen kommentieren können, lieber Oscar
Evtl. änderst du noch den Titel dieses Threads...
Falsch: Den Background einzelner ListBOX Elemente ändern
Richtig: Den Background einzelner ListView Elemente ändern
Passender wäre: Hintergrundfarbe einzelner ListView-Items/SubItems ändern
Ich hab die Variante zwei genommen, weil ich als nicht so versierter Scripter danach in Google gesucht habe und daher glaube, dass es so eher gefunden wird, wenn es gebraucht wird
Habe oben im Script noch ein paar Fehler korrigiert...
Ja... und bei ListViewColorsFonts_SetItemColors() eine Spalte (SubItem) angeben, dass dann auch existiert!
Stimmt.
Nichtsdestotrotz geht es jetzt und genau dafür ist das Forum da.
Danke dir vielmals für deine Geduld und Hilfe!
Moment mal.. Quasi alles was ich hätte machen müssen wäre am Anfang eine Überschrift zu setzen?!
Wow, man sieht manchmal den Wald vor lauter Bäumen nicht
Aber deine Art Fehler auszugeben gefällt mir. Das werde ich mal so frech wie ich bin künftig übernehmen.
DANKE DANKE DANKE!
Nachtrag: Das Problem mit der Erkennung was fehlt gibt es im Originalscript nicht, daher lasse ich das mal so stehen.
Hallo nochmal,
der Errorcode kam von deiner Funktion. wie oben ja auch festgestellt, kann er die Liste wohl nicht finden.
Ich habe den Code mal separiert und lauffähig hier reingeschrieben. Zwar mit anderen Quelldaten (Datenschutz und so), aber das Fehlerbild ist "zum Glück" das gleiche.
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <Guiedit.au3>
#include <file.au3>
#include <ProgressConstants.au3>
#include <GuiListView.au3>
#include <ListViewColorsFonts.au3>
$frmMain = GUICreate("Active Directory Verwaltung", 791, 598, 191, 127)
#Region Vergleich
$Grp_lblLeftUser = GUICtrlCreateLabel("Zeige Gruppen von: ", 16, 87, 361, 18) ;Label User links
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_txtLeftUser = GUICtrlCreateInput("UserLinks", 16, 104, 121, 22) ;Textfeld User links
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_cmdLeftUserOk = GUICtrlCreateButton("OK", 144, 103, 75, 25);OK User links
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_lblGroupsLeftUser = GUICtrlCreateLabel("Gruppen", 16, 144, 361, 18)
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_lstGroupsLeftUser = GUICtrlCreateListView("", 16, 160, 361, 410, $LVS_SHOWSELALWAYS); GUICtrlCreateList("", 16, 160, 361, 410, BitOR($gui_ss_default_list, $ws_hscroll, $lbs_extendedsel)) ;Liste User Links
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_HiddenLeft = GUICtrlCreateLabel("0", 230, 103, 30, 18)
;~ GUICtrlSetState(-1, $GUI_HIDE)
$Grp_lblRightUser = GUICtrlCreateLabel("Zeige Gruppen von: ", 400, 87, 361, 18) ;Label User rechts
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_txtRightUser = GUICtrlCreateInput("UserRechts", 400, 104, 121, 22) ;Textfeld User rechts
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_cmdRightUserOk = GUICtrlCreateButton("OK", 528, 103, 75, 25);OK User rechts
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_lblGroupsRightUser = GUICtrlCreateLabel("Gruppen", 400, 144, 361, 18)
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_lstGroupsRightUser = GUICtrlCreateListView("", 400, 160, 361, 410, $LVS_SHOWSELALWAYS) ;Liste User rechts
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_HiddenRight = GUICtrlCreateLabel("0", 614, 103, 30, 18)
;~ GUICtrlSetState(-1, $GUI_HIDE)
#EndRegion
GUISetState(@SW_SHOW, $frmMain)
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
Exit
Case $Grp_cmdLeftUserOk
_Suche(1) ;Linker Button
Case $Grp_cmdRightUserOk
_Suche(2) ;Rechter Button
EndSwitch
WEnd
Func _Suche($iWo)
Switch $iWo
;Links
Case 1
_GUICtrlListView_DeleteAllItems($Grp_lstGroupsLeftUser)
Local $sSuche = GUICtrlRead($Grp_txtLeftUser)
If $sSuche = "" Then
MsgBox(0, "", "Bitte einen User auswählen!")
GUICtrlSetData($Grp_HiddenLeft, 0)
Else
GUICtrlSetData($Grp_lblGroupsLeftUser, "Gruppen von " & $sSuche)
local $aGroupSearch[7] = ["7","Gruppe1","Gruppe2","Gruppe3","Gruppe4","Gruppe5","Gruppe6"]
If UBound($aGroupSearch) - 1 < 1 Then
MsgBox(0, "", "Keine Gruppen gefunden. Bitte den Usernamen prüfen!")
GUICtrlSetData($Grp_HiddenLeft, 0)
Else
local $hWo[UBound($aGroupSearch)]
For $i = 1 To UBound($aGroupSearch) - 1
$hWo[$i] = GUICtrlCreateListViewItem($aGroupSearch[$i], $Grp_lstGroupsLeftUser)
Next
_Compare(0, $hWo)
EndIf
EndIf
;Rechts
Case 2
_GUICtrlListView_DeleteAllItems($Grp_lstGroupsRightUser)
Local $sSuche = GUICtrlRead($Grp_txtRightUser)
If $sSuche = "" Then
MsgBox(0, "", "Bitte einen User auswählen!")
GUICtrlSetData($Grp_HiddenRight, 0)
Else
GUICtrlSetData($Grp_lblGroupsRightUser, "Gruppen von " & $sSuche)
local $aGroupSearch[6] = ["6","Gruppe1","Gruppe2","Gruppe3","Gruppe5","Gruppe6"]
If UBound($aGroupSearch) - 1 < 1 Then
MsgBox(0, "", "Keine Gruppen gefunden. Bitte den Usernamen prüfen!")
GUICtrlSetData($Grp_HiddenRight, 0)
Else
local $hWo[UBound($aGroupSearch)]
For $i = 0 To UBound($aGroupSearch) - 1
$hWo[$i] = GUICtrlCreateListViewItem($aGroupSearch[$i], $Grp_lstGroupsRightUser)
Next
_Compare(1, $hWo)
EndIf
EndIf
EndSwitch
EndFunc ;=> Suche()
Func _Compare($iWo, $hWo)
local $sListeLinks, $sListeRechts
local $aListeLinks, $aListeRechts
;Wenn links gefüllt ist, setze HiddenLeft Label
If $iWo = 0 Then
If _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) > 0 Then
GUICtrlSetData($Grp_HiddenLeft, 1)
Else
GUICtrlSetData($Grp_HiddenLeft, 0)
EndIf
EndIf
;Wenn rechts gefüllt ist, setze HiddenRight Label
If $iWo = 1 Then
If _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) > 0 Then
GUICtrlSetData($Grp_HiddenRight, 1)
Else
GUICtrlSetData($Grp_HiddenRight, 0)
EndIf
EndIf
;Wenn die Liste links UND die Liste rechts gefüllt ist, führe folgendes aus
If GUICtrlRead($Grp_HiddenLeft) = 1 AND GUICtrlRead($Grp_HiddenRight) = 1 Then
ListViewColorsFonts_Init($Grp_lstGroupsLeftUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
ListViewColorsFonts_Init($Grp_lstGroupsRightUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
;Linkes Array
For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) - 1
$sListeLinks = $sListeLinks & _GUICtrlListView_GetItemText($Grp_lstGroupsLeftUser, $i) & ";"
Next
$aListeLinks = StringSplit($sListeLinks, ";")
_ArrayDelete($aListeLinks, UBound($aListeLinks) - 1)
;Rechtes Array
For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) - 1
$sListeRechts = $sListeRechts & _GUICtrlListView_GetItemText($Grp_lstGroupsRightUser, $i) & ";"
Next
$aListeRechts = StringSplit($sListeRechts, ";")
_ArrayDelete($aListeRechts, UBound($aListeRechts) - 1)
;Links nach fehlenden Gruppen suchen
For $i = 1 To UBound($aListeLinks) - 1
If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
;~ $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, -1, "0xFF0000") ; Red back color for entire item
;~ MsgBox(0, $i, "Links: " & $aListeLinks[$i])
local $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, 3, 0xFF0000) ; Red back color only for subitem 3
;Error Msg ausgeben
If $listview < 0 Then ConsoleWrite("Error " & @error & @CRLF)
EndIf
Next
ListViewColorsFonts_Redraw($Grp_lstGroupsLeftUser)
EndIf
EndFunc ;=> Compare()
Alles anzeigen
Ich danke dir vielmals, dass du dir so viel Mühe gibst mir zu helfen, das ist nicht selbstverständlich!
LG,
der Robert
Hallo nochmal und lieben Dank erneut für deine hilfreiche Antwort.
Leider behebt es das Problem nicht, da nun seltsamerweise keine Einträge in der Listview erstellt werden. Es läuft kurz durch als würde es die Liste befüllen, diese bleibt jedoch leer. Dass der Durchlauf dennoch abgeschlossen wurde, sehe ich wenn ich die MsgBox anzeigen lasse. Zudem werden auch die HiddenLabels befüllt, die ich zur Kontrolle mit eingebaut habe.
Ich kriege auch noch immer den Error 2, seltsamerweise
Hier nochmal der Code:
$Grp_lblLeftUser = GUICtrlCreateLabel("Zeige Gruppen von: ", 16, 87, 361, 18) ;Label User links
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_txtLeftUser = GUICtrlCreateInput("user A", 16, 104, 121, 22) ;Textfeld User links
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_cmdLeftUserOk = GUICtrlCreateButton("OK", 144, 103, 75, 25);OK User links
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_lblGroupsLeftUser = GUICtrlCreateLabel("Gruppen", 16, 144, 361, 18)
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_lstGroupsLeftUser = GUICtrlCreateListView("", 16, 160, 361, 410);, $LVS_SHOWSELALWAYS); BitOR($gui_ss_default_list, $ws_hscroll, $lbs_extendedsel)) ;Liste User Links
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_HiddenLeft = GUICtrlCreateLabel("0", 230, 103, 30, 18)
;~ GUICtrlSetState(-1, $GUI_HIDE)
$Grp_lblRightUser = GUICtrlCreateLabel("Zeige Gruppen von: ", 400, 87, 361, 18) ;Label User rechts
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_txtRightUser = GUICtrlCreateInput("user B", 400, 104, 121, 22) ;Textfeld User rechts
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_cmdRightUserOk = GUICtrlCreateButton("OK", 528, 103, 75, 25);OK User rechts
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_lblGroupsRightUser = GUICtrlCreateLabel("Gruppen", 400, 144, 361, 18)
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_lstGroupsRightUser = GUICtrlCreateListView("", 400, 160, 361, 410);, $LVS_SHOWSELALWAYS) ;Liste User Rechts
GUICtrlSetFont(-1, 9, 500, 0, "Arial")
$Grp_HiddenRight = GUICtrlCreateLabel("0", 614, 103, 30, 18)
;~ GUICtrlSetState(-1, $GUI_HIDE)
Alles anzeigen
_GUICtrlListView_DeleteAllItems($Grp_lstGroupsLeftUser)
Local $sSuche = GUICtrlRead($Grp_txtLeftUser)
If $sSuche = "" Then
MsgBox(0, "", "Bitte einen User auswählen!")
GUICtrlSetData($Grp_HiddenLeft, 0)
Else
GUICtrlSetData($Grp_lblGroupsLeftUser, "Gruppen von " & $sSuche)
$aGroupSearch = _AD_GetUserGroups($sSuche)
If UBound($aGroupSearch) - 1 < 1 Then
MsgBox(0, "", "Keine Gruppen gefunden. Bitte den Usernamen prüfen!")
GUICtrlSetData($Grp_HiddenLeft, 0)
Else
local $hWo[UBound($aGroupSearch)]
For $i = 1 To UBound($aGroupSearch) - 1
$hWo[$i] = GUICtrlCreateListViewItem(_AD_FQDNToSamAccountName($aGroupSearch[$i]), $Grp_lstGroupsLeftUser)
Next
_Compare(0, $hWo)
EndIf
EndIf
Alles anzeigen
local $sListeLinks, $sListeRechts
local $aListeLinks, $aListeRechts
;Wenn links gefüllt ist, setze HiddenLeft Label
If $iWo = 0 Then
If _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) > 0 Then
GUICtrlSetData($Grp_HiddenLeft, 1)
Else
GUICtrlSetData($Grp_HiddenLeft, 0)
EndIf
EndIf
;Wenn rechts gefüllt ist, setze HiddenRight Label
If $iWo = 1 Then
If _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) > 0 Then
GUICtrlSetData($Grp_HiddenRight, 1)
Else
GUICtrlSetData($Grp_HiddenRight, 0)
EndIf
EndIf
;Wenn die Liste links UND die Liste rechts gefüllt ist, führe folgendes aus
If GUICtrlRead($Grp_HiddenLeft) = 1 AND GUICtrlRead($Grp_HiddenRight) = 1 Then
ListViewColorsFonts_Init($Grp_lstGroupsLeftUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
ListViewColorsFonts_Init($Grp_lstGroupsRightUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
;Linkes Array
For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) - 1
$sListeLinks = $sListeLinks & _GUICtrlListView_GetItemText($Grp_lstGroupsLeftUser, $i) & ";"
Next
$aListeLinks = StringSplit($sListeLinks, ";")
_ArrayDelete($aListeLinks, UBound($aListeLinks) - 1)
;Rechtes Array
For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) - 1
$sListeRechts = $sListeRechts & _GUICtrlListView_GetItemText($Grp_lstGroupsRightUser, $i) & ";"
Next
$aListeRechts = StringSplit($sListeRechts, ";")
_ArrayDelete($aListeRechts, UBound($aListeRechts) - 1)
;Links nach fehlenden Gruppen suchen
For $i = 1 To UBound($aListeLinks) - 1
If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
;~ $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, -1, "0xFF0000") ; Red back color for entire item
;~ MsgBox(0, $i, "Links: " & $aListeLinks[$i])
local $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, 3, 0xFF0000) ; Red back color only for subitem 3
If $listview < 0 Then ConsoleWrite("Error " & @error & @CRLF)
EndIf
Next
ListViewColorsFonts_Redraw($Grp_lstGroupsLeftUser)
Alles anzeigen
Grüß' dich bitnugger,
vielen Dank für deine super Erklärung! Leider funktioniert es jedoch nicht Error ist 2, aber warum, weiß ich leider nicht. Der Farbcode kann ja schlecht falsch sein. Hier der Code:
;Wenn die Liste links UND die Liste rechts gefüllt ist, führe folgendes aus
If GUICtrlRead($Grp_HiddenLeft) = 1 AND GUICtrlRead($Grp_HiddenRight) = 1 Then
ListViewColorsFonts_Init($Grp_lstGroupsLeftUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
ListViewColorsFonts_Init($Grp_lstGroupsRightUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
;Linkes Array
For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) - 1
$sListeLinks = $sListeLinks & _GUICtrlListView_GetItemText($Grp_lstGroupsLeftUser, $i) & ";"
Next
$aListeLinks = StringSplit($sListeLinks, ";")
_ArrayDelete($aListeLinks, UBound($aListeLinks) - 1)
;Rechtes Array
For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) - 1
$sListeRechts = $sListeRechts & _GUICtrlListView_GetItemText($Grp_lstGroupsRightUser, $i) & ";"
Next
$aListeRechts = StringSplit($sListeRechts, ";")
_ArrayDelete($aListeRechts, UBound($aListeRechts) - 1)
;Links nach fehlenden Gruppen suchen
For $i = 1 To UBound($aListeLinks) - 1
If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
;~ $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, -1, "0xFF0000") ; Red back color for entire item
;~ MsgBox(0, $i, "Links: " & $aListeLinks[$i])
$listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, 3, 0xFF0000) ; Red back color only for subitem 3
If $listview < 0 Then ConsoleWrite("Error " & @error & @CRLF)
EndIf
Next
ListViewColorsFonts_Redraw($Grp_lstGroupsLeftUser)
EndIf
Alles anzeigen
Hast du eine Idee?
LG,
der Robert
P.S.: Entschuldige die verspätete Antwort, aber ich bin nur sporadisch zuhause am Rechner
Nachtrag:
Hier noch wie $Grp_lstGroupsLeftUser erstellt wird für den Fall dass irgendein Parameter nicht unterstützt wird von deiner UDF.
Ich verstehe leider kein Wort von dem was dort steht. Ich will einfach nur ausgewählte Zellen umfärben. Brauche ich da wirklich eine komplette UDF dafür?
Sowas wie _GUICtrlListViewItem_SetBKColor($listview[$index], $color).
Das Problem ist, dass die ListViewItems alle dynamisch erzeugt werden. Wie kann ich auf einzelne Handles dieser items zugreifen?
Sie werden so erzeugt :
local $hWo[UBound($aGroupSearch)]
For $i = 1 To UBound($aGroupSearch) - 1
$hWo[$i] = GUICtrlCreateListViewItem(_AD_FQDNToSamAccountName($aGroupSearch[$i]), $Grp_lstGroupsLeftUser)
Next
_Compare(0, $hWo)
Dann sollen einzelne Zellen, nachdem eine Prüfung ob sie in der anderen ListView fehlen, gefärbt werden:
Die UDF die du verlinkt hast, ist zwar sehr gut und stark, aber doch "etwas" zu umständlich einzubauen. Oder ich weiß einfach nur nicht, wie.
Wenn es sonst keine Möglichkeit gibt, einzelnen Zellen zu färben, bleibt mir ohnehin nichts anderes übrig als auf Listview zu wechseln. Nur wie kann ich in der ListView einzelne Einträge färben wenn diese schon in der Liste vorhanden sind?
Geht das überhaupt?
Ich weiß leider nicht mehr, warum es keine Alternative war, aber ich hatte listbox seinerzeit (vor 2-3 Jahren als das ganze Programm geschrieben wurde) nehmen müssen, weil irgendwas mit Listview nicht ging.
War es evtl das Kontextmenü, das sich mit rechtsklick öffnen lassen können soll? Ich weiß es nicht mehr..
Hier mal die ganze Funktion. Die Listbox wird in einer anderen Funktion mit Einträgen befüllt.
Func _Compare($iWo)
local $sListeLinks, $sListeRechts
local $aListeLinks, $aListeRechts
;Wenn links gefüllt ist, setze HiddenLeft Label
If $iWo = 0 Then
If _GUICtrlListBox_GetCount($Grp_lstGroupsLeftUser) > 0 Then
GUICtrlSetData($Grp_HiddenLeft, 1)
Else
GUICtrlSetData($Grp_HiddenLeft, 0)
EndIf
EndIf
;Wenn rechts gefüllt ist, setze HiddenRight Label
If $iWo = 1 Then
If _GUICtrlListBox_GetCount($Grp_lstGroupsRightUser) > 0 Then
GUICtrlSetData($Grp_HiddenRight, 1)
Else
GUICtrlSetData($Grp_HiddenRight, 0)
EndIf
EndIf
;Wenn die Liste links UND die Liste rechts gefüllt ist, führe folgendes aus
If GUICtrlRead($Grp_HiddenLeft) = 1 AND GUICtrlRead($Grp_HiddenRight) = 1 Then
;Linkes Array
For $i = 0 to _GUICtrlListBox_GetCount($Grp_lstGroupsLeftUser) - 1
$sListeLinks = $sListeLinks & _GUICtrlListBox_GetText($Grp_lstGroupsLeftUser, $i) & ";"
Next
$aListeLinks = StringSplit($sListeLinks, ";")
_ArrayDelete($aListeLinks, UBound($aListeLinks) - 1)
;Rechtes Array
For $i = 0 to _GUICtrlListBox_GetCount($Grp_lstGroupsRightUser) - 1
$sListeRechts = $sListeRechts & _GUICtrlListBox_GetText($Grp_lstGroupsRightUser, $i) & ";"
Next
$aListeRechts = StringSplit($sListeRechts, ";")
_ArrayDelete($aListeRechts, UBound($aListeRechts) - 1)
;Links nach fehlenden Gruppen suchen
For $i = UBound($aListeLinks) - 1 To 1 Step - 1
If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
GUICtrlSetBkColor(_GUICtrlListBox_SetCurSel($aListeLinks, $i), "0x663366")
EndIf
Next
EndIf
EndFunc
Alles anzeigen
Hallo zusammen,
ich bin gerade dabei ein Skript zu schreiben, welches zwei Listboxen miteinander vergleicht und ausschließlich die Einträge, die im jeweils anderen fehlen farblich hervorheben sollen. Allerdings kann ich keinen Weg finden, dies umzusetzen und das Internet hilft mir auch nicht weiter, da scheinbar jeder Listview statt Listbox verwendet. Listview ist allerdings keine Alternative.
Hier ein Snippet zu dem Problem:
For $i = UBound($aListeLinks) - 1 To 1 Step - 1
If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
GUICtrlSetBkColor(_GUICtrlListBox_SetCurSel($aListeLinks, $i), "0x663366")
EndIf
Next
Ich habe mehrere Wege versucht.. So wie hier oben, dann mit selectrange und selectstring.
Die Farbe ist einfach irgendeine Farbe, die wird noch geändert
Ich hoffe, es findet sich jemand, der mir helfen kann.
Vielen Dank und LG,
der Robert