Beiträge von JBO

    Oh ok, dann muss ich mal meine Bedingungen überdenken, vlt. hab ich auch nen Logikfehler drin!

    Hallo zusammen!


    Ich habe folgende Bedingung:

    Code
    If $sExcelFile == "" And $sLevel0String == "" And $sLevel1String == "" And $sLevel2String == "" Then ...

    Laut der AutoIt-Hilfe werden die restlichen Bedingungen nicht mehr beachtet, wenn die erste Bedingung erfüllt ist.

    Wie bekomm ich das jetzt hin, dass ALLE Bedingungen berücksichtig werden? Muss ich da () Klammern setzen, oder muss ich das mit If's verzweigen, was allerdings ehr umständlich und unübersichtlich wäre!? Zumal ich später noch mehr Bedingungen dieser Art habe.


    VG

    Also ich habe mein GUI so aufgebaut, dass alle Unterfenster im gleichen GUI angezeigt werden. Dazu hab ich ein Main-GUI erstellt, in dem nur die Fenstergröße definiert ist, außerdem ist dort das Datei-Menü drin. Dann hab ich ein GUI erstellt, was beim ersten Laden des GUIs mitgeladen wird (Startseite quasi). Wenn ich einen Menüpunkt anwähle, wird das Start-GUI ausgeblendet und das neue GUI eingeblendet.


    Vielleicht hilft das ja!?

    Möchtest du den Pfad finden, oder nur auslesen? Denn der komplette Pfad steht ja oben in der Zeile unter der Menüzeile (Datei, Bearbeiten, Ansicht, ...)

    Falls du das möchtest: Hast du mal das "AutoIt Window Info"-Tool ausprobiert? Das sagt dir doch, welche ID die einzelnen Elemente in deinem Regedit haben und über die ID lässt sich der Handle. Mit dem wiederum kannst du dann den Inhalt mit GuiCtrlRead auslesen.

    Ja, das stimmt schon, Koda ist wohl nicht die beste Wahl, aber man kann die Ctrl's ja auch schon in Koda umbenennen, was zwar letztlich auch nicht viel Zeit erspart, aber es wird wenigstens ein recht anständiger Code erzeugt, zumindest was Variablennamen angeht. Was allerdings die Positionen angeht, sollte Koda da eher an einem Raster sich orientieren, ach was die Größen der Ctrl's angeht.


    Ich bin/war ja blutiger Anfänger, was AutoIt angeht (wie man vlt. an meinen Fragen manchmal merkt ^^), darum hab ich mich im Internet umgesehen und bin dabei auf Koda gestoßen. Das ist auch mein erstes Projekt in AutoIt.

    Noch ein Hinweis zum deklarieren plus initialisieren eines Arrays:

    Wenn Du wie hier mehrere Keys zuweisen willst und noch nicht genau weißt, wie viele es werden, so darfst Du die Anzahl auch weglassen. Vorausgesetzt, dass Du das Array beim deklarieren auch gleich initialisierst:

    AutoIt
    Global $aAccelTable[][] = [ _
            ["{F1}", $Help], _
            ["^o", $FileOpenExcelFile], _
            ["^c", $FileCreateExport], _
            ["^x", $FileExit], _
            ["^r", $ExportRawExport], _
            ["^m", $ExportXMLExport] _
            ]

    Der Interpreter weiß in dem Fall, wie groß das Array sein soll.

    Ah ja, stimmt! Das hatte ich nicht berücksichtigt, weil mir "koda" das Menü ursprünglich erstellt hatte und ich hab es dann nur noch ergänzt.

    Ja, die gibt es! Mit dem Unterstrich am Ende der Zeile kann man mehrere Zeilen zusammenfassen:

    AutoIt
    Global $aAccelTable[6][2] = [ _
            ["{F1}", $Help], _
            ["^o", $FileOpenExcelFile], _
            ["^c", $FileCreateExport], _
            ["^x", $FileExit], _
            ["^r", $ExportRawExport], _
            ["^m", $ExportXMLExport] _
            ]

    ah, super, genau was ich gesucht hab! Danke!

    P.S. Oh, die Leertaste vor dem _ ist wohl wichtig ^^

    In so einem Fall sollte man erstmal prüfen, ob GUISetAccelerators auch korrekt ausgeführt wird. Laut Hilfe wird dann eine "1" zurückgegeben.

    Bei Deinem Script ist das nicht der Fall. Warum ist das so?

    Du hast ein Array mit 7 Elementen angelegt, aber nur 6 Elemente initialisiert. Also Fehler "0".

    Wenn Du es so machst, dann funktioniert es:

    Oh man! :Face: Da hab ich mich wohl verzählt! Aber da man die lange Zeile nicht schön formatieren kann, hab ich den Überblick verloren :( Oder gibt es eine Möglichkeit, die Zeile in ein übersichtliches Format zu bekommen? Wenn ich bis jetzt immer einen Zeilenumbruch, nach dem Komma hinter einer ] hat das AutoIt angemeckert.


    Danke für den Hinweis!!

    Wie gesagt GUI ist nicht ganz mein Thema. Meine idee wäre HotKeySet() zu nutzen aber ob das die Lösung ist weiß ich nicht.

    Da hab ich auch schon dran gedacht, aber wie bekomm ich die Hotkeys dann abgefragt, wenn GUIGetMsg() jede Tastatureingabe abfängt?


    OK, grade mal was getestet und es scheint nicht an GUIGetMsg() zu liegen, weil GUIGetMsg() gar keine Tastatureingabe erhält, wenn ich z. B. F1 drücke.

    Mit der Tastenfolge komme ich ins Menü. Also erst Alt und dann F (nicht gleichzeitig).

    Ich könnte mir vorstellen das du dafür auch Abfragen musst, aber wie gesagt ich mche in AutoIt zu wenig mit der GUI, das können andere besser.

    Ja, die Alt-Taste funktioniert, wie sie soll. Allerdings habe ich ein anderes Beispiel, in dem auch die Standart-Tastenkombination funktioniert, also Alt+f z. B.

    Alle Variablen und Konstanten, die du außerhalb einer Funktion deklarierst (hier also z.B. alle GUI-Elemente), sind immer Global, egal wie du sie definierst.

    Daher würde ich das immer direkt richtig schreiben, dann gibt es später keine Verwirrung (in deinem ersten Post z.B. waren auch Local dazwischen).

    OK Danke, werd ich mir angewöhnen müssen :)

    Soo, hab jetzt mal alles geändert und auch die GUI-Erstellung aus meinem eigentlichen Programm eingearbeitet, da in dem Beispiel dann doch alles funktioniert hatte :rock:

    In diesem Beispiel geht es leider nicht, weder die Standart-GUI-Befehle (Alt+F für das File-Menü, usw.), noch die Punkte, die ich selbst definiert habe:

    Achtung: Es funktioniert nur die Menüzeile, die Buttons sind ohne Funktion!


    Warum müssen eigentlich alle Variablen "Global" sein? Ich benutze in den Funktionen eigene Variablen, bzw. übergebe die Variablen an die Funktionen!?

    Hallo,


    in meinem Programmbeispiel funktioniert die Standart-Steuerung der GUI API, allerdings die Keys, die ich über "GUISetAccelerators" definiert habe, bleiben leider ohne Wirkung.


    Hier mal mein Beispiel:

    In meinem Hauptscript funktioniert nicht mal mehr die Standart-Steuerung der GUI, aber das könnte daran liegen, dass ich zwei Menüpunkte mit E am Anfang habe!?


    Falls jemand weiß, woran das liegen könnte, wäre ich sehr dankbar über einen Hinweis.


    VG

    Du musst dir das nicht mal generell merken (was so etwas angeht), sondern eher versuchen anzugewöhnen Sachen, die an einem festen Ort liegen auch entsprechend zu definieren und dem Programm nicht die Möglichkeit zu geben durch Workingdir etc. dir da einen Strich durch die Rechnung zu machen.

    Auch würde ich, wie bereits im vorigen Beitrag erwähnt, solche Variablen als Global Const setzen und darauf zugreifen, dann können sie auch nicht im laufenden Script durch Funktionen etc. verändert werden.


    Also anstatt dem "\test.ini", das du 3mal in deinem Script hast, lieber Global Const $IniFile = @ScriptDir & "\test.ini" und dann diese Konstante einsetzen.

    ja, in meinem Hauptscript hab ich das auch in eine Variable gespeichert, allerdings nicht CONST. Aber ich muss dann noch überall @ScriptDir davor setzen.

    OK, hab das jetzt umgestellt, und es funktioniert!! :)


    Danke Euch beiden! War mein Fehler, ich hab das zwar schon x mal gelesen, dass das @WorkingDir durch den FileOpenDialog verändert wird, aber denk da nie dran. :( Es gibt leider auch keine Möglichkeit, das zu verhindern -.- Da werde ich sicherlich noch ein paar mal drüber stolpern :(

    Bei mir ändert er die Ini-Datei nicht, wenn ich eine Verzeichnisebene höher gehe und eine Excel-Datei auswähle. Wenn ich eine Excel-Datei im ScriptOrdner auswähle, ändert er mir die ini-Datei.

    Beim 2. Aufruf des Scripts ändert er mir die ini-datei wieder nicht, wenn ich wieder eine Verzeichnisebene höher gehe und die alte Excel-Datei auswähle.


    IniWrite meldet allerdings jedes mal, erfolgreich in die Datei geschrieben zu haben (Rückgabewert = 1)

    Also mal abgesehen davon, dass du den Array aus "_PathSplit" nicht abfängst, was dazu führt, dass "$pExcelFilePath" nicht gefüllt wird, funktioniert es so leider auch nicht.

    Wie gesagt, der Vergleich funktioniert und ich bekomme ein vernünftiges Ergebnis daraus. Allerdings bleibt die INI-Datei unverändert.

    error: _PathSplit() called with Const or expression on ByRef-param(s).

    HUCH, meine Konsole sagt mir nur:

    Zitat

    .\

    K:\rc-bolz\Praktikum\XML_RAW-Export\

    -1

    >Exit code: 0 Time: 4.834

    Welchen Editor benutzt du?