リッチエディット内の行番号表示定規

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
mir

リッチエディット内の行番号表示定規

#1 投稿記事 by mir »

前の質問がまだ解決していないのですが、またひとつわからないことが
出てきたので、質問させてください。

ActiveBasicのProjectEditorのエディットボックスの横に行番号を表示した
定規のようなものが存在しています。
これは、エディットボックスを立てにスクロールしたとき、しっかりと行番号も
変わっておりさらに、確かにエディットボックス内にあるのですが、
エディットボックスを横にスクロールしたときも固定されたままで動きません。

このようなものをなんというのでしょうか?
さらに、これの設置方法を教えていただけないでしょうか?
ご回答、よろしくお願いします。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

山本さんに訊いて下さい。
ゲスト

Re: リッチエディット内の行番号表示定規

#3 投稿記事 by ゲスト »

> このようなものをなんというのでしょうか?

これは所謂カスタムコントロールと言うものです。汎用のリ
ッチテキストエディターなどとは違います。要すれば、再描
画要求メッセージが呼ばれたときに設計どおりの画面を描画
するものです。

この手のもので有名なものにBorlandのDelphiで作成された
TEditと言うすぐれものがありますが、Delphi、BCB以外の開
発環境では利用が難しいです。

> さらに、これの設置方法を教えていただけないでしょうか?
> ご回答、よろしくお願いします。

従って山本さんに貰わないと無理ですし、山本さんはVisual
C++で開発しているので、直ぐにはABで利用できないでしょ。

ABで使えるものといえば、シェアウェアですがDLLの"Footy"
http://www.vector.co.jp/soft/win95/prog/se286955.html
があります。これのヘッダーなど参考においておきます。
関数でDLLをコールすればよく使い勝手はいいと思いますよ。
これを使ったアプリの例としてVisual Window for BC++が
あります。
http://phys.cool.ne.jp/physjpn/bccwingif.htm
このスナップショットをみれば感じが分かるでしょう。

'============================================================================
'FootyTextEditorControlForWin32
'Active Basic用標準モジュール
'
'(C)2003 ShinjiWatanabe
'Cpoyright(C) Uz All Rights Reserved.
'
'<<重要>>
'このファイルはFootyをActive Basicから扱う上で
'非常に重要なファイルです。DLLを扱う上で弊害となる文字列などの処理を全て
'記述してあるので、非常に簡単にプログラムを開始できます。このファイルは
'勝手にプロジェクトに組み込んでもかまいません。
'
'<<注意>>
'かならず同梱されていて対応するFootyMod.basファイルを
'プロジェクトに組み込んでください。そうしなければエラーにより
'強制終了されてしまうことがあります。
'
'<<すべきこと>>
'TODOで始まるコメント行の箇所は、作るプログラムに応じて改変しないといけない
'部分を表しています。各自改変してください。TODOの位置を検索するにはCtrl+Fを
'押して検索してください。
'============================================================================
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'Footyで使用できる関数・定数の宣言
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

'イベント定数----------------------------------------------------------------
Const FE_CHANGE = WM_USER + 1000 '変更があったときに送られます。
Const FECH_SB = 0 'シングルバイト文字が挿入されたとき
Const FECH_IME = 1 'IMEによる文字列
Const FECH_RETURN = 2 '改行
Const FECH_BS = 3 'バックスペース
Const FECH_DEL = 4 'Deleteキー
Const FECH_PASTE = 5 '貼り付け
Const FECH_CUT = 6 'カット
Const FECH_UNDO = 7 'アンドゥ
Const FECH_REDO = 8 'リドゥ
Const FECH_TAB = 9 'タブが押された
Const FECH_SETSEL = 10 'FootySetSelText命令
Const FECH_SETTEXT = 11 'FootySetText命令
Const FECH_INDENT = 12 'インデント処理
Const FECH_REINDENT = 13 '逆インデント処理
Const FECH_OLE = 14 'OLE

Const FE_MOUSEMOVE = WM_USER + 1001 'マウスが動かされたときに発生します。
Const FEMM_NONE = 0 '通常の状態です。
Const FEMM_ONLN = 1 '行番号上にあります。
Const FEMM_ONRL = 2 'ルーラ上にあります。
Const FEMM_DRAG = 3 'ドラッグ中です。
Const FEMM_DRAGLN = 4 '行番号をドラッグ中です。
Const FEMM_ON_URL = 5 'URL上にあります。
Const FEMM_ON_MAIL = 6 'メールアドレス上にあります。

