AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Hilfe Bei Video Program
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe Bei Video Program

Ein Thema von serasa · begonnen am 30. Nov 2009 · letzter Beitrag vom 1. Feb 2010
Antwort Antwort
serasa

Registriert seit: 5. Feb 2009
3 Beiträge
 
#1

Hilfe Bei Video Program

  Alt 30. Nov 2009, 19:28
Hallo zusammen ich habe ein kleines Program geschrieben für eine video aufnahme, welches in einem teil so ausschaut:

Delphi-Quellcode:
procedure TForm1.StartesequenzielleAufnahme1Click(Sender: TObject);
begin
  Aufnahme:=true; AnsichtUpdate1Click(self); //aktualisiere Menüs...
  if form1.IniEinzelbild then begin
     // Foto - Sequenz
     timer1.Interval:=form1.IniIntervall*1000;
     TimerStatus:=TSBildFolge;
     timer1.Enabled:=true;
  end else begin
     // Video - Folge
     TimerStatus:=TSvideoFolge;
     repeat
       label1.Caption:='Videoaufnahme';
       NextDateiname;
       EinVideo; // aufnehmen
       Timer1.Interval:=form1.IniEinzelVideoDauer*1000;
       timer1.Enabled:=true;
       repeat
         Application.ProcessMessages; //Abbruchmöglichkeit
       until TimerStatus<>TSvideoFolge;
       label1.Caption:='Videoerholpause';
       EinVideoStop; // erholphase
       Timer1.Interval:=form1.IniErholzeit;
       timer1.Enabled:=true;
       repeat
         Application.ProcessMessages; //Abbruchmöglichkeit
         label1.Caption:=inttostr(timer1.interval)+'x'+inttostr(Timerstatus);
       until TimerStatus<>TSvideoFolgePause;
     until TimerStatus=TSStopAnforderung; // abbruch?
     Aufnahme:=false;
     AnsichtUpdate1Click(self);
  end;
end;
nun wird das ganze mit hilfe einer optokoppler Karte und einer kleinen steuerspannung über einen taster gestartet,

der teil mit dem programm code müsste so aussehen laut hersteller
Delphi-Quellcode:
while QApiExtReadDl1(...) = 0 do
  Application.ProcessMessages;
für mich ist nun die frage wie ich den teil für die aufnahme einbinden muss, damit die aufnahme rein über den taster gemacht wird ohne das ich nun vorher die aufnahme aktivieren muss. also das es nur über den tastendruck aktiviert wird.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Hilfe Bei Video Program

  Alt 3. Dez 2009, 12:28
Hallo,

Zitat:
und einer kleinen steuerspannung über einen taster
Was für ein Taster ?
wie wird er denn angesteuert ?

Zitat:
der teil mit dem programm code müsste so aussehen laut hersteller
Welcher Programm-Code, die "Aufnahme" ?


Ein bissel mehr Info bitte.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Hilfe Bei Video Program

  Alt 3. Dez 2009, 13:55
Das mit den paar mehr nötigen Infos wurde ja schon gesagt,
darum solange erstmal was Anderes:

Deine Warteschleifen laßten die CPU zu 100% aus, da sie nichts anderes Machen, als durchgehend etwas abzufragen und notfalls auszuführen.
'ne kleine Pause schafft Abhilfe
Delphi-Quellcode:
repeat
  Sleep(50);
  Application.ProcessMessages;
until TimerStatus<>TSvideoFolge;
...
repeat
  Sleep(50);
  Application.ProcessMessages;
  label1.Caption:=inttostr(timer1.interval)+'x'+inttostr(Timerstatus);
until TimerStatus<>TSvideoFolgePause;
Und bei Problemen (Exceptions) dürften einige Dinge nicht ordnungsgemäß beendet werden
z.B. würde Aufnahme auf True verbleiben.
ein paar Try-Finally-Schutzblöcke würden hier helfen.

Wird Timer1 auch irgendwann wieder abgestellt?

