行番号付きエディットボックス

オープンソース形式でコードを共有するフォーラムです。お役立ちコード、あなたも投稿してみませんか?
返信する
メッセージ
作成者
k2
記事: 2
登録日時: 2006年1月31日(火) 10:30
お住まい: 静岡県富士市

行番号付きエディットボックス

#1 投稿記事 by k2 »

作成してみたので投稿します。

RADツールでEditBox1という名前のエディットボックスを作成し、
以下のコードを貼り付けてください。

MainWnd.sbp:
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

Re: 行番号付きエディットボックス

#2 投稿記事 by MML »

これすごいですね!
使わせていただきます!!
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

Re:行番号付きエディットボックス

#3 投稿記事 by konisi »

DrawTextLine関数内の

コード: 全て選択

    For i=topLine To cntLine 
        str=Str$(i+1) 
        pos=SendMessage(hWnd, EM_LINEINDEX, i, 0) 
        pos=SendMessage(hWnd, EM_POSFROMCHAR, pos, 0) 
        rc.top=HIWORD(pos) 

        If rc.top>=rc.bottom Then Exit For 

        DrawText(hdc, StrPtr(str), -1, rc, DT_RIGHT Or DT_TOP Or DT_SINGLELINE Or DT_NOCLIP) 
    Next
の部分を

コード: 全て選択

	rc.top=-12
    For i=topLine To cntLine-1
        str=Str$(i+1)
        rc.top+=12
        If rc.top>=rc.bottom-12 Then Exit For
        DrawText(hdc, StrPtr(str), -1, rc, DT_RIGHT Or DT_TOP Or DT_SINGLELINE Or DT_NOCLIP)
    Next
と書き換えれば、AB4.2xのエディタのような現象が起こらなくなります。
また、そのように書き換えた場合、変数posはいらなくなるので宣言しなくても大丈夫です。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
SIZUYA
記事: 5
登録日時: 2005年10月03日(月) 05:43
お住まい: 石川県
連絡する:

ちょっとしたメモ

#4 投稿記事 by SIZUYA »

コード: 全て選択


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
    TextBoxSample_DestroyObjects()
    PostQuitMessage(0)
End Sub

 TestBoxSample_DestroyObjects() の、
 TestBoxSample を、
作成したプロジェクト名に変えるとバグが出なくなります。


メモ書き程度に報告しておきます。
PC:富士通 FMV-BIBLO MG50K
CPU:Intel Celeron M
メモリ:760MB
OS:Windows Xp Home SP2
S/AL
記事: 9
登録日時: 2007年9月16日(日) 19:32
お住まい: 栃木県某所
連絡する:

#5 投稿記事 by S/AL »

これは使えますね!
いただいていきますw
淡幻星
記事: 183
登録日時: 2005年7月19日(火) 07:02
お住まい: 宮城県
連絡する:

少々モジュール化してみました。

#6 投稿記事 by 淡幻星 »

グローバル変数を無くしてみました。
Edit窓のフォントサイズで行数描画するようにしてあります。


以下の関数を定義しておき、 Edit窓が貼り付けられている親窓のメッセージプロシージャで、
WM_CTLCOLOREDITメッセージが送られたら、

コード: 全て選択

DrawTextLine( lParam, 32 )
で呼び出してください。
  第一引数・・・描画中のEdit窓
  第二引数・・・行数表示領域の横幅

これで、Edit窓の左外側に行数が表示されます。

なお、WM_CTLCOLOREDITメッセージを捉まえて処理をした場合は、
メッセージプロシージャは
コントロールの背景を描画するときに
使われたブラシのハンドルを返すか 0を返さなければならない
らしいです。参考までに。


【追記】at 2015/09/06
読み取り専用属性の付いたEdit窓に対しては、
WM_CTLCOLORSTATICメッセージを捉まえて処理してください。
最後に編集したユーザー 淡幻星 [ 2015年9月06日(日) 12:49 ], 累計 1 回
三毛CAT

淡幻星さんへ

#7 投稿記事 by 三毛CAT »

ありがとうございます。
便利に使わせていただきます。
返信する