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

Beiträge von albie

  • "Formularabfrage" oder "Array-Ausgabe lässt sich nicht verwenden"

    • albie
    • 11. November 2016 um 13:45

    Kanashius:
    ein paar kleine Fehler haben sich tatsächlich in dein Script eingeschlichen, aber das Prinzip ist klar. Die Ideen habe ich aufgenommen. Mittlerweile entdecke ich immer mehr tolle Befehle in Autoit, so dass ich mein Progrämmchen mittlerweile ganz anders aufbauen würde. Jetzt mache ich es aber erstmal so wie es ist fertig. Für Version 2.0 könnte ich mir dann aber schon ein paar grundlegende Anpassungen vorstellen. Aber so ist es ja immer...

    @ Oscar:
    besten Dank für die Infos. Wenn man es sieht, sind die Vorgehensweisen simpel und logisch, man muss nur erstmal dran denken. Nun habe ich wieder was gelernt.

    Kurz eine abschließende Frage:
    wo muss ich denn nachschauen, wenn ich ein Fenster mit erstellen möchte, in welchem zwei Arbeitsbereiche angelegt sind, welche ich innerhalb des Fensters in ihrer Größe verändern möchte? Also: z.B.: das Fenster der Autoit-Hilfe. Der linke Teil ist vom rechten senkrecht getrennt und diesen Bereich kann man verschieben. Gibt es dafür einen Befehl oder eine UDF?

    Gruß

    Albie

  • "Formularabfrage" oder "Array-Ausgabe lässt sich nicht verwenden"

    • albie
    • 9. November 2016 um 21:32

    Hallo Oscar,

    deine Antwort war ja schon rekordverdächtig schnell ;) Besten Dank!

    Deinen Tipp, das Fomular mit Arrays aufzubauen, werde ich mir noch zu Gemüte führen. In diesem Fall hier wird eine Konfigurationsdatei ausgelesen und daraus automatisch das passende Formular erstellt. Da das Formular dann eh vermutlich nur einmal benutzt wird, war mir der Umfang des endstehenden Codes erstmal zweitrangig. Außerdem drängt wie immer die Zeit... Für das nächste Mal habe ich nun ja wieder eine Anregung :)

    Du hast die While-Schleife durch eine For-Next-Schleife ersetzt. Diese hatte ich auch zunächst drin, bin aber aufgrund meines (fehlerhaften) Vorwärtsgehen beim Löschen aber auf Probleme gestossen, die ich versuchte zu umschiffen. Das mit dem BitAND muss ich erst noch durchdenken. Du hast hier nur einen Wert angegeben (GUICtrlRead($atb_all[$i]), $GUI_CHECKED), nicht aber zwei (oder mehr), wie im Manual angegeben. Das Ergebnis dieser Operation muss ich noch mal an Beispielen ausprobieren. Aber dies hier funktioniert ja prima.
    Auf 'ControlGetText' wäre ich übrigens nicht so ohne weiteres gekommen, weil mich hier der Hinweis auf eine Fensteroperation irritiert hätte. So habe ich aber wieder etwas dazu gelernt. Danke.

    Gruß

    Albie

  • "Formularabfrage" oder "Array-Ausgabe lässt sich nicht verwenden"

    • albie
    • 9. November 2016 um 18:38

    Hallo Leute,

    bei der Abfrage eines Formulars bin ich auf ein Hindernis gestossen, das mich derbe aufhält. Dazu habe ich euch mal ein kleines Beispiel eingestellt:

    Spoiler anzeigen


    Testformular.au3

    Das Programm stellt ein Formular dar, in welchem Menüpunkte angeklickt werden können. Nach dem Betätigen des Buttons (dazu bitte runterscrollen) sollen die ausgewählten Felder an das nächste Programm übergeben werden.
    Ein Hinweis zum Programmcode: dieser wird durch ein weiteres Programm on the fly generiert, daher bitte nicht so sehr auf das statische Aussehen konzentrieren.
    Das Problem liegt im Unterprogramm '_AskFormular()', ganz am Ende. Zuvor wird in '_CollectThemes()' ein eindimensionales Array '$atb_all' generiert, welches die Strings aller verwendeten Buttons beinhaltet (ist wieder aus einem Programm heraus geschehen, daher der simple Code, funktioniert aber...). Dieses Array wird hier zu Debugging-Zwecken kurz angezeigt. Bitte wieder schliessen, dann funktioniert auch das Formular. Wenn im Formular einige Punkte ausgewählt werden, sollen die restlichen Zeilen aus dem Array '$atb_all' gelöscht werden. Dafür ist das Unterprogramm '_AskFormular()' da. Theoretisch...
    Der Gedanke war der, das Array der Reihe nach mit GUICtrlRead abzufragen und immer wenn der Wert ungleich 1 ist (der Button also nicht aktiviert ist), diese Zeile mit _ArrayDelete zu löschen. Am Ende sollte das _ArrayDisplay ('Nur aktivierte Boxen?') dann nur die aktivierten Schalter zeigen. Leider ist es aber leer :(
    Soweit ich es analysieren konnte, liegt das Problem wohl am Ausdruck in den Klammern des GUICtrlRead. Dort wird nicht der Inhalt des Arrays dargestellt, sondern nur '-1', also 'nicht existend'.

    Was mache ich hier falsch?

    Gruß

    Albie

  • Inhalt eines Strings ausführen

    • albie
    • 20. September 2016 um 11:37

    Hallo,

    besten Dank für die Infos.
    Und ja, es gibt besseren Programmierstil als meinen ;-), für das nächste Mal habe ich viel gelernt und werde sicher anders an das Problem herangehen.
    Und: die Verwendung der .csv-Datei ist leider Vorgabe und dem Problem geschuldet.

    Und zu guter letzt:
    die Info von Andy mit EVAL() und ASSIGN() hat mein Problem gelöst! Ich hatte bereits angefangen, das Programm komplett umzustricken, um mit einem Array zu arbeiten. So konnte ich den String dann anschließend mit einem einfachen EXECUTE() doch starten.
    Super, vielen Dank für eure Mühe!

    Gruß

    Albie

  • Inhalt eines Strings ausführen

    • albie
    • 19. September 2016 um 13:22

    Hallo Kanashius,


    ich muß meine Anforderungen noch mal spezifizieren: in der Konfigurationsdatei sind die Themen als Variablenname und Anzuzeigender Titel (und Zählvarialble) angegeben. Da in dem zu erzeugenden Formular sowohl Check- als auch Radiobuttons vorkommen sollen und dazu letztere mit einer Überschrift mit Box abgehoben werden sollen, sieht die Datei dann so aus:

    Spoiler anzeigen
    Code
    tbc_allgemein;Allgemein; 0
    tbh_03_thema1;Beschriftung Thema1
        tbc_thema2;Beschriftung Thema2; 0
        tbc_thema3;Beschriftung Thema3; 0
        tbc_thema4;Beschriftung Thema4; 0
    tbc_thema5;Beschriftung Thema5; 0
    tbc_thema6;Beschriftung Thema6; 0
    tbc_thema7;Beschriftung Thema7; 0
    tbh_02_thema8;Beschriftung Thema8
        tbr_thema9;Beschriftung Thema9; 0
        tbr_thema10;Beschriftung Thema10; 0
    ...
    Alles anzeigen

    Erläuterung:
    tbc steht für Checkbox, tbr für Radiobox, tbh für Header, also für ein Label mit Box um die folgenden Radioboxen.
    Die Zahl beim Header ist eine Vereinfachung für den Programm-Code und stellt die Anzahl der folgenden Radioboxen dar, somit die Y-Größe der Box.


    Im Original sind die Themen natürlich durch sprechende Namen ersetzt.
    Daher sollen bei der Abfrage Check- und Radioboxen auch diese Variablennamen verwendet werden. Deine Lösung mit dem Array passt daher leider nicht ganz.


    Das etwas vereinfachte Hauptprogramm sieht folgendermassen aus:

    Spoiler anzeigen
    AutoIt
    Func _Main($iIndex, $bFullClient = False, $bMaxSize = False)
        Local $iMsg, $sCurFilename, $sTmpFile
        Local $p_xpos = 10
        Local $p_xpos_eingerueckt = 28
        Local $iMax_Scroll = 1500 ; Scrollhoehe. Dies spaeter durch Variable ersetzen und max. Formularhoehe berechenen
        Local $count = 0 ; Zaehler fuer Formularaufbau bei GUICtrlCreateGroup bei Radiobuttons
        Local $creategroupzeilen = 0 ; Anzahl der Zeilen in einer GUICtrlCreateGroup. Benoetigt fuer Boxhoehe.
        Local $p_ypos = 100 ; Y-Position der ersten Zeile des Bereichs der Schaltfelder
        Local $rb_counter = 0 ; Zaehlvariable fuer Anzahl Radiobuttons, welche Unterpunkte nach sich ziehen
        Local $iValue ; temporaere Variable zur Zerlegung von $value1 mit "_" als Trenner
    $hGui = GUICreate("LAH-Formulareditor", 385, 600, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX))
    $file = FileOpen("themenbloecke.csv", 0)
        While 1
            Local $line = FileReadLine($file)
            If @error = -1 Then ExitLoop
            $input = StringSplit($line, ";")
            Local $value1 = $input[1]
            Local $value2 = $input[2]
            Local $iValue = StringSplit($value1, "_")
            Local $tb = $iValue[1]
            if $tb = "tbc" then Local $creategroupzeilen = $iValue[2]
            Select
                Case $tb = "tbh"
                    ; Code fuer den Header...
                Case $tb = "tbc"
                    Local $tb_zeile = '$' & $value1 & ' = GUICtrlCreateCheckbox("' & $value2 & '", ' & $p_xpos & ', ' & $p_ypos & ', 300)'
                    $rb_counter = 0
                    $p_ypos = $p_ypos + 20
                    Sleep(200)
                Case $tb = "tbr"
                    ; Code fuer den Radiobutton...
            EndSelect
        GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group    
        GUISetState()
    WEnd
    FileClose($file)
    EndFunc   ;==>_Main
    Alles anzeigen

    Die Zeile, in der der String definiert wird, ist Zeile 27. Der Inhalt dieser Zeile soll dann den Checkbutton erzeugen.
    Wie gesagt: lese ich den Inhalt des String $tb_zeile aus und plaziere ihn manuell im Code, so wird die Checkbox brav erzeugt. Aber wie geht es automatisch?

    Beim weiteren Recherchieren bin ich noch auf einen Thread vom Januar gestossen: "@crlf umwandeln in echten Zeilenumbruch, in Analogie @tab etc.". Das passt aber leider nicht so ganz.

    Gruß

    Albie

  • Inhalt eines Strings ausführen

    • albie
    • 19. September 2016 um 09:44

    Hallo,

    in einem längeren Script, welches bisher gut funktioniert, möchte ich in einer GUI ein paar Checkboxen einfügen.
    Füge ich diese normal als Code ein, so funktioniert alles:

    $punkt_allgemein = GUICtrlCreateCheckbox("Allgemein",10,120,300)

    Da der Inhalt der Checkboxen aber aus einer externen Datei ausgelesen wird, muss ich diese Zeilen aber zusammenbauen lassen:

    Local $tb_zeile = '$' & $value1 & ' = GUICtrlCreateCheckbox("' & $value2 & '", ' & $p_xpos & ', ' & $p_ypos & ', 300)'

    der Inhalt von $tb_zeile entspricht genau der oben aufgeführten Zeile. Manuell eingesetzt funktioniert sie.

    Die Frage: Wie kann ich nun diesen String ausführen, damit meine Checkbox (und alle weiteren) in der GUI erscheinen?
    Ich vermute, dass ich hier den Wald vor Bäumen nicht sehe, aber ich krieg's verflixt nochmal nicht hin... Kennt jemand eine Lösung?

    Gruß

    albie

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™