« ☆TreeViewを使ってみる。 | トップページ | ☆PropertyGridをとりあえず使ってみる。 »

☆クリップボードを使ってみる。

[Windowsフォームアプリケーション] TextBoxを使ってクリップボードを扱うサンプルを書いてみました。
1.フォームにContextMenu1とTextBox1, TextBox2, TextBox3を配置します。
2.ContextMenu1にCopy, Cut, Paste, Deleteというメニューを作成し、
  下記のClickイベントを記述します。
3.ContextMenu1のPopupイベントに下記のPopupイベントを記述します。
4.各TextBoxのContextMenuをContextMenu1に設定します。

procedure TWinForm.ContextMenu1_Popup(sender: System.Object;
 e: System.EventArgs);
begin
 Copy.Enabled := (ActiveControl is TextBox) and
  (TextBox(ActiveControl).SelectionLength > 0);
 Cut.Enabled := Copy.Enabled;
 Delete.Enabled := Copy.Enabled;
 Paste.Enabled := (ActiveControl is TextBox) and
  (Clipboard.GetDataObject.GetDataPresent(TypeOf(String)))
end;

procedure TWinForm.Copy_Click(sender: System.Object;
 e: System.EventArgs);
begin
 ClipBoard.SetDataObject(TextBox(ActiveControl).SelectedText, True);
 //Copyメソッドを使う
 //TextBox(ActiveControl).Copy;
end;

procedure TWinForm.Cut_Click(sender: System.Object;
 e: System.EventArgs);
begin
 ClipBoard.SetDataObject(TextBox(ActiveControl).SelectedText, True);
 TextBox(ActiveControl).SelectedText := '';
 //Cutメソッドを使う
 //TextBox(ActiveControl).Cut;
end;

procedure TWinForm.Paste_Click(sender: System.Object;
 e: System.EventArgs);
begin
 if Clipboard.GetDataObject.GetDataPresent(TypeOf(String)) then
  TextBox(ActiveControl).SelectedText := 
   String(Clipboard.GetDataObject.GetData(TypeOf(String)));
 //Pasteメソッドを使う
 //TextBox(ActiveControl).Paste;
end;

procedure TWinForm.Delete_Click(sender: System.Object;
 e: System.EventArgs);
var
 Data: String;
 Flag: Boolean;
begin
 TextBox(ActiveControl).SelectedText := '';

 //Clearメソッドを使う
 //但し、全て消去してしまうため削除の動作とは違う
 //TextBox(ActiveControl).Clear  ;

 //Clearメソッドでは削除の動作とは違うため
 //Undoメソッドを使えるようにするためにCutを使って
 //コテコテに実装してみる。
 //Flag := Clipboard.GetDataObject.GetDataPresent(TypeOf(String));
 //if Flag then
  //Data := String(Clipboard.GetDataObject.GetData(TypeOf(String)));

 //TextBox(ActiveControl).Cut;

 //if Flag then
  //ClipBoard.SetDataObject(Data, True);
end;
TextBoxでは、クリップボードを扱うメソッドが用意されていますので、それを使うべきだと思いますけど、このような方法もあるということで、参考にして下さい。
ビットマップ等、テキスト以外のデータを扱う場合にも、同様にプログラムすれば使えるみたいです。

|

« ☆TreeViewを使ってみる。 | トップページ | ☆PropertyGridをとりあえず使ってみる。 »