投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/6/29 20:07:10
>>> その辺確認いただけないでしょうか?
>>??「その辺」とは、何を指していますか?
> その辺とは仮面弁士さんもVB6もVBを使っているか?
> です。バージョンが違ってるとまずいですよね・・・
大丈夫です。見ての通り、もちろん VB6 として回答していますよ。

VB6 と VB.NET では、構文がいろいろと異なります。
もしも私が VB.NET で検証したコードを回答していたのだとすれば、
>> Private Sub Command1_Click()
というイベント構文にはなりませんし、
>> Set req = New MSXML2.ServerXMLHTTP
のように「Set ステートメント」も登場しません。
これらが登場している時点で、先のコードは  の物であると言えます。


> これなんですが、引数の数が足りてないような気がします。
(中略)
> 上のIf Not ~だと複数の引数が設定されてますよね?
すみません、混乱させてしまったようですね。

[2009/06/15 4:02:14]や[2009/06/15 4:31:51]で記載した例では、実装を単純化して
 If Not IsPicture(URL) Then
の構文で使う事を想定したコードにしています。
もし、対象フレームやリクエストボディなども必要なページの場合、
 If Not IsPicture(URL, Flags, TargetFrameName, PostData, Headers) Then
で呼ぶために、
 Public Function IsPicture(ByVal URL As VariantByVal Flags As VariantByVal TargetFrameName As VariantByVal PostData As VariantByVal Headers As VariantAs Boolean
といった実装が必要になるかも知れません。しかし殆どの場合は、URL のみで足りるかと思います。


> ByValとは何でしょうか?
このサイト(Visual Basic 中学校)の Visual Basic 6.0 初級講座『第17回 関数2』でも
少し解説されていますが、ByVal とは「値渡し」のためのキーワードです。
これと対になるのが ByRef「参照渡し」です。

ByVal/ByRef キーワードを省略した場合、VB6 では ByRef 扱いとなりますが、
カプセル化という観点から言えば、特に理由が無い限りは、ByVal を使う方が望ましいです。

'ByVal と ByRef の動作の違いについて 
Option Explicit

Sub Test1(ByRef x As String)
    x = "123"
End Sub

Sub Test2(ByVal y As String)
    y = "123"
End Sub

Private Sub Command1_Click()
    Dim v1 As Variant, v2 As Variant
    Dim s1 As String, s2 As String

    'Test1 v1    'コンパイルエラー[ByRef 引数の型が一致しません。] 
    'Debug.Print "v1="; v1 

    Test2 v2
    Debug.Print "v2=["; v2; "]"   'ByVal の時は、引数が書き変わらない事が保証される。 

    Test1 s1
    Debug.Print "s1=["; s1; "]"   'ByRef だと、プロシージャによって値が書き換えられる。 

    Test2 s2
    Debug.Print "s2=["; s2; "]"   'ByVal の時は、引数が書き変わらない事が保証される。 
End Sub


発展情報
http://support.microsoft.com/kb/161308/ja



> また推測で書きますが、If Not ~はIsPictureがTrueじゃなかったら
> BeforeNavigate2をExit subをするという事でよろしいでしょうか?
その通りです。


> つまり画像じゃなかったらBeforeNavigate2を出て、
> 画像だったらTarget=_blankを指定して、声クリックも判定させる。
声クリックという表現が初めて出てきましたが、これは
 [2009/06/09 7:45:52]『リンクをクリックしたらwavを鳴らす』
 [2009/06/19 1:32:24]『クリックしたら音声が鳴って』
の事でしょうか。

だとしたら、wav の再生処理については
 [2009/06/15 4:02:14]『なお、音を鳴らす処理はご自身で組み込んでみてください。』
と書きましたように、私のサンプルにはその処理を含めていません。


> でもそうすると、通常のリンクで声クリックが出せないような気が
> するのですが、この処理の流れは合っているのでしょうか?
画像の時のみ鳴らしたいのか、画像以外の時にも鳴らしたいのかによっても
組み込み方が変わるので、私のコードでは特に言及していませんでした。
ebifurai55 さんにとって都合の良い位置に組み込んでみてください。

ちなみにコントロール パネルの[サウンドとオーディオ デバイス]のプロパティを使うと、
IE の標準ナビゲーション サウンドを変更することができます。再生する wav ファイルがが
固定的であるならば、VB6 で組み込まずとも、この設定を今回の目的に利用できるかも知れません。

もしもこの設定をプログラムから制御する場合には、レジストリの
 HKEY_CURRENT_USER\AppEvents\Schemes\Apps
を操作することになります。また、PlaySound API に SND_ALIAS を指定することで、
これらのシステム サウンドを呼び出す事も出来ます。


> 僕の環境だと、Timer1_timerにCall PlaySoundを指定すると音が鳴らず、
> BeforeNavigate2に置くと音が鳴ります。
まず、Timer1_Timer のプロシージャが実行されているかどうかを確認してください。

もし、Timer イベントは発生しているのに、PlaySound が鳴らないのだとしたら、
その時点で「既に何らかのサウンドが再生されていないか」を確認してみてください。

PlaySound は複数の音を同時に呼び出せないため、たとえば上記のシステム サウンドが
再生している最中に呼び出した場合、後から呼び出した方は無視されてしまいます。


> また、このトピック段々タイトルと話しが違ってきている様なので
細かい事ですが、「話しが」→「話が」だと思います。

> 必要ならば新しくトピックを立てます。質問したい事はたくさんあります。
> 仮面弁士さんが付き合ってくれるならば・・・・ですが。 
内容によっては、私以外の方の回答も来るかも知れませんが、
私も可能な範囲でお付き合いしますよ。