Const FE_CONTEXTMENU = WM_USER + 1002 'コンテキストメニューの呼び出し要求

Const FE_CARETMOVE = WM_USER + 1003 'カーソルが動かされた
Const FECM_COMMAND = 0 'コマンドによって動かされた
Const FECM_KEY = 1 'キーの入力
Const FECM_MOUSE = 2 'マウスの入力
Const FECM_OLE = 3 'OLE

Const FE_SELCHANGE = WM_USER + 1004 '選択状態が変更された

'マーク用の定数--------------------------------------------------------------
Const F_MARK_NONE = 0 '何もなし
Const F_MARK_BB = 1 '青い棒です。
Const F_MARK_RB = 2 '赤い棒です。
Const F_MARK_GB = 3 '緑の棒です。

'強調単語の定数--------------------------------------------------------------
Const EMP_INVALIDITY = 0 '無効
Const EMP_WORD = 1 '単語を強調
Const EMP_LINE_AFTER = 2 'それ以降~行末
Const EMP_LINE_BETWEEN = 3 '二つの文字の間(同一行に限る・二つの文字列を指定)
Const EMP_MULTI_BETWEEN = 4 '二つの文字の間(複数行にわたる・二つの文字列を指定・最大二組まで)

'マーク定数------------------------------------------------------------------
Const F_SC_TAB = 0 'タブ文字
Const F_SC_HALFSPACE = 1 '半角スペース
Const F_SC_NORMALSPACE = 2 '全角スペース
Const F_SC_UNDERLINE = 3 'カーソル下アンダーライン
Const F_SC_CRLF = 4 'CRLF改行
Const F_SC_EOF = 5 '[EOF]

'改行コードの定数------------------------------------------------------------
Const RETLINE_CRLF = 1 'キャリッジリターン+ラインフィード
Const RETLINE_CR = 2 'キャリッジリターンのみ
Const RETLINE_LF = 3 'ラインフィードのみ
Const RETLINE_AUTO = 4 '自動出力

'クリッカブル------------------------------------------------------------
Const F_CM_ALLMODE = -1 'オールモード(全機能を有効に)
Const F_CM_MAIL = 1 'メールアドレス
Const F_CM_HTTP = 2 'http://
Const F_CM_HTTPS = 4 'https://
Const F_CM_FTP = 8 'ftp://

'強調表示用定数------------------------------------------------------------------
Const F_SE_BOLD = 1
Const F_SE_NON_BS = 2
Const F_SE_INDEPENDENCE_A = 4
Const F_SE_INDEPENDENCE_B = 8
Const F_SE_INDEPENDENCE_C = 16
Const F_SE_INDEPENDENCE_D = 32
Const F_SE_HEAD = 64

'色指定用定数定数------------------------------------------------------------
Const F_SC_DEFAULT = 6 '通常文字列
Const F_SC_LINENUM = 7 '行番号表示文字列
Const F_SC_LINENUMBORDER = 8 '行番号とエディタの境界線
Const F_SC_CARETLINE = 9 '行番号に表示するキャレット位置の色
Const F_SC_RULER_TXT = 10 'ルーラーの文字色
Const F_SC_RULER_BK = 11 'ルーラーの背景色
Const F_SC_RULER_LINE = 12 'ルーラーの線の色
Const F_SC_CARETPOS = 13 'ルーラーに表示するキャレット位置の色
Const F_SC_URL = 14 'クリッカブルURLの色
Const F_SC_MAIL = 15 'クリッカブルメールアドレスの色
Const F_SC_HIGHLIGHT_TXT = 16 '強調表示文字列の文字色
Const F_SC_HIGHLIGHT_BK = 17 '強調表示文字列の背景色
Const F_SC_BACKGROUND = 18 '背景色

'OLEモード設定用-------------------------------------------------------------
Const F_OLE_CUT = 1
Const F_OLE_COPY = 2
Const F_OLE_N_IN = 4
Const F_OLE_N_OUT = 8

