Input Boxen in SubItems eines ListView Controls

  • guck dir mal den Stil $LVS_EDITLABELS an.
    Damit kann man den ersten Eintrag sofort editieren. (per Inputbox).
    Ansonsten guck dir Diesen Thread mal an.

    Geht allerdings nur wenn man es auswählt / doppelklickt, ansonsten ist ganz normal ein Label da.

  • Danke für den Tipp. Habe bereits eine ähnliche Lösung im englischen Forum gefunden. Aber es ist leider nicht das gleiche.

    Das einzig geniale an dem Programm (ich meine den AddonKopierer) ist, dass sich die Länge der InputBox synchron mit der Länge der Spalte verändert. Es macht also einen soliden Eindruck. Soweit ich weiß wurde das Programm in Visual Basic geschrieben.

    Gibt es keine bekannte Lösung dazu?


    EDIT:

    Also möglich sollte es sein. Ich habe hier mal ein Beipsiel angefertigt, dass zu mindest schon mal ein Edit Control an der richtigen Stelle anzeigt, allerdings vergraut es wenn ich den Focus verliere:

    [autoit]

    #include <GuiEdit.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <WinAPI.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ComboConstants.au3>
    #include <Constants.au3>
    #include <Array.au3>
    #include <String.au3>
    #include <ListViewConstants.au3>
    #include <GuiTab.au3>
    #include <TreeViewConstants.au3>
    #include <GuiListBox.au3>
    #include <StructureConstants.au3>
    #include <GuiListView.au3>
    #include <UpDownConstants.au3>

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

    Opt("GuiCloseOnESC", 0)

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

    Global $hEdit, $hDC, $hBrush, $Item = -1, $SubItem = 0

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

    Global $Style = BitOR($WS_CHILD, $WS_VISIBLE, $ES_AUTOHSCROLL, $ES_LEFT)

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

    $hGUI = GUICreate("ListView Subitems edit in place", 400, 300)

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

    $hListView = _GUICtrlListView_Create($hGUI, "Items|SubItems", 2, 2, 296, 196, BitOR($LVS_EDITLABELS, $LVS_REPORT))
    _GUICtrlListView_SetExtendedListViewStyle($hListView, $LVS_EX_GRIDLINES)

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

    For $i = 1 To 10
    _GUICtrlListView_AddItem($hListView, "Item " & $i)
    _GUICtrlListView_AddSubItem($hListView, $i - 1, "SubItem " & $i, 1)
    Next

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

    $Item = 1
    $SubItem = 1
    Local $iSubItemText = _GUICtrlListView_GetItemText($hListView, $Item, $SubItem)
    Local $iLen = _GUICtrlListView_GetStringWidth($hListView, $iSubItemText)
    Local $aRect = _GUICtrlListView_GetSubItemRect($hListView, $Item, $SubItem)
    $hEdit = _GUICtrlEdit_Create($hGUI, $iSubItemText, $aRect[0] + 6, $aRect[1], $iLen + 10, 17, $Style)
    _GUICtrlEdit_SetSel($hEdit, 0, -1)
    _WinAPI_SetFocus($hEdit)
    $hDC = _WinAPI_GetWindowDC($hEdit)
    $hBrush = _WinAPI_CreateSolidBrush(0)
    FrameRect($hDC, 0, 0, $iLen + 10 , 17, $hBrush)

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

    ;~ GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    ;~ GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    ;~ GUICtrlSetState($hEdit, $GUI_FOCUS)

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

    GUISetState()

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

    Do
    GUICtrlSetState($hEdit, $GUI_FOCUS)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit]

    Hat jemand eine Idee wie ich das Edit Control aktiv halte, sodass ich es jederzeit bearbeiten kann?

    Danke jungs!

    Einmal editiert, zuletzt von Trolleule1337 (14. Januar 2013 um 18:50)

  • @IPU genial man, wie hast du das so schnell hinbekommen?? sieht ja schon sau gut aus, aber kann doch nicht sein, dass man die Reihen nicht markieren kann ;)

    Das kriegen wir doch sicher noch hin oder?

    Häng doch bitte deinen code an und kommentier auch bitte mal die zeilen, die ich brauche um die input felder auszulesen. Danke :)

    BugFix
    Deine Lösung ist schon ziemlich gut, aber wenn man mehrere Stunden damit verbracht hat eine Lösung herbeizuführen, dann geht es einem danach nicht mehr um die Lösung sondern darum, es irgendwie umzusetzen. Also es geht ums Prinzip! Keine schöne Angewohnheit :huh:

    @Make-Grafik:
    leider nein, habe schon beim Entwickler angefragt aber bisher keine Antwort bekommen. Einer von Ihnen scheint schon seit 3 Jahren inaktiv zu sein...

  • Ich hatte eben genau die gleiche idee: Das mit einem child gui zu machen, allerdings wird das child gui nur das Input Control beinhalten. Ja setz den code mal rein bitte.

    Hmm also wie wärs denn wenn wir dem child gui nur das Input Control geben?