Ansonsten scheint mir der Programmablauf innerhalb des einen Buttons unglücklich gewählt und ich wirde darin nur den Start einleiten und den Rest über verschiedene/entsprechende Ereignisse steuern.
$2B or not $2B
  Mit Zitat antworten Zitat
serasa

Registriert seit: 5. Feb 2009
3 Beiträge
 
#4

Re: Hilfe Bei Video Program

  Alt 4. Dez 2009, 18:55
Zitat von hoika:
Hallo,

Zitat:
und einer kleinen steuerspannung über einen taster
Was für ein Taster ?
wie wird er denn angesteuert ?

Zitat:
der teil mit dem programm code müsste so aussehen laut hersteller
Welcher Programm-Code, die "Aufnahme" ?


Ein bissel mehr Info bitte.


Heiko

taster ist ein schließer ganz herkömmlich mit einer steuerspannung von 12volt, der steuert eine optokoplerkarte an, die wurde im pc mit usb verbunden. mit dem code

Delphi-Quellcode:
while QApiExtReadDl1(...) = 0 do
  Application.ProcessMessages;
kann man nun abfragen und was damit anstellen, habe das so probiert:

Delphi-Quellcode:
Label1.Caption := 'Bereit, warte...';
while QApiExtReadDl1(...) = 0 do
  Application.ProcessMessages;
ShowMessage('ausgelöst');
funktioniert auch sehr gut.



Zitat von himitsu:
Das mit den paar mehr nötigen Infos wurde ja schon gesagt,
darum solange erstmal was Anderes:

Deine Warteschleifen laßten die CPU zu 100% aus, da sie nichts anderes Machen, als durchgehend etwas abzufragen und notfalls auszuführen.
'ne kleine Pause schafft Abhilfe
Delphi-Quellcode:
repeat
  Sleep(50);
  Application.ProcessMessages;
until TimerStatus<>TSvideoFolge;
...
repeat
  Sleep(50);
  Application.ProcessMessages;
  label1.Caption:=inttostr(timer1.interval)+'x'+inttostr(Timerstatus);
until TimerStatus<>TSvideoFolgePause;
Und bei Problemen (Exceptions) dürften einige Dinge nicht ordnungsgemäß beendet werden
z.B. würde Aufnahme auf True verbleiben.
ein paar Try-Finally-Schutzblöcke würden hier helfen.

Wird Timer1 auch irgendwann wieder abgestellt?

Ansonsten scheint mir der Programmablauf innerhalb des einen Buttons unglücklich gewählt und ich wirde darin nur den Start einleiten und den Rest über verschiedene/entsprechende Ereignisse steuern.
leider bin ich noch ziehmlich weit am anfang von richtigem programier verständnis^^ aber das erklärt schonmal warum die cpu immer ausgelastet ist danke für den teil^^

zum eigendlichen dann noch ich wollte das wie bei dem teil mit dem ausgelöst
Delphi-Quellcode:
Label1.Caption := 'Bereit, warte...';
while QApiExtReadDl1(...) = 0 do
  Application.ProcessMessages;
ShowMessage('ausgelöst');
hier wurde nun nach knopfdruck das ausgelöst angezeigt und ich wollte das nun so haben , das nun die aufnahme startet ohne irgendwelche vorbedingungen^^
  Mit Zitat antworten Zitat
serasa

Registriert seit: 5. Feb 2009
3 Beiträge
 
#5

Re: Hilfe Bei Video Program

  Alt 1. Feb 2010, 17:38
So da leider noch einwas offen steht und ich nun nichtmehr weiter weiß^^

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls,
  inifiles,
  VideoCap, StdCtrls, Buttons, ComCtrls, Gauges,
  VideoCapErweiterung;


