1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • ListView mit LV_Format_include.au3

    • BugFix
    • 27. August 2014 um 22:55
    Zitat von bordermax

    die Spalten per Maus verändere ändert sich plötzlich die Schriftgröße in der kompletten Spalte


    Stimmt, das ist normal. :whistling:

    Edit: Hab gerade mal getestet - ich kann das nicht reproduzieren. Bei mir bleiben alle gesetzten Informationen erhalten.

  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 27. August 2014 um 20:54

    8o
    Ich habe eine Möglichkeit gefunden, wie man automatisches Einrücken lösen kann ohne Preference-Datei (die habe ich nämlich nicht ans Laufen bekommen und im Sublime-Forum hat auch keiner eine Ahnung davon).
    Ich habe jetzt das Indent an die Entertaste gekoppelt. Das bedeutet dann aber auch, dass man für Autovervollständigung IMMER die Tab-Taste nehmen muss. Ist aber nur Gewöhnungssache.

    Edit 28.08.2014: Damit nach einzeiligem If-Then nicht eingerückt wird, muss "then$" im Pattern stehen.

    In <Preferences> <Key Bindings - User> bitte folgendes einfügen:

    Code
    [
        ...,
        { "keys": ["enter"], "command": "insert", "args": {"characters": "\n\t"}, "context":
            [
                { "key": "setting.auto_indent", "operator": "equal", "operand": true },
                { "key": "preceding_text", "operator": "regex_contains", "operand": "(?i:case|do|for|func|then$|else|elseif|while|select|switch|with)", "match_all": true },
                { "key": "selector", "operator": "equal", "operand": "source.autoit" }
            ]
        },
        ...
  • String nach 30 Zeichen splitten?

    • BugFix
    • 27. August 2014 um 18:29
    Zitat von Oscar

    wenn das Leerzeichen erst nach den 30 Zeichen kommt


    Das ist dann mal echt doof :D

    Da machen wir dann einen Zwangsumbruch bei 30 ;)

    [autoit]

    $a = StringRegExp($s, '(\b.{1,30}\b|.{0,30})', 3)

    [/autoit]
  • String nach 30 Zeichen splitten?

    • BugFix
    • 27. August 2014 um 18:14

    Einfach mit Word-Boundary splitten.

    [autoit]

    $s = "hallo das ist ein test. hier geht es noch weiter und das ist noch lange nicht alles."

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

    $a = StringRegExp($s, '(\b.{1,30}\b|.)', 3)
    For $x In $a
    ConsoleWrite($x & @LF)
    Next

    [/autoit]

    Edit: Um abschließende Satzzeichen zu erkennen (die gelten nicht als zum Wort gehörend, muss "oder jedes Zeichen einmal ("|.") mit abgefragt werden.

  • Vollständigen Pfad einer Datei in ein Array einlesen

    • BugFix
    • 27. August 2014 um 14:24

    Klick einfach mal auf den folgenden Befehl

    [autoit]

    _PathSplit

    [/autoit]
  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 26. August 2014 um 14:31

    Ich habe jetzt auch eine Lösung zum Auslesen von
    - GUIControlStyles und
    - WindowMessageCodes
    gefunden.
    Weiterhin entkoppele ich jetzt alle Funktionen von irgendwelchen Abfragen auf SciTE oder SciTE.properties. Denn wer ST nutzt, möchte ja nicht unbedingt auch SciTE installieren bzw. aktuell halten.

    Die nächste Paket-Version meines Wrappers wird ausschliesslich auf der AutoIt-Installation aufsetzen.
    Der nächste Punkt auf meiner ToDo-List ist dann: ManageIncludes für ST - vergleichbar mit OrganizeIncludes aber mangels grafischer Oberfläche über Menü, Hotkey und Input-Panel gesteuert. Im jetzigen AutoItscript-Package ist ein Include-Helper enthalten. Ich nehme an, der soll ähnlich wie OI arbeiten - nun bei mir tut das Teil nichts(vllt. habe ich meine Version auch schon zu sehr "verpimpt"), insofern baue ich mir dann selber etwas, was so läuft, wie ich es will. ;)

    Wenn noch weitere Wünsche bestehen: Einfach posten.
    (Solche Dinge wie: Debug2MsgBox, Debug2Console etc. werden auch nach und nach eingebunden)

  • Autoit Backup Ordner

    • BugFix
    • 25. August 2014 um 20:10
    Zitat von Tweaky

    AutoIndent bzw. AutoCompletion


    Diese Tools sind in der AutoItTools.lua enthalten, die bei SciTE4AutoIt installiert wird. Brauchst du auch nicht extra aktivieren, läuft standardmäßig. Beide werden dabei über die propertie-Datei geregelt.

    au3.properties
    Code
    autocomplete.au3.ignorecase=1
    autocomplete.au3.start.characters=$(chars.alpha)$(chars.numeric)$_@#
    word.characters.$(au3)=$(chars.alpha)$(chars.numeric)$(chars.accented).$_@#
    # Auto indent stuff
    #~ indent.size.$(au3)=4
    statement.indent.$(au3)=
    statement.end.$(au3)=
    statement.lookback.$(au3)=
    block.start.$(au3)=5 case if do for func else elseif while select switch with\
                        Case If Do For Func Else ElseIf While Select Switch With\
                        CASE IF DO FOR FUNC ELSE ELSEIF WHILE SELECT SWITCH WITH
    block.end.$(au3)=5 case else endif elseif endfunc endselect endswitch next until wend endwith\
    				  Case Else EndIf ElseIf EndFunc EndSelect EndSwitch Next Until Wend WEnd EndWith\
                      CASE ELSE ENDIF ELSEIF ENDFUNC ENDSELECT ENDSWITCH NEXT UNTIL WEND ENDWITH
    Alles anzeigen
  • Autoit Backup Ordner

    • BugFix
    • 25. August 2014 um 18:44

    Was macht Tidy:
    • Einzüge korrekt ausrichten -- das macht AutoIndent
    • Funktionsnamen, Keywords etc. in Propercase wandeln, falls klein geschrieben -- das macht AutoCompletion
    • Standardisierte Schreibweise für Variablen wie in erstmaliger Deklaration -- ebenfalls AutoCompletion
    • Leerzeichen Hinzufügen/Entfernen bei Funktionsaufrufen/Parametern -- sowas wird sauber per Hand codiert
    • Leere Zeilen entfernen -- um Himmels Willen, bloss nicht! Danach sieht das Skript aus, wie ein Spaghetti-Topf
    • Folgende Leerzeichen entfernen -- ist eine Standardoption von SciTE beim Speichern
    • Funktionsnamen anfügen an das Ende der Deklaration -- das ist in meinen PlugIns eh dabei
    • Code-Check auf z.B. fehlende EndIf/WEnd oder Funktionsdeklarationen innerhalb einer Schleife. -- dafür gibt es Au3Check
    • Sortieren aller Funktionsdeklarationen in alphabetischer Reihenfolge -- nee, nee, die Reihenfolge lege immer noch ich fest!

    So, was soll jetzt mich dazu veranlassen, dieses Tool zu nutzen? - Genau: Nichts! :thumbup:

  • TeamViewerPortable

    • BugFix
    • 25. August 2014 um 17:47
    Zitat von subzero007

    ich will für meinen bruder was vereinfachen ihm einen exe geben was von TeamViewerPortable ID und Kenwort ausliest und mir per mail verschickt damit ich ihm helfen kann.


    Nimm die einfache Variante: Er soll TV als Server installieren. Dann wird ein festes Kennwort bei der Installation vergeben und damit kannst du dich jederzeit einklinken.

  • If Input = active/clicked ?

    • BugFix
    • 25. August 2014 um 17:11
    Zitat von PainTain

    BugFix, es geht auch leichter/kürzer:


    Einfach kann jeder... :rofl:

  • If Input = active/clicked ?

    • BugFix
    • 25. August 2014 um 16:11

    Es geht, aber die MsgBox kannst du nicht direkt ausgeben, da die Auswertung von WindowsMessages nicht unterbrochen werden darf. Deshalb brauchst du Globale Hilfsvariablen:

    Spoiler anzeigen
    [autoit]

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

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

    Global $currentInput, $lastInput

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

    GUICreate("Test")
    $cInput1 = GUICtrlCreateInput("", 10, 30, 150)
    $cInput2 = GUICtrlCreateInput("", 10, 60, 150)
    $hInput1 = GUICtrlGetHandle($cInput1)
    $hInput2 = GUICtrlGetHandle($cInput2)

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

    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Do
    If $currentInput <> $lastInput Then
    $lastInput = $currentInput
    MsgBox(0, 'Input', 'aktuell: ' & $currentInput)
    EndIf
    Until GUIGetMsg() = -3

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $hInput1, $hInput2
    Local $sID = 'Input1'
    If $iIDFrom = $cInput2 Then $sID = 'Input2'
    Switch $iCode
    Case $EN_ALIGN_LTR_EC ; Sent when the user has changed the edit control direction to left-to-right

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

    Case $EN_ALIGN_RTL_EC ; Sent when the user has changed the edit control direction to right-to-left

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

    Case $EN_CHANGE ; Sent when the user has taken an action that may have altered text in an edit control
    ConsoleWrite('Inhalt geändert: ' & $sID & @LF)
    Case $EN_ERRSPACE ; Sent when an edit control cannot allocate enough memory to meet a specific request

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

    Case $EN_HSCROLL ; Sent when the user clicks an edit control's horizontal scroll bar

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

    Case $EN_KILLFOCUS ; Sent when an edit control loses the keyboard focus
    ConsoleWrite('Focus verloren: ' & $sID & @LF)
    Case $EN_MAXTEXT ; Sent when the current text insertion has exceeded the specified number of characters for the edit control

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

    ; This message is also sent when an edit control does not have the $ES_AUTOHSCROLL style and the number of characters to be
    ; inserted would exceed the width of the edit control.
    ; This message is also sent when an edit control does not have the $ES_AUTOVSCROLL style and the total number of lines resulting
    ; from a text insertion would exceed the height of the edit control
    Case $EN_SETFOCUS ; Sent when an edit control receives the keyboard focus
    ConsoleWrite('Focus erhalten: ' & $sID & @LF)
    $currentInput = $sID
    Case $EN_UPDATE ; Sent when an edit control is about to redraw itself

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

    Case $EN_VSCROLL ; Sent when the user clicks an edit control's vertical scroll bar or when the user scrolls the mouse wheel over the edit control

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

    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]
  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 25. August 2014 um 15:46

    So,
    jetzt habe ich die Erstellung der Autovervollständigungsdateien (re_build_completion_files) komplett neu gestaltet. Damit ist auch das Problem des CamelCase gelöst. 8o
    Ich lese die ".\SciTE\api\au3.api" aus und schreibe die Keywords, Makros und Direktiven in die "NoFuncs.sublime-completions".
    Die Funktionen werden mit Sprungmarken für den Cursor an allen Parametern versehen und in die "Au3api.sublime-completions" geschrieben. (Anspringen geht nach dem Einfügen immer mit TAB)
    Aus dem AutoIt-Include-Pfad werden alle Includes ausgelesen und in die "Includes.sublime-completions" geschrieben. Dasselbe passiert mit den User-Includes, sofern ein entsprechender Pfad in den Settings angegeben wurde. Von diesen User-Includes werden ausserdem alle darin erstellten Funktionen ausgelesen und wiederum mit Sprungmarken an den Parametern versehen in die "UserUdfs.sublime-completions" geschrieben.

    Im AutoItScript-Package sind noch folgende *.sublime-completions zu finden:
    - CompilerDirectives.sublime-completions --- die ist wenig nützlich, die Parameter sind für den AutoItWrapper von SciTE

    Die beiden folgenden Dateien beibehalten. Ich suche noch nach einer Möglichkeit, wie ich diese mit in die Erstellung einbeziehe.
    - GUIControlStyles.sublime-completions 
    - WindowMessageCodes.sublime-completions

    Dateien

    Wrapper_au3.zip 5,39 kB – 439 Downloads
  • Autoit Backup Ordner

    • BugFix
    • 25. August 2014 um 11:19

    Was für ein Schrott.
    Aber wozu sind wir "AutoIt'ler" :D
    einfach ein Löschskript an den Tidycall anhängen und es nervt nicht mehr. ;)
    Oder Tidy gar nicht nutzen - wozu braucht man das: SciTE hat AutoIndent, d.h. wenn man nicht die normale Struktur löscht, ist doch bereits alles im Lot. ;)

  • Autoit Backup Ordner

    • BugFix
    • 25. August 2014 um 10:16

    Das Problem ist hier, dass Tidy sowohl über die properties als auch über eine INI und zusätzlich mit Startparametern gesteuert werden kann.
    Und um es auf die Spitze zu treiben sind überall unterschiedliche Parameter... :wacko:

  • Autoit Backup Ordner

    • BugFix
    • 25. August 2014 um 08:56

    Wenn man Tidy nutzt, hat man dieses "unartige" Verhalten an der Backe :D
    Im Tidy-Ordner gibt es eine Muster-INI. Dort sind die Parameter aufgelistet. Von Interesse ist hier:
    * * * Keep x Version of the File before the Tidy run and optionally store them in SubDirectory "\Backup"
    KeepNVersions=5

    Also eine Tidy.INI erstellen und dort die Versionszahl auf "0" setzen. Die anderen Parameter würde ich mal alle mit übernehmen, da ich Tidy nicht nutze kann ich es nicht testen. So wie ich das verstehe, sollte es aber ein Backup unterbinden.

  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 24. August 2014 um 10:18

    In Post #48:
    - BugFix in Autovervollständigung Variablen
    - NEU: Datei für Autovervollständigung Keywords
    - NEU: alle Dateien für Autovervollständigung automatisch generieren

  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 23. August 2014 um 11:25

    Habe das jetzt fertig, die neuen commands sind:
    syntax_check_au3
    run_with_parameter
    re_build_completion_files
    An die Hotkeys eurer Wahl koppeln und fertig ;)
    Meine Keymap mal als Muster:

    Spoiler anzeigen
    Code
    [
        { "keys": ["ctrl+,"], "command": "show_panel", "args": {"panel": "console", "toggle": true} },
        { "keys": ["f1"], "command": "goto_documentation" },
        { "keys": ["f5"], "command": "autoitbuild"}, 
        { "keys": ["ctrl+f5"], "command": "syntax_check_au3" },
        { "keys": ["shift+f5"], "command": "run_with_parameter" },
        { "keys": ["f7"], "command": "compile_au3" },
        { "keys": ["f12"], "command": "wrapper_directives" }, 
        { "keys": ["ctrl+f12"], "command": "re_build_completion_files" },
        { "keys": ["ctrl+q"], "command": "toggle_comment", "args": { "block": false } },
        { "keys": ["ctrl+shift+q"], "command": "toggle_comment", "args": { "block": true } }
    ]
    Alles anzeigen

    Edit: So langsam komme ich in Fahrt :D
    Jetzt implementiert: Autocomplete von Variablen
    Dazu erforderlich, das Dollarzeichen aus der Liste der Worttrenner entfernen! Und damit auch Includes, Makros etc. erkannt werden auch @, # und < entfernen.
    <Preferences> <Settings - User> einfügen:

    Code
    {
        ...,
        "word_separators": "./\\()"'-:,.;>~!%^&*|+=[]{}`~?",
        ...
    }

    Edit 24.08.2014:
    Es fehlten noch 2 Fehlerabfragen und das Pattern für Variablenerkennung war nicht korrekt - gefixed.
    Ausserdem ist mir aufgefallen, dass die Autovervollständigung für Keywords nicht im AutoItScript-Package enthalten war. Habe ich nachgeholt. Die Datei Keywords.zip dazu in den Package-Ordner AutoItScript entpacken. (oder gleich einmal alles neu erstellen)
    Jetzt weiß ich auch, warum im AutoItScript-Package Tidy enthalten ist: Weil sich noch niemand an die Erstellung der Preference für AutoIndent gewagt hat. :whistling:
    Das scheint auch nicht ganz einfach zu sein. Meine bisherigen Versuche waren (noch) erfolglos. Aber ich bleibe dran. :rolleyes:

    Jetzt habe ich noch hinzugefügt, dass die Dateien für Autovervollständigung automatisch generiert werden. Einfach nach Installation einer neuen AutoItversion ausführen - die alten Dateien werden als *.bak gesichert und neue erstellt. (command=re_build_completion_files)
    Aber bitte vorher mal in den Package-Ordner von AutoItscript schauen, welche "*.sublime-completions dort existieren. Diese sind zum Teil nicht identisch mit den Keyword-Namen in den properties. Am Besten nach dem Neu Erstellen alle comletion-Dateien, die nicht das aktuelle Datum haben, löschen.
    Dazu sind zwei weitere Schlüssel in den AutoIt.sublime-settings erforderlich:

    Code
    ...,
        "completion_path": "I:\\SublimeText\\Data\\Packages\\AutoItScript",
        "user_include_path": "C:\\Program Files (x86)\\AutoIt3_MyInclude",
        ...


    Einen kleinen Schönheitsfehler haben die automatisch generierten Dateien: CamelCase ist automatisch natürlich nicht möglich. Nur am Wortanfang bzw. nach Unterstrich wird groß geschrieben.

    NEUE Version in Post #50!

    Dateien

    Keywords.zip 589 Byte – 391 Downloads
  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 22. August 2014 um 17:27
    Zitat von Espyre

    Frage1: Wäre es möglich noch die Funktion Au3Check (Syntax Check), die es im ISN Studio gibt, mit einzubauen?

    Frage2: Gibt es die Möglichkeit ein Script mit Startparameter zu testen?


    Zu beiden Punkten: Ja.
    Hat mich auch gewundert, dass im AutoIt-Package das (aus meiner Sicht völlig überflüssige) Tidy implementiert wurde, aber kein SyntaxCheck. Tidy habe ich in meinen ganzen 8 AutoIt-Jahren bestimmt nicht öfter als 6-8 mal benutzt. Und das auch nur ganz am Anfang. ;)
    Mit der Definition der Startparameter kann man das genauso lösen, wie beim Wrapper - durch das Inputpanel.

    Ich lass mir das alles mal durch den Kopf gehen.

  • Iteratoren generieren

    • BugFix
    • 21. August 2014 um 18:26

    Ich habe mal etwas gespielt.
    Die neue Syntax erlaubt uns ja Funktionsaufrufe an eine Variable zu binden und diese dann als Parameter in Funktionen zu nutzen.
    Im Bsp. habe ich Generatoren für numerische (ganzzahlig) und A-Z (groß/klein) -Iteratoren erstellt.
    Bei jedem Aufruf des Iterators wird der nächste Wert aus dem generierten Zahlenbereich bzw. beim A-Z der Folgebuchstabe zurückgegeben. A-Z kann auch endlos ausgegeben werden, d.h. nach dem Z geht es wieder mit A los.
    In erster Linie wird man wohl numerische Iteratoren anwenden. Selbstverständlich kann man mit einer Schleife um einen Funktionsaufruf einen Iterator ersparen. Aber wenn man mehrere Schleifen schachteln muss, kann man sich auf diese Weise evtl. die eine oder andere sparen. Das trägt wiederum durchaus zu etwas mehr Übersicht im Skript bei.

    Das einzig störende an dieser Lösung: Ich kann nur eine Instanz eines Iterators generieren. Oder hat da jemand eine Idee, wie man die neuen Syntaxmöglichkeiten dafür verbiegen kann?

    Spoiler anzeigen
    [autoit]

    Func _IteratorNum($_start=Null, $_end=Null, $_create=0)
    Local Static $a[1], $index
    If $_create Then
    $index = -1
    Local $n = 0
    ReDim $a[$_end +1 -($_start)]
    For $i = $_start To $_end
    $a[$n] = $i
    $n += 1
    Next
    Return _IteratorNum
    Else
    $index += 1
    Return $index < UBound($a) ? $a[$index] : False
    EndIf
    EndFunc

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

    $iter = _IteratorNum(-10,5,1)
    For $i = 1 To 16
    ConsoleWrite($iter() & ' ')
    Next
    ConsoleWrite(@LF)

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

    Func _IteratorABC($_lower=Null, $_endless=Null, $_create=0)
    Local Static $a[26], $index, $continue = False
    If $_create Then
    $index = -1
    Local $n = 0, $x = $_lower ? 97 : 65
    For $i = $x To $x +25
    $a[$n] = Chr($i)
    $n += 1
    Next
    If $_endless Then $continue = True
    Return _IteratorABC
    Else
    If $continue Then
    $index = $index +1 < 26 ? $index +1 : 0
    Else
    $index += 1
    EndIf
    Return $index < 26 ? $a[$index] : False
    EndIf
    EndFunc

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

    $iterUpper = _IteratorABC(0,0,1)
    For $i = 1 To 27
    ConsoleWrite($iterUpper() & ' ')
    Next
    ConsoleWrite(@LF)

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

    $iterLower = _IteratorABC(1,0,1)
    For $i = 1 To 27
    ConsoleWrite($iterUpper() & ' ')
    Next
    ConsoleWrite(@LF)

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

    $iterUpperEndless = _IteratorABC(0,1,1)
    For $i = 1 To 40
    ConsoleWrite($iterUpper() & ' ')
    Next
    ConsoleWrite(@LF)

    [/autoit]
  • AutoIt mit Sublime Text 2/3 -- Sprachdef. f. Stable v3.3.12.0, Wrapper, Au3Check, Run m. Parameter

    • BugFix
    • 21. August 2014 um 12:43

    Dem Manne kann geholfen werden - erledigt. Habe auch den import für subprocess jetzt bei.
    Viel Spass damit.

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™