Copy・Cut・Paste・Clear          <TOP>


F-BasicでのCopy・Cut・Paste・ClearをAPIで実行しています。
SendMessage ウィンドウにメッセージを送信 
OpenClipboard クリップボードをオープン 
EmptyClipboard クリップボードを空にする 
CloseClipboard クリップボードをクローズ 
 
 
'================================================================
'= Copy・Cut・Paste・Clear
'=    (CopyPaste.bas)
'================================================================
#include "Windows.bi"

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

' クリップボードをオープン
Declare Function Api_OpenClipboard& Lib "user32" Alias "OpenClipboard" (ByVal hWnd&)

' クリップボードを空にする
Declare Function Api_EmptyClipboard& Lib "user32" Alias "EmptyClipboard" ()

' クリップボードをクローズ
Declare Function Api_CloseClipboard& Lib "user32" Alias "CloseClipboard" ()

#define WM_CUT &H300                    '選択されているテキスト部分を削除し、そのテキストをCF_TEXTフォーマットでクリップボードにコピー
#define WM_COPY &H301                   'テキストボックス・コンボボックスの選択テキストをクリップボードにコピー
#define WM_PASTE &H302                  'クリップボードからテキストをコピーした
#define WM_CLEAR &H303                  'テキストボックス・コンボボックスの選択テキストを削除

Var Shared Edit1 As Object
Var Shared Edit2 As Object
Var Shared Button(3) As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14
For i = 0 To 3
    Button(i).Attach GetDlgItem("Button" & Trim$(Str$(i + 1))) : Button(i).SetFontSize 14
Next

'================================================================
'= コピー
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Ret As Long

    'Edit1内のテキストを全選択
    Edit1.SetSelText 0, -1

    'Edit1の選択されたテキストをコピー(Edit1.Copyに相当)
    Ret = Api_SendMessage(Edit1.GethWnd, WM_COPY, 0, ByVal 0)
    Edit1.SetSelText -1, -1
End Sub

'================================================================
'= 切り取り
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var Ret As Long

    'Edit1内のテキストを全選択
    Edit1.SetSelText 0, -1

    'Edit1の選択されたテキストを切り取り(Edit1.Cutに相当)
    Ret = Api_SendMessage(Edit1.GethWnd, WM_CUT, 0, ByVal 0)
    Edit1.SetSelText -1, -1
End Sub


'================================================================
'= 貼り付け
'================================================================
Declare Sub Button3_on edecl ()
Sub Button3_on()
    Var Ret As Long

    'Edit2をクリア
    Edit2.SetWindowtext ""

    'Edit2に貼り付け
    Ret = Api_SendMessage(Edit2.GethWnd, WM_PASTE, 0, ByVal 0)
End Sub

'================================================================
'= クリア
'================================================================
Declare Sub Button4_on edecl ()
Sub Button4_on()
    Var Ret As Long

    Edit2.SetSelText 0, -1

    'Edit2をクリア(Edit2.Clearに相当)
    Ret = Api_SendMessage(Edit2.GethWnd, WM_CLEAR, 0, ByVal 0)

    'クリップボード内のデータをクリア(CleaeCbに相当)
    Ret = Api_OpenClipBoard(GethWnd)
    Ret = Api_EmptyClipBoard()
    Ret = Api_CloseClipboard()
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End