type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Beenden1: TMenuItem;
    Quelle1: TMenuItem;
    Einstellungen1: TMenuItem;
    Recorder1: TMenuItem;
    PanelStatus: TPanel;
    Ansicht1: TMenuItem;
    N1zu11: TMenuItem;
    Status1: TMenuItem;
    AnsichtUpdate1: TMenuItem;
    PanelVideo: TPanel;
    LabelVideo: TLabel;
    Timer1: TTimer;
    LabelAufnahmeID: TLabel;
    format1: TMenuItem;
    display1: TMenuItem;
    source1: TMenuItem;
    Aufnahme2: TMenuItem;
    Enzelaufnahme1: TMenuItem;
    N2: TMenuItem;
    StartesequenzielleAufnahme1: TMenuItem;
    Stop2: TMenuItem;
    Label1: TLabel;
    Button1: TButton;
    Info1: TMenuItem;
    AGElektro1: TMenuItem;
    procedure AnsichtUpdate1Click(Sender: TObject);
    procedure Status1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Video2;
    procedure CapStatus(Sender: TObject);
    procedure Beenden1Click(Sender: TObject);
    procedure Recorder1Click(Sender: TObject);
    procedure Hilfe1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure format1Click(Sender: TObject);
    procedure display1Click(Sender: TObject);
    procedure source1Click(Sender: TObject);
    procedure Enzelaufnahme1Click(Sender: TObject);
    procedure StartesequenzielleAufnahme1Click(Sender: TObject);
    procedure Stop2Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure AGElektro1Click(Sender: TObject);
  private
    { Private declarations }
    Gestartet:boolean;
    TimerStatus:integer;
    RecorderID:integer;
    Aufnahme:boolean;
    AktDateiname:string;
    IniFile:TIniFile;
    IniDateiname:String;
    IniZielPfad:string;
    IniDateiID:integer;
    IniIntervall:Integer;
    IniEinzelVideoDauer:integer;
    IniAnzahlFrames:integer;
    IniErholzeit:integer;
    IniEinzelbild:Boolean;
    IniAutoStart:boolean;
    m_handle: integer;
    procedure IniDatei(save:boolean);
    procedure EinFoto;
    procedure EinVideo;
    procedure EinVideoStop;
    procedure NextDateiname;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses UnitRecordereinstellungen;
{$I qlib.pas}
{$R *.dfm}

const TSLeerlauf=0;
        TSErholzeit=10;
        TSBildFolge=11;
        TSEinzelvideo=20;
        TSvideoFolge=30;
        TSvideoFolgePause=31;
        TSStopAnforderung=32;


procedure TForm1.FormCreate(Sender: TObject);
var n:integer;
    device: integer;
begin
  device := 0;
  m_handle := QAPIExtOpenCard(USBOPTO8LC, device);
  Gestartet:=false;
  timer1.Enabled:=false;
  //Formateinstellungen:
  DateSeparator:='-';
  TimeSeparator:='-';
  ShortDateFormat := 'dd/mm/yyyy';
  ShortTimeFormat := 'hh/nn/ss';
  //
  aufnahme:=false;
  if Paramcount>0 then begin
    val(Paramstr(1),recorderID,n)
  end;
  Form1.Caption:='Videorecorder ID: '+inttostr(RecorderID);
  //Inidatei
  IniDateiName:=ExtractFilePath(ParamStr(0))+'Rec'+inttostr(RecorderID)+'.ini'; //IniDateiName:='Rec'+inttostr(RecorderID)+'.ini'; IniDateiName:=expandfilename(IniDateiName);
  IniDatei(false);//lesen
end;


procedure TForm1.FormShow(Sender: TObject);
begin
  AnsichtUpdate1Click(self);
  CapCloseDriver;
  Video2;
  if not Gestartet then begin
    Gestartet:=true;
    if form1.IniAutoStart then StartesequenzielleAufnahme1Click(self);
  end;
end;

procedure TForm1.IniDatei(save:boolean);
const CheckConst=5;
var s:String;
        IniChkWert:Integer;
        Procedure SetWerte;
        begin
           IniDateiID :=0;
           IniIntervall:=120;
           IniEinzelVideoDauer:=3600;
           IniAnzahlFrames:=4000;
           IniEinzelbild:=true;
           IniAutoStart:=false;
           IniErholzeit:=1000;
           IniZielPfad:=ExtractFilePath(ParamStr(0));
        end;
