[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/08/31(Thu) 16:29
投稿者名:ZET
Eメール:
URL :
タイトル:
ファイルリストボックスに横スクロールバー
はじめまして!
横スクロールバーについて、お尋ねしたのですが...
単なるリストボックスに横スクロールバーを追加するのは
ネットで検索するとサンプルソースがたくさんありました。
なるほど、その通りに実行するとできるのですが、私が
作成しているリストボックスに追加しても有効ではないみたいです。
私の場合、追加ボタンを押して目的のフォルダにいってファイルを
選択するタイプです。拡張子がdwgです。こういうのをファイルリスト
ボックスと言うみたいですね!リストボックスとはちょっと違うみたいです。(推測)
このファイルリストボックスに横スクロールバーを付けたいのですが
検索で探せません。諸先生方、どうかご教授願います。

投稿時間:2006/08/31(Thu) 18:11
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: ファイルリストボックスに横スクロールバー
> 私の場合、追加ボタンを押して目的のフォルダにいってファイルを
> 選択するタイプです。拡張子がdwgです。こういうのをファイルリスト
> ボックスと言うみたいですね!リストボックスとはちょっと違うみたいです。(推測)

拡張子がdwg って「AutoCAD」で保存された図面ファイルじゃないのですか?

VBのファイルリストボックスは
 http://bbs5.aimix-z.com/photovw.cgi?room=vbrescue&image=93.gif


逆に下記のようにリストボックスをファイルリストボックスのように使用する事もできます
 http://hanatyan.sakura.ne.jp/samplepic/vb6_325.htm

投稿時間:2006/08/31(Thu) 22:48
投稿者名:neptune
Eメール:
URL :
タイトル:
Re: ファイルリストボックスに横スクロールバー
こんにちは
役立たずResになるかもしれませんが、

> 私の場合、追加ボタンを押して目的のフォルダにいってファイルを
> 選択するタイプです。拡張子がdwgです。こういうのをファイルリスト
> ボックスと言うみたいですね!リストボックスとはちょっと違うみたいです。(推測)
> このファイルリストボックスに横スクロールバーを付けたいのですが
> 検索で探せません。諸先生方、どうかご教授願います。
質問内容とは違いますが、
>目的のフォルダにいってファイルを選択するタイプです。
なら、GetOpenFileNameで初期フォルダを指定してやっても同じ目的は果たせると思います。
これは楽チンです。

また、どうしてもファイルリストボックスを使いたいなら、APIになりますが、
ShowScrollBar の一連のAPIを使用すればどうでしょう?
APIゴリゴリになるとは思いますけど。

と、書いてしまいましたが、現在VB6の環境がないのでテストはできませんので
すみません。

無駄でもShowScrollBarを調べてみる価値はあると思います。

・・・ここでググッてみました。
「ShowScrollBar ファイルリストボックス」でググッたら上から2番目に動きそうなサンプル
がありました。
「VBStation」現在はページが無いようでキャッシュでどうぞ。やはりAPIごりごりです。

やっぱり花ちゃん さんのように自作するか、GetOpenFileNameのほうが楽かも・・・

投稿時間:2006/09/02(Sat) 09:01
投稿者名:ZET
Eメール:
URL :
タイトル:
Re: ファイルリストボックスに横スクロールバー
花ちゃんさん、neptuneさん 有難うございます。
でも、私が思っているのとは少し違います。
ネットで拾った下記ソースをそんまま使うとすぐできるのですが、
わたしのは、その間にいろいろ書き込んでいますのでその辺がよく分かりません。
----------------------------------------------------------
Option Explicit

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long

'横スクロールバー追加
Private Const LB_SETHORIZONTALEXTENT = &H194

Private Sub Form_Load()
    Dim lngRet As Long

    '第三引数はスクロール幅となる
    lngRet = SendMessage(Me.List1.hwnd, LB_SETHORIZONTALEXTENT, 240, 0)

End Sub
----------------------------------------------------------

因みに私のリストボックスのソースは
----------------------------------------------------------
'DWGファイルリストに同じ名前がないかチェックし、
'なかったらリストに追加する
Sub SameFileChk(FullName As String)
    Dim j As Integer
    j = 0
    If DwgList.listcount <> 0 Then
        'DWGファイルリストが空ではない時
        For i = 0 To DwgList.listcount - 1
            If FullName = DwgList.List(i) Then
                'ファイルリストの名前と同一の時
                j = 1
                Exit For
            Else
                'ファイルリストに名前がない時
                j = 0
            End If
        Next
    End If
    'ファイルリストに名前がなければ追加
    If j = 0 Then
        DwgList.AddItem FullName
    End If
End Sub
----------------------------------------------------------
↑こんな感じです。ここに単純に先のソースを組み込めば出来る
と思ったのですが甘かったです。上のソースは実行時にエラーが
でます。リストボックスを大きくしても実行後の大きさは変わりません。
よく分からないです。宜しくお願いいたします。

投稿時間:2006/09/02(Sat) 09:40
投稿者名:
Eメール:
URL :
タイトル:
Re^2: ファイルリストボックスに横スクロールバー
> 花ちゃんさん、neptuneさん 有難うございます。
> でも、私が思っているのとは少し違います。
> ネットで拾った下記ソースをそんまま使うとすぐできるのですが、
> わたしのは、その間にいろいろ書き込んでいますのでその辺がよく分かりません。
> ----------------------------------------------------------
> Option Explicit
>
> Private Declare Function SendMessage Lib "user32" Alias "SendMessageA
" _
> (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Lo
ng
>
> '横スクロールバー追加
> Private Const LB_SETHORIZONTALEXTENT = &H194
>
> Private Sub Form_Load()
>     Dim lngRet As Long
>
>     '第三引数はスクロール幅となる
>     lngRet = SendMessage(Me.List1.hwnd, LB_SETHORIZONTALEXTENT, 240, 0)
>
> End Sub
> ----------------------------------------------------------
>
> 因みに私のリストボックスのソースは
> ----------------------------------------------------------
> 'DWGファイルリストに同じ名前がないかチェックし、
> 'なかったらリストに追加する
> Sub SameFileChk(FullName As String)
>     Dim j As Integer
>     j = 0
>     If DwgList.listcount <> 0 Then
>         'DWGファイルリストが空ではない時
>         For i = 0 To DwgList.listcount - 1
>             If FullName = DwgList.List(i) Then
>                 'ファイルリストの名前と同一の時
>                 j = 1
>                 Exit For
>             Else
>                 'ファイルリストに名前がない時
>                 j = 0
>             End If
>         Next
>     End If
>     'ファイルリストに名前がなければ追加
>     If j = 0 Then
>         DwgList.AddItem FullName
>     End If
> End Sub
> ----------------------------------------------------------
> ↑こんな感じです。ここに単純に先のソースを組み込めば出来る
> と思ったのですが甘かったです。上のソースは実行時にエラーが
> でます。リストボックスを大きくしても実行後の大きさは変わりません。
> よく分からないです。宜しくお願いいたします。
どんな実行時エラーが起こっているのか書いてないので、よく分からないです。
とりあえず Option Explicit について調べるといいかもしれないですが、よく分からないです。
あと、SendMessageの宣言とその使い方が一致していないです。
> lngRet = SendMessage(Me.List1.hwnd, LB_SETHORIZONTALEXTENT, 240, 0)
こうではなく、↓の様になるかと
lngRet = SendMessage(Me.List1.hwnd, LB_SETHORIZONTALEXTENT, 240, ByVal 0)

(また、どうやらVB6のFileListBoxはWS_HSCROLLスタイルが適用されていないか、
または何かのコンテナに入っているかもしれないです、話題とは関係ないですが)