Abfrage einer MS SQL 2008 DB mit Autoit

  • Hallo,

    so nachdem ich meine GUI um einige SQL Statements erweitert habe, komme ich an ein neues Problem, welches ich gerne im Vorfeld mal besprechen würde.
    Als momentanes Ergebnis bekomme ich eine ListView mit z.B. 4 Zeilen aufgebaut. Da ich jedoch einige Werte ausgeben lasse, ist die Bildschirmbreite recht schnell erreicht, sodass sich der Scrollbalken aktiviert.

    Jetzt kam mir folgende Idee.

    Ich baue mir dort wo ich bisher die Listview aufgebaut habe ein Tab Controll mit z.B. 2 Tabulatoren (wie das geht muss ich noch schauen, habe damit noch nie was gemacht, aber das wir schon nicht so schwierig sein).
    Auf dem ersten Tab möchte ich dann die Listview in einer abspeckten Version ausgeben.

    Gehen wir mal davon aus, das mein

    SQL
    SELECT * FROM NACHWEIS where NACHWEISNR = '1234';

    als Ergebnis die Tabellennamen NACHWEISNR, NACHWEIS_ID, MENGE und DATUM ausgibt (natürlich viel mehr, nur so als Beispiel), könnte es jedoch sein, das die NACHWEISNR 1234 in der Datenbank öfter vorkommt, jedoch die NACHWEIS_ID immer eindeutig ist. Es wird jetzt z.B. eine Listview aufgebaut mit 4 Zeilen.

    Pro Zeile lasse ich nur die "wichtigsten" Dinge optisch erscheinen, damit der Scrollbalken erst gar nicht benötigt wird.

    So und jetzt kommt mein Problem :)

    Ich würde jetzt gerne mit der Maus eine Listviewzeile anklicken (also irgendeine von den 4 Zeilen), dann sollte im Hintergrund nochmals ein

    SQL
    SELECT * FROM NACHWEIS where NACHWEIS_ID = 4711;

    stattfinden, wobei die NACHWEIS_ID hier auch "irgendwie" dynamisch ausgelesen werden müsste. Und das "große Ergebnis" von diesem SELECT möchte ich dann mit Labels und Inputfelder sauber aufgeteilt im zweiten Tab darstellen, also eine Arte Detailansicht

    BTW: Gibt es eigentlich eine einfache und elegante Methode Labels und Inputfelder sauber anzuordnen, d.h. das Sie senkrecht und waagerecht über eine Logik sauber stehen. Momentan ist das bei mir noch ganz viel versuchen und testen, bis es halt sauber aussieht.

    Vorab schon mal Danke, ich werde jetzt mal loslegen und schauen wie weit ich komme.

    Gruss Hassan

  • also zum auslesen kannst du das hier benutzen

    Spoiler anzeigen
    [autoit]

    $mark = _GUICtrlListView_GetSelectionMark(GUICtrlGetHandle($h_Listview))
    $erste_spalte= _GUICtrlListView_GetItemText(GUICtrlGetHandle($h_Listview), $mark, 0)
    $zweite_spalte= _GUICtrlListView_GetItemText(GUICtrlGetHandle($h_Listview), $mark, 1)
    $dritte_spalte= _GUICtrlListView_GetItemText(GUICtrlGetHandle($h_Listview), $mark, 2)

    [/autoit]

    um herauszufinden, wann ein Item im Listview angeklickt wurde, benötigst du WM_NOTIFY

    Spoiler anzeigen
    [autoit]


    [...]GUI Erstellen [...]
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While 1

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

    Sleep(100)

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

    WEnd

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_COLUMNCLICK ; Es wurde auf eine Spalte geklickt
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _DebugPrint("$LVN_COLUMNCLICK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _
    "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    "-->Param:" & @TAB & DllStructGetData($tInfo, "Param"))
    ; Kein Rückgabewert
    Case $LVN_DELETEITEM ; Ein Item soll gelöscht werden
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _DebugPrint("$LVN_DELETEITEM" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _
    "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    "-->Param:" & @TAB & DllStructGetData($tInfo, "Param"))
    ; Kein Rückgabewert
    Case $LVN_HOTTRACK ; Wird von einem ListView gesendet, wenn der Benutzer die Maus über ein Item bewegt
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _DebugPrint("$LVN_HOTTRACK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _
    "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    "-->Param:" & @TAB & DllStructGetData($tInfo, "Param"))
    ;~ Return 0 ; Erlaubt dem ListView, seine normale "Verfolgen und Auswählen"-Operation durchzuführen
    ;Return 1 ; Das Item wird nicht ausgewählt
    Case $LVN_KEYDOWN ; Eine Taste wurde gedrückt
    $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
    _DebugPrint("$LVN_KEYDOWN" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->VKey:" & @TAB & DllStructGetData($tInfo, "VKey") & @LF & _
    "-->Flags:" & @TAB & DllStructGetData($tInfo, "Flags"))
    ; Kein Rückgabewert
    Case $NM_CLICK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der linken Maustaste anklickt
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _DebugPrint("$NM_CLICK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
    "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
    "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
    ; Kein Rückgabewert
    Case $NM_DBLCLK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der linken Maustaste doppelklickt
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _DebugPrint("$NM_DBLCLK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
    "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
    "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
    ; Kein Rückgabewert
    Case $NM_KILLFOCUS ; Das Control hat den Eingabefokus verloren
    _DebugPrint("$NM_KILLFOCUS" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode)
    ; Kein Rückgabewert
    Case $NM_RCLICK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der rechten Maustaste anklickt
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _DebugPrint("$NM_RCLICK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
    "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
    "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
    ;Return 1 ; Verhindert die weitere Standard-Nachrichtenbehandlung
    Return 0 ; Erlaubt die weitere Standard-Nachrichtenbehandlung
    Case $NM_RDBLCLK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der rechten Maustaste doppelklickt
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _DebugPrint("$NM_RDBLCLK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
    "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
    "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
    ; Kein Rückgabewert
    Case $NM_RETURN ; Das Control hat den Eingabefokus und der Benutzer hat die ENTER-Taste gedrückt
    _DebugPrint("$NM_RETURN" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode)
    ; Kein Rückgabewert
    Case $NM_SETFOCUS ; Das Control hat den Eingabefokus erhalten
    _DebugPrint("$NM_SETFOCUS" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode)
    ; Kein Rückgabewert
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func _DebugPrint($s_text, $line = @ScriptLineNumber)
    ConsoleWrite( _
    "!===========================================================" & @LF & _
    "+======================================================" & @LF & _
    "-->Zeile(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
    "+======================================================" & @LF)
    EndFunc ;==>_DebugPrint

    [/autoit]
  • Servus TheLuBu

    erst mal vielen Dank. Ich habe jetzt mal mit WM_Notifiy herumgespielt. Da wird man ja in der Console förmlich erschlagen. Aus diesem Grund habe ich mal alle die auskommentiert, die mich aktuell nicht interessieren. Das sieht jetzt so aus:

    Meine modifizierte WM_Notify
    [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo, $NM_CLICK, $NM_DBLCLK, $NM_KILLFOCUS, $NM_RCLICK, $NM_RDBLCLK, $NM_RETURN, $NM_SETFOCUS
    $hWndListView = $listview
    If Not IsHWnd($listview) Then $hWndListView = GUICtrlGetHandle($listview)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    ;~ Case $LVN_COLUMNCLICK ; Es wurde auf eine Spalte geklickt
    ;~ $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    ;~ _DebugPrint("$LVN_COLUMNCLICK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    ;~ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    ;~ "-->Code:" & @TAB & $iCode & @LF & _
    ;~ "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _
    ;~ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    ;~ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    ;~ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    ;~ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    ;~ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    ;~ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    ;~ "-->Param:" & @TAB & DllStructGetData($tInfo, "Param"))
    ; Kein Rückgabewert
    ;~ Case $LVN_DELETEITEM ; Ein Item soll gelöscht werden
    ;~ $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    ;~ _DebugPrint("$LVN_DELETEITEM" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    ;~ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    ;~ "-->Code:" & @TAB & $iCode & @LF & _
    ;~ "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _
    ;~ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    ;~ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    ;~ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    ;~ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    ;~ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    ;~ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    ;~ "-->Param:" & @TAB & DllStructGetData($tInfo, "Param"))
    ; Kein Rückgabewert
    ;~ Case $LVN_HOTTRACK ; Wird von einem ListView gesendet, wenn der Benutzer die Maus über ein Item bewegt
    ;~ $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    ;~ _DebugPrint("$LVN_HOTTRACK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    ;~ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    ;~ "-->Code:" & @TAB & $iCode & @LF & _
    ;~ "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _
    ;~ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    ;~ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    ;~ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    ;~ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    ;~ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    ;~ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    ;~ "-->Param:" & @TAB & DllStructGetData($tInfo, "Param"))
    ;~ Return 0 ; Erlaubt dem ListView, seine normale "Verfolgen und Auswählen"-Operation durchzuführen
    ;Return 1 ; Das Item wird nicht ausgewählt
    ;~ Case $LVN_KEYDOWN ; Eine Taste wurde gedrückt
    ;~ $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
    ;~ _DebugPrint("$LVN_KEYDOWN" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    ;~ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    ;~ "-->Code:" & @TAB & $iCode & @LF & _
    ;~ "-->VKey:" & @TAB & DllStructGetData($tInfo, "VKey") & @LF & _
    ;~ "-->Flags:" & @TAB & DllStructGetData($tInfo, "Flags"))
    ; Kein Rückgabewert
    Case $NM_CLICK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der linken Maustaste anklickt
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _DebugPrint("$NM_CLICK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
    "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
    "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
    CheckPosOnListView()
    ; Kein Rückgabewert
    ;~ Case $NM_DBLCLK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der linken Maustaste doppelklickt
    ;~ $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    ;~ _DebugPrint("$NM_DBLCLK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    ;~ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    ;~ "-->Code:" & @TAB & $iCode & @LF & _
    ;~ "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
    ;~ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    ;~ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    ;~ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    ;~ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    ;~ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    ;~ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    ;~ "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
    ;~ "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
    ; Kein Rückgabewert
    ;~ Case $NM_KILLFOCUS ; Das Control hat den Eingabefokus verloren
    ;~ _DebugPrint("$NM_KILLFOCUS" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    ;~ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    ;~ "-->Code:" & @TAB & $iCode)
    ; Kein Rückgabewert
    ;~ Case $NM_RCLICK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der rechten Maustaste anklickt
    ;~ $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    ;~ _DebugPrint("$NM_RCLICK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    ;~ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    ;~ "-->Code:" & @TAB & $iCode & @LF & _
    ;~ "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
    ;~ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    ;~ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    ;~ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    ;~ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    ;~ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    ;~ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    ;~ "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
    ;~ "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
    ;Return 1 ; Verhindert die weitere Standard-Nachrichtenbehandlung
    ;~ Return 0 ; Erlaubt die weitere Standard-Nachrichtenbehandlung
    ;~ Case $NM_RDBLCLK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der rechten Maustaste doppelklickt
    ;~ $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    ;~ _DebugPrint("$NM_RDBLCLK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    ;~ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    ;~ "-->Code:" & @TAB & $iCode & @LF & _
    ;~ "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
    ;~ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    ;~ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    ;~ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    ;~ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    ;~ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    ;~ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    ;~ "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
    ;~ "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
    ; Kein Rückgabewert
    ;~ Case $NM_RETURN ; Das Control hat den Eingabefokus und der Benutzer hat die ENTER-Taste gedrückt
    ;~ _DebugPrint("$NM_RETURN" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    ;~ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    ;~ "-->Code:" & @TAB & $iCode)
    ; Kein Rückgabewert
    ;~ Case $NM_SETFOCUS ; Das Control hat den Eingabefokus erhalten
    ;~ _DebugPrint("$NM_SETFOCUS" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    ;~ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    ;~ "-->Code:" & @TAB & $iCode)
    ; Kein Rückgabewert
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]


    Leider ist es so, das ich bisher nur Ausgabe in der Console bekomme habe, wenn ich auf die Spaltenname geklickt hatte. Eigentlich erwarte ich jetzt beim linken Mausklick auf die erste oder zweite Zeile eine Reaktion in der Console, aber da passiert nix ;(

    Die Funktion CheckPosOnListView() ist hier

    [autoit]

    Func CheckPosOnListView()
    $mark = _GUICtrlListView_GetSelectionMark(GUICtrlGetHandle($listview))
    ConsoleWrite("$mark = " & $mark & @CRLF)
    $erste_spalte = _GUICtrlListView_GetItemText(GUICtrlGetHandle($listview), $mark, 0)
    ConsoleWrite("$erste_spalte = " & $erste_spalte & @CRLF)
    $zweite_spalte = _GUICtrlListView_GetItemText(GUICtrlGetHandle($listview), $mark, 1)
    ConsoleWrite("$zweite_spalte = " & $zweite_spalte & @CRLF)
    $dritte_spalte = _GUICtrlListView_GetItemText(GUICtrlGetHandle($listview), $mark, 2)
    ConsoleWrite("$dritte_spalte = " & $dritte_spalte & @CRLF)
    EndFunc ;==>CheckPosOnListView

    [/autoit]


    Was mache ich hier falsch ? Bei den ersten Starts wurden auch ganz viele Variablen als nicht deklariert angemeckert. Die habe ich dann in der Funktion WM_Notify als Local nachdeklariert. Da meine Listview die Variable

    [autoit]

    $listview

    [/autoit]

    hat, habe ich das ab Zeile 4 der Funktion auch angepasst. Sorry ich finde die Funktion echt heftig, da steig ich leider nicht wirklich durch.

  • Ich hab den Include vergessen :)

    [autoit]

    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>

    [/autoit]

    Entferne die Variablen, die du als Local deklariert hast nochmal und versuche es dann bitte

  • Ok, hier kommt Sie schon, die weitere Frage :)

    Ich habe jetzt ein TabControll mit 2 Tabs erstellt. Einer mit dem Namen "Tabelle" der andere zweite Tab mit dem Namen "Details". "Tabelle" steht im Focus.
    Wenn ich jetzt die Listview auf "Tabelle" erzeugen lasse ist alles OK, jedoch sehe ich die Listview auch, wenn ich "Details" drücke.

    Wie kann ich die Listview dem Tab "Tabelle" fest zuweisen ?

  • Hier mal ein Beispiel zu Tabs:

    Spoiler anzeigen
    [autoit]

    $hGui = GUICreate("Test")
    $Tab = GUICtrlCreateTab(1,1,400, 400)
    $tabitem1 = GUICtrlCreateTabItem("1 Tab") ; Ersten Tab erstellen
    $Listview = GUICtrlCreateListView("Listview", 50, 50, 300, 300) ;
    ;~ [...]
    ;~ weitere Controls für den ersten Tab
    ;~ [...]

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

    $tabitem2 = GUICtrlCreateTabItem("2 Tab") ; Zweiten Tab erstellen
    ;~ [...]
    ;~ weitere Controls für den zweiten Tab
    ;~ [...]

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

    GUICtrlCreateTabItem(""); Tab Definition beenden

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

    Guisetstate()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    Exit
    EndSwitch

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

    WEnd

    [/autoit]

    Die Reihenfolge, in der du die Controls anlegst, ist bei den Tabs wichtig.

  • Die Reihenfolge, in der du die Controls anlegst, ist bei den Tabs wichtig.

    Was wohl auch das Problem sein dürfte, denn er löscht das listview zum Neuaufbau und erstellt dann ein neues. Habe zwar mit tab controls keine Erfahrung, aber ich denke mal man müsste in diesem Fall die beiden listviews einmailg zu Beginn erzeugen und dann nur noch die Inhalte aktualisieren/setzen anstatt es komplett neu zu erzeugen.

  • Guten morgen zusammen,

    ich glaube die Ansätze von misterspeed könnten hier passen. Das Beispiel (ich in der Hilfe) sieht ja den Aufbau folgendermaßen vor.

    1. GUI
    2. erster Tab
    3. Inhalt erster Tab
    4. zweiter Tab
    5. Inhalt zweiter Tab
    6. Endtab

    Ich lasse aber 2 leere Tabs erzeugen, und möchte dann im zweiten Schritt auf Tab 1 die "Tabelle" anzeigen und wenn ich eine Zeile markiere einen zweiten Select durchführen, welcher mit dann in der "Detail" Ansicht auf dem 2. Tab dargestellt wird.

    Vielleicht hat mir da jemand auch ein kleines Beispiel, damit der Groschen fällt :)

    Danke