www.pudn.com > remoteavi.rar > Unit1.cpp


//--------------------------------------------------------------------------- 
 
#include  
#pragma hdrstop 
 
#include "Unit1.h" 
#include  
#include "Unit2.h" 
#include "Unit4.h" 
#include  
#include  
//--------------------------------------------------------------------------- 
#pragma package(smart_init) 
#pragma resource "*.dfm" 
#define max(a, b)  (((a) > (b)) ? (a) : (b))   
TForm1 *Form1; 
bool IS_PREVIEW; 
bool IS_FULLSCREEN; 
bool IS_RECORD; 
HWND vcHWND; 
int CameraMode; 
DWORD idThread ; 
HANDLE m_hListenThread ; 
DWORD WINAPI ThreadRecord(LPVOID lpParam); 
//--------------------------------------------------------------------------- 
__fastcall TForm1::TForm1(TComponent* Owner) 
        : TForm(Owner) 
{ 
IS_PREVIEW = false; 
IS_FULLSCREEN = false; 
IS_RECORD = false; 
} 
//--------------------------------------------------------------------------- 
 
 
void __fastcall TForm1::N7Click(TObject *Sender) 
{ 
if(IS_PREVIEW) 
{ 
 capCaptureAbort(vcHWND); 
 capDriverDisconnect(vcHWND); 
 //DestroyWindow(vcHWND); 
 IS_PREVIEW = false; 
 N9->Checked = false; 
 N12->Enabled = false; 
 N13->Enabled = false; 
 N10->Enabled = false; 
  N14->Enabled = false; 
 
} 
else 
{ 
N7->Caption = "停止"; 
N9->Checked = true; 
  bool ScanDriver = false; 
 
 for(int i=0;i<10;i++) 
 { 
  ScanDriver=capDriverConnect(vcHWND,i); 
  if(ScanDriver) break; 
 } 
  if(!ScanDriver) 
   ShowMessage("驱动程序没有找到!"); 
 
 
  if (CameraMode==0) 
  { 
  //capOverlay(vcHWND, true); 
    capPreviewScale(vcHWND,true); 
   capPreviewRate(vcHWND,33);    //设置预览速率 
    
   capPreview(vcHWND,true); 
 
  } 
  else 
  { 
   capOverlay(vcHWND,true); 
  } 
 
IS_PREVIEW = true; 
N12->Enabled = true; 
N13->Enabled = true; 
N10->Enabled = true; 
N14->Enabled = true; 
} 
 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::FormCreate(TObject *Sender) 
{ 
vcHWND = capCreateCaptureWindow ( "Capture Window", 
 WS_CHILD|WS_VISIBLE ,0,0,Width ,Height  ,Handle, 0);  //创建窗口 
 
 
 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::FormResize(TObject *Sender) 
{ 
 
SetWindowPos(vcHWND,0,Form1->Left,Form1->Top+46,Form1->ClientWidth  ,Form1->ClientHeight ,SWP_NOMOVE|SWP_NOZORDER); 
Form1->Update() ; 
 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::N6Click(TObject *Sender) 
{ 
/*if(!IS_FULLSCREEN) 
{ 
 
ShowWindow(FindWindow("Shell_TrayWnd",0 ),SW_HIDE); 
ShowWindow(Form1->Handle  ,SW_MAXIMIZE); 
ShowWindow(vcHWND  ,SW_MAXIMIZE); 
SetWindowPos(vcHWND,0,0,0,Screen->Width  ,Screen->Height  ,SWP_NOMOVE|SWP_NOZORDER); 
 
 
N6->Checked = true; 
N10->Checked = true; 
IS_FULLSCREEN = true; 
 
} 
else 
{ 
ShowWindow(FindWindow("Shell_TrayWnd",0 ),SW_SHOW); 
SetWindowPos(vcHWND,0,0,0,640 ,480 ,SWP_NOMOVE|SWP_NOZORDER); 
Form1->Update() ; 
IS_FULLSCREEN = false; 
N6->Checked = false; 
N10->Checked = false; 
} */ 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::N9Click(TObject *Sender) 
{ 
N7->Click(); 
} 
//---------------------------------------------------------------------------} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) 
{ 
//ShowWindow(FindWindow("Shell_TrayWnd",0 ),SW_SHOW);         
} 
//--------------------------------------------------------------------------- 
 
 
 
void __fastcall TForm1::OnMove(TMessage &Message) 
{  
} 
 
//--------------------------------------------------------------------------- 
 
void __fastcall TForm1::N5Click(TObject *Sender) 
{ 
Application->Terminate() ; 
} 
//--------------------------------------------------------------------------- 
 
void __fastcall TForm1::N11Click(TObject *Sender) 
{ 
N5->Click() ; 
} 
//--------------------------------------------------------------------------- 
 
 
 
void __fastcall TForm1::N12Click(TObject *Sender) 
{ 
 
 if(IS_PREVIEW) 
 { 
 
 
 String FileName="temp.jpg"; 
 Graphics::TBitmap *Source= new Graphics::TBitmap; 
 TCanvas *MyCanvas= new TCanvas; 
 TRect rect = ClientRect; 
 HDC dc = GetDC(vcHWND); 
 MyCanvas->Handle = dc; 
 Source->Width = rect.Right - rect.Left; 
 Source->Height = rect.Bottom - rect.Top; 
 
 Source->Canvas->CopyRect(rect,MyCanvas,rect); 
 Source->PixelFormat=pf24bit; 
 TJPEGImage* JPG=new TJPEGImage(); 
 JPG->Assign(Source); 
 JPG->SaveToFile(FileName); 
 ReleaseDC(0,dc); 
 delete Source; 
 delete MyCanvas; 
 delete JPG; 
 ShowMessage("图片已经保存为temp.jpg!"); 
} 
} 
//--------------------------------------------------------------------------- 
 
 
 
void __fastcall TForm1::N8Click(TObject *Sender) 
{ 
AboutBox->Show() ; 
} 
//--------------------------------------------------------------------------- 
 
void __fastcall TForm1::N13Click(TObject *Sender) 
{ 
Form4->Show() ; 
} 
//--------------------------------------------------------------------------- 
 
 
int TForm1::SetRate(int rate) 
{ 
        //TODO: Add your source code here 
 //capPreviewRate(vcHWND,rate);    //设置速率 
CAPTUREPARMS CaptureParms; 
 
float FramesPerSec = (float)rate; 
 
 
capCaptureGetSetup(vcHWND, &CaptureParms, sizeof(CAPTUREPARMS)); 
 
 
CaptureParms.dwRequestMicroSecPerFrame = (DWORD) (1.0e6 /FramesPerSec); 
 
capCaptureSetSetup(vcHWND, &CaptureParms, sizeof (CAPTUREPARMS)); 
// ShowMessage(CaptureParms.dwRequestMicroSecPerFrame); 
 
      
} 
void __fastcall TForm1::N10Click(TObject *Sender) 
{ 
N13->Click() ; 
} 
//--------------------------------------------------------------------------- 
 
 
void __fastcall TForm1::N15Click(TObject *Sender) 
{ 
 if(!IS_RECORD) 
 { 
 
 
 N15->Caption = "停止录制"; 
 m_hListenThread=CreateThread(NULL,0,ThreadRecord,this,0,(DWORD*)&idThread); 
     
    if(m_hListenThread) 
    { 
       IS_RECORD = true; 
       //ShowMessage("已经开始录制,文件名为temp.avi,按ESC中止录制"); 
    } 
 
 
 } 
else 
{ 
   // stop record 
   N15->Caption = "开始录制"; 
   capCaptureStop(vcHWND); 
  IS_RECORD = false; 
 } 
 
} 
//--------------------------------------------------------------------------- 
 
 
unsigned long TForm1::GetCurrRate() 
{ 
        //TODO: Add your source code here 
unsigned long rate; 
CAPTUREPARMS CaptureParms; 
capCaptureGetSetup(vcHWND, &CaptureParms, sizeof(CAPTUREPARMS)); 
 
rate = CaptureParms.dwRequestMicroSecPerFrame; 
//ShowMessage(rate); 
return (1.0e6/rate) ; 
} 
DWORD WINAPI ThreadRecord(LPVOID lpParam) 
{ 
 String FileName = "temp.avi"; 
 //capFileSetCaptureFile(vcHWND,FileName.c_str()); 
 //capFileSaveAs(vcHWND,FileName.c_str()); 
 capOverlay(vcHWND, 1); 
 capCaptureSequenceNoFile(vcHWND); 
 
 capCaptureSequence(vcHWND); 
 IS_RECORD = true; 
} 
void __fastcall TForm1::N17Click(TObject *Sender) 
{ 
capDlgVideoFormat(vcHWND); 
} 
//--------------------------------------------------------------------------- 
 
void __fastcall TForm1::N20Click(TObject *Sender) 
{ 
 capDlgVideoCompression(vcHWND); 
} 
//--------------------------------------------------------------------------- 
 
void __fastcall TForm1::N18Click(TObject *Sender) 
{ 
//capDlgAudioFormat(vcHWND); 
} 
//--------------------------------------------------------------------------- 
 
void __fastcall TForm1::N19Click(TObject *Sender) 
{ 
 capDlgVideoSource(vcHWND);         
} 
//--------------------------------------------------------------------------- 
 
void __fastcall TForm1::N14Click(TObject *Sender) 
{ 
if(IS_RECORD) 
{ 
N15->Caption = "停止录制"; 
} 
else 
{ 
N15->Caption = "开始录制"; 
} 
} 
//---------------------------------------------------------------------------