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.
ZitatAlles anzeigenC:\Programme\Test>
Unregistration Begin
001) 001.dll ...Unregistration Successful
002) 002.dll ...Unregistration Successful
003) 003.dll ...Unregistration Successful
004) 004.dll ...Unregistration Successful
005) 005.dll ...Unregistration Successful
006) 006.dll ...Unregistration Successful
007) 007.dll ...Unregistration Successful
008') 008.dll ...Unregistration Successful
009) 101.ocx ...Unregistration Successful
010) 102.ocx ...Unregistration Successful
011) 103.ocx ...Unregistration Successful
012) 104.ocx ...Unregistration Successful
013) 105.ocx ...Unregistration Successful
014) 106.ocx ...Unregistration Successful
015) 107.ocx ...Unregistration Successful
016) 108.ocx ...Unregistration Successful
Unregistration Finished
Soviel zum Soll-Zustand, der Ist-Zustand unterscheidet sich leider dadurch, das der Zeilenumbrucht ab einer bestimmten Stelle nicht mehr ordnungsgemäß abgearbeitet wird.
ZitatAlles anzeigenC:\Programme\Test>
Unregistration Begin
001) 001.dll ...Unregistration Successful
002) 002.dll ...Unregistration Successful
003) 003.dll ...Unregistration Successful
004) 004.dll ...Unregistration Successful
005) 005.dll ...Unregistration Successful
006) 006.dll ...Unregistration Successful
007) 007.dll ...Unregistration Successful
008') 008.dll ...Unregistration Successful
009) 101.ocx ...Unregistration Successful
010) 102.ocx ...Unregistration Successful
011) 103.ocx ...Unregistration Successful
012) 104.ocx ...Unregistration Successful
013) 105.ocx ...Unregistration Successful ...Unregistration Successful ...Unregistration Successful
Unregistration FinishedUnregistration Successful...
016) 108.ocx
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:
Case 13
GUICtrlSetStyle ($edtBox, BitOR ($WS_VSCROLL, $ES_READONLY, $ES_AUTOVSCROLL))
Ü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:
GUISetState(@SW_SHOW)
[/autoit]
Durch
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