1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. fakeraol

Beiträge von fakeraol

  • Mehrere MP3 Dateien in unterschiedlicher Lautstärke abspielen

    • fakeraol
    • 4. Januar 2018 um 21:22

    *ein "y" nachreiche* ;)

    die Homepage ist http://www.digijay.at/

  • AlignComment richtet Kommentare aus Update 13.08.2016

    • fakeraol
    • 4. Januar 2018 um 20:40
    Zitat von Andy

    Wer aber dennoch eine "sichere" RegEx findet oder kennt um Kommentare vom Code zu trennen (eigentlich benötigt man den Kommentartrenner doch in jeder Programmiersprache) bitte ich um Info!

    Da ich gerade im Zusammenhang mit dem finden der zugehörigen schließenden Tags zu den öffnenden in HTML darauf gestoßen bin:

    so etwas lässt sich wohl mit RegEx prinzipiell nicht fehlersicher lösen. M$ hat zwar in seine .Net-Implementierung eine Hilfsfunktion dafür eingebaut, die arbeitet aber auch nicht unter allen Bedingungen fehlerfrei.

    Um solche Probleme zu lösen, braucht man wohl einen Parser für die jeweilige Sprache, der den Quelltext von Anfang an durchgeht, sich dabei Zustandsänderungen merkt (z.B. Strings an den Anführungszeichen erkennt und entsprechend Flags setzt, wie "alles innerhalb Singlequotes wird nicht weiter interpretiert"), und damit Ziechen abhängig vom Kontext, in dem sie stehen, interpretiert.

    Ich weiß nicht, ob man den in Scite eingebauten Parser, der das Syntaxhilighting macht, evtl. abfragen kann dazu, als was er ein Semikolon an einer bestimmten Position interpretiert. Falls man die Schriftfarbe abfragen kann, könnte man das verwenden. Ich hab mich vor Jahren mal ein bischen damit beschäftigt, und meine, das müsste man abfragen können, bin aber nicht sicher.

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • fakeraol
    • 4. Januar 2018 um 19:20
    Zitat von Oscar

    SciTE ist der AutoIt-Standard, nicht Notepad++!

    Ich nehm alles zurück und behaupte das Gegenteil. Da hast Du recht. Damit ist mein Gemecker darüber hinfällig, weil die Probleme nicht auftreten, wenn man die Skripte nicht wie ich direkt aus der Hilfe heraus aufruft.

    BugFix

    Benutzt hab ich die NPP-Console auch schon. Werd mich in Zukunft zu solchen Themen aber zurückhalten, weil die Probleme, die ich da sehe, mit meinem Environment zusammenhängen und andere garnicht betreffen.

    Oscar

    Ich meinte die Erwähnung von Scite unter ConsoleWrite im ersten Beispiel im Kommentar. Da könnte man einen Link auf die von Dir erwähnte Scite-Hilfe einbauen, oder den Hinweis mit F5 dort direkt geben - aber muß man auch nicht.

    ___________________________________________________________________________________________

    "AutoItSetOption" > "GUICoordMode" > Param = 2

    Positionierung relativ zur unteren rechten Ecke des letzten Controls.

    Ausnahme: mit "-1" übernimmt man den top/left-Wert des letzten Controls.

    Um ein Control genau 1px höher/links als das letzte zu positionieren (-1 ist ja reserviert für "gleicher Abstand von oben/links"), muß man es mit negativen Werten um ("Höhe/Breite des letzten Controls" + 1) nach oben/links verschieben/positionieren.

    Das halte ich für wesentlich verständlicher.

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • fakeraol
    • 4. Januar 2018 um 15:35

    Eine Fehlerbehandlung in nem Beispielskript mit ConsoleWrite zu machen, wäre ja durchaus Ok, damit der Anfänger beim lesen auch mal über diesen Befehl stolpert und ihn evtl. nachschlägt, aber das eigentliche Ergebnis einer Funktion sollte aus der Hilfe heraus schon direkt sichtbar sein.

    Warum geben wir denn auf dem Monitor nicht Maschinencode aus? Warum wandeln wir den in Binärcode um, und diesen in Hex, und den in ASCII/UTF-8/etc.? Warum basteln wir GUIs, statt zu erwarten, daß die Leute ihre Bewerbung auf der Konsole schreiben und die Formatierungsbefehle von Hand eingeben? Wozu das alles? Um etwas zu vereinfachen, es verständlicher, anschaulicher, einfacher handhabbar zu machen.

    Ich suche in der Hilfe nicht nach Skripten. Ich suche nach der Erklärung für eine Funktion. Und wenn die sich liest, wie eine dieser berüchtigten chinesischen Bedienungsanleitungen, wie z.B. "AutoItSetOption" > "GUICoordMode" > Option 2 , dann probiere ich das Beispielskript aus, in der Hoffnung, daß es mir dadurch klar wird.

    Wenn ich ein Script aus der Hilfe starte, wird es direkt ausgeführt, weil ich Notepad++ schon so lange benutze (und mir dafür selber noch Hilfstools benaut hab), daß ich nicht auf Scite umsteigen will. Wenn ich das Script dann im Editor haben will, kann ich es immer noch rauskopieren.

    Wenn übrigens "2. unfassbar viele MsgBoxen" aufpoppen, "die einfach nur nerven.", schreibt man die Ausgabe halt in eine GUI, da bleibt sie genauso stehen und ist nachvollziehbar. Es gibt ja schon solche Beispiele zB. zu StringRegExp, wo man besser die MsgBoxen zusammenfassen oder durch ne GUI ersetzen sollte.

    Ich finde, wir sollten Leute da abholen, wo sie stehen, und das ist bei einigen eben ganz am Anfang. Für viele, die sich schon länger mit etwas beschäftigen, sind die Basics halt "doch ganz klar".

    Ich halte mich aber in Zukunft zurück bei dem Thema. Hab oft genug, z.B. bei Wikipedia, die Erfahrung gemacht, daß der Einsatz nicht lohnt, wenn Insider/Fortgeschrittene was dagegen haben. Auch im engl. Forum schon. Da können ja einige hier auch ein Lied von singen, daß Bugreports ignoriert werden, etc.

    PS: Unter ConsoleWrite wird übrigens Scite zwar erwähnt, aber F5 nicht. Hielte ich auch für ne sinnvolle Verbesserung.

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • fakeraol
    • 4. Januar 2018 um 14:58

    Deshalb lernen so wenig Leute in Eigeninitiative C++, weil die Doku für Einsteiger so grottig, ist. Da muß man schon Programmierer sein, um um lernen zu können, einer zu werden - ein Widerspruch in sich für etwas, das sich "Hilfe" nennt.

    <Ironie>Warum gibst Du die Ergebnisse Deiner Scripte nicht in DllStruct's aus? Die Leute können doch als Anfänger erst mal lernen, wie man nen Debugger benutzt? Console ist doch sowas von lame.</Ironie>

    Der Jammer mit Anfängern ist nun mal, daß sie ANFANGEN, und anfangen tut man immer mit dem ersten Schritt. Der erste Schritt ist nun mal der erste Befehl, den man lernt, und die "Hilfe" soll mit Beispielen verANSCHAUlichen, was die Auswirkung des Befehls ist. Die Hilfe hat nun mal keine Console. Was Du erwartest ist, daß die Leute einen Teil der Syntax schon KÖNNEN, bevor sie anfangen, sie zu lernen.

    Du mußt Dich ja selber garnicht daran beteiligen, das zu ändern, aber wenn Du darauf bestehst, daß das auch andere nicht tun sollen, klingt das für mich nach "Ein bischen sollen die sich schon quälen, zu leicht will ich's ihnen auch nicht machen.".

    Ich benutze AutoIt seit vielen Jahren und mich nervt es immer wieder, wenn ich wegen einer mir unverständlichen (engl.) Erklärung einer UDF-Funktion ein Script erst rauskopieren muß, um mir die Ausgabe anschauen zu können. Und ich gestehe mir zu, es für arrogant zu halten, wenn dann jemand meint: "Dann mußt Du halt die Begriffe erst mal alle lernen.".

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • fakeraol
    • 4. Januar 2018 um 13:30

    https://autoit.de/index.php?page=Thread&amp;threadID=

    durch

    https://autoit.de/index.php?thread/

    ersetzen und den ganzen Text hinter der Tread-Nummer weglassen?

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • fakeraol
    • 4. Januar 2018 um 13:07

    Eben drum schrieb ich, die Ausgabe dieser Scripte solle in MsgBox'en oder eine Gui (oder mit _ArrayDisplay() ) gemacht werden, damit die tatsächlich direkt aus der Hilfe aufgerufen werden können.

    PS: Deine Signatur-Links funktionieren übrigens nicht mehr.

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • fakeraol
    • 4. Januar 2018 um 11:10

    Nicht funktionierende Beispielskripte in der Hilfe

    ConsoleWrite in Beispielskripten

    Wie ich schon schrieb, Beispielskripte sollten ihre Ausgabe nicht in die Console machen. Gebt mal "ConsoleWrite" in die Suche der Hilfe ein, da gibts jede Menge Scripte, bei denen der Anfänger garkeine Reaktion zu sehen bekommt, wenn er die aus der Hilfe heraus aufruft. Das lässt sich fast alles durch MsgBox ersetzen, oder notfalls durch ne simple Gui.

    FileReadToArray

    Das Beispielskript soll sich zur Demonstration selber einlesen, was natürlich nicht funktionieren kann, wennn es in eine *.chm gezippt ist.

  • AutoIt-Object -- wie könnte AutoIt in OOP-Syntax aussehen

    • fakeraol
    • 3. Januar 2018 um 13:29

    Das meiste Wissen bezügl. Computern hab ich mir selbst erschlossen (und dabei mit Javascript in prozeduraler Form angefangen). Unser C++Dozent (FI/SI-Ausbildung) kommentierte ständig: "Hast Du da nicht einen [Punkt|DoppelPunkt|zwei Doppelpunkte|Ausrufezeichen|Komma|etc.] vergessen? .. Kaum macht man's richtig, schon funktionierts." Die Leute waren mehr damit beschäftigt, an Syntaxfehlern zu verzweifeln, als daß sich Erfolge eingestellt haben.

    Sowas wie automatische Typkonvertierung ist halt immer Fluch und Segen. Es macht den Einstieg oft erst mal leichter, weil man sich nicht um so viele Dinge kümmern muß, bevor mal was funktioniert, aber es ist auch fehleranfälliger, und ein späteres Umlernen dann nochmal anstrengend.

    Ich hab mich schon mal etwas mit OOP beschäftigt, aber da ich meine Aufgabenstellungen bisher auch anders lösen konnte, hatte ich bisher nicht die Motivation, mich so dahinter zu klemmen, daß ich da Fuß fasse.

  • Firefox Quantum: Button per Text oder Div klicken möglich?

    • fakeraol
    • 3. Januar 2018 um 11:12

    Ja. Ich seh da allerdings bisher nichts, was ich vermisst hätte.

  • Control-Positionierung/Skalierung bei resizable GUIs

    • fakeraol
    • 3. Januar 2018 um 08:51

    Oh, das heißt dann wohl C++. Da bin ich dann leider nur Zaungast.

  • AutoIT - Script-to-OOP-Script-Converter

    • fakeraol
    • 3. Januar 2018 um 00:50

    Argh! Ich muß meine Regex-Kenntnisse auffrischen .. Schande über mich! 8|

  • AutoIt-Object -- wie könnte AutoIt in OOP-Syntax aussehen

    • fakeraol
    • 3. Januar 2018 um 00:11

    Hat diese "Objektisierung" irgendwelche Vorteile bezügl. Ausführungsgeschwindigkeit oder erweiterter Möglichkeiten, die AutoIt selbst nicht bietet; außer daß sie vielleicht Leuten, die diese Syntax schon von anderen Programmiersprachen gewohnt sind, besser liegt?

    Ich fürchte, wenn AutoIt komplett auf OOP umgestellt würde, wäre der Einstieg für viele Programierneulinge wesentlich schwerer. :/

  • AutoIT - Script-to-OOP-Script-Converter

    • fakeraol
    • 3. Januar 2018 um 00:01
    Zitat von BugFix
    Code
    (\$[_\w]+)(?:\s*=([^,]+))?
    
    ...
    
    \s*              - Leerzeichen mit Quantifier "*", 0 bis unendlich oft
    
    ...

    Muß das nicht '\s+' heißen, also [whitespace) gefolgt von weiteren Zeichen aus der Zeichengruppe?

    '\s*' bedeutet doch "ein Whitespace, gefolgt von weiteren BELIEBIGEN Zeichen" ?

  • Firefox Quantum: Button per Text oder Div klicken möglich?

    • fakeraol
    • 2. Januar 2018 um 23:26

    Was hat Tampermonkey denn mehr zu bieten? Bin mal umgestiegen, aber mir fällt erst mal nur auf, daß ich beim ersten Click aufs Greasemonkey-Icon schon meine Scripte zu sehen bekam. Noch nen Click aufs Script, und noch einer auf 'Edit', und ich konnte es bearbeiten. Fand ich angenehmer.

    Was siehst Du bei Tampermonkey für Vorteile?

  • Control-Positionierung/Skalierung bei resizable GUIs

    • fakeraol
    • 2. Januar 2018 um 22:21

    Da AutoIt ja Windows-orientiert ist, macht Plattformunabhängigkreit überhaupt Sinn?

    Zum einen wäre wichtig, welche Toolkits diese Container-Verschachtelung/Strukturierung/Gruppierung unterstützen, die uns in AutoIt fehlt (umzusetzen ohne übermäßigen Aufwand).

    Zum anderen ist Verbreitung schon interessant (am besten auf jedem Windows-System vorhanden), damit man nicht erst die zugehörigen DLLs besorgen muß (evtl.Versions-Probleme?), denn aus Copyright-Gründen können wir die wohl schlecht selbst hier anbieten. Auch würden mitzuliefernde DLLs (FileInstall) die Programm-Datei aufblähen.

    Also erst mal aussortieren, was nicht in Frage kommt, und dann hier die Doku zu dem Toolkit verlinken, das dann letztlich umgesetzt werden soll. Dann machen sicher auch mehr Leute mit bei der Umsetzung, wenn sie die Resourcen nicht selber zusammensuchen müssen. :)

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • fakeraol
    • 2. Januar 2018 um 21:54

    Hab die beiden (DE 3.3.14.2 und EN 3.3.12.0) mal verglichen. Bis auf die Strings sind sie gleich (funktional).

    Ich hab grad beide (DE und EN) nebeneinander geöffnet, und da die en schon 'ne StringRegExpGUIPattern.dat angelegt hat, spuckt die DE jetzt in dem Pattern-Combo die (EN) Header-Zeile mit aus.

    Wenn ich die readDatFile()-Funktion mittels FileReadToArray() umbaue, fällt das Geraffel zur Entfernung der Zeilenumbrüche weg, und die erste Zeile lässt sich unabhängig vom (DE oder EN) Inhalt "entsorgen". Die ganze Funktion lässt sich viel kompakter (und weniger fehleranfällig) schreiben, mach ich mich morgen abend mal dran.

    Übersetzung mach ich dann gleich mit.

    Fehler/Verbesserungen melde ich auf Basis der Online-Hilfe.

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • fakeraol
    • 2. Januar 2018 um 20:29

    Den aus der Hilfe 3.3.12.0 , gibts da noch nen Neueren?

    Übersetzung kann ich guttenbergen.

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • fakeraol
    • 2. Januar 2018 um 12:53

    Danke Andy , habs mal oben im Post angepasst, und noch ein paar Kleinigkeiten.

    Dann könnte der jetzt mit in die Hilfe übernommen werden (im "Tutorial - Regular Expression").

    PS NOCH NICHT! Sind noch Fehler drin. Jetzt sollte alles funktionieren. Ruckelt immer noch was, muß aber erst mal weg, kümmer mich später drum.

    So, soweit möglich, ruckeln und flackern beseitigt. Falls nochmal jemand drüberschauen mag ... ansonsten ist das Script jetzt fertig.

    * Resource aus dem Netz laden

    * Gui resizable
    _____________________________________________________________________________________________________________________

    Placeholder für Input, etc. setzen mit $EM_SETCUEBANNER - könnte man noch mit aufnehmen in die Hilfe.

    https://www.autoitscript.com/forum/topic/16…comment=1226083

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • fakeraol
    • 2. Januar 2018 um 03:21

    Hab den Regexp-Tester aus der Hilfe jetzt mal entsprechend Oscars Vorschlag umgebaut. Das Ergebnis ist ebenso unbefriedigend. Die Radio-Controls springen auf und ab und überlagern sich teilweise beim Resizen:

    PS: Nach weiteren Anpassungen ist das Ergebnis jetzt befriedigend.

    AutoIt
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <StaticConstants.au3>
    #include <StringConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    Global Const $g_sSep = Chr(11) ; --> 0x0B = VT - use as a separator for use in the combo control. By default this uses a "|" and this charactor is likely to be used in a pattern file
    Opt("GUIDataSeparatorChar", $g_sSep)
    Global $g_sInitialDir = @ScriptDir
    Global Const $GREEN = 0xAAFFD5
    Global Const $GREY = 0xD4D0C8
    Global Const $RED = 0xFF8888
    Global Const $BLACK= 0x000000
    Global Const $BLUE = 0x0000FF
    Global Const $SOFTYELLOW = 0xFBFFC6
    Global Const $YELLOW = 0xFFFC8A
    Global $StringToTest ; $StringToTest holds the currently selected tab for the input string to be tested (ie from the edit box or from the text file)
    ; results from StringRegExp come in 3 forms: a single string (rtn flag 0), a single array (rtn flag 1,2,3) or an array of arrays (rtn flag 4)
    Global $g_bResultTrueFalseExpected = False
    Global $g_bArrayOfArraysExpected = False
    Global $g_sPatterns = readDatFile()
    Global $iGuiW = 632, $iGuiH = 628
    GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO")
    GUIRegisterMsg($WM_SIZE, "_WM_SIZE")
    $hMainForm = GUICreate("StringRegExp Idea by w0uter, modified Steve8tch and fakeraol", $iGuiW, $iGuiH, -1, -1, $WS_MINIMIZEBOX + $WS_MAXIMIZEBOX + $WS_SIZEBOX)
    $WindowSize = WinGetPos($hMainForm)
    
    Local $Tab = GUICtrlCreateTab(10, 10, 610, 190)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    Global $Tabitem1 = GUICtrlCreateTabItem("Test text")
    Local $InputEditBox = GUICtrlCreateEdit("", 20, 40, 590, 150, BitOR($ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
    GUICtrlSetResizing (-1,$GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKHEIGHT)
    GUICtrlSetBkColor($InputEditBox, $SOFTYELLOW)
    Global $Tabitem2 = GUICtrlCreateTabItem("Load text from File")
    Local $Browse = GUICtrlCreateButton("Browse for file", 20, 40, 100, 20)
    GUICtrlSetResizing (-1,$GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKSIZE)
    Global $PathToInputFile = GUICtrlCreateEdit("", 130, 40, 480, 20, BitOR($ES_WANTRETURN, $WS_HSCROLL, $ES_AUTOHSCROLL))
    GUICtrlSetResizing (-1,$GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKHEIGHT)
    Global $InputFromFile = GUICtrlCreateEdit("", 20, 70, 590, 120, BitOR($ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
    GUICtrlSetResizing (-1,$GUI_DOCKTOP + $GUI_DOCKLEFT)
    GUICtrlSetBkColor($InputFromFile, $SOFTYELLOW)
    Global $Tabitem3 = GUICtrlCreateTabItem("Get website text/HTML")
    $WebTextButton = GUICtrlCreateButton("Text", 20, 40, 60, 20)
    GUICtrlSetResizing (-1,$GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKSIZE)
    $WebHTMLButton = GUICtrlCreateButton("HTML", 85, 40, 60, 20)
    GUICtrlSetResizing (-1,$GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKSIZE)
    $WebADDRInput = GUICtrlCreateInput("", 155, 40, 453, 20)
    GUICtrlSetResizing (-1,$GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKHEIGHT)
    GUICtrlSendMsg(-1, $EM_SETCUEBANNER, False, "http://...")
    $InputFromWeb = GUICtrlCreateEdit("", 20, 70, 590, 120)
    GUICtrlSetResizing (-1,$GUI_DOCKTOP + $GUI_DOCKLEFT)
    GUICtrlSetBkColor(-1, $SOFTYELLOW)
    
    GUICtrlCreateTabItem("");
    
    $patternGroup = GUICtrlCreateGroup("The pattern", 10, 210, 610, 60)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT)
    Local $Test = GUICtrlCreateButton("Test", 20, 234, 40, 20, $BS_DEFPUSHBUTTON)
    GUICtrlSetResizing (-1,$GUI_DOCKSIZE + $GUI_DOCKLEFT)
    Global $Pattern = GUICtrlCreateCombo("", 70, 230, 500, 30)
    GUICtrlSetFont($Pattern, 14, -1, -1, "Arial")
    GUICtrlSetColor($Pattern, $BLUE)
    GUICtrlSetBkColor($Pattern, $YELLOW)
    GUICtrlSetData($Pattern, $g_sPatterns, "(.*)")
    Global $DoPtnAdd = GUICtrlCreateButton("Add", 584, 225, 30, 18)
    Local $DoPtnDel = GUICtrlCreateButton("Del", 584, 245, 30, 18)
    
    Global $Radio_0 = GUICtrlCreateRadio("Match", 15, 300, 115, 18)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT)
    Global $Radio_1 = GUICtrlCreateRadio("ArrayMatch", 15, 318, 115, 18)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT)
    GUICtrlSetState($Radio_1, $GUI_CHECKED)
    Global $Radio_2 = GUICtrlCreateRadio("ArrayFullMatch", 15, 336, 115, 18)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT)
    Global $Radio_3 = GUICtrlCreateRadio("ArrayGlobalMatch", 15, 354, 115, 18)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT)
    Global $Radio_4 = GUICtrlCreateRadio("ArrayGlobalFullMatch", 15, 372, 115, 18)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT)
    $returnGroup = GUICtrlCreateGroup("       Return Flag", 10, 280, 125, 120) ; created after its content controls to avoid overlap on resizing
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT + $GUI_DOCKSIZE)
    
    $offsetGroup = GUICtrlCreateGroup("           Offset", 10, 410, 125, 50)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT + $GUI_DOCKSIZE)
    Global $Offset = GUICtrlCreateInput("1", 40, 430, 60, 20)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT + $GUI_DOCKSIZE)
    
    $errorGroup = GUICtrlCreateGroup("@error     @extended", 10, 470, 125, 50)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT + $GUI_DOCKSIZE)
    Global $Err = GUICtrlCreateInput("", 20, 490, 40, 20, $ES_READONLY)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT + $GUI_DOCKSIZE)
    Global $Ext = GUICtrlCreateInput("", 70, 490, 50, 20, $ES_READONLY)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT + $GUI_DOCKSIZE)
    
    Local $_Help = GUICtrlCreateButton("StringRegExp HELP", 10, 544, 120, 30)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM)
    
    $outputGroup = GUICtrlCreateGroup("Output", 145, 280, 475, 295)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT)
    Global $Out = GUICtrlCreateEdit("", 155, 296, 455, 270, BitOR($ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT)
    GUICtrlSetBkColor($Out, $SOFTYELLOW)
    
    Global $TimerDisplay = GUICtrlCreateLabel("Time (ms)", 3, 583, 132, 20, $SS_SUNKEN)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKSIZE)
    Global $StatusBar = GUICtrlCreateLabel("Status..", 140, 583, 487, 20, $SS_SUNKEN)
    GUICtrlSetResizing (-1,$GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)
    
    $StringToTest = $InputEditBox ; default - read the string to be tested from the edit box
    ; setup tool tips
    ; GUICtrlSetTip required IE version 5+
    If Number(StringLeft(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer", "Version"), 1)) > 4 Then
        GUICtrlSetTip($Radio_0, "Returns 1 (matched) or 0 (no match)", "Return Flag= 0", 1, 1)
        GUICtrlSetTip($Radio_1, "Returns an array containing the matches.", "Return Flag = 1", 1, 1)
        GUICtrlSetTip($Radio_2, "Returns the full matched string AND an array containing the matches (Perl / PHP style).", "Return Flag = 2", 1, 1)
        GUICtrlSetTip($Radio_3, "Returns an array containing the global matches.", "Return Flag = 3", 1, 1)
        GUICtrlSetTip($Radio_4, "Returns an array of arrays containing the full matched strings AND global matches. (Perl / PHP style).", "Return Flag = 4", 1, 1)
        GUICtrlSetTip($Offset, "[optional] The string position to start the match (starts at 1) The default is 1.", "Offset option", 1, 1)
    Else
        GUICtrlSetTip($Radio_0, "Returns 1 (matched) or 0 (no match)")
        GUICtrlSetTip($Radio_1, "Returns an array containing the matches.")
        GUICtrlSetTip($Radio_2, "Returns the full matched string AND an array containing the matches (Perl / PHP style).")
        GUICtrlSetTip($Radio_3, "Returns an array containing the global matches.")
        GUICtrlSetTip($Radio_4, "Returns an array of arrays containing the full matched strings AND global matches. (Perl / PHP style).")
        GUICtrlSetTip($Offset, "[optional] The string position to start the match (starts at 1) The default is 1.")
    EndIf
    
    GUISetState(@SW_SHOW)
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Test
                doStringRegExpTest()
            Case $Browse
                doBrowseForFile()
            Case $WebTextButton
                _IELoadWaitTimeout(30000)
                GUICtrlSetData($InputFromWeb, "Please wait...")
                $oIE = _IECreate(GUICtrlRead($WebADDRInput), 0, 0)
                If @error = 6 Then 
                    GUICtrlSetData($InputFromWeb, "Load Timeout")
                Else
                    GUICtrlSetData($InputFromWeb, _IEBodyReadText($oIE))
                EndIf
                _IEQuit($oIE)
            Case $WebHTMLButton
                _IELoadWaitTimeout(30000)
                GUICtrlSetData($InputFromWeb, "Please wait...")
                $oIE = _IECreate(GUICtrlRead($WebADDRInput), 0, 0)
                If @error = 6 Then 
                    GUICtrlSetData($InputFromWeb, "Load Timeout")
                Else
                    GUICtrlSetData($InputFromWeb, _IEBodyReadHTML($oIE))
                EndIf
                _IEQuit($oIE)
            Case $Tab
                Switch GUICtrlRead($Tab)
                    Case 0
                        $StringToTest = $InputEditBox
                    Case 1
                        $StringToTest = $InputFromFile
                    Case 2
                        $StringToTest = $InputFromWeb
                EndSwitch
            Case $DoPtnAdd
                doPtnAdd(GUICtrlRead($Pattern))
            Case $DoPtnDel
                doPtnDel(GUICtrlRead($Pattern))
            Case $_Help
                doDisplayHelp()
        EndSwitch
    WEnd
    
    Func doStringRegExpTest()
        Local $aA, $aB ;use for arrays
        Local $i, $j ; use for stepping through arrays
        Local $c ;  counter
        Local $hTimer, $t ; use for timing
        Local $iErr, $iExt ; use to hold result of @error and @extended
        Local $sResult = "" ; use to hold result
        Local $iStrLgth ; use to the string length of the number of results expected. (eg Use in the StringFormat function
        Local $x, $y ; local vars.
        GUICtrlSetData($Out, "")
        GUICtrlSetData($StatusBar, "Performing test..... please wait.")
        GUICtrlSetBkColor($StatusBar, $GREEN)
        ;set up timer
        $hTimer = TimerInit()
        $aA = StringRegExp(GUICtrlRead($StringToTest), GUICtrlRead($Pattern), getReturnFlag(), getOffset())
        $iErr = @error
        $iExt = @extended
        $t = TimerDiff($hTimer)
        GUICtrlSetData($TimerDisplay, $t & "  ms")
        GUICtrlSetData($Err, $iErr)
        GUICtrlSetData($Ext, $iExt)
        Select
            Case $iErr = 0
                GUICtrlSetData($StatusBar, "Valid pattern - updating display.   Please wait....")
                GUICtrlSetBkColor($StatusBar, $GREEN)
            Case $iErr = 1
                GUICtrlSetData($StatusBar, "Array is invalid. No matches")
                GUICtrlSetBkColor($StatusBar, $RED)
            Case $iErr = 2
                GUICtrlSetData($StatusBar, "Bad pattern, (array is invalid). @extended = offset of error in pattern.")
                GUICtrlSetBkColor($StatusBar, $RED)
        EndSelect
        If $iErr = 0 Then
            $x = UBound($aA)
            If $g_bArrayOfArraysExpected Then
                $y = UBound($aA[0])
                $x *= $y
            EndIf
            $iStrLgth = StringLen(String($x - 1))
            If $g_bArrayOfArraysExpected Then ; results -> array of arrays expected
                $c = 0 ; use $c as a counter to help display the results
                If UBound($aA) Then
                    For $i = 0 To UBound($aA) - 1
                        $aB = $aA[$i]
                        For $j = 0 To UBound($aB) - 1
                            $sResult &= StringFormat("%0" & $iStrLgth & "i", $c) & ' => ' & $aB[$j] & @CRLF
                            $c += 1
                        Next
                        $sResult &= @CRLF
                    Next
                    GUICtrlSetData($Out, $sResult)
                    GUICtrlSetData($StatusBar, "Complete")
                EndIf
            ElseIf $g_bResultTrueFalseExpected Then ; result string expected
                If $aA = 1 Then
                    $sResult &= "1   <-- SUCCESS, matches found" & @CRLF
                Else
                    $sResult &= "0   <-- FAIL, no matches found" & @CRLF
                EndIf
                GUICtrlSetData($Out, $sResult)
                GUICtrlSetData($StatusBar, "Complete")
            Else ; a single array expected
                If UBound($aA) Then
                    For $i = 0 To UBound($aA) - 1
                        $sResult &= StringFormat("%0" & $iStrLgth & "i", $i) & ' => ' & $aA[$i] & @CRLF
                    Next
                    GUICtrlSetData($Out, $sResult)
                    GUICtrlSetData($StatusBar, "Complete")
                EndIf
            EndIf
        EndIf
    EndFunc
    
    Func getReturnFlag()
        $g_bArrayOfArraysExpected = False
        $g_bResultTrueFalseExpected = False
        Switch $GUI_CHECKED
            Case GUICtrlRead($Radio_0)
                $g_bResultTrueFalseExpected = True
                Return $STR_REGEXPMATCH
            Case GUICtrlRead($Radio_1)
                Return $STR_REGEXPARRAYMATCH
            Case GUICtrlRead($Radio_2)
                Return $STR_REGEXPARRAYFULLMATCH
            Case GUICtrlRead($Radio_3)
                Return $STR_REGEXPARRAYGLOBALMATCH
            Case GUICtrlRead($Radio_4)
                $g_bArrayOfArraysExpected = True
                Return $STR_REGEXPARRAYGLOBALFULLMATCH
        EndSwitch
    EndFunc
    
    Func getOffset()
        Local $x
        $x = Int(GUICtrlRead($Offset))
        If @error Then
            Return 1
        Else
            Return $x
        EndIf
    EndFunc
    
    Func doBrowseForFile()
        Local $sFilePath, $sFileTxt
        $sFilePath = FileOpenDialog("Select text file to test", $g_sInitialDir, "Text files (*.*)", 1)
        $g_sInitialDir = StringTrimRight($sFilePath, StringInStr($sFilePath, "\", "-1"))
        GUICtrlSetData($StatusBar, "Loading file..")
        GUICtrlSetBkColor($StatusBar, $GREEN)
        GUICtrlSetData($PathToInputFile, $sFilePath)
        $sFileTxt = FileRead($sFilePath)
        GUICtrlSetData($StatusBar, "File loaded... updating display")
        GUICtrlSetData($InputFromFile, $sFileTxt)
        GUICtrlSetData($StatusBar, "")
        GUICtrlSetBkColor($StatusBar, $GREY)
    EndFunc
    
    Func readDatFile()
        Local $sDat, $sOut = ""
        Local $sHeader = "[do not delete this file - Patterns are listed below]" & @CRLF
        Local $sDatFile = @AppDataDir & "\StringRegExpGUIPattern.dat"
        If FileExists($sDatFile) = 0 Then
            $sDat = $sHeader & "(.*)"
            FileWrite($sDatFile, $sDat)
            $sOut = "(.*)"
        Else
            $sDat = FileRead($sDatFile)
            $sDat = StringReplace($sDat, $sHeader, "") ; strip out header line
            ;Strip out any leading or trailing @CRLF
            If StringLeft($sDat, 2) = @CRLF Then $sDat = StringTrimLeft($sDat, 2)
            If StringRight($sDat, 2) = @CRLF Then $sDat = StringTrimRight($sDat, 2)
            If $sDat <> "" Then ; we should have 1 or more patterns
                $sOut = StringReplace($sDat, @CRLF, $g_sSep)
            Else
                FileWrite($sDatFile, $sHeader & "(.*)")
                $sOut = "(.*)"
            EndIf
        EndIf
        Return $sOut
    EndFunc
    
    Func doPtnDel($x)
        Local $sDat
        Local $sDatFile = @AppDataDir & "\StringRegExpGUIPattern.dat"
        $sDat = FileRead($sDatFile)
        ;now find and remove this entry from the dat file
        $sDat = StringReplace($sDat, $x, "")
        ;If $x was in the middle of the dat file - we will now need to find and remove any double @CRLF entries
        $sDat = StringReplace($sDat, @CRLF & @CRLF, @CRLF)
        ;If $x was at the beginning or the end of the file - we now need to stop off a leading or trailing @CRLF entry
        If StringLeft($sDat, 2) = @CRLF Then $sDat = StringTrimLeft($sDat, 2)
        If StringRight($sDat, 2) = @CRLF Then $sDat = StringTrimRight($sDat, 2)
        ;Now delete the previous dat file and create a new one
        If FileDelete($sDatFile) Then
            FileWrite($sDatFile, $sDat)
        Else
            MsgBox($MB_SYSTEMMODAL, "***ERROR**", "Failed to delete  entry from the dat file" & @CRLF & _
                    "Reason: Failed to delete old file.")
        EndIf
        ;Now read in new dat file
        $g_sPatterns = readDatFile()
        GUICtrlSetData($Pattern, $g_sSep & $g_sPatterns, "(.*)")
    EndFunc   ;==>doPtnDel
    
    Func doPtnAdd($x)
        Local $sDat
        Local $sDatFile = @AppDataDir & "\StringRegExpGUIPattern.dat"
        $sDat = FileRead($sDatFile)
        ;now add this entry to the end of the dat file
        $sDat &= @CRLF & $x
        ;Now delete the previous dat file and create a new one
        If FileDelete($sDatFile) Then
            FileWrite($sDatFile, $sDat)
        Else
            MsgBox($MB_SYSTEMMODAL, "***ERROR**", "Failed to delete  entry from the dat file" & @CRLF & _
                    "Reason: Failed to delete old file.")
        EndIf
        ;Now read in new dat file
        $g_sPatterns = readDatFile()
        GUICtrlSetData($Pattern, $g_sSep & $g_sPatterns, $x)
    EndFunc   ;==>doPtnAdd
    
    Func doDisplayHelp()
        Local $iErr = 0
        If @Compiled = 0 Then
            Local $sPathToHelpFile = StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", 0, -1))
            Run($sPathToHelpFile & "AutoIt3Help.exe StringRegExp")
            $iErr = @error
        Else
            ; X64 running support
            Local $sWow64 = ""
            If @AutoItX64 Then $sWow64 = "\Wow6432Node"
    
            ;Try and file to help file (if available at all)
            ;get AutoIt install dir
            Local $sPathToAutoIt = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE" & $sWow64 & "\AutoIt v3\AutoIt", "InstallDir")
            $iErr = @error
    
            If $iErr = 0 Then
                Run($sPathToAutoIt & "\AutoIt3Help.exe StringRegExp")
                $iErr = @error
            EndIf
        EndIf
        If $iErr Then MsgBox($MB_SYSTEMMODAL, "error", "Cannot find help file - sorry")
    EndFunc
    
    Func WM_GETMINMAXINFO($hwnd, $Msg, $wParam, $lParam)
        #forceref $hwnd, $Msg, $wParam, $lParam
        Local $tagMaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
        DllStructSetData($tagMaxinfo, 7,  $WindowSize[2]) ; min X
        DllStructSetData($tagMaxinfo, 8,  $WindowSize[3]) ; min Y
        DllStructSetData($tagMaxinfo, 9,  @DesktopWidth)  ; max X
        DllStructSetData($tagMaxinfo, 10, @DesktopHeight) ; max Y
        Return 0
    EndFunc
    
    Func _WM_SIZE($hWnd, $Msg, $wParam, $lParam)
        Local $iW = BitAND($lParam, 0x0000ffff) ; Low-Order-Word = new Client-Width
        Local $iH = BitShift(BitAND($lParam, 0xffff0000), 16) ; Hi-Order-Word = new Client-Height
        LOcal $iM = Floor($iH * .39)
    
        GUICtrlSetPos($Tab,                  10,         10, $iW -  20, $iM -  45)
        GUICtrlSetPos($InputEditBox,      20,         40, $iW -  40, $iM -  85)
        GUICtrlSetPos($WebADDRInput,     155,         40, $iW - 175,        20)
        GUICtrlSetPos($InputFromFile,      20,         70, $iW -  40, $iM - 115)
        GUICtrlSetPos($PathToInputFile,  130,         40, $iW - 150,        20)
        GUICtrlSetPos($InputFromWeb,      20,         70, $iW -  40, $iM - 115)
        GUICtrlSetPos($patternGroup,      10, $iM -  25, $iW -  20,        60)
        GUICtrlSetPos($Test,              20,        235,        40,        20)
        GUICtrlSetPos($Pattern,              70, $iM -   5, $iW - 120,        30)
        GUICtrlSetPos($DoPtnAdd,    $iW - 45, $iM -  10,        30,        18)
        GUICtrlSetPos($DoPtnDel,    $iW - 45, $iM +  10,        30,        18)
        GUICtrlSetPos($returnGroup,          10, $iM +  45,       125,       120)
        GUICtrlSetPos($Radio_0,              15, $iM +  65,       117,        18)
        GUICtrlSetPos($Radio_1,              15, $iM +  83,       117,        18)
        GUICtrlSetPos($Radio_2,              15, $iM + 101,       117,        18)
        GUICtrlSetPos($Radio_3,              15, $iM + 119,       117,        18)
        GUICtrlSetPos($Radio_4,              15, $iM + 137,       117,        18)
        GUICtrlSetPos($offsetGroup,          10, $iM + 175,       125,        50)
        GUICtrlSetPos($Offset,              40, $iM + 195,        60,        20)
        GUICtrlSetPos($errorGroup,          10, $iM + 235,       125,        50)
        GUICtrlSetPos($Err,               20, $iM + 255,        40,        20)
        GUICtrlSetPos($Ext,               70, $iM + 255,        50,        20)
                                                                                
    
        GUICtrlSetPos($outputGroup,         145, $iM +  45, $iW - 155, $iH - ($iM + 74))
        GUICtrlSetPos($Out,                 155, $iM +  61, $iW - 175, $iH - ($iM + 101))
    
        Return $GUI_RUNDEFMSG
    EndFunc
    Alles anzeigen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™