AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Tutorial: Splash Screens
Tutorial durchsuchen
Ansicht
Themen-Optionen

Tutorial: Splash Screens

Ein Tutorial von sakura · begonnen am 9. Sep 2003 · letzter Beitrag vom 31. Jan 2009
Antwort Antwort
Seite 9 von 10   « Erste     789 10      
Benutzerbild von sakura
sakura
Registriert seit: 10. Jun 2002
Hi DPler,

immer wieder kommt die Frage danach, wie Splash Screens bzw. "Startbildschirmen" gemacht werden können. Also, die Implementierung ist einfacher, als viele es glauben wollen.

Folgend meine zwei beliebtesten Methoden, Splash Screens zu implementieren.

Dabei ist die grundlegende Vorgehensweise immer identisch. Zum Üben einfach mal mitmachen und dann die präferierte Methode annehmen

Let's roll!

Delphi starten und eine neue Anwendung erstellen. Die Anwendung und das Hauptformular an gewünschter Stelle auf der Festplatte speichern. Anschließend im Objekt Inspektor dem Hauptformular einen beliebigen Namen geben. In den Bespielen heißt dieses frmMain. Damit wir bei unserer Super-Beispiel-Anwendung auch mal einen "vernünftigen" Grund für einen Splash-Screen erzwingen, folgenden Code in das OnCreate-Ereignis einfügen.

Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Sleep(1500);
end;
Dann noch einen Button aufs Form werfen und folgenden Code in des OnClick-Ereignis einfügen.

Delphi-Quellcode:
procedure TfrmMain.btnBoahClick(Sender: TObject);
begin
  Close;
end;
Soweit die Vorbereitung auf Seiten des Hauptformulars. Jetzt gehts an den Splash Screen. Dazu erstellen wir ein neues Formular und speichern auch dieses. Als Namen im Objekt Inspektor bitte frmSplash eingeben (damit die Beispiele funktionieren). Ansonsten ist der natürlich auch frei wählbar.

Jetzt das Splash Formular nach belieben "stylen" und weiter gehts. Im folgenden Beispiel ist einfach ein hübsches Bildchen zu sehen

Weiter gehts. Folgend zu den beiden Standard-Methoden.
  • Der nächste Abschnitt erklärt, wie man das Splash-Form dazu bringt mind. 3 Sekunden zu bleiben und mindestens so lange, bis die Anwendung vollständig initialisiert wurde.
  • Der übernächste Abschnitt zeigt, wie der Splash Screen solange zu sehen ist, bis der User auf den "Starten" Schalter geklickt hat. Dieses kann er natürlich erst dann tun, wenn die Anwendung vollständig initialisiert ist.

Anschließend kommt der Teil im Projekt, welcher wieder identisch für alle Lösungen ist.

......
Ich bin nicht zurück, ich tue nur so
 
Svenkan

 
Delphi 7 Enterprise
 
#81
  Alt 2. Mai 2007, 16:41
3000

Nur sollten diese 3sec eigtl keine Ewigkeit dauern. ^^
Der OnClose-Befehl wird ja auch ausgeführt, aber das Fenster lässt sich einfach nicht schließen.
Also kommt der Befehl ja auch an. Es passiert nur einfach nichts. oO

/edit: Habe in die Prozedur 'SetInitializationDone' einen Labelwechsel mit eingebaut und merke grade, dass dieser nie vorgenommen wird.
Ich glaube jetzt mal, dass dort der Fehler liegt und deswegen 'CanClose' auf auf 'False' bleibt.

/edit2: Ich habs! Ich hab vergessen 'Application.CreateForm(TSplash, Splash);' rauszunehmen.
Sven Kannenberg
  Mit Zitat antworten Zitat
bacci
 
#82
  Alt 7. Feb 2008, 00:39
[quote="Kernel32.DLL"]@DymonD

Jepp, so in etwa...

