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. JBO

Beiträge von JBO

  • Mehrfachbedingung vernünftig gestalten

    • JBO
    • 9. Februar 2022 um 13:51
    Zitat von AspirinJunkie

    Das ganze nennt sich short-curcuit evaluation und ist eine wichtige Form um die Performance zu beschleunigung.
    Der Ansatz ist simpel: Wenn schon die erste Seite eines Or-Operators wahr ist, dann braucht man nicht mehr die rechte Seite ausführen. Im Endeffekt wird der Gesamtausdruck nämlich immer wahr.

    Genauso bei "And": Wenn schon die linke Seite falsch ist, kann die Gesamtbedingung nicht mehr wahr werden - also braucht man die rechte Seite auch nicht mehr zu prüfen.

    Da wird auch schnell klar, dass deine Aussage:

    so nicht stimmt. Bei And werden die restlichen Bedingungen nicht mehr beachtet, wenn die erste Bedingung nicht erfüllt ist.

    Will man dies umgehen kann man halt kein And oder Or verwenden.

    Ein Hack wäre BitAnd oder BitOr zu verwenden. Die machen streng genommen etwas anderes, da aber alle diese Bedingungen nur 0 oder 1 zurückgeben kommt man damit dennoch zum selben Ergebnis:

    AutoIt
    If BitAND($sExcelFile == "", $sLevel1String == "", $sLevel2String == "") Then
    Alles anzeigen

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

  • Mehrfachbedingung vernünftig gestalten

    • JBO
    • 9. Februar 2022 um 13:32

    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

  • GUI-Fenster schließen - akt. Tutorial?

    • JBO
    • 8. Februar 2022 um 15:45

    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!?

  • Hilfe zum Auslesen eines Registry-Verzeichnisses zur Weiterverwendung

    • JBO
    • 26. Januar 2022 um 15:17

    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.

  • GUISetAccelerators ohne Wirkung

    • JBO
    • 26. Januar 2022 um 14:15
    Zitat von BugFix

    Mal als Tipp: Fang gar nicht erst mit Koda an.

    - Die Controlpositionen und -Größen sind mehr als idiotisch (wer setzt ein Ctrl an x=27 (wenn ncht gerade das ein Ergebnis zur gleichmäßigen Aufteilung ist). In der Regel verwendet man doch "glatte" Werte, damit man erforderliche Anpassungen auch schnell auf andere Ctrl umsetzen kann

    - Die Variablennamen sind sinnfrei. $Label1 und $Button5 sind so aussagekräftig wie ein nasser Laubhaufen.

    - Dadurch, dass du also hinterher erstmal sinnvolle Namen vergeben musst, hast du auch keinerlei Zeitersparnis. Wenn du ein paar mal GUI rein per Hand erstellt hast, bist du auch nicht langsamer als mit Koda.

    Also ganz als Anfänger ist es sicher nicht schlecht eine Hilfe zu haben, aber wenn du dann weißt, wie es geht brauchst du die Krücke nicht mehr. 8o

    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.

  • GUISetAccelerators ohne Wirkung

    • JBO
    • 26. Januar 2022 um 11:14
    Zitat von Oscar

    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.

  • GUISetAccelerators ohne Wirkung

    • JBO
    • 26. Januar 2022 um 11:03
    Zitat von Oscar

    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 ^^

  • GUISetAccelerators ohne Wirkung

    • JBO
    • 26. Januar 2022 um 10:57
    Zitat von Oscar

    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!!

  • GUISetAccelerators ohne Wirkung

    • JBO
    • 25. Januar 2022 um 15:58
    Zitat von Moombas

    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.

  • GUISetAccelerators ohne Wirkung

    • JBO
    • 25. Januar 2022 um 15:24
    Zitat von Moombas

    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.

  • GUISetAccelerators ohne Wirkung

    • JBO
    • 25. Januar 2022 um 14:37
    Zitat von Moombas

    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 :)

  • GUISetAccelerators ohne Wirkung

    • JBO
    • 25. Januar 2022 um 13:20

    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:

    C
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiRichEdit.au3>
    
    Global $iMsg
    Global $sTitle = "Hallo Welt"
    
    ; Programmfenster erstellen
    ; FrameGUI mit Menüzeile:
    Global Const $hGUI = GUICreate( $sTitle & '-Exporter', 600, 420, Default, Default, Default, BitOR($WS_EX_COMPOSITED, $GUI_WS_EX_PARENTDRAG ) )
    Global Const $FileMenu = GUICtrlCreateMenu( "File" )
       Global Const $FileOpenExcelFile = GUICtrlCreateMenuItem( "Open Excel-File"&@TAB&"Ctrl+O", $FileMenu )
       Global Const $FileCreateExport = GUICtrlCreateMenuItem( "Create Export"&@TAB&"Ctrl+C", $FileMenu )
       Global Const $FileExit = GUICtrlCreateMenuItem( "Exit"&@TAB&"Ctrl+X", $FileMenu )
    Global Const $ExportMenu = GUICtrlCreateMenu( "Export" )
       Global Const $ExportRawExport = GUICtrlCreateMenuItem( "Raw Export"&@TAB&"Ctrl+R", $ExportMenu )
       Global Const $ExportXMLExport = GUICtrlCreateMenuItem( "XML Export"&@TAB&"Ctrl+M", $ExportMenu )
    Global Const $ShowMenu = GUICtrlCreateMenu( "Show" )
       Global Const $ShowHEEEINI = GUICtrlCreateMenuItem( "HEEE.INI", $ShowMenu )
       Global $ShowHRAViewerINI = GUICtrlCreateMenuItem( "hraviewer.ini", $ShowMenu )
       If Not IsAdmin() Then GUICtrlSetState( $ShowHRAViewerINI, $GUI_DISABLE )
    Global Const $PropertiesMenu = GUICtrlCreateMenu( "Properties" )
       Global Const $HEEEProperties = GUICtrlCreateMenuItem( "HEEE Properties", $PropertiesMenu )
    Global Const $HelpMenu = GUICtrlCreateMenu( "Help" )
       Global Const $Help = GUICtrlCreateMenuItem( "Help", $HelpMenu )
       Global Const $About = GUICtrlCreateMenuItem( "About", $HelpMenu )
    Global Const  $aAccelTable[7][2] = [["{F1}", $Help],["^o", $FileOpenExcelFile],["^c", $FileCreateExport],["!x", $FileExit],["^r", $ExportRawExport],["^m", $ExportXMLExport]]
    GUISetAccelerators($aAccelTable, $hGUI)
    GUISetState( @SW_SHOW )
    
    ; Hauptfenster
    Global Const  $hMainGUI = GUICreate( "", 600, 400, 0, 0, BitOR($WS_POPUP,$WS_CHILD), $WS_EX_MDICHILD, $hGUI)
    Global $Label = GUICtrlCreateLabel( "Hier könnte ihre Werbung stehen!", 10, 10, 250, 23 )
    GUICtrlSetFont( -1, 12, 400, 0, "Calibri" )
    Global $idStudieList = GUICtrlCreateList( "", 10, 43, 250, 344 )
    Global Const $idExcelFileBtn = GUICtrlCreateButton( "Select Excel File", 265, 10 )
    Global Const $idMainExportAllBtn = GUICtrlCreateButton( "Export all", 515, 2, 75, 25 )
    Global Const $idMainRAWExportBtn = GUICtrlCreateButton( "Raw-Export", 270, 215, 75, 25 )
    Global Const $idMainXMLExportBtn = GUICtrlCreateButton( "XML-Export", 270, 250, 75, 25 )
    Global Const $idCreateExport = GUICtrlCreateButton( "Create Export", 270, 295, 75, 25 )
    Global Const $idLoadStudy = GUICtrlCreateButton( "Load Study", 270, 330, 75, 25 )
    Global Const $idExitBtn = GUICtrlCreateButton( "Exit", 270, 365, 75, 25 )
    Global $idMsgBox = _GUICtrlRichEdit_Create( $hMainGUI, "Messages and Errors", 355, 30, 235, 360, BitOR( $ES_READONLY, $ES_MULTILINE ) )
    GUISetState( @SW_SHOW )
    
    WinActivate( $hGUI )
    
    while 1
       $iMsg = GUIGetMsg()
       Switch $iMsg
          Case $GUI_EVENT_CLOSE, $idExitBtn, $FileExit
             ExitLoop
          Case $FileOpenExcelFile
             ConsoleWrite( "File open Excel-File" & @CRLF )
          Case $FileCreateExport
             ConsoleWrite( "File create Export" & @CRLF )
          Case $ExportRAWExport
             ConsoleWrite( "Export RAW-Export" & @CRLF )
          Case $ExportXMLExport
             ConsoleWrite( "Export XML-Export" & @CRLF )
          Case $ShowHEEEINI
             ConsoleWrite( "Show HEEE.INI" & @CRLF )
          Case $ShowHRAViewerINI
             ConsoleWrite( "Show HRAViewer.INI" & @CRLF )
          Case $Help
             ConsoleWrite( "Help Help" & @CRLF )
          Case $About
             ConsoleWrite( "Help About" & @CRLF )
       EndSwitch
    WEnd
    GUIDelete($hMainGUI)
    Alles anzeigen

    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!?

  • GUISetAccelerators ohne Wirkung

    • JBO
    • 25. Januar 2022 um 12:38

    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:

    AutoIt
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiRichEdit.au3>
    
    ; Programmfenster erstellen
    ; FrameGUI mit Menüzeile:
    Const $hGUI = GUICreate( "Beispiel", 600, 417, Default, Default, Default, BitOR($WS_EX_COMPOSITED,$GUI_WS_EX_PARENTDRAG) )
    Const $FileMenu = GUICtrlCreateMenu( "File" )
       Const $FileExit = GUICtrlCreateMenuItem( "Exit"&@TAB&"Ctrl+X", $FileMenu )
    Const $ExportMenu = GUICtrlCreateMenu( "Export" )
       Const $ExportRawExport = GUICtrlCreateMenuItem( "Raw Export"&@TAB&"Ctrl+R", $ExportMenu )
       Const $ExportXMLExport = GUICtrlCreateMenuItem( "XML Export"&@TAB&"Ctrl+M", $ExportMenu )
    Const $HelpMenu = GUICtrlCreateMenu( "Help" )
       Const $Help = GUICtrlCreateMenuItem( "Help", $HelpMenu )
       Const $About = GUICtrlCreateMenuItem( "About", $HelpMenu )
    Local $aAccelTable[6][2] = [["{F1}", $Help],["!x", $FileExit],["^r", $ExportRawExport],["^m", $ExportXMLExport],["^a", $About],["^h", $HelpMenu]]
    GUISetAccelerators($aAccelTable, $hGUI)
    GUISetState( @SW_SHOW )
    
    ; Hauptfenster
    Const $hMainGUI = GUICreate( "", 600, 400, 0, 0, BitOR($WS_CHILD, $WS_VISIBLE), Default, $hGUI)
    Local $Label = GUICtrlCreateLabel( "Hier könnte Ihre Werbung stehen!", 10, 10, 250, 23 )
    GUICtrlSetFont( -1, 12, 400, 0, "Calibri" )
    Const $idExitBtn = GUICtrlCreateButton( "Exit", 270, 365, 75, 25 )
    Local $idMsgBox = _GUICtrlRichEdit_Create( $hMainGUI, "Messages and Errors", 355, 30, 235, 360, BitOR( $ES_READONLY, $ES_MULTILINE ) )
    GUISetState( @SW_SHOW )
    
    while 1
       $iMsg = GUIGetMsg()
       Switch $iMsg
          Case $GUI_EVENT_CLOSE, $idExitBtn, $FileExit
             ExitLoop
       EndSwitch
    WEnd
    GUIDelete($hMainGUI)
    Alles anzeigen

    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

  • RUN startet Datei mit Teilnamen des gewünschten Dateinamens

    • JBO
    • 17. Januar 2022 um 15:51

    Frage zum Thema: Gibt es sowas wie:

    Code
    AutoItSetOption( "WinTitleMatchMode", 3 ) ;Titel müssen immer exakt übereinstimmen

    nicht auch für Dateinamen?

  • IniWrite Problem

    • JBO
    • 17. Januar 2022 um 13:23
    Zitat von Moombas

    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.

  • GUI zerschießt sich beim Minimieren

    • JBO
    • 17. Januar 2022 um 13:17

    ahh, super, es funktioniert. Minimieren und verschieben funktioniert ohne Probleme.

    DANKE!!

  • IniWrite Problem

    • JBO
    • 17. Januar 2022 um 10:40

    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 :(

  • IniWrite Problem

    • JBO
    • 14. Januar 2022 um 11:45

    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)

  • IniWrite Problem

    • JBO
    • 14. Januar 2022 um 11:36

    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.

  • IniWrite Problem

    • JBO
    • 14. Januar 2022 um 11:24
    Zitat von Moombas

    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?

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™