Hey
Ich möchte ein ListView erstellen, mitdem man, wenn man zB 2 Spalten hat, diese unabhängig voneinander makieren kann (1.Spalte links, 5.Spalte rechts und nicht 2.Spalte links, 2.Spalte rechts).
Bis jetzt habe ich dazu nichts gefunden.
Währe nett wenn ihr mir helft
MfG AntiSpeed
Bei GUICtrlCreateListView Spalten verschieden Makieren (zB 1.Spalte links, 5.Spalte rechts)
-
- [ gelöst ]
-
AntiSpeed -
31. Januar 2011 um 19:21 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
Davon habe ich noch nie etwas gehört und meines Wissens beherscht ein Listview dieses Verhalten nicht.
Erstelle dir eine Lösung mit 2 Listviews und setze sie direkt nebeneinander.
-
- Offizieller Beitrag
Ich wüsste auch nicht, dass so etwas möglich wäre.
Du könntest aber etwas tricksen und zwei Listviews nebeneinander erstellen.Edit: Mist, Raupi war schneller.
-
Genau desshalb habe ich gefragt
Aber mir geht es darum, dass ich den Titel verschieben kann und so wie ihr meint, gäb es ja 2 unabhängig voneinander Titels.Hatt den wirklich keiner eine Idee?
Gibt es dafür vlt ein bessers Ctrl (dass nicht im au3-Standard-Packet dabei ist ) ? -
- Offizieller Beitrag
ZitatAber mir geht es darum, dass ich den Titel verschieben kann und so wie ihr meint, gäb es ja 2 unabhängig voneinander Titels.
Was meinst du damit? Das anpassen der Spaltenbreite?
-
Hier mal ein Screenshot.
Lasst euch nicht von "ausgewählte Module" irritieren und erstetzt es gedanklich mal durch "erste Spalte" . -
Wenn die Listview Ownerdrawn ist, dann ist prinzipiell bei der Markierung alles möglich :)... mir ist nur noch immer nicht ganz klar, was markiert werden soll ... bemühe doch mal Paint.
-
- Offizieller Beitrag
Theretisch geh es schon, sowas zu erstellen. Dazu muß man aber das ListView regelrecht vergewaltigen.
Hab aber heute keinen Nerv zu sowas. Vielleicht schreibt dir jemand ein Beispiel. Wenn nicht bastel ich die Tage daran,
wenn ich mal wieder Langeweile habe.Zitat von KaFuWenn die Listview Ownerdrawn ist, dann ist prinzipiell bei der Markierung alles möglich :).
Genau das hatte ich eben im Hinterkopf.
-
Wäre sehr sehr sehr sehr sehr [...] sehr nett von dir
-
- Offizieller Beitrag
Hatte gerade mal ein bischen Zeit und Lust um dir ein Beispiel zu schreiben.
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>Global $iSelectFirst = 0, $iSelectSecond = 0, $sSelectFirst, $sSelectSecond, $msg
[/autoit] [autoit][/autoit] [autoit]
Global $aTest1[11] = ["Andy", "Berta", "Carlo", "Dora", "Erich", "Fred", "Georg", "Heinz", "Ingo", "Jan", "Klaus"]
Global $aTest2[11] = ["Blub", "Test", "Blahblah", "Irgendwas", "Weißnicht", "Nochwas", "Egal", "Demo", "Ratata", "ETtc"]Global $hGUI = GUICreate("Spezial ListView", 300, 200)
[/autoit] [autoit][/autoit] [autoit]
Global $ListView = GUICtrlCreateListView("Versteckt|Name|Unsinn", 2, 2, 296, 156, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_SIMPLESELECT))
Global $hListView = GUICtrlGetHandle($ListView)
_GUICtrlListView_SetColumnWidth($hListView, 0, 0);1. Column ausblenden, da Ownerdraw im 1. Item nicht richtig funktioniert
_GUICtrlListView_SetColumnWidth($hListView, 1, 150)
_GUICtrlListView_SetColumnWidth($hListView, 2, 150)
Global $hHeaderLV = _GUICtrlListView_GetHeader($hListView);Handle der Listviewheaders
Global $Button = GUICtrlCreateButton("Ergebnis", 50, 170, 100, 21)For $i = 0 To 10
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_AddItem($hListView, "Item " & $i); 11 Items erstellen
Next
; 2. Array in 1. Column (Name) einfügen
For $i = 0 To 10
_GUICtrlListView_AddSubItem($hListView, $i - 1, $aTest1[$i], 1)
Next
; 2. Array in 2. Column (Unsinn) einfügen
For $i = 0 To 10
_GUICtrlListView_AddSubItem($hListView, $i - 1, $aTest2[$i], 2)
Next
;Auswahl beider Columns auf 0. Eintrag setzen
$sSelectFirst = _GUICtrlListView_GetItemText($hListView, 0, 1)
$sSelectSecond = _GUICtrlListView_GetItemText($hListView, 0, 2)GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]
GUISetState()While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case $Button
MsgBox(0, "Auswahl", "Auswahl 1 Spalte: " & $sSelectFirst & @CRLF & "Auswahl 2. Spalte: " & $sSelectSecond)
EndSwitch
WEndFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
Local $tNMHDR, $hWndFrom, $iCode
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
;============= Resizen der 1. Column verhindern ==========================
Case $hHeaderLV
Local $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
Switch $iCode
Case -320, -321 ; -320 = $HDN_ITEMCHANGINGW -321 = $HDN_ITEMCHANGEDW
If DllStructGetData($tNMHEADER, "Item") = 0 Then Return 1
EndSwitch
;============= Resizen der 1. Column verhindern ==========================
Case $hListView
Switch $iCode
Case $NM_Click
Local $aHit = _GUICtrlListView_SubItemHitTest($hListView)
If $aHit[0] <> -1 And $aHit[1] = 0 Then
Return 1
ElseIf $aHit[0] <> -1 And $aHit[1] = 1 Then
$oldSelect = $iSelectFirst
$iSelectFirst = $aHit[0]
$sSelectFirst = _GUICtrlListView_GetItemText($hListView, $aHit[0], $aHit[1])
_GUICtrlListView_RedrawItems($hListView, $aHit[0], $aHit[0])
_GUICtrlListView_RedrawItems($hListView, $oldSelect, $oldSelect)
ElseIf $aHit[0] <> -1 And $aHit[1] = 2 Then
$oldSelect = $iSelectSecond
$iSelectSecond = $aHit[0]
$sSelectSecond = _GUICtrlListView_GetItemText($hListView, $aHit[0], $aHit[1])
_GUICtrlListView_RedrawItems($hListView, $aHit[0], $aHit[0])
_GUICtrlListView_RedrawItems($hListView, $oldSelect, $oldSelect)
EndIf
Case $NM_CUSTOMDRAW
Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $ilParam)
$iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
Local $iItem, $iColor1, $iColor2, $iColor3
Switch DllStructGetData($tCustDraw, 'dwDrawStage')
Case $CDDS_ITEMPREPAINT
Return $CDRF_NOTIFYSUBITEMDRAW
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
$iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
$iColor1 = RGB2BGR(0xFFFFFF) ; Standardhintergrundfarbe
$iColor2 = RGB2BGR(0x000000)
$iColor3 = RGB2BGR(0xFFFFFF)
If DllStructGetData($tCustDraw, 'iSubItem') = 1 And $iSelectFirst = $iItem Then
DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR(0x3300FF))
DllStructSetData($tCustDraw, 'clrText', $iColor3)
ElseIf DllStructGetData($tCustDraw, 'iSubItem') = 2 And $iSelectSecond = $iItem Then
DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR(0x3399FF))
DllStructSetData($tCustDraw, 'clrText', $iColor3)
Else
DllStructSetData($tCustDraw, 'clrTextBk', $iColor1)
DllStructSetData($tCustDraw, 'clrText', $iColor2)
EndIf
Return $CDRF_NEWFONT
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFYFunc RGB2BGR($iColor)
[/autoit]
Return BitAND(BitShift(String(Binary($iColor)), 8), 0xFFFFFF)
EndFunc ;==>RGB2BGR -
Sehr genial
Vielen Dank