[VB6] エラートレースルーチンを使用してエラー内容をログファイルに出力

▶ in lab > Visual Basic 6.0 > TIPS posted 2006.09.20 Wednesday / 22:46

デバッグに役立つ手法を紹介します。

  • まず、下記のコードを追加した標準モジュールに作成します。

Option Explicit

'通常は"on"の状態の時にログの書き込みを行う。
'ログの書き込みを停止する場合 "off" にする。
Private Const OutputSw = "on"

'--------------------------------
'  Error_OutputLog プロシージャ
'--------------------------------
Public Sub Error_OutputLog(Keyword As String)

  Dim NewX As Long        'エラーログファイルの使用可能なファイル番号
  Dim LogFile As String   'エラーログファイルのフルパス
 
  'offの場合、ログの書き込みを抑制する
  If OutputSw = "off" Then Exit Sub
 
  NewX = FreeFile
  LogFile = App.Path
  '末尾に¥が付いていなかったら付ける
  If Right$(LogFile, 1) <> "¥" Then
    LogFile = LogFile & "¥"
  End If
  'ログファイルの設定
  LogFile = LogFile & "Error.log"
  'ログファイルが存在しない場合、空のファイルを作成
  If FileExists(LogFile) = False Then
    Open LogFile For Append As #NewX
    Close #NewX
  End If
 
  'ログファイルのサイズが300KB以上のときは一旦削除する。
  If FileLen(LogFile) > 300000 Then
    Kill LogFile
  End If
 
  Open LogFile For Append As #NewX
   
    '各プロシージャのエラーハンドラをトレースする。
    Print #NewX, "エラー  フォーム名またはプロシージャ名 = " & Keyword & " でエラーが発生しています。"
    Print #NewX, "エラー  発生日時 = " & Format$(Now, "yyyy/mm/dd") & " " & Time
    Print #NewX, "エラー  概要(Description) = " & Err.Description
    Print #NewX, "エラー  番号(Number) = " & str(Err.Number)
    Print #NewX, "エラー  (Source) = " & Err.Source & vbCrLf
 
  Close #NewX
 
End Sub


  • 次にエラーをトレースするプロシージャの先頭に以下のコードを追加する。

On Error GoTo <ラベル>
ラベルは任意の文字列を指定してください。
  • そして、そのプロシージャの最後に以下のようなコードを追加する。


Exit  Sub
<ラベル>:
  Call Error_OutputLog("キーワード")
  Err.Clear


  • <ラベル>以下の部分をエラーハンドラと言いますが、そのエラーハンドラの前には必ずExit Subを入れてください。
    でないと、毎回エラーハンドラ部分を実行してしまいます。
    キーワードは、任意の文字列で例えばForm_Load等プロシージャ名をいれておくと良いでしょう。

  • これで、エラーが出た場合、実行ファイルと同じフォルダにError.logというファイルを作成し、エラー情報が書き込まれている事でしょう。そのエラー情報をメモ帳などで見る事でどこでエラーが起きたかが分かりデバッグしやすくなるでしょう。

[VB6] Format関数の定義済み数値書式

▶ in lab > Visual Basic 6.0 > TIPS posted 2006.07.23 Sunday / 22:45

Format関数の定義済み数値書式の使い方を紹介。(MSDNライブラリにも載っています)
[Currency]
通常、Windowsを日本語で使用している場合は頭に¥記号を付加し1000単位の区切り記号も付きます。

使用例:
Dim strPrice As String
Dim lngPrice As Long

lngPrice=19800
strPrice=Format(lngPrice,"Currency")

上記のようにするとstrPriceには 19,800 という結果が返ります。

[Fixed]

整数部を最低 1 桁、小数部を最低 2 桁表示する形式で返します。1000 単位の区切り記号は付きません。

使用例:
Dim MyStr As String
MyStr=19800.3256

MyStr=Format(MyStr,"Fixed")
上記のようにするとMyStrには
19800.32 という結果が返ります。