begin
  if not save then SetWerte;
  IniFile:=tinifile.Create(IniDateiname);
  try
      s:='Aktuell'; //[Sektion]
      if save then begin // Schreiben
      end else begin // Lesen
        IniDateiID:=iniFile.ReadInteger(s,'NextDateiID',IniDateiID);
      end;
      s:='Recorder'; //[Sektion]
      if save then begin // Schreiben
        IniFile.WriteInteger(s,'Intervall',IniIntervall);
        IniFile.WriteInteger(s,'EinzelVideoDauer',IniEinzelVideoDauer);
        IniFile.WriteInteger(s,'AnzahlFrames',IniAnzahlFrames);
        IniFile.WriteBool(s,'Einzelbild',IniEinzelbild);
        IniFile.WriteBool(s,'Autostart',IniAutostart);
        IniFile.WriteInteger(s,'Erholzeit',IniErholzeit);
        Inifile.WriteString(s,'ZielPfad',IniZielPfad);
      end else begin // Lesen
        IniIntervall:=iniFile.ReadInteger(s,'Intervall',0);
        IniEinzelVideoDauer:=iniFile.ReadInteger(s,'EinzelVideoDauer',0);
        IniAnzahlFrames:=iniFile.ReadInteger(s,'AnzahlFrames',0);
        IniEinzelbild:=iniFile.ReadBool(s,'Einzelbild',false);
        IniAutostart:=iniFile.ReadBool(s,'Autostart',false);
        IniErholzeit:=iniFile.ReadInteger(s,'Erholzeit',0);
        IniZielPfad:=inifile.ReadString(s,'ZielPfad','');
      end;
      s:='Chk'; //[Sektion]
      if save then begin // Schreiben
        IniFile.WriteInteger(s,'Wert',CheckConst);
      end else begin // Lesen
        IniChkWert:=iniFile.ReadInteger(s,'Wert',0);
      end;
  finally
      Inifile.Free
  end;
  // Erkennung Lesefehler - Bei Fehler - Grundeinstellungen
  if (not save) and (IniChkWert<>CheckConst) then setwerte;
end;

procedure TForm1.AnsichtUpdate1Click(Sender: TObject);
begin
 Beenden1.Enabled:=not Aufnahme;
 einstellungen1.Enabled:= not Aufnahme;
 Stop2.Enabled:=Aufnahme;
 form1.StartesequenzielleAufnahme1.Enabled:=not Aufnahme;
 form1.Enzelaufnahme1.Enabled:=not Aufnahme;

 PanelStatus.Visible:=status1.Checked;
 if not Aufnahme then label1.Caption:='';
end;

procedure TForm1.Video2;
var
  MyCapStatusProc : TCapStatusProc;
begin
     // Start CAP - Video

     CapSetVideoArea( PanelVideo );
     CapSetInfoLabel( LabelVideo );
     MyCapStatusProc := CAPStatus;
     CapSetStatusProcedure( MyCapStatusProc );

     if CapOpenDriver then
     begin
          CapSetCapSec(15 * 3);
     CapShow;
     end;
end;

procedure TForm1.CapStatus(Sender: TObject);
begin
; form1.PanelVideo.Color := clBtnFace;
  form1.PanelVideo.Refresh;
end;
procedure TForm1.Status1Click(Sender: TObject);
begin form1.AnsichtUpdate1.Click; end;

