JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=257a67c292573335ca1b1c5c41a8126aMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

char an string anhängen + tipppause
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 15:41    Titel: char an string anhängen + tipppause Antworten mit Zitat

Huhu =)

Ich habe wohl ein Grundlagenproblem, allerdings habe ich auch nach *auf uhr guck* ca. 57min googln nix gefunden o.O

Also es geht darum, das ich eine DirectInput-Klasse geschreiben hab, die nach einem Tastendruck auf A ein 'a' liefert, und nach dem Drücken von Shift und A ein 'A', jeweils als char-Typ.

Nun muss ich diesen Buchstaben für mein EIngabefeld an den schon bereits eingegebenen Text anhängen, der in einem String gespeichert ist (string strTextFeld;).

per strTextFeld += ...; habe ich es versucht, allerdings passiert da garnichts (zumindest nichts sichtbares Wink).

Nun ein anderer Versuch von mir, der "fast" funktioniert:
CPP:
         spTextFeld.Draw();

         char temp[100];

         int i = 0;
         while(strTextFeld[i] != '\0')
         {
            temp[i] = strTextFeld[i];
            i++;
         }
         temp[i] = Tastatur.GetInput();
         strTextFeld = temp;

         Direct3D.DrawText(strTextFeld.c_str(), SCR_WIDTH/2-95, SCR_HEIGHT/2-10, D3DCOLOR_XRGB(0,0,0));


Hier ist folgedes Problem: Drücke ich j, wird nicht nur ein j angehangen, sondern auch noch kryptisches zeugs o.O

Ich wette auch, dass es eine einfachere Möglichkeit gibt, auf die ich gerade irgendwie nicht komme ^^
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt


Zuletzt bearbeitet von Asto am 09.06.2007, 18:06, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 16:28    Titel: Antworten mit Zitat

also, eigentlich sollte es bei std::strings mit + oder += super funktionieren.

CPP:
#include <iostream>
#include <string>

using namespace std;

int main()
{
   string Text="hallo du ";
   Text+=" Pups";
   char c='!';
   Text+=c;
   cout << Text;
   return 0;
}

Klappt bei mir wunderbar. ("hallo du Pups!" kommt da dann)
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 18:05    Titel: Antworten mit Zitat

Hmm, danke. Irgendwie funktioniert folgendes nun:
CPP:
         spTextFeld.Draw();

         if(TextFeld_activated)
         {
          char cTemp;
          cTemp = Tastatur.GetInput();
         
          if(cTemp != NULL)
             strTextFeld += Tastatur.GetInput();
         }

         Direct3D.DrawText(strTextFeld.c_str(), SCR_WIDTH/2-95, SCR_HEIGHT/2-10, D3DCOLOR_XRGB(0,0,0));


Ich hatte vorher nicht dran gedacht, das ich bei jedem frame etwas zum string hinzufüge (wenn kein buchstabe gedrückt, return 0).
Vermutlich is 0 als char n leereichen oder so!? Naja keine Ahnung, aber vermutlich funktionierte das mit den tasten, war nur schon aus meinem bildschirmbereich!?

Trotzdem vielen Dank Smile Nun gehts Smile

Nun noch eine Frage (hab Thementitel editiert :X Wink):
Wie bekomme ich eine Pause hin, das bei einem Druck auf A nicht gleich aaaaaa im Feld steht? ich muss die Taste ja quasi kurz sperren / bzw. alle tasten.
Wie gehe ich da am besten vor?