'数値設定用定数--------------------------------------------------------------
Const F_SM_TAB = 0 'タブの文字数
Const F_SM_RULER = 1 'ルーラーの高さ
Const F_SM_LINENUM = 2 '行番号表示領域
Const F_SM_ROP2 = 3 'SetROP2で使用する定数
Const F_SM_FN_WEIGHT = 4 'フォントの太さ
Const F_SM_WHEELSCROLL = 5 'ホイールマウスのスクロール量
Const F_SM_LINESPACE = 6 '行間スペース
Const F_SM_CLICKABLE_MODE = 7 'クリッカブルモード
Const F_SM_OLEMODE = 8 'OLEモード

'禁則処理定数----------------------------------------------------------------
Const F_JPN_NONE = 0 'なし
Const F_JPN_SOFT = 1 '甘い
Const F_JPN_NORMAL = 2 '通常
Const F_JPN_HARD = 3 '厳しい

'戻り値の定数----------------------------------------------------------------
Const F_RET_OK = -1
Const F_RET_FAILED = -2
Const F_RET_MEMORY = -3
Const F_RET_PROGRAM = -4
Const F_RET_OUTID = -5
Const F_RET_CANCELED = -6
Const F_RET_CANNOTWRITE = -7
Const F_RET_OVER_MAX = -8
Const F_RET_OVER_LINE = -9
Const F_RET_OVER_INTE = -10
Const F_RET_ALREADY = -11
Const F_RET_NSELECTING = -12

'バージョン------------------------------------------------------------------
Declare Function GetFootyVer Lib "Footy.dll" () As Long
Declare Function GetFootyBetaVer Lib "Footy.dll" () As Long
'管理------------------------------------------------------------------------
Declare Function FootyRedim Lib "Footy.dll" (ByVal num As Long) As Long
Declare Function FootyDelete Lib "Footy.dll" (ByVal id As Long) As Long
Declare Function FootyCreate Lib "Footy.dll" (ByVal id As Long, ByVal hWnd As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long) As Long
'ウィンドウ関連--------------------------------------------------------------
Declare Function FootySetFocus Lib "Footy.dll" (ByVal id As Long) As Long 'Footyにフォーカスをあわせます。
Declare Function FootySetPos Lib "Footy.dll" (ByVal id As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long) As Long 'Footyの位置、大きさを変更します。
Declare Function FootyRefresh Lib "Footy.dll" (ByVal id As Long) As Long 'Footyを再描写します。
Declare Function FootySetVisible Lib "Footy.dll" (ByVal id As Long, ByVal v As Long) As Long 'Footyの表示・非表示を切り替えます。
Declare Function FootyGetWnd Lib "Footy.dll" (ByVal id As Long) As Long 'Footyの表示・非表示を切り替えます。
'編集関連--------------------------------------------------------------------
Declare Function FootyCopy Lib "Footy.dll" (ByVal id As Long) As Long '現在選択している文字をクリップボードへコピーします。
Declare Function FootyCut Lib "Footy.dll" (ByVal id As Long) As Long '現在選択している文字をクリップボードへコピーして削除します。
Declare Function FootyPaste Lib "Footy.dll" (ByVal id As Long) As Long 'クリップボードから現在のキャレットの位置に貼り付けます。
Declare Function FootyUndo Lib "Footy.dll" (ByVal id As Long) As Long 'アンドゥ処理を行います。
Declare Function FootyRedo Lib "Footy.dll" (ByVal id As Long) As Long 'リドゥ処理を行います。
Declare Function FootyIndent Lib "Footy.dll" (ByVal id As Long) As Long 'インデント処理を行います。
Declare Function FootyUnIndent Lib "Footy.dll" (ByVal id As Long) As Long '逆インデント処理を行います。
Declare Function FootySelectAll Lib "Footy.dll" (ByVal id As Long) As Long '全て選択処理を行います。
'文書データの取得・設定------------------------------------------------------
Declare Function FootySetText Lib "Footy.dll" (ByVal id As Long, ByVal pszText As String) As Long 'Footyのテキスト全体を設定します。
Declare Function FootyGetTextLength Lib "Footy.dll" (ByVal id As Long) As Long '現在編集中のテキストのバイト数を得ます。
Declare Function FootyGetText Lib "Footy.dll" (ByVal id As Long, ByVal pOut As String, _
ByVal ret As Long) As Long '現在編集中のテキストを取得します。
Declare Function FootyGetLines Lib "Footy.dll" (ByVal id As Long) As Long '現在の総行数を取得します。
Declare Function FootySetSelText Lib "Footy.dll" (ByVal id As Long, ByVal pszText As String) As Long '選択文字列の設定
Declare Function FootyGetSelText Lib "Footy.dll" (ByVal id As Long, ByVal pOut As String) As Long '選択文字列の取得
Declare Function FootyGetLineData Lib "Footy.dll" (ByVal id As Long, ByVal line As Long) As Long '指定行の文字列取得
Declare Function FootyGetLineLen Lib "Footy.dll" (ByVal id As Long, ByVal line As Long) As Long '指定行の文字列取得
Declare Function FootyGetLineCode Lib "Footy.dll" (ByVal id As Long) As Long '自動認識された改行コードを取得

