_GUICtrlListView_AddColumn hinzu, weil ich deren Breite dann gleich mit angeben kann.
Was ist das für eine Logik?
Das erledigt man doch beim Erstellen mit:
_GUICtrlListView_AddColumn hinzu, weil ich deren Breite dann gleich mit angeben kann.
Was ist das für eine Logik?
Das erledigt man doch beim Erstellen mit:
Die technischen Spezifikationen dieses Containers findest du hier. Also leg los.
Wenn man für seine PlugIns oder auch generell für seine Änderungen die Properties in einer eigenen Datei speichern möchte muß man einiges beachten.
Daraus resultiert, man sollte eigene Properties im AppData-Pfad speichern. Dadurch kann ich dann auch den Aufruf in der SciTEUser.properties unterbringen. Diese wird bei einem Update glücklicherweise nicht angefasst.
Da der AppData-Pfad von Windows etwas versteckt wird, empfehle ich die eigenen Propertie-Dateien in einem Ordner des USER-Verzeichnisses abzulegen und von dort in das AppData-Verzeichnis per Hardlink zu verlinken.
; -- *.properties Datei im Userpfad, Properties-Ordner erstellen
; -- z.B.
$sPathPropsUser = @UserProfileDir & '\Properties.User\sample.properties'
; -- Die Datei per Hardlink in den Ordner mit der "SciTEUser.properties" verlinken
$sPathAppDataLocal = @UserProfileDir & '\AppData\Local\AutoIt v3\SciTE'
FileCreateNTFSLink($sPathPropsUser, $sPathAppDataLocal & '\sample.properties')
; -- das Laden der *.properties kann jetzt innerhalb der "SciTEUser.properties" erfolgen
; -- da aus demselben Ordner geladen wird, ist keine weitere Pfadangabe erforderlich
; -- die Endung (.properties) wird beim Import nicht angegeben
import sample
Alles anzeigen
Nun kann man problemlos updaten und sofort mit all den eigenen Änderungen wieder loslegen.
Vorteilhaft ist dies auch um etwas Ordnung in die SciTEUser.properties zu bekommen. Ich habe dort z.B. User-Settings für Lua, Python, SQL etc.. Die habe ich jetzt jeweils ausgelagert in eine eigene Datei (lua_user.properties, python_user.properties ...) und lade diese Dateien mit import am Beginn der SciTEUser.properties. Somit haben sie auch die gleiche Priorität wie diese.
Du mußt das Listview erzeugen bevor du die GUI auf SHOW setzt. Andere Variante wäre, nach dem Erstellen des LV ein Neuzeichnen zu erzwingen (_WinAPI_RedrawWindow).
Dein GUICtrlCreateListView("", 2, 2, 796, 300) ist beim besten Willen noch kein LV, das entsteht erst duch das Hinzufügen der Spalten (warum erstellst du diese nicht sofort?).
und zwar mit "StringRegExpReplace"
Das wäre in dem Fall mit Kanonen auf Spatzen schießen.
Hier reicht doch StringReplace völlig aus.
$sSearch = '<screenmode default="true">DESKTOP</screenmode>'
$sReplace = '<screenmode>10192001080060.00000pstd</screenmode>'
$sRead = FileRead('XML-Datei')
If StringInStr($sRead, $sSearch) Then
$fH = FileOpen('XML-Datei', 2)
FileWrite($fH, StringReplace($sRead, $sSearch, $sReplace))
FileClose($fH)
EndIf
Ich habe die portable Version geladen - schon beim DL schlägt der Malware-Scanner an.
dem kann ich Greenfish Icon Editor Pro empfehlen.
Was mich jetzt etwas verwundert, dass ein OpenSource-Programm Adware auf den PC schaufelt.
Aus meiner Sicht nicht empfehlenswert.
Naja, bin mir nicht sicher ob dies wirklich so gewollt ist, denn auf der Webseite sowie auch im Source-Code werden die Umlaute korrekt dargestellt.
Die Website ist wahrscheinlich in UTF8 codiert und SciTE? - Genau: Win1252.
Beide Codes können zwar Umlaute/Sonderzeichen darstellen, aber wenn du in UTF8 geschriebene Umlaute in einer Win1252-Umgebung ausgibst, siehst du nur noch Fragezeichen, weil die Zeichen nicht zugeordnet werden können.
Das ist das leidige Problem, dass es zwar UTF8 schon eine gefühlte Ewigkeit gibt, aber es bis heute noch nicht Standard ist.
Du kannst ja mal in SciTE über <Datei><Kodierung> auf UTF8 umschalten. Wenn du dann die Ausgaben lesen kannst, weißt du was zu tun ist.
Nach langem mal wieder was zum Thema Array. (Nur was Kleines)
In manchen Sprachen gibt es RemoveIf als native Funktion, hier mal für AutoIt anzuwenden auf 1D-Arrays.
;~ ============================================================ Bsp. ===
#include <Array.au3>
Func _NotEven($a)
Return Mod($a, 2)
EndFunc
$NotEven = _NotEven
Local $a[] = [1,2,3,4,5,6,7,8,9,10]
$aEven = _Array_RemoveIf($NotEven, $a)
_ArrayDisplay($aEven)
;~ ====================================================================
; #FUNCTION# ====================================================================================================================
; Name ..........: _Array_RemoveIf
; Description ...:
; Syntax ........: _Array_RemoveIf($_ConditionFunc, $_Array[, $_iStart = 0])
; Parameters ....: $_ConditionFunc - Funktion die die Arrayelemente auf eine Bedingung prüft
; $_Array - das Array mit allen zu prüfenden Elementen
; $_iStart - [optional] Der Startindex. Standard ist 0.
; Return values .: Erfolg - Array ohne die Elemente, auf die die Bedingung zutrifft
; Fehler - das Ursprungsarray, @error 1
; Author ........: BugFix ( autoit@bug-fix.info )
; ===============================================================================================================================
Func _Array_RemoveIf($_ConditionFunc, $_Array, $_iStart=0)
If Not IsFunc($_ConditionFunc) Then Return SetError(1,0,$_Array)
Local $aNew[UBound($_Array)], $n = $_iStart
If $_iStart > 0 Then
For $i = 0 To $_iStart -1
$aNew[$i] = $_Array[$i]
Next
EndIf
For $i = $_iStart To UBound($_Array) -1
If Not $_ConditionFunc($_Array[$i]) Then
$aNew[$n] = $_Array[$i]
$n += 1
EndIf
Next
ReDim $aNew[($_iStart = 0 ? ($n > $_iStart ? $n : 1) : ($n > $_iStart ? $n : $_iStart))]
Return $aNew
EndFunc
Alles anzeigen
Wieso klatscht du ihm jetzt was Fertiges hin? Wie soll man dabei lernen?
Meine Hinweise enthielten alles Wesentliche um den Code zu erstellen. Bedenkt bei eurer Hilfe, dass nur Hilfe zur Selbsthilfe was bringt.
Das andere heißt "Arm-aus-der-Sonne-legen" und wird nicht gewünscht. ![]()
Ich kann mich erinnern, dass ich solch ein Szenario vor Jahren mit irgendeinem Verwaltungsprogramm hatte. Da war kein gescheiter Zugriff, ich konnte nur die Menüleiste referenzieren. Aber die Untermenüs wurden erst zur Laufzeit generiert. Dadurch hing die Instance davon ab, welches Menü in welcher Reihenfolge erstmalig geöffnet wurde.
Somit ist es durchaus denkbar, dass der TE ein ähnliches Problem hat.
Wie geht man damit um? - Nun, man sucht nach eindeutigen Identifizierungsmerkmalen (z.B. Fenstertitel + Fenstertext) um darüber zu adressieren. Wenn Fenster erkannt werden, was bei dir der Fall ist, dann gibt es auch immer eine Möglichkeit diese zweifelsfrei zu identifizieren, selbst wenn die Instance von Elementen wechselt. Wenn du mehrere gleichartige Controls hast, dann kannst du diese per Enumeration auflisten und prüfen ob bei jedem Start gleiche Eigenschaften vorhanden sind. Mußt du halt etwas probieren.
Entschuldigung für meine Off-Topic-Frage, aber kann man bei GUICtrlCreateDate auch einstellen, dass bei Benutzung der UpDown-Controls mit den Sekunden begonnen wird? Standardmässig gehts nämlich bei Stunden los.
Wenn es per Flag nicht geht (kann es gerade nicht prüfen), bleibt die Variante die Up/Down Message abzufangen und die Werte selbst zu setzen.
Eventuell kannst du auch den Fokus verschieben. Zwischen den Positionen kannst du mit Shift+Pfeil wechseln.
Dann solltest du schon genauer erklären, was du meinst. Ich hatte es so verstanden, dass du die Errorausgabe ändern willst, tatsächlich geht es dir aber darum, dass überlange Zeilen automatisch umgebrochen werden in der Konsole (Autowrap).
Dazu öffne die SciTEUser.properties (Optionen - Benutzereinstellungen öffnen) und trage dort ein:
output.wrap=1
Dann SciTE neu starten und fertig.
#include <Date.au3> ; Datum und Zeit - brauche ich das?
Schau in die UDF - ausschliesslich native Funktionen. Somit sind keinerlei Includes erforderlich.
Und du musst schon den Return der Funktion auffangen.
Wie heißt die Variable mit der Zeilennummer, wenn man eine .au3 Datei im SciTE-Editor ausführt?
Habe ich schon mehrfach genannt: Makro @ScriptLineNumber
hier geht es darum, ins Innere vom SciTE-Editor einzugreifen, da ja irgendwo die Ausgabe für die Console gescriptet sein muss .
Das Errorhandling ist m.W. in der .exe verankert, somit kannst du da nicht eingreifen. Vielleicht solltest du dir deine Monsterpfade (bei mir ist keiner länger als 30-40 Zeichen) einfach auf kürzere Pfade linken.
Was mich nervt ist, dass ohne speichern das F1 zum springen in die Hilfe nicht funzt...
Du bist lustig, wenn SciTE nicht weiß, was für eine Datei du bearbeitest kann auch nicht die passende Hilfedatei aufgerufen werden. SciTE ist kein "ausschliesslich-AutoIt-Editor".
Dieser erkennt z. B. die oben angesprochenen includes in den includes.
Nun, das ist aber kein Merkmal besonderer Güte, da es völlig wurscht ist, wenn man Includes einbindet, die ihrerseits von Includes bereits eingebunden werden. Dort wird überall #include-once genutz und somit zusätzlicher Overhead vermieden.
Ich habe ja mal einen IncludeManager in Lua geschrieben. Das Problem Include-in-Include läßt sich sowieso nicht sauber auflösen, weil es nicht DIE Minimal-Include-Lösung gibt. Dadurch das verschiedene Includes innerhalb anderer Includes mehrfach auftauchen und diese wiederum andere Includes einbinden können beißt man sich beim rekursiven parsen der Dateien tatsächlich in den eigenen Hintern ;). Man muß den Includes eine Wertigkeit zuweisen um da eine Struktur zu bekommen.
Ich habe das Programm allerdings nicht fertig gestellt, weil es damals Änderungen gab, wo die Strukturen dauernd geändert wurden.
hat er vermutlich das Script nicht gespeichert..
Deswegen mein Hinweis, dass man vor Beginn der ersten Codezeile das Skript speichern sollte. Sonst steht einem ja keine Funktionalität des Editors zur Verfügung.