ab.com コミュニティ https://www.activebasic.com/forum/ |
|
[AB4]イミディエイトウインドウもどき https://www.activebasic.com/forum/viewtopic.php?t=534 |
ページ 1 / 1 |
作成者: | hanchan [ 2005年12月07日(水) 00:44 ] |
記事の件名: | [AB4]イミディエイトウインドウもどき |
デバッグをしている際にVBAのイミディエイトウインドウのようなものが欲しくなり作成しました。 需要があるかわかりませんがお試しください。 ファイルにも出力できます。 [ここをクリックすると内容が表示されます] コード: '=============================================================================== ' 名 称 :イミディエイトウインドウ(もどき)クラス ' 概 要 :Access等のVBAでDebug.Printのイミディエイトウインドウもどきを表示 ' するクラスです。 ' ファイル名:DebugClass.sbp ' 作成者 :hanchan ' ※需要があるか解りませんが、自由に手を加えてかまいません。 ' ※いづれ機能を足す予定。(クリアボタンとか。。。) ' ※最大チェックを付けてないので大量に出力すると落ちるかも。 '=============================================================================== '=============================================================================== ' 定数定義 '=============================================================================== Const WINDOW_CLASS_DBUGMSD = "DebugMassageWindow" 'ウインドウクラス Const ID_BUTTON_VIEWMODE = 1 '手前に表示ボタンID Const ID_EDIT_MSGBOX = 2 'メッセージボックスID Const ERRMSG_NORMALITY = "正常" 'エラーメッセージ:正常 Const ERRMSG_WARNNING = "警告" 'エラーメッセージ:警告 Const ERRMSG_ABNORMALITY = "異常" 'エラーメッセージ:異常 Dim hDbgWnd As HWND 'イミディエイトウインドウ Dim wcex As WNDCLASSEX 'ウィンドウクラス Dim hInstance As HINSTANCE 'インスタンス Dim bLogFilePath[MAX_PATH] As Byte 'ログファイルパス格納 Dim bLogFileName[MAX_PATH] As Byte 'ログファイル名格納 /* 出力形式列挙型 */ enum DBCD_OUTPUT DBCD_OUTPUT_IMI_ONLY 'イミディエイトのみ DBCD_OUTPUT_LOG_ONLY 'ログファイルのみ DBCD_OUTPUT_ALL '両方 End Enum /* ワーニングレベル */ enum DBCD_ERRLEVEL DBCD_ERRLEVEL_NORMALITY = 0 '正常 DBCD_ERRLEVEL_WARNNING = 1 '警告 DBCD_ERRLEVEL_ABNORMALITY = 2 '異常 End Enum '=============================================================================== ' 名 称:イミディエイトウインドウ(もどき)クラス ' 概 要:イミディエイトウインドウを出力する '=============================================================================== Class DebugClass Public '=========================================================================== ' 関数名:コンストラクタ ' 説 明:コンストラクタ ' 呼 出:なし ' 引き数:なし ' 戻り値:なし '=========================================================================== Sub DebugClass() Dim buff[MAX_PATH] As Byte Dim i As Long Dim MaxLen As Long 'インスタンス取得 hInstance = GetModuleHandle(NULL) With wcex .cbSize = sizeof(WNDCLASSEX) .style = CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS .lpfnWndProc = AddressOf(DbgWndProc) .hInstance = hInstance .hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION)) .hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_WINLOGO)) .hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)) .hbrBackground = CreateSolidBrush(GetSysColor(COLOR_3DFACE)) .lpszClassName = WINDOW_CLASS_DBUGMSD .hIconSm = LoadIcon(NULL, IDI_APPLICATION As *Byte) End With RegisterClassEx(wcex) 'exeパスをデフォルトのログ出力パスに設定する ZeroMemory(buff, MAX_PATH) MaxLen = GetModuleFileName(hInstance As DWord, buff, MAX_PATH) As Long For i = MaxLen To 1 Step -1 If (buff = Asc("\")) Then ZeroMemory(bLogFilePath, MAX_PATH) memcpy(bLogFilePath, buff, i) exit for End If Next i 'LogFile.logをデフォルトのログファイル名に設定する ZeroMemory(bLogFileName, MAX_PATH) lstrcpy(bLogFileName, "LogFile.log") End Sub '=========================================================================== ' 関数名:Print関数 ' 説 明:Debug_Printを呼び出しイミディエイトへ出力する ' 呼 出:Print(String) ' 引き数:pstrbuff As String (I/ ) 出力文字列 ' 戻り値:なし '=========================================================================== Sub Print(pstrbuff As String) 'イミディエイト出力関数を呼び出す Debug_Print(StrPtr(pstrbuff)) End Sub '=========================================================================== ' 関数名:PrintEx関数 ' 説 明:引数の内容をイミディエイト又は、ログファイルに出力する ' 呼 出:PrintEx(String, DBCD_OUTPUT, DBCD_ERRLEVEL) ' 引き数:pstrbuff As String (I/ ) 出力文字列 ' pOutPutMode As DBCD_OUTPUT (I/ ) 出力形態 ' pErrorLevel As DBCD_ERRLEVEL (I/ ) エラーレベル ' 戻り値: 0:正常 ' -1:異常 '=========================================================================== Function PrintEx(pstrbuff As String, pOutPutMode As DBCD_OUTPUT, pErrorLevel As DBCD_ERRLEVEL) '出力モードがイミディエイトの場合、イミディエイトに出力する If ((pOutPutMode = DBCD_OUTPUT_IMI_ONLY) Or _ (pOutPutMode = DBCD_OUTPUT_ALL)) Then 'イミディエイト出力関数を呼び出す Debug_Print(StrPtr(pstrbuff)) End If '出力モードがログファイルの場合、イミディエイトに出力する If ((pOutPutMode = DBCD_OUTPUT_LOG_ONLY) Or _ (pOutPutMode = DBCD_OUTPUT_ALL)) Then 'ログ出力関数を呼び出す Debug_Log(StrPtr(pstrbuff), pErrorLevel) End If End Function '=========================================================================== ' 関数名:SetLogFilePath関数 ' 説 明:ログファイルの出力ディレクトリを設定する ' 呼 出:SetLogFilePath(String) ' 引き数:pstrbuff As String (I/ ) ログファイルパス ' 戻り値:なし '=========================================================================== Sub SetLogFilePath(pstrbuff As String) 'ログファイルのパスを設定する ZeroMemory(bLogFilePath, MAX_PATH) lstrcpy(bLogFilePath, StrPtr(pstrbuff)) End Sub '=========================================================================== ' 関数名:GetLogFilePath関数 ' 説 明:ログファイルの出力ディレクトリを取得する ' 呼 出:GetLogFilePath() ' 引き数:なし ' 戻り値:ログファイルパス '=========================================================================== Function GetLogFilePath() As BytePtr 'ログファイルのパスを取得する GetLogFilePath = VarPtr(bLogFilePath) End Function '=========================================================================== ' 関数名:SetLogFileName関数 ' 説 明:ログファイルの出力ログファイル名を設定する ' 呼 出:SetLogFileName(String) ' 引き数:pstrbuff As String (I/ ) ログファイルパス ' 戻り値:なし '=========================================================================== Sub SetLogFileName(pstrbuff As String) 'ログファイルのパスを設定する ZeroMemory(bLogFilePath, MAX_PATH) lstrcpy(bLogFilePath, StrPtr(pstrbuff)) End Sub '=========================================================================== ' 関数名:GetLogFileName関数 ' 説 明:ログファイルの出力ファイル名を取得する ' 呼 出:GetLogFileName() ' 引き数:なし ' 戻り値:ログファイルパス '=========================================================================== Function GetLogFileName() As BytePtr 'ログファイルのパスを取得する GetLogFileName = VarPtr(bLogFilePath) End Function Protected '=========================================================================== ' 関数名:Debug_Print関数 ' 説 明:イミディエイトウインドウに文字列を出力する ' 呼 出:strMas(BytePtr) ' 引き数:strMas As BytePtr (I/ ) 出力文字列 ' 戻り値:なし '=========================================================================== Function Debug_Print(strMas As BytePtr) As Long Dim hEdit As HANDLE Dim lngLen As Long Dim strBuff As String If (hDbgWnd = 0) Then hDbgWnd = CreateWindowEx( _ NULL, _ WINDOW_CLASS_DBUGMSD, _ "イミディエイト(もどき)", _ &H10cc0000, _ CW_USEDEFAULT, _ CW_USEDEFAULT, _ 283, _ 234, _ 0, _ 0 As HMENU, _ GetModuleHandle(0), _ 0 _ ) SetWindowLong(hDbgWnd, GWL_WNDPROC, AddressOf(DbgWndProc) As Long) SendMessage(hDbgWnd, WM_INITDIALOG, 0, 0) End If strBuff = MakeStr(strMas) + Chr$(13) + Chr$(10) hEdit = GetDlgItem(hDbgWnd, ID_EDIT_MSGBOX) lngLen = GetWindowTextLength(hEdit) SendMessage(hEdit, EM_SETSEL, lngLen, lngLen) SendMessage(hEdit, 194, 0, StrPtr(strBuff) As LPARAM) SetFocus(hEdit) End Function '=========================================================================== ' 関数名:DbgWndProc関数 ' 説 明:イミディエイトウインドウコールバック '=========================================================================== Function DbgWndProc( hWnd As Dword, Msg As Dword, wParam As Dword, lParam As Dword ) As Long Dim hFont_DbgWnd As HFONT Select Case ( Msg ) Case WM_SIZE DbgWnd_Resize(wParam,LOWORD(lParam),HIWORD(lParam)) Case WM_INITDIALOG hFont_DbgWnd=CreateFont( -12,0,0,0,400,0,0,0,128,3,2,1,49,"MS ゴシック") CreateWindowEx( &H00000000, "BUTTON", "手前に表示", &H50001f03, 0, 2, 92, 28, hWnd As HWND, ID_BUTTON_VIEWMODE As HMENU, GetModuleHandle(0), 0 ) SendMessage( GetDlgItem(hWnd As HWND, ID_BUTTON_VIEWMODE), WM_SETFONT, hFont_DbgWnd As WPARAM, 0 ) CreateWindowEx( &H00000200, "EDIT", "", &H50200844, 0, 32, 275, 175, hWnd As HWND, ID_EDIT_MSGBOX As HMENU, GetModuleHandle(0), 0 ) SendMessage( GetDlgItem(hWnd As HWND, ID_EDIT_MSGBOX), WM_SETFONT, hFont_DbgWnd As WPARAM, 0 ) Case WM_DESTROY Case WM_CLOSE DestroyWindow(hWnd As HWND) hDbgWnd = 0 Case WM_COMMAND If (wParam = ID_BUTTON_VIEWMODE) Then DbgWnd_ViewMode_Clisk() End If Case Else DbgWndProc = DefWindowProc( hWnd As HWND, Msg, wParam, lParam ) Exit Function End Select DbgWndProc = 0 End Function '=========================================================================== ' 関数名:DbgWnd_ViewMode_Clisk関数 ' 説 明:手前に表示ボタンクリックイベント '=========================================================================== Sub DbgWnd_ViewMode_Clisk() If SendMessage( _ GetDlgItem(hDbgWnd, ID_BUTTON_VIEWMODE), BM_GETCHECK,0,0) Then SetWindowPos(hDbgWnd, HWND_TOPMOST As HWND, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) Else SetWindowPos(hDbgWnd, HWND_NOTOPMOST As HWND, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) EndIf End Sub '=========================================================================== ' 関数名:DbgWnd_Resize関数 ' 説 明:イミディエイトウインドウサイズイベント '=========================================================================== Sub DbgWnd_Resize(SizeType As Long, cx As Integer, cy As Integer) Dim hEdit As HANDLE Dim rc As RECT 'エディットボックスの大きさを変更する hEdit = GetDlgItem(hDbgWnd, ID_EDIT_MSGBOX) MoveWindow(hEdit, 0, 32, cx, cy - 32, FALSE) 'フォーカスをセット SetFocus(hEdit) End Sub '=========================================================================== ' 関数名:Debug_Log関数 ' 説 明:ログファイルに文字列を出力する ' 呼 出:strMas(BytePtr, DBCD_ERRLEVEL) ' 引き数:strMas As BytePtr (I/ ) 出力文字列 ' 戻り値:なし '=========================================================================== Function Debug_Log(strMas As BytePtr, pErrorLevel As DBCD_ERRLEVEL) As Long Dim byOutPutFilePath[MAX_PATH] As Byte Dim lngPathSize As Long Dim hFile As HANDLE Dim buff[MAX_PATH] As Byte Dim bDay[8] As Byte Dim bTime[8] As Byte Dim lngWrite As Long Dim ret As Long '変数初期化 Debug_Log = 0 ZeroMemory(byOutPutFilePath, MAX_PATH) ZeroMemory(buff, MAX_PATH) 'ファイルパス作成 lngPathSize = lstrlen(bLogFilePath) lstrcpy(byOutPutFilePath, bLogFilePath) if (bLogFilePath[lngPathSize - 1] <> Asc("\")) Then lstrcat(byOutPutFilePath, "\") End If lstrcat(byOutPutFilePath, bLogFileName) '現在日付を取得する ret = GetDateFormat( LOCALE_USER_DEFAULT, 0, ByVal 0, "yy/MM/dd", bDay, 8, ) '現在時刻を取得する ret = GetTimeFormat( LOCALE_USER_DEFAULT, 0, ByVal 0, "HH:mm:ss", bTime, 8, ) '出力文字列を作成する lstrcpy(buff, "[") lstrcat(buff, bDay) lstrcat(buff, " ") lstrcat(buff, bTime) lstrcat(buff, "][") if (pErrorLevel = DBCD_ERRLEVEL_NORMALITY) Then lstrcat(buff, ERRMSG_NORMALITY) ElseIf (pErrorLevel = DBCD_ERRLEVEL_WARNNING) Then lstrcat(buff, ERRMSG_WARNNING) ElseIf (pErrorLevel = DBCD_ERRLEVEL_ABNORMALITY) Then lstrcat(buff, ERRMSG_ABNORMALITY) End If lstrcat(buff, "]") lstrcat(buff, strMas) /* ファイルを作成する */ hFile = CreateFile( byOutPutFilePath, GENERIC_WRITE, 0, ByVal 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 ) CloseHandle(hFile) Open byOutPutFilePath For Append As #1 Print #1, MakeStr(buff) Close #1 End Function End Class /* 外部変数定義 */ Dim DebugCls As DebugClass 使用方法です。 includeして使用してください。 #ifdefで囲むとよいと思います。 [ここをクリックすると内容が表示されます]
コード: #define DEBUG #ifdef DEBUG #include "DebugClass.sbp" #endif '----------------------------------------------------------------------------- ' イベント プロシージャ '----------------------------------------------------------------------------- ' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。 ' ウィンドウ ハンドル: hMainWnd ' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。 '----------------------------------------------------------------------------- ' ウィンドウメッセージを処理するためのコールバック関数 Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord ' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。 ' イベントプロシージャの呼び出しを行います。 MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam) End Function '----------------------------------------------------------------------------- ' ここから下は、イベントプロシージャを記述するための領域になります。 Sub MainWnd_Destroy() DebugClsTest_DestroyObjects() PostQuitMessage(0) End Sub Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) Dim i As Long Dim strTemp As String i = 123 strTemp = "文字列" #ifdef DEBUG 'イミディエイトに出力 DebugCls.Print("既定値ログファイルパス:" & MakeStr(DebugCls.GetLogFilePath())) DebugCls.Print("既定値ログファイル名 :" & MakeStr(DebugCls.GetLogFileName())) DebugCls.Print("i :" & Str$(i)) DebugCls.Print("strTemp:" & strTemp) #endif End Sub Sub MainWnd_CommandButton1_Click() #ifdef DEBUG 'PrintExイミディエイト出力 DebugCls.PrintEx( "ボタン1がクリックされました。(イミディエイトのみに出力)", DBCD_OUTPUT_IMI_ONLY, DBCD_ERRLEVEL_NORMALITY) #endif End Sub Sub MainWnd_CommandButton2_Click() #ifdef DEBUG 'PrintExログファイル出力 DebugCls.PrintEx( "ボタン2がクリックされました。(ログファイルのみに出力)", DBCD_OUTPUT_LOG_ONLY, DBCD_ERRLEVEL_NORMALITY) #endif End Sub Sub MainWnd_CommandButton3_Click() #ifdef DEBUG 'PrintExログ&イミディエイト出力 DebugCls.PrintEx( "ボタン3がクリックされました。(ログとイミディエイトに出力)", DBCD_OUTPUT_ALL, DBCD_ERRLEVEL_NORMALITY) #endif End Sub Sub MainWnd_CommandButton4_Click() #ifdef DEBUG 'PrintExログファイル出力(エラーレベル) DebugCls.PrintEx( "ボタン4がクリックされました。(警告で出力)", DBCD_OUTPUT_LOG_ONLY, DBCD_ERRLEVEL_WARNNING) DebugCls.PrintEx( "ボタン4がクリックされました。(異常で出力)", DBCD_OUTPUT_LOG_ONLY, DBCD_ERRLEVEL_ABNORMALITY) #endif End Sub |
作成者: | 高信期 [ 2005年12月08日(木) 23:59 ] |
記事の件名: | |
どうでもいいレスですが、 DbgWnd_ViewMode_Clisk→DbgWnd_ViewMode_Clickですよね。 また、wcex構造体のhbrBackgroundメンバの指定を コード: .hbrBackground = (COLOR_3DFACE + 1) As HBRUSHと変えたほうがよいかと。 このままだとブラシハンドルのリークが起きるので。 |
作成者: | hanchan [ 2005年12月09日(金) 09:53 ] |
記事の件名: | 指摘ありがとう御座います。 |
指摘ありがとうございます。 > どうでもいいレスですが、 > DbgWnd_ViewMode_Clisk→DbgWnd_ViewMode_Clickですよね。 すみません。 誤字です。。。 ご指摘の通り修正しました。 > また、wcex構造体のhbrBackgroundメンバの指定を > コード: .hbrBackground = (COLOR_3DFACE + 1) As HBRUSH> と変えたほうがよいかと。 > このままだとブラシハンドルのリークが起きるので。 知りませんでした。。。 今まで作ったの全部修正しないと行けないかも。。。 ところで、このクラスは需要はあるのかな? [ここをクリックすると内容が表示されます]
コード: '=============================================================================== ' 名 称 :イミディエイトウインドウ(もどき)クラス ' 概 要 :Access等のVBAでDebug.Printのイミディエイトウインドウもどきを表示 ' するクラスです。 ' ファイル名:DebugClass.sbp ' 作成者 :hanchan ' 修正日 :2005.12.09 ' ※需要があるか解りませんが、自由に手を加えてかまいません。 ' ※いづれ機能を足す予定。(クリアボタンとか。。。) ' ※最大チェックを付けてないので大量に出力すると落ちるかも。 '=============================================================================== '=============================================================================== ' 定数定義 '=============================================================================== Const WINDOW_CLASS_DBUGMSD = "DebugMassageWindow" 'ウインドウクラス Const ID_BUTTON_VIEWMODE = 1 '手前に表示ボタンID Const ID_EDIT_MSGBOX = 2 'メッセージボックスID Const ERRMSG_NORMALITY = "正常" 'エラーメッセージ:正常 Const ERRMSG_WARNNING = "警告" 'エラーメッセージ:警告 Const ERRMSG_ABNORMALITY = "異常" 'エラーメッセージ:異常 Dim hDbgWnd As HWND 'イミディエイトウインドウ Dim wcex As WNDCLASSEX 'ウィンドウクラス Dim hInstance As HINSTANCE 'インスタンス Dim bLogFilePath[MAX_PATH] As Byte 'ログファイルパス格納 Dim bLogFileName[MAX_PATH] As Byte 'ログファイル名格納 /* 出力形式列挙型 */ enum DBCD_OUTPUT DBCD_OUTPUT_IMI_ONLY 'イミディエイトのみ DBCD_OUTPUT_LOG_ONLY 'ログファイルのみ DBCD_OUTPUT_ALL '両方 End Enum /* ワーニングレベル */ enum DBCD_ERRLEVEL DBCD_ERRLEVEL_NORMALITY = 0 '正常 DBCD_ERRLEVEL_WARNNING = 1 '警告 DBCD_ERRLEVEL_ABNORMALITY = 2 '異常 End Enum '=============================================================================== ' 名 称:イミディエイトウインドウ(もどき)クラス ' 概 要:イミディエイトウインドウを出力する '=============================================================================== Class DebugClass Public '=========================================================================== ' 関数名:コンストラクタ ' 説 明:コンストラクタ ' 呼 出:なし ' 引き数:なし ' 戻り値:なし '=========================================================================== Sub DebugClass() Dim buff[MAX_PATH] As Byte Dim i As Long Dim MaxLen As Long 'インスタンス取得 hInstance = GetModuleHandle(NULL) With wcex .cbSize = sizeof(WNDCLASSEX) .style = CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS .lpfnWndProc = AddressOf(DbgWndProc) .hInstance = hInstance .hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION)) .hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_WINLOGO)) .hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)) /* .hbrBackground = CreateSolidBrush(GetSysColor(COLOR_3DFACE)) */ .hbrBackground = (COLOR_3DFACE + 1) As HBRUSH .lpszClassName = WINDOW_CLASS_DBUGMSD .hIconSm = LoadIcon(NULL, IDI_APPLICATION As *Byte) End With RegisterClassEx(wcex) 'exeパスをデフォルトのログ出力パスに設定する ZeroMemory(buff, MAX_PATH) MaxLen = GetModuleFileName(hInstance As DWord, buff, MAX_PATH) As Long For i = MaxLen To 1 Step -1 If (buff = Asc("\")) Then ZeroMemory(bLogFilePath, MAX_PATH) memcpy(bLogFilePath, buff, i) exit for End If Next i 'LogFile.logをデフォルトのログファイル名に設定する ZeroMemory(bLogFileName, MAX_PATH) lstrcpy(bLogFileName, "LogFile.log") End Sub '=========================================================================== ' 関数名:Print関数 ' 説 明:Debug_Printを呼び出しイミディエイトへ出力する ' 呼 出:Print(String) ' 引き数:pstrbuff As String (I/ ) 出力文字列 ' 戻り値:なし '=========================================================================== Sub Print(pstrbuff As String) 'イミディエイト出力関数を呼び出す Debug_Print(StrPtr(pstrbuff)) End Sub '=========================================================================== ' 関数名:PrintEx関数 ' 説 明:引数の内容をイミディエイト又は、ログファイルに出力する ' 呼 出:PrintEx(String, DBCD_OUTPUT, DBCD_ERRLEVEL) ' 引き数:pstrbuff As String (I/ ) 出力文字列 ' pOutPutMode As DBCD_OUTPUT (I/ ) 出力形態 ' pErrorLevel As DBCD_ERRLEVEL (I/ ) エラーレベル ' 戻り値: 0:正常 ' -1:異常 '=========================================================================== Function PrintEx(pstrbuff As String, pOutPutMode As DBCD_OUTPUT, pErrorLevel As DBCD_ERRLEVEL) '出力モードがイミディエイトの場合、イミディエイトに出力する If ((pOutPutMode = DBCD_OUTPUT_IMI_ONLY) Or _ (pOutPutMode = DBCD_OUTPUT_ALL)) Then 'イミディエイト出力関数を呼び出す Debug_Print(StrPtr(pstrbuff)) End If '出力モードがログファイルの場合、イミディエイトに出力する If ((pOutPutMode = DBCD_OUTPUT_LOG_ONLY) Or _ (pOutPutMode = DBCD_OUTPUT_ALL)) Then 'ログ出力関数を呼び出す Debug_Log(StrPtr(pstrbuff), pErrorLevel) End If End Function '=========================================================================== ' 関数名:SetLogFilePath関数 ' 説 明:ログファイルの出力ディレクトリを設定する ' 呼 出:SetLogFilePath(String) ' 引き数:pstrbuff As String (I/ ) ログファイルパス ' 戻り値:なし '=========================================================================== Sub SetLogFilePath(pstrbuff As String) 'ログファイルのパスを設定する ZeroMemory(bLogFilePath, MAX_PATH) lstrcpy(bLogFilePath, StrPtr(pstrbuff)) End Sub '=========================================================================== ' 関数名:GetLogFilePath関数 ' 説 明:ログファイルの出力ディレクトリを取得する ' 呼 出:GetLogFilePath() ' 引き数:なし ' 戻り値:ログファイルパス '=========================================================================== Function GetLogFilePath() As BytePtr 'ログファイルのパスを取得する GetLogFilePath = VarPtr(bLogFilePath) End Function '=========================================================================== ' 関数名:SetLogFileName関数 ' 説 明:ログファイルの出力ログファイル名を設定する ' 呼 出:SetLogFileName(String) ' 引き数:pstrbuff As String (I/ ) ログファイルパス ' 戻り値:なし '=========================================================================== Sub SetLogFileName(pstrbuff As String) 'ログファイルのパスを設定する ZeroMemory(bLogFilePath, MAX_PATH) lstrcpy(bLogFilePath, StrPtr(pstrbuff)) End Sub '=========================================================================== ' 関数名:GetLogFileName関数 ' 説 明:ログファイルの出力ファイル名を取得する ' 呼 出:GetLogFileName() ' 引き数:なし ' 戻り値:ログファイルパス '=========================================================================== Function GetLogFileName() As BytePtr 'ログファイルのパスを取得する GetLogFileName = VarPtr(bLogFilePath) End Function Protected '=========================================================================== ' 関数名:Debug_Print関数 ' 説 明:イミディエイトウインドウに文字列を出力する ' 呼 出:strMas(BytePtr) ' 引き数:strMas As BytePtr (I/ ) 出力文字列 ' 戻り値:なし '=========================================================================== Function Debug_Print(strMas As BytePtr) As Long Dim hEdit As HANDLE Dim lngLen As Long Dim strBuff As String If (hDbgWnd = 0) Then hDbgWnd = CreateWindowEx( _ NULL, _ WINDOW_CLASS_DBUGMSD, _ "イミディエイト(もどき)", _ &H10cc0000, _ CW_USEDEFAULT, _ CW_USEDEFAULT, _ 283, _ 234, _ 0, _ 0 As HMENU, _ GetModuleHandle(0), _ 0 _ ) SetWindowLong(hDbgWnd, GWL_WNDPROC, AddressOf(DbgWndProc) As Long) SendMessage(hDbgWnd, WM_INITDIALOG, 0, 0) End If strBuff = MakeStr(strMas) + Chr$(13) + Chr$(10) hEdit = GetDlgItem(hDbgWnd, ID_EDIT_MSGBOX) lngLen = GetWindowTextLength(hEdit) SendMessage(hEdit, EM_SETSEL, lngLen, lngLen) SendMessage(hEdit, 194, 0, StrPtr(strBuff) As LPARAM) SetFocus(hEdit) End Function '=========================================================================== ' 関数名:DbgWndProc関数 ' 説 明:イミディエイトウインドウコールバック '=========================================================================== Function DbgWndProc( hWnd As Dword, Msg As Dword, wParam As Dword, lParam As Dword ) As Long Dim hFont_DbgWnd As HFONT Select Case ( Msg ) Case WM_SIZE DbgWnd_Resize(wParam,LOWORD(lParam),HIWORD(lParam)) Case WM_INITDIALOG hFont_DbgWnd=CreateFont( -12,0,0,0,400,0,0,0,128,3,2,1,49,"MS ゴシック") CreateWindowEx( &H00000000, "BUTTON", "手前に表示", &H50001f03, 0, 2, 92, 28, hWnd As HWND, ID_BUTTON_VIEWMODE As HMENU, GetModuleHandle(0), 0 ) SendMessage( GetDlgItem(hWnd As HWND, ID_BUTTON_VIEWMODE), WM_SETFONT, hFont_DbgWnd As WPARAM, 0 ) CreateWindowEx( &H00000200, "EDIT", "", &H50200844, 0, 32, 275, 175, hWnd As HWND, ID_EDIT_MSGBOX As HMENU, GetModuleHandle(0), 0 ) SendMessage( GetDlgItem(hWnd As HWND, ID_EDIT_MSGBOX), WM_SETFONT, hFont_DbgWnd As WPARAM, 0 ) Case WM_DESTROY Case WM_CLOSE DestroyWindow(hWnd As HWND) hDbgWnd = 0 Case WM_COMMAND If (wParam = ID_BUTTON_VIEWMODE) Then /* DbgWnd_ViewMode_Clisk() */ DbgWnd_ViewMode_Click() End If Case Else DbgWndProc = DefWindowProc( hWnd As HWND, Msg, wParam, lParam ) Exit Function End Select DbgWndProc = 0 End Function '=========================================================================== ' 関数名:DbgWnd_ViewMode_Click関数 ' 説 明:手前に表示ボタンクリックイベント '=========================================================================== /* Sub DbgWnd_ViewMode_Clisk() */ Sub DbgWnd_ViewMode_Click() If SendMessage( _ GetDlgItem(hDbgWnd, ID_BUTTON_VIEWMODE), BM_GETCHECK,0,0) Then SetWindowPos(hDbgWnd, HWND_TOPMOST As HWND, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) Else SetWindowPos(hDbgWnd, HWND_NOTOPMOST As HWND, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) EndIf End Sub '=========================================================================== ' 関数名:DbgWnd_Resize関数 ' 説 明:イミディエイトウインドウサイズイベント '=========================================================================== Sub DbgWnd_Resize(SizeType As Long, cx As Integer, cy As Integer) Dim hEdit As HANDLE Dim rc As RECT 'エディットボックスの大きさを変更する hEdit = GetDlgItem(hDbgWnd, ID_EDIT_MSGBOX) MoveWindow(hEdit, 0, 32, cx, cy - 32, FALSE) 'フォーカスをセット SetFocus(hEdit) End Sub '=========================================================================== ' 関数名:Debug_Log関数 ' 説 明:ログファイルに文字列を出力する ' 呼 出:strMas(BytePtr, DBCD_ERRLEVEL) ' 引き数:strMas As BytePtr (I/ ) 出力文字列 ' 戻り値:なし '=========================================================================== Function Debug_Log(strMas As BytePtr, pErrorLevel As DBCD_ERRLEVEL) As Long Dim byOutPutFilePath[MAX_PATH] As Byte Dim lngPathSize As Long Dim hFile As HANDLE Dim buff[MAX_PATH] As Byte Dim bDay[8] As Byte Dim bTime[8] As Byte Dim lngWrite As Long Dim ret As Long '変数初期化 Debug_Log = 0 ZeroMemory(byOutPutFilePath, MAX_PATH) ZeroMemory(buff, MAX_PATH) 'ファイルパス作成 lngPathSize = lstrlen(bLogFilePath) lstrcpy(byOutPutFilePath, bLogFilePath) if (bLogFilePath[lngPathSize - 1] <> Asc("\")) Then lstrcat(byOutPutFilePath, "\") End If lstrcat(byOutPutFilePath, bLogFileName) '現在日付を取得する ret = GetDateFormat( LOCALE_USER_DEFAULT, 0, ByVal 0, "yy/MM/dd", bDay, 8, ) '現在時刻を取得する ret = GetTimeFormat( LOCALE_USER_DEFAULT, 0, ByVal 0, "HH:mm:ss", bTime, 8, ) '出力文字列を作成する lstrcpy(buff, "[") lstrcat(buff, bDay) lstrcat(buff, " ") lstrcat(buff, bTime) lstrcat(buff, "][") if (pErrorLevel = DBCD_ERRLEVEL_NORMALITY) Then lstrcat(buff, ERRMSG_NORMALITY) ElseIf (pErrorLevel = DBCD_ERRLEVEL_WARNNING) Then lstrcat(buff, ERRMSG_WARNNING) ElseIf (pErrorLevel = DBCD_ERRLEVEL_ABNORMALITY) Then lstrcat(buff, ERRMSG_ABNORMALITY) End If lstrcat(buff, "]") lstrcat(buff, strMas) /* ファイルを作成する */ hFile = CreateFile( byOutPutFilePath, GENERIC_WRITE, 0, ByVal 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 ) CloseHandle(hFile) Open byOutPutFilePath For Append As #1 Print #1, MakeStr(buff) Close #1 End Function End Class /* 外部変数定義 */ Dim DebugCls As DebugClass |
作成者: | HSABP [ 2010年6月07日(月) 04:39 ] |
記事の件名: | すばらいい |
便利なもの、有用なものが評価されないのはおかしい あるべきところにあるべきはずのものが本来の場所に。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |