ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 04:55

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - String型を返すWindows APIのラッパ
作成者 メッセージ
  記事の件名:   引用付きで返信する
GetWindowTextStrの焼き直しです。GetWindowTextLengthはちょうど引数が一致するので直接渡しています。
GetWindowTextは微妙に引数が異なるので,そうは行きませんでした。
コード:
Function GetWindowTextStr(hwnd As HWND) As String
	GetWindowTextStr = GetString(hwnd, 
		GetProcAddress(GetModuleHandle("user32"), "GetWindowTextLengthA"),
		AddressOf(GetWindowTextBufLen))
End Function

Function GetDlgItemTextStr(hDlg As HWND, idDlgItem As Long) As String
    GetDlgItemTextStr = GetWindowTextStr(GetDlgItem(hDlg, idDlgItem)) 
End Function

Function GetWindowTextBufLen(hwnd As HWND, p As *Byte, len As Long) As Long
    GetWindowTextBufLen = GetWindowText(hwnd, p, len + 1)
End Function
平成18年11月04日修正しました。
投稿記事 Posted: 2006年9月29日(金) 09:55
  記事の件名:  IDListとSHBrowseForFolder  引用付きで返信する
次はIDListからパス文字列へ変換するSHGetPathFromIDListのラッパ、IDListToPathStrと
それを使ってフォルダ選択ダイアログの結果をStringで返すBrowseForFolder_Strです。
なんの面白みも無いですが,使用例です。
コード:
Dim folderPath As String
folderPath = BrowseForFolder_Str(hMainWnd, "フォルダの選択", BIF_RETURNONLYFSDIRS)
MessageBox(hMainWnd, StrPtr(folderPath), "選択したフォルダのパス", MB_OK)
BrowseForFolder_Strは最初の引数がウィンドウハンドル,次にダイアログのタイトル,最後にフラグ指定の引数としました。
投稿記事 Posted: 2006年6月13日(火) 17:06
  記事の件名:   引用付きで返信する
というわけで,まずはDragQueryFileのString版,
DragQueryFileStrです。
ようするにGetStr_GetLenProcは文字列の長さを返す関数で,
GetStr_GetStrProcは実際に文字列を得てさらに新たな長さを返すような関数であればよいのです。
そうすればGetStringがZeroStringを呼んだり文字列の長さを調整したりなどといった雑用をこなしてくれます。
投稿記事 Posted: 2006年6月13日(火) 15:32
  記事の件名:  String型を返すWindows APIのラッパ  引用付きで返信する
GetWindowTextStrやGetDlgItemStrの要領で文字列を結果として返すラッパを投稿していきます。
コード:
TypeDef GetStr_GetLenProc = *Function(pv As VoidPtr) As DWord
TypeDef GetStr_GetStrProc = *Function(pv As VoidPtr, buf As *Byte, len As DWord) As DWord

Function GetString(pv As VoidPtr, pfnGetLen As GetStr_GetLenProc, pfnGetStr As GetStr_GetStrProc) As String
	Dim len As DWord
	len = pfnGetLen(pv)
	If len = 0 Then Exit Function
	GetString = ZeroString(len)
	len = pfnGetStr(pv, StrPtr(GetString), len)
#ifdef _AB_VER5
	GetString.Length = len
#else
	SetDWord(StrPtr(GetString) - SizeOf (DWord), len)
#endif
End Function
本来ならクラスを使ってやりたいところですが,抽象メンバ関数が無いので,通常の関数と関数ポインタを使っていますが,
それさえ目をつぶればテンプレートメソッドパターンになっているはずです。

とにかくこれ単独で使うのではなく,実際のラッパは次以降です。

2006/09/29 AB5に対応させました。
投稿記事 Posted: 2006年6月13日(火) 15:26

全ての表示時間は UTC+09:00 です


ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean