GUI - Text in Edit-Feld an derzeitiger Text-Cursor-Position einfügen

  • Hallo,

    ich bin nach langer Abwesenheit mal wieder da. Hier mir einer (für mich) schweren Fragen.

    Ich programmiere gerade eine Art "HTML-Liveeditor. Neben der Tatsache, dass er immer meinen IE10 nimmt (und ich ihn nich in den IE9-Modus gepackt krieg) hab ich ein kleines Problem. Und zwar würde ich gerne, wenn der Cursor in dem Edit-Feld ist und der Button / Shortcut gedrückt wird, an der aktuellen Stelle (wo der Text-Cursor ist) einen Text einfügen. Wie mach ich das? :)

    Mein derzeitiges Programm ist ja unwichtig, da es sich um eine grundlegende Frage handelt.

    Grüße,
    Schrubber

  • Zitat von "Schrubber"

    Mein derzeitiges Programm ist ja unwichtig, da es sich um eine grundlegende Frage handelt.

    Hast was zu verbergen was? oO
    Zudem wäre ein Skript immer gut...
    Vor allem weil ich so faul bin eine GUI zu programmieren...
    Aber ich will mal nicht so sein und gehe mal davon aus dass du nächstes mal ein Skript mitlieferst.

    Du musst als erstes die Cursor Position ermitteln.
    Dafür gibt es keine eigene Funktion, aber du kannst den markierten Bereich ermitteln.
    Eine Funktion dazu findest du in der GUIEdit.au3.

    Mit einer weiteren Funktion kannst du dann an einer bestimmten Stelle wieder ein String einfügen.
    Auch so eine Funktion findest du in der GUIEdit.au3.

    Da es sich um eine grundliegende Antwort handelt, ist das Skript was ich dazu geschrieben habe ja unwichtig.

    LG. Make-Grafik

    Spoiler anzeigen
    [autoit]

    ; Aber ich will mal nicht so sein...

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

    #include <GUIConstants.au3>
    #include <GUIEdit.au3>

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    $hGUI = GUICreate('Example', 400, 300)
    $idEdit = GUICtrlCreateEdit('', 0, 0, 400, 280)
    $idButton = GUICtrlCreateButton('Shortcut', 300, 280, 100, 20)
    GUISetState()

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    While True
    $aiSel = _GUICtrlEdit_GetSel($idEdit) ; Ermittelt Start und Endposition der Markierung
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idButton
    _GUICtrlEdit_InsertText($idEdit, 'Make-Grafik', $aiSel[1]) ; String einfügen
    EndSwitch
    WEnd

    [/autoit]
  • Nö, nix zu verbergen. Wenn ich aber eine Frage wie z.B. "Wie mäht man einen Rasen?", fragt auch keiner nach einem Bild vom Rasen ;)

    Wenns wirklich einen interessiert:

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    #include <File.au3>

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

    _IEErrorHandlerRegister()

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

    Local $s_TempFile
    Local $sIni = ".\Templator.ini"
    Local $oIE = _IECreateEmbedded()

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

    If Iniread($sIni, "Preferences", "Tempfile", "") == "" Then
    IniWrite($sIni, "Preferences", "Tempfile", $s_TempFile)
    $s_TempFile = _TempFile(@TempDir, "", ".html", 7)
    Else
    $s_TempFile = Iniread($sIni, "Preferences", "Tempfile", "")
    EndIf

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

    FileDelete($s_TempFile)
    FileCopy("./Examples/New.html", $s_TempFile)

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

    $guiWidth = Iniread($sIni, "Preferences", "Desktopwidth", 800)
    $guiHeight = Iniread($sIni, "Preferences", "Desktopheight", 600)

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Tabbed Notebook Dialog", $guiWidth-10, $guiHeight, 65, 0)
    $MenuDatei = GUICtrlCreateMenu("&Datei")
    $MenuDatei1 = GUICtrlCreateMenuItem("Neu", $MenuDatei)
    $MenuDatei2 = GUICtrlCreateMenuItem("Save Lothar", $MenuDatei)
    $MenuDatei3 = GUICtrlCreateMenuItem("Save Monika", $MenuDatei)
    $MenuDatei4 = GUICtrlCreateMenuItem("Beenden", $MenuDatei)
    $MenuAdd = GUICtrlCreateMenu("&Hinzufügen")
    $MenuAdd1 = GUICtrlCreateMenuItem("Liste", $MenuAdd)
    $MenuAdd2 = GUICtrlCreateMenuItem("Textbox", $MenuAdd)
    $MenuFormat = GUICtrlCreateMenu("&Formatieren")
    $MenuFormat1 = GUICtrlCreateMenuItem("Schriftgröße", $MenuFormat)
    $MenuFormat2 = GUICtrlCreateMenuItem("Ausrichtung", $MenuFormat)
    $MenuFormat3 = GUICtrlCreateMenuItem("Schriftfarbe", $MenuFormat)
    $MenuInfo = GUICtrlCreateMenu("&Info")
    $MenuInfo1 = GUICtrlCreateMenuItem("Hilfe", $MenuInfo)
    GUISetBkColor(0xFFFFFF)
    $PageControl1 = GUICtrlCreateTab(2, 2, $guiWidth-15, $guiHeight-50)
    $Normal = GUICtrlCreateTabItem("Normal")
    $edit_NORMAL = GUICtrlCreateEdit("", 8, 30, $guiWidth-30, $guiHeight-90)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $HTML = GUICtrlCreateTabItem("HTML")
    $edit_HTML = GUICtrlCreateEdit("", 8, 30, $guiWidth-30, $guiHeight-90)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Vorschau = GUICtrlCreateTabItem("Vorschau")
    GUICtrlCreateObj($oIE, 8, 35, $guiWidth-30, $guiHeight-90)
    $spacer = GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    _IENavigate($oIE, $s_TempFile)

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

    While 1
    $nMsg = GUIGetMsg()
    if $nMsg > 0 Then
    ;MSGBOX(0, "", $nMsg)
    EndIf

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

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Normal
    MSGBOX(0, "", "Normal")

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

    Case 17
    _reloadAll()

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

    EndSwitch
    WEnd

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

    Func _reloadAll()
    FileDelete($s_TempFile)
    FileWrite($s_tempFile, GUICtrlRead($edit_HTML))
    _IEAction($oIE, "refresh")
    EndFunc

    [/autoit]

    Werde mal schauen, was ich finde. Hab da noch nen weiteres Problem, aber das erläuter ich beim nächsten Mal ;)


    Grüße,
    Schrubber

  • Hey,

    ich bins nochmal. Irgendwie schaff ich es nicht, deine Lösung bei mir zu Nutzen. Bekomme keinen Rückgabewert :( Hier mein Code:

    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIEdit.au3>
    #include <IE.au3>
    #include <File.au3>

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

    _IEErrorHandlerRegister()

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

    Local $s_TempFile
    Local $sIni = ".\Templator.ini"
    Local $oIE = _IECreateEmbedded()
    Global $var = ''

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

    If Iniread($sIni, "Preferences", "Tempfile", "") == "" Then
    IniWrite($sIni, "Preferences", "Tempfile", $s_TempFile)
    $s_TempFile = _TempFile(@TempDir, "", ".html", 7)
    Else
    $s_TempFile = Iniread($sIni, "Preferences", "Tempfile", "")
    EndIf

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

    FileDelete($s_TempFile)
    FileCopy("./Examples/New.html", $s_TempFile)

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

    $guiWidth = Iniread($sIni, "Preferences", "Desktopwidth", 800)
    $guiHeight = Iniread($sIni, "Preferences", "Desktopheight", 600)

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Tabbed Notebook Dialog", $guiWidth-10, $guiHeight, 65, 0)
    $MenuDatei = GUICtrlCreateMenu("&Datei")
    $MenuDatei1 = GUICtrlCreateMenuItem("Neu", $MenuDatei)
    $MenuDatei2 = GUICtrlCreateMenuItem("Laden", $MenuDatei)
    $MenuDatei3 = GUICtrlCreateMenuItem("Speichern", $MenuDatei)
    $MenuDatei4 = GUICtrlCreateMenuItem("Speichern unter", $MenuDatei)
    $MenuDatei5 = GUICtrlCreateMenuItem("Beenden", $MenuDatei)
    $MenuAdd = GUICtrlCreateMenu("&Hinzufügen")
    $MenuAdd1 = GUICtrlCreateMenuItem("Liste", $MenuAdd)
    $MenuAdd2 = GUICtrlCreateMenuItem("Textbox", $MenuAdd)
    $MenuFormat = GUICtrlCreateMenu("&Formatieren")
    $MenuFormat1 = GUICtrlCreateMenuItem("Schriftgröße", $MenuFormat)
    $MenuFormat2 = GUICtrlCreateMenuItem("Ausrichtung", $MenuFormat)
    $MenuFormat3 = GUICtrlCreateMenuItem("Schriftfarbe", $MenuFormat)
    $MenuInfo = GUICtrlCreateMenu("&Info")
    $MenuInfo1 = GUICtrlCreateMenuItem("Hilfe", $MenuInfo)
    GUISetBkColor(0xFFFFFF)
    $PageControl1 = GUICtrlCreateTab(2, 2, $guiWidth-15, $guiHeight-50)
    $Normal = GUICtrlCreateTabItem("Normal")
    $edit_NORMAL = GUICtrlCreateEdit("", 8, 30, $guiWidth-30, $guiHeight-90)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $HTML = GUICtrlCreateTabItem("HTML")
    $edit_HTML = GUICtrlCreateEdit("", 8, 30, $guiWidth-30, $guiHeight-90)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Vorschau = GUICtrlCreateTabItem("Vorschau")
    GUICtrlCreateObj($oIE, 8, 35, $guiWidth-30, $guiHeight-90)
    $spacer = GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    _IENavigate($oIE, $s_TempFile)

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

    While 1
    $nMsg = GUIGetMsg()
    if $nMsg > 0 Then
    ;MSGBOX(0, "", $nMsg)
    EndIf

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

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case 8 ;Beenden
    Exit

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

    Case 5 ;Laden
    $var = FileOpenDialog("Datei öffnen", @DesktopDir, "Websites (*.html;*.htm)", 1)
    $newHTML = FileRead($var)
    GUICtrlSetData($edit_HTML, $newHTML)

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

    Case 6 ;Speichern
    _inArbeit()

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

    Case 7 ;Speichern unter
    $var = FileSaveDialog("Datei speichern unter", @DesktopDir, "Websites (*.html;*htm)")
    FileWrite($var&".html", GUICtrlRead($edit_HTML))

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

    Case 14 ;Ausrichtung
    $aiSel = _GUICtrlEdit_GetSel($edit_HTML) ; Ermittelt Start und Endposition der Markierung
    MSGBOX(0, "", $aiSel)

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

    Case $Normal
    _inArbeit()

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

    Case 18 ;Wechsel der Fenster
    _reloadAll()

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

    EndSwitch
    WEnd

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

    Func _reloadAll()
    FileDelete($s_TempFile)
    FileWrite($s_tempFile, GUICtrlRead($edit_HTML))
    _IEAction($oIE, "refresh")
    EndFunc

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

    Func _inArbeit()
    MSGBox(0, "Hinweis", "Diese Funktion ist noch in Arbeit")
    EndFunc

    [/autoit]

    Mit "Ausrichtung" trigger ich die Markierungs-Erkennung. Aber kein Rückgabewert. Hast du vielleicht ne Idee?


    Grüße,
    Schrubber

    • Offizieller Beitrag
    [autoit]

    _GUICtrlEdit_GetSel

    [/autoit]

    liefert ein Array zurück und keine normale Variable.

    Dein Code:

    [autoit]

    Case 14 ;Ausrichtung
    $aiSel = _GUICtrlEdit_GetSel($edit_HTML) ; Ermittelt Start und Endposition der Markierung
    MSGBOX(0, "", $aiSel)

    [/autoit]


    Solle ehe so aussehen:

    [autoit]

    Case 14 ;Ausrichtung
    $aiSel = _GUICtrlEdit_GetSel($edit_HTML) ; Ermittelt Start und Endposition der Markierung
    if isArray $aiSel then
    MSGBOX(0, "Anfang", $aiSel[0])
    MSGBOX(0, "Ende", $aiSel[1])
    EndIf

    [/autoit]