Drei Probleme mit der Editbox

  • Tag Ihr Fachmänner und natürlich auch -frauen,

    ich habe wie es der Threadtitel schon zeigt, diverse Probleme beim Umgang mit der Editbox in meinem allerersten AutoIt3-Script. Welche Probleme ich damit genau habe erläuter ich weiter unten, zuvor beschreibe ich kurz was mein Script genau machen soll.

    Eigentlich ist es nicht besonders wildes oder aufregendes, es soll nur OCXe und DLLs in einem vom User vorgegebenen Verzeichniss registrieren oder deregistrieren, natürlich mit GUI, sonst hätte ich auch schnell ein Batch- oder VBscript schreiben können. Den Pfad kann der User via Textbox und/oder OpenFolderDialog auswählen.
    Darunter befinden sich zwei Buttons welche dieselbe Funktion aufrufen, je nach übergebenen Parameter entweder zum registrieren oder deregistrieren der Dateien.
    Unter den beiden Buttons befindet sich nun mein Sorgenkind.

    Die Probleme:
    1. Zeilenumbruch nach dem nachträglichen hinzufügen eines Scrollbalkens.
    2. Fokus oder Cursor löschen.
    3. Automatisches mitscrollen des Balkens und der Editbox.


    Problem 1:
    Die Editbox wird in Zeile 67 nur mit dem Style "$ES_READONLY" instanziert. Der User soll also nicht die Möglichkeit haben irgendwas selber in die Box, welche ein an die CMD angelehntes Designe hat, zu schreiben.
    Dort soll nämlich nur der Pfad, die Dateien und Erfolg des Vorgangs stehen.

    Soviel zum Soll-Zustand, der Ist-Zustand unterscheidet sich leider dadurch, das der Zeilenumbrucht ab einer bestimmten Stelle nicht mehr ordnungsgemäß abgearbeitet wird.

    Dies ist genau die Stelle, an der ich der Editbox einen Scrollbalken hinzufüge da sie größenbedingt nicht mehr als 14 Zeilen fassen kann.
    Zeile 223-224 im Programmcode:

    [autoit]

    Case 13
    GUICtrlSetStyle ($edtBox, BitOR ($WS_VSCROLL, $ES_READONLY, $ES_AUTOVSCROLL))

    [/autoit]


    Überprüft wird dabei die Zählervariable $I der For-Schleife mittels der ich die zu bearbeitenden Dateien durchlaufe, welche ich als Array von anderen Funktion erhalte.
    Der zuerscheinende Text wird dabei immer direkt an den bestehenden Text in der Editbox angehangen und nicht zu erst komplett in einen String ausgelesen, bearbeitet und dann wieder eingespeist. Wobei letztere Vorgehensweise eigenartigerweise nicht zu diesem Problem geführt hat, von mir allerdings als zu unelegant empfunden wurde, und ich doch sehr stark davon ausgehe das es auch so gehen muss/müsste.
    Erstecken tut sich die Funktion von Zeile 181 bis 251.

    Problem 2:
    Wenn der User während des Registrier- oder Deregistriervorgangs in eine Zeile der Editbox klickt, bekommt diese trotz der "ReadOnly" Einstellung dennoch einen Fokus oder Cursor, und der Text wird nicht mehr an das Ende der letzten Zeile gesetzt, sondern an die Prosition des Cursors. Ein nachträgliches Disablen der Editbox hinter oder davor von:

    [autoit]

    GUISetState(@SW_SHOW)

    [/autoit]


    Durch

    [autoit]

    GUISetState(@SW_DISABLE, $edtBox)

    [/autoit]


    brachte auch nichts.

    Problem 3:
    Bietet mir die Editbox nicht irgendeine Option an, mittels der die Editbox automatisch immer in die neu hinzugefügte Zeile mitscrollt?Im Anhang befindet sich mein Script samt Testordner mit OCXen und DLLs .
    Keine Angst, die OCXe und DLLs sind nur leere Textdateien bei denen ich nur die Endung verändert habe, damit ich testen kann.
    Wäre wirklich super wenn ihr mir helfen könntet oder einen Hinweis geben könntet. :)
    Vielen Dank schonmal. :)

    PS: Ich weiss das dass Script noch ein paar andere Macken hat, die kann ich aber wohl selber beheben, im Gegensatz zu den drei hier geschilderten Problemen.

    PPS: Gecodet wird das Script mit der Version 3.3.0.0 von AutoIt3

  • Hi,
    Zu1: Versuche mal als Style
    BitOR ($WS_VSCROLL, $ES_READONLY, $ES_AUTOVSCROLL, $WS_HSCROLL, $ES_WANTRETURN, $ES_AUTOHSCROLL)
    oder
    BitOR ($WS_VSCROLL, $ES_READONLY, $ES_AUTOVSCROLL, $ES_WANTRETURN)

    Zu2: ReadOnly heißt nur, dass der benutzer keinen Text eingeben kann. Er kann trotzdem Markieren und kopieren. Was ist daran so schlimm?

    Zu3: verwende zum anfügen von neuem Text  _GUICtrlEdit_AppendText Das hängt den neuen Text an den alten an und scrollt zum Ende.

    //Edit: Damit du erfolg oder miserfolg abfragen kannst, musst du RunWait verwenden.

    [autoit]

    $ergebnis = RunWait(@SystemDir & "\regsvr32 " $Parameter)
    If @error Then
    ; regsvr32 wurde nicht gefunden
    ElseIf $ergebnis = 0
    ; erfolgreich registriert
    Else
    ; Ein Fehler in regsvr32 ist aufgetreten
    EndIf

    [/autoit]

    Einmal editiert, zuletzt von progandy (18. April 2009 um 18:08)

  • Erst mal ein großes Lob! Ich habe selten so ein deutlich beschriebenes Problem und so ein gut auskommentiertes Script hier in diesem Forum erlebt ;)

    So nach dem erstem durchgehen kann ich dir schonmal einen Tipp geben:
    Statt $ES_READONLY, wäre es hier besser die editbox zu disablen ->
    GuiCtrlSetState(-1,$GUI_DISABLE)

  • Ich finde, disable ist nicht nötig. Dadurch wird auch der Text schwerer lesbar. Wenn man
    _GUICtrlEdit_AppendText verwendet, sollte es nichts ausmachen, wenn der Anwender in die Editbox klicken kann.

  • Hmm ich finde, das es geschmackssache ist... Disablen ist unkomplizierter, da es ja sowieso egal ist ob der User nun, die Box klicken oder nicht klicken kann...Tendiere aber trotzdem eher zu Append-Line-Variante :D
    Und mir ist noch etwas aufgefallen: Dein Script bricht einfach ab, wenn keine dll-Dateien in einem Ordner sind, da das Array strarFiles dann leer ist.. Deswegen würde ich vor dem Redimen von strarFiles in der Funktion FindItem checken ob $intBound 0 ist...
    Also ungefähr so:

    [autoit]

    If $intBound = 0 Then
    GuiCtrlSetData($edtBox, GuiCtrlRead($edtbox) & @CRLF & "No Files found!");bzw Append Line
    Return
    EndIf

    [/autoit]

    Ich weiß is nur ne kleinigkeit.. :P

    Einmal editiert, zuletzt von ChaosKeks (18. April 2009 um 18:27)

  • Zunächst einmal ein riesiges Danke für die schnelle und kompetente Hilfe die ich hier von euch beiden erhalten habe. Habe eure Vorschläge zur Fehlerbehebung und Verbesserung des Scripts bereits implementiert, durchgetest und für Top befunden. Habe mich im übrigen für die Methode von Progandy entschieden, schien mir fixer zu implementieren.
    Vielen Dank nochmal, habt mir wirklich sehr geholfen.:)

    @ChaosKeks
    Vielen Dank für das Lob, aber zur Verteidigung der Anderen sollte ich anmerken, das ich vom Fach bin. Auch wenn ich aufgrund meiner Ausbildung besser im programmtesten als im coden bin. ;)

    PS: Bei Interesse kann ich das fertige Script hier erneut hochladen. Vielleicht gibt es hier ja noch den ein oder anderen weiteren Programmierer oder Azubi der ständig neue OCXe und/oder DLLs für Softwaretests einspielen muss.

  • Tag Freunde,

    hier bin ich wieder, aber nicht ohne Problem im Gepäck. ;)

    Mein Script funktionert nun fast entsprechend meinen Vorstellung, und besitzt auch die gewünschten Funktionalitäten. Nur stösst mir die Editbox wieder bitter auf. Dabei geht es um die Füllmenge der Zeichen respektiv der Zeilen.

    Bis zu einem gewissen punkt funktioniert das ganze einwandfrei, doch sobald eine gewisse Menge an Zeilen erreicht wurden ist, verweigert mit die Editbox das weitere hinzufügen. Dabei ist es allerdings nicht so, dass die Zeile komplett verweigert werden würde, sondern das sie mitten drin abbricht. Zeilen 495 bis 498 sind noch vollkommen inordnung, die Rauten sind OCX und DLL namen.

    Zitat

    495) #################.ocx..........27.09.2007...11:31:24
    496) #################.ocx..........27.09.2007...11:31:24
    497) ##############.ocx.............27.09.2007...11:31:24
    498')#################.ocx..........27.09.2007...11:31:24
    499) #####

    Ich habe meinem zu Eingangs geposteten Code eigentlich relativ wenig hinzugefügt. Nur eine Schleife mit der ich den längsten String ermittel und mir die Menge an Zeichen aus denen er besteht, zurück gibt. Danach folgt die reguläre abarbeiten und ein weitere Passage in der ich den Strings die kleiner sind als der größte die Differenz in Punkten mitgebe, hat und soll auch nur den Effekt haben die Meldungen schön untereinander zubringen.

    Ich habe hier natürlich auch die Suchfunktion benutzt und bin auf einen Beitrag gestoßen in welchem dazu geraten wurde das Limit der Editbox mittels der unten gezeigten Funktion hochzusetzten.

    [autoit]

    GUICtrlSetLimit (-1, 99999999999999999999999999999999999999999999999)

    [/autoit]


    Allerdings scheint das bei mir nicht zu funktionieren. Auch wurde in diesem Thema erwähnt das selbst 800 Zeilen kein Problem für die Editbox sein, nur wie krieg ich meine Editbox dazu?

    Hier einmal die Funktion in welcher die Editbox beschriftet wird, und im Anhang natürlich nochmal das Script samt Test Dateien.

    [autoit]

    Func RegAndUnreg ($binMode, $strPath)
    #cs---------------Beschreibung---------------
    Zweck: 1. Registriert oder Deregistriert alle OCXe oder DLLs die sich am Ende des angegebenen Pfades befinden.
    2. Trägt die Dateien in die Editbox ein und versieht sie mit einer Meldung am Ende.
    ---------------------------------------------
    Startparameter: $binMode: Enthält entweder den Wert 0 für Registrieren oder 1 für Deregistrieren.
    $strPath: Enthält den Pfad an dessen Ende die zu Re- oder Deregistrierenden OCXe oder DLLs liegen.
    ---------------------------------------------
    Rückgabewert: -
    ---------------------------------------------
    Aufgerufen von: btnRegClick und btnUnregClick
    ---------------------------------------------
    Ruft auf: FindItem mit $strPath
    #ce---------------Beschreibung---------------
    Dim $booResult ;Boolean - Gibt an ob die Re- oder Deregistrierung erfolgreicht war.
    Dim $strResult ;String - Enthält je nach $booResult entwerder "Successful" oder "Failed".
    Dim $strMode ;String - Enthält je nach "$binMode" entweder "Registration" oder "Unregistration" enthält.
    Dim $strNull ;String - Enthält je nach "$I" entweder Zwei Nullen, eine Null oder nichts.
    Dim $strRegParam ;String - Enthält je nach "$binMode" die Startparameter und Dateien für die Regsvr32.exe.
    Dim $strPathLine ;String - Enthält den ausgelesenen Pfad der Editbox.
    Dim $strLine ;String - Enthält die zu einfügende Zeile der Editbox.
    Dim $strDate ;String - Enthält das Erstelldatum der aktuellen Datei.
    Dim $strYear ;String - Enthält das Jahr des Erstelldatums der aktuellen Datei.
    Dim $strMonth ;String - Enthält den Monat des Erstelldatums der aktuellen Datei.
    Dim $strDay ;String - Enthält den Tag des Erstelldatums der aktuellen Datei.
    Dim $strHour ;String - Enthält die Stunde des Erstelldatums der aktuellen Datei.
    Dim $strMinute ;String - Enthält die Minute des Erstelldatums der aktuellen Datei.
    Dim $strSeconde ;String - Enthält die Sekunde des Erstelldatums der aktuellen Datei.
    Dim $strarFiles[1] ;String-Array - Enthält die zu Re- oder Deregistrierenden OCXe und/oder Dlls.
    Dim $strarFailed [1] ;String-Array - Enthält die Namen der Files dessen Reg- oder Deregistrierungen fehlgeschlagen sind.
    Dim $intBound ;Integer - Enthält die Anzahl an Elementen des Arrays "$strarFiles" respektiv, die Anzahl der Dateien.
    Dim $intFailBound ;Integer - Enthält die Anzahl an Elementen des Arrays "$strarFailed" respektiv, die Anzahl der Dateien.
    Dim $intFailureBound ;Integer - Enthält die Anzahl an vom Regsvr32 verursachten Fehlern.
    Dim $intValueOfFail ;Integer - Enthält die Menge an fehlgeschlagenen Vorgängen.
    Dim $intFailValue ;Integer - Enthält die Menge an fehlgeschlagenen Vorgängen.
    Dim $intMaxNameLenght ;Integer - Enthält die Menge der Buchstaben des längsten Dateinamens.
    Dim $intCurrentNameLenght ;Integer - Enthält die Menge der Buchstaben des aktuellen Dateinamens.
    Dim $intValueOfSpace ;Integer - Enthält die Mende an benötigten Leerzeichen.
    Dim $I ;Integer - Zähler für die For-Schleife welche den Array "$strarFiles" durchläuft.
    Dim $J ;Integer - Zähler für die For-Schleife welche zum erzeugen der Punkte notwendig ist.
    Const $Dots = 3 ;Integer - Konsante welche die Anzahl der Punkte enthält.

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

    $strarFiles = Call ("FindItem", $strPath) ;Funktionsaufruf, gibt einen Array zurück der alle Dateien des Typs OCX oder DLL enthält.
    If IsArray ($strarFiles) Then ;Wenn die Rückgabe von "FindItem" ein Array ist.
    $intMaxNameLenght = 0 ;Setzt die Maxlänge auf null
    $intValueOfFail = 0 ;Setzt die erfolglosen Re- oder Deregeistrationen auf null
    $intFailureBound = 0 ;Setzt die Regsvr32-Fehler auf null
    $intBound = UBound ($strarFiles, 1) ;Anzahl der zurückgegebenen Dateien, für die Schleife wichtig.
    For $I = 0 To $intBound - 1 Step 1 ;Schleife um alle Dateien zu durchlaufen.
    If StringLen ($strarFiles[$I]) > $intMaxNameLenght Then ;$intMaxNameLenght wird erst gefüllt wenn der Dateiname der aktuellen Datei
    $intMaxNameLenght = StringLen ($strarFiles[$I]) ;länger ist als der Dateiname der bereits drin ist.
    EndIf
    Next
    Select ;Wählt den Modus aus und gibt ihn als String zurück.
    Case $binMode = $Reg
    $strMode = "Registration"
    Case $binMode = $Unreg
    $strMode = "Unregistration"
    Case $binMode = $Show
    $strMode = "Show"
    EndSelect
    $strLine = " " & $intBound & " Files" & @CRLF & $strMode & " Files Begin" & @CRLF & @TAB & "Nr. " & "Filename" ;Schreibt den Anfang in den String für die Editbox.
    $intCurrentNameLenght = 8 ;Länge des Anfangs.
    $intValueOfSpace = $intMaxNameLenght - $intCurrentNameLenght ;Berechnung der benötigten Punkte.
    For $J = 0 To $intValueOfSpace Step 1 ;Schleife umd die Punkte anzuhängen.
    $strLine = $strLine & "."
    Next
    $strLine = $strLine & "..." & $strResult ;Abschließende Punkte werden angehangen.
    If $binMode = $Show Then ;Auswahl des Modus.
    $strLine = $strLine & "Date of Construction"
    Else
    $strLine = $strLine & "State"
    EndIf
    _GUICtrlEdit_AppendText ($edtBox, $strLine) ;Schreibt den String in die Editbox.
    For $I = 0 TO $intBound Step 1 ;Schleife welche so oft durchläuft wie es Dateien im Array gibt.
    Switch $I ;Abfrage den Wert des Schleifendurchgangs prüft.
    Case $intBound ;Wenn der Durchlauf die Anzahl der Dateien erreicht hat, Schleife abbrechen.
    ExitLoop
    Case 0 To 8 ;Wenn sich der Durchlauf zwischen 0 und 8 befindet, wird der Nummer zwei nullen voran gestellt.
    $strNull = "00"
    Case 9 To 98 ;Wenn sich der Durchlauf zwischen 9 und 98 befindet, wird der Nummer eine nullen voran gestellt.
    $strNull = "0"
    Case 100 To 999 ;Wenn sich der Durchlauf zwischen 100 und 998 befindet, wird der Nummer keine null voran gestellt.
    $strNull = ""
    EndSwitch
    $strLine = @CRLF & @TAB & $strNull & $I + 1 & ") " & $strarFiles[$I]
    GUICtrlSetData ($lblProgress, $I + 1 & " / " & $intBound) ;Schreibt die Nummer der derzeitigen Datei und die Anzahl der Dateien ins Label.
    GUICtrlSetData ($ProgressBar, (100 * ($I + 1)) / $intBound) ;Berechnet den Fortschritt des Vorgangs und gibt diesen in die Progressbar.
    GUICtrlSetData ($lblPercent, GUICtrlRead ($ProgressBar) & "%") ;Liest den Fortschritt der Progressbar aus und gibt ihn als Prozent an ds Label.
    If $binMode = $Show Then ;Wenn der Modus "Show" ist.
    $strDate = FileGetTime ($strPath & $strarFiles, 1, 1) ;Extrahiert das Erstelldatum der Datei.
    $strDay = StringMid ($strDate, 7, 2) ;Extrahiert den Tag aus dem Erstelldatum.
    $strMonth = StringMid ($strDate, 5, 2) ;Extrahiert den Monat aus dem Erstelldatum.
    $strYear = StringMid ($strDate, 1, 4) ;Extrahiert das Jahr aus dem Erstelldatum.
    $strHour = StringMid ($strDate, 9, 2) ;Extrahiert die Stunde aus dem Erstelldatum.
    $strMinute = StringMid ($strDate, 11, 2) ;Extrahiert die Minute aus dem Erstelldatum.
    $strSeconde = StringMid ($strDate, 13, 2) ;Extrahiert die Sekunde aus dem Erstelldatum.
    $strResult = $strDay & "." & $strMonth & "." & $strYear & "..." & $strHour & ":" & $strMinute & ":" & $strSeconde ;Fügt das Datum neuformatiert zusammen.
    Else
    $strRegParam = " -s "
    If $binMode = $Unreg Then ;Abfrage welche prüf ob Registriert oder Deregistriert werden soll, um die Parameter festzulegen.
    $strRegParam = $strRegParam & " -u "
    EndIf
    $strRegParam = $strRegParam & $strPath & "\" & $strarFiles[$I] ;Führt die den Pfad zum Regserver, die Parameter und den Dateipfad zusammen.
    $booResult = RunWait (@SystemDir & "\Regsvr32.exe" & $strRegParam) ;Aufruf der Regsvr32.exe inkl. Parameter und Datei.
    If @error Then ;Abfrage um den Erfolg der Re- oder Deregistrierung zu ermitteln.
    $strResult = "Regsvr32 Failure" ;Regsvr32 hat einen Fehler
    $intFailureBound = $intFailureBound + 1 ;Zählt die Fehler des Regservers hoch.
    $strarFailed [UBound ($strarFailed, 1) - 1] = $strNull & $I + 1 ;Name der Datei wird an den Fehlerarray übergeben.
    ReDim $strarFailed [UBound ($strarFailed, 1) + 1] ;Fehlerarray wird um ein Element erhöht.
    ElseIf $booResult = 0 Then
    $strResult = "Successful" ;Reg- und/oder Deregistration war erfolgreich.
    Else
    $strResult = "Failed" ;Reg- und/oder Deregistration war erfolglos.
    $intFailBound = $intFailBound + 1
    $strarFailed [UBound ($strarFailed, 1) - 1] = $strNull & $I + 1 ;Name der Datei wird an den Fehlerarray übergeben.
    ReDim $strarFailed [UBound ($strarFailed, 1) + 1] ;Fehlerarray wird um ein Element erhöht.
    EndIf
    EndIf
    $intCurrentNameLenght = StringLen ($strarFiles[$I]) ;Ermittelt die Länge des aktuellen Dateinamens.
    $intValueOfSpace = $intMaxNameLenght - $intCurrentNameLenght ;Berechnet wieviel Punkte benötigt werden.
    For $J = 0 To $intValueOfSpace Step 1 ;Schleife umd den String mit Punkten zu füllen.
    $strLine = $strLine & "."
    Next
    $strLine = $strLine & "..." & $strResult ;Abschließende Punkte.
    _GUICtrlEdit_AppendText ($edtBox, $strLine) ;String wird die Editbox geschrieben.
    $strNull = "" ;Die Variable "$strNull" wird mit NULL gefüllt.
    Next
    If $binMode > $Show Then ;Wenn der Modus Reg oder Unreg ist...
    If $intFailBound > 1 or $intFailureBound > 1 Then ;Prüfung ob Fehler vorhanden sind.
    If $intFailureBound > 1 Then ;Sind Regsvr32 Fehler vorhanden?
    $intFailValue = $intFailValue + $intFailureBound ;Anzahl der gesamten Fehler wird erhöht.
    ElseIf $intFailBound > 1 Then ;Sind reg- oder deregistrationsfehler vorhanden?
    $intFailValue = $intFailValue + $intFailBound ;Anzahl der gesamten Fehler wird erhöht.
    EndIf
    $strLine = @CRLF & @CRLF & "Successfully: " & @TAB & $intBound - $intFailBound ;String für die Editbox wird präpariert, gibt die erfolgreichen reg- und/oder deregistrationen aus.
    If $intFailBound > 1 Then ;Wenn Registrationsfehler...
    $strLine = $strLine & @CRLF & "Failed: " & @TAB & $intFailBound & @CRLF ;String für die Editbox wird präpariert, gibt die fehlgeschlagenen reg- und/oder deregistrationen aus.
    ElseIf $intFailureBound > 1 Then ;Wenn Regserverfehler...
    $strLine = $strLine & @CRLF & "Failure: " & @TAB & $intFailureBound & @CRLF ;String für die Editbox wird präpariert, gibt die Regsvr32 Fehler aus.
    EndIf
    If $intFailBound > 1 Then ;Wenn Fehler aufgetreten ist...
    $strLine = $strLine & "Files: " & @TAB & @TAB ;präpariert den String für die Editbox.
    For $J = 0 To $intFailBound - 1 Step 1
    If Mod ($J+1, 3) = 0 Then ;Schleife um die Dateien bei denen ein Fehler vorliegt auszugeben.
    $strLine = $strLine & $strarFailed[$J] & @CRLF & @TAB & @TAB
    Else
    $strLine = $strLine & $strarFailed[$J] & ", "
    EndIf
    Next
    $strLine = StringTrimRight ($strLine, 2) ;Abschließendes Komma wird entfernt.
    EndIf
    Else
    $strLine = @CRLF & "Successfully: " & @TAB & $intBound ;Wenn kein Fehler aufgetreten ist.
    EndIf
    EndIf
    _GUICtrlEdit_AppendText ($edtBox, $strLine & @CRLF & $strMode & " Files Finished" & @CRLF) ;Vorgang ist beendet.
    Else
    _GUICtrlEdit_AppendText ($edtBox, @CRLF & "No Files found!" & @CRLF) ;Wenn keine Dateien gefunden werden.
    EndIf

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

    EndFunc

    [/autoit]

    Wäre wirklich toll wenn ihr mir nocheinmal so toll wie beim letzten mal mit Rat und Tat helfen könntet. Danke :)

  • Lol das ist mir ein Rätsel... beim ersten mal testen bin ich auch so an die 400 zeilen gekommen, bis es dann nicht mehr ging.. dann wollte ich einfach mal festtellen, ob man irgendnen workaround findet, wenn die box voll ist: Also hab ich mit GuiRegisterMsg versucht, mir anzuzeigen wann das editfeld voll ist... und jetzt bekomme ich gut 5000+ Zeilen ohne Fehler 8|

    [autoit]

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    Local $hWndFrom, $iCode,$hwndedit1
    If Not IsHWnd($edtbox) Then $hWndEdit1 = GUICtrlGetHandle($edtbox)
    $hWndFrom = $lParam
    $iCode = _WinAPI_HiWord ($wParam)

    Switch $hWndFrom
    Case $edtbox, $hWndEdit1
    Switch $iCode
    Case $EN_MAXTEXT
    GuiCtrlSetData($edtbox, "")
    ENDSWITCH
    EndSwitch
    EndFunc

    [/autoit]

    Probiers einfach mal... Solange es geht ist es mir egal ob ich nur noch Bahnhof verstehe :D

    EDIT: Der Fotobeweis ->
    [Blockierte Grafik: http://img3.imagebanana.com/img/7817ayui/Fotobeweis.gif
    (Nach 7500 Zeilen hatte ich keinen bock mehr :P )

    Einmal editiert, zuletzt von ChaosKeks (21. April 2009 um 16:21)

    • Offizieller Beitrag

    Das ist ja ein merkwürdiges Phänomen. Es gab früher mal eine Beschränkung auf 30.000 Zeichen. Das wurde offenbar geändert.
    Jetzt gibt es eine Beschränkung auf 260.091 Zeichen und man kann diese nicht mehr erweitern. ?(
    Hier ein Testscript:

    [autoit]


    GUICreate('Edit-Test', 640, 480)
    Global $sText
    For $i = 1 To 260091 ; 260092 geht nicht mehr
    $sText &= 'a'
    Next
    $hEdit = GUICtrlCreateEdit($sText, 5, 5, 630, 470)
    GUICtrlSetLimit(-1, 500000) ; keine Wirkung
    GUISetState()
    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • Es wird noch eigenartiger... Es sind momentan an die 600.000 Zeichen in meinem Edit =P
    (Hab ausgerechnet wie oft, ich Registriert habe und die Zeichen für eine Registrierung*Die Anzahl der Registrierungen gerechnet: Ergebnis = 694046...Fehlerfrei)