Anbei evt. noch die Methode, die das Drücken der tasten und zurückgeben der char-werte bearbeitet
CPP:
char CDirectInput::getKeyboardInput(void)
{
   char Keys_all[2][26] = {
                  {   'a',
                     'b',
                     'c',
                     'd',
                     'e',
                     'f',
                     'g',
                     'h',
                     'i',
                     'j',
                     'k',
                     'l',
                     'm',
                     'n',
                     'o',
                     'p',
                     'q',
                     'r',
                     's',
                     't',
                     'u',
                     'v',
                     'w',
                     'x',
                     'y',
                     'z'
                  },
                  {   'A',
                     'B',
                     'C',
                     'D',
                     'E',
                     'F',
                     'G',
                     'H',
                     'I',
                     'J',
                     'K',
                     'L',
                     'M',
                     'N',
                     'O',
                     'P',
                     'Q',
                     'R',
                     'S',
                     'T',
                     'U',
                     'V',
                     'W',
                     'X',
                     'Y',
                     'Z'
                  }
                     };

      int lower_or_upper;
   
      // alle Tasten der Tastatur
        bool bKeyboard[256];
   
        if(FAILED(m_lpDIDevice->GetDeviceState(sizeof(bKeyboard),(LPVOID)&bKeyboard)))
        {
            // die Tastatur wurde zwischenzeitlich
            // durch eine andere Anwendung genutzt
            // Kontrolle wiederholen
            m_lpDIDevice->Acquire();
            return 0;
        }
   
        // bestimmen welche Taste gedrückt wurde
        char Key;

      if(bKeyboard[DIK_LSHIFT] || bKeyboard[DIK_RSHIFT])
         lower_or_upper = 1;
      else
         lower_or_upper = 0;

      if(bKeyboard[DIK_A])
         Key = Keys_all[lower_or_upper][0];
      else if(bKeyboard[DIK_B])
         Key = Keys_all[lower_or_upper][1];
      else if(bKeyboard[DIK_C])
         Key = Keys_all[lower_or_upper][2];
      else if(bKeyboard[DIK_D])
         Key = Keys_all[lower_or_upper][3];
      else if(bKeyboard[DIK_E])
         Key = Keys_all[lower_or_upper][4];
      else if(bKeyboard[DIK_F])
         Key = Keys_all[lower_or_upper][5];
      else if(bKeyboard[DIK_G])
         Key = Keys_all[lower_or_upper][6];
      else if(bKeyboard[DIK_H])
         Key = Keys_all[lower_or_upper][7];
      else if(bKeyboard[DIK_I])
         Key = Keys_all[lower_or_upper][8];
      else if(bKeyboard[DIK_J])
         Key = Keys_all[lower_or_upper][9];
      else if(bKeyboard[DIK_K])
         Key = Keys_all[lower_or_upper][10];
      else if(bKeyboard[DIK_L])
         Key = Keys_all[lower_or_upper][11];
      else if(bKeyboard[DIK_M])
         Key = Keys_all[lower_or_upper][12];
      else if(bKeyboard[DIK_N])
         Key = Keys_all[lower_or_upper][13];
      else if(bKeyboard[DIK_O])
         Key = Keys_all[lower_or_upper][14];
      else if(bKeyboard[DIK_P])
         Key = Keys_all[lower_or_upper][15];
      else if(bKeyboard[DIK_Q])
         Key = Keys_all[lower_or_upper][16];
      else if(bKeyboard[DIK_R])
         Key = Keys_all[lower_or_upper][17];
      else if(bKeyboard[DIK_S])
         Key = Keys_all[lower_or_upper][18];
      else if(bKeyboard[DIK_T])
         Key = Keys_all[lower_or_upper][19];
      else if(bKeyboard[DIK_U])
         Key = Keys_all[lower_or_upper][20];
      else if(bKeyboard[DIK_V])
         Key = Keys_all[lower_or_upper][21];
      else if(bKeyboard[DIK_W])
         Key = Keys_all[lower_or_upper][22];
      else if(bKeyboard[DIK_X])
         Key = Keys_all[lower_or_upper][23];
      else if(bKeyboard[DIK_Y])
         Key = Keys_all[lower_or_upper][25]; // GERMAN: Z
      else if(bKeyboard[DIK_Z])
         Key = Keys_all[lower_or_upper][24]; // GERMAN: Y
      else
         return 0;

        return Key;
}


geht das eigentlich einfacher? *gg*
kommt mir so unüblich lang vor... Embarassed

die idee war ja, anstelle der indizes [0][4] z.b. [0][DIK_A] zu nutzen, aber ich finde nirgends die möglichkeit den index-wert selber festzulegen, so wie bei php
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 18:17    Titel: Antworten mit Zitat

http://msdn2.microsoft.com/en-us/library/ms646307.aspx
http://msdn2.microsoft.com/en-us/library/ms646318.aspx
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 18:24    Titel: Antworten mit Zitat

@David, hmm danke - sehr nützliche funktionen Shocked

Nur sollte man bei mir nur Buchstaben eingeben können (vergaß ich zu erwähnen)
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt


