www.pudn.com > VideoCam.rar > VideoUnit.pas
unit VideoUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Videocap,videodisp,vfw, StdCtrls, ExtCtrls, Buttons,syncobjs,IniFiles,
ExtDlgs; //Spin
type
TVideoForm = class(TForm)
Panel1: TPanel;
Btformat: TButton;
BtDriver: TButton;
Panel3: TPanel;
BTCompress: TBitBtn;
BitBtn1: TBitBtn;
BtSPict: TButton;
Button2: TButton;
ScrollBox1: TScrollBox;
VideoCap1: TVideoCap;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
SavePictureDialog1: TSavePictureDialog;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Panel2: TPanel;
imgDestinate: TImage;
PaintBox1: TPaintBox;
BitBtn2: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BtFormatClick(Sender: TObject);
procedure BtDriverClick(Sender: TObject);
procedure BTCompressClick(Sender: TObject);
procedure BtCapClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure BtSPictClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure VideoCap1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure VideoCap1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure VideoCap1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DrawBox(X, Y: Integer);
procedure BitBtn2Click(Sender: TObject);
private
MyHight: Integer;
MyWidth: Integer;
MyFlag: Boolean;
MyGet: Boolean;
{ Private-Deklarationen}
public
{ Public-Deklarationen}
end;
var
VideoForm: TVideoForm;
implementation
uses DlgTreiber;
{$R *.DFM}
type
TMyCustomControl = class(TCustomControl);
procedure TVideoForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
Myini: TInifile;
begin
VideoCap1.StopCapture;
Myini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'XYMis.ini');
Myini.WriteInteger('Driver','Index',VideoCap1.DriverIndex);
Myini.Free;
end;
//设置视频格式
procedure TVideoForm.BtFormatClick(Sender: TObject);
begin
VideoCap1.DlgVFormat;
end;
//选择设备
procedure TVideoForm.BtDriverClick(Sender: TObject);
var
DrvList: TStrings;
begin
DlgEinstell := TDlgEinstell.Create(Self);
drvList := GetDriverList;
dlgEinstell.Combobox1.Items := drvList;
VideoCap1.DriverOpen := False;
dlgEinstell.ComboBox1.Itemindex := VideoCap1.DriverIndex;
if DlgEinstell.ShowModal = mrOK then
begin
videoCap1.DriverIndex := dlgEinstell.combobox1.ItemIndex;
end;
VideoCap1.DriverOpen := True;
VideoCap1.Videopreview := True;
DlgEinstell.Free;
drvList.Clear;
drvList.Free;
end;
//压缩格式
procedure TVideoForm.BTCompressClick(Sender: TObject);
begin
VideoCap1.DlgVCompression;
end;
procedure TVideoForm.BtCapClick(Sender: TObject);
begin
VideoCap1.CapSingleFrame;
end;
//设置属性
procedure TVideoForm.BitBtn1Click(Sender: TObject);
begin
VideoCap1.DlgVSource;
end;
//存到剪贴板
procedure TVideoForm.Button2Click(Sender: TObject);
begin
VideoCap1.GrabFrameNoStop;
VideoCap1.SaveToClipboard;
end;
//存为BMP
procedure TVideoForm.BtSPictClick(Sender: TObject);
begin
if SavePictureDialog1.Execute then
begin
VideoCap1.SingleImageFile := SavePictureDialog1.FileName;
VideoCap1.GrabFrameNoStop;
if not VideoCap1.SaveAsDib then
MessageBox(Handle,'不能保存图片,请与管理员联系! ','',48)
else
MessageBox(Handle,'图片保存成功! ','',64);
end;
end;
//存为AVI
procedure TVideoForm.Button1Click(Sender: TObject);
begin
if VideoCap1.CapInProgess then
begin
VideoCap1.StopCapture;
end
else
begin
//VideoCap1.VideoFileName := '';
VideoCap1.StartCapture;
end;
end;
//是否满屏显示
procedure TVideoForm.CheckBox1Click(Sender: TObject);
begin
//videoCap1.PreviewScaleToWindow := CheckBox1.Checked;
end;
procedure TVideoForm.FormCreate(Sender: TObject);
var
Myini: TIniFile;
begin
Screen.Cursor := crHourGlass;
Myini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'XYMis.ini');
VideoCap1.Driverindex := Myini.ReadInteger('Driver','Index',-1);
Myini.Free;
VideoCap1.VideoPreview := True;
Height := Height - Panel1.Height;
MyWidth := 150;
MyHight := 180;
MyFlag := False;
MyGet := False;
Screen.Cursor := crDefault;
end;
procedure TVideoForm.FormShow(Sender: TObject);
begin
VideoCap1.DriverOpen := True;
end;
//开始播放
procedure TVideoForm.Button3Click(Sender: TObject);
begin
VideoCap1.VideoPreview := True;
end;
procedure TVideoForm.SpeedButton1Click(Sender: TObject);
begin
if SpeedButton1.Visible then
begin
Height := Height + Panel1.Height;
Panel1.Visible := True;
SpeedButton1.Visible := False;
SpeedButton2.Visible := True;
end;
end;
procedure TVideoForm.SpeedButton2Click(Sender: TObject);
begin
if SpeedButton2.Visible then
begin
Height := Height - Panel1.Height;
Panel1.Visible := False;
SpeedButton2.Visible := False;
SpeedButton1.Visible := True;
end;
end;
var
oX, oY: Integer;
procedure TVideoForm.VideoCap1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
VideoCap1.VideoPreview := False;
Application.ProcessMessages;
MyFlag := True;
PaintBox1.Visible := True;
oX := -1;
oY := -1;
end;
procedure TVideoForm.VideoCap1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if not MyFlag then Exit;
if (oX <> -1) and (oY <> -1) then DrawBox(oX, oY);
Label5.Caption := IntToStr(X);
Label6.Caption := IntToStr(Y);
//VideoCap1.Refresh;
if (X < MyWidth) or (Y < MyHight) or (X > VideoCap1.Width) or ( Y > VideoCap1.Height) then
begin
oX := -1;
oY := -1;
MyGet := False;
Screen.Cursor := crDefault;
Exit;
end
else
begin
Screen.Cursor := -21;
end;
MyGet := True;
PaintBox1.Canvas.CopyRect(imgDestinate.ClientRect, TMyCustomControl(VideoCap1).Canvas, Rect(X-MyWidth,Y-MyHight,X,Y));
DrawBox(X, Y);
oX := X;
oY := Y;
end;
procedure TVideoForm.VideoCap1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
P: TPoint;
begin
if (oX <> -1) and (oY <> -1) then DrawBox(oX, oY);
P := Point(X, Y);
PaintBox1.Visible := False;
if MyGet then
imgDestinate.Canvas.CopyRect(imgDestinate.ClientRect, TMyCustomControl(VideoCap1).Canvas, Rect(X-MyWidth,Y-MyHight,X,Y));
VideoCap1.VideoPreview := True;
Screen.Cursor := crDefault;
MyFlag := False;
MyGet := False;
end;
procedure TVideoForm.DrawBox(X, Y: Integer);
begin
with TMyCustomControl(VideoCap1).Canvas do
begin
Pen.Color := clWhite;
Pen.Width := 1;
Pen.Mode := pmXor;
Brush.Style := bsClear;
Rectangle(X-MyWidth,Y-MyHight,X,Y);
end;
end;
procedure TVideoForm.BitBtn2Click(Sender: TObject);
begin
Close;
end;
end.