Sehr langer Text in Editbox soll nicht umbrechen - wie schaffe ich das?

  • Hallo,
    ich habe eine Textdatei, bei der alle Zeilen über 40.000 Zeichen haben. Das ist so gewollt und soll auch so bleiben. Diese Textdatei möchte ich in einer Editbox anzeigen. Nur leider schaffe ich es nicht, die Zeilen ohne Umbruch in voller Länge darzustellen. Notepad++ zeigt mir den Text ohne Umbrüche an - nur leider kann ich das Notepad++ von der GUI her nicht verändern und noch weitere Elemente hinzuprogrammieren. Also versuche ich es mit Autoit. Könnt Ihr mir bitte einen Trick verraten? Oder muß ich evtl. auf ein anderes Steuerelement ausweichen?
    Danke und Gruß
    Michael

  • [autoit]

    $hGUI = GUICreate('', 120, 120)
    $idEdit = GUICtrlCreateEdit('', 10, 10, 100, 100)
    GUISetState()

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

    GUICtrlSetData($idEdit, 'Das ist ein Beispielstring!')

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

    While GUIGetMsg() <> -3
    WEnd

    [/autoit]

    Wie du siehst macht das Edit Control dies standardmäßig von selbst. Der dazu passende Style lautet WS_HSCROLL.

  • Hallo und Danke für die Antwort - auch wenn sie mich nicht weiterbringt. Evtl. habe ich mein Problem aber auch unklar formuliert. Also probiere ich es nochmal: Ich habe einen Text, bei dem jede Zeile mehr als 40.000 Zeichen hat. Diesen Text möchte ich in der Textbox anzeigen. Es ist klar, daß diese Zeilen zu lang sind, um sie in normaler Größe vollständig darzustellen. Deshalb soll die Schrift normal groß sein, und die Zeile nur bis zum rechten Dialogfeldrand sichtbar sein. Aber ein horizontaler Scrollbalken soll angezeigt werden, damit man in den nicht sichtbaren Bereich hineinscrollen kann. Bis hierher ist das das ganz normale Standardverhalten wie bei jeder Editbox. Jetzt kommt aber das Besondere: Bei solch extrem langen Zeilen geht die Editbox her und bricht den Text nach keine Ahnung wie vielen Zeichen selbständig um. Und dieses Verhalten kann ich nicht brauchen, da es mir hiermit die Darstellung völlig zerreißt. Und daher meine Frage, wie ich der Editbox dieses Standard-Umbrech-Verhalten abgewöhnen kann, oder ob es ein alternatives Steuerelement gibt.
    Danke und Gruß
    Michael

  • Hi, ich habe auf RichEdit gewechselt. Das macht keinen Wrap. Allerdings habe ich auch hier wieder ein Problem. Per horizontalem Scrollbalken kann ich scheinbar nur bis ca. Zeichen 3.900 scrollen - obwohl die Ausgabe der Zeilenlänge bei 40.000 liegt (und die Zeile ist tatsächlich so lang). Wie kann ich also in den Bereich über 3.900 Zeichen hineinnavigieren?
    Gruß
    Michael

  • Sorry Vince, aber mit dem Problem hat das nichts zu tun.

    Das Problem befasst sich mit dem automatischen Wordwrap - deine Idee mit dem limitieren des gesamten Edit-feldes auf eine bestimmte Anzahl zeichen.

    MicErd:

    Es tut mir leid, aber mir fällt spontan keine bessere Lösung ein, als einen Slider unter deiner Editbox zu verwenden, die je nach Inhalt eine "neue" Editbox anzeigt mit dem Inhalt. Bei 40.000 Zeichen müsste man bei der Lösung - leider - 11 Editboxen, um den Inhalt normal scrollbar anzeigen zu lassen. Dazu müsste man den entsprechenden String an der entsprechenden Stelle trennen... je nach Einsatzgebiet ist diese Lösung natürlich nicht wirklich anwendbar - denn professionell sieht anders aus.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • und das notepad oder notepad++ willst du nicht in die autoit gui einbinden?

    das beispiel gibt es auf autoit.de

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <Constants.au3>

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

    Local $Bound = 0
    $hGUI = GUICreate("Embedded Notepad", 800, 600, -1, -1, $WS_SIZEBOX)
    $hNotepad = _GUICtrlNotepad_Create($hGUI, 5, 5, 788, 505)
    $hCount = GUICtrlCreateLabel("0 Zeilen im Notepad | Erste Buchstaben sind ''", 5, 515, 500, 100)
    GUISetState()

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

    While GUIGetMsg() <> -3
    $nBound = UBound(StringSplit(_GUICtrlNotepad_GetText($hNotepad), @CRLF, 3))
    If $nBound <> $Bound Then
    $Bound = $nBound
    GUICtrlSetData($hCount, $Bound & " Zeilen im Notepad | Erste Buchstaben sind '"&StringLeft(_GUICtrlNotepad_GetText($hNotepad),3)&"'")
    EndIf
    WEnd

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

    ; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

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

    Func _GUICtrlNotepad_Delete($hNote)
    Return WinClose($hNote)
    EndFunc

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

    Func _GUICtrlNotepad_Move($hNote, $iLeft, $iTop, $iWidth, $iHeight)
    _WinAPI_MoveWindow($hNote, $iLeft, $iTop, $iWidth, $iHeight, True)
    EndFunc

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

    Func _GUICtrlNotepad_SetText($hNote, $sText)
    Return ControlSetText($hNote, "", "Edit1", $sText)
    EndFunc

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

    Func _GUICtrlNotepad_GetText($hNote)
    Return ControlGetText($hNote, "", "Edit1")
    EndFunc

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

    Func _GUICtrlNotepad_Create($hParent, $iLeft, $iTop, $iWidth, $iHeight)
    $iPID = Run("C:\Program Files (x86)\Notepad++\notepad++.exe", "", @SW_MINIMIZE)
    WinWait("[class:Notepad++]")
    $hNotepad = _WinGetByPID($iPID)
    _WinAPI_SetParent($hNotepad, $hParent)
    _WinAPI_MoveWindow($hNotepad, $iLeft, $iTop, $iWidth, $iHeight, True)
    _WinAPI_SetWindowLong($hNotepad, $GWL_STYLE, $WS_POPUP + $WS_VISIBLE)
    WinSetState($hNotepad, "", @SW_SHOW)
    Return $hNotepad
    EndFunc

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

    Func _WinGetByPID($iPID) ; 0 Will Return 1 Base Array & 1 Will Return The First Window.
    Local $aError[1] = [0], $aWinList, $sReturn
    If IsString($iPID) Then
    $iPID = ProcessExists($iPID)
    EndIf
    $aWinList = WinList()
    For $A = 1 To $aWinList[0][0]
    If WinGetProcess($aWinList[$A][1]) = $iPID And BitAND(WinGetState($aWinList[$A][1]), 2) Then
    Return $aWinList[$A][1]
    $sReturn &= $aWinList[$A][1] & Chr(1)
    EndIf
    Next
    If $sReturn Then
    Return StringSplit(StringTrimRight($sReturn, 1), Chr(1))
    EndIf
    Return SetError(1, 0, $aError)
    EndFunc ;==>_WinGetByPID

    [/autoit]

    gruß gmmg