'選択関連--------------------------------------------------------------------
Declare Function FootySetSelA Lib "Footy.dll" (ByVal id As Long, ByVal sLine As Long, ByVal sPos As Long, _
ByVal eLine As Long, ByVal ePos As Long) As Long '選択状態を設定します。
Declare Function FootyGetSelA Lib "Footy.dll" (ByVal id As Long, ByRef sLine As Long, ByRef sPos As Long, _
ByRef eLine As Long, ByRef ePos As Long) As Long '選択状態を取得します。
Declare Function FootySetSelB Lib "Footy.dll" (ByVal id As Long, ByVal sPos As Long, ByVal ePos As Long) As Long '選択状態を設定します。
Declare Function FootyGetSelB Lib "Footy.dll" (ByVal id As Long, ByRef pStart As Long, ByRef pEnd As Long) As Long '選択状態の取得
'カーソル関連----------------------------------------------------------------
Declare Function FootyGetCaretLine Lib "Footy.dll" (ByVal id As Long) As Long 'キャレット行を取得します。
Declare Function FootyGetCaretPos Lib "Footy.dll" (ByVal id As Long) As Long 'キャレット桁を取得します。
Declare Function FootySetCaretLine Lib "Footy.dll" (ByVal id As Long, ByVal line As Long) As Long 'キャレット行を設定します。
Declare Function FootySetCaretPos Lib "Footy.dll" (ByVal id As Long, ByVal pos As Long) As Long 'キャレット桁を設定します。
Declare Function FootyGetCaretThrough Lib "Footy.dll" (ByVal id As Long) As Long 'キャレット位置を通し番号で取得します。
Declare Function FootySetCaretThrough Lib "Footy.dll" (ByVal id As Long, ByVal pos As Long) As Long 'キャレット位置を等し番号で設定します。
'マーク・強調----------------------------------------------------------------
Declare Function FootySetMark Lib "Footy.dll" (ByVal id As Long, ByVal line As Long, ByVal mark As Long, _
ByVal bRedraw As Long) As Long 'マークをセットします。
Declare Function FootyGetMark Lib "Footy.dll" (ByVal id As Long, ByVal line As Long) As Long 'マークを取得します。
Declare Function FootySetHighlight Lib "Footy.dll" (ByVal id As Long, ByVal szString As String, _
ByVal bBS As Long, ByVal bRedraw As Long) As Long 'ハイライト文字を設定します。
Declare Function FootySetEmphasis Lib "Footy.dll" (ByVal id As Long, ByVal szWord1 As String, ByVal szWord2 As String, ByVal nType As Long, _
ByVal color As Long, ByVal bIndependence As Long, ByVal nLevel As Long, ByVal nPLevel As Long, _
ByVal bBold As Long) As Long '強調文字を設定します。
Declare Function FootyAddEmphasis Lib "Footy.dll" (ByVal id As Long, ByVal szWord1 As String, ByVal szWord2 As String, ByVal nType As Long, _
ByVal color As Long, ByVal nStatus As Long, ByVal nLevel As Long, ByVal nPLevel As Long) As Long '強調文字を設定します。
Declare Function FootyEndEmphasis Lib "Footy.dll" (ByVal id As Long) As Long '強調文字を設定し終わったら必ず呼び出してください!
Declare Function FootyResetEmphasis Lib "Footy.dll" (ByVal id As Long, ByVal bRedraw As Long) As Long '強調表示を全て解除
'設定関連--------------------------------------------------------------------
Declare Function FootyFontDialog Lib "Footy.dll" (ByVal id As Long, ByVal szFontName As String, _
ByVal bRedraw As Long) As Long 'フォントダイアログを表示し、その内容に表示を変更します。
Declare Function FootySetFont Lib "Footy.dll" (ByVal id As Long, ByVal szFontName As String, _
ByVal point As Long, ByVal bRedraw As Long) As Long 'フォントを設定します。
Declare Function FootySetColor Lib "Footy.dll" (ByVal id As Long, ByVal obj As Long, ByVal color As Long, _
ByVal bRedraw As Long) As Long '色を変更します(マーク用定数および色指定定数を使用可能)
Declare Function FootySetMarkVisible Lib "Footy.dll" (ByVal id As Long, ByVal obj As Long, ByVal bVisible As Long, _
ByVal bRedraw As Long) As Long 'マークの表示設定をします。
Declare Function FootySetMetrics Lib "Footy.dll" (ByVal id As Long, ByVal obj As Long, _
ByVal num As Long, ByVal bRedraw As Long) As Long '数値を設定します。
Declare Function FootyWriteEnable Lib "Footy.dll" (ByVal id As Long, ByVal bEnable As Long) As Long '書き換えが可能であるかどうか設定します。
Declare Function FootySetLapel Lib "Footy.dll" (ByVal id As Long, ByVal bLapel As Long, ByVal JPNhyphenation As Long, _
ByVal bRedraw As Long) As Long '折り返し処理