Zuletzt bearbeitet von Asto am 09.06.2007, 18:24, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 09.06.2007, 18:24    Titel: Antworten mit Zitat

David hat Folgendes geschrieben:
http://msdn2.microsoft.com/en-us/library/ms646307.aspx
http://msdn2.microsoft.com/en-us/library/ms646318.aspx


Die DIK_* enum Werte sind leider keine VK_* Werte das funktioniert so wie in den Links beschrieben nicht, allein schon deswegen weil die Werte ziemlich seltsam geordnet wurden:

CPP:
#define DIK_ESCAPE          0x01
#define DIK_1               0x02
#define DIK_2               0x03
#define DIK_3               0x04
#define DIK_4               0x05
#define DIK_5               0x06
#define DIK_6               0x07
#define DIK_7               0x08
#define DIK_8               0x09
#define DIK_9               0x0A
#define DIK_0               0x0B
#define DIK_MINUS           0x0C    /* - on main keyboard */
#define DIK_EQUALS          0x0D
#define DIK_BACK            0x0E    /* backspace */
#define DIK_TAB             0x0F
#define DIK_Q               0x10
#define DIK_W               0x11
#define DIK_E               0x12
#define DIK_R               0x13
#define DIK_T               0x14
#define DIK_Y               0x15
#define DIK_U               0x16
#define DIK_I               0x17
#define DIK_O               0x18
#define DIK_P               0x19

_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 18:26    Titel: Antworten mit Zitat

ah Fallen du bringst mich aber auf eine Idee Very Happy

man kann ja die 0x02 Werte in Integer umrechnen, dann legt man an der Indexposition den passenden wert (hier z.b. 1).

müsste gehen oder? ^^

EDIT: grmpf, wird nur n bissl groß das array -> verschwenderisch, ich brauche ja nur wenige zeichen und hätte leerräume Neutral
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 18:29    Titel: Antworten mit Zitat

Oh, stimmt... DirectInput! Smile
Was für Zeichen brauchst du denn?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 09.06.2007, 18:35    Titel: Antworten mit Zitat

Hab das hier im gamedev.net gefunden:

http://www.gamedev.net/reference/articles/article842.asp

evtl hilft es.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 32
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 18:38    Titel: Antworten mit Zitat

Fallen hat Folgendes geschrieben:
Die DIK_* enum Werte sind leider keine VK_* Werte das funktioniert so wie in den Links beschrieben nicht, allein schon deswegen weil die Werte ziemlich seltsam geordnet wurden:

So seltsam ist das gar nicht. Die worden so geordnet wie sie auf der Tastatur vorkommen. Aber wäre meiner meinung nach besser gewesen die werte nach dem Alphabet zu vergeben, dann könnte man sowas ganz leicht machen.

Code:
bool Keys[256];
std::string str;

for(int i = DIK_A; i <= DIK_Z; ++i)
{
    if(Keys[i])
        str += static_cast<char>(i+35);
}


Nur als Beispiel.
Aber so kommst du wahrscheinlich nicht drumherum es so zu machen wie du gesagt hast. Oder du machst es so:

irgendwo in einem Header
CPP:
unsigned long Keys[] = {DIK_A, DIK_B, DIK_C, ..., DIK_Z};

Und dann in der Funktion:
CPP:
std::string str;
unsigned int lower_or_upper = 97;
if(bKeyboard[DIK_LSHIFT] || bKeyboard[DIK_RSHIFT])
{
    lower_or_upper = 65;
}

for(int i = 0; i < 26; ++i)
{
    if(bKeyboard[Keys[i]])
    {
        str += static_cast<char>(i+lower_or_upper);
    }
}


edit: Da gibts wohl wieder ein Fehler mit dem syntax highlighting Wink
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren


Zuletzt bearbeitet von 51m0n am 09.06.2007, 18:56, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 18:39    Titel: Antworten mit Zitat

David: nur a-z und A-Z

Fallen: Hmm wenn ich das richtig verstehe, dann ist das auch nur für die VK_ -Ereignisse

Simon: Hmm wäre ne Idee, nachdem ich das nachvollzogen hab XD werde ich es mal probieren, aber ich merk schon, das Hauptproblem is verloren gegangen *g*:

Wie bekomme ich eine Pause hin, das bei einem Druck auf A nicht gleich aaaaaa im Feld steht? ich muss die Taste ja quasi kurz sperren / bzw. alle tasten.
Wie gehe ich da am besten vor?
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 32
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 18:48    Titel: Antworten mit Zitat

