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();
}
でおしまい。実行すると起動された時点の画像が、
まさに記事を書いてる今。(笑)
コメント