by M.S. » 2007年8月04日(土) 09:18
>
プログレスバーを操作する関数 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Const PBM_SETRANGE=WM_USER+1
> Const PBM_SETPOS=WM_USER+2
>
> Sub SetProgressValue(hWnd As HWND,ID As Long,Percent As Double,Accuracy As DWord)
> 'hWnd : プログレスバーを所有するウインドウのハンドル
> 'ID : プログレスバーのID
> 'Percent : プログレスバーにセットする値 0~100の間の実数で指定する。はみ出した場合は最も近い定義域に補正される。
> 'Accuracy : プログレスバーの描画精度 1以下や65536以上にした時の挙動は未定義。
> SendMessage(GetDlgItem(hWnd,ID),PBM_SETRANGE,0,Accuracy*&H10000)
> Percent=Percent/100
> If Percent>1 then Percent=1
> If Percent<0 then Percent=0
> SendMessage(GetDlgItem(hWnd,ID),PBM_SETPOS,Int(Percent*Accuracy),0)
> End Sub
>
> プログレスバーとボタンがあるウインドウで、
> ウインドウハンドル:hMainWnd
> プログレスバーのID:ProgressBar1
> ボタンのID:CommandButton1
> の時の使用例↓
>
>
コード: 全て選択
Sub MainWnd_CommandButton1_Click()
> SetProgressValue(hMainWnd,ProgressBar1,50,65535)
> End Sub
>
> 今回の場合の仮想的なコード
>
コード: 全て選択
Dim Volume As Double
>
> Sub MainWnd_Timer()
> SetProgressValue(hMainWnd,ProgressBar1,Abs(Volume)/134217728*100,65535)
> End Sub
> こんな感じでどうでしょうか?
konisi さん、ありがとうございます!
動作は完璧です!
プログレスバーの描画精度 1以下や65536以上にした時の挙動は未定義だったんですね。
初めて知りました。
> [hide=プログレスバーを操作する関数][code]Const PBM_SETRANGE=WM_USER+1
> Const PBM_SETPOS=WM_USER+2
>
> Sub SetProgressValue(hWnd As HWND,ID As Long,Percent As Double,Accuracy As DWord)
> 'hWnd : プログレスバーを所有するウインドウのハンドル
> 'ID : プログレスバーのID
> 'Percent : プログレスバーにセットする値 0~100の間の実数で指定する。はみ出した場合は最も近い定義域に補正される。
> 'Accuracy : プログレスバーの描画精度 1以下や65536以上にした時の挙動は未定義。
> SendMessage(GetDlgItem(hWnd,ID),PBM_SETRANGE,0,Accuracy*&H10000)
> Percent=Percent/100
> If Percent>1 then Percent=1
> If Percent<0 then Percent=0
> SendMessage(GetDlgItem(hWnd,ID),PBM_SETPOS,Int(Percent*Accuracy),0)
> End Sub[/code]
>
> プログレスバーとボタンがあるウインドウで、
> ウインドウハンドル:hMainWnd
> プログレスバーのID:ProgressBar1
> ボタンのID:CommandButton1
> の時の使用例↓
>
> [code]Sub MainWnd_CommandButton1_Click()
> SetProgressValue(hMainWnd,ProgressBar1,50,65535)
> End Sub[/code]
>
> 今回の場合の仮想的なコード
> [code]Dim Volume As Double
>
> Sub MainWnd_Timer()
> SetProgressValue(hMainWnd,ProgressBar1,Abs(Volume)/134217728*100,65535)
> End Sub[/code][/hide]
> こんな感じでどうでしょうか?
konisi さん、ありがとうございます!
動作は完璧です!
プログレスバーの描画精度 1以下や65536以上にした時の挙動は未定義だったんですね。
初めて知りました。