> EditBox2へ入力されたURLをそのまま出力しようと思ってるのですが、全て1行目のURLとなってしまいます。
> 1行のみの入力の場合は思った通りの動作を行うのですが複数行になると上手く動いてくれません。
単にEditBox1の内容をEditBox2に出力するなら以下のようになります。
[ここをクリックすると内容が表示されます]
> 1.EditBox1に入力された文字がURL以外の場合のエラー処理のやり方コード: 全て選択
' ウィンドウに設定されている文字列を取得
Function GetWindowTextPtr(ByVal hWnd As HWND) As BytePtr
Dim len As Long
len=GetWindowTextLength(hWnd)+1
GetWindowTextPtr=calloc(len)
GetWindowText(hWnd,GetWindowTextPtr,len)
End Function
Dim lpEditText As BytePtr
' EditBox1の内容を取得し、EditBox2に出力
lpEditText=GetWindowTextPtr(GetDlgItem(hMainWnd,EditBox1)
SetDlgItemText(hMainWnd,EditBox2,lpEditText)
frre(lpEditText)
> (EditBox2にURLではありません と出力したい)
文字列が "http://" で始まるかどうかでURLかそうじゃないかを判断してしまいます。
[ここをクリックすると内容が表示されます]
> 2.EditBox_GetLineで取得したaddressのバイト数の取得方法コード: 全て選択
' 指定された文字列で始まるか判定
Function startsWith(ByVal lpszText As BytePtr,ByVal lpString As BytePtr) As BOOL
Dim len As Long
Dim _pStr As BytePtr
startsWith=FALSE
len=lstrlen(lpString)
_pStr=slice(lpszText,0,len)
If lstrcmp(_pStr,lpString)=0 Then
startsWith=TRUE
End If
free(_pStr)
End Function
' 文字列から特定の位置の文字列を取得
Function slice(ByVal lpszText As BytePtr,ByVal startPos As Long,ByVal endPos As Long) As BytePtr
Dim len[1] As Long
len[0]=lstrlen(lpszText)
If startPos < endPos Then
If endPos>len[0] Then
endPos=len[0]
End If
len[1]=endPos-startPos
Else
If startPos>len[0] Then
startPos=len[0]
End If
len[1]=startPos-endPos
End If
slice=calloc(len[1]+1)
memcpy(slice,VarPtr(lpszText[startPos]),len[1])
End Function
' "aiueokakikukeko" がURLかどうなのか判断する
' 先頭文字が "http://" かそうじゃないかで判断してしまう
If startsWith("aiueokakikukeko","http://")<>TRUE Then
MessageBox(hMainWnd,"URLではありません。","",MB_OK)
End If
> (今は適当な数値を入力してます)
これはlstrlen()関数というのがあって、すごく簡単です。
[ここをクリックすると内容が表示されます]
> 3.希望する動作を行うにはどう修正したら良いのでしょうか?コード: 全て選択
Dim len As Long
Dim lpLineText As BytePtr
' EditBox_GetLineで取得した address のバイト数の取得方法
' 1行目の文字列のバイト数を取得
lpLineText=EditBox_GetLine(hEdit,0)
len=lstrlen(lpLineText)
free(lpLineText)
> 2.が原因とも思えないので・・・
希望する動作の全体像がよく分からないのと、面倒くさくて...以上を参考に自分の力でできませんか?
自作関数を使ってるのでメンテナンスとか色々問題あると思いますけど...。
追記。
コードを載せる場合、BBCodeの code を hide で挟むといいですよ。
[ここをクリックすると内容が表示されます]
コード: 全て選択
ここにコードを書く。[ /code][ /hide]