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

Beiträge von BugFix

  • [Nim] Errorhandling

    • BugFix
    • 11. September 2020 um 14:34

    Ich habe mal noch eine eigene Form des Fehlermanagements erstellt.

    Man kann zwar super mit try-except innerhalb der Funktionen arbeiten, jedoch ist der Typ eines Rückgabewertes fix. Somit muss ich einen Wert der diesem Typ entspricht auch im Fehlerfall zurückgeben. Dazu wird dann ein ungültiger Wert zurückgegeben. Das ist dann aber sehr speziell auf jede einzelne Funktion und deren Datentyp zugeschnitten. Ich wollte etwas in der Art "If @error" haben.

    Die typgerechte Rückgabe aus einer Funktion auch im Fehlerfall bleibt davon unberührt, aber ich habe eine allgemeingültige Fehlervariable, die sich dann auch schlüssiger lesen lässt.

    Die Fehlerfunktion wird mit dem Ergebnis einer Prüfung als Parameter aufgerufen. Zusätzlich wird ein (optionaler) Text für den Fehlerfall mitgegeben. Hier ist zu beachten, dass nur eine ungültige Prüfung (false) zum Fehler führt. Das Ergebnis der Prüfung wird von der Fehlerfunktion weitergeleitet, kann aber auch ignoriert werden (Bsp #2).

    Code
    # ------------------------------------------------------------------------------
    # allgemeine Fehlervariable des Programms
    var error = (isErr: false, msg: "")   
    
    # myErr wird an das Resultat einer Bedingung geknüpft und leitet dieses weiter.
    proc myErr(condition: bool = true, errMsg: string = ""): bool {.discardable.} =
      if condition == true:
        error = (isErr: false, msg: "")
        return true
      else:
        error = (isErr: true, msg: errMsg)
        return false
    # ------------------------------------------------------------------------------
    
    # example: 
    let
      a = 5
      b = 4
    
    #1:
    if (a < b).myErr("a ist > b!"):
      echo b - a
    else:
      echo error.msg
    
    #2:
    (a < b).myErr("a ist > b!")
    if error.isErr: echo error.msg
    else: echo b - a
    Alles anzeigen
  • Problem mit Übergabe Datumsfunktion

    • BugFix
    • 11. September 2020 um 10:50
    Zitat von Oscar

    Du könntest das Datum doch auch in einer eigenen Funktion überprüfen:

    Ja klar (geht übrigens kürzer ;) )

    Code
    import times
    
    proc dateIsValid(year, mon, day: int): bool =
      if day > 0 and day <= getDaysInMonth(cast[Month](mon), year): return true
      else: return false

    Aber mir ging es darum, dass ich von meiner dateAdd-Funktion den Rückgabetyp DateTime bekomme. Da kann ich bei interner Prüfung nicht plötzlich "false" zurückgeben. Ich muss die Fehlermeldung also im erwarteten Datentyp unterbringen. Mit Jahr=0 setzen habe ich eine sichere Fehlerabfragemöglichkeit, aber ein SetError/If @error, wie in AutoIt wäre halt "schöner".

    Vielleicht bastele ich mir auch meine eigene Fehlervariable. Hätte auch den Vorteil, dass ich beim Setzen der Variablen kpl. Fehlertexte hinterlegen könnte.

  • Bug in Nim: Wertebereich bei 32Bit Integer

    • BugFix
    • 11. September 2020 um 10:01
    Zitat von Oscar

    Ich denke aber, dass die Erkennung der einzelnen Datentypen dann trotzdem "fehlerhaft" ist.

    Warum kann man 0x7FFFFFFF der Variablen ohne Zusatz zuweisen und ab 0x80000000 nicht mehr?

    Da gebe ich dir recht, das ist nicht eineindeutig verständlich. Ich habe dazu nochmal nachgefragt.

  • Bug in Nim: Wertebereich bei 32Bit Integer

    • BugFix
    • 10. September 2020 um 18:35
    Zitat von Oscar

    Man kann einer uint32-Variablen keinen Wert größer als 0x7FFFFFFF zuweisen

    Nach 10 Minuten schon die Lösung - schau bitte ins Nim Forum.

  • Bug in Nim: Wertebereich bei 32Bit Integer

    • BugFix
    • 10. September 2020 um 18:14
    Zitat von Oscar

    Könntest Du mal wieder einen Bugreport schreiben?

    Das scheint kein Bug in Nim zu sein, sondern im Code Check.

    Daher habe ich mal eine Frage im Forum gestellt. Du kannst uint32 bis zum Maximalwert belegen - nur nicht durch Zuweisung, da streikt der Code Check. (s. mein Bsp. in der Frage)

  • ColorConvert

    • BugFix
    • 9. September 2020 um 18:15
    Zitat von Oscar

    Und daraus habe ich jetzt mal ein Beispiel erstellt:

    Ich verlinke das gleich mal zu den Snippets. Kann man sicher irgendwann mal brauchen. :thumbup:

  • Problem mit Übergabe Datumsfunktion

    • BugFix
    • 9. September 2020 um 18:08
    Zitat von Oscar

    Du musst den Aufruf quasi zu dem TimeInterval zwingen:

    :thumbup: Danke, das war des Pudels Kern.


    Mal noch ein weiteres Problem. Ich wollte die Funktion jetzt absichern, um nicht valide Datumseingaben abzufangen.

    Laut Typbeschreibung von MonthdayRange ist 0 als Wert valide und repräsentiert ein ungültiges Datum

    Zitat von times #MonthdayRange


    0 represents an invalid day of the month

    initDateTime mit ungültigem Datumswert (z.B. "29.02.2019") führt zu einem "AssertionError". Somit war meine Überlegung, dass ich bei Auftreten dieses Fehlers ein DateTime erstelle mit 0 als Wert für den Tag, um daran den Fehler zu erkennen. Jedoch werden bei dem falschen Datum Tag und Monat ignoriert und durch 31.01. ersetzt, nur das Jahr wird akzeptiert. Daraufhin habe ich für das Jahr einfach 0 in der Fehlerroutine genutzt und bekomme zumindest ein ordentlich falsches ^^ Ergebnis, dass sich auswerten läßt. Aber ob das so soll? :whistling:

    Code
    proc dateAdd(datefunc: proc (x: int): TimeInterval{.inline, noSideEffect, gcsafe, locks: 0.},
                 count: int, year: int = -1, mon: int = -1, day: int = -1): 
                 DateTime =
      let dtToday = now() # date Today
      let  # if default (-1) - Today-value
        y = year == -1 ? dtToday.year ! year
        m: Month = mon == -1 ? dtToday.month ! cast[Month](mon)
        d: MonthdayRange = day == -1 ? dtToday.monthday ! cast[MonthdayRange](day)
      try:
        let dtStart = initDateTime(d, m, y, 0, 0, 0, local())
        result = dtStart + (count.datefunc)
      except AssertionError: # return wrong date (MonthdayRange=0)
        # let resErr = initDateTime(cast[MonthdayRange](0), m, y, 0, 0, 0, local())  # date: 0.02.2019 --> result: 31.01.2019 
        let resErr = initDateTime(cast[MonthdayRange](0), m, 0, 0, 0, 0, local())  # date: 0.02.0 --> result (.year): 0  # Jahr im Ergebnis '0', also Fehler 
        result = resErr
    
    
    let dateFormat = initTimeFormat("dd'.'MM'.'yyyy")
    
    let dtAdd = dateAdd(years, 1, 2019, 2, 29)
    if dtAdd.year == 0: echo "wrong calc date"  # Fehlerabfrage
    else: echo dtAdd.format(dateFormat)
    Alles anzeigen

    Errorhandling ist tatsächlich etwas, wo man durch AutoIt verwöhnt ist. Es gibt kein Errormakro und somit ist das Signalisieren von Fehlern recht umständlich. Aber: Man kann nicht alles haben.

  • ColorConvert

    • BugFix
    • 9. September 2020 um 12:56
    Zitat von UEZ

    du könntest UNION in TYPE verwenden

    Ist in Nim so nicht direkt vorgesehen. Es besteht die Möglichkeit über Pointer auf einen Wert mit unterschiedlichen Datentypen zuzugreifen. Aber das ist wohl nicht das, was UEZ meint.

    Bsp.

    Code
    var a: int64 = 1
    var p: ptr float = cast[ptr float](addr a)
    var q: ptr int32 = cast[ptr int32](addr a)
    
    echo a
    echo p[]
    echo q[]
    
    q[] = 2
    
    echo a
    echo p[]
    echo q[]
    Alles anzeigen
  • Problem mit Übergabe Datumsfunktion

    • BugFix
    • 9. September 2020 um 11:33

    Im Modul times sind alle notwendigen Funktionen für Datumsoperationen enthalten. Ich habe mir nun eine Prozedur erstellt, mit der ich variabel die Funktion für die Datumsoperation übergeben kann ('years', 'months', 'weeks', 'days') und Integer als Werte für Monat und Tag übergeben kann. Das ist deshalb sinnvoll, damit ich mit der Vorbelegung '-1' den aktuellen Datumswert übernehmen kann. -1 ist aber kein gültiger Wert für die Datentypen 'Month' und 'MonthdayRange'.

    Das funktioniert soweit zufriedenstellend, nur werden die Funktionen 'weeks' und 'days' als Parameter nicht erkannt. Da habe ich keine Erklärung für.

    Code
    import times, tables
    
    # ------------------------------------------------------------------------------
    type
      ConditionPair[T] = object
        ifTrue, ifFalse: T
    
    # ternary operator: (cond ? if-true ! if-false)
    proc `!`*[T](a, b: T): ConditionPair[T] {.inline.} = 
      ConditionPair[T](ifTrue: a, ifFalse: b)
    
    template `?`*[T](cond: bool; p: ConditionPair[T]): T =
      (if cond: p.ifTrue else: p.ifFalse)
    # ------------------------------------------------------------------------------
    
    
    # ------------------------------------------------------------------------------
    # dateFunc: The procedure to use ('years', 'months', 'weeks', 'days')
    # count:    The count of units to add. Negative value for subtraction.
    # year:     The year for the start date. -1 (default) - the current year
    # mon:      The month for the start date. -1 (default) - the current month
    # day:      The day for the start date. -1 (default) - the current day
    # ------------------------------------------------------------------------------
    proc dateAdd(datefunc: proc, count: int, year: int = -1, 
                 mon: int = -1, day: int = -1): DateTime =
      let dtToday = now() # date Today
      let  # if default (-1) - Today-value
        y = year == -1 ? dtToday.year ! year
        m: Month = mon == -1 ? dtToday.month ! cast[Month](mon)
        d: MonthdayRange = day == -1 ? dtToday.monthday ! cast[MonthdayRange](day)
      let dtStart = initDateTime(d, m, y, 0, 0, 0, local())
      result = dtStart + (count.datefunc)
    # ------------------------------------------------------------------------------
    
    
    
    let dateFormat = initTimeFormat("dd'.'MM'.'yyyy")
    echo "Heute: ", now().format(dateFormat)
    
    var d = dateAdd(years, -2)
    echo "Heute -2 Jahre: ", d.format(dateFormat)
    
    d = dateAdd(years, 2)
    echo "Heute +2 Jahre: ", d.format(dateFormat)
    
    d = dateAdd(months, -3, 2016, 2, 28)
    echo "28.02.2016 -3 Monate: ", d.format(dateFormat)
    
    d = dateAdd(months, -5)
    echo "Heute -5 Monate: ", d.format(dateFormat)
    
    d = dateAdd(months, 5)
    echo "Heute +5 Monate: ", d.format(dateFormat)
    
    # 'weeks' und 'days' werden nicht als Funktion erkannt:
    
    # d = dateAdd(weeks, -3)
    # echo "Heute -3 Wochen: ", d.format(dateFormat)
    
    # d = dateAdd(weeks, 3)
    # echo "Heute +3 Wochen: ", d.format(dateFormat)
    
    # d = dateAdd(days, -21)
    # echo "Heute -21 Tage: ", d.format(dateFormat)
    
    # d = dateAdd(days, 14)
    # echo "Heute +14 Tage: ", d.format(dateFormat)
    
    # im direkten Aufruf keine Probleme:
    echo "Heute - 3 Wochen: ", (now() - 3.weeks).format(dateFormat)
    echo "Heute +10 Tage:   ", (now() + 10.days).format(dateFormat)
    Alles anzeigen
  • [Nim] nimble Update

    • BugFix
    • 6. September 2020 um 22:08

    Ich finde die bisherige Lösung gar nicht so schlecht, da kann man jederzeit auch wieder in die alte Version springen. Deshalb hatte ich auch das "update" nicht vermisst.

    Da es keinen Speicher frisst, belasse ich alle Versionen auf dem PC.

  • wNim Version 0.11.2 und Treeview

    • BugFix
    • 3. September 2020 um 18:49
    Zitat von Oscar

    (#64, thanks to BugFix).

    Müsste ja eigentlich heißen :

    Thanks to Oscar.

    Ich war ja nur der Überbringer. :P

  • Diskussion zu [Skripte] control hover effekt ohne fehler

    • BugFix
    • 31. August 2020 um 21:22

    Ich denke, ich sollte mal im Interesse Aller ein paar Dinge gerade rücken.

    • Es geht hier niemals und nirgendwo um irgendwelche Schuldzuweisungen.
    • Es kommt immer mal wieder vor, dass einige Threads recht hitzig werden. Aber ich habe noch niemals in meinen 14 Jahren hier erlebt, dass das tatsächlich auf persönlichen Aversionen beruhte.
    • Sicher schwingt nicht jeder hier die feine sprachliche Klinge eines Germanistikprofessors. Aber das ist wohl auch nicht erforderlich, um kommunizieren zu können. Als Grundregel sollte man sich einfach merken: "Nicht jedes Wort auf die Goldwaage legen"
    • Was dein Verhalten zu Lob/Kritik (Gemecker?) angeht, ist schon auffällig, dass du recht dünnhäutig bist. Das ist grundsätzlich kein Problem, jeder ist nun mal so, wie er ist und kann nicht aus seiner Haut. Jedoch kann das halt dazu führen, dass andere User das in ihren Posts nicht berücksichtigen und dich somit ungewollt (wovon ich absolut ausgehe) verletzen.
    • Das Diskutieren über Programmierparadigmen ist so alt, wie das Forum selbst. Hat es immer gegeben und wird es auch in Zukunft immer geben. Und das ist gut so. Jeder muss seinen Weg finden und in Diskussionen, in denen man das Gefühl hat "niedergemacht zu werden" muss man viel intensiver nach Argumenten suchen. um seinen eigenen Standpunkt zu verteidigen. Du musst dir nur eines immer klar machen: Es gibt keine Sieger oder Verlierer - es gibt einen Diskurs, der nicht zwingend dazu führen muss/soll, dass alle derselben Meinung sind (DAS wäre eine absolut grauenhafte Vorstellung).

    Also versuche einfach die Dinge etwas entspannter zu betrachten. Sind wir manchmal vielleicht etwas arrogant, oberflächlich, übergriffig? Kann sein - wir alle sind Individuen (und wer programmiert, hat meist das passende Ego dazu ^^) und somit nicht frei von menschlichen Schwächen. Das Forum ist ein Tiegel der unterschiedlichsten Charaktere. Nimm also nicht jedes Wort von uns persönlich, auch wenn du das Gefühl hast, dass dem so sei.

  • Diskussion zu [Skripte] control hover effekt ohne fehler

    • BugFix
    • 31. August 2020 um 19:15
    Zitat von Professor Bernd

    Nun, dann ist ja die Schuld-Frage geklärt: Ich bin an allem Schuld.

    Wollen wir uns hier tatsächlich auf Sandkasten-Kindergartenniveau begeben? "Du hast meine Sandburg kaputt gemacht!" - "Aber du hast mein Schaufelchen geklaut!"

    Echt jetzt?

    Also einmal die Maske vom Gesicht nehmen und tief durchatmen. :D

  • Diskussion zu [Skripte] control hover effekt ohne fehler

    • BugFix
    • 31. August 2020 um 17:19
    Zitat von Professor Bernd

    Ich finde es schade, dass der Thread gekapert wurde, um CallBacks zu diskutieren.

    Ich stimme dir insofern zu, dass die Diskussion hier fehl am Platz ist. Ich werde dem Rechnung tragen und die Posts in einen eigenen Thread verschieben.

    Zitat von Professor Bernd

    Die CallBack-Routinen hier ermöglichen keinen Hover-Effekt, sie dienen nur dem Aufruf des Hover-Codes, den man auch mithilfe der Hauptschleife machen kann oder über einen Timer. Auch darüber könnte man diskutieren, aber das alles ist zweitrangig, denn es ging eigentlich um den Code für den Hover-Effekt.

    Das sehe ich völlig anders.

    Was löst den Hover Effekt aus? - Die Maus wird bewegt und begibt sich in die Fläche eines Control.

    Ergo ist die Aufgabe: Erkenne ob die Maus gegenüber ihrer letzten Position auf ein (anderes) Control gewechselt ist.

    Und es ist schon ein gravierender Unterschied, wie diese Erkennung initiiert wird:

    • kontinuierliches Prüfen, ob sich was getan hat
      oder
    • nur das Ereignis überwachen, das ein Hovern ermöglicht

    Das sind völlig unterschiedliche Ansätze das Hovern zu detektieren.

    Zitat von Professor Bernd

    Der Titel des Threads heißt "control hover effekt ohne fehler" und NICHT "wie rufe ich den Hover-Effekt ab besten auf"!

    Man kann den Hover-Effekt nicht aufrufen. Man kann ausschließlich überwachen, ob er auftritt. Und das wäre auch dann ein aussagekräftigerer Titel für diesen Thread: "Überwachung des Hover Effektes für ein Control ohne Fehler"

  • Diskussion zu [Skripte] control hover effekt ohne fehler

    • BugFix
    • 31. August 2020 um 10:42

    Um vielleicht nochmal auf den Grund zur Erstellung dieser Version durch den TE zurückzukommen:

    Er bemängelte die Zuverlässigkeit der Callback Version.

    Das kann damals durchaus Gültigkeit gehabt haben. Im April 2008 war die aktuelle Version von AutoIt die 3.2.10.0. In dieser Version wurden erstmals eingeführt DllCallbackRegister(), DllCallbackGetPtr() und DllCallbackFree(). Für diese Funktionen gab es noch spätere Fixes bis zur Version 3.3.10.0 im Jahr 2013.

    Ich kann für diese Funktionen nach heutigem Stand keinerlei Probleme ausmachen.

    Wenn dies also der primäre Grund für die In-Loop-Version war, ist diese heute obsolet. Natürlich kann man sie auch weiterhin nutzen. Aber sollte nicht auch immer das Augenmerk darauf gerichtet sein, Code möglichst optimal zu gestalten? Und statt in einer Schleife ständig eine Abfrage durchzuführen, diese nur auf ein gewünschtes Ereignis hin auszulösen, stellt ohne jeden Zweifel eine Optimierung dar.

    Effizienz lässt sich mal ganz grob gesagt, darauf herunterbrechen, wie viel Takte ein Prozessor rattern muss, um zum Resultat zu kommen. Dabei ist es eher zweitrangig, wenn der Code optisch größer ist (mehr Zeilen enthält).

    Aber dies ist nur meine Meinung. ;)

  • Diskussion zu [Skripte] control hover effekt ohne fehler

    • BugFix
    • 29. August 2020 um 17:46
    Zitat von Professor Bernd

    Schön zu sehen ist auch, dass du für den Hover-Effekt ebenfalls die Lösung von Health verwendet hast.

    Naja, das ist keine "Lösung", sondern simple Programmierlogik, die du in hunderten Skripten findest: Vergleiche aktuellen Zustand/Wert mit letztem Zustand/Wert.

    Zitat von Professor Bernd

    In deiner CallBack Lösung läuft der HoverCheck auch ständig, nur halt in einem CallBack statt in einer Schleife.

    Definitiv NEIN!

    Eine Callbackfunktion wird erst auf ein bestimmtes Ereignis hin aktiv. In meiner Funktion auf LowLevel - Mausaktionen.

    Setze einfach in die erste Zeile der Funktion ein ConsoleWrite('Callback' & @CRLF) und du wirst sehen, dass ausschließlich bei Mausaktionen in die Konsole geschrieben wird.

  • Diskussion zu [Skripte] control hover effekt ohne fehler

    • BugFix
    • 29. August 2020 um 10:43
    Zitat von Professor Bernd

    Wie würde deine CallBack-Lösung aussehen?

    Für die Abfrage, ob die Maus über dem Control ist, ist GUIGetCursorInfo das probateste Mittel.

    Was aber an deiner Lösung nicht so schön ist, deine Funktion zum HooverCheck läuft ständig (ca. alle 50 ms), auch wenn die Maus nicht bewegt wird.

    Deshalb habe ich in meiner Variante die Mausbewegung (eine Callback-Funktion) als Auslöser genommen.

    P.S.

    Falls die Frage kommt, warum ich nicht WM_MOUSEMOVE mit GUIRegisterMessage verwendet habe: WM_MOUSEMOVE sendet seine Nachrichten nicht an das Parent. D.h., wenn ich über einem Ctrl bin und habe die Nachricht für das Fenster registriert, bekommt dieses davon nichts mit.

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    
    Opt("MustDeclareVars", 1)
    OnAutoItExitRegister('OnAutoItExit')
    
    Global $__hMouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
    Global $__hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($__hMouseProc), _WinAPI_GetModuleHandle(0))
    
    Global Const $COLOR_HOOVER = 0xD7EDFF ; helles grau
    Global Const $COLOR_NORMAL = 0xE6E6E6 ; helles blau
    
    Global $Form1 = GUICreate("Form1", 514, 330)
    Global $Label1 = GUICtrlCreateLabel("Label1", 96, 88, 92, 33, BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER))
    GUICtrlSetBkColor(-1, $COLOR_NORMAL)
    Global $Label2 = GUICtrlCreateLabel("Label2", 208, 88, 92, 33, BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER))
    GUICtrlSetBkColor(-1, $COLOR_NORMAL)
    Global $Label3 = GUICtrlCreateLabel("Label3", 320, 88, 92, 33, BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER))
    GUICtrlSetBkColor(-1, $COLOR_NORMAL)
    GUISetState(@SW_SHOW)
    
    
    While 1
      Local $nMsg = GUIGetMsg()
      Switch $nMsg
        Case $GUI_EVENT_CLOSE
          ExitLoop
      EndSwitch
    WEnd
    
    Func OnAutoItExit()
        _WinAPI_UnhookWindowsHookEx($__hHook)
        DllCallbackFree($__hMouseProc)
    EndFunc   ;==>OnAutoItExit
    
    ; ==============================================================================
    ; ID_IsInList_HoverBK
    ;
    ; Routine zum Ermitteln, ob die übergebene Control-ID in der Liste ist.
    ; Routine to determine whether the passed Control ID is in the list.
    ; ------------------------------------------------------------------------------
    Func ID_IsInList_HoverBK($_iID)
      Switch $_iID
        ; Liste der Controls für den Hover-Effekt. / List of controls for the hover effect.
        Case $Label1, $Label2, $Label3
          Return True
        Case Else
          Return False
      EndSwitch
    EndFunc ; ==> ID_IsInList_HoverBK
    
    Func _MouseProc($_nCode, $_wParam, $_lParam)
        If $_nCode < 0 Then Return _WinAPI_CallNextHookEx($__hHook, $_nCode, $_wParam, $_lParam)
        Local Static $ID_last
        Local $ID_Hoover
        Switch $_wParam
            Case $WM_MOUSEMOVE
                $ID_Hoover = GUIGetCursorInfo($Form1)[4]
                If $ID_last <> $ID_Hoover Then
                    If ID_IsInList_HoverBK($ID_last) Then GUICtrlSetBkColor($ID_last, $COLOR_NORMAL)
                    If ID_IsInList_HoverBK($ID_Hoover) Then GUICtrlSetBkColor($ID_Hoover, $COLOR_HOOVER)
                    $ID_last = $ID_Hoover
                EndIf
        EndSwitch
        Return _WinAPI_CallNextHookEx($__hHook, $_nCode, $_wParam, $_lParam)
    EndFunc
    Alles anzeigen
  • Diskussion zu [Skripte] control hover effekt ohne fehler

    • BugFix
    • 28. August 2020 um 23:36

    Diskussion zu diesem Thread: RE: control hover effekt ohne fehler

    Also "einfacher" ist wahrscheinlich Ansichtssache. Ich empfinde Callbacks als erheblich einfacher. ;)

  • Wie kann man eine Variablen-Liste an Switch-Case übergeben?

    • BugFix
    • 28. August 2020 um 17:51

    Ich denke, dass für deinen Zweck eine System.Collections.ArrayList auch gut Verwendung finden könnte:

    AutoIt
    Global Enum $ID_1 = 1, $ID_2, $ID_3, $ID_4, $ID_5, $ID_6, $ID_7, $ID_8, $ID_9, $ID_10
    
    Global $oID = ObjCreate("System.Collections.ArrayList")
    
    ; ID hinzufügen
    ; einzeln
    $oID.Add($ID_1)
    
    ; oder mittels Funktion bis zu 10 ID auf einmal
    _AddID2List($ID_2, $ID_3, $ID_4, $ID_5, $ID_6, $ID_7, $ID_8)
    
    Func _AddID2List($1, $2=Null, $3=Null, $4=Null, $5=Null, $6=Null, $7=Null, $8=Null, $9=Null, $10=Null)
        Local $aParam[] = [$1, $2, $3, $4, $5, $6, $7, $8, $9, $10]
        For $i = 0 To UBound($aParam) -1
            If $aParam[$i] = Null Then Return
            If Not $oID.Contains($aParam[$i]) Then $oID.Add($aParam[$i])
        Next
    EndFunc
    
    ; Prüfung, ob ID in Liste
    ConsoleWrite('$ID_5 enthalten? - ' & $oID.Contains($ID_5) & @CRLF)
    
    ; ID aus der Liste entfernen
    $oID.Remove($ID_5)
    Alles anzeigen
  • Wie kann man eine Variablen-Liste an Switch-Case übergeben?

    • BugFix
    • 27. August 2020 um 15:22
    Zitat von Professor Bernd

    Benutzt du "ByRef $aList", damit das Array nicht umkopiert wird, oder hat es einen anderen Grund?

    Genau, um den Kopiervorgang zu sparen. Ist bei kleinen Arrays sicher nicht von großer Relevanz, aber es ist nicht verkehrt, sich das anzugewöhnen.

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™