tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルメッセージ表示について
記事No11904
投稿日: 2017/09/21(Thu) 19:04
投稿者ほほ
はじめまして。VB初心者ですがよろしくお願いします。

普段、VBのフォームを最小化しておいて
時間が経過すると(何かのタイミング)フォームを普通の状態にして
( FormWindowState.Normal)
PCモニターの右上にメッセージ表示するプログラムの作成を考えています。

また、PCでは数字入力するソフトを使ていまして
カーソルを常にそのソフト置いておきたいです。

使っているソフトに主導権を与えながら
VBでメッセージ表示する方法ありましたら
教えていただきたいです。

宜しくお願いいたします。

[ツリー表示へ]
タイトルRe: メッセージ表示について
記事No11905
投稿日: 2017/09/21(Thu) 19:58
投稿者魔界の仮面弁士
> 普段、VBのフォームを最小化しておいて
Hide/Visible で非表示にしておいて、
Show/Visible で再表示という選択肢もあるかも。


> また、PCでは数字入力するソフトを使ていまして
> カーソルを常にそのソフト置いておきたいです。

以下に、フォーカスを受け取らないフォームの作り方が掲載されています(VB6 or VB.NET)。

https://msdn.microsoft.com/ja-jp/library/cc440905.aspx

[ツリー表示へ]
タイトルRe^2: メッセージ表示について
記事No11906
投稿日: 2017/09/21(Thu) 21:21
投稿者ほほ
返答ありがとうございます。

私のプログラムは次の部分まで作成してあるのですが、

'普段、VBのフォームを最小化しておいて
'時間が経過すると(何かのタイミング)フォームを普通の状態にして
'( FormWindowState.Normal)
'PCモニターの右上にメッセージ表示するプログラムの作成を考えています。


教えていただいた
> https://msdn.microsoft.com/ja-jp/library/cc440905.aspx
次の部分だけを追加しただけではダメでしょうか?


    Private Const WS_EX_NOACTIVATE As Integer = &H8000000
    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim p As CreateParams = MyBase.CreateParams
            If Not MyBase.DesignMode Then
                p.ExStyle = p.ExStyle Or (WS_EX_NOACTIVATE)
            End If
            Return p
        End Get
    End Property

[ツリー表示へ]
タイトルRe^3: メッセージ表示について
記事No11907
投稿日: 2017/09/22(Fri) 09:18
投稿者魔界の仮面弁士
> 私のプログラムは次の部分まで作成してあるのですが、

私は WindowState 案ではなく、Visible 案を推してみたと思いますが、
それでもフォーカスが変化してしまいますか?

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        StartPosition = FormStartPosition.Manual
        Dim rect = Screen.PrimaryScreen.WorkingArea
        SetBounds(rect.Right - 200, rect.Top, 200, 140)
        'WindowState = FormWindowState.Minimized
        Hide()
        Timer1.Interval = 1000
        Timer1.Start()
    End Sub
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        'WindowState = If(WindowState <> FormWindowState.Minimized, FormWindowState.Minimized, FormWindowState.Normal)
        Visible = Not Visible
    End Sub
End Class



それと、DOBON.NET の掲示板にも同様の質問をされているようですが、
あちらもこちらの掲示板も、マルチポストは原則禁止となっています。
(管理者ではない私が注意するのも何ですが)
https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=33679&rev=&no=0


どうしても複数の掲示板への投稿が必要な場合、どちらの掲示板でも
そのためのルールが記載されています。掲示板の利用ルールを再読願います。

# もしくはマルチポストを容認している掲示板(たとえばDOBON.NETお気楽掲示板)を使うとか…。

[ツリー表示へ]
タイトルRe^4: メッセージ表示について
記事No11908
投稿日: 2017/09/22(Fri) 20:47
投稿者ほほ
お世話になります。

> 私は WindowState 案ではなく、Visible 案を推してみたと思いますが、
> それでもフォーカスが変化してしまいますか?

添付していただいたプログラムを試したところ
イメージに近い感じでした。

課題が2点るのですが何か良い方法はありますでしょうか?

フォームを最小化(非表示時)したときもタスクバーで
フォームがタイマーの影響で(?)で点減してしまうこと。

フォームが普通のサイズ(表示時)の時点減し
数字入力画面よりカーソルが外れ
入力作業に支障が出そうなこと。


> それと、DOBON.NET の掲示板にも同様の質問をされているようですが、
> あちらもこちらの掲示板も、マルチポストは原則禁止となっています。
> (管理者ではない私が注意するのも何ですが)
> https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=33679&rev=&no=0

こちらの件につきましては大変申し訳なく思っています。

どこの掲示板で返答いただけるか分かりませんでして。

すみません。

[ツリー表示へ]
タイトルRe^5: メッセージ表示について
記事No11909
投稿日: 2017/09/25(Mon) 22:21
投稿者魔界の仮面弁士
> フォームを最小化(非表示時)したときもタスクバーで
> フォームがタイマーの影響で(?)で点減してしまうこと。
通知のみを目的とするのなら、タスクバーに表示する必要もないでしょうし
ShowInTaskbar を False に設定しておけば良いのでは無いでしょうか。


