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

Beiträge von UEZ

  • FB Code Optimierung

    • UEZ
    • 21. April 2020 um 10:34

    AspirinJunkie sehr gut. 4 Augen sehen mehr als 2. ;)

    In der Tat habe ich es übersehen, dass die kostenintensive Berechnung des Kreises noch optimierbar ist, wenn ich die Konstante cyy * iW innerhalb der For xx Schleife herausnehme.

    Auch 255 / BallSize ist eine Konstante die nicht in der Hauptschleife jedesmal berechnet werden muss!

    Das mit "2 * BallSize" wird nur einmal durchlaufen und macht sich nicht bemerkbar, aber wäre dies in einer permanenten Schleife, dann könnte man die Bitshift Operation wählen.

    Mit diesen zwei Optimierungen konnte ich auf meiner Kiste ca. 10 FPS herausholen! :thumbup:

    Den Richtungsvektor bei Kollision mit den Rändern von *-1 auf -vx/-vy zu stellen, macht sich nicht bemerkbar, da nur die Anzahl der Zellen aufgerufen wird, aber auch eine Optimierungsmöglichkeit.

    So sieht der Code nach dem Update aus:

    Code
    'Coded by UEZ build 2020-04-20
    #Include "fbgfx.bi"
    Using FB
    
    Const iW = 640, iH = 480
    Dim Shared As Ulong Ptr pScrn
    
    Function _ASM_Sqr(n As Single) As Single
        Asm
            rsqrtss xmm0, [n]
            mulss   xmm0, [n]
            movss   [Function], xmm0        
        End Asm
    End Function
    
    Function _Sqrt1(n As Single) As Single
        Dim As Integer highest = 1, sqrt_highest = 1
        While highest < n
            highest Shl= 2
            sqrt_highest Shl= 1
        Wend
        n /= highest
        Dim As Single result
        result = (n / 4) + 1
        result = (result / 2) + (n / (result * 2))
        result = (result / 2) + (n / (result * 2))
        Return result * sqrt_highest
    End Function
    
    Function _Sqrt2(n As Single) As Single 'only 32 bit compatible
        Dim As Integer i = Cvi(n)
        i = &h1FB90000 + (i Shr 1)
        Dim As Single y = Cvs(i)
        Return (y + n / y) / 2
    End Function
    
    Function _Sqrt25(n As Single) As Single
        Dim As ULong i = *Cptr(Ulong Ptr, @n)
        i = &h1FB90000 + (i Shr 1)
        Dim As Single y = *Cptr(Single Ptr, @i)
        Return (y + n / y) / 2
    End Function
    
    'http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi
    Function _Sqrt3(x As Single) As Single 'only 32bit
      Dim As ULong y = *Cptr(Ulong Ptr, @x), s
      s = y And &h80000000
      y And= &h7FFFFFFF
      y += 127 Shl 23
      y Shr= 1
      y Or= s
      Return *Cptr(Single Ptr, @y)
    End Function
    
    Sub _Circle(x As Short, y As Short, r As Short, c As Ulong)
        Dim As Short r2 = r * r, cx, cy, cyy, px1, px2, xx
        Dim As Ulong py
        For cy = -r to r
            cx = _ASM_Sqr(r2 - cy * cy) + 0.5
            cyy = cy + y : cyy = Iif(cyy < 0, 0, Iif(cyy > iH - 1, iH - 1, cyy))
            px1 = x - cx : px1 = Iif(px1 < 0, 0, Iif(px1 > iW - 1, iW - 1, px1))
            px2 = x + cx : px2 = Iif(px2 < 0, 0, Iif(px2 > iW - 1, iW - 1, px2))
            py = cyy * iW
            For xx = px1 To px2'fill circle
                pScrn[py + xx] = c
            Next
        Next
    End Sub
    
    Screenres iW, iH, 32, 2, GFX_WINDOWED Or GFX_NO_SWITCH Or GFX_ALWAYS_ON_TOP' Or GFX_ALPHA_PRIMITIVES
    ScreenSet 1, 0
    
    Windowtitle("Atomic Cell World v0.3 by UEZ")
    
    pScrn = Screenptr()
    
    Type tPoint
        As Single x, y, vx, vy, s
        As Ubyte r, g, b
    End Type
    
    Dim As Ubyte AmountBalls = 50, BallSize = 100, i, BS = BallSize Shr 1
    Dim As Single j, c, d, cc = 255 / BallSize, fSpeed = 2 'BallSize / 255
    
    Dim As tPoint Points(AmountBalls - 1)
    Dim As Ulong iFPS
    
    Randomize Timer, 2
    
    For i = 0 To AmountBalls - 1
        Points(i).x = BallSize + Rnd() * (iW - 2 * BallSize - 1)
        Points(i).y = BallSize + Rnd() * (iH - 2 * BallSize - 1)
        Points(i).vx = Rnd() - 0.5
        Points(i).vy = Rnd() - 0.5
        Points(i).r = Rnd() * 255 'Iif(Rnd() > 0.50, 1, 0)
        Points(i).g = 0 'Iif(Rnd() > 0.50, 1, 0)
        Points(i).b = 0 'Iif(Rnd() > 0.50, 1, 0)
    Next
    
    Dim As Ushort cfps = 0
    Dim As Single fTimer = Timer
    Do
        'Cls
        'Line (0, 0)-(iW - 1, iH - 1), &hFF101010, BF
        Line (1, 1)-(70, 10), &hFF000000, BF
        
        For j = 1 To BallSize Step fSpeed
            c = j * cc
            d = (BallSize - j)
            For i = 0 To AmountBalls - 1
                'Circle(Points(i).x, Points(i).y), d, c Shl 8, , , , F
                '_Circle(Points(i).x, Points(i).y, d, Rgb(Iif(Points(i).r, c, 0), Iif(Points(i).g, c, 0), Iif(Points(i).b, c, 0))) 'different color
                _Circle(Points(i).x, Points(i).y, d, c Shl 8) 'static color
            Next
        Next
        For i = 0 To AmountBalls - 1
            Points(i).x += Points(i).vx
            Points(i).y += Points(i).vy
            If Points(i).x < BS Or Points(i).x > (iW - BS) Then Points(i).vx = -Points(i).vx
            If Points(i).y < BS Or Points(i).y > (iH - BS) Then Points(i).vy = -Points(i).vy
        Next
        
        Draw String(1, 1), iFPS & " fps", Rgb(&hFF, &hFF, &hFF)
    
        Flip
        
        cfps += 1
        If Timer - fTimer > 0.99 Then
            iFPS = cfps
            cfps = 0
            fTimer = Timer
        End If
        
        Sleep(1)
    Loop Until Len(Inkey())
    Alles anzeigen

    Könnt ihr auch den Unterschied auf eurem PC sehen? Auf meinem Rechner ist die FPS von ca. 30 auf ca. 40 FPS geklettert.

    Dateien

    FB Atomic Cell World.zip 64,09 kB – 845 Downloads
  • FB Code Optimierung

    • UEZ
    • 21. April 2020 um 08:44

    Ich such nach einer Möglichkeit folgenden Code zu beschleunigen:

    Code
    'Coded by UEZ build 2020-04-20
    #Include "fbgfx.bi"
    Using FB
    
    Const iW = 640, iH = 480
    Dim Shared As Ulong Ptr pScrn
    
    Function _ASM_Sqr(n As Single) As Single
        Asm
            rsqrtss xmm0, [n]
            mulss   xmm0, [n]
            movss   [Function], xmm0        
        End Asm
    End Function
    
    Function _Sqrt1(n As Single) As Single
        Dim As Integer highest = 1, sqrt_highest = 1
        While highest < n
            highest Shl= 2
            sqrt_highest Shl= 1
        Wend
        n /= highest
        Dim As Single result
        result = (n / 4) + 1
        result = (result / 2) + (n / (result * 2))
        result = (result / 2) + (n / (result * 2))
        Return result * sqrt_highest
    End Function
    
    Function _Sqrt2(n As Single) As Single 'only 32 bit compatible
        Dim As Integer i = Cvi(n)
        i = &h1FB90000 + (i Shr 1)
        Dim As Single y = Cvs(i)
        Return (y + n / y) / 2
    End Function
    
    Function _Sqrt25(n As Single) As Single
        Dim As ULong i = *Cptr(Ulong Ptr, @n)
        i = &h1FB90000 + (i Shr 1)
        Dim As Single y = *Cptr(Single Ptr, @i)
        Return (y + n / y) / 2
    End Function
    
    'http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi
    Function _Sqrt3(x As Single) As Single 'only 32bit
      Dim As ULong y = *Cptr(Ulong Ptr, @x), s
      s = y And &h80000000
      y And= &h7FFFFFFF
      y += 127 Shl 23
      y Shr= 1
      y Or= s
      Return *Cptr(Single Ptr, @y)
    End Function
    
    Sub _Circle(x As Short, y As Short, r As Short, c As Ulong)
        Dim As Short r2 = r * r, cx, cy, cyy, px1, px2, py, xx
        For cy = -r to r
            cx = _ASM_Sqr(r2 - cy * cy) + 0.5
            cyy = cy + y : cyy = Iif(cyy < 0, 0, Iif(cyy > iH - 1, iH - 1, cyy))
            px1 = x - cx : px1 = Iif(px1 < 0, 0, Iif(px1 > iW - 1, iW - 1, px1))
            px2 = x + cx : px2 = Iif(px2 < 0, 0, Iif(px2 > iW - 1, iW - 1, px2))
            For xx = px1 To px2'fill circle
                pScrn[cyy * iW + xx] = c
            Next
        Next
    End Sub
    
    Screenres iW, iH, 32, 2, GFX_WINDOWED Or GFX_NO_SWITCH Or GFX_ALWAYS_ON_TOP' Or GFX_ALPHA_PRIMITIVES
    ScreenSet 1, 0
    
    Windowtitle("Atomic Cell World v0.3 by UEZ")
    
    pScrn = Screenptr()
    
    Type tPoint
        As Single x, y, vx, vy, s
        As Ubyte r, g, b
    End Type
    
    Dim As Ubyte AmountBalls = 50, BallSize = 100, i, BS = BallSize Shr 1
    Dim As Single j, c, d, fSpeed = 2 'BallSize / 255
    
    Dim As tPoint Points(AmountBalls - 1)
    Dim As Ulong iFPS
    
    Randomize Timer, 2
    
    For i = 0 To AmountBalls - 1
        Points(i).x = BallSize + Rnd() * (iW - 2 * BallSize - 1)
        Points(i).y = BallSize + Rnd() * (iH - 2 * BallSize - 1)
        Points(i).vx = Rnd() - 0.5
        Points(i).vy = Rnd() - 0.5
        Points(i).r = Rnd() * 255 'Iif(Rnd() > 0.50, 1, 0)
        Points(i).g = 0 'Iif(Rnd() > 0.50, 1, 0)
        Points(i).b = 0 'Iif(Rnd() > 0.50, 1, 0)
    Next
    
    Dim As Ushort cfps = 0
    Dim As Single fTimer = Timer
    Do
        'Cls
        'Line (0, 0)-(iW - 1, iH - 1), &hFF101010, BF
        Line (1, 1)-(70, 10), &hFF000000, BF
        
        For j = 1 To BallSize Step fSpeed
            c = j * 255 / BallSize
            d = (BallSize - j)
            For i = 0 To AmountBalls - 1
                'Circle(Points(i).x, Points(i).y), d, c Shl 8, , , , F
                '_Circle(Points(i).x, Points(i).y, d, Rgb(Iif(Points(i).r, c, 0), Iif(Points(i).g, c, 0), Iif(Points(i).b, c, 0))) 'different color
                _Circle(Points(i).x, Points(i).y, d, c Shl 8) 'static color
            Next
        Next
        For i = 0 To AmountBalls - 1
            Points(i).x += Points(i).vx
            Points(i).y += Points(i).vy
            If Points(i).x < BS Or Points(i).x > (iW - BS) Then Points(i).vx *= - 1
            If Points(i).y < BS Or Points(i).y > (iH - BS) Then Points(i).vy *= - 1
        Next
        
        Draw String(1, 1), iFPS & " fps", Rgb(&hFF, &hFF, &hFF)
    
        Flip
        
        cfps += 1
        If Timer - fTimer > 0.99 Then
            iFPS = cfps
            cfps = 0
            fTimer = Timer
        End If
        
        Sleep(1)
    Loop Until Len(Inkey())
    Alles anzeigen

    Das Resultat sollte so aussehen:

    Atomic Cell World.jpg

    Nach meinem Verständnis kostet die "_Circle" Funktion am meisten Zeit. Warum auch immer ist die Build-in Circle Funktion schneller (Zeile 109).

    Habt ihr noch Ideen, wie ich den Code optimieren kann, damit der Code schneller läuft?

    Soll ich ein kleines Tutorial schreiben, wie man FB benutzt? Ist fast ähnlich einfach zu bedienen wie SciTE, wenn man die erste kleine Hürde genommen hat die Umgebung einzurichten.

    Dateien

    FB Atomic Cell World.zip 66,21 kB – 860 Downloads
  • MsgBox verlangsamt den Skriptablauf unter Win 10

    • UEZ
    • 5. April 2020 um 15:33

    Ein einfaches

    Code
    AutoItSetOption('GUIOnEventMode', 1)

    verlangsamt auch das Skript

    Code
    AutoItSetOption('GUIOnEventMode', 1)
    $start = TimerInit()
    $x = 0
    For $i = 1 To 5000000
        $x += 1
    Next
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : TimerDiff($start) = ' & TimerDiff($start) & @CRLF) ;### Debug Console

    Unter FreeBasic gibt es keine Probleme!

    Code
    #include "string.bi"
    #Include Once "windows.bi"
    
    Sub Test(sMsg As String = "")
        Static As Uinteger iLoop = 1, iValue
        ? ">>>>> Check " & iLoop & " " & sMsg & " <<<<<<"
        
        Dim As Double iTime
        For j As Ubyte = 1 To 3
            iTime = Timer
            iValue = 0
            For i As Uinteger = 1 To 750000000
                iValue += 1
            Next
            ? "Elapsed Time " & j & ": " & (Timer - iTime) * 1000 & " ms"
        Next
        iLoop += 1
    End Sub
    
    Test("")
    Messagebox(0, "Test", "Test", MB_OK)
    Test("after Messagebox call")
    ? "Done"
    Sleep
    Alles anzeigen

    Output:

    Code
    >>>>> Check 1  <<<<<<
    Elapsed Time 1: 1634.368500014247 ms
    Elapsed Time 2: 1568.77529999646 ms
    Elapsed Time 3: 1718.41980000012 ms
    >>>>> Check 2 after Messagebox call <<<<<<
    Elapsed Time 1: 1621.735800009915 ms
    Elapsed Time 2: 1752.797799986425 ms
    Elapsed Time 3: 1734.618899997685 ms
    Done
  • Variablen

    • UEZ
    • 3. April 2020 um 08:21

    EGMS : du musst das DirCopy simulieren, d.h. du schreibst dir dein eigene DirCopy Funktion.

    Im Prinzip liest du dir alle Ordner und Dateien vom Quell Ordner per _FileListToArrayRec() ein Array ein und kopiert diese Dateien aus dem Array mit FileCopy() sukzessive.

    Somit kannst du auch ein Status Balken direkt einbauen.

  • WinMove zerstört Label

    • UEZ
    • 28. März 2020 um 18:28

    Ich glaube, dass du in diesem Fall die Breite und Höhe des Label Controls in Zeile 70/71 explizit angeben musst. D.h. du musst vorher die Breite / Höhe ermitteln.

  • Allgemeiner Meinungsaustausch zum Thema "Corona"

    • UEZ
    • 26. März 2020 um 10:42

    2.jpeg

    4.jpeg

    1.jpeg

    6.jpeg

    7.jpeg

    9.jpeg

    5.jpeg

    3.jpeg

    8_autoscaled.jpg


    https://www.gmx.net/magazine/news/…akrise-34549604


    Bleibt gesund! :!:

  • Mehr Daten, als Partition groß ist! wtf...

    • UEZ
    • 18. März 2020 um 15:40

    Versuche es mal mit

    DU von SysInternals

    Code
    DU v1.61 - Directory disk usage reporter
    Copyright (C) 2005-2016 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    usage: du [-c[t]] [-l <levels> | -n | -v] [-u] [-q] <directory>
       -c     Print output as CSV. Use -ct for tab delimiting.
              Use -nobanner to suppress banner.
       -l     Specify subdirectory depth of information (default is one level).
       -n     Do not recurse.
       -q     Quiet.
       -nobanner
              Do not display the startup banner and copyright message.
       -u     Count each instance of a hardlinked file.
       -v     Show size (in KB) of all subdirectories.
    
    CSV output is formatted as:
    Path,CurrentFileCount,CurrentFileSize,FileCount,DirectoryCount,DirectorySize,DirectorySizeOnDisk
    Alles anzeigen

    Dort hast du den Parameter -u.

  • Rule 110 - zellulärer Automat

    • UEZ
    • 14. Februar 2020 um 09:51
    Zitat von Andy

    //EDIT

    UEZ war schneller....so ist das, wenn man die Posts erst Stunden/Tage nach dem Editieren los schickt :Face:

    8)

    ;)

  • Rule 110 - zellulärer Automat

    • UEZ
    • 12. Februar 2020 um 14:46

    Hier eine tick schnellere Version:

    C
    #cs ----------------------------------------------------------------------------
    
     AutoIt Version: 3.3.14.5
     Author:         alpines
    
     Script Function:
        AutoIt implementation of the "game" Rule 110.
        https://en.wikipedia.org/wiki/Rule_110
    
    #ce ----------------------------------------------------------------------------
    
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <StringConstants.au3>
    
    Global Const $I_GUI_WIDTH = 1024
    Global Const $I_GUI_HEIGHT = 768
    
    Opt("GUIOnEventMode", 1)
    
    #cs
        Interessante Rules
    
        Rule 126 = Sierpinski Dreieck
        Rule 122 = Schachbrett
        Rule 118 = Schattierte Pyramide
    
        Rule 137 = Invertiertes Rule 110
    #ce
    
    Global Const $I_RULE = 110; max. 8 bit => 255
    
    Global $oRule = ObjCreate("Scripting.Dictionary")
    
    For $iBitA = 0 To 1
        For $iBitB = 0 To 1
            For $iBitC = 0 To 1
                Local $iCurrentBit = BitShift(1, -(BitShift($iBitA, -2) + BitShift($iBitB, -1) + BitShift($iBitC, -0)))
                $oRule.Add($iBitA & $iBitB & $iBitC, BitAND($I_RULE, $iCurrentBit) ? 1 : 0)
            Next
        Next
    Next
    
    Global $hGUI = GUICreate("Rule " & $I_RULE, $I_GUI_WIDTH, $I_GUI_HEIGHT)
    GUISetOnEvent($GUI_EVENT_CLOSE, ExitApp)
    GUISetState(@SW_SHOW, $hGUI)
    
    Global $aCells[$I_GUI_HEIGHT][$I_GUI_WIDTH]
    For $i = 0 To UBound($aCells) - 1
        For $j = 0 To UBound($aCells, 2) - 1
            $aCells[$i][$j] = 0
        Next
    Next
    
    ;Ausgangssituation! Für Rule 110 die letzte Spalte in der ersten Zeile 1 setzen.
    ;Es ist hier in die Mitte gesetzt um es nicht ständig umsetzen zu müssen.
    ;Interessante Muster kommen auch raus wenn man mehrere Startpunkte 1 setzt ;)
    $aCells[0][UBound($aCells, 2) / 2] = 1
    
    _GDIPlus_Startup()
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    Global $tPixelData = DllStructCreate("uint scan0[" & $I_GUI_WIDTH * $I_GUI_HEIGHT  & "];")
    Global $hBitmap = _GDIPlus_BitmapCreateFromScan0($I_GUI_WIDTH, $I_GUI_HEIGHT, $GDIP_PXF32ARGB, $I_GUI_WIDTH * 4, $tPixelData)
    
    Global $iUB1 = UBound($aCells) - 1, $iUB2 = UBound($aCells, 2) - 1, $t1, $tmrRow = TimerInit()
    
    For $iRow = 1 To $iUB1
        $t1 = $iRow - 1
        $iRO = $t1
        $iRowOffset = $iRO * $I_GUI_WIDTH
        For $iColumn = 0 To $iUB2
            $aCells[$iRow][$iColumn] = $oRule.Item((($iColumn = 0) ? 0 : $aCells[$t1][$iColumn - 1]) & _
                                                                         ($aCells[$t1][$iColumn]) & _
                                                                        (($iColumn = $iUB2) ? 0 : $aCells[$t1][$iColumn + 1]))
            $tPixelData.Scan0(($iRowOffset + $iColumn)) = $aCells[$iRow][$iColumn] ? 0xFF000000 : 0xFFFFFFFF
        Next
        DllCall($__g_hGDIPDll,  "int", "GdipDrawImageRectRect", "handle", $hGraphics, "handle", $hBitmap, _
                                            "float", 0, "float", $iRO, "float", $I_GUI_WIDTH, "float", 1, _
                                            "float", 0, "float", $iRO, "float", $I_GUI_WIDTH, "float", 1, _
                                            "int", 2, "handle", 0, "ptr", 0, "ptr", 0)
    Next
    
    ConsoleWrite(TimerDiff($tmrRow) & @CRLF)
    
    While Sleep(10)
    WEnd
    
    Func ExitApp()
        _GDIPlus_GraphicsDispose($hGraphics)
        _GDIPlus_BitmapDispose($hBitmap)
        _GDIPlus_Shutdown()
        Exit
    EndFunc
    Alles anzeigen
  • Flash-Test

    • UEZ
    • 8. Februar 2020 um 19:42

    Hi Oscar,

    zwei kleine Anmerkungen:

    • Wenn ich in dem Viewer auf "Grafik erstellen / Text erstellen" klicke, dann kommt keine Meldung, dass die Datei erstellt wurden.
    • Legenden in den Grafiken sollte nicht fehlen

    Ansonsten super Tool!

  • Flash-Test

    • UEZ
    • 7. Februar 2020 um 15:21

    Der Anschluß wird jetzt angezeigt, aber ich habe noch ein Bug gefunden.

    Wenn du z.B. den Test-Speicherplatz auf 1GB und "Nur Lesetest" drückst, dann wird der Test durchgeführt. Aber erhöhst du dann auf 10 GB und startest den Test nochmals, dann werden immer noch 1 GB gelesen.

    Es würde auch Sinn machen, wenn der Graph auf die Test Größe vergrößert werden würde, da ansonsten nur ein paar Striche zu sehen sind.

    Edit1: es sieht so aus, dass grundsätzlich nur 1GB gelesen wird.

    Edit2: man muss anscheinend erst die Datei per "Schreib-/Lesetest" generieren lassen, die auch nur dann für "Nur Lesetest" verwendet wird, unabhängig davon, was man manuell eingibt.

  • Flash-Test

    • UEZ
    • 7. Februar 2020 um 10:54

    Danke!

    Ich hatte auch danach gesucht, aber nicht gefunden...:whistling:

  • Flash-Test

    • UEZ
    • 7. Februar 2020 um 09:44

    Laut HWiNFO scheint sie eine SANDisk zu sein.

    Oscar hast du den Link?

  • Flash-Test

    • UEZ
    • 7. Februar 2020 um 09:09

    Hi Oscar,

    Der Output von

    Code
    #include <WinAPIFiles.au3>
    
    ConsoleWrite(_WinAPI_GetDriveBusType('c:') & @CR)

    ist 17.

    Das Medium ist eine SSD Platte und an NVM Express angeschlossen.

  • Flash-Test

    • UEZ
    • 6. Februar 2020 um 21:03

    Hi Oscar,

    bekomme eine Fehlermeldung, wenn ich das C-Laufwerk selektiere:

    Code
    ...\FlashTest\FlashTest.au3" (595) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    GUICtrlSetData($idBusTyp, $aBusType[$iBus])
    GUICtrlSetData($idBusTyp, ^ ERROR
  • GDI+ Parallax Effect

    • UEZ
    • 12. Januar 2020 um 18:53

    Bitnugger und Werty : danke für euer Feeback. :)

  • GDI+ Parallax Effect

    • UEZ
    • 7. Januar 2020 um 22:10

    Hier ein kleines Skript zum Anzeigen des Parallax Effektes. Original Idee stammt von Fernando Cohen und kann hier betrachtet werden: https://codepen.io/designfenix/pen/pYyOJE

    C
    ;Coded by UEZ build 2020-01-07
    ;Original idea and graphic concept by Fernando Cohen -> https://codepen.io/designfenix/pen/pYyOJE
    #pragma compile(Icon, "c:\Program Files (x86)\AutoIt3\Icons\au3.ico")
    #AutoIt3Wrapper_Run_Au3Stripper=y
    #Au3Stripper_Parameters=/so /pe /rm
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3"
    
    #include <GDIPlus.au3>
    #include <GuiConstantsEx.au3>
    #include <InetConstants.au3>
    #include <WindowsConstants.au3>
    
    
    _GDIPlus_Startup()
    Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit
    Global Const $iW = 1200, $iH = 700, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ Parallax Effect v0.55"
    Global Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi
    AutoItSetOption("GUIOnEventMode", 1)
    
    ParallaxFX()
    
    AutoItSetOption("GUIOnEventMode", 0)
    _GDIPlus_Shutdown()
    
    
    Func ParallaxFX()
        ConsoleWrite("Downloading images if images don't exist locally...Please wait!" & @CRLF)
        Local Const $sImg1 = @ScriptDir & "\mountain.png", $sImg2 = @ScriptDir & "\island.png", $sImg3 = @ScriptDir & "\bird.png", $sImg4 = @ScriptDir & "\boat.png"
        If Not FileExists($sImg1) Then InetGet("http://www.design-fenix.com.ar/parallax/mountain.png", $sImg1, BitOR($INET_FORCERELOAD, $INET_BINARYTRANSFER))
        If Not FileExists($sImg2) Then InetGet("http://www.design-fenix.com.ar/parallax/island.png", $sImg2, BitOR($INET_FORCERELOAD, $INET_BINARYTRANSFER))
        If Not FileExists($sImg3) Then InetGet("http://www.design-fenix.com.ar/parallax/bird.png", $sImg3, BitOR($INET_FORCERELOAD, $INET_BINARYTRANSFER))
        If Not FileExists($sImg4) Then InetGet("http://www.design-fenix.com.ar/parallax/boat.png", $sImg4, BitOR($INET_FORCERELOAD, $INET_BINARYTRANSFER))
    
        $bExit = False
        $hGUI = GUICreate($sTitle, $iW, $iH) ;, 0, 0, $WS_POPUP)
        Local Const $iLabel = GUICtrlCreateLabel("", 0, 0, $iW, $iH)
        GUISetState(@SW_SHOW, $hGUI)
        GUISetCursor(9, 1)
    
        ;create canvas elements
        Local Const $hDC = _WinAPI_GetDC($hGUI)
        Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
        Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC)
        Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap)
        Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer)
        _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
        _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
        _GDIPlus_GraphicsSetTextRenderingHint($hCanvas, $GDIP_TEXTRENDERINGHINT_ANTIALIASGRIDFIT)
    
        Local Const $hBrush_Clr = _GDIPlus_BrushCreateSolid(0xFFF4F9FA), _
                    $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0808080), _
                    $hFormat_FPS = _GDIPlus_StringFormatCreate(), _
                    $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _
                    $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _
                    $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 60, 16)
    
        $iFPS = 0
    
        Local $tObj = DllStructCreate("float x1;float y1;float x2;float y2;float x3;float y3;float x4;float y4;" & _
                                      "float dx1;float dy1;float dx2;float dy2;float dx3;float dy3;float dx4;float dy4;" & _
                                      "ptr bmp1;ptr bmp2;ptr bmp3;ptr bmp4")
    
        $tObj.bmp1 = _GDIPlus_ImageLoadFromFile($sImg1)
        $tObj.bmp2 = _GDIPlus_ImageLoadFromFile($sImg2)
        $tObj.bmp3 = _GDIPlus_ImageLoadFromFile($sImg3)
        $tObj.bmp4 = _GDIPlus_ImageLoadFromFile($sImg4)
    
        $tObj.x1 = ($iW - _GDIPlus_ImageGetWidth($tObj.bmp1)) / 2
        $tObj.y1 = 60
        $tObj.x2 = ($iW - _GDIPlus_ImageGetWidth($tObj.bmp2)) / 2
        $tObj.y2 = 250
        $tObj.x3 = 210
        $tObj.y3 = 250
        $tObj.x4 = $iW - _GDIPlus_ImageGetWidth($tObj.bmp4) - 300
        $tObj.y4 = 430
    
        Local $hFamily = _GDIPlus_FontFamilyCreate("Impact"), $hFont = _GDIPlus_FontCreate($hFamily, 120), $hFormat = _GDIPlus_StringFormatCreate(), _
              $tLayout = _GDIPlus_RectFCreate(), $hBrush = _GDIPlus_BrushCreateSolid(0xD8FFFFFF), _
              $hFamily_s = _GDIPlus_FontFamilyCreate("Palatino Linotype"), $hFont_s = _GDIPlus_FontCreate($hFamily_s, 24), _
              $tLayout_s = _GDIPlus_RectFCreate($iW + 1, $iH - 44, $iW * 2, 50), $hBrush_s = _GDIPlus_BrushCreateSolid(0x2884898A)
    
        Local $aDim = _GDIPlus_GraphicsMeasureString($hCanvas, "Parallax", $hFont, $tLayout, $hFormat)
        Local $sScrollerTxt = "Parallax Effect ported to AutoIt by UEZ. Original idea and graphic concept by Fernando Cohen."
        Local $aDim2 = _GDIPlus_GraphicsMeasureString($hCanvas, $sScrollerTxt, $hFont_s, $tLayout_s, $hFormat)
    
        $tLayout.x = ($iW - $aDim[0].width) / 2
        $tLayout.y = 190
        Local $aMPos, $aDir[4][2] = [[16, 128], [32, 64], [64, 32], [128, 16]], $iDir = 0, _
              $iPosX = GUIGetCursorInfo($hGUI)[0], $iPosY = GUIGetCursorInfo($hGUI)[1]
    
        GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About")
        AdlibRegister("CalcFPS", 1000)
    
        Local $fVx, $fVy, $fAcc = 0.925, $fVmax = 32
    
        Do
            DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, _
                                   "float", $iW, "float", $iH) ;erase canvas background
    
            $aMPos = GUIGetCursorInfo($hGUI)
            If ($iPosX <> $aMPos[0] Or $iPosY <> $aMPos[1]) And $aMPos[4] = $iLabel Then
                $fVx = $aMPos[0] - $iPosX
                $fVy = $aMPos[1] - $iPosY
                If $fVx < 0 Then
                    $fVx = $fVx < -$fVmax ? -$fVmax : $fVx
                Else
                    $fVx = $fVx > $fVmax ? $fVmax : $fVx
                EndIf
                If $fVy < 0 Then
                    $fVy = $fVy < -$fVmax ? -$fVmax : $fVy
                Else
                    $fVy = $fVy > $fVmax ? $fVmax : $fVy
                EndIf
                $tObj.dx1 = -$fVx / $aDir[0][$iDir]
                $tObj.dy1 = -$fVy / $aDir[0][$iDir]
                $tObj.dx2 = -$fVx / $aDir[1][$iDir]
                $tObj.dy2 = -$fVy / $aDir[1][$iDir]
                $tObj.dx3 = -$fVx / $aDir[2][$iDir]
                $tObj.dy3 = -$fVy / $aDir[2][$iDir]
                $tObj.dx4 = -$fVx / $aDir[3][$iDir]
                $tObj.dy4 = -$fVy / $aDir[3][$iDir]
    
                $tObj.x1 += $tObj.dx1
                $tObj.y1 += $tObj.dy1
                $tObj.x2 += $tObj.dx2
                $tObj.y2 += $tObj.dy2
                $tObj.x3 += $tObj.dx3
                $tObj.y3 += $tObj.dy3
                $tObj.x4 += $tObj.dx4
                $tObj.y4 += $tObj.dy4
    
                $iPosX = $aMPos[0]
                $iPosY = $aMPos[1]
            Else
                $tObj.dx1 *= $fAcc
                $tObj.dy1 *= $fAcc
                $tObj.dx2 *= $fAcc
                $tObj.dy2 *= $fAcc
                $tObj.dx3 *= $fAcc
                $tObj.dy3 *= $fAcc
                $tObj.dx4 *= $fAcc
                $tObj.dy4 *= $fAcc
                $tObj.x1 += $tObj.dx1
                $tObj.y1 += $tObj.dy1
                $tObj.x2 += $tObj.dx2
                $tObj.y2 += $tObj.dy2
                $tObj.x3 += $tObj.dx3
                $tObj.y3 += $tObj.dy3
                $tObj.x4 += $tObj.dx4
                $tObj.y4 += $tObj.dy4
            EndIf
    
            _GDIPlus_GraphicsDrawImage($hCanvas, $tObj.bmp1, $tObj.x1, $tObj.y1)
            _GDIPlus_GraphicsDrawStringEx($hCanvas, "Parallax", $hFont, $tLayout, $hFormat, $hBrush)
            _GDIPlus_GraphicsDrawImage($hCanvas, $tObj.bmp2, $tObj.x2, $tObj.y2)
            _GDIPlus_GraphicsDrawImage($hCanvas, $tObj.bmp3, $tObj.x3, $tObj.y3)
            _GDIPlus_GraphicsDrawImage($hCanvas, $tObj.bmp4, $tObj.x4, $tObj.y4)
    
            _GDIPlus_GraphicsDrawStringEx($hCanvas, $sScrollerTxt, $hFont_s, $tLayout_s, $hFormat, $hBrush_s)
            $tLayout_s.x -= 1.0
            If $tLayout_s.x < -$aDim2[0].width Then $tLayout_s.x = $iW + 10
    
            _GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) ;draw background message text
            _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) ;blit drawn bitmap to GUI
    
            $iFPS += 1
            If $bExit Then ExitLoop
        Until Not Sleep(10)
    
        AdlibUnRegister("CalcFPS")
        ;release resources
        _GDIPlus_ImageDispose($tObj.bmp1)
        _GDIPlus_ImageDispose($tObj.bmp2)
        _GDIPlus_ImageDispose($tObj.bmp3)
        _GDIPlus_ImageDispose($tObj.bmp4)
        _GDIPlus_StringFormatDispose($hFormat)
        _GDIPlus_BrushDispose($hBrush)
        _GDIPlus_FontDispose($hFont)
        _GDIPlus_FontFamilyDispose($hFamily)
        _GDIPlus_BrushDispose($hBrush_s)
        _GDIPlus_FontDispose($hFont_s)
        _GDIPlus_FontFamilyDispose($hFamily_s)
    
        _GDIPlus_FontFamilyDispose($hFamily_FPS)
        _GDIPlus_StringFormatDispose($hFormat_FPS)
        _GDIPlus_BrushDispose($hBrush_Clr)
        _GDIPlus_BrushDispose($hBrush_FPS)
        _GDIPlus_GraphicsDispose($hCanvas)
        _WinAPI_SelectObject($hDC_backbuffer, $DC_obj)
        _WinAPI_DeleteDC($hDC_backbuffer)
        _WinAPI_DeleteObject($hHBitmap)
        _WinAPI_ReleaseDC($hGUI, $hDC)
        GUIDelete($hGUI)
    EndFunc   ;==>ParallaxFX
    
    
    Func _Exit_About()
        $bExit = True
    EndFunc   ;==>_Exit_About
    
    Func CalcFPS() ;display FPS
        $iShowFPS = $iFPS
        $iFPS = 0
    EndFunc   ;==>CalcFPS
    Alles anzeigen

    Die nötigen Bilder werden heruntergeladen und lokal in ScriptDir gespeichert.

    Vorschau:

    Parallax.png

  • AutoIt Windows Screenshooter v1.87 Build 2026-09-01

    • UEZ
    • 16. Dezember 2019 um 16:51
    Zitat von Tweaky

    Hm, wie meinst du das? Warum? =O

    Der Zenit ist lange überschritten und ich denke, dass die App, wenn überhaupt, nur eine handvoll Benutzer nutzen. Abgesehen davon, fehlt mir leider auch der Überblick, um neue Features hinzuzufügen oder die Bugs zu beseitigen.

  • AutoIt Windows Screenshooter v1.87 Build 2026-09-01

    • UEZ
    • 15. Dezember 2019 um 21:55
    Zitat von Tweaky

    Wenn ich die markierte Datei herunterlade und entpacke, hat die Windows Screenshooter.au3 das Datum 14.06.2019. Dieses ist identisch mit dem Datum der 1.83.

    Ups, stimmt, war mir gar nicht aufgefallen und hat auch keiner außer dir berichtet.

    Ich habe nun die richtige Version hinzugefügt.

    Danke für dein Feedback.:thumbup:

    Nach ca. 10 Jahren "Entwicklungszeit" ist die Zeit gekommen den Screenshooter in den verdienten Ruhezustand zu schicken...

  • AutoIt Windows Screenshooter v1.87 Build 2026-09-01

    • UEZ
    • 15. Dezember 2019 um 15:49
    Zitat von Tweaky

    Im englischen Forum ist der Quellcode veraltet. Dieser ist nicht von der Version 1.84 Build 2019-08-18 sondern von 1.83 Build 2019-06-14

    Hmm, ich sehe die aktuelle Version.


    AWSS.png


    Wo genau siehst du die v1.83? Leider ist die Ansicht "My Attachments" bei mir kaputt, d.h. ich kann meine Dateianhänge nicht mehr sehen.

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™