|
DelphiXE3 [FMX] クリップボード 2014/06/09 |
前回は、ファイルの機能について記述しました。
今回は、クリップボードについて見ていきます。
まずは単純に、フォームに [Standard]内のエディット(Edit)を2つ配置し、上で文字を書いて、文字を選択し(文字反転表示されます)、[CTRL]+[C] でコピー、下で [CTRL]+[V] で貼り付け(ペースト)すれば、正常に、文字のコピペ(コピー&ペースト)が出来るのが確認出来ます。 もっとも、他のプラットフォームでも同様に操作出来ているのかどうかは、当方では未所持なため未確認です。
保存・コンパイル(ビルド)・実行
↓
文字を書いて、選択、コピー
↓
貼り付け
フォームに [Standard]内のボタン(Button)を貼り付け、そのOnClickイベントハンドラを下記のようにします。
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.SelectAll;
Edit1.CopyToClipboard;
Edit2.PasteFromClipboard;
Edit2.SetFocus;
end; |
保存・コンパイル(ビルド)・実行します。
文字入力してボタンをクリック
↓
コピペ完了
プログラミングでも、通常の操作と同様、選択をして、コピーをして、貼り付けを行います。以下、ヘルプより。
FMX.Edit.TCustomEdit.
CopyToClipboard | procedure CopyToClipboard; |
編集コントロール内で選択されたテキストをクリップボードに、プレーン テキスト形式でコピーします。
CopyToClipboard を使用すると、クリップボードのコンテンツを、選択されたテキストで置換することができます。 CopyToClipboard は、テキストが何も選択されていない場合は、クリップボードの中身をクリアしません。テキストが選択されていない場合、CopyToClipboard は何も行いません。 |
FMX.Edit.TCustomEdit.
CutToClipboard | procedure CutToClipboard; |
選択されたテキストをクリップボードにプレーン テキスト形式でコピーし、その後、選択箇所を削除します。
CutToClipboard を使用すると、選択されたテキストはクリアして、クリップボードのコンテンツをその選択されたテキストで置換することができます。テキストが選択されていない場合、CutToClipboard は何も行いません。 |
FMX.Edit.TCustomEdit.
PasteFromClipboard | procedure PasteFromClipboard; |
クリップボードのプレーン テキスト コンテンツを、編集コントロールに貼り付けます。
PasteFromClipboard を使用すると、クリップボードで保持されていたプレーン テキスト コンテンツを、編集コントロールに貼り付けることができます。 クリップボードにプレーン テキスト コンテンツがなかった場合には、PasteFromClipboard は何も行いません。また、PasteFromClipboard は、この編集コントロールのコンテンツのクリアも行いません。 |
FMX.Edit.TCustomEdit.
DeleteSelection | procedure DeleteSelection; |
編集コントロールから選択されたテキストを削除します。
DeleteSelection を使用すると、編集コントロールから選択されたテキストを削除することができます。 テキストが選択されていない場合、DeleteSelection は何も行いません。 すべてのテキストが選択された場合、DeleteSelection はすべてのテキストをクリアします。 |
なお、
警告: ClearSelection は非推奨になっています。DeleteSelection を使用してください。 |
とありますね。何故なのかは分かりませんが…。
文字の一部分を選択したい場合は、SelStart、SelLength プロパティを使います。
FMX.Edit.TCustomEdit.SelStart |
テキスト内で最初に選択されている文字の位置を示します。
SelStart を読み込むと、最初に選択されている文字の位置を判別することができます。ここでは 0 が最初の文字を表します。テキストが何も選択されていない場合、SelStart はカーソルの位置を示します。SelStart を設定すると、現在の選択を解除し、指定した文字の前にカーソルを移動させることができます。
テキストの特定の範囲を選択するには、まず SelStart をカーソルに位置に設定し、それから SelLength を設定して、選択部分を拡大させます。 |
FMX.Edit.TCustomEdit.SelLength |
選択された文字の数を示します。
SelLength を読み込むと、選択されたテキストの長さを、バイト数で取得することができます。これは、マルチバイト文字セットを使用しない限り、通常の文字数と同じになります。SelLength を設定すると、SelStart から始まる SelLength 分のバイト数の部分が選択状態になるよう、変更されます。
ヒント: SelLength を、SelStart からテキストの終わりまでの文字数よりも大きい値に設定すると、SelStart からテキストの終わりまで、すべての文字が選択されます。SelLength を利用可能な数よりも大きい値に設定した後すぐに読み込んでも、設定した値ではなく、実際に選択できる文字数が返されます。 |
選択した文字内容は、SelText プロパティに入ります。
FMX.Edit.TCustomEdit.SelText |
編集コントロールのテキストの選択部分を示します。
SelText を読み込むと、選択されているテキストの値を判別することができます。SelText を設定すると、選択されているテキストを、新しい文字列で置換することができます。何も選択されていないが、編集コントロールにフォーカスはある場合、SelText を設定すると、カーソルがある位置に、テキストとして新しい文字列を挿入することができます。 |
上記のボタンのOnClickイベントハンドラを下記のようにすると、3文字目から5文字分だけ選択出来るという事が確認出来ます(※コピペはしていません)。
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.SelStart := 2 ;
Edit1.SelLength := 5 ;
Edit2.Text := Edit1.SelText ;
end; |
エディットコンポーネントで見てきましたが、これは、メモ(Memo)コンポーネントでも同様に出来ます。
ボタンのOnClickイベントハンドラを
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.SelectAll;
Memo1.CopyToClipboard;
Edit2.PasteFromClipboard;
end; |
のようにすれば・・・
↓
のようになりますね。エディットコンポーネントは1行文字編集が基本ですのでどうなるのかと思われましたが、このように表示されると相当に変な感じです。
という訳で、エディット(Edit) や メモ(Memo) を利用すれば、テキストのクリップボードを扱うのは非常に簡単になります。画面に見せたくなければ、Visible プロパティを False にしたり、画面の外側に配置したりすれば良いだけです。
しかし、コンポーネントの機能ではなく、単独で扱いたい場合があります。
従来の VCLアプリケーションであれば、uses 節に Clipbrd を追加して、という事になりますが、FireMonkey(FMX) には、このユニットがありません。ヘルプを見ても、存在するのか否か、代替用の機能が存在するのか否か、等、よく分かりません。
DEKOさんのサイトの情報によれば、
uses
..., FMX.Platform;
// 現在のクリップボードの内容を Edit1 に表示
var
ClipboardService: IFMXClipboardService;
begin
ClipboardService := IFMXClipboardService(
TPlatformServices.Current.GetPlatformService(IFMXClipboardService));
Edit1.Text := ClipboardService.GetClipboard.AsString;
end;
// Edit1 の内容をクリップボードに入れる
var
ClipboardService: IFMXClipboardService;
begin
ClipboardService := IFMXClipboardService(
TPlatformServices.Current.GetPlatformService(IFMXClipboardService));
ClipboardService.SetClipboard(Edit1.Text);
end; |
と記載されています。
それでは試してみます。ボタンを2つ配置します。
ボタンの OnClickイベントハンドラを下記のようにします。
procedure TForm1.Button2Click(Sender: TObject);
var
ClipboardService: IFMXClipboardService;
begin
ClipboardService := IFMXClipboardService(
TPlatformServices.Current.GetPlatformService(IFMXClipboardService));
Memo1.Text := ClipboardService.GetClipboard.AsString;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
ClipboardService: IFMXClipboardService;
begin
ClipboardService := IFMXClipboardService(
TPlatformServices.Current.GetPlatformService(IFMXClipboardService));
ClipboardService.SetClipboard(Memo1.Text);
end; |
保存・コンパイル・実行をすると下図のようになります。
文字を入力し反転、Button3をクリックするとコピーされます
↓
一旦、メモ内容を消して、Button2をクリック
↓
貼り付け出来ました
勿論、Windowsの「メモ帳」等、他アプリケーションとのクリップボードのやり取りも出来ています。
次に、画像のコピー&ペーストについて、ですが、どうも簡単な手法は無いようですね。ネット情報では、ストリーム経由で云々な話もあるようですが、私にはよく分かりませんので、やめておきます。こういった事を見るだけでもやはり、VCLアプリケーションとは随分違うのだなぁと実感してしまいます。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/06/07
2014/06/09
▼[次ページ]
シェアウェア
Script!World
データベース
|