Leg doch eine Variable in der du die zeit speicherst wann das letzte mal eine taste gedrückt wurde. Dann überprüfst du immer wie viel zeit seit dem letzten Tastendruck vergangen ist und wenn die Zeitspanne zu kurz war wertest du den Tastendruck einfach nicht.
So in etwa:

Das ist z.B. eine Membervariable
CPP:
unsigned long LastKeyPressed


Und dann wieder in der Funktion:
CPP:
CurTime = timeGetTime();
if(CurTime - LastKeyPressed < 100)
{
   // noch nicht genug zeit vergangen
}
else
{
   // es ist genug zeit seit dem letzten tastendruck vergangen
   // werte die tasten aus und
   // aktualisiere die variable "LastKeyPressed" (wichtig!)
   LastKeyPressed = CurTime;
}


Anstatt kannst timeGetTime kannst du natürlich auch deine eigene Funktion verwenden z.B. mit dem QueryPerformanceCounter. Und die 100 ist die Zeitspanne die vergehen soll bis Tasten wieder "aktiviert" sind.
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 19:36    Titel: Antworten mit Zitat

Vielen Dank Simon =)
Ich versuchte es per Frames zu steuern, aber das war etwas kompliziert bzw PC-abhängig ^ ^

und deine kurze variante der methode funktioniert auch perfekt *freu* Smile
Danke

Aber da ich das Keys[] Array in einer Klasse benutze, habe ich folgendes Problem:
In der Header-Datei deklariere ich unter private: die variable unsigned long Keys[26];
Wenn ich da schon die Werte zuweisen will, bekomme ich n parseerror o.O

Ok. Dann eben dort Werte zuweisen: CDirectInput::CDirectInput(void)
Hier habe ich das Problem, das
CPP:
Keys = {   DIK_A, DIK_B, DIK_C, DIK_D, DIK_E, DIK_F, DIK_G, DIK_H, DIK_I, DIK_J,
                        DIK_K, DIK_L, DIK_M, DIK_N, DIK_O, DIK_P, DIK_Q, DIK_R, DIK_S, DIK_T,
                        DIK_U, DIK_V, DIK_W, DIK_X, DIK_Z, DIK_Y}; // Deutsche Tastatur: DIK_Y und DIK_Z getauscht

Auch Fehlermeldungen erzeugt.
Kann ich das Array dann nur so mit Werten belegen?:
CPP:
CDirectInput::CDirectInput(void)
{
    m_CurrentDevice = 0;
    m_lpDI = NULL;
    m_lpDIDevice = NULL;

   unsigned long TEMPKeys[26] = {   DIK_A, DIK_B, DIK_C, DIK_D, DIK_E, DIK_F, DIK_G, DIK_H, DIK_I, DIK_J,
                        DIK_K, DIK_L, DIK_M, DIK_N, DIK_O, DIK_P, DIK_Q, DIK_R, DIK_S, DIK_T,
                        DIK_U, DIK_V, DIK_W, DIK_X, DIK_Z, DIK_Y}; // Deutsche Tastatur: DIK_Y und DIK_Z getauscht

   for(int i = 0; i < 26; i++)
      Keys[i] = TEMPKeys[i];

}


Kostet so ja mehr zeit, da ich das noch umpacken muss damit es in der Klasse "global" ist.

Naja bin halt noch n CPP Anfänger, aber irgendwie bekomme ich es nciht anders hin. Ist das die einzige Möglichkeit?
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 32
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 09.06.2007, 19:41    Titel: Antworten mit Zitat

Wenn du den Array als static deklarierst müsste es eigentlich gehen.
Außerdem würde ich den Array als const deklarieren Wink.
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 09.06.2007, 19:49    Titel: Antworten mit Zitat

GreatFlo hat Folgendes geschrieben:

Fallen: Hmm wenn ich das richtig verstehe, dann ist das auch nur für die VK_ -Ereignisse


Eigentlich geht es im die DirectInput Keyidentifier, also die DIK_ Dinge, die Funktion dort sollte den Code eigentlich korrekt umwandeln können, hast du es denn mal ausprobiert?

Damit wäre dann Davids Links ganz gut gewesen Wink
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum