2015年3月17日火曜日

No Problem, No Life.

問題が発生すると大喜びしたとかいう、アインシュタインとヒルベルトに関連して、
その方面では有名らしい「ヒルベルトの問題」というのは、
「何が問題なのか」という問題についての問題点を考えてみましたが、
まあ、よくわかりかねる、問題なのです。

昨日、彼らの言葉の原文をサイトにアップしました。

http://theendoftakechan.web.fc2.com/NoProblem.html

その、「問題」の部分のみ、転載します。

『科学大辞典』第2版


ヒルベルトのもんだい ―― の問題  [Hlbert's problem]  (P. 1273, l)

 1900年パリで開催された第2回国際数学者会議でヒルベルトが数学の問題 (Mathematische Probleme) と題して行った講演で提出された23の問題をいう。これらの問題は20世紀における数学の研究に大きな目標を与え、数学の進歩・発展に著しい寄与をした。約 2/3 の問題が肯定的にあるいは否定的に解決された。残された問題の中にも多くの重要な研究がなされているが問題の意味する範囲が漠然としていたり、問題が大きすぎるため最終的解決の判定の困難なものもある。



それと、この前の、VB 2013 のサンプルコードですが、一部修正をしました。



マスターボリュームと同様のキー操作ができてしまうようなので、

すると、〈Home〉〈End〉〈Page Up〉〈Page Down〉にも対応してしまうってえので、
急な音量変化についていけない気の弱いその他大多数の人類のために、
〈Home〉あるいは〈End〉キーの二度打ちで、「ミュート」する機能を付け加えました。

あと、〈Pause / Break〉&〈Scroll Lock〉というほぼまったく無用となっている二大巨頭に、
「音量アップ」と「音量ダウン」の役割を与えてあります。
これは、この前、どうしても実装することができず、ブランクとなっていた、コマンド部分に該当します。

もとのコードも、どうでもいいような、修正をかけてあります。
before

Me.VolBar.Size = New System.Drawing.Size(45, 70)
Me.vLabel.Location = New System.Drawing.Point(14, 70)
Me.ClientSize = New System.Drawing.Size(45, 82)

after

Me.VolBar.Size = New System.Drawing.Size(42, 70)
Me.vLabel.Location = New System.Drawing.Point(13, 70)
Me.ClientSize = New System.Drawing.Size(42, 82)


追加箇所

before

    Private Sub VolBar_KeyDown(sender As Object, e As KeyEventArgs) Handles VolBar.KeyDown

    End Sub


after

    Private Sub VolBar_KeyDown(sender As Object, e As KeyEventArgs) Handles VolBar.KeyDown
        Select Case e.KeyCode
            Case Keys.Pause
                If VolBar.Value <> 10 Then
                    VolBar.Value = VolBar.Value + 1
                    VolUp()
                End If
            Case Keys.Scroll
                If VolBar.Value <> 0 Then
                    VolBar.Value = VolBar.Value - 1
                    VolDown()
                End If
            Case Keys.Home
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_MUTE))
            Case Keys.End
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_MUTE))
        End Select
    End Sub

    Private Sub VolDown()
        Dim TrcBarDirection As Integer = VolBar.Value
        For TrcBarDirection = 0 To VolLevel
            SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_DOWN))
        Next
        vLabel.Text = (VolBar.Value * 10).ToString()
    End Sub

    Private Sub VolUp()
        Dim TrcBarDirection As Integer = VolBar.Value
        For TrcBarDirection = 0 To TrcBarDirection
            SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_UP))
        Next
        vLabel.Text = (VolBar.Value * 10).ToString()
    End Sub



■ 全文(始) ■
Imports System.Runtime.InteropServices

Public Class Form1

    <DllImport("user32.dll")>
    Public Shared Function SendMessageW(ByVal hWnd As IntPtr, _
                                        ByVal Msg As Integer, _
                                        ByVal wParam As IntPtr, _
                                        ByVal lParam As IntPtr) As IntPtr

    End Function

    Private Const APPCOMMAND_VOLUME_MUTE As Integer = &H80000
    Private Const APPCOMMAND_VOLUME_UP As Integer = &HA0000
    Private Const APPCOMMAND_VOLUME_DOWN As Integer = &H90000
    Private Const WM_APPCOMMAND As Integer = &H319

    Friend WithEvents VolBar As TrackBar = New System.Windows.Forms.TrackBar()
    Dim vLabel As New Label
    Dim VolLevel As Integer

    Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CType(Me.VolBar, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        '
        'VolBar
        '
        With Me.VolBar
            .Location = New System.Drawing.Point(0, 0)
            .Name = "VolBar"
            .Orientation = System.Windows.Forms.Orientation.Vertical
            .Size = New System.Drawing.Size(42, 70)
            .TabIndex = 0
            .TickStyle = System.Windows.Forms.TickStyle.Both
            .Value = "2"
        End With
        '
        ' Label
        '
        With Me.vLabel
            .Location = New System.Drawing.Point(13, 70)
            .Name = "VolLabel"
            .AutoSize = True
            .TabIndex = 1
            .TabStop = False
            .BorderStyle = BorderStyle.None
            .Text = ""
        End With
        '
        Me.Controls.Add(Me.VolBar)
        Me.Controls.Add(Me.vLabel)
        '
        'Form1
        '
        Dim w As Integer = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width
        Dim h As Integer = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(42, 82)
        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow
        Me.KeyPreview = True
        Me.Location = New System.Drawing.Point(w - 100, h - 170)
        Me.Name = "Form1"
        Me.Text = "♪"
        CType(Me.VolBar, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)
        Me.PerformLayout()
        '
        VolBar_Scroll(Nothing, Nothing)
        VolBar_ValueChanged(Nothing, Nothing)
    End Sub

    Private Sub VolBar_KeyDown(sender As Object, e As KeyEventArgs) Handles VolBar.KeyDown
        Select Case e.KeyCode
            Case Keys.Pause
                If VolBar.Value <> 10 Then
                    VolBar.Value = VolBar.Value + 1
                    VolUp()
                End If
            Case Keys.Scroll
                If VolBar.Value <> 0 Then
                    VolBar.Value = VolBar.Value - 1
                    VolDown()
                End If
            Case Keys.Home
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_MUTE))
            Case Keys.End
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_MUTE))
        End Select
    End Sub

    Private Sub VolBar_Scroll(sender As Object, e As EventArgs) Handles VolBar.Scroll
        Dim TrcBarDirection As Integer = VolBar.Value

        If VolBar.Value > VolLevel Then

            For TrcBarDirection = 0 To TrcBarDirection
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_UP))
            Next

        Else

            For TrcBarDirection = 0 To VolLevel
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_DOWN))
            Next

        End If
        vLabel.Text = (VolBar.Value * 10).ToString()
        SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_MUTE))
    End Sub

    Private Sub VolBar_ValueChanged(sender As Object, e As EventArgs) Handles VolBar.ValueChanged
        VolLevel = VolBar.Value
        SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_MUTE))
    End Sub

    Private Sub VolDown()
        Dim TrcBarDirection As Integer = VolBar.Value
        For TrcBarDirection = 0 To VolLevel
            SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_DOWN))
        Next
        vLabel.Text = (VolBar.Value * 10).ToString()
    End Sub

    Private Sub VolUp()
        Dim TrcBarDirection As Integer = VolBar.Value
        For TrcBarDirection = 0 To TrcBarDirection
            SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_UP))
        Next
        vLabel.Text = (VolBar.Value * 10).ToString()
    End Sub

End Class
■ 全文(終) ■

0 件のコメント:

コメントを投稿