Option Strict Off
Option Explicit On
Imports System.Windows.Forms
'------------------------------------ 2023/11/09 ------------------------------------
Public Class 五clsユラユラ

#Region "宣言"
    '********************************************************************************
    Private Const 一周ラジアン As Double = 3.141592653 * 2
    Public DoLoopStop, OnLooping As Boolean
    Private DoModeCahnge As Boolean
    '********************************************************************************
    Event p画像をトリミングするchg(ByRef プロパコマンド As Integer, ByRef v As Boolean)
    Event p画像のズーム比率chg(ByRef プロパコマンド As Integer, ByRef v As Integer)
    Event p画像の移動比率chg(ByRef プロパコマンド As Integer, ByRef v As Integer)
    Event p画像の移動モードchg(ByRef プロパコマンド As Integer, ByRef v As Integer)
    Event p画像の変化スピードchg(ByRef プロパコマンド As Integer, ByRef v As Integer)
    Event p画像の自動モード変更の間隔chg(ByRef プロパコマンド As Integer, ByRef v As Integer)
    '----------------------------------------------------------------------------------------------------------
    Event p画像の移動モードMenuAllVisibleONOFF(ByRef v As Boolean)
    Event p画像の変化スピードMenuAllVisibleONOFF(ByRef v As Boolean)
    Event p画像の自動モード変更の間隔MenuAllVisibleONOFF(ByRef v As Boolean)
    '**************************************************************************************************************************************
    Private WithEvents イベントgAppEventMaker As 五clsEventMaker
    '**************************************************************************************************************************************
#End Region

#Region "初期化"
    Public Sub New()
        OnLooping = False : DoLoopStop = True
        イベントgAppEventMaker = gAppEventMaker
    End Sub
#End Region

#Region "関数"
    '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    Friend Function aaサイズ再設定() As Boolean
        DoModeCahnge = True
    End Function
    '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    Friend Function aa画像は静止モード() As Boolean
        aa画像は静止モード = p画像のズーム比率 = 1 And p画像の移動比率 = 1 And (Not DoModeCahnge)
    End Function
    '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    Friend Function aa描画の移動ループ(ByRef rForm As Form, ByRef DefSleepTime As Integer) As Boolean
        Static DoEventsCall As Boolean : Dim ループの最初の呼び出し As Boolean
        If DoEventsCall Then Exit Function
        If OnLooping Then Exit Function
        ループの最初の呼び出し = True
        Do
            Call aa描画の移動一ステップ(ループの最初の呼び出し, rForm)
            ループの最初の呼び出し = False
            '---------------------------------------------------------------------
            Call Sleep(IIf(aa画像は静止モード, 500, DefSleepTime))
            '---------------------------------------------------------------------
            DoEventsCall = True : Application.DoEvents() : DoEventsCall = False
            '---------------------------------------------------------------------
            If DoLoopStop Then
                Exit Do
            End If
            OnLooping = True
        Loop
        DoLoopStop = True : OnLooping = False
    End Function
    '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    Friend Function aa描画の移動一ステップ(ByRef ループの最初の呼び出し As Boolean, ByRef rForm As Form) As Boolean
        Static mOldformWD As Integer, mOldformHT As Integer
        Static DTM As DateTime : Static chkCount As Integer
        Static CurRadiYY, OldRadiZoom, OldRadiXX, OldRadiYY, CurRadiXX, CurRadiZoom As Single
        Static AddRadiYY, AddRadiZoomdef, AddRadiXXdef, AddRadiYYdef, AddRadiXX, AddRadiZoom As Single
        Static wpctTrimXX, rwpct送幅, w移動幅, w移動高, rwpct送高, wpctTrimYY As Single
        Static w送xx, w送幅, rwNewXX, rwNewYY, w送高, w送yy As Single
        Static xx, nn, CY, RY, RX, CX, スピード, sz, yy As Single
        '---------------------------------------------------------------------
        Static 送り元幅, 受け元幅, 受け元左, 受け元上, 受け元高, 送り元高 As Single
        '---------------------------------------------------------------------
        Dim a As Integer
        '----------------------------------------------------------------------------------------------------------
        If rForm.WindowState = FormWindowState.Minimized Then Return False
        '----------------------------------------------------------------------------------------------------------
        '----------------------------------------------------------------------------------------------------------
        If ループの最初の呼び出し Or AddRadiXX = 0 Then
            '---------------------------------------------------------------------
