ab.com コミュニティ https://www.activebasic.com/forum/ |
|
String型のGetWindowText https://www.activebasic.com/forum/viewtopic.php?t=432 |
ページ 1 / 1 |
作成者: | イグトランス [ 2005年11月04日(金) 17:17 ] |
記事の件名: | String型のGetWindowText |
GetWindowText/GetDlgItemTextを使うときには事前にGetWindowTextLengthを使って文字列の長さを求めておき、 mallocなりZeroStringなりでメモリを確保する必要があり、面倒だったり混乱を招いたりしていました。 そこで直接String型へ書き込む関数GetWindowTextStr/GetDlgItemStrなるものを作りました。 どなたか既に書いていたような気がしなくもないのですが、検索しても見つからなかったので投稿しておきます。 たとえばこういう感じに使います。(MainWndがあり、その上にボタン(ID:CommandButton1)とエディットボックス(ID:EditBox1)があるとします) ボタンを押すとエディットボックスに書かれている内容がメッセージボックスに表示されると言うものです。 コード: Sub MainWnd_CommandButton1_Click() Dim str As String GetGetDlgItemTextStr(hMainWnd, EditBox1, str) MessageBox(hMainWnd, StrPtr(str), "エディットボックスの内容", MB_OK) End SubGetWindowText/GetDlgItemTextでは文字列のバッファへのポインタとバッファのサイズという2つの引数を指定していましたが、 その代わりに直接String型の変数を指定できるようになっています。 戻り値はGetWindowText/GetDlgItemTextと同じです。(文字列の長さ) ↓使うときにはこれをコピーしてください。 [ここをクリックすると内容が表示されます]
H17.11.27コード: 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 文字列の長さをGetWindowTextの返す値を見て設定するように修正いたしました。 |
作成者: | イグトランス [ 2006年9月29日(金) 09:57 ] |
記事の件名: | |
現在のコードはAB4まででしか動きません。 AB5に対応させたのはこちらになります。 http://www.activebasic.com/forum/viewto ... =6607#6607 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |