トラックバーの使い方
トラックバーの使い方
初心者です。
RADツールのトラックバーの使い方を教えて下さい。
ドラッグしたときに、どのようにイベントコーディングするのか
またどのようにその値を取得するのか HELP を見ても分かりませんでした。
RADツールのトラックバーの使い方を教えて下さい。
ドラッグしたときに、どのようにイベントコーディングするのか
またどのようにその値を取得するのか HELP を見ても分かりませんでした。
Re: トラックバーの使い方
> ドラッグしたときに、どのようにイベントコーディングするのか
トラックバーをドラッグさせると、親ウインドウには「xScroll」メッセージが送られます。
トラックバーが横に長い場合は「HScroll」が、縦に長い場合は「VScroll」が送られます。
ただし、1ピクセルでも動くごとにメッセージが送られるので、イベント内で処理が重くならないようにする必要があります。
*余談ですが「xScroll」の説明はRADが登場した時から「スクロールバーが~」となっていますし、
添付されているヘルプでもコモンコントロール関係がフォローされていませんので分かりにくいですよね(^ ^;)
とりあえずRADの方は要望として書き込んでみます。
トラックバーをドラッグさせると、親ウインドウには「xScroll」メッセージが送られます。
トラックバーが横に長い場合は「HScroll」が、縦に長い場合は「VScroll」が送られます。
ただし、1ピクセルでも動くごとにメッセージが送られるので、イベント内で処理が重くならないようにする必要があります。
*余談ですが「xScroll」の説明はRADが登場した時から「スクロールバーが~」となっていますし、
添付されているヘルプでもコモンコントロール関係がフォローされていませんので分かりにくいですよね(^ ^;)
とりあえずRADの方は要望として書き込んでみます。
Re: トラックバーの使い方
> またどのようにその値を取得するのか HELP を見ても分かりませんでした。
ささらさんが解説してくださった上記のイベント処理にて、対象となるトラックバーに、SendMessage()を使用して TBM_GETPOSを送信します。関数の戻り値が現在の値となります。
なお、プロジェクトオプションで「コモン コントロールを使用する」にチェックを入れるのを忘れずに。
ささらさんが解説してくださった上記のイベント処理にて、対象となるトラックバーに、SendMessage()を使用して TBM_GETPOSを送信します。関数の戻り値が現在の値となります。
なお、プロジェクトオプションで「コモン コントロールを使用する」にチェックを入れるのを忘れずに。
Re: トラックバーの使い方
> > またどのようにその値を取得するのか HELP を見ても分かりませんでした。
>
> ささらさんが解説してくださった上記のイベント処理にて、対象となるトラックバーに、SendMessage()を使用して TBM_GETPOSを送信します。関数の戻り値が現在の値となります。
>
> なお、プロジェクトオプションで「コモン コントロールを使用する」にチェックを入れるのを忘れずに。
スイマセン、takさん細かいフォロー有り難う御座いますn(_ _)n
>
> ささらさんが解説してくださった上記のイベント処理にて、対象となるトラックバーに、SendMessage()を使用して TBM_GETPOSを送信します。関数の戻り値が現在の値となります。
>
> なお、プロジェクトオプションで「コモン コントロールを使用する」にチェックを入れるのを忘れずに。
スイマセン、takさん細かいフォロー有り難う御座いますn(_ _)n
ありがとうございます
イベントコーディングのところはうまくいきました!!
Sub MainWnd_HScroll の中に、
適当なエディットボックスに、nPos の値を書き込ませたら、
ドラッグすると値が変わって感動でした!!
ただ、トラックバーは実は3つあって、どのトラックバーから
得られた値なのかがよく分からずいろいろ調べてみましたが
つまりました。
> 対象となるトラックバーに、SendMessage()を使用して TBM_GETPOSを送信します。
お返事いただいた部分のここがよく分かりませんでした。。。
Sub MainWnd_HScroll(nScrollCode As Long, nPos As Integer, hwndScrollBar As DWord)
End Sub
ここに書くのですよね。
トラックバーは3つあって、ID はそれぞれ
TrackBar1、TrackBar2、TrackBar3
となっているのですが、
どのようにSendMessage() 関数を利用すればよいのか
具体的にお教えいただけませんか?
また、SendMessage() 関数のHELP の中の
・メッセージの付加情報を指定します。意味はメッセージにより、異なります。
は、異なる内容はどこで調べればよいのでしょうか? ;_;
とても敷居が高い。
難しい。。。
Sub MainWnd_HScroll の中に、
適当なエディットボックスに、nPos の値を書き込ませたら、
ドラッグすると値が変わって感動でした!!
ただ、トラックバーは実は3つあって、どのトラックバーから
得られた値なのかがよく分からずいろいろ調べてみましたが
つまりました。
> 対象となるトラックバーに、SendMessage()を使用して TBM_GETPOSを送信します。
お返事いただいた部分のここがよく分かりませんでした。。。
Sub MainWnd_HScroll(nScrollCode As Long, nPos As Integer, hwndScrollBar As DWord)
End Sub
ここに書くのですよね。
トラックバーは3つあって、ID はそれぞれ
TrackBar1、TrackBar2、TrackBar3
となっているのですが、
どのようにSendMessage() 関数を利用すればよいのか
具体的にお教えいただけませんか?
また、SendMessage() 関数のHELP の中の
・メッセージの付加情報を指定します。意味はメッセージにより、異なります。
は、異なる内容はどこで調べればよいのでしょうか? ;_;
とても敷居が高い。
難しい。。。
Re: ありがとうございます
先にウィンドウハンドルを取得しておき,その値と比較するのがよいでしょう。(下のコードを参照)ぼのぼの さんが書きました:ただ、トラックバーは実は3つあって、どのトラックバーから
得られた値なのかがよく分からずいろいろ調べてみましたが
つまりました。
TBM_GETPOSの解説(英語) ※日本版MSDNには,TBM_GETPOSの解説が載ってないです(核爆)ぼのぼの さんが書きました:> 対象となるトラックバーに、SendMessage()を使用して TBM_GETPOSを送信します。
お返事いただいた部分のここがよく分かりませんでした。。。
下の例では,"pos"という変数に現在の位置をセットしています。
コード: 全て選択
' トラックバー3つ(TrackBar1~TrackBar3)と,スタティックテキスト1つ(Static1)を
' RADで作っているものとする。
Dim Track[ELM(3)] As HWND
(中略)
Sub MainWnd_HScroll(nScrollCode As Long, nPos As Integer, hwndScrollBar As DWord)
Dim i As Long, buf As String, pos As Long
If hwndScrollBar<>NULL Then
For i=1 To 3
If Track[i-1]=hwndScrollBar Then
pos=SendMessage(hwndScrollBar, TBM_GETPOS, 0, 0)
buf="トラックバー"+Str$(i)+"が動きました。値は"+Str$(pos)+"です。"
SetDlgItemText(hMainWnd, Static1, buf)
End If
Next
End If
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Track[0]=GetDlgItem(hMainWnd, TrackBar1)
Track[1]=GetDlgItem(hMainWnd, TrackBar2)
Track[2]=GetDlgItem(hMainWnd, TrackBar3)
End Sub
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
> 先にウィンドウハンドルを取得しておき,その値と比較するのがよいでしょう。ぼのぼの さんが書きました:ただ、トラックバーは実は3つあって、どのトラックバーから
得られた値なのかがよく分からずいろいろ調べてみましたが
つまりました。
ほかにも、もう少し直感的にコントロールIDでSelect Caseする方法もあります。
コード: 全て選択
Dim tbID As Long
tbID = GetDlgCtrlID(hwndScrollBar)
Select Case tbID
Case TrackBar1
Case TrackBar2
Case TrackBar3
End Select
> ほかにも、もう少し直感的にコントロールIDでSelect Caseする方法もあります。
> Dim tbID As Long
> tbID = GetDlgCtrlID(hwndScrollBar)
私,そんな関数知りませんでしたので(^^;)
私が参考になりました(爆)。
> Dim tbID As Long
> tbID = GetDlgCtrlID(hwndScrollBar)
私,そんな関数知りませんでしたので(^^;)
私が参考になりました(爆)。
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
出来ました!
3つのトラックバーを利用して
RGB の色指定ができるようにしたかったのですが、
おかげさまで出来ました。
Sinryow さんのコードをそのまま利用して
Dim i As Long, pos As Long
If hwndScrollBar<>NULL Then
For i=1 To 3
If Track[i-1]=hwndScrollBar Then
pos=SendMessage(hwndScrollBar, TBM_GETPOS, 0, 0)
Select case i
Case 1
lineColorR=Int(pos*255/100)
Case 2
lineColorG=Int(pos*255/100)
Case 3
lineColorB=Int(pos*255/100)
End Select
End If
Next
End If
こんな感じにしました。
そのままですね。。。ごめんなさい。m(_ _)m
tak さんのコードだと、なぜか
ドラッグ終了したとき、(MouseUp?)
0 に戻ってしまいうまくいきませんでした。
でも、一歩前進して感無量です!!
みなさん本当にありがとうございました!!!
P.S もう1つ質問があるのですが、それは別立てします。。。
RGB の色指定ができるようにしたかったのですが、
おかげさまで出来ました。
Sinryow さんのコードをそのまま利用して
Dim i As Long, pos As Long
If hwndScrollBar<>NULL Then
For i=1 To 3
If Track[i-1]=hwndScrollBar Then
pos=SendMessage(hwndScrollBar, TBM_GETPOS, 0, 0)
Select case i
Case 1
lineColorR=Int(pos*255/100)
Case 2
lineColorG=Int(pos*255/100)
Case 3
lineColorB=Int(pos*255/100)
End Select
End If
Next
End If
こんな感じにしました。
そのままですね。。。ごめんなさい。m(_ _)m
tak さんのコードだと、なぜか
ドラッグ終了したとき、(MouseUp?)
0 に戻ってしまいうまくいきませんでした。
でも、一歩前進して感無量です!!
みなさん本当にありがとうございました!!!
P.S もう1つ質問があるのですが、それは別立てします。。。
> 3つのトラックバーを利用して
> RGB の色指定ができるようにしたかったのですが、
> おかげさまで出来ました。
>
>
> Sinryow さんのコードをそのまま利用して
> tak さんのコードだと、なぜか
> ドラッグ終了したとき、(MouseUp?)
> 0 に戻ってしまいうまくいきませんでした。
これは、現在値の取得に nPos を利用しているからだと思われます。
こちらでは、ドラッグが終了したときに nPos = 0 となってHScrollイベントが発生することが確認されました。
nPos を使わずに、必ず TBM_GETPOSメッセージを利用して値を取得すればこの問題を回避できます。
なお、Sinryowさんのコードで値が 0 にならなかったのは、nPos ではなく TBM_GETPOSメッセージを使って値を取得しているためです。
GetDlgCtrlID() や Select Case に本質的な問題があったわけではありません。
> RGB の色指定ができるようにしたかったのですが、
> おかげさまで出来ました。
>
>
> Sinryow さんのコードをそのまま利用して
> tak さんのコードだと、なぜか
> ドラッグ終了したとき、(MouseUp?)
> 0 に戻ってしまいうまくいきませんでした。
これは、現在値の取得に nPos を利用しているからだと思われます。
こちらでは、ドラッグが終了したときに nPos = 0 となってHScrollイベントが発生することが確認されました。
nPos を使わずに、必ず TBM_GETPOSメッセージを利用して値を取得すればこの問題を回避できます。
なお、Sinryowさんのコードで値が 0 にならなかったのは、nPos ではなく TBM_GETPOSメッセージを使って値を取得しているためです。
GetDlgCtrlID() や Select Case に本質的な問題があったわけではありません。
なるほど!
>これは、現在値の取得に nPos を利用しているからだと思われます。
こちらでは、ドラッグが終了したときに nPos = 0 となってHScrollイベントが発生することが確認されました。
nPos を使わずに、必ず TBM_GETPOSメッセージを利用して値を取得すればこの問題を回避できます。
なお、Sinryowさんのコードで値が 0 にならなかったのは、nPos ではなく TBM_GETPOSメッセージを使って値を取得しているためです。
GetDlgCtrlID() や Select Case に本質的な問題があったわけではありません。
後学のために教えて下さい。
結局 nPos を利用すると、私が考えられるプログラムの中では
すべてこの
「ドラッグが終了したときにnPos = 0となってHScrollイベントが発生する」
がネックになってうまくいかなくなってしまうような気がするのですが、
nPos をそのまま利用しても問題がないような場面とはあるのでしょうか?
こちらでは、ドラッグが終了したときに nPos = 0 となってHScrollイベントが発生することが確認されました。
nPos を使わずに、必ず TBM_GETPOSメッセージを利用して値を取得すればこの問題を回避できます。
なお、Sinryowさんのコードで値が 0 にならなかったのは、nPos ではなく TBM_GETPOSメッセージを使って値を取得しているためです。
GetDlgCtrlID() や Select Case に本質的な問題があったわけではありません。
後学のために教えて下さい。
結局 nPos を利用すると、私が考えられるプログラムの中では
すべてこの
「ドラッグが終了したときにnPos = 0となってHScrollイベントが発生する」
がネックになってうまくいかなくなってしまうような気がするのですが、
nPos をそのまま利用しても問題がないような場面とはあるのでしょうか?