コピー・切り取り・クリア <TOP>
SendMessage
ウィンドウにメッセージを送信
WM_COPY(&H301)
テキストボックス・コンボボックスの選択テキストをクリップボードにコピー
WM_CUT(&H300)
選択されているテキスト部分を削除し、そのテキストをCF_TEXTフォーマットでクリップボードにコピー
WM_CLEAR(&H303)
テキストボックス・コンボボックスの選択テキストを削除
CF_TEXT(1)
テキスト形式のデータ。各行は復帰改行(CR-LF)コードで終わる
'================================================================ '= コピー・切り取り・クリア '= (SendMessage8.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_GetClipboardData& Lib "user32" Alias "GetClipboardData" (ByVal wFormat&) ' クリップボードをクローズ Declare Function Api_CloseClipboard& Lib "user32" Alias "CloseClipboard" () ' ヒープに確保されたメモリをロック Declare Function Api_GlobalLock& Lib "kernel32" Alias "GlobalLock" (ByVal hMem&) ' メモリブロックのロックを解除 Declare Function Api_GlobalUnlock& Lib "kernel32" Alias "GlobalUnlock" (ByVal hMem&) ' 文字列をコピーする Declare Function Api_lstrcpy& Lib "kernel32" Alias "lstrcpy" (ByVal lpString1 As Any, ByVal lpString2 As Any) #define WM_COPY &H301 'テキストボックス・コンボボックスの選択テキストをクリップボードにコピー #define WM_CUT &H300 '選択されているテキスト部分を削除し、そのテキストをCF_TEXTフォーマットでクリップボードにコピー #define WM_CLEAR &H303 'テキストボックス・コンボボックスの選択テキストを削除 #define CF_TEXT 1 'テキスト形式のデータ。各行は復帰改行(CR-LF)コードで終わる #define MAXSIZE 4096 Var Shared Edit1 As Object Var Shared Text1 As Object Var Shared Radio(2) As Object Var Shared Button1 As Object Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 For i = 0 To 2 Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1))) Radio(i).SetFontSize 14 Next '================================================================ '= '================================================================ Declare Function Index bdecl () As Integer Function Index() Index = Val(Mid$(GetDlgRadioSelect("Radio1"), 6)) - 1 End Function '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Edit1.SetWindowText "F-Basic Programming Tips" '"Programming "を選択 Edit1.SetSelText 8, 20 End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var hMem As Long Var lpMem As Long Var txt As String Var Ret As Long ClearCB Select Case Index Case 0 'コピー Ret = Api_SendMessage(Edit1.GethWnd, WM_COPY, 0, ByVal 0) Case 1 '切り取り Ret = Api_SendMessage(Edit1.GethWnd, WM_CUT, 0, ByVal 0) Case 2 'クリア Ret = Api_SendMessage(Edit1.GethWnd, WM_CLEAR, 0, ByVal 0) End Select Text1.SetWindowText "" If Api_OpenClipboard(0) = 0 Then Text1.SetWindowText "クリップボードが開きません" Exit Sub End If 'テキストを参照しているグローバルメモリのブロックへのハンドルを取得 hMem = Api_GetClipboardData(CF_TEXT) 'クリップボードのメモリをロックし、実際の文字列を参照 lpMem = Api_GlobalLock(hMem) If lpMem <> 0 Then txt = Space$(MAXSIZE) Ret = Api_lstrcpy(txt, lpMem) Ret = Api_GlobalUnlock(hMem) 'nullを削除 txt = Left$(txt, InStr(txt, Chr$(0)) - 1) Text1.SetWindowText txt Else Text1.SetWindowText "文字列を参照できません!" End If Ret = Api_CloseClipboard() End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End