詳しく説明しますと、例えばエディットボックス内に下のような
コード: 全て選択
2
3
4
5
このようなプログラムにあう関数はありますでしょうか?
教えてください。
コード: 全て選択
/*
数字から文字列の作り方の例:
nCount=2ならば、文字列strBufは
-----
| 2 |
| 3 |
| 4 |
-----
となる。
*/
Dim strBuf As String
strBuf = Str$(nCount) + Ex"\n" '後ろのは改行コードの付加。
strBuf = strBuf + Str$(nCount+1) + Ex"\n"
strBuf = strBuf + Str$(nCount+2) + Ex"\n"
コード: 全て選択
Function ValEx(ByVal lpString As BytePtr) As Double
Dim dmyString As BytePtr
Dim length As Long, cnt As Long
length=lstrlen(lpString)
dmyString=calloc(length+1)
While cnt<>length
If IsDBCSLeadByte(lpString[cnt])=TRUE Then
cnt++
Else
If ( 47<lpString[cnt] ) And ( 58>lpString[cnt] ) Then
memcpy(dmyString,VarPtr(lpString[cnt]),length-cnt)
ValEx=Val(dmyString)
Exit While
End If
End If
cnt++
Wend
free(dmyString)
End Function
Dim i As Double
i=ValEx("G2TR")
その最後の文字のかたまりはどのようになっているのでしょうか?GTRさん さんが書きました:> 文字列の一番最後の文字のかたまりの中の変数を取り出してその次、その次・・・・という風にしたいのです。
コード: 全て選択
/*
ValEx( strBuf )とすると、文字列strBufの最初の数字が返るが、
そこにちょっと追加して最後の数字を得る。
*/
Functoin ValExR(ByVal lpString As BytePtr) As Double
Dim pMark As BytePtr
pMark = lstrrchr( lpStringf, 10 )'一番最後の改行(LF,\n)の位置を探す
If( pMark<>NULL )Then
ValExR = ValEx( pMark ) '最終行に対してValExを実行。
Else
ValExR = ValEx( lpString ) '一行なので、そのままValExを実行。
EndIf
EndFunction
'lstrrchr()の定義
'※最後にある文字bSearch2の位置を返す。
Declare Function _lstrrchr Lib "shlwapi" Alias "StrRChrIA" _
( pBufStart As BytePtr, _
pBufEnd As BytePtr, _
bSearch2 As Byte ) As BytePtr
Function lstrrchr( pBuffer1 As BytePtr, bSearch2 As Byte ) As BytePtr
lstrrchr = _lstrrchr( pBuffer1, _
pBuffer1 + lstrlen(pBuffer1), _
bSearch2 )
EndFunction
Dim i As Double
i=ValEx( Ex"一行目\n\r二行目にG2TR" )
横スレですが。GTRさん さんが書きました:> cnt++が文法が間違っていますというエラーが出ます。
何に使うかよく分かりませんがこんなのはどうでしょうか?> もう少し詳しく書いたほうが良かったようです。
> すいません。
> 私がしたいのは、G2TRなどの文字列(2は変数)で
> 初めは変数が1でいいのですが、次に押すと2になる。
> そういうコードを前回にも投稿しました。
> それを一旦保存し、プログラムを閉じる。
> そしてもう一度開く、そのときにそのボタンをまた押すと、
> 今度はG3TRとなるようにしたいのです。
> よくこの変数の値が50まで行くことがあります。
> しかし、それをまたその数からというようにしたいのです。
> 投稿してもらっても一つも役に立っていないようで、本当に申し訳ありません。
コード: 全て選択
Dim buf[255] As Char
'GetWindowText(GetDlgItem(hMainWnd,EditBox1),buf,256)
lstrcpy(buf,"G9TR")
Dim str As String
If buf[2]=>Asc("0") and buf[2]<=Asc("9") Then
Select Case buf[2]-Asc("0")
Case 0,1,2,3,4,5,6,7,8
buf[2]++
Case 9
buf[2]=Asc("0")
buf[1]++
End Select
Else
Select Case buf[1]-Asc("0")
Case 0,1,2,3,4,5,6,7,8
buf[1]++
Case 9
buf[1]=Asc("0")
str=MakeStr(VarPtr(buf[1]))
lstrcpy(VarPtr(buf[2]),StrPtr(str))
buf[1]=Asc("1")
End Select
End If
Print MakeStr(buf)
'SetWindowText(GetDlgItem(hMainWnd,EditBox1),buf)
コード: 全て選択
'読み込んだつもりで初期値を10に設定しています。
Dim i=10 As Long
Sub MainWnd_CommandButton1_Click()
Dim hEdit As HWND
Dim cnt As Long
hEdit=GetDlgItem(hMainWnd,EditBox1)
SetWindowText(hEdit,0)
For cnt=1 To i
SendMessage(hEdit,EM_REPLACESEL,FALSE,"G"+Str$(cnt)+"TR"+Ex"\r\n")
Next
End Sub
念のため確認なのですが、GTRさん さんが書きました:> それを一旦保存し、プログラムを閉じる。
> そしてもう一度開く、そのときにそのボタンをまた押すと、
> 今度はG3TRとなるようにしたいのです。
どうやら、文字列の形式はGTRさん さんが書きました:> 投稿してもらっても一つも役に立っていないようで、本当に申し訳ありません。