Futures:
- Connected to the IPCam or Webcam Service
- Support zoom in and zoom out
//--------------------------------------------------------------------------- #include <vcl.h> #include <windows.h> #include <iphlpapi.h> #include <stdio.h> #include <urlmon.h> #include <winsock2.h> #include <jpeg.hpp> #pragma hdrstop #include "main.h" #include "ImageDlg.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "SHDocVw_OCX" #pragma resource "*.dfm" TForm1 *Form1; TInitCommonControlsEx ICC; HWND hIpEdit_ServerIP,hIpEdit_CamIP; int nServerIP,nCamIP; AnsiString ServerIP,CamIP; char NewServerIPStr[64],NewCamIPStr[64]; bool isLogin = false; bool isOpen[5] = {false}; //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { ICC.dwSize = sizeof(TInitCommonControlsEx); ICC.dwICC = ICC_INTERNET_CLASSES; if(!InitCommonControlsEx(&ICC)) return; hIpEdit_ServerIP =CreateWindow(WC_IPADDRESS,NULL,WS_CHILD|WS_VISIBLE,95,13,140,20,Panel_Network->Handle,0,HInstance,NULL); nServerIP=ntohl(inet_addr("homeip")); SendMessage(hIpEdit_ServerIP,IPM_SETADDRESS,0,nServerIP); hIpEdit_CamIP =CreateWindow(WC_IPADDRESS,NULL,WS_CHILD|WS_VISIBLE,95,13,140,20,Panel_IPCam->Handle,0,HInstance,NULL); nCamIP=ntohl(inet_addr("homeip")); SendMessage(hIpEdit_CamIP,IPM_SETADDRESS,0,nCamIP); InitialImage(Image_Home_CH1); InitialImage(Image_Home_CH2); InitialImage(Image_Home_CH3); InitialImage(Image_Home_CH4); InitialImage(Image_Display); } //--------------------------------------------------------------------------- void __fastcall TForm1::InitialImage(TImage *img) { img->Canvas->Brush->Color = clBlack; img->Canvas->Rectangle(0,0,200,200); } //--------------------------------------------------------------------------- void __fastcall TForm1::Btn_LoginClick(TObject *Sender) { BYTE FIRST_IPADDRESS,SECOND_IPADDRESS,THIRD_IPADDRESS,FOURTH_IPADDRESS; IPAddr NewIP; NewServerIPStr[0] = '\0'; SendMessage(hIpEdit_ServerIP, IPM_GETADDRESS, 0, (LPARAM) & FIRST_IPADDRESS); SendMessage(hIpEdit_ServerIP, IPM_GETADDRESS, 0, (LPARAM) & SECOND_IPADDRESS); SendMessage(hIpEdit_ServerIP, IPM_GETADDRESS, 0, (LPARAM) & THIRD_IPADDRESS); SendMessage(hIpEdit_ServerIP, IPM_GETADDRESS, 0, (LPARAM) & FOURTH_IPADDRESS); ServerIP=AnsiString((FIRST_IPADDRESS))+"."+BYTE(SECOND_IPADDRESS)+"."+BYTE(THIRD_IPADDRESS)+"."+BYTE(FOURTH_IPADDRESS); strcpy(NewServerIPStr, ServerIP.c_str()); NewCamIPStr[0] = '\0'; SendMessage(hIpEdit_CamIP, IPM_GETADDRESS, 0, (LPARAM) & FIRST_IPADDRESS); SendMessage(hIpEdit_CamIP, IPM_GETADDRESS, 0, (LPARAM) & SECOND_IPADDRESS); SendMessage(hIpEdit_CamIP, IPM_GETADDRESS, 0, (LPARAM) & THIRD_IPADDRESS); SendMessage(hIpEdit_CamIP, IPM_GETADDRESS, 0, (LPARAM) & FOURTH_IPADDRESS); CamIP=AnsiString((FIRST_IPADDRESS))+"."+BYTE(SECOND_IPADDRESS)+"."+BYTE(THIRD_IPADDRESS)+"."+BYTE(FOURTH_IPADDRESS); strcpy(NewCamIPStr, CamIP.c_str()); if(CB_Home->Checked) { TMemoryStream *ms=new TMemoryStream; TJPEGImage *jpg=new TJPEGImage; if(!isLogin) { IdHTTP_IPCam->Request->Username = Edit_Username->Text; IdHTTP_IPCam->Request->Password = Edit_Password->Text; IdHTTP_IPCam->Request->BasicAuthentication = true; try { Application->ProcessMessages(); IdHTTP_IPCam->Get("http://homeip:9999/cam_1.jpg", ms); ms->Position=0; jpg->LoadFromStream(ms); Image_Display->Stretch=true; Image_Display->Picture->Assign(jpg); isLogin = true; delete ms; delete jpg; } catch(...) { ShowMessage("Invalid ID or password!"); } } else { try { Application->ProcessMessages(); IdHTTP_IPCam->Get("http://homeip:9999/cam_1.jpg", ms); ms->Position=0; jpg->LoadFromStream(ms); Image_Display->Stretch=true; Image_Display->Picture->Assign(jpg); delete ms; delete jpg; } catch(...) { isLogin = false; } } } if(CB_CH1->Checked) GetHomeDVR(1,Image_Home_CH1); if(CB_CH2->Checked) GetHomeDVR(2,Image_Home_CH2); if(CB_CH3->Checked) GetHomeDVR(3,Image_Home_CH3); if(CB_CH4->Checked) GetHomeDVR(4,Image_Home_CH4); } //--------------------------------------------------------------------------- void __fastcall TForm1::GetHomeDVR(int Channel, TImage *img) { TMemoryStream *ms_ch1=new TMemoryStream; TJPEGImage *jpg_ch1=new TJPEGImage; IdHTTP_Home_CH->Request->Username = "xxx"; IdHTTP_Home_CH->Request->Password = "xxxxxx"; IdHTTP_Home_CH->Request->BasicAuthentication = true; Application->ProcessMessages(); try { Application->ProcessMessages(); IdHTTP_Home_CH->Get("http://homeip:8888/snapshot_m.html?ch="+IntToStr(Channel-1), ms_ch1); ms_ch1->Position=0; jpg_ch1->LoadFromStream(ms_ch1); img->Stretch=true; img->Picture->Assign(jpg_ch1); delete ms_ch1; delete jpg_ch1; } catch(...) { } } //--------------------------------------------------------------------------- void __fastcall TForm1::CppWebBrowser_MainDocumentComplete(TObject *ASender, const IDispatch *pDisp, OleVariant &URL) { if (FAILED(URLDownloadToFile(NULL, "http://homeip:9999/cam_1.jpg","c:\\tmp.jpg", 0, NULL))) {;} else { Image_Display->Picture->LoadFromFile("c:\\tmp.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TForm1::RadioButton_IPCamClick(TObject *Sender) { if(RadioButton_IPCam->Checked) { Panel_IPCam->Enabled = true; Panel_Network->Enabled = false; } else if(RadioButton_Server->Checked) { Panel_IPCam->Enabled = false; Panel_Network->Enabled = true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::RadioButton_ServerClick(TObject *Sender) { if(RadioButton_IPCam->Checked) { Panel_IPCam->Enabled = true; Panel_Network->Enabled = false; } else if(RadioButton_Server->Checked) { Panel_IPCam->Enabled = false; Panel_Network->Enabled = true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { if(ComboBox_Resolution->Text == "640x480") { Image_Display->Height = 480; Image_Display->Width = 640; } else if(ComboBox_Resolution->Text == "320x240") { Image_Display->Height = 240; Image_Display->Width = 320; } else if(ComboBox_Resolution->Text == "176x144") { Image_Display->Height = 144; Image_Display->Width = 176; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Btn_RefreshClick(TObject *Sender) { Timer_Refresh->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer_RefreshTimer(TObject *Sender) { if(CB_CH1->Checked) { CB_CH1->Caption = "Connected"; Timer_Refresh->Enabled = false; GetHomeDVR(1,Image_Home_CH1); Timer_Refresh->Enabled = true; } else if(!CB_CH1->Checked) { CB_CH1->Caption = "Disconnected"; Image_Home_CH1->Picture = Image_Black->Picture; } if(CB_CH2->Checked) { CB_CH2->Caption = "Connected"; Timer_Refresh->Enabled = false; GetHomeDVR(2,Image_Home_CH2); Timer_Refresh->Enabled = true; } else if(!CB_CH2->Checked) { CB_CH2->Caption = "Disconnected"; Image_Home_CH2->Picture = Image_Black->Picture; } if(CB_CH3->Checked) { CB_CH3->Caption = "Connected"; Timer_Refresh->Enabled = false; GetHomeDVR(3,Image_Home_CH3); Timer_Refresh->Enabled = true; } else if(!CB_CH3->Checked) { CB_CH3->Caption = "Disconnected"; Image_Home_CH3->Picture = Image_Black->Picture; } if(CB_CH4->Checked) { CB_CH4->Caption = "Connected"; Timer_Refresh->Enabled = false; GetHomeDVR(4,Image_Home_CH4); Timer_Refresh->Enabled = true; } else if(!CB_CH4->Checked) { CB_CH4->Caption = "Disconnected"; Image_Home_CH4->Picture = Image_Black->Picture; } if(CB_Home->Checked) { CB_Home->Caption = "Connected"; Timer_Refresh->Enabled = false; TMemoryStream *ms=new TMemoryStream; TJPEGImage *jpg=new TJPEGImage; IdHTTP_IPCam->Request->Username = Edit_Username->Text; IdHTTP_IPCam->Request->Password = Edit_Password->Text; IdHTTP_IPCam->Request->BasicAuthentication = true; try { Application->ProcessMessages(); IdHTTP_IPCam->Get("http://homeip:9999/cam_1.jpg", ms); ms->Position=0; jpg->LoadFromStream(ms); Image_Display->Stretch=true; Image_Display->Picture->Assign(jpg); isLogin = true; delete ms; delete jpg; } catch(...) { ShowMessage("Invalid ID or password!"); } Timer_Refresh->Enabled = true; } else if(!CB_Home->Checked) { CB_Home->Caption = "Disconnected"; Image_Display->Picture = Image_Black->Picture; } } //---------------------------------------------------------------------------