'Active Basicのための宣言-----------------------------------------------------
Type FFD_AB
FontName As String
FontPoint As Long
End Type

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'FootyGetTextを簡単に使えるようにした関数です。
'<引数>
'id FootyのID
'<戻り値>
'取得した文字列を返します。もしもエラーが出たら空文字列が返ります。
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Function FootyGetTextAB(id As Long, ret As Long) As String
Dim work As String
work = Space$(FootyGetTextLength(id) + 1) '文字列の長さを確保
If FootyGetText(id, work, ret) = F_RET_OK Then '関数が成功したとき
FootyGetTextAB = Left$(work, InStr(work, Chr$(0)) - 1)
Else
FootyGetTextAB = ""
End If
End Function

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'FootyGetSelTextを簡単に使えるようにした関数です。
'<引数>
'id FootyのID
'<戻り値>
'取得した文字列を返します。もしもエラーが出たら空文字列が返ります。
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Function FootyGetSelTextAB(id As Long) As String
Dim work As String
Dim ret As Long
Dim nLen As Long
nLen = FootyGetSelLengthAB(id)
If nLen = -1 Then
FootyGetSelTextAB = "エラーなんです…"
Else
work = Space$(nLen + 1) '文字列の長さを確保
If FootyGetSelText(id, work) = F_RET_OK Then '関数が成功したとき
FootyGetSelTextAB = Left$(work, InStr(work, Chr$(0)) - 1)
Else
FootyGetSelTextAB = ""
End If
End If
End Function

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'FootyFontDialogを簡単に使えるようにした関数です。
'<引数>
'id FootyのID
'bRedraw 再描写をするかどうか
'<戻り値>
'選択したフォントの情報が格納されます。
'ret.FontPointにはキャンセルされたときF_RET_CANCELEDが入ります。
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Function FootyFontDialogAB(id As Long, ByVal bRedraw As Long) As FFD_AB
Dim ret As FFD_AB
Dim work As String
work = Space$(MAX_PATH + 1)
ret.FontPoint = FootyFontDialog(id, work, bRedraw)
If ret.FontPoint >= 0 Then
work = Left$(work, InStr(work, Chr$(0)) - 1)
ret.FontName = work
End If
FootyFontDialogAB = ret
End Function

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'FootyGetLineDataを簡単に使用できるようにする関数です。
'<引数>
'id FootyのID
'line 行番号
'<戻り値>
'指定した行番号の文字列が返ります。
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Function FootyGetLineDataAB(id As Long, line As Long) As String
Dim ret As String '返却分
Dim length As Long '行の長さ
Dim ptr As Long '行文字列へのポインタ
length = FootyGetLineLen(id, line)
ret = Space$(length + 1) '領域を確保
ptr = FootyGetLineData(id, line)
MoveMemory ByVal ret, ByVal ptr, length
FootyGetLineDataAB = ret
End Function

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'選択している文字列の長さを取得する関数
'<引数>
'id FootyのID
'<戻り値>
'選択している文字列の長さが返ります。
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Function FootyGetSelLengthAB(id As Long) As Long
Dim nStart As Long
Dim nEnd As Long
If FootyGetSelB(id, nStart, nEnd) = F_RET_OUTID Then
FootyGetSelLengthAB = -1
Else
FootyGetSelLengthAB = nEnd - nStart
End If
End Function


