ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 20:48

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




新しいトピックを投稿する  トピックへ返信する  [ 11 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年7月14日(木) 13:27 
初心者です。

RADツールのトラックバーの使い方を教えて下さい。
ドラッグしたときに、どのようにイベントコーディングするのか
またどのようにその値を取得するのか HELP を見ても分かりませんでした。


通報する
ページトップ
   
投稿記事Posted: 2005年7月14日(木) 22:03 
オフライン

登録日時: 2005年6月18日(土) 16:03
記事: 7
> ドラッグしたときに、どのようにイベントコーディングするのか
 トラックバーをドラッグさせると、親ウインドウには「xScroll」メッセージが送られます。
トラックバーが横に長い場合は「HScroll」が、縦に長い場合は「VScroll」が送られます。
 ただし、1ピクセルでも動くごとにメッセージが送られるので、イベント内で処理が重くならないようにする必要があります。

*余談ですが「xScroll」の説明はRADが登場した時から「スクロールバーが~」となっていますし、
添付されているヘルプでもコモンコントロール関係がフォローされていませんので分かりにくいですよね(^ ^;)
とりあえずRADの方は要望として書き込んでみます。


通報する
ページトップ
投稿記事Posted: 2005年7月14日(木) 22:39 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
> またどのようにその値を取得するのか HELP を見ても分かりませんでした。

ささらさんが解説してくださった上記のイベント処理にて、対象となるトラックバーに、SendMessage()を使用して TBM_GETPOSを送信します。関数の戻り値が現在の値となります。

なお、プロジェクトオプションで「コモン コントロールを使用する」にチェックを入れるのを忘れずに。


通報する
ページトップ
投稿記事Posted: 2005年7月14日(木) 23:13 
オフライン

登録日時: 2005年6月18日(土) 16:03
記事: 7
> > またどのようにその値を取得するのか HELP を見ても分かりませんでした。
>
> ささらさんが解説してくださった上記のイベント処理にて、対象となるトラックバーに、SendMessage()を使用して TBM_GETPOSを送信します。関数の戻り値が現在の値となります。
>
> なお、プロジェクトオプションで「コモン コントロールを使用する」にチェックを入れるのを忘れずに。

スイマセン、takさん細かいフォロー有り難う御座いますn(_ _)n


通報する
ページトップ
投稿記事Posted: 2005年7月15日(金) 23:08 
イベントコーディングのところはうまくいきました!!
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 の中の

・メッセージの付加情報を指定します。意味はメッセージにより、異なります。
は、異なる内容はどこで調べればよいのでしょうか? ;_;


とても敷居が高い。
難しい。。。


通報する
ページトップ
   
投稿記事Posted: 2005年7月16日(土) 13:14 
オフライン

登録日時: 2005年5月31日(火) 09:34
記事: 141
お住まい: 北海道
引用:
ただ、トラックバーは実は3つあって、どのトラックバーから
得られた値なのかがよく分からずいろいろ調べてみましたが
つまりました。
先にウィンドウハンドルを取得しておき,その値と比較するのがよいでしょう。(下のコードを参照)
引用:
> 対象となるトラックバーに、SendMessage()を使用して TBM_GETPOSを送信します。

お返事いただいた部分のここがよく分かりませんでした。。。
TBM_GETPOSの解説(英語) ※日本版MSDNには,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/
' ============================================================


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月16日(土) 13:35 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
引用:
ただ、トラックバーは実は3つあって、どのトラックバーから
得られた値なのかがよく分からずいろいろ調べてみましたが
つまりました。
> 先にウィンドウハンドルを取得しておき,その値と比較するのがよいでしょう。

ほかにも、もう少し直感的にコントロールIDでSelect Caseする方法もあります。
コード:
Dim tbID As Long
tbID = GetDlgCtrlID(hwndScrollBar)

Select Case tbID
	Case TrackBar1


	Case TrackBar2


	Case TrackBar3


End Select


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月16日(土) 13:46 
オフライン

登録日時: 2005年5月31日(火) 09:34
記事: 141
お住まい: 北海道
> ほかにも、もう少し直感的にコントロールIDでSelect Caseする方法もあります。
> Dim tbID As Long
> tbID = GetDlgCtrlID(hwndScrollBar)

私,そんな関数知りませんでしたので(^^;)
私が参考になりました(爆)。

_________________
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================


通報する
ページトップ
 記事の件名: 出来ました!
投稿記事Posted: 2005年7月16日(土) 23:05 
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つ質問があるのですが、それは別立てします。。。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年7月17日(日) 00:57 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
> 3つのトラックバーを利用して
> RGB の色指定ができるようにしたかったのですが、
> おかげさまで出来ました。
>
>
> Sinryow さんのコードをそのまま利用して
> tak さんのコードだと、なぜか
> ドラッグ終了したとき、(MouseUp?)
> 0 に戻ってしまいうまくいきませんでした。

これは、現在値の取得に nPos を利用しているからだと思われます。
こちらでは、ドラッグが終了したときに nPos = 0 となってHScrollイベントが発生することが確認されました。
nPos を使わずに、必ず TBM_GETPOSメッセージを利用して値を取得すればこの問題を回避できます。

なお、Sinryowさんのコードで値が 0 にならなかったのは、nPos ではなく TBM_GETPOSメッセージを使って値を取得しているためです。
GetDlgCtrlID() や Select Case に本質的な問題があったわけではありません。


通報する
ページトップ
 記事の件名: なるほど!
投稿記事Posted: 2005年7月19日(火) 10:04 
>これは、現在値の取得に nPos を利用しているからだと思われます。
こちらでは、ドラッグが終了したときに nPos = 0 となってHScrollイベントが発生することが確認されました。
nPos を使わずに、必ず TBM_GETPOSメッセージを利用して値を取得すればこの問題を回避できます。

なお、Sinryowさんのコードで値が 0 にならなかったのは、nPos ではなく TBM_GETPOSメッセージを使って値を取得しているためです。
GetDlgCtrlID() や Select Case に本質的な問題があったわけではありません。

後学のために教えて下さい。
結局 nPos を利用すると、私が考えられるプログラムの中では
すべてこの
「ドラッグが終了したときにnPos = 0となってHScrollイベントが発生する」
がネックになってうまくいかなくなってしまうような気がするのですが、
nPos をそのまま利用しても問題がないような場面とはあるのでしょうか?


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 11 件の記事 ] 

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


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[12人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

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