procedure TForm1.Beenden1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Recorder1Click(Sender: TObject);
begin
  //Daten ans Fenster
  form2.LabeledEditPfad.Text:=inizielpfad;
  form2.CheckBoxAutostart.Checked:=iniautostart;
  form2.intervall:=IniIntervall;
  form2.frames:=IniAnzahlFrames;
  form2.einzelbilder:=IniEinzelbild;
  form2.EinzelVideoDauer:=IniEinzelVideoDauer;
  form2.erholzeit:=IniErholzeit;
  //fenster zeigen
  form2.LabelRecID.Caption:=inttostr(RecorderID);
  form2.showmodal;
  //Daten speichern
  if form2.save then begin
    IniZielPfad:=form2.LabeledEditPfad.Text;
    IniIntervall:=form2.intervall;
    IniAnzahlFrames:=form2.frames;
    IniEinzelbild:=form2.einzelbilder;
    IniAutoStart:=form2.CheckBoxAutostart.Checked;
    IniEinzelVideoDauer:=form2.EinzelVideoDauer;
    IniErholzeit:=form2.erholzeit;
    inidatei(true); // Ini speichern
  end;
end;

procedure TForm1.Hilfe1Click(Sender: TObject);
begin
  Showmessage( 'Recorder ');
end;

procedure TForm1.format1Click(Sender: TObject);
begin Capdlgvformat end;

procedure TForm1.display1Click(Sender: TObject);
begin CapdlgVDisplay end;

procedure TForm1.source1Click(Sender: TObject);
begin capdlgvsource end;

procedure TForm1.NextDateiname;
var n:integer;
begin
  AktDateiname:=inttostr(IniDateiID); n:=length(AktDateiname);
  if n<10 then repeat AktDateiname:='0'+AktDateiname;inc(n); until n=10;
  AktDateiname:=inttostr(RecorderID)+' '+AktDateiname+' '+DateToStr(Now)+' '+TimeToStr(Now);
  form1.LabelAufnahmeID.Caption:=AktDateiname;
  AktDateiname:=IniZielPfad+AktDateiname;
  if form1.IniEinzelbild then AktDateiname:=AktDateiname+'.bmp'
  else AktDateiname:=AktDateiname+'.avi';
  inc(IniDateiID);
  IniFile:=tinifile.Create(IniDateiname);
  try IniFile.WriteInteger('Aktuell','NextDateiID',IniDateiID); finally Inifile.Free end;
end;

procedure TForm1.EinFoto;
begin
  CapSetSingleImageFileName( AktDateiname );
  CapGrabSingleFrame;
  CapSetVideoLive;
end;

procedure TForm1.EinVideo;
begin
  Videocaperweiterung.NewVideoFileName(AktDateiname);
  CapSetCapSec(form1.IniAnzahlFrames);
  CapStart;
  CapSetVideoLive;
end;

procedure TForm1.EinVideoStop;
begin
  // Stoppen
  videocap.CapStop;
  // Warteschleife.. bis gestoppt

  //
  CapSetVideoLive;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  case Timerstatus of
    TSErholzeit : begin
                        timer1.Enabled:=false; // nur 1x Erholzeit
                        timerstatus:=tsLeerlauf;
                        Aufnahme:=false;
                        AnsichtUpdate1Click(self);
                      end;
    TSBildFolge : begin
                        NextDateiname;
                        EinFoto;
                      end;
    TSEinzelvideo : begin
                        timer1.Enabled:=false;
                        timerstatus:=tsErholzeit;
                        EinVideoStop;
                        //Timmerneustart f. Erholzeit
                        timer1.Interval:=IniErholzeit;
                        timer1.Enabled:=true;
                      end;
    TSvideoFolge : begin
                        timer1.Enabled:=false;
                        timerstatus:=TSvideoFolgePause;
                      end;
    TSvideoFolgePause:begin
                        timer1.Enabled:=false;
                        timerstatus:=TSvideoFolge;
                      end;
    TSStopAnforderung:begin
                      end;
  end;
end;



procedure TForm1.Enzelaufnahme1Click(Sender: TObject);
  begin
   while QAPIExtReadDI32(m_handle, 0, 0) = 0 do
    Application.ProcessMessages;
    Aufnahme:=true; AnsichtUpdate1Click(self); //aktualisiere Menüs...
    NextDateiname;
  if form1.IniEinzelbild then begin
     // nur ein Foto
     TimerStatus:=TSErholzeit;
     timer1.Interval:=IniErholzeit;
     EinFoto;
     timer1.Enabled:=true;
  end else begin
     // nur ein Video
     TimerStatus:=TSEinzelVideo;
     timer1.Interval:=form1.IniEinzelVideoDauer*1000;
     EinVideo;
     timer1.Enabled:=true;
  end;
 end;
