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

Beiträge von Moombas

  • Variable in Array-Namen möglich?

    • Moombas
    • 2. Oktober 2023 um 10:00
    Zitat von kilo

    Hallo Moombas,

    auch Dir herzlichen Dank für die Antwort! Vielleicht wird durch meinen Beitrag #5 etwas deutlicher, was ich möchte.

    DIe Testwerte sollen nicht in alle in die erste Spalte, das es sich um unterschiedliche Daten handelt (2 Datumswerte und einen €-Wert)

    LG Kilo

    Ich hätte das dennoch so verstanden:

    AutoIt
    Opt('MustDeclareVars', 1)
    
    #include <Array.au3>
    
    Global $A_Test[1][3]
    Global Const $Bezahlt = 0, $Bestellt = 1, $Preis = 2, $Artikelnummer = 3
    Global $col
    
    ;Array Init;
    _ArrayAdd($A_Test, 'Bezahlt|Bestellt|Preis')
    
    $col = $Bezahlt
    If $col > (Ubound($A_Test, $UBOUND_COLUMNS) - 1) then _ArrayColInsert($A_Test ,$col)
    For $x = 2 to 3
        If $x > (Ubound($A_Test, $UBOUND_ROWS) - 1) then
            _ArrayAdd($A_Test, $x, $col)
        Else
            $A_Test[$x][$col] = $x
        EndIf
    Next
    $A_Test[0][0] = Ubound($A_Test, $UBOUND_ROWS) - 1
    $A_Test[0][1] = Ubound($A_Test, $UBOUND_COLUMNS) - 1
    
    _ArrayDisplay($A_Test)
    
    $col = $Bestellt
    If $col > (Ubound($A_Test, $UBOUND_COLUMNS) - 1) then _ArrayColInsert($A_Test ,$col)
    For $x = 2 to 3
        If $x > (Ubound($A_Test, $UBOUND_ROWS) - 1) then
            _ArrayAdd($A_Test, $x & ' Stück', $col)
        Else
            $A_Test[$x][$col] = $x & ' Stück'
        EndIf
    Next
    $A_Test[0][0] = Ubound($A_Test, $UBOUND_ROWS) - 1
    $A_Test[0][1] = Ubound($A_Test, $UBOUND_COLUMNS) - 1
    
    _ArrayDisplay($A_Test)
    
    $col = $Preis
    If $col > (Ubound($A_Test, $UBOUND_COLUMNS) - 1) then _ArrayColInsert($A_Test ,$col)
    For $x = 2 to 3
        If $x > (Ubound($A_Test, $UBOUND_ROWS) - 1) then
            _ArrayAdd($A_Test, $x & ' €', $col)
        Else
            $A_Test[$x][$col] = $x & ' €'
        EndIf
    Next
    $A_Test[0][0] = Ubound($A_Test, $UBOUND_ROWS) - 1
    $A_Test[0][1] = Ubound($A_Test, $UBOUND_COLUMNS) - 1
    
    _ArrayDisplay($A_Test)
    MsgBox(0, 'Bezahlt' , 'Zeile 2 bezahlt: '  & $A_Test[2][$Bezahlt])
    MsgBox(0, 'Bestellt', 'Zeile 2 bestellt: ' & $A_Test[2][$Bestellt])
    MsgBox(0, 'Preis'    , 'Zeile 2 Preis: '    & $A_Test[2][$Preis])
    
    
    ;Oder per Funktion
    For $x = 2 to 10
        _AddData($Artikelnummer, $x, $x * 2, 'Artikelnummer')
    Next
    _ArrayDisplay($A_Test)
    
    
    Func _AddData($Col, $Row, $Data, $Name = '')
        If $col > (Ubound($A_Test, $UBOUND_COLUMNS) - 1) then
            _ArrayColInsert($A_Test ,$col)
            $A_Test[1][$Col] = $Name
        EndIf
        If $Row > (Ubound($A_Test, $UBOUND_ROWS) - 1) then
            _ArrayAdd($A_Test, $Data, $col)
        Else
            $A_Test[$x][$col] = $Data
        EndIf
    
        $A_Test[0][0] = Ubound($A_Test, $UBOUND_ROWS) - 1
        $A_Test[0][1] = Ubound($A_Test, $UBOUND_COLUMNS) - 1
    EndFunc
    Alles anzeigen
  • Variable in Array-Namen möglich?

    • Moombas
    • 2. Oktober 2023 um 09:36
    Zitat von Peter S. Taler

    #include <Array.au3>

    global $_array [500]

    For $i = 1 To 100

    $_array [$i] = 22+$i

    Next

    _ArrayDisplay ($_array)

    Ist möglich....

    Alles anzeigen

    Dann hast du aber zig Leerzeilen, die der TE aber (verständlicherweise) nicht möchte (wenn ichs richtig verstanden habe).

    Daher mein Lösungsangebot das beim Einlesen dyn. zu erweitern wobei das sicherlich nnoch besser geht aber das war jetzt Q&D.

  • Variable in Array-Namen möglich?

    • Moombas
    • 2. Oktober 2023 um 09:28

    @kilo : In jeder Spalte hast du ja die gleiche Anzahl an Zeilen, sprich nocrmalerweise machst du das dann so:

    AutoIt
    $arData[0][0] = Ubound($arData, $UBOUND_ROWS) - 1 ;Für die Anzahl der Zeilen, da $UBOUND_ROWS der Defaultwert ist, könntest du ihn auch weglassen
    $arData[0][1] = Ubound($arData, $$UBOUND_COLUMNS) - 1 ;Für die Anzahl der Spalten (falls gewünscht)

    Wegen deiner Testwerte: Die sollten bestimmt alle in Spalte 1, richtig?

    Ich hänge dir mal ein Beispiel an (Achtung, das ich hier copy/paste gemacht habe, anstatt eine Funktion zu nutzen ist nur zu Darstellungs/Verständniszwecken!):

    AutoIt
    Opt('MustDeclareVars', 1)
    
    #include <Array.au3>
    
    Global $A_Test[1][2]
    Global $col
    
    $col = 0
    If $col > (Ubound($A_Test, $UBOUND_COLUMNS) - 1) then _ArrayColInsert($A_Test ,$col)
    For $x = 1 to 3
        If $x > (Ubound($A_Test, $UBOUND_ROWS) - 1) then
            _ArrayAdd($A_Test, 'Testwert ' & $x, $col)
        Else
            $A_Test[$x][$col] = 'Testwert ' & $x
        EndIf
    Next
    $A_Test[0][0] = Ubound($A_Test, $UBOUND_ROWS) - 1
    $A_Test[0][1] = Ubound($A_Test, $UBOUND_COLUMNS) - 1
    
    _ArrayDisplay($A_Test)
    
    $col = 1
    If $col > (Ubound($A_Test, $UBOUND_COLUMNS) - 1) then _ArrayColInsert($A_Test ,$col)
    For $x = 1 to 3
        If $x > (Ubound($A_Test, $UBOUND_ROWS) - 1) then
            _ArrayAdd($A_Test, 'Testwert ' & $x, $col)
        Else
            $A_Test[$x][$col] = 'Testwert ' & $x
        EndIf
    Next
    $A_Test[0][0] = Ubound($A_Test, $UBOUND_ROWS) - 1
    $A_Test[0][1] = Ubound($A_Test, $UBOUND_COLUMNS) - 1
    
    _ArrayDisplay($A_Test)
    
    $col = 2
    If $col > (Ubound($A_Test, $UBOUND_COLUMNS) - 1) then _ArrayColInsert($A_Test ,$col)
    For $x = 1 to 3
        If $x > (Ubound($A_Test, $UBOUND_ROWS) - 1) then
            _ArrayAdd($A_Test, 'Testwert ' & $x, $col)
        Else
            $A_Test[$x][$col] = 'Testwert ' & $x
        EndIf
    Next
    $A_Test[0][0] = Ubound($A_Test, $UBOUND_ROWS) - 1
    $A_Test[0][1] = Ubound($A_Test, $UBOUND_COLUMNS) - 1
    
    _ArrayDisplay($A_Test)
    
    $col = 3
    If $col > (Ubound($A_Test, $UBOUND_COLUMNS) - 1) then _ArrayColInsert($A_Test ,$col)
    For $x = 1 to 4
        If $x > (Ubound($A_Test, $UBOUND_ROWS) - 1) then
            _ArrayAdd($A_Test, 'Testwert ' & $x, $col)
        Else
            $A_Test[$x][$col] = 'Testwert ' & $x
        EndIf
    Next
    $A_Test[0][0] = Ubound($A_Test, $UBOUND_ROWS) - 1
    $A_Test[0][1] = Ubound($A_Test, $UBOUND_COLUMNS) - 1
    
    _ArrayDisplay($A_Test)
    Alles anzeigen
  • Bestimmte Indizes in eine neue Textdatei schreiben

    • Moombas
    • 29. September 2023 um 13:55

    Also: Nagel mich nicht drauf fest aber ich denke @CRLF wird shcon mal falsch sein, da jedes @CRLF beim einlesen von der Datei ins Array = Eine Zeile (Row) ergeben wird.

    Daher ersetze: Local $s_Text = _ArrayToString($aArray1, @CRLF, ;??????? ) durch

    AutoIt
    Local $i_StartRow = 1, $i_EndRow = 4
    Local $s_Text = _ArrayToString($aArray1, Default, $i_StartRow, $i_EndRow)

    Dann kopiert er Zeile 1-4 des Arrays in deinen String.

  • [UIBB.au3] User Interface mit automatischer Anordnung der Ctrls - Vorschläge / Wünsche / Ideen

    • Moombas
    • 27. September 2023 um 15:30
    Zitat von mumpel

    Ich meine das Viereck zwischen Schließkreuz und "Minimieren". Das muss ja aktiv sein, damit man das Verhalten testen kann.

    Nein das Verhalten kann man schon testen, in den man am Rand die Fenstergröße ändert und das Verhalten sich anschaut. Ein maximiertes Fenster (Viereck = Maximieren) wird halt nur autom. auf die maximal möglichen Werte gesetzt, macht aber im Prinzip nichts anderes.

    Den Rest hat Mars bereits erklärt.

    (Folgendes ist nicht böse gemeint) Bitte überlege mal wenn du sowas schreibst ob andere verstehen können was du möchtest bevor du es abschickst, das macht es einfacher die korrekte Antwort zu geben ohne immer wieder Nachfragen zu müssen.

  • [UIBB.au3] User Interface mit automatischer Anordnung der Ctrls - Vorschläge / Wünsche / Ideen

    • Moombas
    • 27. September 2023 um 13:14
    Zitat von mumpel

    WIe schalte ich "Fenster vergrößern/verkleinern" aktiv?

    Irgendwie verstehe ich dich wieder nicht... Habe das Beispiel "big" per F5 gestartet und kann die Größe des Fensters ändern wie ich will ohne etwas zu aktivieren.

  • [UIBB.au3] User Interface mit automatischer Anordnung der Ctrls - Vorschläge / Wünsche / Ideen

    • Moombas
    • 27. September 2023 um 11:02

    Kann man machen, wird aber nicht immer benötigt und kann alleine für die GUI Erstellung echt zu einem Monstercode werden.

    Ich habe mir das so angewöhnt, das der "sprechende Name" das Array selber ist ($aFileButtons) ich aber durch die erstellte Reihenfolge etc. trotzdem weiß welcher was ist und habe einen viel übersichtlicheren Code.

    Je nach GUI dann natürlich auch mehrere solcher Arrays. Aber im Ernst: Es ist der Beispielcode, wie man das final selber umsetzt muss jeder selber wissen, es geht hier um das dynamische Verhalten der GUI beim Verändern der Fenstergröße und das funktioniert doch super soweit ich sehe. Mit fehlt halt nur der "min. Wert".

  • [UIBB.au3] User Interface mit automatischer Anordnung der Ctrls - Vorschläge / Wünsche / Ideen

    • Moombas
    • 27. September 2023 um 10:49

    Ok, dann hättest du diene Antwort anders formulieren müssen.

    Ja, anstatt

    AutoIt
    For $i = 0 to 12 Step 1
        $btn = _UIBB_Insert($hLeftTop, GUICtrlCreateButton)
        GUICtrlSetData($btn, 'Button Nummer ' & $i)
        GUICtrlSetBkColor($btn, Random(0, 0xFFFFFF)) ; _UIBB_Insert gibt die original Ctrl-IDs zurück mit denen man alles wie üblich machen kann.
    Next

    müsste dort dann eben der Arrayverweis rein:

    AutoIt
    #include <Array.au3>
    ;...
    Global $aBtn[], $btn
    ;...
    For $i = 0 to 12 Step 1
        $btn = _UIBB_Insert($hLeftTop, GUICtrlCreateButton)
        _ArrayAdd($aBtn, $btn)
        GUICtrlSetData($btn, 'Button Nummer ' & $i)
        GUICtrlSetBkColor($btn, Random(0, 0xFFFFFF)) ; _UIBB_Insert gibt die original Ctrl-IDs zurück mit denen man alles wie üblich machen kann.
    Next

    Zugriff auf die Buttons wäre dann über $aBtn[X] möglich.

    Wegen der GUI Größe Anhand der Auflösung, müsste man 2 Sachen machen:

    1. Eine default Auflösung (z.B. 1024*768) (Ohne Angabe einer Default Auflösung = Multiplikator immer * 1)

    2. Darauf aufbauend dann die aktuelle Auflösung auslesen und sämtliche Größen mit dem entsprechendem Faktor multiplizieren.

    Wobei dabei das ganze mit Vorsicht zu genießen ist, da ggf. das Seitenverhältnis leidet, sprich eigentlich muss man den kleineren der beiden Multiplikatoren nehmen.

    Beispiel:

    Default: 1024 * 768

    Du hast: 1700 * 1000

    Multiplikatoren: 1,66 * 1,30 => finaler Multiplikator muss dann 1,3 sein damit das Seitenverhältnis der GUI bestehen bleibt und du keine Verzerrungen produzierst.

    Und das Gleiche müsste man dann für DPI skalierung etc. machen aber das übersteigt meine Kenntnisse :Glaskugel:

    Oder habe ich da gerade einen Denkfehler? :/

  • [UIBB.au3] User Interface mit automatischer Anordnung der Ctrls - Vorschläge / Wünsche / Ideen

    • Moombas
    • 27. September 2023 um 09:17
    Zitat von mumpel

    Schaltflächen nicht in Schleife erstellen, weil sie sonst nicht nutzbar sind.

    Das musst du mir mal erklären?

    Mache ich regelmäßig (wenn der Name egal ist und die X,Y,W,H Werte errechnet werden können), dann wird ein Array genutzt um die Handles abzulegen und damit sind die Buttons einwandfrei nutzbar.

  • [UIBB.au3] User Interface mit automatischer Anordnung der Ctrls - Vorschläge / Wünsche / Ideen

    • Moombas
    • 27. September 2023 um 08:26
    Zitat

    Hinweise:

    - Alle Größenangaben die man setzt sind nur ein "Vorschlag". Sie werden nicht zwingend eingehalten (z.B. wenn man ein 100px breites Feld mit 3 Ctrls mit je 50px breite befüllt. Dann werden die logischerweise etwas gestaucht).

    Hmm, wäre dann nicht evtl. besser das diese im "nicht sichtbaren Bereich" der Box landen. Also Diese Werte als min. Wert angesehen werden?

    Wenn der Programmierer sich das dann anschaut wird er merken, das da was nicht passt (3*50 kann nicht in 100 passen) und muss es halt anpassen. Ich kenne das zumindest so von Lazarus / Delphi, wobei man dort ggf. noch das Problem hat, das diese dann beim Vergrößern des Fensters trotzdem mit skalieren und im "unsichtbaren" Bereich bleiben (unschön), was ggf. zu Problemen führen kann um über haupt die entspr. Elemente zu packen zu bekommen.

    Alternativ: sowas führt dazu, das das Parent vergrößert wird (müsste dann rekursiv passieren falls notwendig).

    Alternative 2: Eine Fehlermeldung (Consolewrite/MsgBox) generieren, wenn x+breite oder y+höhe größer sind als die Höhe bzw. Breite des Parents und das Programm geschlossen wird?

  • QR-Code-Generator

    • Moombas
    • 26. September 2023 um 14:46
    Zitat von Mars

    Apropos "UI Skalierung". Ich habe gestern und heute ein bisschen gebastelt. Im Endeffekt brauche ich das auch selbst, war aber immer viel zu faul eine richtige UDF daraus zu machen. Die Methode verwende ich aber eigentlich immer um GUIs aufzubauen.

    Im Anhang ist ein kleiner erster Eindruck der UDF. Das wird dir jetzt nicht viel bringen, weil man da das komplette UI vollständig neu gestalten müsste, aber wenn die UDF mal fertig ist hoffe ich, dass Skalierungsprobleme und Anordnungsprobleme bei User Interfaces der Vergangenheit angehören. Ich habe genug hässliche GUIs gesehen und genug hardgecodete Koordinaten und For-Loops um "schön angeordnete Buttons" zu produzieren. Das alles braucht man damit nicht mehr.

    Die Erklärungen in den Kommentaren ist rudimentär. Genaueres gibts dann irgendwann (wer weiß wann....) in einem eigenen Thread.

    lg

    M

    Hmm, darüber hatte ich auch shcon mal nachgedacht, es dann aber verworfen mangels Zeit und Geduld ;) Aber wenn jemand sowas hin bekommen würde wäre das ein immenser Zugewinn.

  • Stirbt Autoit?

    • Moombas
    • 25. September 2023 um 11:22

    Hmm, auf der Webseite hinkt schon das erste Beispiel: =WENN(A2<1000 UND B2=“München“;150;“Keine Provision“) kann nicht funktionieren (auch das nicht: =WENN(A2<1000*UND(B2=“München“);150;“Keine Provision“)), macht man es aber richtig: =WENN(UND(A2<1000;B2="München");150;“Keine Provision“) funktionierts, (/Sarkassmuss on) schon seltsam (/Sarkasmus off)....

    Es ist halt wie in AutoIt und anderen Programmiersprachen: Wendest du die Logik falsch (oder gar nicht) an, bekommst du auch nicht das (korrekte) Ergebnis.

    Den Rest der Beispiele habe ich daher gleich mal ignoriert.

    Sicherlich gibt es in Excel etc. auch Fehler aber aktuell sind mir keine bekannt, die Bestand haben.

    Und BTT:

    Wie bereits angemerkt: Keine Updates mehr für eine Software heißt nicht, das sie "tot" ist, sondern kann bedeuten das sie einfach funktioniert und z.B. kein Update benötigt um auf aktuellen OS zu laufen.

    Das einige SW Hersteller dabei an den GUI's rumdrehen wie wild ist leider so, auch das neue (noch Beta) Design von Outlook geht komplett in die falsche Richtung (Verringerung der Produktivität anstatt Steigerung: Microsoft ToDo <X). Ich finde das auch nicht gut aber das ist nicht Grundsätzlich immer der Fall.

  • Stirbt Autoit?

    • Moombas
    • 25. September 2023 um 08:36

    Naja Alina : Wegne der Office Geschichte: Deswegen kann man beim Speichern das entsprechend auswählen welches Format man haben möchte. Will man sicher gehen das andere mit veralteten Versionen die Datei noch öffnen können, muss man sie entsprechend speichern. Und bei Office gibt es div. Nachbesserungen (nicht alle Sichtbar), wobei mich das kommende (KI Integration) durchaus stört, sollte es nicht abschaltbar sein. Und wer das Ding auch noch im Abo (und/oder als Web-Only) kauft (habe bisher keinen guten Grund gefunden) und am besten noch über die regulären Wege, ist selber Schuld.

    Habe für Office 2019 PE (kein Abo) glaube ich unter 5€/(?OEM?)Lizenz bezahlt (legal versteht sich).

    Und tröste dich, der Sarkasmus von Peter ist bei mir auch nicht wirklich angekommen. Ja, ich habe ihn gesehen und verstanden, hat aus meiner Sicht aber nix zum Thema beigetragen.

    Peter S. Taler : Wo ist da das Problem? Funktioniert einwandfrei, hatte damit noch nie Probleme und habe weitaus komplexere Formeln als dieses Beispiel in Verwendung)

    (Links das Ergebnis, dann die Formel)

  • Win10

    • Moombas
    • 22. September 2023 um 15:28

    Interessant, ich kannte bisher nur wbadmin (auch von MS selber) als "richtiges" recovery das auch während der Windowsinstallation verwendet werden kann um den entsprechenden Stand wieder einzuspielen.

  • Analyse von Daten

    • Moombas
    • 22. September 2023 um 09:55

    Wegen der Farbe wäre es im Prinzip so:

    AutoIt
    If Mod($deineZahl, 1) = 0 then 
      GUICtrlSetBkColor($Button1, 0xFF0000); Rot
    Else
      GUICtrlSetBkColor($Button1, 0x888888); Annahme für Grau
    Endif

    Du kannst das ganze in einer Schleife durchlaufen lassen, sofern du die Button Id's z.B. in ein Array geschrieben hast:

    AutoIt
    For $i = 1 to $aButtons[0]
        If Mod($deineZahl, $i) = 0 then 
          GUICtrlSetBkColor($aButtons[$i], 0xFF0000); Rot
        Else
          GUICtrlSetBkColor($aButtons[$i], 0x888888); Annahme für Grau
        Endif
    Next
  • Stirbt Autoit?

    • Moombas
    • 21. September 2023 um 11:29

    Das hat ja nix damit zu tun das es "stirbt", wenn es nicht mehr vieler Änderungen etc. braucht kommt halt auch nicht viel, wobei ich selber nicht in den entsprechenden engl. Foren etc. unterwegs bin wo Bugs etc. Thematisiert und behandelt werden.

    Ich denke da ist noch genug Bewegung drin, vergess halt nicht das AutoIt nix kostet. Sprich da steht keine Firma hinter die € machen will.

    AutoIt (und jede andere (Programmier-) Sprache) stirbt erst, wenn sie immer weniger oder gar nicht mehr genutzt wird.

  • GUI dauerhaft im Vordergrund

    • Moombas
    • 20. September 2023 um 08:01

    Müsste mit winactivate() (https://www.autoitscript.com/autoit3/docs/f…WinActivate.htm) gehen.

  • Win10

    • Moombas
    • 18. September 2023 um 07:57

    Hey Alina : Warum nicht gleich auf W11?

    Und so teuer sind die Lizenzen für Windows doch nicht mehr, sonfern man sie nicht direkt bei Microsoft kauft und in der Regel bei aktuellen Mainboardds (sofern es deinen Knall überlebt hat) auch dort gespeichert.

    Ich lege mir diese Lizenzen nochmal auf nem Backup-Datenträger ab. Windows kannst du dann erst mal ohne Lizenz installieren und das später nachtragen oder notfalls mit einem weiteren PC/Smartphone die Datei auslesen (liegt bei mir auf dem NAS) und dann eintippen.

  • Fastluso lässt grüßen

    • Moombas
    • 12. September 2023 um 12:08

    Na dann: Herzlich willkommen!

    Und keine scheu zu fragen, wir helfen gerne ;)

  • Datei-Anzeige

    • Moombas
    • 1. September 2023 um 15:03

    Ich meine es ging darum, das man manchmal den ternären Operator in () setzen muss aber wann/warum und ob das mittlerweile gefixt ist, weiß ich nicht mehr.

    Ein Beispiel was ich auf die schnele gefunden habe aber schon sehr alt ist: https://www.autoitscript.com/forum/topic/16…g-in-some-ways/

    War einer der Gründe warum ich bei If..Then..else geblieben bin (wobei bei mir oft auch mehr als die pure Rückgabe eines Wertes gemacht werden muss).

    Wie gesagt, kann mich auch falsch erinnern und so lange es bei dir klappt ist doch super.

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™