> フォームが普通のサイズ(表示時)の時点減し
> 数字入力画面よりカーソルが外れ
> 入力作業に支障が出そうなこと。
確認ですが、メッセージ通知用のフォームに、テキストボックス等を配置してはいないでしょうか。

テキストボックス等がアクティブになると、その時点で入力コンテキストが移ってしまうため
他のアプリケーションのフォーカスを奪ってしまいます。
メッセージ通知画面には、フォーカスを受け取るようなコントロールを配置しないようご注意下さい。

もし、そうしたコントロールが配置されていたとしても、 No11905 で紹介した WS_EX_NOACTIVATE を
指定しておけば、通知フォーム上のコントロールがアクティブになってもフォーカスを奪わなくなりますが
その場合にはそもそもキーボード操作用の入力コンテキストすら移らないので、
矢印キーでのキャレット移動や文字の入力などができない状態となります。

その状態でも、マウス右クリックなどを使って入力コンテキストを移してやれば、
文字の入力も可能な状態になりますが、その時点でウィンドウにフォーカスが当たるため、
結果として「他のアプリケーション」のフォーカスを奪うことになります。


>> あちらもこちらの掲示板も、マルチポストは原則禁止となっています。
> こちらの件につきましては大変申し訳なく思っています。
それはもう過ぎたことなので、次回から気を付けて頂ければ大丈夫ですよ。

それよりも、まずはルールをお読みいただけるようお願いいたします。
この件について、私は
>> どうしても複数の掲示板への投稿が必要な場合、どちらの掲示板でも
>> そのためのルールが記載されています。掲示板の利用ルールを再読願います。
と述べていましたよね。恐らくはまだ読んでおられないのではないでしょうか。

既に投稿してしまっているのですから、それぞれの掲示板の利用ルールを読んだうえで、
それぞれの掲示板のルールに沿った措置を採っておきましょう。

……要するに、各掲示板にマルチポスト先の URL すべてを相互に掲載しておくだとか、あるいは
一つの掲示板で得られた追加情報を、他のにもフィードバックするべきではないか、ということです。
(たとえその掲示板で回答が得られていなかったとしても)

[ツリー表示へ]
タイトルRe^6: メッセージ表示について
記事No11910
投稿日: 2017/09/26(Tue) 20:08
投稿者ほほ
> > フォームを最小化(非表示時)したときもタスクバーで
> > フォームがタイマーの影響で(?)で点減してしまうこと。
> 通知のみを目的とするのなら、タスクバーに表示する必要もないでしょうし
> ShowInTaskbar を False に設定しておけば良いのでは無いでしょうか。
>
>
> > フォームが普通のサイズ(表示時)の時点減し
> > 数字入力画面よりカーソルが外れ
> > 入力作業に支障が出そうなこと。
> 確認ですが、メッセージ通知用のフォームに、テキストボックス等を配置してはいないでしょうか。
>
> テキストボックス等がアクティブになると、その時点で入力コンテキストが移ってしまうため
> 他のアプリケーションのフォーカスを奪ってしまいます。
> メッセージ通知画面には、フォーカスを受け取るようなコントロールを配置しないようご注意下さい。
>
> もし、そうしたコントロールが配置されていたとしても、 No11905 で紹介した WS_EX_NOACTIVATE を
> 指定しておけば、通知フォーム上のコントロールがアクティブになってもフォーカスを奪わなくなりますが
> その場合にはそもそもキーボード操作用の入力コンテキストすら移らないので、
> 矢印キーでのキャレット移動や文字の入力などができない状態となります。
>
> その状態でも、マウス右クリックなどを使って入力コンテキストを移してやれば、
> 文字の入力も可能な状態になりますが、その時点でウィンドウにフォーカスが当たるため、
> 結果として「他のアプリケーション」のフォーカスを奪うことになります。
>
>
> >> あちらもこちらの掲示板も、マルチポストは原則禁止となっています。
> > こちらの件につきましては大変申し訳なく思っています。
> それはもう過ぎたことなので、次回から気を付けて頂ければ大丈夫ですよ。
>
> それよりも、まずはルールをお読みいただけるようお願いいたします。
> この件について、私は
> >> どうしても複数の掲示板への投稿が必要な場合、どちらの掲示板でも
> >> そのためのルールが記載されています。掲示板の利用ルールを再読願います。
> と述べていましたよね。恐らくはまだ読んでおられないのではないでしょうか。
>
> 既に投稿してしまっているのですから、それぞれの掲示板の利用ルールを読んだうえで、
> それぞれの掲示板のルールに沿った措置を採っておきましょう。
>
> ……要するに、各掲示板にマルチポスト先の URL すべてを相互に掲載しておくだとか、あるいは
> 一つの掲示板で得られた追加情報を、他のにもフィードバックするべきではないか、ということです。
> (たとえその掲示板で回答が得られていなかったとしても)

私の気になっていた点について
的確に返答いただきありがとうございます。

それから掲示板のルールにつきまして
注意していただきありがたく思っています。

今後は気を付けていきます。

[ツリー表示へ]