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

Beiträge von alpines

  • Hilfe zu _IsPressed bei Passwordfeldern

    • alpines
    • 28. Januar 2019 um 13:16

    Du kannst _WinAPI_InvalidateRect verwenden um das Control neu zeichnen zu lassen, dann wird das Passwortchar auch aktualisiert.

    Und bitte nur einmal _SendMessage verwenden, ansonsten wird das Control mit Millionen (und ich untertreibe nicht) Nachrichten zugemüllt.

    C
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    
    #include <SendMessage.au3>
    #include <WinAPI.au3>
    
    Global $bSendAlready = False
    
    Global $hGUI = GUICreate("Form1", 293, 136, 192, 124)
    
    Global $hInput = GUICtrlCreateInput("Input1", 48, 64, 161, 21)
    _SendMessage(GUICtrlGetHandle($hInput), $EM_SETPASSWORDCHAR, Asc("*"), 0)
    
    Global $hIcon = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -105, 232, 58, 32, 32)
    
    GUISetState(@SW_SHOW, $hGUI)
    
    While Sleep(10)
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
    
            Case $hIcon
                ConsoleWrite("Zeige an" & @CRLF)
                _SendMessage(GUICtrlGetHandle($hInput), $EM_SETPASSWORDCHAR, 0, 0)
                _WinAPI_InvalidateRect(GUICtrlGetHandle($hInput))
                $bSendAlready = True
    
            Case $GUI_EVENT_PRIMARYUP
                If $bSendAlready Then
                    ConsoleWrite("Verstecke" & @CRLF)
                    _SendMessage(GUICtrlGetHandle($hInput), $EM_SETPASSWORDCHAR, Asc("*"), 0)
                    _WinAPI_InvalidateRect(GUICtrlGetHandle($hInput))
                    $bSendAlready = False
                EndIf
    
        EndSwitch
    WEnd
    Alles anzeigen
  • Rechentool GUI Fragen

    • alpines
    • 26. Januar 2019 um 11:37
    Zitat von elysium

    So, 5. EDIT, jetzt habe ich es aber glaub geschafft:

    Nimm lieber das RegEx ^\d*[1-9]$. Damit akzeptierst du nur Zahlen >= 1 welche keinen Dezimalbruch haben.

    Ich weiß nämlich nicht ob du nur auf den Punkt prüfst und das RegEx noch nutzt oder nur die Prüfung hast.

  • Wie Browser-Scrolllbar steuern?

    • alpines
    • 26. Januar 2019 um 01:03

    Auf welcher Seite willst du das denn machen? Es gibt bessere Möglichkeiten als es im Browser zu machen. Da kann sogar der gesamte Broser wegfallen.

    Deshalb wäre es schön wenn du uns verrätst wo du was machen möchtest.

  • Wie Browser-Scrolllbar steuern?

    • alpines
    • 26. Januar 2019 um 00:12

    :rofl: Kreativ, geb ich zu.

    _GUIScrollBars_Init erzeugt eine scrollbare GUI, du würdest - wenn das überhaupt klappt - einfach am Control vorbeiscrollen.

    Wenn du scrollen möchtest musst du eine Window Message an das Fenster schicken mit den Informationen, dass dort hingescrollt werden soll.

    Mal so am Rande: Warum willst du die Seite denn scrollen? Sind da Infos die du brauchst?

    Vielleicht können wir dir ja besser helfen wenn du uns verrätst was du wo machen möchtest.

  • _GUICtrlButton_SetState

    • alpines
    • 25. Januar 2019 um 19:23
    Zitat von Bitnugger

    Hihi... hier hast du als Text auch "Radio1" stehen. ;)

    Das hat man davon wenn man in Koda Controls kopiert :D

  • Rechentool GUI Fragen

    • alpines
    • 25. Januar 2019 um 16:43
    Zitat von elysium

    Hab das übrigends so umgesetzt:

    So prüfst du nur ob die Felder leer sind oder nicht. Wenn ich in ein Feld "blablubb123@bla" eingebe, wird er versuchen damit zu "rechnen".

    Vergiss das bitte nicht. Du kannst statt dem GUICtrlRead = "" auch den RegEx nehmen den ich gepostet habe, der prüft ob da eine gültige Zahl enthalten ist oder nicht.

    Letzendlich musst du entscheiden welches du nimmst, aber so lässt du mehr Spielraum für Bugs drinne wenn du auch Buchstaben etc akzeptierst.

  • Rechentool GUI Fragen

    • alpines
    • 25. Januar 2019 um 14:48
    Zitat von Tuxedo

    Ich hatte gestern schon damit rumexperimentiert, habe aber erst heute eine Lösung gefunden die für dich passen sollte.

    Du musst dich nicht mit den REgex herumplagen, da du ja laut deinem Script zum Rechnen Formnestzahl und zyklyszeit

    grösser 0 brauchst kannst du es wie folgt lösen.

    Ich kann in die Inputbox "2@3" eingeben oder "2,,3.2.3,2,222,,,,,.3" und er rechnet mit einer 2 weiter. Das nennst du eine Zahl "größer 0"?

    Der RegEx ist ein Einzeiler und lässt wirklich nur Zahlen durch, meiner Meinung nach ist das die bessere Variante da sie den User direkt warnt wenn die Eingabe ungültig ist.

    Number versucht irgendwie eine Zahl aus der Eingabe zu extrahieren und fängt von links an bis es ungültig wird - rechnet aber damit weiter obwohl das nicht so sein sollte.

  • Interface

    • alpines
    • 25. Januar 2019 um 13:07

    Lies dir nochmal deine Frage durch und dann denk mal darüber nach was für Antworten wir dir geben könnten.

    Du gibts keine Infos darüber, was für ein "Interface" du ansprechen möchtest, an was für "Textstellen" Text einfügen möchtest.

    Das Wort Interface ist gigantisch, wenn du uns nichts sagst was du wo erreichen möchtest können wir dir nicht weiterhelfen. ich denke das sollte klar sein.

  • Rechentool GUI Fragen

    • alpines
    • 24. Januar 2019 um 14:49
    Zitat von elysium

    Edit: Wie machst Du den, dass dein Code so schön eingerückt ist im Forum?

    Habe hier in einem Sticky gelesen, dass ich es in die Autoit Klammern schreiben soll aber dann kommt es immer komplett linksbündig an.

    Es fehlt momentan ein korrekter Syntaxhighlighter für WBB.

    Du kannst aber einfach die Code-Tags nehmen und dort deinen Code eintragen, den Code oben habe ich aus dem Kopf heraus geschrieben und selber mit Tabs eingerückt.

    Bei den Code-Tags kannst du oben auf "Quellcode" klicken und die Sprache wählen, leider fehlt dort momentan AutoIt.

  • Rechentool GUI Fragen

    • alpines
    • 24. Januar 2019 um 14:14
    Zitat von elysium

    Ich habe IsNumber() gefunden, was nicht funktioniert hat, wie ich es mir vorgestellt habe

    Das liegt daran, dass IsNumber Stringzahlen nicht als Zahlen anerkennt.

    Eine gute Lösung wäre es wohl RegEx zu nehmen, dies würde aber vermutlich deinen Kenntnisstand sprengen.

    RegEx oder auch reguläre Ausdrücke sind Filter die du auf Eingaben legen kannst wo nur Eingaben durchlaufen die dem Filter entsprechen.

    Hier ein kleines Online-Beispiel zu deinem Problem: https://regex101.com/r/XaQ6PO/4

    Es werden nur Zahlen angekommen die entweder Ganzzahlig sind, oder mit einem Punkt oder Komma als Dezimalkomma da stehen.

    Ungültige Zahlen nicht.

    Es gibt sicherlich schönere Patterns (Filter / Muster) aber das konnte ich auf die schnelle basteln:

    Im Grunde steht da ^\d+(\.|,)\d*$.

    ^ = Anfang des Strings

    $ = Ende des Strings

    D.h. alle anderen Bezeichner (dazwischen) sagen treffen auf die gesamte Zeile zu.

    \d+ = Eine oder mehrere Ziffern hintereinander

    (\.|,)? = Entweder ein Punkt oder Komma als Separator

    \d* = Keine oder mehrere Ziffern hintereinander

    Damit erlaubt man 1 - 2 - 1.2 - 1,3 - 12.2 - 1.33 aber nicht 1..2 - ,2 - .2 - 1,,3 etc.

    Code
    If Not StringRegExp(GUICtrlRead($inputBox), "^\d+(\.|,)?\d*$") Then
        ;Eingabe ist ungültig
    Else
        ;Eingabe ist gültig
    EndIf

    Du musst beachten, dass wenn du Kommas als Trenner nimmst, du sie später mit StringSplit (oder ähnlichem) in einen Punkt umwandeln musst, da AutoIt intern Kommazahlen mit einem Punkt kennzeichnet.

  • _GUICtrlButton_SetState

    • alpines
    • 24. Januar 2019 um 11:52
    Zitat von co_steffl

    Ist zwar trotzdem langsam, aber funktioniert....

    Weil du das falsche Control dafür verwendest ;)

    C
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    $Form1 = GUICreate("Form1", 309, 250, 192, 124)
    $Radio1 = GUICtrlCreateRadio("Radio1", 56, 40, 193, 49, BitOR($GUI_SS_DEFAULT_RADIO, $BS_PUSHLIKE))
    $Radio2 = GUICtrlCreateRadio("Radio1", 56, 136, 193, 49, BitOR($GUI_SS_DEFAULT_RADIO, $BS_PUSHLIKE))
    GUISetState(@SW_SHOW)
    
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
    
        EndSwitch
    WEnd
    Alles anzeigen
  • _GUICtrlButton_SetState

    • alpines
    • 24. Januar 2019 um 11:25

    Ich nehme mal an du setzt die States so schnell, dass Windows noch beschäftigt ist die Animation von dem eigentlich Klick drauf einzublenden.

    Wenn ich ein Sleep(100) vorher setze und den angeklickten Button erst deaktivere und den anderen anderen aktiviere klappts.

  • Rechentool GUI Fragen

    • alpines
    • 23. Januar 2019 um 12:16
    Zitat von elysium

    Die Control-ID ist derselbe Wert, den das AutoIt Window Info Tool anzeigt.

    Nein, die Control-ID ist autoitspezifisch und kommt bei anderen Windows Anwendungen nicht vor. Das Handle das AutoIt Window Info anzeigt (0x......) ist das tatsächliche Handle zu dem Control um es anzusteuern.

    Für AutoIt wurde aber eine einfache Zahl genommen die hochzählt. Das hat seine Gründe, denn man kann damit viel guten Unfug anstellen.

    Wir reden hier von der Zahl die AutoIt zurückgibt, wenn ein Control mit GUICtrlCreate erstellt wurde.

    Diese solltest du beim Erstellen immer Speichern z.B. $buttonOK um später in deiner GUIMessage-Verarbeitung zu prüfen ob $buttonOK geklickt wurde.

    Am besten du liest dir das Buch erstmal Schritt für Schritt durch (alles auf einmal wäre viel zu viel) und tastest dich einfach ran, das wird schon.

  • Rechentool GUI Fragen

    • alpines
    • 22. Januar 2019 um 15:24
    Zitat von Moombas

    Dafür musst du deinen Labels etc. aber beim erstellen Namen zuweisen!

    Nicht zwangsweise, und das schrieb ich bereits ;)

    Zitat von alpines

    Außerdem solltest du die Controls die du beschreiben und auslesen möchtest immer in Variablen speichern, du erzeugst so viele Inputboxen aber speicherst das Handle (den Rückgabewert um die Box zu identifizieren) nicht ab.

  • Rechentool GUI Fragen

    • alpines
    • 22. Januar 2019 um 15:05
    Zitat von elysium

    Cool fände ich es, wenn die "erweiterten" Felder ausgegraut (inaktiv) sind, wenn der Haken nicht gesetzt ist und falls er gesetzt ist, soll es Fehlermeldungen geben, wenn ein Feld nicht ausgefüllt ist und jemand auf "berechnen" klickt.

    Mit GUICtrlSetState und dem Status $GUI_DISABLE/$GUI_ENABLE kannst du genau das machen.

    Du musst diese States beim Klick auf die Checkbox setzen.

  • Rechentool GUI Fragen

    • alpines
    • 22. Januar 2019 um 14:45
    Zitat von elysium

    Ok, vielen Dank! Dann kann ich aufhören zu suchen

    Dazu sei gesagt, dass es möglich ist eine fixe Anzahl an Leerzeichen in einer Inputbox festzulegen, allerdings dürfte das über deinem Kenntnisstand liegen.

    Wenn du AutoIt gut beherrscht kannst du dir ja mal Window Messages (GUIRegisterMsg, etc...) anschauen, da kannst du Funktionen registrieren die auslösen, sobald der Inhalt einer Inputbox verändert wurde.

    Fürs erste würde ich allerdings darauf verzichten.

    Du kannst die Inputboxen auch ohne Variablen auslesen, allerdings macht das niemand (ohne wirklich guten Grund), da es viel angenehmer ist sie über die Variablen anzusprechen.

  • Rechentool GUI Fragen

    • alpines
    • 22. Januar 2019 um 14:03
    Zitat von elysium

    Dann wollte ich noch gerne fragen, ob ihr mir sagen könnt, wie ich den Text in Inputfeldern etwas mehr nach rechts schieben kann, einfach etwas Abstand zum Rand.

    Die gibt es meines Wissens nach nicht. Linksbündig, Zentriet oder Rechtsbündig sind die möglichen Optionen.

    Du kannst aber (wenn du selber Werte reinschreibst) einfach ein paar Leerzeichen einfügen, dann schaut es so aus als ob dort ein Abstand wäre.

    Beim Auslesen der Daten aus dem Feld musst du aber aufpassen, dass du durch die Leerzeichen keine falschen Werte ausliest.

    Außerdem solltest du die Controls die du beschreiben und auslesen möchtest immer in Variablen speichern, du erzeugst so viele Inputboxen aber speicherst das Handle (den Rückgabewert um die Box zu identifizieren) nicht ab.

    Übrigens heißt es AutoIt, das It steht nicht für Informationstechnologie sondern für das englische "es".

    Peethebee hatte vor ein paar Jahren ein Buch zu AutoIt verfasst und es hier hochgeladen, du kannst es dir gerne durchlesen.

    Es sollte so gut wie alle Bereiche abdecken. Wenn etwas fehlt, dann sieht es sehr spezielle Sachen oder versionsspezifische Veränderungen.

    https://autoit.de/wcf/index.php?…ht-gemacht-pdf/

  • _ArrayAdd() und Initialisieren von Arrays

    • alpines
    • 18. Januar 2019 um 16:04
    Zitat von aSeCa

    Bitnugger: Genau das habe ich gebracht, danke! Habe wohl einfach zu viel nachgedacht und im Kopf einfach ausgeschlossen, dass das mit 0 funktioniert...

    Oder einfach meinen Beitrag nicht gelesen.

    Zitat von alpines

    Wenn du Arrays initialisierst und sich im Nachhinein füllen möchtest, kannst du auch als Dimensionsgrößen [0][3] nehmen, musst aber wenn du Einträge hinzufügst ReDim/_ArrayAdd nutzen.

  • "Dateipfad öffnen" nachbilden

    • alpines
    • 18. Januar 2019 um 13:08

    Du musst die explorer.exe öffnen und dabei den Pfad den du öffnen möchtest als Parameter übergeben.

    Code
    ShellExecute("explorer.exe", @UserProfileDir)
  • _ArrayAdd() und Initialisieren von Arrays

    • alpines
    • 18. Januar 2019 um 00:35

    Du vergleichst im 1. Skript die Dimensionen und das ist vollkommen richtig was der Interpreter macht.

    Wenn du Arrays initialisierst und sich im Nachhinein füllen möchtest, kannst du auch als Dimensionsgrößen [0][3] nehmen, musst aber wenn du Einträge hinzufügst ReDim/_ArrayAdd nutzen.

    Das kann bei großen Arrays schon viel Zeit kosten, wenn du vorher berechnest wie viele Einträge dazukommen und du das Array nur einmal erweiterst ist das wesentlich schneller.

    Wenn du uns verrätst was du in den Arrays speicherst und wo die Informationen herkommen und wie du sie im Array speicherst, können andere Datenstrukturen dir vielleicht besser aushelfen.

    Dictionaries sind eine sehr tolle Alternative zu Arrays, und können - richtig eingesetzt - auch schneller sein.

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™