- Offizieller Beitrag
Hi,
nachdem ich nun eine Lösung habe, Text in ein Edit zu ziehen, ohne den alten Inhalt zu löschen, möchte ich auch die Möglichkeit haben, den Text an der aktuellen Mauszeigerposition einzufügen. So, wie man es aus anderen Anwendungen kennt, einfach ein Wort zwischen zwei andere ziehen.
Meine momentane Lösung erfordert, dass ich vorab im Edit an die Zielposition klicke. Das gefällt mir aber nicht.
Ich habe bis jetzt aber keinen Ansatz gefunden, wie ich aus der Cursorposition auf die Zeichenposition im Edit schließen kann.
Vielleicht habt ihr ja eine Idee.
Das ist meine bisherige Lösung:
Spoiler anzeigen
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Global $content, $sel
$Form1 = GUICreate("Form1", 690, 222, 195, 115)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_down')
GUISetOnEvent($GUI_EVENT_DROPPED, '_dropped')
$ListView1 = GUICtrlCreateListView("Tabelle", 455, 8, 230, 189)
GUICtrlSendMsg(-1, 0x101E, 0, $LVSCW_AUTOSIZE_USEHEADER )
$LVTable = GUICtrlGetHandle($ListView1)
$Edit1 = GUICtrlCreateEdit("Bla-Bla ", 8, 8, 441, 189)
GUICtrlSetState($Edit1, $GUI_DROPACCEPTED)
$hEdit = GUICtrlGetHandle($Edit1)
For $i = 1 To 10
_GUICtrlListView_AddItem($LVTable, 'Eintrag ' & StringRight('0' & $i, 2))
Next
GUISetState()
While True
Sleep(100)
WEnd
Func Form1Close()
Exit
EndFunc
Func _down()
$content = GUICtrlRead($Edit1)
$sel = _GUICtrlEdit_GetSel($hEdit) ; Cursorposition im Edit
EndFunc
Func _dropped()
Local $sLeft = '', $sRight = ''
If @GUI_DropId <> $Edit1 Then Return
If @GUI_DragId = $ListView1 Then _
Local $strAppend = _GUICtrlListView_GetItemText($LVTable, _GUICtrlListView_GetSelectedIndices($LVTable))
; löscht alten Inhalt:
;~ _GUICtrlEdit_InsertText($hEdit, ' ' & $strAppend, $sel[0])
; fügt am Ende an:
;~ _GUICtrlEdit_AppendText($hEdit, $content & ' ' & $strAppend)
; fügt an Cursorposition ein, ich muß aber vorm Ziehen die Zielposition markieren:
$sLeft = StringLeft($content, $sel[0])
If $sel[0] < StringLen($content) Then $sRight = StringRight($content, StringLen($content)-$sel[0])
$content = $sLeft & ' ' & $strAppend & ' ' & $sRight
_GUICtrlEdit_AppendText($hEdit, $content)
EndFunc