☆クリップボードを使ってみる。
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では、クリップボードを扱うメソッドが用意されていますので、それを使うべきだと思いますけど、このような方法もあるということで、参考にして下さい。
ビットマップ等、テキスト以外のデータを扱う場合にも、同様にプログラムすれば使えるみたいです。
| 固定リンク