C++ Builder CE ネットワークプログラミング

2. TIdHTTPの動的割り付け

前回の記事でTIdHTTPをフォームに置いて使いましたけど、インスタンス(実体)はあるけど、ビジュアルはないので、比較的簡単に動的割り付けして使えます。今回はその方法について具体的に述べます。まずForm1だけの状態のヘッダー(Unit1.h)を調べます。

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE で管理されるコンポーネント
private:	// ユーザー宣言
public:		// ユーザー宣言
	__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

こんな様子です。フォーム上にはForm1しかありません。ここでパレットからTIdHTTPをフォームにドロップしてしばらくして削除(選択してctrl-X)します。するとインスタンス(IdHTTP1)は削除されますが、必要なヘッダー群は残ります。

#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdHTTP.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>

コードとして表示してしまうと、文字色が変更できないようなので、TIdHTTPを使うために必要な追加のヘッダ群です。同様にTImageも

#include <Vcl.ExtCtrls.hpp>

どうせならば、TImageもTIdHTTPも動的割り付けした場合の全体のコードは、Form1のコンストラクタに収まって、

__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{

	TIdHTTP* http = new TIdHTTP();
	http->Request->Username = "guest";
	http->Request->Password = "time-lapse";

	http->HTTPOptions = http->HTTPOptions << hoInProcessAuth;

	TMemoryStream* ms = new TMemoryStream(); //取得したデータを格納する

	http->Get("http://192.168.0.112/snapshot.jpg", ms);

	ms->Position = 0;

	TImage* image = new TImage(Owner);

	image->Top = 50;
	image->Left = 50;

	image->Width = 640;
	image->Height = 480;

	image->Parent = Form1;

	image->Picture->LoadFromStream(ms);
	delete ms;

	http->Disconnect();

}

でおしまい。実行すると起動された時点の画像が、

まさに記事を書いてる今。(笑)

コメント