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;
}
}
//---------------------------------------------------------------------------

