クイック スタート: クリップボードの基本 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
最良のアプリでは、データに対してできるだけ最大限の制御がユーザーに提供されます。ユーザーが期待する制御方法の 1 つはクリップボード操作です。クリップボード操作を使うと、ユーザーはデータの切り取り、コピー、貼り付けを行うことができます。クリップボード操作は、同じコンピューター上の同じアプリ内または 2 つの異なるアプリ間で実行できます。クリップボードがあれば、ユーザーは必要な情報を必要な場所に簡単に配置できます。
複数のデータ共有方法
アプリにクリップボード操作を追加する方法について説明する前に、Windows 8 では複数のデータ移動方法がサポートされることを思い出す必要があります。これらの方法の概要については、「データの共有と交換」をご覧ください。これらの方法の 1 つである共有には、クリップボードとの共通点が多数あります。開発者の観点から見ると、共有とクリップボード操作はともに Windows.ApplicationModel.DataTransfer という同じ Windows 名前空間を使います。また、どちらの方法でも、ユーザーが選択したデータをアプリで収集する必要があります (これは一般にパッケージ化と呼ばれます。これを行うために DataPackage クラスを使うためです)。ユーザーの観点から見ると、クリップボードとはデータを移動するための「古典的な」方法です。
開発者としては、共有とクリップボード操作は非常に似ている一方で大きな違いがあることに注意する必要があります。共有では、共有先、つまりユーザーが選択するアプリまたはサービスに重点が置かれます。クリップボードでは、データに重点が置かれます。最も重要なのは、クリップボード操作はデスクトップ アプリと Windows ストア アプリの間でデータを交換するための唯一の方法であることです。
共有とクリップボードの違いについて詳しくは、「データの共有と交換」をご覧ください。
組み込みのクリップボード サポート
多くの場合、クリップボード操作をサポートするためのコードは一切記述する必要がありません。Windows ストア アプリの作成に使うことができるコントロールの多くは、クリップボード操作をサポートしています。使用可能なコントロールについて詳しくは、「コントロールおよびコンテンツの追加」をご覧ください。
開始する前に
クリップボード操作のサポートをアプリに追加するのは非常に簡単です。最初に「クリップボード コマンドのガイドラインとチェック リスト」をご覧ください。このトピックでは、クリップボード操作の最適なユーザー エクスペリエンスを作成するのに役立つ多数の情報と、コードを最大限に活用するのに役立ついくつかアイデアが見つかります。
次に、サポートするデータ形式の種類について検討する必要があります。Windows 8 には、標準とカスタムの 2 種類の形式があります。現在の標準形式は次のとおりです。
- テキスト
- HTML
- URI
- ビットマップ
- StorageItems
- RTF
これらのデータ形式を使うクリップボード操作の例については、コード サンプルに関するページをご覧ください。 参照トピック StandardDataFormats もご覧ください。これはアプリでサポートする形式の種類を指定するために使います。
カスタム データ形式は、名前が示すとおり、どの標準形式にも適合しないデータの形式のことです。一般に、これらの形式はアドレスやイベントなどのデータの論理コレクションを表します。カスタム形式をサポートするには、http://schema.org/docs/full.htm で指定されているさまざまなスキーマを使うことを強くお勧めします。これらのスキーマのようなよく知られたスキーマを使うと、クリップボード データを受け取るアプリがそのデータをどのように処理すればよいかわかるようになります。
はじめに
クリップボード操作のサポートは、通常、コピー (または切り取り) と貼り付けの 2 つの部分で構成されます。まず、コピー操作と切り取り操作の処理方法を見てみましょう。最初に、アプリに適切な参照が含まれていることを確認します。Microsoft Visual Studio テンプレートを使っている場合、これらの参照は新しいプロジェクトを作成するとすぐに追加されます。Visual Studio を使っていない場合は、アプリが Windows.ApplicationModel.DataTransfer 名前空間にアクセスできることを確認します。
プロジェクトの設定が終わったら、DataPackage オブジェクトのインスタンスが必要になります。これは、ユーザーがコピーするデータと開発者が含めるプロパティ (説明など) の両方を格納するオブジェクトです。
var dataPackage = new Windows.ApplicationModel.DataTransfer.DataPackage();
コピーと切り取り
この時点で、実行するクリップボード操作を指定できるようになります。これらの操作を指定するには、DataPackageOperation 列挙体を使います。コピー操作の場合には、次のようにします。
var dataPackage = new Windows.ApplicationModel.DataTransfer.DataPackage();
dataPackage.requestedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.copy;
切り取り操作の場合は、次のようにします (移動操作もこれと同じです)。
var dataPackage = new Windows.ApplicationModel.DataTransfer.DataPackage();
dataPackage.requestedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.move;
この時点で、ユーザーが選択したデータを DataPackage オブジェクトに追加できます。このデータが DataPackage クラスでサポートされている場合は、DataPackage オブジェクトの対応するメソッドを使うことができます。
テキストを追加するには、次のようにします。
dataPackage.setText("Hello World!");
他の形式を DataPackage に追加する方法の例については、コード ギャラリーにあるクリップボードのサンプルをご覧ください。また、複数の形式を DataPackage に追加できることを忘れないでください。
最後に行う必要があるのは、DataPackage をクリップボードに追加することです。これを行うには、静的 Clipboard.setContent メソッドを呼び出します。
Windows.ApplicationModel.DataTransfer.Clipboard.setContent(dataPackage);
貼り付け
クリップボードの内容を取得するには、静的 Clipboard.getContent メソッドを呼び出します。このメソッドは、コンテンツを含む DataPackageView を返します。このオブジェクトは、コンテンツが読み取り専用であることを除いて DataPackage オブジェクトとほぼ同じです。このオブジェクトがあれば、AvailableFormats または contains のメソッドを使って使用可能な形式を特定できます。その後、対応する DataPackageView メソッドを呼び出してデータを取得できます。たとえば、クリップボードに格納されているテキストを取得するには、次のようにします。
var dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.getContent();
if (dataPackageView.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.text)) {
dataPackageView.getTextAsync().then(function (text) {
// To output the text from this example, you need an HTML element
// with an id of "output".
document.getElementById("output").innerText = "Clipboard now contains: " + text;
});
}
クリップボードへの変更の追跡
コピー コマンドと貼り付けコマンドのほかにイベント ハンドラーも追加して、クリップボードの内容が変更されたタイミングをアプリケーションが認識できるようにすると役立つ場合があります。これを行うには、クリップボードの ContentChanged イベントを処理します。
Windows.ApplicationModel.DataTransfer.Clipboard.addEventListener("contentchanged", function (event) {
var dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.getContent();
if (dataPackageView.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.text)) {
dataPackageView.getTextAsync().then(function (text) {
// To output the text from this example, you need an HTML element
// with an id of "output".
document.getElementById("output").innerText = "Clipboard now contains: " + text;
});
}
});
このハンドラーを配置すると、クリップボードの内容が変更されたときはいつでもアプリケーションに通知されます。
次のステップ
以上で、クリップボード サポートをアプリに追加する方法に関する基本的な理解が得られました。まだ作成したことがない場合は、できる限り優れたユーザー インターフェイスを作成できるように、「クリップボード コマンドのガイドラインとチェック リスト」を読むことをお勧めします。また、コード ギャラリーからサンプルをダウンロードして、クリップボードの使用方法に関するさまざまな例を確認してください。