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 = "开始录制"; } } //---------------------------------------------------------------------------