end;
procedure TForm1.StartesequenzielleAufnahme1Click(Sender: TObject);
begin
  repeat
  Sleep(50);
  Application.ProcessMessages;
until TimerStatus<>TSvideoFolge;
  Aufnahme:=true; AnsichtUpdate1Click(self); //aktualisiere Menüs...
  if form1.IniEinzelbild then begin
     // Foto - Sequenz
     timer1.Interval:=form1.IniIntervall*1000;
     TimerStatus:=TSBildFolge;
     timer1.Enabled:=true;
  end else begin
     // Video - Folge
     TimerStatus:=TSvideoFolge;
     repeat
       label1.Caption:='Videoaufnahme';
       NextDateiname;
       EinVideo; // aufnehmen
       Timer1.Interval:=form1.IniEinzelVideoDauer*1000;
       timer1.Enabled:=true;
       repeat
         Application.ProcessMessages; //Abbruchmöglichkeit
       until TimerStatus<>TSvideoFolge;
       label1.Caption:='Videoerholpause';
       EinVideoStop; // erholphase
       Timer1.Interval:=form1.IniErholzeit;
       timer1.Enabled:=true;
       repeat
         Application.ProcessMessages; //Abbruchmöglichkeit
         label1.Caption:=inttostr(timer1.interval)+'x'+inttostr(Timerstatus);
       until TimerStatus<>TSvideoFolgePause;
     until TimerStatus=TSStopAnforderung; // abbruch?
     Aufnahme:=false;
     AnsichtUpdate1Click(self);
     repeat
  Sleep(50);
  Application.ProcessMessages;
  label1.Caption:=inttostr(timer1.interval)+'x'+inttostr(Timerstatus);
until TimerStatus<>TSvideoFolgePause
  end;
end;

procedure TForm1.Stop2Click(Sender: TObject);
begin
  case Timerstatus of
    TSErholzeit : begin
                      end;
    TSBildFolge : begin
                        timer1.Enabled:=false;
                        Timerstatus:=TSLeerlauf;
                        Aufnahme:=false; AnsichtUpdate1Click(self); //aktualisiere Menüs...
                      end;
    TSEinzelvideo : begin
                        timer1.Enabled:=false;
                        timer1timer(self);
                      end;
    TSvideoFolge : begin
                        Timerstatus:=TSStopAnforderung;
                      end;
    TSVideoFolgePause:begin
                        Timerstatus:=TSStopAnforderung;
    end;
  end;

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if Aufnahme then canclose:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  case Timerstatus of
    TSErholzeit : begin
                      end;
    TSBildFolge : begin
                        timer1.Enabled:=false;
                        Timerstatus:=TSLeerlauf;
                        Aufnahme:=false; AnsichtUpdate1Click(self); //aktualisiere Menüs...
                      end;
    TSEinzelvideo : begin
                        timer1.Enabled:=false;
                        timer1timer(self);
                      end;
    TSvideoFolge : begin
                        Timerstatus:=TSStopAnforderung;
                      end;
    TSVideoFolgePause:begin
                        Timerstatus:=TSStopAnforderung;
                      end;
  end;
 end;
procedure TForm1.AGElektro1Click(Sender: TObject);
begin
showmessage ('Bereitgestellt');
end;

end.
So die videoaufnahme klapt nun soweit, sogar mit abfragen des Optokopplerkarten Signales. Nur leider muss man im Menü erst einmal auf Einzelaufnahme klicken damit man dann mit dem externen taster die aufnahme auslöst. ich wollte aber das ganze nun so gestalten das es sofort auf tastendruck aufnimmt ohne das ich vorher im menü was aktiviere, nur leider weiß ich nicht wie man das anstellen soll.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:50 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