テキストボックスへの貼り付け防止
                                                         玄関へお回り下さい。
テキストボックスへの貼り付け防止(DLLを使用しての簡単なサブクラス化)      (046)
通常、不正な処理で落ちたり、OS自体も壊す恐れがある等危険が伴うのでサブクラス化はそこそこ熟知した人でないとお奨めできないのですが、[プログラマのメモ帳]さんのサイトの[サブクラス化を簡単にするためのクラス Ver 1.0.0(SimpleSubClass.dll)]を使用しての簡単で比較的安全にサブクラス化ができるので、それを使用させてもらって貼り付け防止を実現しております。
詳しくは下記アドレスから[プログラマのメモ帳]さんのサイトをご覧になって下さい。
上記クラスをダウンロードして頂き、その中のSimpleSubClass.dllだけを使用します。
(サブクラス化について知識をお持ちでない方は他の同胞のファイルは試さない方がいいかと思います)
SimpleSubClass.dll をSystem32(System)に入れてVBの参照設定でそのDLLを参照して下さい。
後は以下のコードを試して見てください。
フォームにはTextBox を2個貼り付けておいて下さい。(1個でもいいが違いが解るので)
    Option Explicit   'SampleNo=46 WindowsXP VB6.0(SP5) 2003.03.17
Implements IWindowProc 'Meにイベントハンドラーを定義するため
Private m_SubClass As New clsSubClass  'サブクラス化をするためのクラス定義

Private Const WM_CUT = &H300    'カット(P840)
Private Const WM_COPY = &H301    'コピー(P837)
Private Const WM_PASTE = &H302   'ペースト(P876)
Private Const WM_CONTEXTMENU = &H7B 'ポップアップメニュー


Private Sub Form_Load()
  'Text1のhWndをサブクラス化しMeをイベントハンドラーとして使用する
  Call m_SubClass.Init(Text1.hWnd, Me)
  'サブクラス化の解除はクラスが削除されたときに自動で行うので別に何も書かない
End Sub


'イベント取得のためのインターフェイス
'引数
'  hWnd  MSDNライブラリのWindowProcと同じ
'  uMsg      〃
'  wParam     〃
'  lParam     〃
'  Cancel ユーザー定義で処理を行いデフォルトの
'       ウィンドウプロシージャに処理を渡さない場合Trueにする
'戻り値
'  Cancel=Trueのときのみ有効。ユーザー定義処理の結果を返す
Private Function IWindowProc_WindowProc(ByVal hWnd As Long, _
                    ByVal uMsg As Long, _
                    ByVal wParam As Long, _
                    ByVal lParam As Long, _
                    Cancel As Boolean) As Long
  Select Case uMsg
    Case WM_CUT, WM_COPY, WM_PASTE, WM_CONTEXTMENU
    'カット・コピー・ペースト・ポップアップメニューを無効に
      Cancel = True  'メッセージを無効にする
      'Cancel = False 'メッセージを有効にする
  End Select
End Function


 

(プログラマのメモ帳さんのサイト)
サブクラス化を簡単にするためのクラス Ver 1.0.0
関連ドキュメントURL
http://www.gj.il24.net/~nakasima/download/SimpleSubClass/

ダウンロードURL
http://www.gj.il24.net/~nakasima/download/SimpleSubClass/SimpleSubClass1.0.0.zip

上記DLL等の著作権は中嶋さんにありますが、商用、非商用に限らず自由に組み込んでかまい
ません。 との事で使用させて頂きここに紹介しました。
但し、このライブラリを使用して起こったいかなることにも中嶋さんには責任が無いものとします。
又、ご利用にあたっては上記サイトの注意事項に従って下さい。






2003/03/17