サンプルアプリケーション03:モバイルアプリケーションの画面をパソコンに表示する¶
概要¶
モバイルアプリケーションのスクリーンショットを撮り、デスクトップアプリケーションに表示します。
モバイルアプリケーションの作成¶
スクリーンショットを撮り、デスクトップアプリケーションに転送するモバイルアプリケーションを作成します。
コンポーネントの配置¶
フォームにTLayoutコンポーネントをを配置し、その上にTLabelコンポーネントを配置します。
TTimerコンポーネントを2つ、TTetheringManagerコンポーネント、TTetheringAppProfileコンポーネントを配置します。

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ミリ秒ごとに現在時刻がラベルに表示されます。

アプリケーションテザリングの設定¶
TetheringAppProfile1のManagerプロパティを「TetheringManager1」にします。
TetheringAppProfile1のGroupプロパティを「mirroring」にします。

共有リソースの追加¶
TetheringAppProfile1にリソースを追加します。


追加したリソースのプロパティを設定します。
- Kingプロパティ Shared
- Nameプロパティ Screen
- ResTypeプロパティ Stream

スクリーンショットの共有¶
フォームにスクリーンショットの画像データを保持する変数「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コンポーネントを配置します。

Form1
├Image1
├TetheringAppProfile1
└TetheringManager1
アプリケーションテザリングの設定¶
モバイルアプリケーションの設定と同じです。
TetheringAppProfile1のManagerプロパティを「TetheringManager1」にします。
TetheringAppProfile1のGroupプロパティを「mirroring」にします。

共有リソースの追加¶
TetheringAppProfile1にリソースを追加します。


追加したリソースのプロパティを設定します。
- Kingプロパティ Mirror
- Nameプロパティ Screen
- ResTypeプロパティ Stream

モバイルアプリケーションでは画像を送信するため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;
アプリケーションの実行¶
先にデスクトップアプリケーションを起動しておきます。
その後、モバイルアプリケーションを実行します。
モバイルアプリケーションが起動すると、デスクトップアプリケーションにスクリーンショットが転送されます。

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