サンプルアプリケーション03:モバイルアプリケーションの画面をパソコンに表示する

概要

モバイルアプリケーションのスクリーンショットを撮り、デスクトップアプリケーションに表示します。

モバイルアプリケーションの作成

スクリーンショットを撮り、デスクトップアプリケーションに転送するモバイルアプリケーションを作成します。

コンポーネントの配置

フォームにTLayoutコンポーネントをを配置し、その上にTLabelコンポーネントを配置します。

TTimerコンポーネントを2つ、TTetheringManagerコンポーネント、TTetheringAppProfileコンポーネントを配置します。

_images/0081.gif
Form1
├Layout1
│└Label1
├TetheringAppProfile1
├TetheringManager1
├Timer1
└Timer2

現在時刻の表示

Label1には現在の時刻を表示します。

Timer1のOnTimerイベントを追加します。

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Text := FormatDateTime('hh:nn:ss:ZZZ', Now);
end;

Timer1のIntervalプロパティを「100」にします。

アプリケーションを実行すると、100ミリ秒ごとに現在時刻がラベルに表示されます。

_images/0011.gif

アプリケーションテザリングの設定

TetheringAppProfile1のManagerプロパティを「TetheringManager1」にします。

TetheringAppProfile1のGroupプロパティを「mirroring」にします。

_images/0021.gif

共有リソースの追加

TetheringAppProfile1にリソースを追加します。

_images/0031.gif _images/004.gif

追加したリソースのプロパティを設定します。

  • Kingプロパティ Shared
  • Nameプロパティ Screen
  • ResTypeプロパティ Stream
_images/0111.gif

スクリーンショットの共有

フォームにスクリーンショットの画像データを保持する変数「FStream」を追加します。

type
  TForm1 = class(TForm)
  ...
  private
    { private 宣言 }
    FStream: TMemoryStream;
  ...
  end;

フォームのOnCreateイベントを追加し、作成した変数FStreamを生成します。

また、起動時にアプリケーションテザリングで接続するようにします。

procedure TForm1.FormCreate(Sender: TObject);
begin
  FStream := TMemoryStream.Create;
  TetheringManager1.AutoConnect();
end;

Timer2のIntervalプロパティを「1000」にします。

アプリケーションを実行すると、1000ミリ秒ごとにスクリーンショットをデスクトップアプリケーションに転送します。

Timer2のOnTimerイベントを追加し、スクリーンショットを共有します。

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Layout1.MakeScreenshot.SaveToStream(FStream);
  FStream.Position := 0;
  TetheringAppProfile1.Resources.Items[0].Value := FStream;
end;

デスクトップアプリケーションの作成

モバイルアプリケーションのスクリーンショットを表示するデスクトップアプリケーションを作成作成します。

コンポーネントの配置

フォームにTImageコンポーネントを配置します。

TTetheringManagerコンポーネント、TTetheringAppProfileコンポーネントを配置します。

_images/0071.gif
Form1
├Image1
├TetheringAppProfile1
└TetheringManager1

アプリケーションテザリングの設定

モバイルアプリケーションの設定と同じです。

TetheringAppProfile1のManagerプロパティを「TetheringManager1」にします。

TetheringAppProfile1のGroupプロパティを「mirroring」にします。

_images/0021.gif

共有リソースの追加

TetheringAppProfile1にリソースを追加します。

_images/0031.gif _images/004.gif

追加したリソースのプロパティを設定します。

  • Kingプロパティ Mirror
  • Nameプロパティ Screen
  • ResTypeプロパティ Stream
_images/0061.gif

モバイルアプリケーションでは画像を送信するためKindプロパティは「Shared」でしたが、デスクトップアプリケーションでは画像を受信するため「Mirror」にします。

共有リソースの受信

送信されたスクリーンショットを受信してイメージコンポーネントに表示します。

作成したリソースのOnResourceReceivedイベントを追加します。

procedure TForm1.TetheringAppProfile1Resources0ResourceReceived
  (const Sender: TObject; const AResource: TRemoteResource);
begin
  TThread.Synchronize(nil,
    procedure
    begin
      try
        AResource.Value.AsStream.Position := 0;
        Image1.Bitmap.LoadFromStream(AResource.Value.AsStream);
        Image1.Repaint;
      except
      end;
    end);
end;

アプリケーションの実行

先にデスクトップアプリケーションを起動しておきます。

その後、モバイルアプリケーションを実行します。

モバイルアプリケーションが起動すると、デスクトップアプリケーションにスクリーンショットが転送されます。

_images/0091.gif

デスクトップアプリケーションを実行したところ