Restart:    '*********************************************************************
            '---------------------------------------------------------------------
            a = Ⅹタイム_経過時間_秒数(0, DTM)
            chkCount = 0
            '---------------------------------------------------------------------
            AddRadiXXdef = 0.002 : AddRadiYYdef = 0.004 : AddRadiZoomdef = 0.001 : AddRadiXX = AddRadiXXdef : AddRadiYY = AddRadiYYdef : AddRadiZoom = AddRadiZoomdef
            '---------------------------------------------------------------------
            DoModeCahnge = True
        End If
        OnLooping = True : DoLoopStop = False
        '---------------------------------------------------------------------
        'Static n, m As Integer
        'Const chkLoopMax = 60
        'chkCount = chkCount + 1
        'If chkCount Mod chkLoopMax = 0 Then
        '    chkCount = 0
        '    m = p画像の自動モード変更の間隔_CurValue()
        '    If m > 0 Then
        '        n = Ⅹタイム_経過時間_秒数(1, DTM)
        '        'qqqqq(CStr(n))
        '        If n >= m Then
        '            a = Ⅹタイム_経過時間_秒数(0, DTM)
        '            p画像の移動比率 = p画像の移動比率_NextRndm()
        '            p画像の移動モード = p画像の移動モード_NextRndm()
        '            p画像のズーム比率 = p画像のズーム比率_NextRndm()
        '            'qqqqq "p画像のズーム比率  " + CStr(p画像のズーム比率)
        '            'qqqqq "p画像の移動比率    " + CStr(p画像の移動比率)
        '            'qqqqq "p画像の移動モード  " + CStr(p画像の移動モード)
        '            GoTo Restart
        '        End If
        '    End If
        'End If
        '---------------------------------------------------------------------
        '2022/06/15 add
        If Not DoModeCahnge Then
            DoModeCahnge = Not (mOldformWD = rForm.ClientSize.Width And mOldformHT = rForm.ClientSize.Height)
        End If
        mOldformWD = rForm.ClientSize.Width : mOldformHT = rForm.ClientSize.Height
        '---------------------------------------------------------------------
        If DoModeCahnge Then  'GoSub サイズ全体のメイン設定
            '----------------------------------------------------------------------------------------------------------
            Dim pctHT, pct縦横比率, 移動比率, 受縦横比率, pctWD, pctHili As Single
            '---------------------------------------------------------------------
            gggbol = gAppEventMaker.MakeEventユラユラサイズ再設定データー求む(DoLoopStop, 受け元左, 受け元上, 受け元幅, 受け元高, 送り元幅, 送り元高)
            '---------------------------------------------------------------------
            If DoLoopStop Then Return False
            If 受け元左 < 0 Or 受け元上 < 0 Or 受け元幅 <= 0 Or 受け元高 <= 0 Or 送り元幅 <= 0 Or 送り元高 <= 0 Then Return False
            '----------------------------------------------------------------------------------------------------------
            受縦横比率 = 受け元幅 / 受け元高 : pctWD = 送り元幅 : pctHT = 送り元高 : wpctTrimXX = 0 : wpctTrimYY = 0
            '----------------------------------------------------------------------------------------------------------
            If True Then      '2023/03/17 不使用になったプロパティ　If p画像をトリミングする Then
                pctHili = 送り元幅 / 送り元高
                If pctHili < 受縦横比率 Then
                    pctHT = 送り元幅 / 受縦横比率 : wpctTrimYY = (送り元高 - pctHT) / 2
                Else
                    pctWD = 送り元高 * 受縦横比率 : wpctTrimXX = (送り元幅 - pctWD) / 2
                End If
            End If
            移動比率 = p画像の移動比率_CurValue() / 100 : pct縦横比率 = pctWD / pctHT
            '----------------------------------------------------------------------------------------------------------
            If True Then      '2023/03/17 不使用担ったプロパティ　If p画像をトリミングする Then
                If 受縦横比率 > pct縦横比率 Then
                    w移動幅 = pctWD * 移動比率 : rwpct送幅 = pctWD - w移動幅 : rwpct送高 = rwpct送幅 / 受縦横比率 : w移動高 = pctHT - rwpct送高
                Else
                    w移動高 = pctHT * 移動比率 : rwpct送高 = pctHT - w移動高 : rwpct送幅 = rwpct送高 * 受縦横比率 : w移動幅 = pctWD - rwpct送幅
                End If
            Else
                w移動幅 = pctWD * 移動比率 : w移動高 = pctHT * 移動比率 : rwpct送幅 = pctWD - w移動幅 : rwpct送高 = pctHT - w移動高
            End If
            '----------------------------------------------------------------------------------------------------------
            DoModeCahnge = False
            'qqqqq "Gosub サイズ全体のメイン設定: Done " + CStr(受け元画像HDC) + " ?= " + CStr(frmMain.hDC) + ":   " + CStr(送り元画像HDC) + " ?= " '+ CStr(frmMain.pct画像.hDC)
        End If
        '---------------------------------------------------------------------
        '---------------------------------------------------------------------
        If CurRadiXX = 0 Then
            AddRadiXX = AddRadiXXdef * (0.5 + Rnd())
            'qqqqq "RadiXXdef = " + Format(AddRadiXXdef, "0.###########") + " / new = " + Format(AddRadiXX, "0.###########")
        End If
        If CurRadiYY = 0 Then
            AddRadiYY = AddRadiYYdef * (0.5 + Rnd())
            'qqqqq "RadiYYdef = " + Format(AddRadiYYdef, "0.###########") + " / new = " + Format(AddRadiYY, "0.###########")
        End If
        If CurRadiZoom = 0 Then
            AddRadiZoom = AddRadiZoomdef * (0.5 + Rnd())
            'qqqqq "Radizoomdef = " + Format(AddRadiZoomdef, "0.###########") + " / new = " + Format(AddRadiZoom, "0.###########")
        End If
        OldRadiXX = CurRadiXX : OldRadiYY = CurRadiYY : OldRadiZoom = CurRadiZoom
        '---------------------------------------------------------------------
        '円形 / ランダム
        スピード = p画像の変化スピード_CurValue() * p画像の変化スピード特別倍数_ウインドウサイズによる変換済み()  '2023/03/17 new  p画像の変化スピード特別倍数_実効値
        CX = w移動幅 / 2 : RX = CX : CurRadiXX = CurRadiXX + (AddRadiXX * スピード) : rwNewXX = CX + RX * System.Math.Cos(CurRadiXX) + wpctTrimXX
        CY = w移動高 / 2 : RY = CY : CurRadiYY = CurRadiYY + (AddRadiYY * スピード) : rwNewYY = CY + RY * System.Math.Sin(CurRadiYY) + wpctTrimYY
        If CurRadiXX >= 一周ラジアン Then CurRadiXX = 0
        If CurRadiYY >= 一周ラジアン Then CurRadiYY = 0
        '----------------------------------------------------------------------------------------------------------
        Select Case p画像の移動モード
            Case 1 : rwNewYY = wpctTrimYY + CY '    左右
            Case 2 : rwNewXX = wpctTrimXX + CX '    上下
        End Select
        '----------------------------------------------------------------------------------------------------------
        nn = p画像のズーム比率_CurValue() / 100
        If nn = 0 Then
            w送幅 = rwpct送幅 : w送高 = rwpct送高 : w送xx = rwNewXX : w送yy = rwNewYY
        Else
            CurRadiZoom = CurRadiZoom + (AddRadiZoom * スピード)
            If CurRadiZoom >= 一周ラジアン Then CurRadiZoom = 0
            sz = (1 + System.Math.Sin(CurRadiZoom)) / 2 : nn = (nn * sz) / 2 : xx = rwpct送幅 * nn : w送幅 = rwpct送幅 - xx - xx : w送xx = rwNewXX + xx : yy = rwpct送高 * nn : w送高 = rwpct送高 - yy - yy : w送yy = rwNewYY + yy
        End If
        '--------------------------------------------------------------------
        gggbol = gAppEventMaker.MakeEventユラユラ移動コピー用データーができました(受け元左, 受け元上, 受け元幅, 受け元高, w送xx, w送yy, w送幅, w送高)
        '---------------------------------------------------------------------
        'Call ⅩⅩDebug出力_指定間隔ごとに("--in MoveZoomBit--" + CStr(受け元画像HDC) + "/" + CStr(送り元画像HDC), CountChk, 1000)
        'Call ⅩⅩDebug出力_指定間隔ごとに("--in MoveZoomBit--" + "戻り値　" + CStr(n), CountChk, 1000)
        '----------------------------------------------------------------------------------------------------------
        Return True
        '----------------------------------------------------------------------------------------------------------
    End Function
    '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    Private Function zz移動比率_ズーム比率_の変更による_メニューVisible_変更() As Boolean
        Dim s As String
        s = CStr(p画像の移動比率 <> 1) : Call p画像の移動モード_RW(4569821, s)
        s = CStr(Not (p画像の移動比率 = 1 And p画像のズーム比率 = 1)) : Call p画像の変化スピード_RW(4569821, s) : Call p画像の自動モード変更の間隔_RW(4569821, s)
        Return True
    End Function
    '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    Private Function zzNextRndm(ByRef min As Integer, ByRef 上 As Integer, ByRef 値 As Integer, Optional ByRef 最大の値が出るチャンスを増やすための加算値 As Single = 0) As Integer
        Dim a As Integer
        Randomize()
        a = Ⅹ数値範囲Int(min, 上, CInt((上 + 最大の値が出るチャンスを増やすための加算値) * Rnd()))
        If a = 値 Then
            a = a + 1 : a = IIf(a > 上, min, a)
        End If
        zzNextRndm = a
    End Function
    '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#End Region

    '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    Friend Function aaプロパティ初期化_INI読出し書込みsub(ByRef プロパコマンド As Integer, ByRef ini配列() As String, ByRef CurIDX As Integer) As Boolean
        Dim AryMax As Integer = UBound(ini配列) : Dim ssss As String, hedend As String = "*********************" + "ユラユラデーター" + "*********************"
        Select Case プロパコマンド
            Case gcoプロパ初期化
                Call p画像のズーム比率_RW(プロパコマンド)
                Call p画像の移動比率_RW(プロパコマンド)
                Call p画像の移動モード_RW(プロパコマンド)
                Call p画像の変化スピード_RW(プロパコマンド)
                Call p画像の自動モード変更の間隔_RW(プロパコマンド)
                Call p画像の変化スピード特別倍数_RW(プロパコマンド)
            Case gcoプロパiniRD
                Const ads As String = "="
                Dim Hedp画像のズーム比率_RW As String = p画像のズーム比率_RW(gcoプロパ名) + ads
                Dim Hedp画像の移動比率_RW As String = p画像の移動比率_RW(gcoプロパ名) + ads
                Dim Hedp画像の移動モード_RW As String = p画像の移動モード_RW(gcoプロパ名) + ads
                Dim Hedp画像の変化スピード_RW As String = p画像の変化スピード_RW(gcoプロパ名) + ads
                Dim Hedp画像の自動モード変更の間隔_RW As String = p画像の自動モード変更の間隔_RW(gcoプロパ名) + ads
                Dim Hedp画像の変化スピード特別倍数_RW As String = p画像の変化スピード特別倍数_RW(gcoプロパ名) + ads
                For CurIDX = 1 To UBound(ini配列)
                    ssss = ini配列(CurIDX)
                    If InStr(ssss, Hedp画像のズーム比率_RW) = 1 Then
                        Call p画像のズーム比率_RW(プロパコマンド, ssss)
                    ElseIf InStr(ssss, Hedp画像の移動比率_RW) = 1 Then
                        Call p画像の移動比率_RW(プロパコマンド, ssss)
                    ElseIf InStr(ssss, Hedp画像の移動モード_RW) = 1 Then
                        Call p画像の移動モード_RW(プロパコマンド, ssss)
                    ElseIf InStr(ssss, Hedp画像の変化スピード_RW) = 1 Then
                        Call p画像の変化スピード_RW(プロパコマンド, ssss)
                    ElseIf InStr(ssss, Hedp画像の自動モード変更の間隔_RW) = 1 Then
                        Call p画像の自動モード変更の間隔_RW(プロパコマンド, ssss)
                    ElseIf InStr(ssss, Hedp画像の変化スピード特別倍数_RW) = 1 Then
                        Call p画像の変化スピード特別倍数_RW(プロパコマンド, ssss)
                    End If
                Next
            Case gcoプロパiniWR
                CurIDX = CurIDX + 1 : If CurIDX <= AryMax Then ini配列(CurIDX) = hedend Else Return True
                CurIDX = CurIDX + 1 : If CurIDX <= AryMax Then ini配列(CurIDX) = p画像のズーム比率_RW(プロパコマンド) Else Return True
                CurIDX = CurIDX + 1 : If CurIDX <= AryMax Then ini配列(CurIDX) = p画像の移動比率_RW(プロパコマンド) Else Return True
                CurIDX = CurIDX + 1 : If CurIDX <= AryMax Then ini配列(CurIDX) = p画像の移動モード_RW(プロパコマンド) Else Return True
                CurIDX = CurIDX + 1 : If CurIDX <= AryMax Then ini配列(CurIDX) = p画像の変化スピード_RW(プロパコマンド) Else Return True
                CurIDX = CurIDX + 1 : If CurIDX <= AryMax Then ini配列(CurIDX) = p画像の自動モード変更の間隔_RW(プロパコマンド) Else Return True
                CurIDX = CurIDX + 1 : If CurIDX <= AryMax Then ini配列(CurIDX) = p画像の変化スピード特別倍数_RW(プロパコマンド) Else Return True
                CurIDX = CurIDX + 1 : If CurIDX <= AryMax Then ini配列(CurIDX) = hedend Else Return True
        End Select
    End Function
    '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

