stringreplace startwert ?

  • Hallo zusammen,

    ich hab da mal ein Stringreplace problem und hoffe ihr könnt mir weiterhelfen.

    ich möchte in einem String ein bestimmtes wort ändern, aber nur dieses eine nicht mehr auch wenn es öfter vorkommt.

    Dazu verwende ich beim stringreplace die Startoption, doch leider weiß
    ich die nicht, die Startposition hab ich in einer Varibalen und die wird dann
    als suchstring interpretiert.

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #Include <GuiEdit.au3>
    #include <GuiList.au3>

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

    GuiCreate("Test-Edit", 500, 280)
    $BTN_ende = GuiCtrlCreateButton("Ende", 250, 220, 90, 20)
    $BTN_bold = GuiCtrlCreateButton("Bold", 20, 220, 50, 20)
    $INS_beschreibung = GuiCtrlCreateEdit("das ist ein Test, wobei hier im Text ein Wort markiert", 20, 40, 440, 160, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_MULTILINE, $WS_HSCROLL))

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

    GuiSetState()

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

    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE or $msg = $BTN_ende
    ExitLoop
    Case $msg = $BTN_bold
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)

    $start_replace = $a_sel[1]

    ;~ ======================================= hier unten sollte eine Zahl stehen bei $start_replace ===
    $D_sel = StringReplace(GUICtrlRead($INS_beschreibung), $start_replace,"<b>"&$c_sel&"</b>",1)

    GUICtrlSetData($INS_beschreibung, $D_sel)

    Case Else
    EndSelect
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Ich war in der Annahme, dass er den markierten Text nur mit Tags versehen möchte.
    Dann Auslesen und irgendwo wiedergeben, wo die Tags auch in Format umgesetzt werden.
    Sollte die Formatierung tatsächlich innerhalb des Edit-Ctrl gewünscht sein, vielleicht mal mit RichEdit probieren. Weiß aber nicht sicher ob es dort funktioniert.

  • Hallo und vielen Dank für die Antworten....

    also der Text wird anschließend in eine HTML-Datei geschrieben, dafür
    wollte ich noch eine Textformatierung reinpacken ähnlich wie
    hier im Forum wenn man einen Beitrag schreibt, da sieht es dann so aus

    Code
    [b]xxxxxxxx[/b]

    u.s.w.

    mit _GUICtrlEditReplaceSel( ) funktioniert es schon prima, hatte erst das
    problem das das markierte ja verschwindet wenn ich es replace.

    jetzt gehts auf jeden fall besten dank,

    achso, wie könnte man das denn machen das man eine art html vorschau bekommt oder soetwas ähnliches ??

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #Include <GuiEdit.au3>
    #include <GuiList.au3>
    #include <string.au3>
    #include <Misc.au3>

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

    Local $color

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

    GuiCreate("Test-Edit", 500, 280)
    $BTN_ende = GuiCtrlCreateButton("Ende", 380, 220, 90, 20)
    $BTN_bold = GuiCtrlCreateButton("Fett", 20, 220, 80, 20)
    GUICtrlSetFont (-1,9, 800, 0)
    $BTN_underline = GuiCtrlCreateButton("Unterstrichen", 110, 220, 80, 20)
    GUICtrlSetFont (-1,9, 400, 4)
    $BTN_kursiv = GuiCtrlCreateButton("Kursiv", 200, 220, 80, 20)
    GUICtrlSetFont (-1,9, 400, 2)
    $BTN_br = GuiCtrlCreateButton("<BR>", 20, 250, 80, 20)
    GUICtrlSetFont (-1,9, 400, 2)
    $BTN_color = GuiCtrlCreateButton("Color", 110, 250, 80, 20)

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

    $INS_beschreibung = GuiCtrlCreateEdit("das ist ein Test, wobei hier im Text ein Wort markiert wird und um dem HTML-Tag erweitert wird.", 20, 40, 440, 160)

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

    GuiSetState()

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

    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE or $msg = $BTN_ende
    ExitLoop
    Case $msg = $BTN_bold
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)

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

    Case $msg = $BTN_kursiv
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)
    _GUICtrlEditReplaceSel ( $INS_beschreibung, 1, "<I>" & $c_sel & "</I>" )
    Case $msg = $BTN_underline
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)
    _GUICtrlEditReplaceSel ( $INS_beschreibung, 1, "<U>" & $c_sel & "</U>" )
    Case $msg = $BTN_br
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)
    _GUICtrlEditReplaceSel ( $INS_beschreibung, 1, "<BR>" & $c_sel & @CRLF )

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

    Case $msg = $BTN_color
    $color = _ChooseColor (2, 0xFF0000, 2)
    If not @error Then
    $color = StringTrimLeft($color, 2)
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)
    _GUICtrlEditReplaceSel ( $INS_beschreibung, 1, "<FONT COLOR="""& $color & """>" & $c_sel & "</FONT>" )
    EndIf
    Case Else
    EndSelect
    WEnd

    [/autoit]
  • @ th.meger

    ja genau soetwas schwebt mir vor, allerdings mit einer bestimmten Fenstergröße und ohne Menü, so wie hier wenn man bei den Smilies
    auf "mehr" klickt und ein Fenster nur mit Smilies hat.

    Ich habe aber überhaupt keine Ahnung wie ich das anstellen könnte,
    geschweige wonach ich hier suchen soll.

    Bei suche nach Browser oder Explorer bekomm ich einfach zuviel.....

    kleiner denkanstoss oder evtl ein link wo ich mir das durechlesen kann wie es geht wäre super


    Besten Dank

  • Hi, ich habe mir mal Dein Beispielscript angeschaut,
    das geht schon in die richtige richtung...

    aber wenn ich das richtig verstanden habe muß ich den eingegeben Text
    erst in eine html Datei speichern um die dann im IE Browserfenster
    anzeigen zu lassen, das wäre ja dann keine VORSCHAU mehr...

    oder text in Datei speichern -> im Browser anzeigen -> bei ende Browserfenster Datei wieder löschen ?????
    oder kann ich den Text irgendwie anders an das Browserfenster senden ??

    • Offizieller Beitrag

    Du kannst schon eine echte Vorschau machen.
    Ich hab hier ein Bsp. gemacht, indem ich die Source einer Website in eine Variable einlese und anschließend in einem Browserfenster wieder ausgebe:

    [autoit]

    #include <IE.au3>
    #include <INet.au3>
    $source = _INetGetSource('http://www.autoitscript.com/autoit3/docs/history.htm')
    $oIE = _IE_Example ("basic")
    _IEPropertySet ($oIE, "innerhtml", $source)

    [/autoit]
  • mh, tut mir echt leid aber ich verstehe das nicht.

    Du liest die Quelle einer Webseite ein, also eine vorhandene Datei.
    In Deinem Fall die ......./history.htm

    ich habe aber noch keine Datei, nur den Text in meinem GuiCtrlCreateEdit,

    es sei denn ich kann folgendes benutzen:

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>
    #include <INet.au3>
    $source = GUICtrlRead($INS_beschreibung)
    $oIE = _IE_Example ("basic")
    _IEPropertySet ($oIE, "innerhtml", $source)

    [/autoit]

    das werde ich gleich mal ausprobieren.....

  • SUPER, ich danke euch vielmals.....habs jetzt verstanden.......

    hier mal das fertige script...

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #Include <GuiEdit.au3>
    #include <GuiList.au3>
    #include <string.au3>
    #include <Misc.au3>
    #include <IE.au3>
    #include <INet.au3>
    #include <Array.au3>

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

    Local $color
    $oIE = ObjCreate("Shell.Explorer.2")

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

    GuiCreate("Test-Edit", 500, 280)
    $BTN_ende = GuiCtrlCreateButton("Ende", 380, 220, 90, 20)
    $BTN_bold = GuiCtrlCreateButton("Fett", 20, 220, 80, 20)
    GUICtrlSetFont (-1,9, 800, 0)
    $BTN_underline = GuiCtrlCreateButton("Unterstrichen", 110, 220, 80, 20)
    GUICtrlSetFont (-1,9, 400, 4)
    $BTN_kursiv = GuiCtrlCreateButton("Kursiv", 200, 220, 80, 20)
    GUICtrlSetFont (-1,9, 400, 2)
    $BTN_br = GuiCtrlCreateButton("<BR>", 20, 250, 80, 20)
    GUICtrlSetFont (-1,9, 400, 2)
    $BTN_color = GuiCtrlCreateButton("Color", 110, 250, 80, 20)
    $BTN_vorschau = GuiCtrlCreateButton("Vorschau", 200, 250, 80, 20)

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

    $INS_beschreibung = GuiCtrlCreateEdit("", 20, 40, 440, 160)

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

    GuiSetState()

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

    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE or $msg = $BTN_ende
    ExitLoop
    Case $msg = $BTN_bold
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)
    _GUICtrlEditReplaceSel ( $INS_beschreibung, 1, "<B>" & $c_sel & "</B>" )
    Case $msg = $BTN_kursiv
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)
    _GUICtrlEditReplaceSel ( $INS_beschreibung, 1, "<I>" & $c_sel & "</I>" )
    Case $msg = $BTN_underline
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)
    _GUICtrlEditReplaceSel ( $INS_beschreibung, 1, "<U>" & $c_sel & "</U>" )
    Case $msg = $BTN_br
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)
    _GUICtrlEditReplaceSel ( $INS_beschreibung, 1, "<BR>" & $c_sel & @CRLF )
    Case $msg = $BTN_color
    $color = _ChooseColor (2, 0xFF0000, 2)
    If not @error Then
    $color = StringTrimLeft($color, 2)
    $a_sel = _GUICtrlEditGetSel($INS_beschreibung)
    $zahl = $a_sel[2] - $a_sel[1]
    $c_sel = StringMid(GUICtrlRead($INS_beschreibung),$a_sel[1]+1,$zahl)
    _GUICtrlEditReplaceSel ( $INS_beschreibung, 1, "<FONT COLOR=""#"& $color & """>" & $c_sel & "</FONT>" )
    EndIf

    Case $msg = $BTN_vorschau
    Global $html_pref[1]
    _ArrayAdd($html_pref, "<html><head>")
    _ArrayAdd($html_pref, "<style type=""text/css""><!--")
    _ArrayAdd($html_pref, "BODY { font-family:Tahoma; font-size:9pt; background-color:#FFF2D5; white-space:nowrap }")
    _ArrayAdd($html_pref, "table { font-size:9pt; padding:0px; white-space:nowrap } --></style>")
    _ArrayAdd($html_pref, "<title>Titel</title></head><body>")
    _ArrayAdd($html_pref, "<span style=""color:#000000;font-size:-3;font-family:Comic Sans MS;font-weight:bold"">")
    _ArrayAdd($html_pref, "<table width=""100%"" border=""0"" style=""border:solid 2px #dc143c"" cellspacing=""0"" cellpadding=""5"">")
    _ArrayAdd($html_pref, "<tr><td><table border=""0"" cellspacing=""2"" cellpadding=""1""><tr valign=""top"">")
    _ArrayAdd($html_pref, "<td>")
    _ArrayAdd($html_pref, "<table border=""0"" cellpadding=""1"" cellspacing=""2"" width=""100%"">")
    _ArrayAdd($html_pref, "<tr valign=""top"">")
    _ArrayAdd($html_pref, "<td>")
    _ArrayAdd($html_pref, "<table border=""0"" cellpadding=""1"" cellspacing=""2"" width=""100%"">")
    _ArrayAdd($html_pref, "<tr valign=""top"">")
    _ArrayAdd($html_pref, "<td width=""125"" nowrap align=""right""><b>Datum:</b></td>")
    _ArrayAdd($html_pref, "<td nowrap><!-- xDATUMx -->" & @MDAY & "." & @MON & "." & @YEAR & "<!-- xDATUMx --></td>")
    _ArrayAdd($html_pref, "</tr>")
    _ArrayAdd($html_pref, "<tr valign=""top"">")
    _ArrayAdd($html_pref, "<td width=""125"" nowrap align=""right""><b>Zeit:</b></td>")
    _ArrayAdd($html_pref, "<td nowrap><!-- xZEITx -->" & @HOUR & ":" & @MIN & "<!-- xZEITx --></td>")
    _ArrayAdd($html_pref, "</tr>")
    _ArrayAdd($html_pref, "<tr valign=""top"">")
    _ArrayAdd($html_pref, "<td width=""125"" nowrap align=""right""><b>Name:</b></td>")
    _ArrayAdd($html_pref, "<td nowrap><!-- xNAMEx -->" & @UserName & "<!-- xNAMEx --></td>")
    _ArrayAdd($html_pref, "</tr>")
    _ArrayAdd($html_pref, "<tr valign=""top"">")
    _ArrayAdd($html_pref, "<td width=""125"" nowrap align=""right""><b>Änderung:</b></td>")
    _ArrayAdd($html_pref, "<td><!-- xTEXTx -->" & GUICtrlRead($INS_beschreibung) & "<!-- xTEXTx --></td>")
    _ArrayAdd($html_pref, "</tr>")
    _ArrayAdd($html_pref, "</table>")
    _ArrayAdd($html_pref, "</div></div></td></tr></table>")
    _ArrayAdd($html_pref, "</body></html>")

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

    $array_string = _ArrayToString ( $html_pref, @TAB)
    $oIE = ObjCreate("Shell.Explorer.2")
    GUICreate ( "Vorschau", 720, 220,(@DesktopWidth-640)/2, (@DesktopHeight-580)/2 , $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS)
    $GUIActiveX = GUICtrlCreateObj ( $oIE, 10, 10 , 700 , 170 )
    $GUI_Button_Back = GuiCtrlCreateButton ("Ende", 300,190, 100, 20)
    GUISetState ()
    $source = $array_string
    $oIE.navigate("about:blank")
    _IEPropertySet ($oIE, "innerhtml", $source)
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE or $msg = $GUI_Button_Back
    ExitLoop
    EndSelect
    Wend
    GUIDelete ()
    Case Else
    EndSelect
    WEnd

    [/autoit]

    funktioniert echt gut....danke nochmal