Listview: Inhalt rechtsbündig anzeigen // Inhalt ins Clipboard kopieren

  • hi
    ich denk der threadtitel trifft meine beiden anliegen ganz gut
    hier mal ein screen von meinem gui, damit kann ich mein problem besser beschreiben:
    [Blockierte Grafik: http://img34.imageshack.us/img34/8633/guil.jpg]

    ich möchte einmal die werte unter value alle rechtsbündig haben (formatieren werd ich sie mir noch selbst;) )
    und zum anderen würde ich gerne die email adressen links einzeln per doppelklick oder strg-v, etc in die zwischenablage kopieren.
    zu beiden problemen konnte ich bisher nichts im helpfile finden, deswegen hoff ich ihr könnt mir hier helfen.
    gruß
    heini

    3 Mal editiert, zuletzt von heini (28. Juni 2009 um 23:47)

  • Hallo,

    [autoit]

    clipput() und clipget()

    [/autoit]

    handeln die Zwischenablage
    und mit

    [autoit]

    _GUICtrlListView_JustifyColumn

    [/autoit]

    klapppts auch mit der Ausrichtung!
    ciao
    Andy

  • http://www.autoit.de/dokumentation_…ons/ClipPut.htm

    Zitat

    clipput() und clipget()

    das ist mir klar, aber ich will das doch nur aufrufen, wenn auf den inhalt zB ein doppeklick ausgeführt wird.
    mein problem ist, dass ich nicht weiß wie ich autoit den doppelklick registrieren lassen kann.
    eine andere möglichkeit, mit der ich mich zufrieden geben würde wäre, wenn man den inhalt einfach mit strg+c kopieren könnte.
    für _GUICtrlListView_JustifyColumn schonmal danke :)
    gruß
    heini


    edit:
    zu _GUICtrlListView_JustifyColumn:
    hab jetzt geschafft oben den schriftzug "value" nach rechts zu verschieben, die werte untendrunter waren davon nicht betroffen
    muss ich das für jedes listviewitem extra machen?

    2 Mal editiert, zuletzt von heini (25. Juni 2009 um 22:32)

  • [autoit]

    _GUICtrlListView_SetExtendedListViewStyle

    [/autoit]


    in der Hilfe gefunden "Doppelklick"
    Das müsste es sein!
    ciao
    Andy

  • ok jetzt sieht man schonmal am cursor, dass er mit $LVS_EX_TWOCLICKACTIVATE den doppelklick irgendwie registriert
    in der hilfe steht ja

    Zitat

    The control sends an $LVN_ITEMACTIVATE message when the user double-clicks an item

    also dachte ich mir, ich bau einfach in der while schleife sowas ein

    Code
    $nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $LVN_ITEMACTIVATE
    			MsgBox (0, "", "")


    das zeigt jedoch keine wirkung
    außerdem wäre da dann noch die frage, wie man unterscheidet, auf welche zeile man jetzt genau geklickt hat
    vlt steh ich grad irgendwie aufm schlauch aber ich komm nicht drauf, wie ich das lösen könnte :S
    gruß
    heini

    edit: rechtsbündig funktioniert aber schonmal ^^

    • Offizieller Beitrag

    Du mußt das Doppelklick-Event im ListView verwerten. Dazu nutzt du WM_NOTIFY.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    $gui = GUICreate('test')
    $lv = GUICtrlCreateListView('eMail|value', 10,10,300,150,Default,$LVS_EX_FULLROWSELECT)
    $hLV = GUICtrlGetHandle($lv)
    _GUICtrlListView_SetColumnWidth($hLV, 0, 200)
    _GUICtrlListView_SetColumnWidth($hLV, 1, 86)
    _GUICtrlListView_JustifyColumn($hLV, 1, 1)
    For $i = 1 To 10
    GUICtrlCreateListViewItem('('&$i&') '&Random(2000,20000,1)&'mail@bla.com|'& StringFormat('%.3f', Random(0,200)), $lv)
    Next
    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

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

    Do
    Until GUIGetMsg() = -3

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

    Func _LeftDblClick($index)
    If $index < 0 Then Return
    Local $txt = _GUICtrlListView_GetItemText($hLV, $index)
    ClipPut($txt)
    ToolTip('"' & $txt & '"' & @LF & 'wurde in die Zwischenablage kopiert.')
    Sleep(1500)
    ToolTip('')
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hLV
    If Not IsHWnd($hLV) Then $hWndListView = GUICtrlGetHandle($hLV)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _LeftDblClick(DllStructGetData($tInfo, "Index"))
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • ich muss das nochmal hochholen:
    dein lösungsvorschlag, bugfix, funktioniert super, wenn man das script in scite startet.
    nach dem compilen wird der doppelklick aber nicht mehr erfasst
    wie kann ich weiter vorgehen? :)

    • Offizieller Beitrag

    Bei mir funzt das Beispiel von BugFix als Compiled Exe einfandfrei. Was für ein Betriebssystem hast du denn ?

  • vista ulti 64bit
    bei der compiled exe kommt bei mir bei doppelklick weder der tooltip, noch wird etwas ins clipboard kopiert

    • Offizieller Beitrag

    Könnte am 64 Bit Code liegen . Versuche es mal im 32 bit Code. Einfach beim Compilieren der Haker vor USE X64 Version ausmachen . Hab auch manchmal Probleme wenn ich Scripte im X64 Compiliere. Kann das gerade selber nicht testen, hab auf dem Schleppi nur Home Premium 32.