Hi,
ich habe drei Fragen zur Listbox.
- Kann ich ein Doppelklick auf ein bestimmtes Item abfangen?
- Kann ich ein bestimmtes Item einfärben? (Hintergrund o. Text)
- Kann ich bei einmaligem Klick auf ein ausgewähltes Item, dieses deselektieren?
MfG
qixx
Hi,
ich habe drei Fragen zur Listbox.
MfG
qixx
Ist alles möglich. Meinst du wirklich die Listbox oder ein Listview?
Hier mal der Doppelklick auf ein Listboxitem:
#include<GuiListBox.au3>
#include<GUIConstantsEx.au3>
#include<ListBoxConstants.au3>
#include<WindowsConstants.au3>
$hGUI = GUICreate("List Box Create", 400, 296)
$hListBox = _GUICtrlListBox_Create ($hGUI,"", 2, 2, 396, 296)
GUISetState()
For $i = 1 To 10
_GUICtrlListBox_AddString($hListBox, 'Eintrag ' & $i)
Next
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
[/autoit] [autoit][/autoit] [autoit]Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func ListDblClick()
MsgBox(0, '', _GUICtrlListBox_GetText($hListBox, _GUICtrlListBox_GetCurSel($hListBox)))
EndFunc
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
If Not IsHWnd($hListBox) Then $hWndListBox = GUICtrlGetHandle($hListBox)
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
Switch $hWndFrom
Case $hListBox, $hWndListBox
Switch $iCode
Case $LBN_DBLCLK
ConsoleWrite( _GUICtrlListBox_GetText($hListBox, _GUICtrlListBox_GetCurSel($hListBox)) & @CRLF)
case 1
ConsoleWrite("Click" & @CRLF)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
edit \ Einzelklick hinzugefügt.
Sehr nice!
Vielen Dank!
Hast du vielleicht auch noch eine Idee,
wie man ein einzelnes Item umfärben
kann? ![]()
Für ein Listview ist das z.B. im Starplayer v2 umgesetzt (Skripte-Forum). Dort ist auch eine Funktion um den Doppelklick ins Listview abzufangen.
Für die Listbox geht die Einzelfärbung der Items wohl doch nicht :wacko:
Macht aber ja nichts, ein Listview ist eh flexibler ![]()
Okay,
Danke. ![]()
Edit:
Eigentlich ist es ein GUICtrlCreateList()
Kann ich das irgendwie verbinden oder so?^^
Weil ich habe bisher immer mit _GuiCtrlListBox_...()
gearbeitet. ![]()
MfG
qixx
Du kannst die ListBox nicht mit einem ListView kombinieren. Das sind 2 unterschiedliche Controls. Du mußt dich schon für eins entscheiden.
Für ein Listview ist das z.B. im Starplayer v2 umgesetzt (Skripte-Forum).
Okay, habe jetzt auf Liestview umgestellt. ![]()
Aber ich finde irgendwie in dem Player nichts,
wie ich die Tastendrücke abfangen kann. ![]()
Kann mir jemand ein Beispiel geben oder die
Stelle zeigen, in der das zu finden ist? ![]()
Danke!
MfG
qixx
Gute Entscheidung aufs Listview umzustellen.
Hier die Auswertung der Clicks:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListView.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
$MainGui = GUICreate("Listview Beispiel", 616, 395, 192, 120)
[/autoit] [autoit][/autoit] [autoit]$ListView = GUICtrlCreateListView("Produkt Name", 8, 8, 498, 214)
$hListView= GUICtrlGetHandle($ListView)
$TestItem = GUICtrlCreateListViewItem("TEST1", $ListView)
$TestItem2 = GUICtrlCreateListViewItem("TEST2", $ListView)
$hbutton = GUICtrlCreateButton("testbutton", 150,300 , 177, 21)
Global $test
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_notify, "_DoubleClickOnListView");Die Funktion bei einer WM_Notify Message
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _DoubleClickOnListView($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $iIDFrom
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hListView
Switch $iCode ;checkt wie das Event aussieht
Case $NM_DBLCLK ;bei einem Doppelklick (markiert das Item farbig)
ConsoleWrite("DoubleClickOnListView" & @CRLF)
case $NM_CLICK ;bei einem einfachen Linksclick
ConsoleWrite("ClickOnListView" & @CRLF)
case $NM_RCLICK ;der Rechtsclick (hebt die Markeirung auf
ConsoleWrite("RClickOnListView" & @CRLF)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>_DoubleClickOnListView
Für die farbige Markierung der Items hab ich leider gerade kein Beispiel. Kann ich morgen nachreichen (gibts auch ne UDF von Bugfix dazu).
Wow!
Vielen Dank!
Freue mich schon auf das Beispiel mit den
Farben. ![]()
Edit:
Bin jetzt zuhause und konnte es testen. Ist auch
soweit super, doch nimmt der die Klicks, wenn
man auf das ListView klickt und nicht, wenn man
auf ein Item klickt. ![]()
MfG
qixx
Sorry bin heute zu nichts gekommen
Um dich nicht ganz hängen zu lassen hier mal ein Link zur angesprochenen UDF: ListView - SubItem einzeln färben/formatieren, Finale Version!
Vielleicht kommst du damit schon klar?
@Clicks: Und wie willst du es haben? Kannst doch auslesen welches Item markiert ist und entsprechend reagieren.
Sorry bin heute zu nichts gekommen
![]()
Ist ja kein Problem. ![]()
@Clicks: Und wie willst du es haben? Kannst doch auslesen welches Item markiert ist und entsprechend reagieren.
Ja, stimmt. xD
Danke nochmal!
MfG
qixx