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

Beiträge von ThPfund

  • Dafür verwendet man "Dim"!

    • ThPfund
    • 9. Juli 2013 um 21:34

    Danke für den Link, water. Ich werd's dort posten.

  • Dafür verwendet man "Dim"!

    • ThPfund
    • 8. Juli 2013 um 21:37

    Habe mich zufällig heute mittag auch mit dem Thema beschäftigt.
    In der Hilfe steht, dass ReDim ein Array neu dimensioniert und die darin enthaltenen Werte erhalten bleiben wenn dies von der Größe her möglich ist. Bei Dim werden die Werte hingegen gelöscht. Genau dies brauche ich für meine Anwendung. Hab's getestet und es funktioniert.
    Aufgrund des hier geschriebenen habe ich jetzt Dim durch Local ersetzt und das funktioniert auch.
    Insofern sollte die Hilfe entsprechend ergänzt werden.

  • m-obi wird 24!

    • ThPfund
    • 9. Juni 2012 um 13:58

    Herzlichen Glückwunsch und alles Gute zu Deinem Geburtstag!
    Praktisch, dass er auf einen Samstag fällt. Feier schön. :party:
    Thomas

  • _ArraySearch()

    • ThPfund
    • 9. Juni 2012 um 11:04

    Zu #17
    Gut, dann sind wir uns doch irgendwie über Dimensionen, Indexe, Zeilen und Spalten einig und dass die Werte $array[0][0 bis 5] des Beispiels gebraucht werden.

    Zu #18
    Ja. Gefragt war zunächst nur, ob der Wert im Array enthalten ist. Den Charme Deiner Lösung habe ich aber auch erkannt und sie bereits in meine Snippet-Sammlung übernommen. :thumbup:

    So ich klinke mich jetzt aus diesem Thread aus, bedanke mich für die engagierte Diskussion und wünsche allen noch ein schönes Wochende. :)

  • _ArraySearch()

    • ThPfund
    • 9. Juni 2012 um 09:44
    Zitat von m-obi

    Die erste Dimension ist die erste Spalte also 76 und 0.

    Nein, der Eintrag in der zweiten Dimension bestimmt die Spaltenzahl. Und ihr Index benennt dann die konkrete Spalte.
    Schau mal an, wie sich der Aufbau in _ArrayDisplay() verändert , wenn Du nacheinander folgende Arrays betrachtest:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $array[2][1] ; [ersteDim][zweiteDim]
    _ArrayDisplay($array)
    ReDim $array[2][2]
    _ArrayDisplay($array)
    ReDim $array[2][3]
    _ArrayDisplay($array)
    ReDim $array[2][4]
    _ArrayDisplay($array)
    ReDim $array[2][5]
    _ArrayDisplay($array)
    ReDim $array[2][6]
    _ArrayDisplay($array)

    [/autoit]
  • _ArraySearch()

    • ThPfund
    • 8. Juni 2012 um 18:53

    Das ist jetzt wohl richtig so. Und: Ja, klar meine Funktion ist ein Vorschlag, den man bedarfsgerecht anpassen kann.
    Ich habe aber noch Zweifel an der Gesamtkonstruktion. Bloß noch mal zum gemeinsamen Verständnis mit den Dimensionen:
    $array[1.Dim.][2.Dim.]
    $array[Zeilen][Spalten]
    $array[2][6] = [[76, 67, 58, 57, 56, 55],[0, 0, 0, 0, 0, 0]]
    Ergebnis ArrayDisplay:
    [0] | 76 | 67 | 58 | 57 | 56 | 55
    [1] | 0 | 0 | 0 | 0 | 0 | 0
    Dies ist bestimmt ein vereinfachtes Beispiel.
    Ist es in der Original-Anwendung wirklich beabsichtigt, nur die erste Zeile zu durchsuchen?

  • _ArraySearch()

    • ThPfund
    • 8. Juni 2012 um 16:31

    Hier der Vollständigkeit halber noch meine korrigierte Funktion. Ursache war falsche Parameterangabe im Ubound (und späte Uhrzeit) ;)

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Global $array[2][6] = [[76, 67, 58, 57, 56, 55],[0, 0, 0, 0, 0, 0]]

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "76", _MySearch(76)) ; => True
    MsgBox(0, "60", _MySearch(60)) ; => False
    MsgBox(0, "55", _MySearch(55)) ; => True
    MsgBox(0, " 0", _MySearch(0)) ; => True

    [/autoit] [autoit][/autoit] [autoit]

    Func _MySearch($Wert)
    Local $i, $k
    For $i = 0 To UBound($array, 1) - 1
    For $k = 0 To UBound($array, 2) - 1
    If $array[$i][$k] = $Wert Then Return (True)
    Next
    Next
    Return (False)
    EndFunc ;==>_MySearch

    [/autoit]
  • _ArraySearch()

    • ThPfund
    • 8. Juni 2012 um 13:57

    @ m-obi
    Wird der 8.Parameter ($iSubItem) nicht angegeben, steht er standardmäßig auf -1.
    Und dann wird das ganze 2-dim. Array durchsucht, mit allen Spalten, s. Zeile 7.

    Spoiler anzeigen
    [autoit]


    Func _ArraySearch( ..., $iSubItem = -1)
    ...
    Case 2 ; 2D array search
    Local $iUBoundSub = UBound($avArray, 2) - 1
    If $iSubItem > $iUBoundSub Then $iSubItem = $iUBoundSub
    If $iSubItem < 0 Then
    ; will search for all Col
    $iSubItem = 0
    Else
    $iUBoundSub = $iSubItem
    EndIf
    ...

    [/autoit]


    Ich glaube, die Dokumentation sollte da noch etwas deutlicher werden. Werde gelegentlich mal was dazu schreiben.

  • _ArraySearch()

    • ThPfund
    • 8. Juni 2012 um 10:41

    Hab mir die Funktion _ArraySearch() jetzt mal genauer angeschaut.
    So wie ich das sehe, liefert sie - keine anderen Fehler vorausgesetzt - die Position in der 1. Dimension zurück.
    Beim 1-dim.Array entspricht dies dem tatsächlichen Index, wo sich der Wert befindet.
    Beim 2.dim. Array macht sie es auch so, auch wenn sich der Wert in der 2. Dimension befindet, da sie ja nur 1 Rückgabewert hat.

    D.h., in Deinem Beispiel mit [2][6] beginnt der Index mit 0, der Wert 58 z.B. befindet sich an [0][2], also ist der Rückgabewert 0. Falls nicht gefunden @error=6.

    Im zweiten Hilfebeispiel kann der Autor Zeile und Spalte schön ausgeben, da er ja die Spalte beim Suchen schon vorgibt...

  • _ArraySearch()

    • ThPfund
    • 8. Juni 2012 um 07:53

    Was ich noch zu _ArraySearch() sagen wollte:

    Der ReturnCode ist laut Hilfebeschreibung so zu interpretieren
    $test >= 0 Position, an der Suchwert gefunden wurde
    $test -1 Fehler, siehe @error
    @error = 6 Wert nicht gefunden

    Du hast zum Debuggen mit dem ConsoleWrite() den richtigen Ansatz, allerdings wird von _ArraySearch() bei dieser und verschiedenen anderen Parameter-Konstellationen @error nicht gesetzt, insofern kommen wir da nicht weiter. Dazu müsste man einen Blick auf die Funktion _ArraySearch() im Include Array.au3 werfen, wie dort mit den Parametern umgegangen wird...

  • _ArraySearch()

    • ThPfund
    • 8. Juni 2012 um 01:36

    Mit _ArraySearch() kriege ich das nach einigem probieren auch nicht hin.
    Hab ne andere Lösung (nicht ganz ausgetestet, ist ja aber auch schon spät...) ;)

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Global $array[2][6] = [[76, 67, 58, 57, 56, 55],[0, 0, 0, 0, 0, 0]]

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "", _Search(60))
    MsgBox(0, "", _Search(67))

    [/autoit] [autoit][/autoit] [autoit]

    Func _Search($Wert)
    Local $i, $k, $found = False
    For $i = 0 To UBound($array, 0) - 1
    For $k = 0 To UBound($array, 1) - 1
    If $array[$i][$k] = $Wert Then Return (True)
    Next
    Next
    Return (False)
    EndFunc ;==>_Search

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Focus Problem

    • ThPfund
    • 24. April 2012 um 11:42

    Hatte leider keine Zeit, mich länger damit zu beschäftigen, aber das hilft Dir vielleicht weiter:

    Ob ein bestimmter Button den Fokus hat, kannst Du mit "_GUICtrlButton_GetFocus($hdl) = True" ermitteln
    (braucht #include <GuiButton.au3>).

    Ich hab's mal quick and dirty beim Verlassen der Hauptschleife eingefügt:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GuiButton.au3> ; Zusätzlich eingefügt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("Form1", 607, 206, 252, 144)
    $Input1 = GUICtrlCreateInput("Input1", 24, 40, 121, 21)
    $Button1 = GUICtrlCreateButton("Button1", 24, 96, 163, 73, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Button2", 200, 96, 163, 73, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Button3", 376, 96, 171, 73, $WS_GROUP)

    [/autoit] [autoit][/autoit] [autoit]

    ControlFocus($Form1, "", 3)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    Local $control = ControlGetFocus($Form1)
    Local $hHandle = ControlGetHandle($Form1, "", $control); Handle des selektierten Controls holen
    Local $ICtrlId = _WinAPI_GetDlgCtrlID($hHandle); CtrlId aus dem Handle erstellen
    MsgBox(0, "", $control)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    If _GUICtrlButton_GetFocus($Button1) = True Then ; provisorisch eingefügt
    MsgBox(0, "", "Button1 hat den Fokus")
    ElseIf _GUICtrlButton_GetFocus($Button2) = True Then
    MsgBox(0, "", "Button2 hat den Fokus")
    ElseIf _GUICtrlButton_GetFocus($Button3) = True Then
    MsgBox(0, "", "Button3 hat den Fokus")
    Else
    MsgBox(0, "", "Kein Button hat den Fokus")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Focus()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Focus

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Weitere Vorgehensweise wäre für mich dann:

    1. Abfrage ob Tab-Taste gedrückt, in der Haupschleife

    2. Ermitteln welcher Button den Fokus hat

    3. Entweder einen größeren Button oder ggf. Child-Fenster darüber legen

    4. Bei Fokus-Verlust diesen wieder löschen und die neue Konstellation abfragen

    ...

  • Teil von Text fett

    • ThPfund
    • 14. April 2012 um 22:40

    Hallo Crys,

    so müsste es gehen:

    Spoiler anzeigen
    [autoit]


    #include <GuiRichEdit.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $gui, $iMsg, $hRichEdit, $text, $farbe = 0x99B4D1

    [/autoit] [autoit][/autoit] [autoit]

    $text = "{\rtf1"
    $text &= "Das ist {\b der} erste Absatz."
    $text &= "\par Und das {\b ist der} zweite Absatz."
    $text &= "}"

    [/autoit] [autoit][/autoit] [autoit]

    $gui = GUICreate("Beispiel", 320, 350, -1, -1)
    GUISetBkColor($farbe)

    [/autoit] [autoit][/autoit] [autoit]

    $hRichEdit = _GUICtrlRichEdit_Create($gui, $text, 10, 10, 300, 220, _
    BitOR($ES_MULTILINE, $ES_READONLY), $WS_EX_TRANSPARENT)
    _GUICtrlRichEdit_HideSelection($hRichEdit)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    $iMsg = GUIGetMsg()
    Select
    Case $iMsg = $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    EndSelect
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • _isPressed() verzögerung/umlaut-code

    • ThPfund
    • 5. Januar 2012 um 23:54

    autoBert: Ich hatte in einem der Vorposts als Beispiel Sleep(500) genannt. Nach dem das für die Anwendung wohl zu lang ist habe ich darauf hingewiesen, dass es durch Veränderung des Parameters auch kürzer geht und das neue Beispiel ohne in der Hilfe nachzuschauen in einem Anflug von Ironie mit (1) extrem gewählt. Auch wenn der Mindestwert 10 beträgt, bin ich zuversichtlich, dass sich zwischen 10 und 500 Millisekunden ein passender Wert finden läßt. Der wäre dann für die Anwendung vom Threadersteller durch ausprobieren zu ermitteln. Ich weiss ja nicht, wie er es genau haben möchte, falls er überhaupt diese Alternative wählt. :D

  • Le solutionneur

    • ThPfund
    • 5. Januar 2012 um 23:33

    Hallo Le solutionneur,
    herzlich willkommen im deutschen AutoIt-Forum! :thumbup:
    Du wirst sehen, dass es hier viele aktive Mitglieder gibt, die Fragen schnell beantworten und viele interessante Themen diskutieren.
    Ich schaue manchmal auch bei "autoitscript.fr" vorbei.
    Bienvenue et bonne chance

  • _isPressed() verzögerung/umlaut-code

    • ThPfund
    • 5. Januar 2012 um 18:57

    Naja, durch Verkleinern des Parameters geht es ja auch mit weniger Millisekunden, z.B. Sleep(1)... ;)

    Aber ich habe noch was zu den Umlauten für Dich:

    Spoiler anzeigen
    [autoit]


    Case _IsPressed(Hex(222))
    MsgBox(0, "Umlaut", "ä")
    Case _IsPressed(Hex(192))
    MsgBox(0, "Umlaut", "ö")
    Case _IsPressed(Hex(186))
    MsgBox(0, "Umlaut", "ü")
    Case _IsPressed(Hex(219))
    MsgBox(0, "Eszett", "ß")

    [/autoit]


    Für die Großbuchstaben sehe ich nur eine Möglichkeit in Zusammenhang mit der Umschalttaste:

    Spoiler anzeigen
    [autoit]


    Case _IsPressed("A0") ; linke Umschalttaste
    Select
    Case _IsPressed(Hex(222))
    MsgBox(0, "Umlaut", "Ä")
    Case _IsPressed(Hex(192))
    MsgBox(0, "Umlaut", "Ö")
    Case _IsPressed(Hex(186))
    MsgBox(0, "Umlaut", "Ü")
    EndSelect
    Case _IsPressed("A1") ; rechte Umschalttaste
    Select
    Case _IsPressed(Hex(222))
    MsgBox(0, "Umlaut", "Ä")
    Case _IsPressed(Hex(192))
    MsgBox(0, "Umlaut", "Ö")
    Case _IsPressed(Hex(186))
    MsgBox(0, "Umlaut", "Ü")
    EndSelect

    [/autoit]


    Achtung, dieser zweite Block muss vor dem ersten stehen, ich wollte nur erst mit dem einfacheren Teil beginnen.
    Hoffe, das hilft Dir weiter. Wenn jemand eine einfachere Möglichkeit weiss, wäre das für mich auch interessant.

  • _isPressed() verzögerung/umlaut-code

    • ThPfund
    • 5. Januar 2012 um 09:27

    Ich machs so:

    Spoiler anzeigen
    [autoit]


    While 1
    if _isPressed(42) then
    blub()
    Sleep(500)
    endif
    wend

    [/autoit]
  • Problem mit Binärdaten

    • ThPfund
    • 13. November 2011 um 18:57

    So müsste es gehen:

    Spoiler anzeigen
    [autoit]


    Local $FileName = "Bild.jpg"
    Local $Handle = FileOpen($FileName, 16) ;Read(0) + Binary(16) = 16
    Local $BinaryString = FileRead($Handle)
    FileClose($Handle)

    [/autoit] [autoit][/autoit] [autoit]

    $Handle = FileOpen("Neu" & $FileName, 18) ;Write(2) + Binary(16) = 18
    FileWrite($Handle, $BinaryString)
    FileClose($Handle)

    [/autoit]
  • FF.au3 und Firefox 7

    • ThPfund
    • 8. November 2011 um 14:13

    So, nun habe ich das Beispiel von http://www.thorsten-willert.de/
    ganz zum laufen gebracht:

    Spoiler anzeigen
    [autoit]


    #include <FF.au3>

    [/autoit] [autoit][/autoit] [autoit]

    _FFConnect() ; eine Verbindung zu FireFox (FF) aufbauen

    [/autoit] [autoit][/autoit] [autoit]

    If _FFIsConnected() Then ; überprüfen ob die Verbindung besteht
    _FFOpenURL("http://ff-au3-example.thorsten-willert.de/") ; eine Seite öffnen

    [/autoit] [autoit][/autoit] [autoit]

    ; herunterscrollen, damit man sieht was gemacht wird
    ; das ist für die Anwendung nicht notwendig
    _FFAction("ScrollXY", 0, 300)

    [/autoit] [autoit][/autoit] [autoit]

    ; und ein Formular ausfüllen
    _FFSetValue("Max", "fname", "name")
    _FFSetValue("Mustermann", "lname", "name")

    [/autoit] [autoit][/autoit] [autoit]

    ; Achtung: Falsche Parameterreihenfolge im Musterbeispiel
    ;_FFSetValue("fname", "Max", "name")
    ;_FFSetValue("lname", "Mustermann", "name")
    ; ...
    Else
    MsgBox(64, "Fehler:", "Es konnte keine Verbindung zu FF hergestellt werden.")
    EndIf

    [/autoit]


    Aus der dort stehenden Referenzbeschreibung der Funktionen war zu sehen, dass die Reihenfolge der Parameter im Muster vertauscht war.
    Ergebnis der Formulareingabe siehe angefügtes Bild.
    Ich hoffe, das hilft schon mal weiter.

    Bilder

    • Lieferadresse.JPG
      • 15,51 kB
      • 367 × 88
  • FF.au3 und Firefox 7

    • ThPfund
    • 8. November 2011 um 12:14

    Ich hab jetzt mal folgendes gemacht:

    Von http://www.thorsten-willert.de/ die FF.au3 heruntergeladen.
    Er gibt unter "Software; Windows - FF.au3 - Info" den Hinweis, dass in Verbindung mit der UDF das FireFox Addon MozRepl, nötig ist, um FireFox fernzusteuern.

    Nach Installation des Addons und FF-Neustart habe ich es in FF (7.0.1) mit
    Extras - MozRepl - Start
    gestartet.

    Mit dem Beispielcode von Thorsten Willert (dort auch unter Info), konnte ich eine Beispielseite aufrufen. Die Aktivitäten werden in der Scite-Konsole protokolliert.

    Die im Muster vorgesehen Formulareingabe habe ich allerdings noch nicht hinbekommen. ;)

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™