こんにちは。AB歴2週間の超初心者です。
いきなりですが、選択文字列の前と後ろに文字列を挿入方法はあるのでしょうか。今、HTMLエディタを作っていて選択した文字列の前に、「<!--」と「-->」となどを挿入させたいのです。
教えてください。
これからもよろしくお願いします。
選択文字列の前と後ろに文字列を挿入
古いAB掲示板に有りました。
動作未確認です。
管理者様 問題がありましたら削除願います。
動作未確認です。
[ここをクリックすると内容が表示されます]
同じ板なので問題無いと思いますが、勝手に転記して・・・・コード: 全て選択
[AB3] エディットボックスの選択範囲からの置換
日時: 2004/02/25 14:22
名前: AB掲示板
AB掲示板からの引用です。
投稿時間:2004/02/20(Fri) 04:27
投稿者名:高信期
Eメール:
URL :
タイトル:Re^2: タグで囲む方法
> 自分が考えているのは、選択されている文字列の、
> キャレット開始位置、キャレット終了位置を取得して、
> そこに、タグを挿入することで実現しようと思っています。
そんな関数を作ってみました。
EditBox1 というエディットボックスに対して
EditCircleSelText(GetDlgItem(hMainWnd, EditBox1), "<B>", "</B>")
とすると選択範囲を"<B>(選択範囲の文字列)</B>"と置換できます。
参考にしてください。
'ヘルパー関数群
'選択範囲の開始位置と終了位置の取得
Sub GetEditSelPos(ByVal hEdit As Long, ByRef StartPos As Long, ByRef EndPos As Long)
if hEdit <> 0 then _
SendMessage(hEdit, EM_GETSEL, VarPtr(StartPos), VarPtr(EndPos))
End Sub
'選択範囲の文字列の取得
'選択されていなければ空文字列を返す
Function GetEditSelText(ByVal hEdit As Long) As String
Dim StartPos As Long, EndPos As Long, SelLen As Long
StartPos = 0
EndPos = 0
GetEditSelPos(hEdit, StartPos, EndPos)
SelLen = EndPos - StartPos
'hEditが0であったり文字列が選択されていなければSelLenは0になる
GetEditSelText = ZeroString(SelLen)
If SelLen <> 0 then
'一旦エディットの文字列を選択範囲の終了位置まで読み込む
'選択範囲が複数行にまたがる場合も考えればこれが一番楽な方法
Dim Temp As String
Temp = ZeroString(EndPos)
SendMessage(hEdit, WM_GETTEXT, EndPos + 1, StrPtr(Temp))
memcpy(StrPtr(GetEditSelText), StrPtr(Temp) + StartPos, SelLen)
End If
End Function
'選択範囲の文字列の置換
Sub EditReplaceSel(ByVal hEdit As Long, ByVal Value As String)
if hEdit <> 0 then _
SendMessage(hEdit, EM_REPLACESEL, 1, StrPtr(Value));
End Sub
'メインの手続き
'選択された文字列をBeforeText, AfterTextで囲む。
'選択されていなければ何もしない
Sub EditCircleSelText(ByVal hEdit As Long, ByVal BeforeText As String, ByVal AfterText As String)
if hEdit = 0 then Exit Sub
Dim SelText As String
SelText = GetEditSelText(hEdit)
if Len(SelText) <> 0 then _
EditReplaceSel(hEdit, BeforeText + SelText + AfterText)
End Sub
管理者様 問題がありましたら削除願います。
SendMessage等を使用する事で解決できそうです。
コード: 全て選択
Sub AddTag1()
Dim newbuf As *Byte,buf As *Byte,oldbuf As *Byte
Dim length As Long
Dim max As Long,min As Long
Dim hEdit As HANDLE
hEdit=GetDlgItem(hMainWnd,EditBox1)
SendMessage(hEdit,EM_GETSEL,VarPtr(min) As DWord,VarPtr(max) As DWord)
length=GetWindowTextLength(hEdit)
oldbuf=calloc(length+1)
GetWindowText(hEdit,oldbuf,length+1)
buf=calloc(max-min+1)
newbuf=calloc(max-min+8)
memcpy(buf,oldbuf+min,max-min)
wsprintf(newbuf,"<!--%s-->",buf)
SendMessage(hEdit,EM_REPLACESEL,0,newbuf As DWord)
free(buf)
free(oldbuf)
free(newbuf)
End Sub
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。