AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion Copy verwenden - wie?

Ein Thema von Lyan · begonnen am 18. Aug 2011 · letzter Beitrag vom 18. Aug 2011
Antwort Antwort
Seite 1 von 3  1 23      
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#1

Funktion Copy verwenden - wie?

  Alt 18. Aug 2011, 08:59
Delphi-Version: XE
Hallo,

ich bin zur Übung an einem Chatprogramm dran! Nun kann man sich das ganze so vorstellen:

1)Der User wird aufgefordert einen Usernamen, eine Chatfarbe(mit colordialog), den Host und den Port auszuwählen. (Über TServerSocket und TClientSocket) // Bitte nicht sagen ich soll die Indy's benutzen! ;D

2)Sofern die Verbindung geklappt hat wird man auf die 2te Seite des Tabsheeds weitergelassen.
Dort findet man oben eine Richbox(Protokoll(wo die User drin chatten)), ein Memo zum senden von Nachrichten und wichtig noch der Sende Button!

3) Im Memo (da wo man die Nachricht eintippt) ist nun die Schriftfarbe zusehen die man auf Seite 1 im colordialog ausgewählt hat!

4) Per Attribute habe ich nun die Farbe auch in der Richbox (da wo die Messages gesendet werden) in der Farbe wo man ausgewählt hat!


Problem?
Ich konnte nur clientseitig die Farben ändern:

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
with richedit1.selattributes do
begin
  if strtoint(memo2.Text) <> 0 then
  richedit1.SelAttributes.Style := [fsBold];
  client.socket.SendText(inttostr(colordialoguser.color) + editusername.text + ' -> ' + memo2.text);
  memo2.Clear;
