以下のサンプルで試してください。
EditBox1 内の文章にタブがあれば空白に変換して更新します。
# メール送信問題は、解決しているので、新たな問題は、
別に質問を起こしたほうが良いかもしれません。
コード:
Sub MainWnd_CommandButton1_Click()
Const NUM_TABROWS = 4
Dim i As Long
Dim n As Long
Dim nLen As Long
Dim pszDest As *Byte
Dim pszSrc As *Byte
nLen = GetWindowTextLength( GetDlgItem(hMainWnd, EditBox1) )
If nLen = 0 Then Exit Sub
pszSrc = calloc(nLen + 1)
If pszSrc = NULL Then Exit Sub
If GetWindowText(GetDlgItem(hMainWnd, EditBox1), pszSrc, nLen + 1) = 0 Then Goto *ExitTag
'文章中のタブ数を数える。
While i < nLen
If IsDBCSLeadByte( pszSrc ) Then
i = i + 1
ElseIf pszSrc = 9 Then
n = n + 1
End If
i = i + 1
Wend
If n = 0 Then Exit Sub
pszDest = calloc(nLen + (n * NUM_TABROWS) + 1)
If pszDest = NULL Then Goto *ExitTag
Dim k As Long
'全ての文章データを、1バイトずつ検証してタブなら半角空白に置き換える。
i = 0
While i < nLen
'全角文字(2バイト)の先頭なら、2バイト分をコピー。
If IsDBCSLeadByte( pszSrc ) Then
memcpy(pszDest + k, pszSrc + i, 2)
k = k + 2
i = i + 1
'タブなら、タブの列数分の半角空白をコピー。
ElseIf pszSrc = 9 Then
lstrcpy( pszDest + k, String$(NUM_TABROWS, " ") )
k = k + NUM_TABROWS
'半角文字なら、1バイト分をコピー。
Else
pszDest[k] = pszSrc
k = k + 1
End If
i = i + 1
Wend
SetWindowText(GetDlgItem(hMainWnd, EditBox1), pszDest)
MsgBox 0, Str$(n) + " 個のタブを置き換えました"
*ExitTag
If pszSrc Then free(pszSrc)
If pszDest Then free(pszDest)
End Sub