[Standard]

整数部を最低 1 桁、小数部を最低 2 桁表示する形式で返します。
1000 単位の区切り記号が付きます。

使用例:
Dim MyStr As String

MyStr=19800.3256

MyStr=Format(MyStr,"Standard")

上記のようにするとMyStrには19,800.32という結果が返ります。

[VB6] Ticker Control v0.2

▶ in lab > Visual Basic 6.0 > UserControl posted 2006.07.19 Wednesday / 22:34

横スクロール型のティッカーコントロールです。
VB6.0用のユーザーコントロールですが、機能的には中途半端な仕様です。
良ければ、プロジェクトに組み込んでご使用ください。

v0.2 更新内容
横スクロール機能の完成
Scrolledイベントの追加
ScrollNumber、ScrollSpeedプロパティの追加
ScrollNumberプロパティ(スクロール回数)を指定してスクロールさせるとScrolledイベントが発生します。

ScrollSpeedプロパティでスクロールする早さを指定でき、
Intervalプロパティでタイマーイベントの発生間隔も指定できます。

基本的にフリーソースなのでご自由に改変してご使用ください。


Download

[VB6] ウィンドウプロシージャのサブクラス化サンプル v0.3

▶ in lab > Visual Basic 6.0 > Sample posted 2006.07.19 Wednesday / 00:05

ウィンドウプロシージャのサブクラス化のサンプルソースです。

サブクラス化するメリットとしてVBのイベント処理では処理できないイベントを数多く実装できるようになります。例えば、ホイールクリックとかアプリケーションのアクティブ・ディアクティブなどです。

■更新履歴
v0.1 (2006/03/23)
初公開
v0.2 (2006/04/09)
ウィンドウサイズを制限するコードを追加(詳しくはソースを見てください。)
v0.3 (2006/04/23)
IFディレクティブを使いコードを整理
タイマーメッセージを使用するタイマーイベントを追加

■v0.3の機能一覧
コントロールのアクティブ・ディアクティブを監視
ウィンドウサイズの制限
マウスホイールのイベントフック
ウィンドウサイズ変更(最大化・最小化)の監視
タイマーイベントのフック(タイマーコントロールの代替)

Download

[VB6] WinXPのVisualStyleを適用するmanifestファイルを作成するサンプル v0.1

▶ in lab > Visual Basic 6.0 > Sample posted 2006.07.17 Monday / 00:13

VisualBasic6.0以前で開発したソフトウェアをWindowsXPのVisualSytleで表示させる方法です。

VisualStyleを適用させるにはmanifestファイルを使用して実現させなければなりません。
そこで、サンプルにはこのmanifestファイルを作成・削除するコードが書いてあります。
プロジェクトに追加して使用するとVisualStyleを適用するかしないかを選択できるようになります。
以下、簡単に説明します。

manifestファイルの中身は下記のXMLで書かれたコードです。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="アプリケーションの名前"
type="win32"
/>
<description>アプリケーションの説明</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>



アプリケーションの名前と説明はアプリに合わせて変更してください。

次に、VisualStyle適用前と適用後のスクリーンショットを載せて置きます。

ヴィジュアルスタイル適用前
ヴィジュアルスタイル適用後


■スクリーンショットを見れば分かると思いますが、かなり見た目が良くなります。しかし、注意事項があります。

  • このmanifestファイルは、WindowsXPでしか使用できません。他のOSでは、何の役にも立ちません。

  • ComCtl32.dll バージョン 6 がなければならない(SP6を導入していれば問題ないはずです。)

  • フレームコントロール内にオプションボタンを置くと黒くなってしまいます。これを避けるためにはピクチャーボックスを貼り付けその中にオプションボタンを配置するようにする。

  • ユーザーコントロール等サードパーティ製のコントロールを配置しているとコントロールがちらついたり消えたりする場合があります。


Download
PAGE TOP