end;
end;
Wie man sieht wird über diese Zeile: (client.socket.SendText(inttostr(colordialoguser.c olor) + editusername.text + ' -> ' + memo2.text) ja was an denn Server gesendet. Nämlich 3 Strings!

1 String: Farbe(Coolodialoguser.color)

2 String: Username(editusername.text)

3 String: Nachricht(memo2.text)


--------------------------------------------

So das sollte ja so klappen (also das die Strings so an den Server gesendet werden!)

Nun zum Problem (das nämlich beim Server liegt der den String aufteilen soll und die Farbe ect. erkennen soll)


Code:
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i:integer;
    Nachricht: AnsiString;
    sTeilen: String;
    aColor: TColor;
begin
  with richeditmaster.selattributes do
  begin
    Nachricht:= Socket.ReceiveText;
    sTeilen := copy(Nachricht, 1,3);
    aColor := TColor(StrToInt(sTeilen));
    RicheditMaster.Lines.Add(Nachricht);
    for i := 0 to server.Socket.ActiveConnections - 1 do
    server.socket.Connections[i].SendText(Nachricht);

  end;
end;
end.
Bin Anfänger! Kann mir da jemand helfen ? Ich weiß nicht ganz wie ich das jetzt genau machen muss, dass die Farbe dem User zugeordnet wird und mitgesendet wird + den Username und eben der Nachricht!

Wäre echt super wenn jemand das direkt lösen könnte mit copy o.ä


Vielen Dank im vorraus!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

AW: Funktion Copy verwenden - wie?

  Alt 18. Aug 2011, 09:07
Du kannst entweder klassisch den Debugger benutzen oder Dir die geschriebenen/gelesenen Werte einfach einmal ausgeben lassen.
Delphi-Quellcode:
ShowMessage(inttostr(colordialoguser.color)); //beim Senden

sTeilen := copy(Nachricht, 1,3);
ShowMessage(sTeilen); //beim Empfangen
Ich möchte bezweifeln, dass die Länge von 3 Zeichen stimmt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#3

AW: Funktion Copy verwenden - wie?

  Alt 18. Aug 2011, 09:10
Du kannst entweder klassisch den Debugger benutzen oder Dir die geschriebenen/gelesenen Werte einfach einmal ausgeben lassen.
Delphi-Quellcode:
ShowMessage(inttostr(colordialoguser.color)); //beim Senden

sTeilen := copy(Nachricht, 1,3);
ShowMessage(sTeilen); //beim Empfangen
Ich möchte bezweifeln, dass die Länge von 3 Zeichen stimmt.
Es wird vor den Namen immer eine 3 stellige Zahl angehongen (z.B. 255)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#4

AW: Funktion Copy verwenden - wie?

  Alt 18. Aug 2011, 09:13
Delphi-Referenz durchsuchenPos
Delphi-Referenz durchsuchenPosEx
Hier im Forum suchenSplit

Trennzeichen überall dazwischen und dann das Trennzeichen suchen und an diesen Grenzen die Einzelteile rauskopieren.


PS: Ohne Trennzeichen zwischenchen Color und Username wird es etwas schwer.
> alle Zahlen am Anfang suchen und nach Letzen beginnt der Username,
oder man nimmt eine feste Anzahl an Ziffern, mit führenden Nullen/Leerzeichen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Funktion Copy verwenden - wie?

  Alt 18. Aug 2011, 09:15
Du kannst entweder klassisch den Debugger benutzen oder Dir die geschriebenen/gelesenen Werte einfach einmal ausgeben lassen.
Delphi-Quellcode:
ShowMessage(inttostr(colordialoguser.color)); //beim Senden

sTeilen := copy(Nachricht, 1,3);
ShowMessage(sTeilen); //beim Empfangen
Ich möchte bezweifeln, dass die Länge von 3 Zeichen stimmt.
Es wird vor den Namen immer eine 3 stellige Zahl angehongen (z.B. 255)
Du hast also nur Werte von 100 bis 999 dort?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

AW: Funktion Copy verwenden - wie?

  Alt 18. Aug 2011, 09:22
Das müsste rot sein, richtig? Das Problem ist, dass TColor sehr viel größer sein kann, Du mit 3 Stellen also nicht mehr auskommst. Daher musst Du sicherstellen, dass immer die gleiche Stringlänge verwendet wird. Versuch es einmal so:
Delphi-Quellcode:
c := colordialoguser.color;
Farbstring := Format('%.2x%.2x%.2x', [GetBValue(c), GetGValue(c), GetRValue(c)]);
Wenn ich keinen Fehler gemacht habe, sollten das dann immer 6 Zeichen sein. Beim Empfangen kopierst Du diese 6 Zeichen aus dem Stringanfang, setzt ein $ davor und kannst sie direkt in TColor umwandeln.
Delphi-Quellcode:
c := Copy(DeinText, 1, 6);
Delete(DeinText, 1, 6);
Color := StrToInt('$' + c);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#7

AW: Funktion Copy verwenden - wie?

  Alt 18. Aug 2011, 09:32
Das müsste rot sein, richtig? Das Problem ist, dass TColor sehr viel größer sein kann, Du mit 3 Stellen also nicht mehr auskommst. Daher musst Du sicherstellen, dass immer die gleiche Stringlänge verwendet wird. Versuch es einmal so:
Delphi-Quellcode:
c := colordialoguser.color;
Farbstring := Format('%.2x%.2x%.2x', [GetBValue(c), GetGValue(c), GetRValue(c)]);
Wenn ich keinen Fehler gemacht habe, sollten das dann immer 6 Zeichen sein. Beim Empfangen kopierst Du diese 6 Zeichen aus dem Stringanfang, setzt ein $ davor und kannst sie direkt in TColor umwandeln.
Delphi-Quellcode:
c := Copy(DeinText, 1, 6);
Delete(DeinText, 1, 6);
Color := StrToInt('$' + c);
Danke hat so funktioniert
Super !
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#8

AW: Funktion Copy verwenden - wie?

  Alt 18. Aug 2011, 09:50
oh ehm, hat zwar geklappt,. aber dadurch das es nun formated ist, sind die Farben durcheinander!

Also wenn ich im colordialog user nun Gelb wähle ,kommt limegreen bei raus ect.!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#9

AW: Funktion Copy verwenden - wie?

  Alt 18. Aug 2011, 09:57
Das kann ich hier nicht nachvollziehen. Hast Du die GetXValue-Aufrufe evtl. vertauscht?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#10

AW: Funktion Copy verwenden - wie?

  Alt 18. Aug 2011, 10:08
Client Source:

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, inifiles, ComCtrls, Character, unit2;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Client: TClientSocket;
    Button4: TButton;
    Button2: TButton;
    Button1: TButton;
    GroupBox2: TGroupBox;
    Memo2: TMemo;
    GroupBox1: TGroupBox;
    TabSheet2: TTabSheet;
    ColorDialoguser: TColorDialog;
    Button3: TButton;
    GroupBox3: TGroupBox;
    labelUsername: TLabel;
    Labelhost: TLabel;
    Labelport: TLabel;
    Labelcolor: TLabel;
    Editusername: TEdit;
    Edithost: TEdit;
    Editport: TEdit;
    ButtonColor: TButton;
    Buttonconnect: TButton;
    Edit1: TEdit;
    TrackBar1: TTrackBar;
    Label1: TLabel;
    Label2: TLabel;
    RichEdit1: TRichEdit;
    procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure TabSheet2ContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
    procedure ButtonconnectClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ButtonColorClick(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private-Deklarationen }
    inifileuser: Tinifile;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var c: Integer;
var Farbstring: String;
begin
with richedit1.selattributes do
begin
  c := colordialoguser.color;
  Farbstring := Format('%.2x%.2x%.2x', [GetBValue(c), GetGValue(c), GetRValue(c)]);
  if strtoint(memo2.Text) <> 0 then
  richedit1.SelAttributes.Style := [fsBold];
  client.socket.SendText(inttostr(c) + editusername.text + ' -> ' + memo2.text);
  memo2.Clear;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
application.Terminate
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
memo2.Clear;
memo2.lines.Add('Client 1.0 - Lyan');
end;

procedure TForm1.ButtonColorClick(Sender: TObject);
var c: Integer;
var Farbstring: String;
begin
  c := colordialoguser.color;
  Farbstring := Format('%.2x%.2x%.2x', [GetBValue(c), GetGValue(c), GetRValue(c)]);
  if colordialoguser.Execute then
  begin
    inifileuser.WriteString('Userinfo','Farbe',IntToStr(c));
    Edit1.Color := c;
  end;
end;

procedure TForm1.ButtonconnectClick(Sender: TObject);
var iLength: Integer;
begin
Inifileuser.WriteString('Userinfo', 'Username', Editusername.text );
Inifileuser.WriteString('Userinfo', 'Host', Edithost.text );
Inifileuser.WriteString('Userinfo', 'Port', Editport.text );
Inifileuser.WriteString('Userinfo', 'Chatfarbe', IntToStr(ColorDialoguser.Color));

if (editusername.Text <> '') AND (editport.Text <> '') AND (edithost.Text <> '') then
  begin
    iLength := Length(editusername.Text);
    if (iLength > 3) then
    begin
      try
        client.Host := edithost.text;
        client.Port := strtoint(editport.text);
        client.Active := True;
        pagecontrol1.ActivePage := tabsheet1;
        unit2.Form2.Show;
      except
        ShowMessage('Connection failed! Please check your Host or Port number!');
      end;
    end;
  end
  else
  begin
    Showmessage('Entweder haben sie vergessen ein Feld auszufüllen, oder ihr Username ist zu kurz!');
  end;
end;


procedure TForm1.ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
richedit1.Lines.Add('Status: verbunden mit ' + socket.RemoteAddress);
end;

procedure TForm1.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
richedit1.Lines.Add('Status: getrennt mit ' + socket.RemoteAddress);
end;

procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
richedit1.Lines.Add(Socket.ReceiveText);
end;

procedure TForm1.FormCreate(Sender: TObject);
var suserpath: String;
sFarbe: String;
begin
  PageControl1.ActivePage := TabSheet2;
  suserpath := ExtractFilePath(ParamStr(0));
  if not DirectoryExists('Usersettings') then
    CreateDir('Usersettings');

  inifileuser:=Tinifile.Create(suserpath + ('\Usersettings\Usersettings.ini'));
  editusername.Text:=inifileuser.ReadString('Userinfo', 'Username', '');
  editHost.Text:=inifileuser.ReadString('Userinfo', 'Host', '');
  editPort.Text:=inifileuser.ReadString('Userinfo', 'Port', '');
  sFarbe := inifileuser.ReadString('Userinfo', 'Farbe', InttoStr(clBlack));
  sFarbe := inifileuser.ReadString('Userinfo', 'Chatfarbe', InttoStr(clBlack));
  try
    Color := StrToInt(sFarbe);
  except
    Color := clBlack;
  end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
  try
  inifileuser.free
  except
  end;
end;


procedure TForm1.TabSheet2ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
  var sFarbe: String; suserpath: String;

begin
    suserpath := ExtractFilePath(ParamStr(0));
  if not DirectoryExists('Usersettings') then
    CreateDir('Usersettings');

  inifileuser:=Tinifile.Create(suserpath + ('\Usersettings\Usersettings.ini'));
  editusername.Text:=inifileuser.ReadString('Userinfo', 'Username', '');
  editHost.Text:=inifileuser.ReadString('Userinfo', 'Host', '');
  editPort.Text:=inifileuser.ReadString('Userinfo', 'Port', '');
  sFarbe := inifileuser.ReadString('Userinfo', 'Farbe', InttoStr(clBlack));
  sFarbe := inifileuser.ReadString('Userinfo', 'Chatfarbe', InttoStr(clBlack));
  try
    Color := StrToInt(sFarbe);
  except
    Color := clBlack;
  end;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  label1.Caption := inttostr(trackbar1.Position);
  form1.AlphaBlendValue := strtoint(label1.Caption);
end;

end.






Client:

Code:
unit UnitServer;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Inifiles, ScktComp, ComCtrls, Menus;

type
  TForm1 = class(TForm)
    EditPort: TEdit;
    Label1: TLabel;
    GroupBoxProtokoll: TGroupBox;
    ButtonStarten: TButton;
    ButtonAnhalten: TButton;
    ButtonClear: TButton;
    ButtonSenden: TButton;
    ButtonBeenden: TButton;
    EditSenden: TEdit;
    LabelUser: TLabel;
    Server: TServerSocket;
    ListBoxUser: TListBox;
    RichEditMaster: TRichEdit;
    procedure ButtonStartenClick(Sender: TObject);
    procedure ButtonAnhaltenClick(Sender: TObject);
    procedure ButtonClearClick(Sender: TObject);
    procedure ButtonBeendenClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerClientError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure ButtonSendenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure EditPortExit(Sender: TObject);
  private
    { Private-Deklarationen }
    inifilemain: TIniFile;
  public
    { Public-Deklarationen }
  end;

var
  {Variablen}
  Form1: TForm1;
  Userzahl:Integer;
  i:Integer;

implementation

{$R *.dfm}

procedure TForm1.ButtonStartenClick(Sender: TObject);
begin
{Server Verbindung (Port) wird aus Edit1 gelesen on button1.click}
  Server.Port:= strtoint(EditPort.Text);
  Server.Active:=True;
  Buttonstarten.Enabled:=False;
  Buttonanhalten.Enabled:=True;
  RicheditMaster.Lines.Add('Status: Server gestartet.');

end;

procedure TForm1.ButtonAnhaltenClick(Sender: TObject);
begin
{Server.Active wird auf false gesetzt wenn der Server angehalten wird}
  Server.Port:= strtoint(Editport.Text);
  Server.Active:=False;
  Buttonstarten.Enabled:=True;
  Buttonanhalten.Enabled:=False;
  RicheditMaster.Lines.Add('Status: Server angehalten.');
end;

procedure TForm1.ButtonClearClick(Sender: TObject);
begin
{Protokoll wird "gelöscht"}
  RicheditMaster.Lines.Clear;
  RicheditMaster.Lines.Add('Server 1.0');
end;

procedure TForm1.ButtonSendenClick(Sender: TObject);
var i:integer;
begin
{Server schickt eine Nachricht an alle User}
  for i := 0 to server.Socket.ActiveConnections - 1 do
  server.Socket.Connections[i].SendText('Nachricht von Server: ' + editsenden.Text);
  RicheditMaster.Lines.Add('Nachricht von Server: ' + editsenden.Text);
end;


procedure TForm1.ButtonBeendenClick(Sender: TObject);
begin
        {Anwendung schließen}
  server.Active:=false;
  application.Terminate;
end;


procedure TForm1.EditPortExit(Sender: TObject);
begin
    InifileMain.WriteString('Port', 'Portvalue', editport.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
var Inifilepath: String;
begin
  inifilepath:=extractfilepath(ParamStr(0));
  InifileMain:=TIniFile.Create(inifilepath + ('startup.ini'));
  Editport.Text:=InifileMain.ReadString('Port', 'portvalue', '');
end;


procedure TForm1.FormDestroy(Sender: TObject);
var sExeVerzeichnis: string;
begin
  server.Active:=false;
  sExeVerzeichnis := ExtractFilePath(ParamStr(0));
  if not DirectoryExists(sExeVerzeichnis+'VerlaufProtokoll') then
  CreateDir(sExeVerzeichnis+'VerlaufProtokoll')
  else
    begin
         RicheditMaster.lines.SaveToFile(sExeVerzeichnis+'\VerlaufProtokoll\TEst1337.txt');
    end;
  try
    InifileMain.free;
  except
  end;
end;

procedure TForm1.ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  RicheditMaster.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' verbunden.');
  Userzahl:=Userzahl +1;
  labeluser.caption:='User: ' + inttostr(Userzahl);
  ListBoxUser.Items.Add(Socket.RemoteAddress );
end;

procedure TForm1.ServerClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  RicheditMaster.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' getrennt.');
  Userzahl:=Userzahl -1;
  labeluser.caption:='User: ' + inttostr(Userzahl);
end;

procedure TForm1.ServerClientError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  RicheditMaster.Lines.Add('Status: Client ' + socket.RemoteAddress + 'hat den Fehler' + inttostr(Errorcode));
  Userzahl:=Userzahl -1;
  labeluser.caption:='User: ' + inttostr(Userzahl);
end;

procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i:integer;
    Nachricht: AnsiString;
    Color: TColor;
    c: string;
begin
    Nachricht:= Socket.ReceiveText;
    c := copy(Nachricht, 1,6);
    delete(Nachricht, 1,6);
    Color:=StrToInt(('$' + c));
    for i := 0 to server.Socket.ActiveConnections - 1 do
    server.socket.Connections[i].SendText(Nachricht);

  end;
end.

Versuch es bitte Ich blick nicht durch!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz