ページ 11

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

Posted: 2006年8月04日(金) 21:41
by k2
作成してみたので投稿します。

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

MainWnd.sbp:

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

Posted: 2006年8月25日(金) 09:05
by MML
これすごいですね!
使わせていただきます!!

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

Posted: 2006年8月25日(金) 13:45
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はいらなくなるので宣言しなくても大丈夫です。

ちょっとしたメモ

Posted: 2006年8月29日(火) 17:39
by SIZUYA

コード: 全て選択


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

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

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


メモ書き程度に報告しておきます。

Posted: 2007年9月17日(月) 15:48
by S/AL
これは使えますね!
いただいていきますw

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

Posted: 2007年10月13日(土) 14:14
by 淡幻星
グローバル変数を無くしてみました。
Edit窓のフォントサイズで行数描画するようにしてあります。


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

コード: 全て選択

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

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

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


【追記】at 2015/09/06
読み取り専用属性の付いたEdit窓に対しては、
WM_CTLCOLORSTATICメッセージを捉まえて処理してください。

淡幻星さんへ

Posted: 2008年11月15日(土) 19:59
by 三毛CAT
ありがとうございます。
便利に使わせていただきます。