#Region "プロパティ"
    '***********************************************************************
    Friend Function p画像のズーム比率_ListBox初期化(ByRef lst As ListBox) As Integer
        Return CInt(p画像のズーム比率_RW(gcoプロパListBoxSet, "", lst))
    End Function
    Friend Property p画像のズーム比率_ListIndex_0_5() As Integer
        Get
            Return CInt(p画像のズーム比率_RW(gcoプロパGet)) - 1
        End Get
        Set(ByVal Value As Integer)
            Call p画像のズーム比率_RW(gcoプロパLet, CStr(Value + 1))
        End Set
    End Property
    Friend Property p画像のズーム比率() As Integer
        '画像の、左右／上下方向のズーム倍数 ---> 1.0 ～ 5.0。   画像の表示領域のサイズは、この値の逆数になる ---> 1.0 ～ 0.2
        Get
            Return CInt(p画像のズーム比率_RW(gcoプロパGet))
        End Get
        Set(ByVal Value As Integer)
            Call p画像のズーム比率_RW(gcoプロパLet, CStr(Value))
        End Set
    End Property
    Friend Function p画像のズーム比率Do_Click(ByRef Index As Short) As String
        Return p画像のズーム比率_RW(gcoプロパMenuClick, CStr(Index))
    End Function
    Private Function p画像のズーム比率_NextRndm() As Integer
        p画像のズーム比率_NextRndm = CInt(p画像のズーム比率_RW(1111273))
    End Function
    Private Function p画像のズーム比率_CurValue() As Integer
        p画像のズーム比率_CurValue = CInt(p画像のズーム比率_RW(6987452))
    End Function
    Friend Function p画像のズーム比率_RW(ByRef プロパコマンド As Integer, Optional ByRef s As String = "", Optional ByRef lst As ListBox = Nothing) As String
        Const PropName As String = "p画像のズーム比率" : Const 値DEF As Integer = 4
        Const 下 As Integer = 1 : Const 上 As Integer = 6 : Static 値 As Integer : Dim 旧値, a As Integer : Dim Gosub_SetMenuChk As Boolean = False
        旧値 = 値
        Select Case プロパコマンド
            Case gcoプロパListBoxSet
                Static ListItemText() As String = {"なし", "小さい", "すこし小さい", "ふつう", "すこし大きい", "大きい"}
                Return Ⅹリストボックスにリストをセット_Ret_Cstr_CurListIndex(lst, ListItemText, p画像のズーム比率_ListIndex_0_5)
            Case gcoプロパ名
                Return PropName
            Case gcoプロパ初期化
                値 = 値DEF : Gosub_SetMenuChk = True
            Case gcoプロパ規定値
                Return CStr(値DEF)
            Case gcoプロパGet
                Return CStr(値)
            Case gcoプロパLet, gcoプロパMenuClick
                値 = Ⅹ数値範囲Int(下, 上, Val(s)) : Gosub_SetMenuChk = True
            Case gcoプロパiniWR
                Return ⅩIniデーター文_RW(gcoプロパiniWR, PropName, CStr(値))
            Case gcoプロパiniRD
                値 = Ⅹ数値範囲Int(下, 上, CInt(ⅩIniデーター文_RW(gcoプロパiniRD, PropName, s))) : Gosub_SetMenuChk = True
                '------------------------------------------------------------------------------
            Case 6987452 'p画像のズーム比率_CurValue  'a / 100 -- パーセント 
                Select Case 値 : Case 1 : a = 0 : Case 2 : a = 20 : Case 4 : a = 30 : Case 5 : a = 50 : Case 6 : a = 60 : Case Else : a = 40 : End Select
                Return CStr(a)
            Case 1111273 'p画像のズーム比率_NextRndm
                Return CStr(zzNextRndm(下 + 1, 上, 値))
        End Select
        '------------------------------------------------------------------------------
        If Gosub_SetMenuChk = True Then
            Gosub_SetMenuChk = False
            If 旧値 <> 値 Then
                RaiseEvent p画像のズーム比率chg(プロパコマンド, 値)
                gggbol = zz移動比率_ズーム比率_の変更による_メニューVisible_変更()
                DoModeCahnge = True
            End If
        End If
        Return CStr(値)
    End Function
    '***********************************************************************
    Friend Function p画像の移動比率_ListBox初期化(ByRef lst As ListBox) As Integer
        Return CInt(p画像の移動比率_RW(gcoプロパListBoxSet, "", lst))
    End Function
    Friend Property p画像の移動比率_ListIndex_0_5() As Integer
        '画像の全体幅／全体高に対する、左右／上下方向の移動距離の比率 ---> リストインデックス  0 to 5
        Get
            Return CInt(p画像の移動比率_RW(gcoプロパGet)) - 1
        End Get
        Set(ByVal Value As Integer)
            Call p画像の移動比率_RW(gcoプロパLet, CStr(Value + 1))
        End Set
    End Property
    Friend Property p画像の移動比率() As Integer
        '画像の全体幅／全体高に対する、左右／上下方向の移動距離の比率 ---> 0.0 ～ 0.6。 　画像全体のサイズに対する使用領域サイズは、1.0 からこの値を差し引いたものになる ---> 1.0 ～ 0.4
        Get
            Return CInt(p画像の移動比率_RW(gcoプロパGet))
        End Get
        Set(ByVal Value As Integer)
            Call p画像の移動比率_RW(gcoプロパLet, CStr(Value))
        End Set
    End Property
    Friend Function p画像の移動比率Do_Click(ByRef Index As Short) As String
        Return p画像の移動比率_RW(gcoプロパMenuClick, CStr(Index))
    End Function
    Private Function p画像の移動比率_NextRndm() As Integer
        p画像の移動比率_NextRndm = CInt(p画像の移動比率_RW(1111273))
    End Function
    Private Function p画像の移動比率_CurValue() As Integer
        p画像の移動比率_CurValue = CInt(p画像の移動比率_RW(6987452))
    End Function
    Friend Function p画像の移動比率_RW(ByRef プロパコマンド As Integer, Optional ByRef s As String = "", Optional ByRef lst As ListBox = Nothing) As String
        Const PropName As String = "p画像の移動比率" : Const 値DEF As Integer = 4
        Const 下 As Integer = 1 : Const 上 As Integer = 6 : Static 値 As Integer : Dim a, 旧値 As Integer : Dim Gosub_SetMenuChk As Boolean = False
        旧値 = 値
        Select Case プロパコマンド
            Case gcoプロパListBoxSet
                Static ListItemText() As String = {"なし", "小さい", "すこし小さい", "ふつう", "すこし大きい", "大きい"}
                Return Ⅹリストボックスにリストをセット_Ret_Cstr_CurListIndex(lst, ListItemText, (p画像の移動比率_ListIndex_0_5))
            Case gcoプロパ名
                Return PropName
            Case gcoプロパ初期化
                値 = 値DEF : Gosub_SetMenuChk = True
            Case gcoプロパ規定値
                Return CStr(値DEF)
            Case gcoプロパGet
                Return CStr(値)
            Case gcoプロパLet, gcoプロパMenuClick
                値 = Ⅹ数値範囲Int(下, 上, Val(s)) : Gosub_SetMenuChk = True
            Case gcoプロパiniWR
                Return ⅩIniデーター文_RW(gcoプロパiniWR, PropName, CStr(値))
            Case gcoプロパiniRD
                値 = Ⅹ数値範囲Int(下, 上, CInt(ⅩIniデーター文_RW(gcoプロパiniRD, PropName, s))) : Gosub_SetMenuChk = True
                '------------------------------------------------------------------------------
            Case 6987452 'p画像の移動比率_CurValue  'a / 100 -- パーセント 
                Select Case 値 : Case 1 : a = 0 : Case 2 : a = 5 : Case 4 : a = 8 : Case 5 : a = 20 : Case 6 : a = 30 : Case Else : a = 12 : End Select
                Return CStr(a)
            Case 1111273 'p画像の移動比率_NextRndm
                Return CStr(zzNextRndm(下 + 1, 上, 値))
        End Select
        '------------------------------------------------------------------------------
        If Gosub_SetMenuChk = True Then
            Gosub_SetMenuChk = False
            If 旧値 <> 値 Then
                RaiseEvent p画像の移動比率chg(プロパコマンド, 値)
                gggbol = zz移動比率_ズーム比率_の変更による_メニューVisible_変更()
                DoModeCahnge = True
            End If
        End If
        Return CStr(値)
    End Function
    '***********************************************************************
    Friend Function p画像の移動モード_ListBox初期化(ByRef lst As ListBox) As Integer
        Return CInt(p画像の移動モード_RW(gcoプロパListBoxSet, "", lst))
    End Function
    Friend Property p画像の移動モード_ListIndex_0_2() As Integer
        Get
            Return CInt(p画像の移動モード_RW(gcoプロパGet) - 1)
        End Get
        Set(ByVal Value As Integer)
            Call p画像の移動モード_RW(gcoプロパLet, CStr(Value + 1))
        End Set
    End Property
    Friend Property p画像の移動モード() As Integer
        '画像の移動モード         '1, 2, 3
        Get
            Return CInt(p画像の移動モード_RW(gcoプロパGet))
        End Get
        Set(ByVal Value As Integer)
            Call p画像の移動モード_RW(gcoプロパLet, CStr(Value))
        End Set
    End Property
    Friend Function p画像の移動モードDo_Click(ByRef Index As Short) As String
        Return p画像の移動モード_RW(gcoプロパMenuClick, CStr(Index))
    End Function
    Private Function p画像の移動モード_NextRndm() As Integer
        p画像の移動モード_NextRndm = CInt(p画像の移動モード_RW(1111273))
    End Function
    Friend Function p画像の移動モード_RW(ByRef プロパコマンド As Integer, Optional ByRef s As String = "", Optional ByRef lst As ListBox = Nothing) As String
        Const PropName As String = "p画像の移動モード" : Const 値DEF As Integer = 3
        Const 下 As Integer = 1 : Const 上 As Integer = 3 : Static 値 As Integer : Dim 旧値 As Integer
        Dim Gosub_SetMenuChk As Boolean = False
        旧値 = 値
        Select Case プロパコマンド
            Case gcoプロパListBoxSet
                Static ListItemText() As String = {"左右", "上下", "ランダム"}
                Return Ⅹリストボックスにリストをセット_Ret_Cstr_CurListIndex(lst, ListItemText, (p画像の移動モード_ListIndex_0_2))
            Case gcoプロパ名
                Return PropName
            Case gcoプロパ初期化
                値 = 値DEF : Gosub_SetMenuChk = True
            Case gcoプロパ規定値
                Return CStr(値DEF)
            Case gcoプロパGet
                Return CStr(値)
            Case gcoプロパLet, gcoプロパMenuClick
                値 = Ⅹ数値範囲Int(下, 上, Val(s)) : Gosub_SetMenuChk = True
            Case gcoプロパiniWR
                Return ⅩIniデーター文_RW(gcoプロパiniWR, PropName, CStr(値))
            Case gcoプロパiniRD
                値 = Ⅹ数値範囲Int(下, 上, CInt(ⅩIniデーター文_RW(gcoプロパiniRD, PropName, s))) : Gosub_SetMenuChk = True
                '------------------------------------------------------------------------------
            Case 4569821 'On Other Prop Changed
                RaiseEvent p画像の移動モードMenuAllVisibleONOFF(CBool(s))
            Case 1111273 'p画像の移動モード_NextRndm
                Return CStr(zzNextRndm(下, 上, 値, 2))
        End Select
        '------------------------------------------------------------------------------
        If Gosub_SetMenuChk = True Then
            Gosub_SetMenuChk = False
            If 旧値 <> 値 Then
                RaiseEvent p画像の移動モードchg(プロパコマンド, 値)
                DoModeCahnge = True
            End If
        End If
        Return CStr(値)
    End Function
    '***********************************************************************
    Friend Function p画像の変化スピード_ListBox初期化(ByRef lst As ListBox) As Integer
        Return CInt(p画像の変化スピード_RW(gcoプロパListBoxSet, "", lst))
    End Function
    Friend Property p画像の変化スピード_ListIndex_0_4() As Integer
        '画像の変化スピード         '0, 1, 2, 3, 4,  リストインデックスと一致させる。
        Get
            Return CInt(p画像の変化スピード_RW(gcoプロパGet)) - 1
        End Get
        Set(ByVal Value As Integer)
            Call p画像の変化スピード_RW(gcoプロパLet, CStr(Value + 1))
        End Set
    End Property
    Friend Property p画像の変化スピード() As Integer
        '画像の変化スピード         '1, 2, 3, 4, 5,  メニューインデックスと一致させる。
        Get
            Return CInt(p画像の変化スピード_RW(gcoプロパGet))
        End Get
        Set(ByVal Value As Integer)
            Call p画像の変化スピード_RW(gcoプロパLet, CStr(Value))
        End Set
    End Property
    Friend Function p画像の変化スピードDo_Click(ByRef Index As Short) As String
        Return p画像の変化スピード_RW(gcoプロパMenuClick, CStr(Index))
    End Function
    Private Function p画像の変化スピード_CurValue() As Single
        p画像の変化スピード_CurValue = CSng(p画像の変化スピード_RW(6987452))
    End Function
    Friend Function p画像の変化スピード_RW(ByRef プロパコマンド As Integer, Optional ByRef s As String = "", Optional ByRef lst As ListBox = Nothing) As String
        Const PropName As String = "p画像の変化スピード" : Const 値DEF As Integer = 3
        Const 下 As Integer = 1 : Const 上 As Integer = 5 : Static 値 As Integer : Dim a, 旧値 As Integer : Dim Gosub_SetMenuChk As Boolean = False
        旧値 = 値
        Select Case プロパコマンド
            Case gcoプロパListBoxSet
                Static ListItemText() As String = {"遅い", "すこし遅い", "ふつう", "すこし早い", "早い"}
                Return Ⅹリストボックスにリストをセット_Ret_Cstr_CurListIndex(lst, ListItemText, (p画像の変化スピード_ListIndex_0_4))
            Case gcoプロパ名
                Return PropName
            Case gcoプロパ初期化
                値 = 値DEF : Gosub_SetMenuChk = True
            Case gcoプロパ規定値
                Return CStr(値DEF)
            Case gcoプロパGet
                Return CStr(値)
            Case gcoプロパLet, gcoプロパMenuClick
                値 = Ⅹ数値範囲Int(下, 上, Val(s))
            Case gcoプロパiniWR
                Return ⅩIniデーター文_RW(gcoプロパiniWR, PropName, CStr(値))
            Case gcoプロパiniRD
                値 = Ⅹ数値範囲Int(下, 上, CInt(ⅩIniデーター文_RW(gcoプロパiniRD, PropName, s))) : Gosub_SetMenuChk = True
                '------------------------------------------------------------------------------
            Case 6987452 'p画像の変化スピード_CurValue    return nn / 100
                Select Case 値 : Case 1 : a = 50 : Case 2 : a = 100 : Case 4 : a = 400 : Case 5 : a = 800 : Case Else : a = 200 : End Select
                Return CStr(a / 100)
            Case 4569821 'On Other Prop Changed
                RaiseEvent p画像の変化スピードMenuAllVisibleONOFF(CBool(s))
        End Select
        '------------------------------------------------------------------------------
        If Gosub_SetMenuChk = True Then
            Gosub_SetMenuChk = False
            RaiseEvent p画像の変化スピードchg(プロパコマンド, 値)
        End If
        Return CStr(値)
    End Function
    '***********************************************************************
    Friend Function p画像の変化スピード特別倍数_ListBox初期化(ByRef lst As ListBox) As Integer
        Return CInt(p画像の変化スピード特別倍数_RW(gcoプロパListBoxSet, "", lst))
    End Function
    Friend Function p画像の変化スピード特別倍数_ウインドウサイズによる変換済み() As Single
        Dim 標準ウインドウサイズ As Integer = 800 * 1200
        Dim 現在のウインドウサイズ As Integer = frmMain.ClientSize.Width * frmMain.ClientSize.Height
        Return p画像の変化スピード特別倍数_実効値 * 現在のウインドウサイズ / 標準ウインドウサイズ
    End Function
    Friend Property p画像の変化スピード特別倍数_実効値() As Single  '0.2 to 8.0　　実際に使用する値
        Get
            Return CSng(p画像の変化スピード特別倍数_RW(gcoプロパ実効値))
        End Get
        Set(ByVal Value As Single)
            Call p画像の変化スピード特別倍数_RW(gcoプロパ実効値からインデックス, CStr(Value))
        End Set
    End Property
    Friend Property p画像の変化スピード特別倍数() As Integer  '0 to 5  ListIndex or MenuIndex
        Get
            Return CInt(p画像の変化スピード特別倍数_RW(gcoプロパGet))
        End Get
        Set(ByVal Value As Integer)
            Call p画像の変化スピード特別倍数_RW(gcoプロパLet, CStr(Value))
        End Set
    End Property
    Friend Function lst変化スピード倍数Do_Click(ByRef Index As Integer) As String
        p画像の変化スピード特別倍数 = Index - 1 'Index = 1 to 6   が送られてくる
        Return CStr(p画像の変化スピード特別倍数)
    End Function
    Friend Function p画像の変化スピード特別倍数_RW(ByRef プロパコマンド As Integer, Optional ByRef s As String = "", Optional ByRef lst As ListBox = Nothing) As String
        Const PropName As String = "p画像の変化スピード特別倍数"
        Static 値VAL() As Single = {0.2, 0.5, 1.0, 2.0, 4.0, 10.0}
        Const 下 As Integer = 0 : Const 上 As Integer = 5
        Const 値DEF As Integer = 2 : Static 値 As Integer, a As Integer
        Select Case プロパコマンド
            Case gcoプロパListBoxSet
                Static ListItemText() As String = {"０．２　倍", "０．５　倍", "１　　倍", "２　　倍", "４　　倍", "１０　倍"}
                Return Ⅹリストボックスにリストをセット_Ret_Cstr_CurListIndex(lst, ListItemText, 値)
            Case gcoプロパ名 : Return PropName
            Case gcoプロパ初期化 : 値 = 値DEF
            Case gcoプロパ規定値 : Return CStr(値DEF)
            Case gcoプロパGet : Return CStr(値)
            Case gcoプロパLet : 値 = Ⅹ数値範囲Int(下, 上, Val(s))
            Case gcoプロパiniWR : Return ⅩIniデーター文_RW(gcoプロパiniWR, PropName, CStr(値))
            Case gcoプロパiniRD : 値 = Ⅹ数値範囲Int(下, 上, CInt(ⅩIniデーター文_RW(gcoプロパiniRD, PropName, s)))
                '------------------------------------------------------------------------------
            Case gcoプロパ実効値
                値 = Ⅹ数値範囲Int(下, 上, 値)
                Return CStr(値VAL(値))
            Case gcoプロパ実効値からインデックス
                Dim n As Single = CSng(s)
                For a = 下 To 上
                    If n <= 値VAL(a) Then
                        値 = a : Return CStr(値)
                    End If
                Next
                値 = 上
                Return CStr(値)
        End Select
        Return CStr(値)
    End Function
    '***********************************************************************
    Friend Property p画像の自動モード変更の間隔_ListIndex_0_4() As Integer
        '2023/03/17 不使用になったプロパティ
        '移動距離の比率／ズーム倍数／移動モード／変化スピード／        '0, 1, 2, 3, 4,  リストインデックスと一致させる。
        Get
            Return CInt(p画像の自動モード変更の間隔_RW(gcoプロパGet)) - 1
        End Get
        Set(ByVal Value As Integer)
            Call p画像の自動モード変更の間隔_RW(gcoプロパLet, CStr(Value + 1))
        End Set
    End Property
    Friend Property p画像の自動モード変更の間隔() As Integer
        '2023/03/17 不使用になったプロパティ
        '移動距離の比率／ズーム倍数／移動モード／変化スピード／を指定時間毎に、ランダムに切り替える
        Get
            Return CInt(p画像の自動モード変更の間隔_RW(gcoプロパGet))
        End Get
        Set(ByVal Value As Integer)
            Call p画像の自動モード変更の間隔_RW(gcoプロパLet, CStr(Value))
        End Set
    End Property
    Friend Function p画像の自動モード変更の間隔Do_Click(ByRef Index As Short) As String
        '2023/03/17 不使用になったプロパティ
        Return p画像の自動モード変更の間隔_RW(gcoプロパMenuClick, CStr(Index))
    End Function
    Private Function p画像の自動モード変更の間隔_CurValue() As Integer
        '2023/03/17 不使用になったプロパティ
        p画像の自動モード変更の間隔_CurValue = CInt(p画像の自動モード変更の間隔_RW(6987452))
    End Function
    Friend Function p画像の自動モード変更の間隔_RW(ByRef プロパコマンド As Integer, Optional ByRef s As String = "") As String
        '2023/03/17 不使用になったプロパティ
        Const PropName As String = "p画像の自動モード変更の間隔"
        Static ListItemText() As String = {"なし", "１０　秒", "２０　秒", "３０　秒", "１　　分"}
        Static 値 As Integer : Dim a, 旧値 As Integer : Dim Gosub_SetMenuChk As Boolean = False
        旧値 = 値
        Select Case プロパコマンド
            Case 100 To 104 : a = プロパコマンド - 100 : Return ListItemText(a)
            Case gcoプロパ名
                Return PropName
            Case gcoプロパ初期化
                値 = 1
            Case gcoプロパ規定値
                Return "1"
            Case gcoプロパGet
                Return "1"
            Case gcoプロパLet, gcoプロパMenuClick
                値 = 1
            Case gcoプロパiniWR
                Return ⅩIniデーター文_RW(gcoプロパiniWR, PropName, CStr(値))
            Case gcoプロパiniRD
                値 = 1
                '------------------------------------------------------------------------------
            Case 6987452 'p画像の自動モード変更の間隔_CurValue 
                Return CStr(0)
                'Select Case 値 : Case 1 : a = 0 : Case 2 : a = 10 : Case 4 : a = 30 : Case 5 : a = 60 : Case Else : a = 20 : End Select
                'Return CStr(a)
            Case 4569821 'On Other Prop Changed
                'RaiseEvent p画像の自動モード変更の間隔MenuAllVisibleONOFF(CBool(s))
        End Select
        '------------------------------------------------------------------------------
        If Gosub_SetMenuChk = True Then
            Gosub_SetMenuChk = False
            If 旧値 <> 値 Then
                'RaiseEvent p画像の自動モード変更の間隔chg(プロパコマンド, 値)
            End If
        End If
        Return CStr(値)
    End Function
    ''***********************************************************************
#End Region

End Class


