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

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

|

その他のカテゴリー

ADO | ADT | API | ArrayList | ASP.NET | BDE | BDP.NET | BdpConnection | Borland Developer Studio 2006 | CAPICOM | class | ClipBoard | CodeEditor | Convert.ToString | Custom component | DBExpress | Delphi 2005 | Delphi 2006 | Delphi 2007 | Delphi XE2 | Delphi7 | Delphi8 | Device Driver | Dialog | Docking | DocuWorks | Docuworks SDK | Drag&Drop | Evernote | EXCEL | Firebird | FireMonkey | Game | General | Generics | Google Earth COM API | Google Maps | Google SketchUp | Graphic | IDE | Imm | Indy | InstallAware Express6 | InterBase Admin | JWW | Microsoft SQL Server | MyBase | OnMouseDown | Oracle XE | Paradox | PreviewHandler | PrintDialog | PrintPreviewDialog | PropertyGrid | PSDファイル | Ribbon Controls | RichTextBox | Servers | SubClass | TAction | TActionList | TAnimate | TButton | TCategoryButtons | TClientDataSet | TComboBox | TComboBoxEx | TCustomEdit | TDBGrid | TDockTabSet | TDrawGrid | TEdit | TExcelApplication | TFont | TForm | third party | TImage | TLabel | TList | TListBox | TListView | TMemo | TOpenDialog | TOutlookApplication | TPageControl | TPanel | TRichEdit | TShellResources | TStringGrid | TTabControl | TToolBar | TToolButton | TTreeView | TWebBrowser | Update | VCL Styles | WinInet | XE2 | XPman | オープン配列パラメータ | グループ化 | トランスレーションマネージャー | ファイル処理 | ファイル名処理 | 動的配列 | 投票 | 文字列処理 | 日本語入力 | 暗号 | | 音声合成利用