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

Beiträge von Mars

  • n-body Simulation

    • Mars
    • 10. Juni 2013 um 19:01

    Hier mal meine Version von dem Ganzen in GDI+
    (Hab nicht bei Andy abgeschaut, sondern mich nur inspirieren lassen :P)
    Ist aber komplett in AutoIt. mit ASM geht da also nix

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Array.au3>
    Opt('GUIOnEventMode', 1)
    Opt('MustDeclareVars', 1)

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

    ; p = Dichte
    ; PI = 3.1415926536
    ; r = Radius
    ; m = Masse = 4/3*PI*r³*p
    ; d(m) = Durchmesser(Masse) = 2*(3/(4*PI)*(m/p))^(1/3)
    ; G = Gravitationskonstante = 6.67384 * 10^(-11)
    ; F(r) = Anziehungskraft(Abstand) = G*m1*m2/r²

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

    Global Const $VierDrittelPi = ATan(1) * 16 / 3
    Global Const $DreiDurchVierPi = 3 / (ATan(1) * 16)
    Global Const $Gravi = 6.67384 * 10 ^ (-11)

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

    Global $Dichte = 10^10 ; Dichte der Materie (Größer -> Kleinere Partikel) in Kilogramm / m³
    Global $GesamtMasse = 10^13 ; Gesamte Masse in unserem Universum in Kilogramm
    Global $AnzahlPartikel = 25 ; Anzahl Brocken auf die die Masse aufgeteilt wird
    Global $ZentralMasse = 10^10 ; Masse im Zentrum
    Global $iW = 768, $iH = 768, $iD = ($iH ^ 2 + $iW ^ 2) ^ 0.5 ; Größe des Fensters
    Global $aPartikel[$AnzahlPartikel][7]

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

    ; [0] - x Koord
    ; [1] - y Koord
    ; [2] - z Koord
    ; [3] - vX
    ; [4] - vY
    ; [5] - vZ
    ; [6] - Masse

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

    _GDIPlus_Startup()

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

    Global $hGUI, $hDC, $hGFX, $hIMG, $hBUF, $hBRU, $hBRU2
    $hGUI = GUICreate('Test', $iW, $iH)
    $hDC = _WinAPI_GetDC($hGUI)
    $hIMG = _Image_Create($iW, $iH)
    $hBUF = DllStructGetData($hIMG, 1, 1)
    $hGFX = _GDIPlus_GraphicsCreateFromHDC($hBUF)
    $hBRU = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    $hBRU2 = _GDIPlus_BrushCreateSolid(0x20000000)
    _GDIPlus_GraphicsSetSmoothingMode($hGFX, 4)

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

    _Load()

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

    GUISetOnEvent(-3, 'EVENT', $hGUI)
    OnAutoItExitRegister('_Freigeben')
    GUIRegisterMsg(0xF, 'WM_PAINT')
    GUISetState(@SW_SHOW, $hGUI)

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

    While Sleep(10)
    _Run()
    WEnd

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

    Func _Run()
    Local Static $c = 0
    $c += 1
    _Calc()
    If IsInt($c/2) Then
    _Draw()
    WM_PAINT()
    EndIf
    EndFunc ;==>_Run

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

    Func _Calc()
    Local $aTMP
    For $i = $AnzahlPartikel - 1 To 0 Step - 1
    For $e = 0 To $AnzahlPartikel - 1 Step 1
    _GetVector($i, 0, 0, 0)
    If $i = $e Then ContinueLoop
    _GetVector($i, $e)
    Next
    Next
    For $i = $AnzahlPartikel - 1 To 0 Step - 1
    If $aPartikel[$i][6] = 1 Then
    _ArrayDelete($aPartikel, $i)
    $AnzahlPartikel -= 1
    ContinueLoop
    EndIf
    $aPartikel[$i][0] += $aPartikel[$i][3]
    $aPartikel[$i][1] += $aPartikel[$i][4]
    $aPartikel[$i][2] += $aPartikel[$i][5]
    Next
    EndFunc ;==>_Calc

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

    Func _Draw()
    Local $d
    _GDIPlus_GraphicsFillRect($hGFX, 0, 0, $iW, $iH, $hBRU2)
    For $i = 0 To $AnzahlPartikel - 1 Step 1
    $d = 2 * ($DreiDurchVierPi * $aPartikel[$i][6] / $Dichte)^(1/3)
    DllCall($ghGDIPDll, "int", "GdipFillEllipse", "handle", $hGFX, "handle", $hBRU, "float", $aPartikel[$i][0]-$d/2 + $iW/2, "float", $aPartikel[$i][1]-$d/2 + $iH/2, "float", $d, "float", $d)
    Next

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

    $d = 2 * ($DreiDurchVierPi * $ZentralMasse / $Dichte)^(1/3)
    DllCall($ghGDIPDll, "int", "GdipFillEllipse", "handle", $hGFX, "handle", $hBRU, "float", $iW/2-$d/2, "float", $iH/2-$d/2, "float", $d, "float", $d)
    EndFunc ;==>_Draw

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

    Func _GetVector($i, $e, $y = 1, $z = 1)
    Local $a[3], $L, $F, $d, $mGes
    If $e = 0 And $y = 0 And $z = 0 Then ; Unbewegliches Massezentrum
    $a[0] = $e - $aPartikel[$i][0]
    $a[1] = $y - $aPartikel[$i][1]
    $a[2] = $z - $aPartikel[$i][2]
    $L = ($a[0] ^ 2 + $a[1] ^ 2 + $a[2] ^ 2) ^ 0.5 ; Abstand der Partikel (Betrag des Vektors)
    $F = $Gravi * $aPartikel[$i][6] * $ZentralMasse / $L ^ 3 ; Direkt um L vermindert
    $d = ($DreiDurchVierPi * $aPartikel[$i][6] / $Dichte)^(1/3) + ($DreiDurchVierPi * $ZentralMasse / $Dichte)^(1/3); Durchmesser
    If $L > $iD/32 Then
    For $o = 0 To 2 Step 1
    $aPartikel[$i][$o + 3] += $a[$o] * $F / $aPartikel[$i][6]
    Next
    EndIf
    Else
    For $o = 0 To 2 Step 1
    $a[$o] = $aPartikel[$e][$o] - $aPartikel[$i][$o]
    Next
    $L = ($a[0] ^ 2 + $a[1] ^ 2 + $a[2] ^ 2) ^ 0.5 ; Abstand der Partikel (Betrag des Vektors)
    $F = $Gravi * $aPartikel[$i][6] * $aPartikel[$e][6] / $L ^ 3 ; Direkt um L vermindert
    $d = ($DreiDurchVierPi * $aPartikel[$i][6] / $Dichte)^(1/3) + ($DreiDurchVierPi * $aPartikel[$e][6] / $Dichte)^(1/3); Durchmesser
    If $d > $L Then
    $mGes = $aPartikel[$i][6] + $aPartikel[$e][6]
    For $o = 0 To 2 Step 1
    $aPartikel[$i][$o] = ($aPartikel[$i][$o]*$aPartikel[$i][6] + $aPartikel[$e][$o]*$aPartikel[$e][6])/$mGes
    $aPartikel[$i][$o+3] = ($aPartikel[$i][$o+3]*$aPartikel[$i][6] + $aPartikel[$e][$o+3]*$aPartikel[$e][6])/$mGes
    Next
    $aPartikel[$i][6] = $mGes
    $aPartikel[$e][6] = 1
    Else
    For $o = 0 To 2 Step 1
    $aPartikel[$i][$o + 3] += $a[$o] * $F / $aPartikel[$i][6]
    Next
    EndIf
    EndIf
    EndFunc ;==>_GetVector

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

    Func _Load()
    Local $aTMP
    For $i = 0 To $AnzahlPartikel - 1 Step 1
    $aTMP = _3DRandom(-$iD / 4, $iD / 4)
    $aPartikel[$i][0] = $aTMP[0]
    $aPartikel[$i][1] = $aTMP[1]
    $aPartikel[$i][2] = $aTMP[2]
    $aPartikel[$i][3] = Random(-1, 1)
    $aPartikel[$i][4] = Random(-1, 1)
    $aPartikel[$i][5] = Random(-1, 1)
    $aPartikel[$i][6] = $GesamtMasse / $AnzahlPartikel
    Next
    EndFunc ;==>_Load

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

    Func _3DRandom($Min, $Max)
    Local $x, $y, $z
    Do
    $x = Random($Min, $Max)
    $y = Random($Min, $Max)
    $z = Random($Min, $Max)
    Until ($x ^ 2 + $y ^ 2 + $z ^ 2) ^ 0.5 < $Max ; Liegt der Vektor in der Sphere ?
    Local $a[3] = [$x, $y, $z]
    Return $a
    EndFunc ;==>_3DRandom

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

    Func WM_PAINT()
    _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hBUF, 0, 0, 0xCC0020)
    EndFunc ;==>WM_PAINT

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

    Func EVENT()
    Switch @GUI_CtrlId
    Case -3
    Exit
    EndSwitch
    EndFunc ;==>EVENT

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

    Func _Freigeben()
    _GDIPlus_BrushDispose($hBRU2)
    _GDIPlus_BrushDispose($hBRU)
    _GDIPlus_GraphicsDispose($hGFX)
    _WinAPI_ReleaseDC($hGUI, $hDC)
    _Image_Delete($hIMG)
    _GDIPlus_Shutdown()
    EndFunc ;==>_Freigeben

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

    Func _Image_Create($iW, $iH)
    Local $Ptr, $hDC, $hBmp, $tBMI, $aDIB, $vStruct
    $hDC = _WinAPI_CreateCompatibleDC(0)
    $tBMI = DllStructCreate($tagBITMAPINFO)
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4)
    DllStructSetData($tBMI, "Width", $iW)
    DllStructSetData($tBMI, "Height", -$iH)
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32)
    $aDIB = DllCall('GDI32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hBmp = $aDIB[0]
    $Ptr = $aDIB[4]
    _WinAPI_SelectObject($hDC, $hBmp)
    $vStruct = DllStructCreate('int[5]')
    DllStructSetData($vStruct, 1, $hDC, 1)
    DllStructSetData($vStruct, 1, $iW, 2)
    DllStructSetData($vStruct, 1, $iH, 3)
    DllStructSetData($vStruct, 1, $Ptr, 4)
    DllStructSetData($vStruct, 1, $hBmp, 5)
    Return $vStruct
    EndFunc ;==>_Image_Create

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

    Func _Image_Delete(ByRef $vStruct)
    _WinAPI_DeleteObject(DllStructGetData($vStruct, 1, 5))
    _WinAPI_DeleteDC(DllStructGetData($vStruct, 1, 1))
    $vStruct = 0
    EndFunc ;==>_Image_Delete

    [/autoit]
  • Sinus Sweep berechnen?

    • Mars
    • 9. Juni 2013 um 16:08

    Das machen wir in Physik II auch grade :)
    Sehr schön hergeleitet und verständlich erklärt.
    Ich wünschte die Vorlesungsnotizen wären dementsprechend.
    Da steht dann nur: f(t) ist Zeitabhängig, "Lösungsweg trivial", Lösung

    lg
    M

  • "Buttontext" <> "Buttonwert"

    • Mars
    • 5. Juni 2013 um 01:28

    Das hat mich jetzt nicht mehr losgelassen. (und das hier gepostete war unbefriedigend :D)
    Daher 2 Funktionen die das Arbeiten mit "Zusatzdaten" bei allen Arten von Controls ermöglichen (müssten, ist nicht ausgiebig getestet !).
    Man kann beliebigen Controls Daten hinzufügen (AddData), und diese nach belieben Tauschen (SwapData), oder Rotieren (SwapData ohne Parameter)

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    Global $__aCtrlData[1][2]

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

    Global $hGUI = GUICreate('Test', 256, 256)
    Global $hBtn1 = GUICtrlCreateButton('Button', 10, 10, 100, 25)
    Global $hBtn2 = GUICtrlCreateButton('Start', 10, 40, 100, 25)
    Global $hLabel = GUICtrlCreateLabel('Ich bin ein Label', 10, 70, 200, 18)

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

    GuiCtrlAddData($hBtn1, 'Hallo')
    GuiCtrlAddData($hBtn1, 'Wie')
    GuiCtrlAddData($hBtn1, 'Geht')
    GuiCtrlAddData($hBtn1, 'Es')
    GuiCtrlAddData($hBtn1, 'Dir')
    GuiCtrlAddData($hBtn1, 'So ?')
    GuiCtrlAddData($hBtn2, 'Stop')
    GuiCtrlAddData($hLabel, 'Das ist ein Test')
    GuiCtrlAddData($hLabel, 'Klappt auch mit Labels')

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

    GUISetState(@SW_SHOW, $hGUI)

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

    While True
    Switch GUIGetMsg()
    Case $hBtn1
    GuiCtrlSwapData($hBtn1)
    GuiCtrlSwapData($hLabel)
    Case $hBtn2
    GuiCtrlSwapData($hBtn2)
    GuiCtrlSwapData($hLabel)
    Case -3
    Exit
    EndSwitch
    WEnd

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

    ; ist §iNr = -1 wird einfach rotiert, ansonsten wird der Wert an Position $iNr benutzt
    Func GuiCtrlSwapData($iCtrl, $iNr = -1)
    Local $iPtr = GUICtrlGetHandle($iCtrl)
    If Not $iPtr Then Return SetError(1, 0, False)
    Local $iIndex, $aSplit, $sTmp, $iSubIndex, $iMax
    $iIndex = _ArraySearch($__aCtrlData, $iPtr)
    If @error Then Return SetError(1, 0, False)
    $sTmp = GUICtrlRead($iCtrl)
    $aSplit = StringSplit($__aCtrlData[$iIndex][1], '|', 2)
    $iSubIndex = _ArraySearch($aSplit, $sTmp)
    If $iSubIndex = -1 Then GuiCtrlAddData($iCtrl, $sTmp)
    If @error Then Return SetError(2, 0, False)
    $iMax = UBound($aSplit)
    If $iNr = -1 Then
    $iSubIndex += 1
    If $iSubIndex >= $iMax Then $iSubIndex -= $iMax
    Else
    If ($iNr >= $iMax) Or ($iNr < 0) Then Return SetError(3, 0, False)
    $iSubIndex = $iNr
    EndIf
    GUICtrlSetData($iCtrl, $aSplit[$iSubIndex])
    EndFunc ;==>GuiCtrlSwapData

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

    Func GuiCtrlAddData($iCtrl, $sData)
    Local $iPtr = GUICtrlGetHandle($iCtrl)
    If Not $iPtr Then Return SetError(1, 0, False)
    Local $iIndex = _ArraySearch($__aCtrlData, $iPtr), $u
    If $iIndex = -1 Then
    $u = UBound($__aCtrlData) - 1
    If ($__aCtrlData[$u][0] <> '') Then
    ReDim $__aCtrlData[$u + 2][2]
    $u += 1
    EndIf
    Else
    $u = $iIndex
    EndIf
    $__aCtrlData[$u][0] = $iPtr
    $__aCtrlData[$u][1] &= '|' & $sData
    If StringLeft($__aCtrlData[$u][1], 1) = '|' Then $__aCtrlData[$u][1] = StringTrimLeft($__aCtrlData[$u][1], 1)
    Return True
    EndFunc ;==>GuiCtrlAddData

    [/autoit]

    lg
    Mars

  • "Buttontext" <> "Buttonwert"

    • Mars
    • 3. Juni 2013 um 21:04

    In AutoIt kann man fast alles machen, man muss nur wissen wie es geht.
    Ein Button hat auch hier eine ID, einen Anzeigetext, einen Status (GuiCtrl States), einen Style, ein Event (im Eventmode). Und ich wette, dass ich noch die Hälfte vergessen habe.

    Poste ein funktionierendes Skript und erläutere den Fehler anschaulich.

  • Schattenwurf bei Rechtecken [GDI+]

    • Mars
    • 2. Juni 2013 um 23:46
    Zitat

    dann reicht es, die Orginalgröße des Quadrates beizubehalten und den "Schatten nur nach rechts unten zu verschieben.

    Normalerweise schreibe ich Deutsch, aber "das is ja ma sau low" :D
    Das hat dann mit einem "Schatten" nicht mehr viel gemein, würde das ganze natürlich unendlich schnell machen, da nur 1 Punkt berechnet werden muss und der ASM sich schon freut die Bitmap zu kopieren :thumbup:

    Das gilt aber nur für den Idealfall einer "unendlich" weit entfernten Lichtquelle (also paralleles auftreffen der Strahlen). Für eine Lampe auf dem Spielfeld die vllt nur 5 Meter hoch ist, macht das relativ wenig Sinn. Besser als nix ist es allemal. Und ich glaube ich bau das auch erstmal so in die 2D Engine ein. Verbessern kann man später ja immernoch.

  • Schattenwurf bei Rechtecken [GDI+]

    • Mars
    • 2. Juni 2013 um 12:29

    Also nochmal zusammengefasst, ob ich es verstanden habe:
    - Berechnung des Vergrößerungsfaktors
    - Berechnung des oberen linken Punktes des Schattens als Rechteck
    - Ermittlung der zu zeichnenden Fläche (zusammengesetzt aus 2 Rechtecken wie ein L)
    - Per Alphamap (Graustufenbild für Transparenz) ein schwarzes Äquivalent der Grafik in L Form zeichnen
    - ggf Umschärfe anwenden

    Vorteile:
    - nur 1 Vektor nötig (zur Ermittlung des Faktors und des oberen linken Punktes
    - Rechtecke sind einfach umzusetzen (auch in ASM schön ;)), nur 2 Rechtecke nötig
    - Alphamap vorberechnet, also keine umständliche Echtzeit Helligkeitsberechnung, auch schön in ASM
    - Da nur kleine Grafiken genutzt werden können die Skalierungen der Alphamap gepuffert werden

    Nachteile:
    - ohne echtzeit Verzerrung der Alphamap + schwarzer Grafik kein "langer" Schattenwurf möglich (wäre aber auch so nicht einfacher gewesen)

    Nochmal allgemein: (Vermutung)
    Man braucht für jede Lichtquelle einen eigenen Puffer. Anschließend verknüpft man alle Puffer mit dem logischen Oder um das Gesamtbild zu erhalten. (gehe ich in der Annahme richtig ?) So dürfte auch farbigen Lichtquellen Rechnung getragen werden.

  • Schattenwurf bei Rechtecken [GDI+]

    • Mars
    • 2. Juni 2013 um 01:40

    Der Trick soll ja sein die ganze Sache (möglichst stark) zu beschleunigen. (hat mit dem Sleep nix zu tun).

    Meine neue Idee ist es nur noch einen Vektor zu berechnen (statt 3) und die anderen Koordinaten per Strahlensatz daraus zu erhalten.
    Dadurch könnte! sich auch das Sortierungsproblem lösen. Müsste ca. 1.5x so schnell sein als die aktuelle Lösung.

    Bin für weitere Vorschläge natürlich offen. So ein Faktor 10 wäre schon nicht schlecht :P

    Im Endeffekt sollen damit Pseudo3D Effekte (Voxel) erzielt werden. Dann ist ein Pixel nicht mehr 1x1, sondern 1x1x1.
    Dann kann man z.B. eine Grafik mit 16x16x16 Px erstellen und einen fast realistischen Schattenwurf hinbekommen ohne "echtes" 3D Rendering (also Schichtweise 2D).
    Das Ganze noch mit unterschiedlichen Lichtquellen unterschiedlicher Farbe und Intensität, und los gehts :D

    Edit: Damit man sich das Vorstellen kann, hier ein Beispiel.
    - Rechtecke sind jetzt Pyramiden mit einer Steigung von 45 Grad (Unterteilt in Schichten die jeweils einen rechteckigen Schatten haben)
    - Die Pyramiden haben am Boden die Höhe 0 und (je nach Größe) eine Maximalhöhe von 10
    - Die Lichtquelle hängt bei 20 an der Decke
    - Unperformantestes Skript das ich jemals gepostet habe :D (zum Glück nur ein Beispiel...)

    Beispiel
    [autoit]


    #include <GDIPlus.au3>
    #include <Array.au3>

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

    Opt('GuiOnEventMode', 1)
    Opt('MustDeclareVars', 1)

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

    Global Const $BLACKNESS = 66, $WHITENESS = 16711778
    Global Const $iW = @DesktopWidth/4, $iH = @DesktopWidth/4, $iD = ($iW^2+$iH^2)^0.5
    Global Const $iAnzahl = 5
    Global Const $_ID_Rect = 1

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

    _GDIPlus_Startup()

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

    Global $aLight[3] = [$iW/2, $iH/2, 20]
    Global $aArea[1]

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

    ; 2D Obj
    ; [0] - Objekttyp
    ; [1] - x
    ; [2] - y
    ; [3] - w
    ; [4] - h
    ; [5] - vX
    ; [6] - vY
    ; [7] - Gravitationsmultiplikator ( 0 - 1 )
    ; [8] - Höhe über dem Boden

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

    Global $hGUI = GUICreate('Schatten Test', $iW, $iH)
    Global $hDC = _WinAPI_GetDC($hGUI)
    Global $hIMG_Front = _Image_Create($iW, $iH)
    Global $hDC_Buf_Front = DllStructGetData($hIMG_Front, 1, 1)
    Global $hGFX_Buf_Front = _GDIPlus_GraphicsCreateFromHDC($hDC_Buf_Front)
    Global $hIMG_Back = _Image_Create($iW, $iH)
    Global $hDC_Buf_Back = DllStructGetData($hIMG_Back, 1, 1)
    Global $hGFX_Buf_Back = _GDIPlus_GraphicsCreateFromHDC($hDC_Buf_Back)
    Global $hBRU_Obj = _GDIPlus_BrushCreateSolid(0xFF000000)
    Global $hBRU_Sch = _GDIPlus_BrushCreateSolid(0x10000000)
    Global $hDLL_MSIMG32 = DllOpen('MSIMG32.DLL')
    Global $vBlendFunc = __Image_GetBlendFunction()
    _GDIPlus_GraphicsSetSmoothingMode($hGFX_Buf_Back, 4)
    _GDIPlus_GraphicsSetSmoothingMode($hGFX_Buf_Front, 4)

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

    GUISetOnEvent(-3, 'EVENT', $hGUI)
    GUIRegisterMsg(0xF, 'WM_PAINT')
    OnAutoItExitRegister('_X')
    GUISetState(@SW_SHOW, $hGUI)

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

    _Main()

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

    Func _Main()

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

    For $i = 1 To $iAnzahl Step 1
    _Area_AddRect($aArea, _Rect_Create())
    Next

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

    While Sleep(10)
    _WinAPI_BitBlt($hDC_Buf_Front, 0, 0, $iW, $iH, 0, 0, 0, $WHITENESS)
    _WinAPI_BitBlt($hDC_Buf_Back, 0, 0, $iW, $iH, 0, 0, 0, $BLACKNESS)
    _Area_Render($hGFX_Buf_Front, $hGFX_Buf_Back, $aArea)
    WM_PAINT()
    WEnd

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

    EndFunc

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

    Func _Area_Render($hGFX_Front, $hGFX_Back, ByRef $aArea)

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

    Local $aObj, $aPoints, $tPoints, $aKlon

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

    For $i = 0 To UBound($aArea) - 1 Step 1
    $aObj = $aArea[$i]

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

    DllCall($ghGDIPDll, "int", "GdipFillRectangle", "handle", $hGFX_Front, "handle", $hBRU_Obj, "float", $aObj[1], "float", $aObj[2], "float", $aObj[3], "float", $aObj[4])

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

    For $n = 0.25 To 10 Step 0.25
    $aKlon = $aObj
    $aKlon[1] += $n
    $aKlon[2] += $n
    $aKlon[3] -= $n * 2
    $aKlon[4] -= $n * 2
    $aKlon[8] += $n

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

    If ($aKlon[3] < 2) Or ($aKlon[4] < 2) Then ExitLoop

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

    $aPoints = _CalcShadowRect($aLight, $aKlon)

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

    _GDIPlus_BrushSetSolidColor($hBRU_Sch, $aPoints[4])

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

    DllCall($ghGDIPDll, "int", "GdipFillRectangle", "handle", $hGFX_Front, _
    "handle", $hBRU_Sch, "float", $aPoints[0], "float", $aPoints[1], "float", $aPoints[2], "float", $aPoints[3])

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

    Next

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

    $aObj[1] += $aObj[5]
    $aObj[2] += $aObj[6]
    If $aObj[1] < 0 Then
    $aObj[1] = -$aObj[1]
    $aObj[5] = -$aObj[5]
    ElseIf ($aObj[1] + $aObj[3]) > $iW Then
    $aObj[1] -= ($aObj[1] + $aObj[3]) - $iW
    $aObj[5] = -$aObj[5]
    EndIf
    If $aObj[2] < 0 Then
    $aObj[2] = -$aObj[2]
    $aObj[6] = -$aObj[6]
    ElseIf ($aObj[2] + $aObj[4]) > $iH Then
    $aObj[2] -= ($aObj[2] + $aObj[4]) - $iH
    $aObj[6] = -$aObj[6]
    EndIf

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

    $aArea[$i] = $aObj
    Next

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

    EndFunc

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

    Func _CalcShadowRect($aLight, $aRect)

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

    Local $xVect, $yVect, $zVect
    $xVect = $aRect[1] - $aLight[0]
    $yVect = $aRect[2] - $aLight[1]
    $zVect = $aRect[8] - $aLight[2]

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

    Local $aMulti = - $aLight[2] / $zVect
    Local $aRet[5] = [$aLight[0] + $aMulti * $xVect, $aLight[1] + $aMulti * $yVect, $aRect[3] * $aMulti, $aRect[4] * $aMulti, '0x' & Hex(Int(40 / $aLight[2] * ($aLight[2] - $aRect[8])), 2) &'000000']

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

    Return $aRet

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

    EndFunc

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

    Func _Swap(ByRef $a, ByRef $b)
    Local $c = $a
    $a = $b
    $b = $c
    EndFunc

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

    Func EVENT()
    Switch @GUI_CtrlId
    Case -3
    Exit
    EndSwitch
    EndFunc

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

    Func WM_PAINT()
    DllCall($hDLL_MSIMG32, 'int', 'AlphaBlend', 'ptr', $hDC_Buf_Front, 'int', 0, 'int', 0, 'int', $iW, 'int', $iH, 'ptr', $hDC_Buf_Back, 'int', 0, 'int', 0, 'int', $iW, 'int', $iH, 'dword', $vBlendFunc)
    _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_Buf_Front, 0, 0, 0xCC0020)
    EndFunc

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

    Func _X()
    _GDIPlus_GraphicsDispose($hGFX_Buf_Back)
    _GDIPlus_GraphicsDispose($hGFX_Buf_Front)
    _Image_Delete($hIMG_Back)
    _Image_Delete($hIMG_Front)
    _WinAPI_ReleaseDC($hGUI, $hDC)
    _GDIPlus_BrushDispose($hBRU_Obj)
    _GDIPlus_BrushDispose($hBRU_Sch)
    _GDIPlus_Shutdown()
    DllClose($hDLL_MSIMG32)
    EndFunc

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

    Func _Rect_Create($x = 0, $y = 0, $w = 0, $h = 0, $vX = 0, $vY = 0, $fGrav = 1, $nHoehe = 0)
    If $x + $y + $w + $h + $vX + $vY + $fGrav = 1 Then
    $w = Random($iW/16/2, $iW/16)
    $h = Random($iH/16/2, $iH/16)
    $x = Random($w/2, $iW - $w/2)
    $y = Random($h/2, $iH - $h/2)
    $vX = _AbsRandom(0.5, 1) * 5
    $vY = (5 - Abs($vX)) * _RandomSign()
    $fGrav = Random(0, 1)
    $nHoehe = 0
    EndIf
    Local $a[9] = [$_ID_Rect, $x, $y, $w, $h, $vX, $vY, $fGrav, $nHoehe]
    Return $a
    EndFunc

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

    Func _AbsRandom($nMin, $nMax)
    Return _RandomSign() * Random($nMin, $nMax)
    EndFunc

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

    Func _RandomSign()
    Switch Random(0, 1, 1)
    Case 0
    Return 1
    Case 1
    Return -1
    EndSwitch
    EndFunc

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

    Func _Area_AddRect(ByRef $aArea, $aRect)
    Local $u = UBound($aArea)
    If ($u = 1) And Not IsArray($aArea[0]) Then
    $aArea[0] = $aRect
    Else
    ReDim $aArea[$u + 1]
    $aArea[$u] = $aRect
    EndIf
    EndFunc

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

    Func _Image_Create($iW, $iH)
    Local $Ptr, $hDC, $hBmp, $tBMI, $qDIB, $vStruct
    $hDC = _WinAPI_CreateCompatibleDC(0)
    $tBMI = DllStructCreate($tagBITMAPINFO)
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4)
    DllStructSetData($tBMI, "Width", $iW)
    DllStructSetData($tBMI, "Height", -$iH)
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32)
    $qDIB = DllCall('GDI32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hBmp = $qDIB[0]
    $Ptr = $qDIB[4]
    _WinAPI_SelectObject($hDC, $hBmp)
    $vStruct = DllStructCreate('int[5]')
    DllStructSetData($vStruct, 1, $hDC, 1)
    DllStructSetData($vStruct, 1, $iW, 2)
    DllStructSetData($vStruct, 1, $iH, 3)
    DllStructSetData($vStruct, 1, $Ptr, 4)
    DllStructSetData($vStruct, 1, $hBmp, 5)
    Return $vStruct
    EndFunc ;==>_Image_Create

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

    Func _Image_Delete(ByRef $vStruct)
    _WinAPI_DeleteObject(DllStructGetData($vStruct, 1, 5))
    _WinAPI_DeleteDC(DllStructGetData($vStruct, 1, 1))
    $vStruct = 0
    EndFunc ;==>_Image_Delete

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

    Func __Image_GetBlendFunction($iAlpha = 255)
    Local $vStruct = DllStructCreate($tagBLENDFUNCTION)
    DllStructSetData($vStruct, 1, 0) ; 0 = AC_SRC_OVER
    DllStructSetData($vStruct, 2, 0) ; 0 "Must be Zero"
    DllStructSetData($vStruct, 3, $iAlpha) ; Alpha fürs ganze Bild
    DllStructSetData($vStruct, 4, 1) ; 1 = Bild enthält einen Alphakanal
    Local $vData = DllStructCreate('dword', DllStructGetPtr($vStruct))
    Local $iData = DllStructGetData($vData, 1)
    Return $iData
    EndFunc ;==>__Image_GetBlendFunction

    [/autoit]

    lg

  • Algorithmus zum Spiel "PrimeGame"

    • Mars
    • 1. Juni 2013 um 12:32
    Zitat von Andy

    Hi

    wenn ich das richtig verstehe, und Spieler1 eine 12 zieht, dann werden Spieler2 die Zahlen (Teiler) 1,2,3,4,6 also in Summe 16 gutgeschrieben....

    Zitat

    Spieler 1: Zieht nur Primzahlen.

    Er kann keine 12 ziehen. Allerdings halten sich dann die Teiler in Grenzen :D

  • Schattenwurf bei Rechtecken [GDI+]

    • Mars
    • 1. Juni 2013 um 12:09

    Moin,

    Habe mir überlegt mal einen kleinen Test für den Schattenwurf abzuhalten was Rechtecke betrifft. (Soll später in ASM ablaufen und teiltransparente Grafiken unterstützen, sodass man 2D Grafiken benutzen kann die je nach Lichtquelle einen Schatten haben. Die Sache mit dem GdipFillPolygon ist erstmal provisorisch).

    Leider habe ich gemerkt, dass das von mir verwendete Verfahren relativ Fehlerbehaftet und Langsam ist.
    Man kann mit ASM natürlich viel rausholen, aber der bessere Algorithmus schlägt den schnelleren Computer.

    Verfahren

    - Ermittlung der 3 von der Lichtquelle am weitesten entfernten Eckpunkte
    - Berechnung der 3 Gradengleichungen mit z = 0 = P + a * Vz (für z = 0 trifft die Gerade den Boden. Damit ist der Multiplikator a bekannt)
    - Berechnung der 3 Punkte am Boden
    - Zusammenstellung von aPoints mit den 3 Eckpunkten und 3 Bodenpunkten
    - Umsortierung (dieser Schritt dürfte garnicht vorkommen, aber ich weiß nicht wie man aPoints klüger zusammenstellt, sodass es direkt passt)
    - GdipFillPolygon (dient erstmal nur als Platzhalter)


    Daher bitte ich darum mir mitzuteilen, falls jemand schonmal etwas ähnliches gebaut hat, was mehr Performance bietet. (Leicht herauszufinden indem man die anzahl Rechtecke erhöht und schaut wann es ruckelt).

    Skript
    [autoit]


    #include <GDIPlus.au3>
    #include <Array.au3>

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

    Opt('GuiOnEventMode', 1)
    Opt('MustDeclareVars', 1)

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

    Global Const $BLACKNESS = 66, $WHITENESS = 16711778
    Global Const $iW = @DesktopWidth/4, $iH = @DesktopWidth/4, $iD = ($iW^2+$iH^2)^0.5
    Global Const $iAnzahl = 8
    Global Const $_ID_Rect = 1

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

    _GDIPlus_Startup()

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

    Global $aLight[3] = [$iW/2, $iH/2, $iD]
    Global $aArea[1]

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

    ; 2D Obj
    ; [0] - Objekttyp
    ; [1] - x
    ; [2] - y
    ; [3] - w
    ; [4] - h
    ; [5] - vX
    ; [6] - vY
    ; [7] - Gravitationsmultiplikator ( 0 - 1 )
    ; [8] - Höhe über dem Boden

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

    Global $hGUI = GUICreate('Schatten Test', $iW, $iH)
    Global $hDC = _WinAPI_GetDC($hGUI)
    Global $hIMG_Front = _Image_Create($iW, $iH)
    Global $hDC_Buf_Front = DllStructGetData($hIMG_Front, 1, 1)
    Global $hGFX_Buf_Front = _GDIPlus_GraphicsCreateFromHDC($hDC_Buf_Front)
    Global $hIMG_Back = _Image_Create($iW, $iH)
    Global $hDC_Buf_Back = DllStructGetData($hIMG_Back, 1, 1)
    Global $hGFX_Buf_Back = _GDIPlus_GraphicsCreateFromHDC($hDC_Buf_Back)
    Global $hBRU_Obj = _GDIPlus_BrushCreateSolid(0xFFA0A0A0)
    Global $hBRU_Sch = _GDIPlus_BrushCreateSolid(0x30000000)
    Global $hDLL_MSIMG32 = DllOpen('MSIMG32.DLL')
    Global $vBlendFunc = __Image_GetBlendFunction()
    _GDIPlus_GraphicsSetSmoothingMode($hGFX_Buf_Back, 4)
    _GDIPlus_GraphicsSetSmoothingMode($hGFX_Buf_Front, 4)

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

    GUISetOnEvent(-3, 'EVENT', $hGUI)
    GUIRegisterMsg(0xF, 'WM_PAINT')
    OnAutoItExitRegister('_X')
    GUISetState(@SW_SHOW, $hGUI)

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

    _Main()

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

    Func _Main()

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

    For $i = 1 To $iAnzahl Step 1
    _Area_AddRect($aArea, _Rect_Create(($i = 1) * 999))
    Next

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

    While Sleep(50)
    _WinAPI_BitBlt($hDC_Buf_Front, 0, 0, $iW, $iH, 0, 0, 0, $BLACKNESS)
    _WinAPI_BitBlt($hDC_Buf_Back, 0, 0, $iW, $iH, 0, 0, 0, $WHITENESS)
    _Area_Render($hGFX_Buf_Front, $hGFX_Buf_Back, $aArea)
    WM_PAINT()
    WEnd

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

    EndFunc

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

    Func _Area_Render($hGFX_Front, $hGFX_Back, ByRef $aArea)

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

    Local $aObj, $aPoints, $tPoints

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

    For $i = 0 To UBound($aArea) - 1 Step 1
    $aObj = $aArea[$i]
    DllCall($ghGDIPDll, "int", "GdipFillRectangle", "handle", $hGFX_Front, "handle", $hBRU_Obj, "float", $aObj[1], "float", $aObj[2], "float", $aObj[3], "float", $aObj[4])
    $aPoints = _CalcShadowRect($aLight, $aObj)
    $tPoints = DllStructCreate("float[" & $aPoints[0][0] * 2 & "]")

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

    For $iI = 1 To $aPoints[0][0]
    DllStructSetData($tPoints, 1, $aPoints[$iI][0], (($iI - 1) * 2) + 1)
    DllStructSetData($tPoints, 1, $aPoints[$iI][1], (($iI - 1) * 2) + 2)
    Next

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

    DllCall($ghGDIPDll, "int", "GdipFillPolygon", "handle", $hGFX_Buf_Back, "handle", $hBRU_Sch, "struct*", $tPoints, "int", $aPoints[0][0], "int", "FillModeAlternate")

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

    $aObj[1] += $aObj[5]
    $aObj[2] += $aObj[6]
    If $aObj[1] < 0 Then
    $aObj[1] = -$aObj[1]
    $aObj[5] = -$aObj[5]
    ElseIf ($aObj[1] + $aObj[3]) > $iW Then
    $aObj[1] -= ($aObj[1] + $aObj[3]) - $iW
    $aObj[5] = -$aObj[5]
    EndIf
    If $aObj[2] < 0 Then
    $aObj[2] = -$aObj[2]
    $aObj[6] = -$aObj[6]
    ElseIf ($aObj[2] + $aObj[4]) > $iH Then
    $aObj[2] -= ($aObj[2] + $aObj[4]) - $iH
    $aObj[6] = -$aObj[6]
    EndIf

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

    $aArea[$i] = $aObj
    Next

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

    EndFunc

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

    Func _CalcShadowRect($aLight, $aRect)
    Local $aDist[4], $aVect[4][3], $xTmp

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

    $aVect[0][0] = $aRect[1] - $aLight[0]
    $aVect[0][1] = $aRect[2] - $aLight[1]
    $aVect[1][0] = $aRect[1] + $aRect[3] - $aLight[0]
    $aVect[1][1] = $aRect[2] - $aLight[1]
    $aVect[2][0] = $aRect[1] - $aLight[0]
    $aVect[2][1] = $aRect[2] + $aRect[4] - $aLight[1]
    $aVect[3][0] = $aRect[1] + $aRect[3] - $aLight[0]
    $aVect[3][1] = $aRect[2] + $aRect[4] - $aLight[1]
    $aVect[0][2] = $aRect[8] - $aLight[2]
    $aVect[1][2] = $aVect[0][2]
    $aVect[2][2] = $aVect[0][2]
    $aVect[3][2] = $aVect[0][2]

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

    For $i = 0 To 3 Step 1
    $aDist[$i] = ($aVect[$i][0]^2 + $aVect[$i][1]^2)^0.5
    Next

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

    While ($aDist[0] > $aDist[1]) Or ($aDist[1] > $aDist[2]) Or ($aDist[2] > $aDist[3])
    For $i = 0 To 2 Step 1
    If $aDist[$i] > $aDist[$i + 1] Then
    $xTmp = $aDist[$i]
    $aDist[$i] = $aDist[$i + 1]
    $aDist[$i + 1] = $xTmp
    $xTmp = $aVect[$i][0]
    $aVect[$i][0] = $aVect[$i+1][0]
    $aVect[$i+1][0] = $xTmp
    $xTmp = $aVect[$i][1]
    $aVect[$i][1] = $aVect[$i+1][1]
    $aVect[$i+1][1] = $xTmp
    EndIf
    Next
    WEnd

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

    ;~ [0][0] - Number of vertices
    ;~ [1][0] - Vertice 1 X position
    ;~ [1][1] - Vertice 1 Y position
    ;~ [2][0] - Vertice 2 X position
    ;~ [2][1] - Vertice 2 Y position
    ;~ [n][0] - Vertice n X position
    ;~ [n][1] - Vertice n Y position

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

    Local $aRet[7][2]
    $aRet[0][0] = 6

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

    For $i = 1 To 3 Step 1
    $aRet[$i][0] = $aLight[0] + $aVect[$i][0]
    $aRet[$i][1] = $aLight[1] + $aVect[$i][1]
    Next

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

    ;~ For $i = 4 To 6 Step 1
    ;~ $aRet[$i][0] = $aLight[0] + $aVect[$i-3][0] + 10
    ;~ $aRet[$i][1] = $aLight[1] + $aVect[$i-3][1] + 10
    ;~ Next

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

    ;~ X = lightX + a * VectX
    ;~ Y = lightY + a * VectY
    ;~ 0 = lightZ + a * VectZ

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

    ;~ a = lightZ/VectZ

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

    For $i = 4 To 6 Step 1
    $aRet[$i][0] = $aLight[0] - $aVect[$i-3][0] * $aLight[2] / $aVect[$i-3][2]
    $aRet[$i][1] = $aLight[1] - $aVect[$i-3][1] * $aLight[2] / $aVect[$i-3][2]
    Next

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

    ;~ _ArrayDisplay($aRet)
    ;~ _ArrayDisplay($aRet)
    For $x = 1 To 5 Step 1
    ;~ _ArrayDisplay($aRet)
    For $i = $x+1 To 6 Step 1
    If ($aRet[$x][0] = $aRet[$i][0]) Or ($aRet[$x][1] = $aRet[$i][1]) Then
    ;~ ConsoleWrite($i & @CRLF)
    $xTmp = $aRet[$i][0]
    $aRet[$i][0] = $aRet[$x][0]
    $aRet[$x][0] = $xTmp
    $xTmp = $aRet[$i][1]
    $aRet[$i][1] = $aRet[$x][1]
    $aRet[$x][1] = $xTmp
    ExitLoop
    EndIf
    Next
    Next

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

    Local $iRichtung = 0

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

    If ($aRet[4][0] - $aRet[1][0]) < 0 Then $iRichtung += 1
    If ($aRet[4][1] - $aRet[1][1]) < 0 Then $iRichtung += 2

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

    ;~ Switch $iRichtung
    ;~ Case 0
    ;~ Case 1
    ;~ Case 2
    ;~ Case 3
    _Swap($aRet[3][0], $aRet[5][0])
    _Swap($aRet[3][1], $aRet[5][1])
    _Swap($aRet[5][0], $aRet[6][0])
    _Swap($aRet[5][1], $aRet[6][1])
    ;~ EndSwitch

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

    ;~ _GDIPlus_GraphicsDrawString($hGFX_Buf_Front, 'richtung: ' & $iRichtung, $aRet[1][0]+10, $aRet[1][1]+10)

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

    ;~ _ArrayDisplay($aRet)

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

    ;~ For $i = 1 To 6 Step 1
    ;~ _GDIPlus_GraphicsFillEllipse($hGFX_Buf_Back, $aRet[$i][0] - 3, $aRet[$i][1] - 3, 6, 6, $hBRU_Obj)
    ;~ _GDIPlus_GraphicsDrawString($hGFX_Buf_Back, $i, $aRet[$i][0] - 3, $aRet[$i][1] - 3)
    ;~ Next

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

    ;~ _ArrayDisplay($aRet)

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

    Return $aRet

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

    EndFunc

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

    Func _Swap(ByRef $a, ByRef $b)
    Local $c = $a
    $a = $b
    $b = $c
    EndFunc

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

    Func EVENT()
    Switch @GUI_CtrlId
    Case -3
    Exit
    EndSwitch
    EndFunc

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

    Func WM_PAINT()
    DllCall($hDLL_MSIMG32, 'int', 'AlphaBlend', 'ptr', $hDC_Buf_Back, 'int', 0, 'int', 0, 'int', $iW, 'int', $iH, 'ptr', $hDC_Buf_Front, 'int', 0, 'int', 0, 'int', $iW, 'int', $iH, 'dword', $vBlendFunc)
    _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_Buf_Back, 0, 0, 0xCC0020)
    EndFunc

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

    Func _X()
    _GDIPlus_GraphicsDispose($hGFX_Buf_Back)
    _GDIPlus_GraphicsDispose($hGFX_Buf_Front)
    _Image_Delete($hIMG_Back)
    _Image_Delete($hIMG_Front)
    _WinAPI_ReleaseDC($hGUI, $hDC)
    _GDIPlus_BrushDispose($hBRU_Obj)
    _GDIPlus_BrushDispose($hBRU_Sch)
    _GDIPlus_Shutdown()
    DllClose($hDLL_MSIMG32)
    EndFunc

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

    Func _Rect_Create($x = 0, $y = 0, $w = 0, $h = 0, $vX = 0, $vY = 0, $fGrav = 1, $nHoehe = 0)
    If $x + $y + $w + $h + $vX + $vY + $fGrav = 1 Then
    $w = Random($iW/16/4, $iW/16)
    $h = Random($iH/16/4, $iH/16)
    $x = Random($w/2, $iW - $w/2)
    $y = Random($h/2, $iH - $h/2)

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

    ;~ $x = Random($w/2, $iW - $w/2)
    ;~ $y = Random($h/2, $iH - $h/2)
    $vX = _AbsRandom(0.5, 1) * 5
    $vY = (5 - Abs($vX)) * _RandomSign()
    $fGrav = Random(0, 1)
    $nHoehe = Random($iD/18, $iD/14)
    EndIf
    If $x = 999 Then
    $w = $iD/32
    $h = $iD/32
    $x = $iW/2 - $w*2 + 0.00000031
    $y = $iH/2 - $h*2 + 0.000000314
    $vX = 5 + 0.000000001
    $vY = 0 + 0.000000001
    $fGrav = Random(0, 1)
    $nHoehe = $iD*0.9
    EndIf
    Local $a[9] = [$_ID_Rect, $x, $y, $w, $h, $vX, $vY, $fGrav, $nHoehe]
    Return $a
    EndFunc

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

    Func _AbsRandom($nMin, $nMax)
    Return _RandomSign() * Random($nMin, $nMax)
    EndFunc

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

    Func _RandomSign()
    Switch Random(0, 1, 1)
    Case 0
    Return 1
    Case 1
    Return -1
    EndSwitch
    EndFunc

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

    Func _Area_AddRect(ByRef $aArea, $aRect)
    Local $u = UBound($aArea)
    If ($u = 1) And Not IsArray($aArea[0]) Then
    $aArea[0] = $aRect
    Else
    ReDim $aArea[$u + 1]
    $aArea[$u] = $aRect
    EndIf
    EndFunc

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

    Func _Image_Create($iW, $iH)
    Local $Ptr, $hDC, $hBmp, $tBMI, $qDIB, $vStruct
    $hDC = _WinAPI_CreateCompatibleDC(0)
    $tBMI = DllStructCreate($tagBITMAPINFO)
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4)
    DllStructSetData($tBMI, "Width", $iW)
    DllStructSetData($tBMI, "Height", -$iH)
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32)
    $qDIB = DllCall('GDI32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hBmp = $qDIB[0]
    $Ptr = $qDIB[4]
    _WinAPI_SelectObject($hDC, $hBmp)
    $vStruct = DllStructCreate('int[5]')
    DllStructSetData($vStruct, 1, $hDC, 1)
    DllStructSetData($vStruct, 1, $iW, 2)
    DllStructSetData($vStruct, 1, $iH, 3)
    DllStructSetData($vStruct, 1, $Ptr, 4)
    DllStructSetData($vStruct, 1, $hBmp, 5)
    Return $vStruct
    EndFunc ;==>_Image_Create

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

    Func _Image_Delete(ByRef $vStruct)
    _WinAPI_DeleteObject(DllStructGetData($vStruct, 1, 5))
    _WinAPI_DeleteDC(DllStructGetData($vStruct, 1, 1))
    $vStruct = 0
    EndFunc ;==>_Image_Delete

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

    Func __Image_GetBlendFunction($iAlpha = 255)
    Local $vStruct = DllStructCreate($tagBLENDFUNCTION)
    DllStructSetData($vStruct, 1, 0) ; 0 = AC_SRC_OVER
    DllStructSetData($vStruct, 2, 0) ; 0 "Must be Zero"
    DllStructSetData($vStruct, 3, $iAlpha) ; Alpha fürs ganze Bild
    DllStructSetData($vStruct, 4, 1) ; 1 = Bild enthält einen Alphakanal
    Local $vData = DllStructCreate('dword', DllStructGetPtr($vStruct))
    Local $iData = DllStructGetData($vData, 1)
    Return $iData
    EndFunc ;==>__Image_GetBlendFunction

    [/autoit]

    PS: Die "Lichtquelle" ist in der Mitte.

    Edit: Boah, nach dem durchlesen merke ich, dass Deutsch am Morgen nicht meine Stärke ist :D

    lg
    Mars

  • Problem mit _HexToString

    • Mars
    • 27. Mai 2013 um 18:20

    KANN schon. Es kann ja Algorithmen geben die einen Text derart verschleiern, dass man nur Teile davon lesen kann und der Rest durch irgendwelche Sonderzeichen codiert wird.
    Irgendeinen Sinn müssen diese Zeichen ja haben, sonst wären sie nicht da. (Programmsteuercodes ?)
    Die einfache Information DEU - Germany kann man auch einfacher speichern als am Ende eines wirren Strings.
    Wo tauchen diese Strings denn auf ?

  • Problem mit _HexToString

    • Mars
    • 27. Mai 2013 um 18:00

    In dem gegebenen String ist genau das enthalten was du gepostet hast. (außer das ? am Anfang, das erscheint bei mir nicht)

    Code
    ÿ3[RS][NUL][EOT][NUL][NUL]€[NUL][NUL][NUL][NUL]bnserver-D2DV.ini[NUL]


    Ich hab kein Plan was da sonst noch an Infos drinstecken soll.

  • Alles Gute minx, GtaSpider und allen anderen

    • Mars
    • 27. Mai 2013 um 15:59

    :party::!:

  • Binäruhr

    • Mars
    • 27. Mai 2013 um 15:58
    Zitat von Friesel


    Nichts für ungut, aber mit so nem Beispiel kann ich nicht viel anfangen :wacko:

    ...aber ich werd mich jetzt mal durch die Hilfe der GDIplus UDF wühlen, da ich damit noch nie "rumgespielt" habe...danke für den Hinweis.

    Hab mal in ein Skript einen Doppelpuffer eingebaut. Klick Mich
    Das Prinzipp ist ganz einfach:
    Ein Puffer steht mit fertigem Bild jederzeit zur Verfügung und kann bei unvorhersehbaren Ereignissen (z.B. WM_PAINT) angezeigt werden.
    Der Andere wird grade bemalt. Ist das Malen fertig wird die Speicheradresse der beiden Puffer getauscht.
    Somit ist für Anzeigefunktionen jederzeit ein aktuelles Bitmap vorhanden und für Zeichenfunktionen jederzeit ein beschreibbarer Puffer.

    Bei einem so kleinen Skript wird Mehrfachpufferung nicht viel bringen, da die Zeichenfunktionen so schnell abgeschlossen sind, dass die Wahrscheinlichkeit sehr gering ist beim Zeichenvorgang einen Interrupt zu bekommen

    lg
    Mars

  • AutoiT - Sortieren

    • Mars
    • 26. Mai 2013 um 15:16

    Sieht für mich nicht ganz Regelkonform aus, aber ich will ja mal nicht so sein.
    Das hier ist ja nicht der "Hauptteil" eines Programms, von daher kann man kein ordentliches Urteil fällen...

    Spoiler anzeigen
    [autoit]

    Global $sText = '<START> VNUM=1 EFFECT=1 MOVEMENT=11 TYPE=0 MPCOST=0 RANGE=1 CASTTIME=2 COOLDOWN=15 <END>'

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

    ConsoleWrite(_a($sText))

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

    Func _a($s)
    Local $a = StringSplit($sText, ' ', 2), $b
    For $i = 0 To UBound($a) - 1 Step 1
    $b &= $a[$i] & @CRLF & @CRLF
    Next
    Return $b
    EndFunc

    [/autoit]


    lg
    M

  • Zeilenweises Löschen in Textdatei: A bis B

    • Mars
    • 23. Mai 2013 um 16:24

    Eigentlich hast du schon alles wichtige zur Hand (denke ich).

    Mein Vorgehen wäre folgendermaßen:
    - 1. Per _FileReadToArray die Datei einlesen
    - 2. Mit Regex meine Start bzw Endzeile finden
    - 3. Entweder _ArrayDelete in einer Schleife nutzen um alles von A bis B zu löschen (beides inklusive), oder die Funktion für 1D Arrays so umschreiben, dass sie Start und Ziel akzeptiert (nur wenn Tempo gebraucht wird)
    - 4. Mit _FileWriteFromArray meine Datei schreiben.

    Ob das jetzt elegant ist kann ich icht beurteilen, es müsste aber so gehen.
    In Arrays arbeiten ist idr schneller und leichter als in Dateien. (Da Arrays direkt zugänglich sind und im Ram liegen statt auf der Platte)

    lg
    M

  • Variable "variabel" machen

    • Mars
    • 18. Mai 2013 um 12:16

    Der Bub sucht vermutlich eine Lösung mit der er nicht sein ganzes Programm neuschreiben muss. Und eine Lösung die er versteht.

    [autoit]

    For $i = 1 To $Spaltenanzahl
    ConsoleWrite ("Variable i = " & $i & @CRLF)
    Local $SpalteX = Eval("Spalte" & $i)
    ConsoleWrite ("$SpalteX = " & $SpalteX & @CRLF)
    _GUICtrlListView_InsertColumn($listview, $i, $SpalteX, 50)
    Next

    [/autoit]

    Eval ist zwar eine "unschöne" Funktion, aber im Moment genau das was du brauchst, wenn du nicht auf Objekte oder Arrays umsteigen willst.

    M

  • Unvergessliche Geschichten/About your life

    • Mars
    • 7. Mai 2013 um 23:44

    Bei Starkstom wärst du nur noch ein Häufchen Asche ;)
    Edit: Mein Onkel ist Lokführer. Der hat gesagt jemand wäre mit einer Leiter in die Oberleitung gekippt. Von ihm und der Leiter war anschließend nicht viel übrig.
    Edit2: Irgendwann wenn ich mal Lust habe packe ich auch mal was lustiges aus ;)

  • GDI+ AutoIt Logo

    • Mars
    • 3. Mai 2013 um 07:50

    Sehr schön !
    Auch interessante Funktionen wie AluBrush, CreateAlu und LightBrush sind vorhanden.
    Hier kann man was lernen :P

  • Kleines GDI+ Malprogramm

    • Mars
    • 18. April 2013 um 19:51

    Die Colorpicker.au3 hab ich wohl vergessen...
    Ich trage den Link dann im Startpost ein :)

  • Kleines GDI+ Malprogramm

    • Mars
    • 18. April 2013 um 19:41

    Moin,

    Das hier ist nur ein kleiner Test, aber da ich hier im Forum schon weitaus schlechtere Versionen dieses Programms gesehen habe mache ich es mal öffentlich :D
    (So können Anfänger ggf etwas aus dem Skript lernen, für Fortgeschrittene ist das ja nix tolles :P)
    Es ist ein Malprogramm (nur Linien) wo man Farben und einige andere Aspekte variieren kann.
    Bilder können als .png gespeichert werden, Export und Import (einfach das LinienArray kopiert und komprimiert) ist möglich. ClipGet + ClipPut
    (Die Kompression ist noch nicht berauschend, aber es funktioniert schonmal)

    Edit: Die benötigte UDF gibts hier: Colorpicker UDF
    - Update: 19.04.13a
    | Kompression um ca. 30% erhöht (da geht eventuell aber noch mehr)
    | Performance erhöht (manchmal muss nur die letzte Linie gezeichnet werden anstatt alle)
    - Update: 24.04.13a
    | Kompression nochmals um ca. 50% erhöht (vorhandenes muss aber neu gemalt werden...)

    Skript
    [autoit]

    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GDIPlus.au3>
    #include <Misc.au3>
    #include <Array.au3>
    #include <Colorpicker.au3>

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

    Opt('GUIOnEventMode', 1)
    Opt('MouseCoordMode', 2)

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

    Global Const $iW = 550
    Global Const $iH = 550
    Global Const $sVersion = '24.04.13'

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

    Global $hGUI, $hIMG, $hBUF, $hGFX, $hDC, $aPos, $aDown[2], _
    $aLines[1][7], $xIMG, $xGFX, $xDC, $hPEN, $hPicker, $hPicker2, _
    $hBtnSave, $hDickeWahl, $hComboDicke, $sTMP, $hComboCap, _
    $aCaps[3] = ['Kreis', 'Dreieck'], $aCapsI[3] = [2, 3], $hComboLen, _
    $aPalette[64], $hBtnExport, $hBtnImport, $hBtnClear, $vCurBuf, $xDcCur, $xGfxCur, $LinePen, $hBtnDel, $hBtnDel10

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

    ; Einstellbar
    Global $iMaxLen = 5, $iCol = 0, $iWidth = 5, $iEnd = 2, $iBkCol = 63

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

    ; Lines:
    ; 0 - 3 - x1, y1, x2, y2
    ; 4 - Farbe (erstmal 32Bit)
    ; 5 - Dicke (1px, 2px ->)
    ; 6 - Enden (Rund, Eckig, usw)

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

    ; GUI
    _GDIPlus_Startup()
    $hGUI = GUICreate('Malen ' & $sVersion, $iW, $iH + 50)
    $hDC = _WinAPI_GetDC($hGUI)
    $hIMG = _Image_Create($iW, $iH)
    $hBUF = DllStructGetData($hIMG, 1, 1)
    $hGFX = _GDIPlus_GraphicsCreateFromHDC($hBUF)
    $xIMG = _Image_Create($iW, $iH)
    $xDC = DllStructGetData($xIMG, 1, 1)
    $xGFX = _GDIPlus_GraphicsCreateFromHDC($xDC)
    $vCurBuf = _Image_Create($iW, $iH)
    $xDcCur = DllStructGetData($vCurBuf, 1, 1)
    $xGfxCur = _GDIPlus_GraphicsCreateFromHDC($xDcCur)
    $hPEN = _GDIPlus_PenCreate()
    $LinePen = _GDIPlus_PenCreate()
    $hBtnSave = GUICtrlCreateButton('Speichern', $iW - 75, 25, 75, 25)
    $hComboDicke = GUICtrlCreateCombo('1', 80, 2, 50, 23)
    $hComboCap = GUICtrlCreateCombo($aCaps[0], 222, 2, 73, 23)
    $hComboLen = GUICtrlCreateCombo('1', 177 + 75 + 135, 2, 50, 23)
    $hBtnExport = GUICtrlCreateButton('Export', $iW - 125, 25, 50, 25)
    $hBtnImport = GUICtrlCreateButton('Import', $iW - 175, 25, 50, 25)
    GUICtrlCreateLabel('Durchmesser:', 5, 5, 65, 17)
    GUICtrlCreateLabel('Linienenden:', 155, 5, 65, 17)
    GUICtrlCreateLabel('Schrittlänge:', 320, 5, 65, 17)
    $hBtnClear = GUICtrlCreateButton('Clear', 125, 25, 50, 25)
    $hBtnDel = GUICtrlCreateButton('Delete', 175, 25, 50, 25)
    $hBtnDel10 = GUICtrlCreateButton('Del 10', 225, 25, 50, 25)
    _GDIPlus_GraphicsSetSmoothingMode($xGFX, 4)
    _GDIPlus_GraphicsSetSmoothingMode($xGfxCur, 4)
    _FillPalette()

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

    ; Daten Laden
    For $i = 2 To 32 Step 1
    $sTMP &= Int($i) & '|'
    Next
    StringTrimRight($sTMP, 1)
    GUICtrlSetData($hComboDicke, $sTMP, '5')
    StringTrimRight($sTMP, 1)
    GUICtrlSetData($hComboLen, $sTMP, '10')
    GUICtrlSetData($hComboCap, $aCaps[1] & '|' & $aCaps[2])
    $hPicker = _GUIColorPicker_Create('Farbe', 75, 25, 50, 25, 0, BitOR($CP_FLAG_DEFAULT, $CP_FLAG_CHOOSERBUTTON), $aPalette, 'Farbauswahl', 8, 8)
    GUICtrlSetOnEvent($hPicker, 'EVENT')
    $hPicker2 = _GUIColorPicker_Create('Hintergrund', 0, 25, 75, 25, 0, BitOR($CP_FLAG_DEFAULT, $CP_FLAG_CHOOSERBUTTON), $aPalette, 'Farbauswahl', 8, 8)
    GUICtrlSetOnEvent($hPicker2, 'EVENT')
    GUICtrlSetTip($hBtnSave, 'Als Png speichern...')
    GUICtrlSetTip($hPicker2, 'Hintergrundfarbe...')
    GUICtrlSetTip($hPicker, 'Linienfarbe...')
    GUICtrlSetTip($hComboCap, 'Linientyp...')
    GUICtrlSetTip($hComboDicke, 'Durchmesser...')
    GUICtrlSetTip($hComboLen, 'Kleinste Linienlänge...')

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

    ; Vorbereiten
    _Repaint()
    GUICtrlSetOnEvent($hBtnClear, 'EVENT')
    GUICtrlSetOnEvent($hBtnExport, 'EVENT')
    GUICtrlSetOnEvent($hBtnImport, 'EVENT')
    GUICtrlSetOnEvent($hComboLen, 'EVENT')
    GUICtrlSetOnEvent($hComboCap, 'EVENT')
    GUICtrlSetOnEvent($hComboDicke, 'EVENT')
    GUICtrlSetOnEvent($hBtnSave, 'EVENT')
    GUICtrlSetOnEvent($hBtnDel, 'EVENT')
    GUICtrlSetOnEvent($hBtnDel10, 'EVENT')
    GUISetOnEvent(-3, 'EVENT', $hGUI)
    GUISetOnEvent(-5, 'EVENT', $hGUI)
    GUIRegisterMsg(0xF, 'WM_PAINT')
    OnAutoItExitRegister('_Frei')
    GUISetState(@SW_SHOW, $hGUI)

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

    While Sleep(30)
    $aPos = MouseGetPos()
    $aPos[1] -= 50
    If _Check($aPos) Then ; Maus ist im Fenster und Wurde bewegt
    If _IsPressed('01') Then ; Klick im Fenster
    If $aDown[0] = -1 Then ; aDown ist noch nicht gesetzt
    $aDown[0] = $aPos[0]
    $aDown[1] = $aPos[1]
    Else ; aDown ist gesetzt. Check ob Maxlen erreicht wurde
    If _CalcDif($aPos, $aDown) >= $iMaxLen Then ; Maxlen erreicht
    _AddLine($aPos, $aDown, $iCol, $iWidth, $iEnd)
    $aDown[0] = $aPos[0]
    $aDown[1] = $aPos[1]
    _Repaint(True)
    EndIf
    EndIf
    Else
    $aDown[0] = -1
    $aDown[1] = -1
    _DrawCur(1)
    EndIf
    EndIf
    WEnd

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

    Func _Comp($s)
    Local $aSplit = StringSplit($s, '|', 2)
    If @error And Not (StringLen($s) = 8) And Not StringIsXDigit($s) Then Return Tip('Export ungültig')
    Local $sRet = $aSplit[0], $aTmp, $Tmpx = 0, $Tmpy = 0
    For $i = 1 To UBound($aSplit) - 1 Step 1
    $aTmp = StringSplit($aSplit[$i], ',', 2)
    $sRet &= _DecTo32($aTmp[0] - $Tmpx + 512) ; Koord x1
    $sRet &= _DecTo32($aTmp[1] - $Tmpy + 512) ; Koord y1
    $sRet &= _DecTo32($aTmp[2] - $aTmp[0] + 512) ; Koord x2 - x1 + 512
    $sRet &= _DecTo32($aTmp[3] - $aTmp[1] + 512) ; Koord y2 - y1 + 512
    $sRet &= $aTmp[4] ; Farbe
    $sRet &= _DecTo32($aTmp[5] - 1, 1) ; Durchmesser
    $sRet &= ($aTmp[6] = 3) * 1
    $Tmpx = $aTmp[2]
    $Tmpy = $aTmp[3]
    Next
    ;~ ConsoleWrite($sRet & @CRLF)
    Return _Ersetzung_Comp($sRet)
    EndFunc ;==>_Comp

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

    Func _DeComp($s)
    Local $sDec = _Ersetzung_DeComp($s)
    Local $sTMP, $sRet, $x1, $y1, $x2, $y2, $Tmpx = 0, $Tmpy = 0
    $sTMP = StringLeft($sDec, 2)
    ;~ If Not StringIsXDigit($sTMP) Then Return Tip('Import ungültig')
    $sRet = '0x' & $sTMP & '|'
    For $i = 3 To StringLen($sDec) Step 12
    $sTMP = StringMid($sDec, $i, 16)
    $x1 = _32ToDec(StringMid($sTMP, 1, 2)) + $Tmpx - 512
    $y1 = _32ToDec(StringMid($sTMP, 3, 2)) + $Tmpy - 512
    $x2 = _32ToDec(StringMid($sTMP, 5, 2)) + $x1 - 512
    $y2 = _32ToDec(StringMid($sTMP, 7, 2)) + $y1 - 512
    $sRet &= $x1 & ',' & $y1 & ',' & $x2 & ',' & $y2 & ','
    $sRet &= StringMid($sTMP, 9, 2) & ','
    $sRet &= _32ToDec(StringMid($sTMP, 11, 1)) + 1 & ',' & StringRight($sTMP, 1) + 2 & '|'
    $Tmpx = $x2
    $Tmpy = $y2
    Next
    Return StringTrimRight($sRet, 1)
    EndFunc ;==>_DeComp

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

    Func _32ToDec($s32)
    Local Static $a = StringSplit('abcdefghijklmnopqrstuvwxyzäöüÄÖÜ', '', 2)
    Local $iRet, $sTMP, $l = StringLen($s32)
    For $i = 1 To $l Step 1
    $sTMP = StringMid($s32, $l - $i + 1, 1)
    For $x = 0 To 31 Step 1
    If $a[$x] == $sTMP Then
    $iRet += 32 ^ ($i - 1) * $x
    ExitLoop
    EndIf
    Next
    Next
    Return $iRet
    EndFunc ;==>_32ToDec

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

    Func _DecTo32($iDec, $iStellen = 2)
    Local Static $a = StringSplit('abcdefghijklmnopqrstuvwxyzäöüÄÖÜ', '', 2)
    Local $sRet
    Do
    $sRet = $a[Mod($iDec, 32)] & $sRet
    $iDec = Int($iDec / 32)
    Until $iDec = 0
    Return StringRight('aaa' & $sRet, $iStellen)
    EndFunc ;==>_DecTo32

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

    Func _Clear()
    ReDim $aLines[1][UBound($aLines, 2)]
    EndFunc ;==>_Clear

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

    Func _Export()
    Local $sExport = Hex($iBkCol, 2) & '|'
    For $i = 1 To UBound($aLines) - 1 Step 1
    For $x = 0 To UBound($aLines, 2) - 1 Step 1
    $sExport &= $aLines[$i][$x] & ','
    Next
    $sExport = StringTrimRight($sExport, 1) & '|'
    Next
    $sExport = StringTrimRight($sExport, 1)
    Tip('wird komprimiert...')
    ;~ ConsoleWrite($sExport & @CRLF)
    Local $c = _Comp($sExport)
    ClipPut($c)
    Tip('Fertig (' & Round(StringLen($c) / StringLen($sExport), 2) * 100 & '%) - [' & StringLen($c) & ']')
    EndFunc ;==>_Export

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

    Func _Import()
    Local $Dec = _DeComp(ClipGet())
    ;~ ConsoleWrite($Dec & @CRLF)
    Local $Split = StringSplit($Dec, '|', 2)
    ;~ If @error And Not (StringLen($Dec) = 8) And Not StringIsXDigit($Dec) Then Return Tip('Import ungültig')
    Local $u = UBound($aLines, 2)
    ReDim $aLines[1][$u]
    $iBkCol = $Split[0]
    ;~ ConsoleWrite($iBkCol & @CRLF)
    _Repaint()
    Local $a[2], $b[2]
    For $i = 1 To UBound($Split) - 1 Step 1
    Tip(UBound($aLines))
    $sTMP = StringSplit($Split[$i], ',', 2)
    If Not (UBound($sTMP) = $u) Then Return Tip('Import Error')
    $a[0] = $sTMP[0]
    $a[1] = $sTMP[1]
    $b[0] = $sTMP[2]
    $b[1] = $sTMP[3]
    _AddLine($a, $b, '0x' & $sTMP[4], Int($sTMP[5]), Int($sTMP[6]))
    Sleep(10)
    _Repaint(True)
    Next
    WM_PAINT()
    EndFunc ;==>_Import

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

    Func _FillPalette()
    For $r = 0 To 3 Step 1
    For $g = 0 To 3 Step 1
    For $b = 0 To 3 Step 1
    $aPalette[$r + $g * 4 + $b * 16] = '0x' & Hex(Int(82 * $r), 2) & Hex(Int(82 * $g), 2) & Hex(Int(82 * $b), 2)
    Next
    Next
    Next
    _SwapRow($aPalette, 1, 2, 8)
    _SwapRow($aPalette, 5, 6, 8)
    _SwapRow($aPalette, 2, 4, 8)
    _SwapRow($aPalette, 3, 5, 8)
    EndFunc ;==>_FillPalette

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

    Func Tip($s)
    ToolTip($s)
    AdlibRegister('EndTip', 1500)
    EndFunc ;==>Tip

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

    Func EndTip()
    ToolTip('')
    AdlibUnRegister('EndTip')
    EndFunc ;==>EndTip

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

    Func _Repaint($bOnlyLastLine = False)
    If $bOnlyLastLine Then
    Local $i = UBound($aLines) - 1
    _GDIPlus_PenSetColor($hPEN, '0xFF' & StringRight($aPalette['0x' & $aLines[$i][4]], 6))
    _GDIPlus_PenSetWidth($hPEN, $aLines[$i][5])
    DllCall($ghGDIPDll, "int", "GdipSetPenEndCap", "handle", $hPEN, "int", $aLines[$i][6])
    DllCall($ghGDIPDll, "int", "GdipSetPenStartCap", "handle", $hPEN, "int", $aLines[$i][6])
    _GDIPlus_GraphicsDrawLine($xGFX, $aLines[$i][0], $aLines[$i][1], $aLines[$i][2], $aLines[$i][3], $hPEN)
    Else
    _GDIPlus_GraphicsClear($xGFX, '0xFF' & StringRight($aPalette[$iBkCol], 6))
    For $i = 1 To UBound($aLines) - 1 Step 1
    _GDIPlus_PenSetColor($hPEN, '0xFF' & StringRight($aPalette['0x' & $aLines[$i][4]], 6))
    _GDIPlus_PenSetWidth($hPEN, $aLines[$i][5])
    DllCall($ghGDIPDll, "int", "GdipSetPenEndCap", "handle", $hPEN, "int", $aLines[$i][6])
    DllCall($ghGDIPDll, "int", "GdipSetPenStartCap", "handle", $hPEN, "int", $aLines[$i][6])
    _GDIPlus_GraphicsDrawLine($xGFX, $aLines[$i][0], $aLines[$i][1], $aLines[$i][2], $aLines[$i][3], $hPEN)
    Next
    EndIf
    _WinAPI_BitBlt($hBUF, 0, 0, $iW, $iH, $xDC, 0, 0, 0xCC0020)
    _DrawCur()
    WM_PAINT()
    EndFunc ;==>_Repaint

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

    Func _AddLine($p1, $p2, $iCol, $iWidth, $iEnd)
    Local $u = UBound($aLines)
    ReDim $aLines[$u + 1][UBound($aLines, 2)]
    $aLines[$u][0] = $p1[0]
    $aLines[$u][1] = $p1[1]
    $aLines[$u][2] = $p2[0]
    $aLines[$u][3] = $p2[1]
    $aLines[$u][4] = Hex(Int($iCol), 2)
    $aLines[$u][5] = $iWidth
    $aLines[$u][6] = $iEnd
    ;~ _ArrayDisplay($aLines)
    EndFunc ;==>_AddLine

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

    Func _CalcDif($a, $b)
    Return (($b[0] - $a[0]) ^ 2 + ($b[1] - $a[1]) ^ 2) ^ 0.5
    EndFunc ;==>_CalcDif

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

    Func _Check($aPos)
    Local Static $aPosAlt[2]
    If ($aPosAlt[0] <> $aPos[0] Or $aPosAlt[1] <> $aPos[1]) And ($aPos[0] >= 0 And $aPos[0] <= $iW And $aPos[1] >= 0 And $aPos[1] <= $iH) Then
    $aPosAlt[0] = $aPos[0]
    $aPosAlt[1] = $aPos[1]
    Return True
    EndIf
    Return False
    EndFunc ;==>_Check

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

    Func _FindInPalette($iCol)
    For $i = 0 To UBound($aPalette) - 1 Step 1
    If $iCol = $aPalette[$i] Then Return $i
    Next
    EndFunc ;==>_FindInPalette

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

    Func EVENT()
    Switch @GUI_CtrlId
    Case -3
    Exit
    Case $hPicker
    $iCol = _FindInPalette('0x' & StringTrimLeft(_GUIColorPicker_GetColor($hPicker), 2))
    $aDown[0] = -1
    $aDown[1] = -1
    Case $hPicker2
    $iBkCol = _FindInPalette('0x' & StringTrimLeft(_GUIColorPicker_GetColor($hPicker2), 2))
    $aDown[0] = -1
    $aDown[1] = -1
    _Repaint()
    Case $hBtnSave
    _Image_Save($hIMG)
    Case -5
    WM_PAINT()
    Case $hComboDicke
    $iWidth = GUICtrlRead($hComboDicke)
    Case $hComboCap
    $sTMP = GUICtrlRead($hComboCap)
    For $i = 0 To 1 Step 1
    If $sTMP = $aCaps[$i] Then
    $iEnd = $aCapsI[$i]
    ExitLoop
    EndIf
    Next
    Case $hComboLen
    $iMaxLen = GUICtrlRead($hComboLen)
    Case $hBtnExport
    _Export()
    Case $hBtnImport
    _Import()
    Case $hBtnClear
    _Clear()
    _Repaint()
    Case $hBtnDel
    If UBound($aLines) > 1 Then
    ReDim $aLines[UBound($aLines) - 1][UBound($aLines, 2)]
    _Repaint()
    EndIf
    Case $hBtnDel10
    For $i = 0 To 9 Step 1
    If UBound($aLines) > 1 Then
    ReDim $aLines[UBound($aLines) - 1][UBound($aLines, 2)]
    EndIf
    Next
    _Repaint()
    EndSwitch
    EndFunc ;==>EVENT

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

    Func _DrawCur($Paint = False)
    _WinAPI_BitBlt($xDcCur, 0, 0, $iW, $iH, $hBUF, 0, 0, 0xCC0020)
    If $Paint Then
    $sTMP = Ceiling($iWidth / 10)
    _GDIPlus_GraphicsDrawEllipse($xGfxCur, $aPos[0] - $iWidth / 2, $aPos[1] - $iWidth / 2, $iWidth, $iWidth, $LinePen)
    WM_PAINT()
    EndIf
    EndFunc ;==>_DrawCur

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

    Func WM_PAINT()
    DllCall('GDI32.dll', 'int', 'StretchBlt', 'hwnd', $hDC, 'int', 0, 'int', 50, 'int', $iW, 'int', $iH, 'hwnd', $xDcCur, 'int', 0, 'int', 0, 'int', $iW, 'int', $iH, 'dword', 0xCC0020)
    EndFunc ;==>WM_PAINT

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

    Func _Frei()
    _GUIColorPicker_Delete($hPicker)
    _GDIPlus_PenDispose($hPEN)
    _GDIPlus_GraphicsDispose($xGFX)
    _GDIPlus_GraphicsDispose($hGFX)
    _Image_Delete($hIMG)
    _Image_Delete($xIMG)
    _WinAPI_ReleaseDC($hGUI, $hDC)
    _GDIPlus_Shutdown()
    EndFunc ;==>_Frei

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

    Func _Image_Create($iW, $iH)
    Local $Ptr, $hDC, $hBmp, $tBMI, $aDIB, $vStruct
    $hDC = _WinAPI_CreateCompatibleDC(0)
    $tBMI = DllStructCreate($tagBITMAPINFO)
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4)
    DllStructSetData($tBMI, "Width", $iW)
    DllStructSetData($tBMI, "Height", -$iH)
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32)
    $aDIB = DllCall('GDI32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hBmp = $aDIB[0]
    $Ptr = $aDIB[4]
    _WinAPI_SelectObject($hDC, $hBmp)
    $vStruct = DllStructCreate('int[5]')
    DllStructSetData($vStruct, 1, $hDC, 1)
    DllStructSetData($vStruct, 1, $iW, 2)
    DllStructSetData($vStruct, 1, $iH, 3)
    DllStructSetData($vStruct, 1, $Ptr, 4)
    DllStructSetData($vStruct, 1, $hBmp, 5)
    Return $vStruct
    EndFunc ;==>_Image_Create

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

    Func _Image_Delete(ByRef $vStruct)
    _WinAPI_DeleteObject(DllStructGetData($vStruct, 1, 5))
    _WinAPI_DeleteDC(DllStructGetData($vStruct, 1, 1))
    $vStruct = 0
    EndFunc ;==>_Image_Delete

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

    Func _Image_Save($vImg)
    Local $sPfad = FileSaveDialog('Ziel wählen...', @ScriptDir, '(*.png)')
    If Not (StringRight($sPfad, 4) = '.png') Then $sPfad &= '.png'
    Local $hBmp = _GDIPlus_BitmapCreateFromHBITMAP(DllStructGetData($vImg, 1, 5))
    _GDIPlus_ImageSaveToFile($hBmp, $sPfad)
    _GDIPlus_BitmapDispose($hBmp)
    EndFunc ;==>_Image_Save

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

    Func _SwapRow(ByRef $a1, $y1, $y2, $iLen)
    Local $iTMP
    For $x = 0 To $iLen - 1 Step 1
    $iTMP = $a1[$x + $y1 * $iLen]
    $a1[$x + $y1 * $iLen] = $a1[$x + $y2 * $iLen]
    $a1[$x + $y2 * $iLen] = $iTMP
    Next
    EndFunc ;==>_SwapRow

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

    ;~ '!"#%&,-/:;=@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_`abcdefghijklmnopqrstuvwxyz~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—™š›œžŸ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'

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

    Func _ZeichenArray($sDoNotUse = '', $Dec = False)
    Local $sZ
    ;~ If $Dec Then
    ;~ $sZ = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz€ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäçèéêëìíîïðñòóôõöùúûüýÿ'
    ;~ Else
    $sZ = '!"#%&,-/:;=@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_`abcdefghijklmnopqrstuvwxyz~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—™š›œžŸ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
    ;~ EndIf
    For $i = 1 To StringLen($sDoNotUse) Step 1
    $sZ = StringReplace($sZ, StringMid($sDoNotUse, $i, 1), '', 0, 1)
    Next
    Local $UBound = StringLen($sZ), $b[$UBound]
    For $i = 0 To $UBound - 1 Step 1
    $b[$i] = StringLeft($sZ, 1)
    $sZ = StringTrimLeft($sZ, 1)
    Next
    Return $b
    EndFunc ;==>_ZeichenArray

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

    Func _Ersetzung_DeComp($a)
    Local $aTmp = StringSplit($a, ' '), $sDoNotUse = $aTmp[$aTmp[0]]
    $a = StringTrimRight($a, StringLen($sDoNotUse) + 1)
    Local $n = Int('0x' & StringRight($a, 2)), $_____ZeichenReverse = _ZeichenArray($sDoNotUse, True), $st = ''
    $a = StringTrimRight($a, 2)
    _ArrayReverse2($_____ZeichenReverse, 0, $n - 1)
    For $i = 0 To $n - 1 Step 1
    $st = StringRight($a, 2)
    $a = StringTrimRight($a, 2)
    $a = StringReplace($a, $_____ZeichenReverse[$i], $st, 0, 1)
    Next
    Return $a
    EndFunc ;==>_Ersetzung_DeComp

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

    Func _Ersetzung_Comp($a)
    Local $sTMP = $a, $sDoNotUse
    While $sTMP
    ;ConsoleWrite(StringLeft($sTmp, 1) & @CRLF)
    $sDoNotUse &= StringLeft($sTMP, 1)
    $sTMP = StringReplace($sTMP, StringLeft($sTMP, 1), '', 0, 1)
    WEnd
    ;~ ConsoleWrite('!--- DoNotUse Zeichen: ' & $sDoNotUse & @CRLF)
    Local $l_alt = StringLen($a), $l_neu = 0, $st, $er, $n = 0, $_____Zeichen = _ZeichenArray($sDoNotUse), $_____Zeichenmenge = UBound($_____Zeichen)
    While 1
    $st = _Analyse($a) ; $st = Meist vorkommender String
    $a = StringReplace($a, $st, $_____Zeichen[$n], 0, 1)
    $a &= $st ; Und rechts an $a angehängt. $a = Urspringsstring
    $l_neu = StringLen($a) ; Neue Stringlänge
    $n += 1 ; Durchläufe
    If ($n = $_____Zeichenmenge Or $l_neu >= $l_alt) Then ;Nur Abbrechen, wenn tatsächlich nix geht. (nicht wenn der 8er nicht klappt...)
    ExitLoop
    EndIf
    $l_alt = $l_neu
    If IsInt($n / 5) Then Tip($n & '/' & $_____Zeichenmenge)
    WEnd
    Return $a & Hex($n, 2) & ' ' & $sDoNotUse ; Rückgabe ist der Komprimierte String und die Anzahl ersetzungen
    EndFunc ;==>_Ersetzung_Comp

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

    Func _Analyse($sData, $l = 2)
    Local $StringLaenge = StringLen($sData), $Top[2], $StringPart, $Replacements, $BenutzteStrings[256][256]
    For $i = 0 To $StringLaenge - ($l - 1) Step 1
    $StringPart = StringMid($sData, $i, $l)
    If Not $BenutzteStrings[Asc(StringLeft($StringPart, 1))][Asc(StringRight($StringPart, 1))]Then ; Damit keine Strings doppelt getestet werden...
    $BenutzteStrings[Asc(StringLeft($StringPart, 1))][Asc(StringRight($StringPart, 1))] = True
    StringReplace($sData, $StringPart, $StringPart, 0, 1)
    $Replacements = @extended
    If $Replacements >= $Top[0] Then
    $Top[0] = $Replacements
    $Top[1] = $StringPart
    EndIf
    EndIf
    Next
    Return $Top[1]
    EndFunc ;==>_Analyse

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

    Func _ArrayReverse2(ByRef $avArray, $iStart = 0, $iEnd = 0)
    Local $vTmp, $iUBound = UBound($avArray) - 1
    For $i = $iStart To Int(($iStart + $iEnd - 1) / 2)
    $vTmp = $avArray[$i]
    $avArray[$i] = $avArray[$iEnd]
    $avArray[$iEnd] = $vTmp
    $iEnd -= 1
    Next
    EndFunc ;==>_ArrayReverse2

    [/autoit]
    Beispiel (5KB)
    Code
    ½wÜsöSS‚mÕR€‚n¸_V‚k¡QC‚fL¢@‚aJŠK‚j_€~‚mÔ_W‚g/‡‡‚ipjQV‚j¸S€‚gWSJ‚cK¢@‚cHà‚fV‡Y‚m°NY‚sÓ€¡‚sµN†‚z°@P4!"ÓH•`gËKW`tÓ¡U`Ö_¤H`ä@ì`u"ì`y/¡:`üK¡1`äPWRÒªP€`yÁ¡_`öK•~Ò_YK`uRU/`vJP/ÒCW=`ÿ¸H`ÄKWNÒªPV`gþJS‚i¡´@4²Ö"‡H‚gH_:‚i=_@4²Ö~µN4²ÖP_J‚hKS@‚h:_=‚gR‡6‚p‡1P‚vš€L‚oZQK‚iZ‡L‚iRQH‚wìZ`cpg/Š`hpgKZ`rÑWR`Ö6Ñ=`ÜV•LÒSY~`rš†Y`m´6U‚vŠŠ6‚e1S@‚jPQV‚mªQN‚i6‡/‚h:Z"‚k@ZH4!wöojý`spjU‡ÒÕURÒWUC`ö6¤H`üQWY`x:UR`vWPC`uLP@Ò@W/`r_KP`l´LP`k´6P`pSU=`uQY~`t‡P~`n°=U‚ܵJU‚mŠš6‚aJš"‚f@ZH‚j:_H‚aR´L4²Ö@‡C‚g¡_V‚gчV‚fWS1‚j~QJ‚oU€R`e¸WQ`yªWCÒ†P1`r€~U`nÔL†`rÊU•Ò¢U6`x1W@`x6U1`v~PJ`uYPC`öL¸@`cLŠC‚e¡SV‚jªQN‚mLQ"‚nRV~‚lC_:4!lyrg€¢‘rpeRZ‘kÕŠQ‘f¤_N‘l@V~‘t¢JPžlµªWžÜ´¤†žg€Q"‘jHS@‘h~_N‘iU_C‘kLQ@‘e~°N‘gW€N‘Št€R‘mW_C‘aL´@M²ÖK‡J‘g@_K‘kZQL‘šrNU‘wÓJW‘xµCP‘äÊ@UžiÊYPžÄSÁ=ûlCpj/ûe:•"žzHW@žx=U:žr¤L‡žzpiÅQûcUª@žz/P@žwHW"žw/P:M!"LQJM²wLra:M²f/qö"M²z"_"‘kHQ@‘h=Š:‘g@Z=‘lRQ6‘kC_H‘zQKYžuŠªLžäQU6žÜJÁ"ûc"¡"žö/•:M!vknÖ€L‘üš6Pžv_¸/žö1PHžu@ìžxC•Kžu‡~YžrVìžtRY~žvQW=žz1•"žx/P:žw~WCžt¡ýžeÅ1Q‘v¸€R‘c¡µRM²Ä•SN‘Šp1Z‘ŠpSN‘aLÔ"‘d"Q"‘m:Q/‘jZSY‘n¢N†žwSpeKûrCÕ"ûo"ph"ûcNYLž¤tL•‘xµŠY‘dJ‡CM!vgsÄCQ®ŠpZR“²ÜWµC“²Ü~Z:®j6_:®j/Z"®fNšL®kŠNY®zqö@Ñ®Ärd:¸®Öra"ª®Üqä@UÃdqä6ªÃmˆPÃo°L†Ãs_W6ÃöVªKÃzJP@ÃÄLÅCÃÖYUJÃw•UVÃtpf†°Ãmpb6SÃcoÐrr®mom°1®b6S@®gHà®f1‡=®jQV~®ršNY®švQW®rµCP®ö´"P®ÜK@Š®Üú"‡“!"pi"Q“!"þ"_“Æg†¢HÂc@àÂj@QHÂoR€LÂu¢JUÂöÊ@PÂÜÓ"•­cË/W­gµ6P­h´=P­ošUL­yV•=­öK¡€­zUU1­uYYN­o¤KQ­gþH_­cúH¢­bpc"SÂÖpj:QÂv¤VNO²üHqöKO²z€_=ÂjSZPÂrqyJ¡­bËKU­n¢†L­tQU6­xKWV­sÁLZ­fpf@šÂpYš~Âh¢VP­bµPW­ÜnrH_O‹goÄKÓO‹foÜ"QOjˆpe"°¬Üpc@_¬Üþ"Q¬ÖÁ:Q·mÖsl‡_ßjrcË€ßjªqÖRßfWqÄCßzPQC¬lWZR¬j†_@·sysl´"ßq"Þ"ßs:°/¬Ð_"¬hHS@ßz6qä1ßx=Š"·tmsh‡WßÜÞÔ¤¬iËCY¬rÔQP¬jµSW¬iµZP·uaph:P¬x´RP¬uÞCѬxÞJP·rüúHŬÜri:Õ¬Ärf@¤¬Üqä"POjˆqy"¡·mlijVQ¬n¤QN¬nUVC¬pU€N·udukCPëIršQLëIjRSHëIg@àëIjLQNëIp¡R€ë™reoy"PëIfš:•ë™jwtxZKƒh€‡=ƒa=°NƒdUZCƒiYSJƒfK‡@ƒhHZ"ƒlRQ~ƒn¢VP³ohox€~ƒqS€LƒoRQHƒk~_€ƒg•‡CƒhYZJƒjR_UƒkµQU³rssmSKƒc€¢=³oÄN°=ƒb1àƒi†Z€ƒipiSšƒf•‡=³wiroÁC³reÁ¤ŠÝwoÄL´Ýoow†µÝu•WYÝyÊWW³tmsePNÝt•YRÝy=ª6³sšz¡JÝv•ýÝäNŪÝöʆLƒsrÄŠ"ƒÐŠ/³oÖKÔRƒcÅZ_ƒmphVSƒoÁVRƒiPŠ1³oÜ"°=ƒc__Y³nzoäZ€ƒeW¢J³oÖL¢:ƒd=_@ƒj"ZHƒmRVLƒrŠNYƒdkg¢~ƒcVS/ƒh"_:ƒg†‡NƒhÅZSƒjÁ_RƒhPS1ƒdJš~ƒk¢NP³nhC‡CƒfUSNƒgYS1ƒg1SLƒ¤sJW³ynsnQJƒkª_Zƒbp¤tNƒbK_HƒpQCY³tu‡¢"ƒb/‡:ƒj†VNƒnLQ"³ujlbÓ†³oÜZQ=³htvhš~¦aZš6ÀoöKÊV¦cþVS¦oÑVC¦r1N†Àn¸iZJ¦eZ¢ª¦kÞC•ÀslsvË=Àoä"S1¦f¤‡S¦nþCV¦r"QY¦sÊJWÀsösi‡¡¦aʰ~¦aQ‡=¦cWšŠ¦k6NUÀuÄ"rkCÀnÜLÓ@ÀoöL‡CÀtdshQYÀoÖQqyH¦aL€R¦hª¢€¦h€€¤ÀtxsbQL¦hKŠZ¦l/NYÀtsrmVU¦h¢šL¦f/Z€¦fWšJ¦d_S¤Àmn‡š"޲Ü"¢"©f=Q1©lLZ1©k†ZC©eU¢N©aÅŠS©gÁZR©m•VN©iÁЇ©iÕVR©hÑšZ©h¸VN©n†Q:©fU¢V©bª‡N©iWQN©jPSJ©f†‡J©e~‡1޲ÜPÔR޲vWqyC޲mYÞJ޲x6à©g=S1©gLS1©g~SJ©tqÜ=UŽ,dÞ"¸Ž,f€KVŽ,gÅHQŽ,iÅýŽ,uY•"ŽÆbNÁLŽÆc_¡LŽ,ÖR¤HŽÆc@Ñ"ŽÆb"ª"Ž!nÖWpiL¼cVP=Tv1U"Tz:¡/TäCW=TwNP=Tz1ª"¼aJ¸6TüNU/Tw1UHTuVY†TwZ•=TtZL†Tq_P6Tx€•6TöS¡YTäŠWLTxSU~Tw‡U~Tu_YKTsQYKTrZ†LTrSY~TpŠL†To‡†LTt‡U†—"€Z"’k6ZJ’dU°R¶ÖpšqV’b¤ŠR’i¡VR’k¡SR’l•€N’kU‡C’hYZJ’iYSC’lU€N’lLà¶Ü~´R¶z•ÔN’eUVC’k•S€’j•QC’cP´C’aY_J¶ÜYÊC¶ÄL‡@’m_N•Td´Y~TtZP6TuSPYTcš€~’oRQ"’tW1_’w1Rª’örg/pjTfrh=¤Tdre"Á—"qÖ"PTÄSú=¼eLýTs¡UCTÄ1ц¼cS¤KTüNWH¼g:pgH¼i@¡"¼f"pj"¼b"ìTy"¡"Tä"W"TöHª@Tü=•:TyHUHTx@W"Tw"ì’öLŠN¶uWqÄN—nzLrk"¶j/S:’i6Z:’b~´C’eU€N’g~°@¶ä@´/¶üCš=’aCš/’e1_H’hHS:’i"Z/To"ph:¼u6pf:¼öYpaR¼tLÅH¼dN¤KTäCìTu6PJTvKU@Td¤€Š’fp¤t:¶xKµ1¶qLqä1¶q†µC¶Ü•Z€’f¸šV’fWZ1’wqyHpfTcryHúTgrgKYTh=/_T‡Ü¡ÊTÖozpšsTxpfýTmÑKVTr†WHTzN•KTt‡LY’eRrжr†SN’j¸QZ¼cKouL—srŠoöY¼äŠÕLTÄŠ†YTuSW6TxRU=Tz€¡KTäÔW¡TyÓWY’q€Þ@¶fLqÜC¶yWVR—mtlvqÄšÉbpepc_ÉcúÞ¢ÉboÜúšÉeoxËËÛüoiÕËÉüryKraÉgoaHra¨ˆnÜ@rbÛÖnÖ@rbÛhRCoöÛtse€pbÛxrÜ@paÛÖsa@paÉölÖC°ÛrKQ•ÉuqyUWÛüÓŠU¨0ox†Q•ÉdË•WÉyow=°Éklb»Ûäuo=@&‹c=º&‹b=/@&‹d@¹&‹bÏ&‹v"êù†@CŒÖP@CŒÄ~éøL1JŒäK1@Œä/1@Œz/J@ø6@1‰Šs="‰gÚÎd%h1è÷J¹õCÙõRH6õN¹çC==çRH6æR»æC¹æR"Kæ€Ù«R@6ùowè‰gC/=÷R=6÷Q/L÷Z=Kç_H~÷°6U‰gÔ/†‰dŠH~æàL«‡"†G0nsÕ16Œü_@†ùàK«R«Ï«ÏŒwpf:"ø1ôŒüS@PŒÄ°:†ŒÖš"†ŒÖZ:=ŒÖV"L«Qó«Q"LŒzog1"ŒüJ@6ŒzQNLŒwQJ6ŒäN:/øR1KŒÄZ"L«Š"Y«Š"L«Z"Kù_@~ù_"K«_"~«Zó«N«NóG0sÄuüåç66:÷6Øõ6؉d=/@ç¹"ç"‰ÐõZ/YçŠ/Lõ€«Ï«þ/:õ6åæ6ØæKê«LêŒÖ6:@Œü=éŒÄ6ºøLJJ‰iR=Îd%g:=Îd%j1L/‰iJ//çJ//÷ôÎd#zY/1‰dKØæ6å«Kê«KåŒÖ=:@ø/1@øØ"Œüé/ŒüãÎd#ÖJ»ùNÚùN»«ò‰dôÎd%zVÍ–f»"–i/Kñk=Kði==ñg==ðfèÌeK/ñgL6J–hL=ñhL6J–jYKC–jP6C–h†=ÌiLKÌg~HJ–dK/ðg/6ðh/=ðh/6ðgèÌgK6ñiK6ÌlK~ñmKKÌhK/ñhKKÌk6KðkLKC–j†6Ìg†/C–dYHJ–f~6ÌfLHÌc†HC–b†ê…ˆ†"C…0kphÜ"N…ˆ†å…ˆU"V…ˆ¸"€…#ÜW@J…#ÜR"U…ˆš"K…0voxr1K¥öZ:L¥ÄQ@6¥Ä€:6¥üJ:"¥ö:1/¥öãâe#ÿÚ¥ÄN:=¥Öò„ˆÏ£eJè£gC/=£e1ͣУdôâe%e1¹£bÏ£lVͣУÐͣЄˆC»£bNÙ£cC¹£cJ¹£f:6"£hK=C£gL=@£fK/J£d~H1£eL=1£fK/:£d6Ø£c6Ø£f66:£eKê¥ü=J"¥ä6:J¥z~C1¥yL11¥üKº¥ÖL@J¥ÖLº¥Ö6º¥Ö6º¥Ä6é¥ü6é¥üL:J¥äLJ:¥äK:1¥öKㄈV¹œbC»ïN»ïòœbJ¹œbC»ïò¯ö1Cât#zº"¯öJ16¯öC:ât#üéâtˆ@Íœgó"œg"î:=/î1/ât%fô/œhN66îRÙœbN»ïòœÐÍïºât#ÖÍ1œeL61îKØœdè:œg=6@œg//@œb6@1¯wýJ¯tYJC¯z†11¯äKã¯ü@Ú¯ÖR@6¯ÿ:"¯Ö:ïÏœbJ¹œcCÙœeC=/œdÏœdN=6¯ÖCCât#u/R1¯wKã¯ä=1@¯üK@J¯ÄLé¯Ä6º¯Ü6åï6åœc/Íîô=œiNK=œhC//œgN66î€H6œcN¹œcCÙœcNÙîCèœeϯvpa1ÈIüJÚ¿ÿ:ÈIüã/¿ö11ÈIöéÈIÿÚ¿üJ1ÈIÜ:/È‹fÚ"±gÚÈ‹g:=È‹d1±c1/È‹fô/±eNH6±dC/È‹c1±d:="±f@/È‹eC/6±fJ="±eKHC±cPHC±c~رe6=:±fè:±e/ͱf»"¿ÜHJ@¿v6R1¿wKã¿ä/1"¿yKCC¿ä~º¿Ö6º¿Ü"›jˆNó›jˆ€ó±e€66±gN//±dJ¹¿ü/CJ¿äLº±gHNív"Cíy@1Îb#öºíöêíöºÎb#üºíöêíä/ã×ä/1íöå"ÇŠm¹§ˆR@KÇbV/6Çc€óÇbRÙÇbV"L§ˆV»ÇdR=6ÇdR»ÇcN/=ÇdNÙÇfN6=Çeò×r•:6…#ÖN…ˆÏ…#Ä11Îa#ÿ»…#ÿ1Îa#üJÚ…#Üò…0kyhÄK"Mk%h@/HMk%dÅÍ4k%ruoáÕbKY¾%i_==¾%fN/=¾%dC¹áwHC:áw6C:áäK@1áö~JJáäK:@¾%oV1JáxKN@áu=N:¾0Ü%a0p0q00!q!¸Öqc29pÄqbqd3Epü3803qf&dpÜj#qepöpä3Dqg2Fpwqkqhqn;,pvqjpuBtpxqlqm4,pzqi4-AIBe&apyqo0"G%qpj%G#35M-;-37Aept…%;!j0qq02X%"/M,p!psqr„%pq„#”#&b&fŽ-prGˆOIO,“-X#qs›‹!oA™quqw—oO™ppH/@:"=—r39½k›I”0pmO-“,pn!r§%Ÿ2¨%qvqz1–/"Ÿ0Jc:po`wqxqtpl§#H:H=@=¨#A‹qü·oS"¾#Ÿ31:":‰b‰e6/::"133P""לfXˆ@–:–C"61=‰c‰fŒöŒÜpdMÆ~VpkÄJ9D 39wÜsöqnE0pmlhijkfärbaeztugÖocxyvüdÄD72F85

    lg
    Mars

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™