クリップボードへの文字の転送
Posted: 2006年2月17日(金) 17:45
EditBoxとStaticとCommandButtonを2つ作り、ボタン1でEditBoxに入れたアルファベット一文字を変換し三文字にし(例 x → xyz)ボタン2でStaticの内容をクリップボードにコピーするソフトを作りました。変換のところまでは問題なくいくのですがクリップボードに文字を送ってプログラムを閉じる時にエラーが出るようになりました。クリップボードに文字を送る際のコードは以下のようになっています。
[ここをクリックすると内容が表示されます]
どうもEditBoxに17文字以上入れるとこのエラーが起きるようです。それ以下だと正常に動くのですが…。原因は何なのでしょうか?[/code]コード: 全て選択
Sub MainWnd_CommandButton2_Click() 'クリップボードへ送る
Dim TLSeq As String '文字列バッファー確保
GetDlgItemTextStr(hMainWnd,Static1,TLSeq)'文字列取得
Dim pszCopyText As BytePtr 'メモリアドレス用変数
OpenClipboard(0) 'クリップボード開く
EmptyClipboard() 'クリップボードを空にする
pszCopyText = malloc(Len(TLSeq)+1)'文字列用メモリ確保
lstrcpy(pszCopyText,TLSeq) '文字列を格納
SetClipboardData(CF_TEXT,pszCopyText)'文字を送る
free(pszCopyText) 'メモリを開放
CloseClipboard() 'クリップボードを閉じる
End Sub
'イグトランス氏作の関数
Function GetWindowTextStr(hwnd As HWND, ByRef str As String) As Long
Dim Length As Long
Length = GetWindowTextLength(hwnd)
str = ZeroString(Length)
If Length = 0 Then
GetWindowTextStr = 0
Exit Function
End If
GetWindowTextStr = GetWindowText(hwnd, StrPtr(str), Length + 1)
SetDWord(StrPtr(str) - SizeOf (DWord), GetWindowTextStr)
End Function
Function GetDlgItemTextStr(hDlg As HWND, idDlgItem As Long, ByRef str As String) As Long
GetDlgItemTextStr = GetWindowTextStr(GetDlgItem(hDlg, idDlgItem), str)
End Function