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

  • Leere Elemente aus einem (Ergebnis) Array löschen

    • Mars
    • 26. Februar 2013 um 15:52
    Zitat von autoBert


    und da:

    ist es für diesen Fall unbrauchbar.

    Zum Zeitpunkt meines Posts stand im Thread noch nichts von 2D Arrays.
    Edit: Oder ich habs überlesen. Normalerweise biete ich keine Lösungen an die nicht funktionieren.

  • Leere Elemente aus einem (Ergebnis) Array löschen

    • Mars
    • 26. Februar 2013 um 10:35

    Hab dafür grade mal eine Funktion gebastelt (obwohl ich sicher bin, dass es sowas schon irgendwo geben muss).
    Ist auf Tempo ausgelegt und braucht kein Include. Läuft aber nur mit 1D Arrays.

    Skript
    [autoit]

    ; Wird nur für _ArrayDisplay gebraucht.
    #include <Array.au3>

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

    Global $a[10]

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

    For $i = 0 To 9 Step 1
    $a[Random(0, 9, 1)] += Random(1, 5, 1)
    Next

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

    _ArrayDisplay($a)

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

    _ArrayDeleteEmpty($a)

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

    _ArrayDisplay($a)

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

    Func _ArrayDeleteEmpty(ByRef $a)
    Local $u = UBound($a) - 1
    For $i = $u To 0 Step -1
    If Not $a[$i] Then
    For $e = $i To $u - 1 Step 1
    $a[$e] = $a[$e + 1]
    Next
    $u -= 1
    EndIf
    Next
    ReDim $a[$u + 1]
    EndFunc

    [/autoit]

    Edit: Mit ArraySearch und ArrayDelete würde das min. 10x so lange dauern...
    lg
    Mars

  • Minecraft-Server-Editor v2.0.3

    • Mars
    • 25. Februar 2013 um 20:13

    Ich habs auch getestet und alles was über eine Combo läuft funktioniert nicht.
    Die InputFelder laufen, weil ein GuiCtrlread eingebaut ist.
    Völlige Funktion kann ich nicht bestätigen.

  • Minecraft-Server-Editor v2.0.3

    • Mars
    • 25. Februar 2013 um 16:38

    Ich weiß nicht warum, aber ich hatte grade "Lust".
    Das Tool läuft nicht, weil die Savefunktion fehlt. (Die bau ich noch ein irgendwann^^).
    Die Texte hab ich einfach kopiert. Keine Ahnung ob die stimmen.

    &quot;44 Zeilen voller Überblick ;)&quot;
    [autoit]

    Global $aText[56] = ['MC-Server-Editor', 'Basic', 'Additional 1', 'Additional 2', 'coded 4 AutoIt.de', 'Difficulty', 'Gamemode', 'Level-Name', 'Max-Players', 'Online Mode', 'PvP', 'Normal|Peaceful|Easy|Hard', 'Survival|Creative|Adventure', 'world', '10', 'True|False', 'Enabled|Disabled', 'Flying', 'Nether', 'Structures', 'Seed', 'Type', 'White-List', 'Disabled|Enabled', 'Enabled|Disabled', 'Enabled|Disabled', 'autoit.de', 'Default|Flat|Largebiomes', 'Disabled|Enabled', 'Quarry', 'Gen.Settings', 'Description', 'Server-IP', 'Server-Port', 'Snooper', 'Enabled|Disabled', '', '', '', '25565', 'Disabled|Enabled', 'Spawn Animals', 'Spawn Monsters', 'Spawn NPCs', 'Texturepack', 'View-Distance', 'Command-Block', 'Enabled|Disabled', 'Enabled|Disabled', 'Enabled|Disabled', '', '10', 'Enabled|Disabled', 'Additional 3', 'Additional 4', 'Exit/Save'], $hGUI, $aLabel[24], $aInput[24], $btnSave, $iTmp

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

    $hGUI = GUICreate($aText[0], 375, 380)
    GUISetBkColor(0xB0B0B0, $hGUI)
    For $i = 0 To 5 Step 1
    For $q = 0 To 1 Step 1
    If $i < 2 Then GUICtrlCreateGroup($aText[1 + $i + 52 * $q], 185 * $i + 5, 175 * $q + 5, 180, 165)
    For $o = 0 To 1 Step 1
    $aLabel[$i + 6 * $o + $q * 12] = GUICtrlCreateLabel($aText[$i + 5 + 12 * $o + 24 * $q] & ':', 185 * $o + 15, 175 * $q + 25 + 24 * $i, 85)
    $aInput[$i + 6 * $o + $q * 12] = GUICtrlCreateCombo(First($aText[11 + $i + 12 * $o + 24 * $q]), 185 * $o + 100, 175 * $q + 21 + 24 * $i, 78)
    If StringInStr($aText[11 + $i + 12 * $o + 24 * $q], '|') Then GUICtrlSetData(-1, TrimFirst($aText[11 + $i + 12 * $o + 24 * $q]))
    If $i < 5 Then $iTmp = GUICtrlCreateLabel('', 185 * $o + 15, 175 * $q + 43 + 24 * $i, 160, 1) + GUICtrlSetBkColor(-1, 0xCCCCCC)
    Next
    Next
    Next
    $btnSave = GUICtrlCreateButton($aText[55], 147, 350, 80, 25)
    GUISetState(@SW_SHOW)

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

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btnSave
    _Save()
    EndSwitch
    WEnd

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

    Func _Save()
    Exit
    EndFunc ;==>_Save

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

    Func First($a)
    Local $b = StringSplit($a, '|', 2)
    If Not @error Then Return $b[0]
    Return $a
    EndFunc ;==>First

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

    Func TrimFirst($a)
    Local $b = StringSplit($a, '|', 2), $c = ''
    For $i = 1 To UBound($b) - 1 Step 1
    $c &= $b[$i] & '|'
    Next
    Return StringTrimRight($c, 1)
    EndFunc ;==>TrimFirst

    [/autoit]
  • Über die String-Dekompression

    • Mars
    • 20. Februar 2013 um 22:13

    Eine "Zufällige" Kompression habe ich auch schonmal angetestet.
    Allerdings kam ich da nie zu einem fertigen Skript. Vorher hat das Tempo verhindert, dass man es wirklich an ein paar KB testen konnte.

    nochmal zum Ersetzen: Die 3 ist wahrscheinlich ungünstig, es kommt halt immer darauf an was man komprimiert.
    z.B. bei 24 Bit Bitmaps sind 6er sehr häufig, bei 32ern (gibt's häufiger) kann zu Beginn ein Paar Durchläufe mit 8ern machen um die Häufigen Farben schonmal kleinzubekommen.

    Bei Text wie z.B. diesem Beitrag" Kommen auch einige Wörter/Zeichenkombinationen mehrfach vor. Mit anfänglichen 16Byte Tests macht man idr nichts verkehrt. Im Späteren Kompressionsverlauf sind natürlich alle großen Kombinationen überflüssig. Nach dem 20ten Durchlauf wird man keinen einzigen 16er mehr finden.

    Optimal wäre glaube ich eine breite Fächerung zu Beginn (Maximalwert abhängig von einer anfänglichen Redundanzanalyse) die direkt stark abnimmt, bis man bei Runde X nur noch 2er benutzt.

    Edit: Wenn bei mir die Klausuren rum sind bastele ich mal ein schönes Skript. Dann schauen wir mal wie 7Zip aussieht :D

  • Über die String-Dekompression

    • Mars
    • 20. Februar 2013 um 20:18

    Somit wäre die Methode meiner Ersetzungskompression sehr ähnlich, aber wesentlich schneller.
    Jetzt noch Kombinationen mit 2, 3, n Bytes rein und die Kompression steigt nochmal an. Einpackzeit wird sich verhunderttausendfachen, Auspackzeit bleibt gleich.
    Bsp:
    Ersetzungen: 2, 2, 2, 2, 2, usw -> Komp (60%)
    Ersetzungen: 3, 2, 2, 2, 2, usw -> Komp (65%)
    ...
    Ersetzungen n, n, n, n, n, usw -> Komp (5%)
    Jetzt nach Effizienz sortieren und den Besten anwenden.

  • If...Then Mehrere Statements per Zeile

    • Mars
    • 15. Februar 2013 um 23:23

    Habt ihr überhaupt keine Fantasie ?
    Das ist total einfach, aber unschön. (bei Assign, Variante 2 ist besser)

    [autoit]

    Global $iDummy
    Global $a, $b, $c

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

    If 6 > 5 Then $iDummy = Assign('a', 12345) + Assign('b', 'Penner') + Assign('c', 0xFF00FF)

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

    ConsoleWrite($iDummy & @CRLF)
    ConsoleWrite($a & @CRLF)
    ConsoleWrite($b & @CRLF)
    ConsoleWrite($c & @CRLF & @CRLF)

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

    ; Edit nach 1 Min
    If Not ('Tobi' == 'tobi') Then Zuweisen3x($a, 'Ich bin Variable 1', $b, 'Team Rocket so schnell wie das Licht', $c, 'Gib lieber auf und bekämpft uns nicht !')

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

    ConsoleWrite($a & @CRLF)
    ConsoleWrite($b & @CRLF)
    ConsoleWrite($c & @CRLF)

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

    Func Zuweisen3x(ByRef $a, $a_, ByRef $b, $b_, ByRef $c, $c_)
    $a = $a_
    $b = $b_
    $c = $c_
    EndFunc

    [/autoit]

    Man kann so viel man will zuweisen.
    Weils so schön ist, ist mir in 1 Min noch eine leichte Methode eingefallen.
    Bisschen überlegen vorher bitte :(

    Edit 2:
    Und wenns um Continueloop geht gibts natürlich auch eine Möglichkeit.
    ContinueLoop hat einen Level. also Continueloop 5 z.B.
    Als Statement für diesen Level kann ich 1 + 0 * Was auch immer, da es eh zu 0 wird benutzen.
    .
    .
    Lg

  • Hide my Stuff

    • Mars
    • 11. Februar 2013 um 21:16

    Wieso ist mehrfache Verschlüsselung ein Bug ?
    Ich kann doch auch 5x eine WinRar Kompression auf einen Ordner anwenden.

  • Über die String-Dekompression

    • Mars
    • 11. Februar 2013 um 12:09

    Meine Methode hat ein Problem mit Chr(0). Wenn dieses Zeichen im zu komprimierenden String vorkommt gibts Probleme.
    Für so große Dateien muss man die Funktion gesplittet anwenden. Dafür kann ich auch noch ein Skript basteln. Ich lass die autoit.exe bei mir einfach mal durchnudeln wenn ich daheim bin.

  • Über die String-Dekompression

    • Mars
    • 11. Februar 2013 um 00:20

    Moin. Genau für dieses Problem hatte ich schonmal ein Skript geschrieben.
    Die Auspackgeschwindigkeit ist dabei extrem flott. (wenige ms im Regelfall). Das Einpacken dauert aber ziemlich lange (es wird viel vergleichen um die zu ersetzenden Strings zu finden).

    Dabei habe ich gemerkt, dass Andys methode seltsame Zeichen einstreut die meine Methode beim 2ten Durchgang ziemlich den Wind aus den Segeln nimmt. Sämtliche seltenen Zeichen behindern das Ersetzungsprinzip und müssen gesondert gespeichtert werden damit die Dekompression klappt.

    Zusammen kommts bei mir beim TestString auf 29%
    Meine Methode alleine packt 30%
    Ich bin mir sicher, dass eine Modifikation von Andys Methode das Resultat unter 25% bringen kann.

    Bei mir lässt sich glaube ich nicht mehr viel rausholen ohne extremen Rechenaufwand. (Durchprobiert werden nur 2er Paare. Man kann das auch auf 3, 4, n ausweiten. Dann muss man aber die Permutationen berücksichtigen was den Rechenaufwand ins unermessliche steigen lässt. Das habe ich auch schonmal getestet. Bringt im Schnitt ca. 10% (also 27 statt 30 bei hundertfachem Aufwand^^))

    Spoiler anzeigen
    [autoit]


    _Test()

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

    Func _Test()
    Local Static $sTest = "67B666666B76000000000000000000056B66666666B650000000000000000056B666666666676500000000000000006676666666666766000000000000000566666666666666665000000000000006666666666666666660000000000000566666666666666666650000000000005666666666666667666500000000000056677676767676767665000000000000566B777777777777B665000000000000566B7B777777777BB665000000000000066BBB7B7B7BB7BBD650000000000000056BDBBBBBBBBBBD76500000000000000056BDDDBDBDBDDD660000000000000000366BEDDDDDDEB655000000000000000005567BDEEDB76550000000000000000000055666666550000000000000000000000005555550000000000000FFFFFFFFFFFE7FFFFFF81FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFE007FFFFE007FFFFE007FFFFC003FFFFC003FFFFC003FFFFC003FFFF8001FFFF0000FFFF0000FFFE00007FFE00007FFC00003FFC00003FFC00003FFC00003FFC00003FFE00007FFE00007FFF0000FFFF0000FFFF8001FFFFE007FFFFF81FFF00000000F26A0451000000000000010000000000800300009053040030010000B0040000000000002800000020000000400000000100010000000000000100000000000000000000000000000000000000000000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1FFFFFC3C7FFFC3FC1FF83FFC07FBFFFC1FFBFFFC7FFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFC1FFFBFC3DFFFBC3C1FFF83C3FFFFBC3FFFFF83FFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1FFFFFC007FFFC0001FF8000007F800001FF800007FF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF8003FFFF803FFFFF83FFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F26A0451000000000000010000000000D8040000E8540400E8020000B0040000000000002800000020000000400000000100040000000000800200000000000000000000000000000000000000000000"
    Local $sComp, $iTimer, $sDecomp

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

    ConsoleWrite('Kombination beider Methoden (Andys als Vorstufe):' & @CRLF)
    $iTimer = TimerInit()
    $sComp = _Comp($sTest)
    $iTimer = TimerDiff($iTimer)
    ConsoleWrite('!> Comp Beide: ' & Round(StringLen($sComp)/StringLen($sTest)*100,0) & '%' & @CRLF)
    ConsoleWrite('> CompTime: ' & Round($iTimer) & ' ms' & @CRLF)

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

    $iTimer = TimerInit()
    $sDecomp = _Decomp($sComp)
    $iTimer = TimerDiff($iTimer)
    ConsoleWrite('> DecompTime: ' & Round($iTimer) & ' ms' & @CRLF)

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

    If Not ($sDecomp == $sTest) Then
    ConsoleWrite('! Error' & @CRLF)
    ConsoleWrite($sDecomp & @CRLF)
    EndIf

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

    ConsoleWrite(@CRLF & 'Methode von Mars ohne Vorstufe:' & @CRLF)
    $iTimer = TimerInit()
    $sComp = _Ersetzung_Comp($sTest)
    $iTimer = TimerDiff($iTimer)
    ConsoleWrite('!> Comp Mars: ' & Round(StringLen($sComp)/StringLen($sTest)*100,0) & '%' & @CRLF)
    ConsoleWrite('> CompTime: ' & Round($iTimer) & ' ms' & @CRLF)

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

    $iTimer = TimerInit()
    $sDecomp = _Ersetzung_DeComp($sComp)
    $iTimer = TimerDiff($iTimer)
    ConsoleWrite('> DecompTime: ' & Round($iTimer) & ' ms' & @CRLF)

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

    If Not ($sDecomp == $sTest) Then
    ConsoleWrite('! Error' & @CRLF)
    ConsoleWrite($sDecomp & @CRLF)
    EndIf

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

    ConsoleWrite(@CRLF)

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

    EndFunc

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

    Func _Comp($sInput)
    Local $s = StringReplace(_CompAndy($sInput), Chr(0), '[NULL]', 0, 1), $l = StringLen($s)
    ;ConsoleWrite($s & @CRLF)
    $s = _Ersetzung_Comp($s)
    ConsoleWrite('!> Comp Mars: ' & Round(StringLen($s)/$l*100,0) & '%' & @CRLF)
    Return $s
    EndFunc

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

    Func _Decomp($sInput)
    Local $s = StringReplace(_Ersetzung_DeComp($sInput), '[NULL]', Chr(0), 0, 1)
    $s = _DecompAndy($s)

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

    Return $s
    EndFunc

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

    Func _CompAndy($string)
    $len = StringLen($string)
    $ret = ""
    $p = 0
    For $i = 1 To $len ;kompletten string durchlaufen
    $aktuell = StringMid($string, $i, 1) ;aktuelles token
    $anz = 1 ;anzahl gleicher token
    For $a = $i + 1 To $i + 54 ;kommt es mehrfach vor?
    If StringMid($string, $a, 1) = $aktuell And $a <= $len Then ;kommt mehrfach vor
    $anz += 1
    Else
    $i = $a - 1 ;nicht mehrfach
    ExitLoop ;nächstes token
    EndIf
    Next

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

    If $anz > 2 Then ;mehr als 2 gleiche token gefunden
    $ret &= $aktuell & Chr(70 + $anz) ;anzahl hinter token hängen
    $i = $a - 1
    ElseIf $anz = 2 Then
    If Asc($aktuell) < 56 Then ;bit 0-3 und 5-7 nehmen eine doppelte zahl auf
    $ret &= Chr((Asc($aktuell) - 48) * 17 + 127)
    Else
    $ret &= $aktuell & $aktuell
    EndIf
    Else
    $ret &= $aktuell ;nur einmal vorkommenden buchstaben anhängen
    EndIf
    Next
    $Perc = Round(StringLen($ret) / $len * 100)
    ConsoleWrite("!> Comp Andy: " & $Perc & "%" & @CRLF)

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

    Return $ret
    EndFunc ;==>compbin

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

    Func _DecompAndy($string)
    $ret = ""
    $len = StringLen($string)
    For $i = 1 To $len
    $decomp = StringMid($string, $i, 1);aktueller buchstabe ;
    $token = Asc($decomp) ;aktuelles token
    If $token >= 127 Then ;doppelte 0-7?
    $decomp = Chr((($token - 127) / 17) + 48);magic numbers FTW^^
    $decomp &= $decomp
    ElseIf $token > 70 Then ;komprimiertes Zeichen?
    $token -= 70 ;länge
    $akt = StringMid($string, $i - 1, 1) ;aktueller zu vervielfältigende buchstabe
    $decomp = ""
    For $a = 1 To $token - 1
    $decomp &= $akt
    Next
    Else
    $decomp = StringMid($string, $i, 1) ;einfache Ziffer/Buchstabe
    EndIf
    $ret &= $decomp

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

    Next
    Return $ret

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

    EndFunc

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

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

    [/autoit]
  • [unfertig] Autocorrect Edit

    • Mars
    • 7. Februar 2013 um 00:53

    Moin,

    Hab durch irgendeinen Post hier den ich nicht mehr finde ein einzeiliges Control gesehen welches automatische Vervollständigung (aber nur bei korrekter Eingabe) besaß.

    Das geht auch mit einem kompletten Editfeld.
    Leider steckt das Teil noch bis zum Rand voll mit Bugs.
    Die meisten sollten sich aber relativ leicht beheben lassen.

    Zum ausprobieren hier mal ein Beispiel. (Bugs und Wünsche dürfen geäußert werden)
    Die Datenbank wurde mit GDI+ Befehlen gefüttert.
    Durch die Vervollständigung reicht nun die Eingabe von "fillRect" ("fllr" reicht auch schon^^) aus, um per "Return" ein _GDIPlus_GraphicsFillRect daraus zu machen.

    lg
    Mars

    Dateien

    IntelliSenseEdit.zip 4,68 kB – 339 Downloads
  • Happy Glückwunsch Andy zum 47'ten

    • Mars
    • 4. Februar 2013 um 18:57

    Normalerweise gratuliere ich nie im Netz...
    Alles Gute, viel Bier, viel Spaß !

  • VSync per WinAPI ?

    • Mars
    • 4. Februar 2013 um 14:57

    Hmm... Hab jetzt mal was wirklich primitives getestet und siehe da: Ohne Offset läufts auch (komischerweise)
    Es wird jetzt per Timer alle x ms die Funktion ausgeführt. Nachteil ist die Hohe Schleifenfrequenz. Das kann man aber mit einem kleinen Trick umgehen.
    Offseteinstellung über die Pfeiltasten. Scheint aber ohne wirkung zu sein, was mich überrascht...

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    Opt('GUIOnEventMode', 1)
    Opt('MustDeclareVars', 1)
    Opt('GUICloseOnESC', 0)

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

    Global Const $iFPS = 60
    Global Const $iW = 600, $iH = 480
    Global Const $sTitel = 'Test', $iSpeed = 5

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

    Global $hGUI, $hIMG, $hDC, $hGFX, $hBUF, $hBRU

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

    Global $vSyncTimer = TimerInit(), $vSyncOffset = 0, $vSyncTemp = 0, $vSyncDiff = 1000/$iFPS

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

    _GDIPlus_Startup()

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

    $hGUI = GUICreate($sTitel, $iW, $iH)
    $hIMG = _Image_Create($iW, $iH)
    $hBUF = DllStructGetData($hIMG, 1)
    $hDC = _WinAPI_GetDC($hGUI)
    $hGFX = _GDIPlus_GraphicsCreateFromHDC($hBUF)
    $hBRU = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)

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

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

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

    While 1
    If TimerDiff($vSyncTimer) > $vSyncTemp + $vSyncOffset Then
    $vSyncTemp += $vSyncDiff
    _GDIPlus_GraphicsClear($hGFX, 0xFF000000)
    _Rect()
    WM_PAINT()
    ToolTip($vSyncOffset)
    If _IsPressed('26') Then $vSyncOffset += 0.1
    If _IsPressed('28') Then $vSyncOffset -= 0.1
    If $vSyncOffset > $vSyncDiff Then $vSyncOffset -= $vSyncDiff
    If $vSyncOffset < 0 Then $vSyncOffset += $vSyncDiff
    EndIf

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

    WEnd

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

    Func _Rect()
    Local Static $x = 0, $y = 100
    $x += $iSpeed * 60 / $iFPS
    If $x > $iW Then
    $x -= $iW + 64
    $y = Random(0, $iH - 64, 1)
    EndIf
    _GDIPlus_GraphicsFillRect($hGFX, $x, $y, 64, 64, $hBRU)
    EndFunc

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

    Func FPS($W)
    Local Static $1 = TimerInit(), $2, $3
    Local $s = TimerDiff($1)
    $2 += (1000 / $W - $s)
    $3 = TimerInit()
    If $2 > 0 Then Sleep($2)
    $2 -= TimerDiff($3)
    $1 = TimerInit()
    Return True
    EndFunc ;==>_Sleep

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

    Func WM_PAINT()
    Local Static $nFPS = 0, $iTimer = TimerInit()
    $nFPS += 1
    If TimerDiff($iTimer) > 1000 Then
    WinSetTitle($hGUI, '', $sTitel & ' FPS: ' & $nFPS)
    $iTimer = TimerInit()
    $nFPS = 0
    EndIf
    ;~ _WinAPI_RedrawWindow($hGUI)
    _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hBUF, 0, 0, 0xCC0020)

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

    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _Freigeben()
    _GDIPlus_BrushDispose($hBRU)
    _GDIPlus_GraphicsDispose($hGFX)
    _Image_Delete($hIMG)
    _GDIPlus_Shutdown()
    EndFunc

    [/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]


    Edit: Alle 1-2 Sekunden Ruckeln aber dennoch 1-2 Frames.
    Wie komme ich an die exakte Frequenz des Bildschirms ? 60 scheint es nicht zu sein...

  • CityMark 0.1 - OpenGL 3D Benchmark

    • Mars
    • 4. Februar 2013 um 13:58
    Zitat von chip

    Hast ja gelesen Alizame liegt nicht am Script sondern an mir bzw. jetzt auch an dir.

    Der Kommentar hat meinen Tag verschönert :D
    [Blockierte Grafik: http://i.imgur.com/E1PCvpc.png]

  • Wie sieht euer Desktop aus?

    • Mars
    • 29. Januar 2013 um 22:32
    Zitat von Oscar

    Mars: Dein Hintergrundbild erinnert mich an "Per Anhalter durch die Galaxis". Versuchst Du genügend Ningi zusammen zu bekommen um sie in einen Pu eintauschen zu können? :D

    Was die vielen Icons betrifft: Das würde mich wahnsinnig machen. :rolleyes:

    Um erstmal herauszufinden was Ningi und Pu sind musste ich doch glatt den Film gucken^^
    Ich hab jetzt die Unordnung erkannt und gebannt. Es sieht aus wie ein leeres Zimmer ohne Tapete und Möbel :(

  • Wie sieht euer Desktop aus?

    • Mars
    • 29. Januar 2013 um 16:29
    Zitat von letsgo

    Hier ist meiner.
    So, liebe Kinder, sieht ein Desktop aus, der nie aufgeräumt wird :P

    Spoiler anzeigen

    [Blockierte Grafik: http://s1.directupload.net/images/130108/vvsg3nsf.png]

    Soviel dazu^^

    Spoiler anzeigen

    [Blockierte Grafik: http://i.imgur.com/aEt6KZ2.png]

  • #RequireAdmin schießt Skript ab

    • Mars
    • 29. Januar 2013 um 11:36
    Zitat

    Führe ich mein Skript mit #RequireAdmin aus

    Dann musst du dem Skript auch Adminrechte geben, sonst startet es nicht.

  • GGEngine + UDF [UPDATE 15.2.13]

    • Mars
    • 27. Januar 2013 um 12:00

    Das liegt bestimmt an der hohen Größe der Dll.
    Wenn du die Dll mit UPX kleinmachst (param --ultra-brute) kommt der Spaß bei mir auf 116kb (ca. 1/4)
    Vllt anschließend nochmal versuchen das binär einzubinden. Wenns dann noch laggt müsstest du es in ein Include (welches nur die Res enthält) auslagern.
    Irgendwie in den Code einbauen solltest du es aber schon. Eine Dll die zusätzlich benötigt wird ist immer ein Klotz am Bein.

  • GGEngine + UDF [UPDATE 15.2.13]

    • Mars
    • 26. Januar 2013 um 18:16

    Interessant. Das verfolgt ähnlich aber gleichzeitig völlig unterschiedliche Ansätze wie meine (im Bau befindliche) M2D (Mars 2D) UDF.
    Ich werde mir auf jeden Fall alles durchlesen und mal schauen welche "Redewndungen" in meiner UDF Gebrauch finden könnten. (du wirst dann natürlich erwähnt).

  • Zeilen überspringen möglich?

    • Mars
    • 23. Januar 2013 um 23:46

    Um das Problem zu verstehen braucht man entweder eine Kristallkugel (die hier villeicht manche besitzen, aber nicht mit den nötigen Magischen Fähigkeiten für die Benutzung ausgestattet sind) oder das vollständige Skript.

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™