'==============================================================================
'TODO:以下の関数をプログラムの最初と最後に呼び出すと
'Footyからイベントを受け取ることができます。
'ただし、これらの処理を行うと、デバッグ状態のときに
'Active Basic本体が挙動不審に陥ってしまう可能性が高いようです。
'なるべく開発はWindows2000/XP環境下で行うようにしてください。
'==============================================================================

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'サブクラス化の開始
'イベントを取得するためにサブクラス化をします。
'<引数>
'hWnd サブクラス化するウィンドウハンドル(From1.hwndなどを指定します。)
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Sub StartSubclass(hWnd As Long)
Debug.Print "サブクラス化を開始しました。"
WinProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf AppWndProc)
End Sub

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'サブクラス化の終了
'TODO:StartSubclassを使用するときは
'プログラム終了時にこの関数を確実に呼び出してください!!!
'<引数>
'hWnd サブクラス化を解除するウィンドウハンドル
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Sub EndSubclass(hWnd As Long)
Debug.Print "サブクラス化を終了しました。"
SetWindowLong hWnd, GWL_WNDPROC, WinProc
End Sub

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'サブクラス化して、使用するメッセージ処理。
'改変しないでください。
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Function AppWndProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case msg
Case FE_CHANGE
OnChange LOWORD(wParam), HIWORD(wParam)
Case FE_MOUSEMOVE
OnMouseMove LOWORD(wParam), HIWORD(wParam)
Case FE_CONTEXTMENU
OnContextMenu LOWORD(wParam)
Case FE_CARETMOVE
OnCaretMove LOWORD(wParam), HIWORD(wParam)
End Select
AppWndProc = CallWindowProc(WinProc, hWnd, msg, wParam, lParam)
End Function

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'Footyの変更イベント
'<引数>
'id 変更のあったFootyのID番号
'how どのように変更されたか
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Sub OnChange(id As Long, how As Long)
'TODO:変更イベントを記述します。
'できれば、ここから外部の関数などを呼び出す方が
'コードの保守性が高まるのでその方がいいです。
End Sub

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'Footyの上でマウスが動かされたときのイベント
'<引数>
'id 動かされたFootyのID番号
'where 動かされた場所
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Sub OnMouseMove(id As Long, where As Long)
'TODO:マウスが動かされたときのイベントを記述します。
'できれば、ここから外部の関数などを呼び出す方が
'コードの保守性が高まるのでその方がいいです。
End Sub

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'コンテキストメニューの要求イベント
'<引数>
'id FootyのID番号
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Sub OnContextMenu(id As Long)
'TODO:右クリックメニューのイベントをここに記述します。
'できれば、ここから外部の関数などを呼び出す方が
'コードの保守性が高まるのでその方がいいです。

'TODO:サンプルで使用するために以下のコードを使用しています。
'実際に使用するときは削除してください。
Form1.OnContextMenu
End Sub

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'Footyのカーソル位置変化イベント
'<引数>
'id 変更のあったFootyのID番号
'how どのように変更されたか
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Sub OnCaretMove(id As Long, how As Long)
'TODO:キャレットが動いたときのイベントを記述します。
'できれば、ここから外部の関数などを呼び出す方が
'コードの保守性が高まるのでその方がいいです。
End Sub
mir

#4 投稿記事 by mir »

丁寧なご回答、ありがとうございます。

Footyはシェアウェアだそうなので、中学生の僕には利用できそうもありません;;
なので、仕方なく現在カーソルのある行、列をステータスバーに表示する
という方法を取りたいと思います。

ありがとうございました。
返信する