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.