In der Delphi 5 Hilfe steht:
Delphi-Quellcode:
begin
  Application.Initialize;
  with TForm5.Create(nil) do
  try
    ProgressBar1.Max := 100;
    Show; // Startbildschirm mit ProgressBar anzeigen
    Update; // Anzeige von Form5 auslösen
    Application.CreateForm(TForm1, Form1);
    ProgressBar1.StepBy(25);
    Application.CreateForm(TForm2, Form2);
    ProgressBar1.StepBy(25);
    Application.CreateForm(TForm3, Form3);
    ProgressBar1.StepBy(25);
    Application.CreateForm(TForm4, Form4);

    ProgressBar1.StepBy(25);
  finally
    Free;
  end;
  Application.Run;
end.


[quote]

So ... leider ist mein Delphi wissen noch vieeeel zu wenig, ich hab das auch so versucht, aber hat nicht geklappt, die ProgressBar zeigt nichts an.
Habe mal die RzProgressbar versucht, auch da klappts nicht.

kann mir jemand sagen was ich schon wieder falsch mache, bzw vergessen habe ;-(

Mein dpr- file:

Delphi-Quellcode:
program Kundenverwaltung;

uses
  Forms,
  form_kunden in 'form_kunden.pas{kunden},
  main in 'main.pas{Master},
  form_mitarbeiter in 'form_mitarbeiter.pas{Mitarbeiter},
  form_artikel in 'form_artikel.pas{Artikel},
  form_auftragsverwaltung in 'form_auftragsverwaltung.pas{Auftragsverwaltung},
  form_bestellung in 'form_bestellung.pas{bestellung},
  form_rechnung in 'form_rechnung.pas{Rechnung},
  splash in 'splash.pas{Form1},
  form_alte_bestellung in 'form_alte_bestellung.pas{alte_bestellungen};

{$R *.res}

begin
 //


Form1 := TForm1.Create(Application);
  with TForm1.Create(nil) do
 try
RzProgressBar1.visible:=true;
RzProgressBar1.percent:=0;
  Form1.Show;
  Form1.Refresh;
  Application.Title := 'KAV - IDL stone solutions';
  Application.Initialize;
  Application.Title := 'IDL KAV';
  Application.CreateForm(TMaster, Master);
  Application.CreateForm(Tkunden, kunden);
RzProgressBar1.percent:=40;
  Application.CreateForm(Tbestellung, bestellung);
  Application.CreateForm(TRechnung, Rechnung);
RzProgressBar1.percent:=60;
  Application.CreateForm(Talte_bestellungen, alte_bestellungen);
  Application.CreateForm(TMitarbeiter, Mitarbeiter);
RzProgressBar1.percent:=80;
  Application.CreateForm(TArtikel, Artikel);
  Application.CreateForm(TAuftragsverwaltung, Auftragsverwaltung);
RzProgressBar1.percent:=100;
RzProgressBar1.visible:=false;

  Finally
// SplashScreen Fenster freigeben
 Form1.InitializationDone := True;
end;
// while form1 <> nil do
// Application.ProcessMessages;
  Application.Run;
end.

Danke für eure Mühe, aber nach 2 Tagen Google und Forum durchsuchen hab ich jetzt aufgegeben und frage dann doch ... ;-((
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#83
  Alt 20. Mär 2008, 20:26
Zitat von bacci:
[...]

Delphi-Quellcode:
program Kundenverwaltung;

uses
  Forms,
  form_kunden in 'form_kunden.pas{kunden},
  main in 'main.pas{Master},
  form_mitarbeiter in 'form_mitarbeiter.pas{Mitarbeiter},
  form_artikel in 'form_artikel.pas{Artikel},
  form_auftragsverwaltung in 'form_auftragsverwaltung.pas{Auftragsverwaltung},
  form_bestellung in 'form_bestellung.pas{bestellung},
  form_rechnung in 'form_rechnung.pas{Rechnung},
  splash in 'splash.pas{Form1},
  form_alte_bestellung in 'form_alte_bestellung.pas{alte_bestellungen};

{$R *.res}

begin
 //


Form1 := TForm1.Create(Application);
  with TForm1.Create(nil) do
 try
RzProgressBar1.visible:=true;
RzProgressBar1.percent:=0;
  Form1.Show;
  Form1.Refresh;
  Application.Title := 'KAV - IDL stone solutions';
  Application.Initialize;
  Application.Title := 'IDL KAV';
  Application.CreateForm(TMaster, Master);
  Application.CreateForm(Tkunden, kunden);
RzProgressBar1.percent:=40;
  Application.CreateForm(Tbestellung, bestellung);
  Application.CreateForm(TRechnung, Rechnung);
RzProgressBar1.percent:=60;
  Application.CreateForm(Talte_bestellungen, alte_bestellungen);
  Application.CreateForm(TMitarbeiter, Mitarbeiter);
RzProgressBar1.percent:=80;
  Application.CreateForm(TArtikel, Artikel);
  Application.CreateForm(TAuftragsverwaltung, Auftragsverwaltung);
RzProgressBar1.percent:=100;
RzProgressBar1.visible:=false;

  Finally
// SplashScreen Fenster freigeben
 Form1.InitializationDone := True;
end;
// while form1 <> nil do
// Application.ProcessMessages;
  Application.Run;
end.

Danke für eure Mühe, aber nach 2 Tagen Google und Forum durchsuchen hab ich jetzt aufgegeben und frage dann doch ... ;-((
Is zwar schon etwas her.
Aber: Ich würde folgendes machen.
Erstmal solltest du verstehen, was "with" macht. Dann solltest du wissen, was ".Create" für auswirkungen hat, und dann ist es ganz einfach

Ich mach das mal ganz kurz:
Delphi-Quellcode:
Form1 := TForm1.Create(Application);
with Form1 do // Du arbeitest mit dem Objekt bzw. der Instanz "Form1" und nicht mit einem neuen Objekt!
  try
    // Fenster erstellen
    ...
    // Hier nun die Progressbar weitergehen lassen ^^
    RzProgressBar1.Percent := <0..100>
    // Und jedesmal NEUZEICHNEN
    RzProgressBar1.Repaint;

    // Und nochmal
    // Fenster erstellen
    ...
    // Hier nun die Progressbar weitergehen lassen ^^
    RzProgressBar1.Percent := <0..100>
    // Und jedesmal NEUZEICHNEN
    RzProgressBar1.Repaint;

    // Und nochmal
    // Fenster erstellen
    ...
    // Hier nun die Progressbar weitergehen lassen ^^
    RzProgressBar1.Percent := <0..100>
    // Und jedesmal NEUZEICHNEN
    RzProgressBar1.Repaint;

    // Bis alle Fenster erstellt wurden!
  finally
    InitializationDone := true; // Kein Form1 weil du ja schon sagst, dass er überall "Form1" davorsetzen soll (with <...> do)
  end;

Application.Done;
Fabian
  Mit Zitat antworten Zitat
bacci
 
#84
  Alt 20. Mär 2008, 22:45
Vielen Dank,

auch für die gute Erklärung, werde das die Tage mal ausprobieren.
Melde mich dann nochmal.
Ich hab da noch ein Problem und zwar möchte ich, bevor er das alle macht erst testen lassen ob die Datenbankverbindung da ist, diese ist Extern (MySQL) und wenn die Verbindung nicht da ist soll er das "sozusagen" mit einer Meldung bekanntgeben und das Programm dann gar nicht erst öffnen, da es ein haufen fehlermeldungen gibt wenn die Verbindung nicht steht.

Dazu schreibe ich aber noch genaueres, kann gerade nicht an meinen Notebook ran wo alles drauf ist ;-(


Special TXH an xZise
  Mit Zitat antworten Zitat
Benutzerbild von Deltachaos
Deltachaos

 
Delphi 7 Personal
 
#85
  Alt 13. Mai 2008, 16:08
Ich glaube ich habe eine Möglichkeit die einfacher und schneller ist:

So geht's:

* Ein weiteres Formular erstellen. Dieses wird unser Splash Screen werden.
* Den Namen des Formulars z. B. in "SplashScreen" ändern. Dieser wird später noch verwendet.
* Diese Eigenschaften des Formulars ändern: BorderStyle auf bsNone und Position auf poScreenCenter
* Das Formular frei gestalten: Beschriftungen, Grafiken oder andere Komponenten hinzufügen.
* Im Menü: Projekt>>Optionen>>Formulare das Splash-Formular auf die rechte Seite bringen (als verfügbares/available Formular). Das Formular werden wir später nämlich dynamisch laden.
* Den Quelltext des Projekts (Hauptprogramm - nicht eine der Units!!!) anzeigen lassen. Dazu im Menü: Projekt>>Quellcode anschauen. Für Delphi kleiner Version 4: Ansicht>>Projekt-Quelltext.
* Folgenden Code nach der Begin-Anweisung einfügen:

SplashScreen := TSplashScreen.Create(Application);
SplashScreen.Show;
Application.Initialize; //diese Zeile existiert schon! - nicht noch mal rein
SplashScreen.Update;

* Nach der letzten Application.Create() und vor der Application.Run-Anweisung folgendes hinzufügen:

SplashScreen.Hide;
SplashScreen.Release;

* Das war's! Jetzt müsste der Splash Screen solange angezeigt werden, wie das Hauptformular lädt.
Und wenn man ihn für eine bestimmte Zeit anzeigen lassen möchte dann muss man nur in das Hauptforular an erster stelle ein sleep(3000); einfügen
Maximilian Ruta
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

 
Delphi 7 Enterprise
 
#86
  Alt 7. Jul 2008, 15:07
Hat auch jemand eine Lösung mti Delphi2007 und Application.MainFormOnTaskbar:=true?
Dort ist das Problem: wenn du MainFormOnTaskbar auf true stellst vor dem Application.Initialize, dann hat der SplashScreen keinen Taskbar-Eintrag. Stellt man MaiNFormOnTaskbar erst nach dem Anzeigen des SplashScreens auf true gibt es interessante Nebenwirkungen (zusätzlicher leerer Taskbar-Eintrag).
Gebe ich dem SplashScreen über CreateParams einen eigenen Taskbar-Eintrag und setze MainFormOnTaskbar wieder vor Initialize, dann kann es unter Vista passieren, dass es einen zweiten leeren Eintrag gibt ...
Dort schon jemand eine Möglichkeit gefunden?

Gruß,
Steffen
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von Cosamia
Cosamia

 
Delphi 2007 Professional
 
#87
  Alt 4. Aug 2008, 09:53
Zitat von MasterEvil:
Hat auch jemand eine Lösung mti Delphi2007 und Application.MainFormOnTaskbar:=true?
Dort ist das Problem: wenn du MainFormOnTaskbar auf true stellst vor dem Application.Initialize, dann hat der SplashScreen keinen Taskbar-Eintrag. Stellt man MaiNFormOnTaskbar erst nach dem Anzeigen des SplashScreens auf true gibt es interessante Nebenwirkungen (zusätzlicher leerer Taskbar-Eintrag).
Gebe ich dem SplashScreen über CreateParams einen eigenen Taskbar-Eintrag und setze MainFormOnTaskbar wieder vor Initialize, dann kann es unter Vista passieren, dass es einen zweiten leeren Eintrag gibt ...
Dort schon jemand eine Möglichkeit gefunden?

Gruß,
Steffen
selbiges Problem habe ich auch. Delphi 2007 verhält sich da unter Vista etwas seltsam.
  Mit Zitat antworten Zitat
derula

 
Delphi 7 Personal
 
#88
  Alt 26. Sep 2008, 04:25
Hi, keine Ahnung, ob das erwünscht ist, aber ich hätte ne Modifikation des Originaltutorials mit Fade-In /-Out. Und zwar wird dies über einen Thread gesteuert. Funktioniert, und es wird auch wie ich das sehen kann alles wieder ordnungsgemäß freigegeben.

DPR:
Delphi-Quellcode:
begin
  SplashForm := TSplashForm.Create(Application);
  try
    SplashForm.Show;
    SplashForm.Refresh;
    FadeThread := TFadeThread.Create(False);
    Application.Initialize;
    Application.CreateForm(TMainForm, MainForm);
  finally
    SplashForm.InitializationDone := True;
  end;
  Application.Run;
end.
SplashUnit.pas (bei mir):
Delphi-Quellcode:
type
  TSplashForm = class(TTntForm)
    SplashImage: TImage;
    SplashTimer: TTimer;
    CloseBtn: TTntButton;
    procedure SplashTimerTimer(Sender: TObject);
    procedure TntFormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure TntFormClose(Sender: TObject; var Action: TCloseAction);
  private
    FInitializationDone: Boolean;
    { Private declarations }
    procedure SetInitializationDone(const Value: Boolean);
  public
    { Public declarations }
    property InitializationDone: Boolean read FInitializationDone write SetInitializationDone;
  end;

type
  TFadeThread = class(TThread)
  private
    { Private-Deklarationen }
  protected
    procedure Execute; override;
  public
    FadeActive: Boolean;
  end;

var
  SplashForm: TSplashForm;
  FadeThread: TFadeThread;

implementation

{$R *.DFM}

procedure TFadeThread.Execute;
begin
  FadeActive := True;
  while (SplashForm <> nil) and not Terminated do
  begin
    if not SplashForm.InitializationDone or SplashForm.SplashTimer.Enabled then
    begin
      //Fade-In
      if SplashForm.AlphaBlendValue < 255 then
        SplashForm.AlphaBlendValue := SplashForm.AlphaBlendValue + 17
      else
        FadeActive := False;
    end else
    begin
      //Fade-Out
      if SplashForm.AlphaBlendValue > 0 then
        SplashForm.AlphaBlendValue := SplashForm.AlphaBlendValue - 17
      else
      begin
        FadeActive := False;
        Terminate;
        SplashForm.Close;
      end;
    end;
    Sleep(40);
  end;
end;

procedure TSplashForm.SetInitializationDone(const Value: Boolean);
begin
  FInitializationDone := Value;
  Close;
end;

procedure TSplashForm.SplashTimerTimer(Sender: TObject);
begin
  SplashTimer.Enabled := False;
  FadeThread.FadeActive := True;
end;

procedure TSplashForm.TntFormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  CanClose := FadeThread.Terminated;
end;

procedure TSplashForm.TntFormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  FadeThread := nil;
  Action := caFree;
  SplashForm := nil;
end;
Warum 17? Weil 17*15=255. ^^ Das Form muss natürlich vorher mit AlphaBlend := True bestückt werden.

In diesem Sinne: Viel Spaß (und gute Nacht *aufdieuhrseh*)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry

 
Delphi 2006 Professional
 
#89
  Alt 26. Sep 2008, 07:15
Naja, auf den ersten Blick ok. Auf den zweiten Blick sieht man das du im Thread auf ein VCL-Object zugreifst ohne den Zugriff zu syncronisieren. Dabei ist es mehr als wahrscheinlich das als Effekt davon später im Programm tolle Effekte auftreten.
Zudem verwendet dein Thread eine globale Variable um das Splashform zu finden. Wenn wir aber einmal bei Objecten sind macht es doch mehr sinn dem Thread gleich das Fenster mitzugeben um zu vermeiden das da irgendwann 2 Threads mal auf dem gleichen Fenster rumrödeln
Jens
  Mit Zitat antworten Zitat
derula

 
Delphi 7 Personal
 
#90
  Alt 26. Sep 2008, 08:10
Zitat von SirThornberry:
Naja, auf den ersten Blick ok. Auf den zweiten Blick sieht man das du im Thread auf ein VCL-Object zugreifst ohne den Zugriff zu syncronisieren. Dabei ist es mehr als wahrscheinlich das als Effekt davon später im Programm tolle Effekte auftreten.
Hmm ja, naja das Problem ist halt, dass in der ersten Hälfte, während das Programm noch lädt, nichts von den Event-Handlern de Form bedient wird. Also zumindest hatte ich einen Timer drin, und mein Splash hat sich nicht eingefadet. Ich hab irgendwie das gefühl, wenn man das mit Synchronize macht, blendet sich das Ding erst ein wenn sich das Hauptfenster auch öffnet... liege ich falsch?

Zitat von SirThornberry:
Zudem verwendet dein Thread eine globale Variable um das Splashform zu finden. Wenn wir aber einmal bei Objecten sind macht es doch mehr sinn dem Thread gleich das Fenster mitzugeben um zu vermeiden das da irgendwann 2 Threads mal auf dem gleichen Fenster rumrödeln
Hm, wäre einen Versuch Wert. Danke für die Tipps!

Edit: Habs jetzt mal so ummodelliert... und wie vermutet blendet sich die Form erst ein, wenn das Programm eh fertig geladen hat...

Delphi-Quellcode:
begin
  FadeThread := TFadeThread.Create(False);
  try
    Application.Initialize;
    Application.CreateForm(TMainForm, MainForm);
  finally
    FadeThread.InitializationDone := True;
  end;
  Application.Run;
end.
Delphi-Quellcode:
type
  TSplashForm = class(TForm)
    SplashImage: TImage;
    SplashTimer: TTimer;
    CloseBtn: TButton;
    procedure SplashTimerTimer(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TFadeThread = class(TThread)
  private
    { Private-Deklarationen }
    FInitializationDone: Boolean;
    FSplashForm: TSplashForm;
    procedure CreateForm;
    procedure DoFade;
    procedure SetInitializationDone(const Value: Boolean);
  protected
    procedure Execute; override;
  public
    FadeActive: Boolean;
    property InitializationDone: Boolean read FInitializationDone write SetInitializationDone;
  end;

var
  FadeThread: TFadeThread;

implementation

{$R *.DFM}

procedure TFadeThread.CreateForm;
begin
  FSplashForm := TSplashForm.Create(Application);
  FSplashForm.Show;
  FSplashForm.Refresh;
end;

procedure TFadeThread.DoFade;
begin
  if not FInitializationDone or FSplashForm.SplashTimer.Enabled then
  begin
    //Fade-In
    if FSplashForm.AlphaBlendValue < 255 then
      FSplashForm.AlphaBlendValue := FSplashForm.AlphaBlendValue + 17
    else
      FadeActive := False;
  end else
  begin
    //Fade-Out
    if FSplashForm.AlphaBlendValue > 0 then
      FSplashForm.AlphaBlendValue := FSplashForm.AlphaBlendValue - 17
    else
    begin
      FadeActive := False;
      Terminate;
      FSplashForm.Close;
      FSplashForm := nil;
    end;
  end;
end;

procedure TFadeThread.Execute;
begin
  FadeActive := True;
  Synchronize(CreateForm);
  while (FSplashForm <> nil) and not Terminated do
  begin
    Synchronize(DoFade);
    Sleep(40);
  end;
end;

procedure TFadeThread.SetInitializationDone(const Value: Boolean);
begin
  FInitializationDone := Value;
end;

procedure TSplashForm.SplashTimerTimer(Sender: TObject);
begin
  SplashTimer.Enabled := False;
  FadeThread.FadeActive := True;
end;

procedure TSplashForm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  CanClose := FadeThread.Terminated;
end;

procedure TSplashForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  FadeThread := nil;
  Action := caFree;
end;
Was mache ich falsch? Oder ist das Problem, dass meine Variante so gar nicht realisierbar ist? Ich hab hier einen anderen Thread verlinkt gefunden mit Fade-In, aber da wurde das ei OnAvtivate im selben Thread gemacht - was dazu führt, dass die Startzeit um die Fade-In-Zeit verlängert wird - aber ich wollte ja eigentlich zumindest die gefühlte Wartezeit verkürzen

Edit: Ich habe es jetzt mal wiefolgt gemacht: Die SplashForm wird in der DPR erzeugt und an den Thread zugewiesen (welcher erst nach der Zuweisung gestartet wird). Solange FInitializationDone noch auf false steht, wird ohne Synchronisierung gefadet, danach mit. Ich das in Ordnong? Oder nicht?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 9 von 10   « Erste     789 10      


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 21:40 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