Hatena::Groupuwsc

CX's UWSC Diary

Windows 自動化ツール「UWSC」を使って何が出来るかを探求する日記です。構文をマスターしたい方はこちらをどうぞ→UWSC 基礎文法最速マスター
こくばん.in」投稿サンプル
アインシュタイン マリオとクッパ 千円札(見本) 猫
eピアノ」「Google Moog」自動演奏サンプル
eピアノ Google Moog
はてなロクロ」投稿サンプル
マリオ テトリス デフォルトさん はてなロゴ 全自動マリオ 3Dプロッタ
はてなハイク」投稿サンプル
デフォルトさん カラーパレット カラーパレット マリオ ルイージ カラーパレット 日本地図
 | 

2008-03-23はてなハイク - パレットメーカー2

パレットメーカー2

| 04:10 |  パレットメーカー2 - CX's UWSC Diary を含むブックマーク はてなブックマーク -  パレットメーカー2 - CX's UWSC Diary

  • ソース

hatena_haiku_palette_maker2.uws [ダウンロード]

// ---------------------------------------------------------
// File : hatena_haiku_palette_maker2.uws
// ---------------------------------------------------------
// <概要>
// ・このスクリプトはWindows 自動化ソフト「UWSC」を使った「はてなハイク」自動化スクリプトです。
// ・このスクリプトは「はてなハイク」で多色パレットを生成するスクリプトです。
// 
// <使用上の注意>
// ・ブラウザは最大化にしてご利用ください。
// ・キャンバスの左上の座標(X,Y座標)をあらかじめ設定しておく必要があります。
// ・初期設定値
//      Public g_x = 263 … キャンバスX座標
//      Public g_y = 376 … キャンバスY座標
// ・以下の環境でスクリプトの動作確認済みです。
//   ・解像度:1280x1024, Windows XP(クラシックモード) + IE7(ウィンドウ最大化。タスクバーは下に配置)
// ・中断する場合は [Alt] + [F2] です。動作中にウィンドウを切り替えないでください。誤動作します。
//
// <使用ツール>
// ■ UWSC Free版 Ver4.4
// http://www.uwsc.info/download.html
// 
// <スクリプトを作成した人>
// id:cx20
// 
// <変更履歴>
// 2008/03/23 Ver0.03 RGB2HSV() 関数に誤りがあった為修正。小数が正しく計算されていなかった。
// 2008/03/16 Ver0.02 混色の生成方法を変更。HSV 値でソートするよう変更。ソースコードを整理。
// 2008/03/12 Ver0.01 とりあえず版作成。

Option Explicit

Public g_x = 263       // キャンバスX座標(左上の座標)
//Public g_y = 377       // キャンバスY座標(左上の座標)
Public g_y = 295       // キャンバスY座標(左上の座標)
Public g_height = 100  // キャンバスの幅(未使用)
Public g_width = 100   // キャンバスの高さ(未使用)
//Public g_r = 3         // 円の半径
Public g_r = 5         // 円の半径
Public g_pi = 3.14159265 // PI
Public g_winID_haiku = 0
//Public g_wait = 5
Public g_wait = 0

// ADO
Const adStateClosed = 0
Const adStateOpen = 1
Const adInteger = 3

g_winID_haiku = はてなハイクのウィンドウIDを取得()
Ifb g_winID_haiku = -1 Then
    MsgBox( "はてなハイク が起動していない為、スクリプトを終了します。" )
    ExitExit
EndIf

// 「はてなハイク」ページをアクティブ化
ACW(g_winID_haiku)

Main()

Procedure Main()
    Public HashTbl baseColor

    Dim rs
    MakeRecordset( rs )
    
    Dim start_x
    Dim start_y
    Dim width
    Dim height
    //----------------------------------------------
    // 混色を作成
    //----------------------------------------------
    start_x = g_x
    start_y = g_y
    width = 20
    height = 10

    SetColorTable( baseColor, "白:0,薄:1,灰:2,黒:3,赤:4,茶:5,肌:6,黄:7,緑:8,深:9,青:10,紫:11" )
    MakeColor_太さの異なる筆で混色を作成( baseColor, start_x, start_y )
    MakeColor_細筆で丸を描いて混色を作成( baseColor, start_x, start_y )

    // 作成した色を取得
    GetColorRecordset( rs, start_x, start_y, width, height )
    
    // 上段で色作成
    start_x = g_x + 20
    start_y = g_y
    width = 300
    height = 18
    MakeColor_線を交差させて混色を作成( baseColor, start_x, start_y, width, height )
    MakeColor_取得した色を用いて混色を作成( rs, start_x, start_y )

    // 作成した色を取得
    GetColorRecordset( rs, start_x, start_y, width, height )
    
    // 下段にパレットを描画
    start_x = g_x
    start_y = g_y + 24
    MakePalette( rs, start_x, start_y )

Fend

Procedure SetColorTable( Var baseColor[], strColorTable )
    baseColor = HASH_REMOVEALL
    Dim strNameValue
    strNameValue = Token( ",", strColorTable )
    Dim strName
    Dim strValue
    While Length(strNameValue) > 0
        strName = Token( ":", strNameValue )
        Print "Name = [" + strName + "], Value = [" + strNameValue + "]"
        baseColor[strName] = Val(strNameValue)
        strNameValue = Token( ",", strColorTable )
    Wend
Fend

Procedure ShowColorTable( baseColor[] )
    Dim n
    For n = 0 To Length(baseColor)-1
        Print baseColor[n, HASH_KEY] + " = " + baseColor[n, HASH_VAL]
    Next
Fend

Procedure はてなハイクで描く( strLines[], rs, start_x, start_y, width, height )
    Dim strLine
    
    Dim dotChar
    Dim nColorIndex
    Dim color

    Dim max_x
    Dim max_y
    max_y =  Length(strLines)
    
    Dim pos_x
    Dim pos_y
    Dim x
    Dim y
    
    Dim key
    key = キーコードを取得( "N" )

    Dim nLarge
    //nLarge = 12
    nLarge = 6
    //nLarge = 4
    //nLarge = 3
    For y = 0 To max_y - 1
        strLine = strLines[y]
        max_x = Length(strLine)
        For x = 0 To max_x - 1
            pos_x = start_x + x * nLarge
            pos_y = start_y + y * nLarge
            dotChar = Copy( strLine, x + 1, 1 )
            //nColorIndex = 色番号を取得( dotChar )
            color = 色名からRGBコードを取得( dotChar )
            Ifb color<> -1 Then
                Ifb color = $FFFFFF Then
                    筆の色を色番号で選択( 2 )
                Else
                    筆の色をパレットから選択( rs, color )
                EndIf
                //KBD(key, CLICK,     g_wait)
                Print "pos_x = [" + pos_x + "], pos_y = [" + pos_y + "]"
                四角形を描く( pos_x, pos_y )
                //筆の色を色番号で選択( nColorIndex )
                筆の色をパレットから選択( rs, color )
                塗りつぶし( pos_x, pos_y )
            EndIf
        Next
    Next
Fend

Procedure 筆の色をパレットから選択( rs, color )
    Dim color_r
    Dim color_g
    Dim color_b

    color_b = (color And $FF0000)/(256*256)
    color_g = (color And $00FF00)/(256)
    color_r = (color And $0000FF)
    Dim strFilter
    //strFilter = "color = " + color
    strFilter = "r >= " + (color_r-5) + " And r <= " + (color_r + 5) + " And " + _
                "g >= " + (color_g-5) + " And g <= " + (color_g + 5) + " And " + _
                "b >= " + (color_b-5) + " And b <= " + (color_b + 5)
    rs.Filter = strFilter
    
    Print "strFilter = [" + strFilter + "]"
    Dim x
    Dim y
    Ifb !rs.Bof() And !rs.Eof() Then
        x = rs.Fields("x").Value
        y = rs.Fields("y").Value
        筆の色をスポイトで選択( x, y )
        Print "x = [" + x + "], y = [" + y + "]"
    EndIf
Fend

Procedure MakeColor_太さの異なる筆で混色を作成( Var baseColor[], start_x, start_y )
    Dim pos_x
    Dim pos_y
    Dim color
    Dim nColors
    nColors = Length(baseColor)
    Dim n
    For n = nColors - 1 To 0 Step -1
        color = baseColor[n, HASH_VAL]
        筆の色を色番号で選択( color )
        Dim i
        For i = 2 To 0 Step -1
            pos_x = start_x + n
            pos_y = start_y + i
            筆の太さを選択( i )
            BTN(LEFT, DOWN, pos_x, pos_y, g_wait)
            BTN(LEFT, UP,   pos_x+1, pos_y+1, g_wait)
        Next
    Next
Fend

Procedure MakeColor_細筆で丸を描いて混色を作成( Var baseColor[], start_x, start_y )
    筆の太さを選択( 0 ) // 細筆
    Dim pos_x
    Dim pos_y
    Dim color
    Dim nColors
    nColors = Length(baseColor)
    Dim tmp_g_r
    tmp_g_r = g_r
    Dim n
    For n = nColors - 1 To 0 Step -1
        color = baseColor[n, HASH_VAL]
        筆の色を色番号で選択( color )
        Dim i
        For i = 2 To 0 Step -1
            pos_x = start_x + n
            pos_y = start_y + i
            g_r = i + 1
            丸を描く( pos_x, pos_y )
        Next
    Next
    g_r = tmp_g_r
Fend


Procedure MakeColor_線を交差させて混色を作成( Var baseColor[], start_x, start_y, width, height )
    Dim color
    Dim nColors
    nColors = Length(baseColor)
    Dim n
    For n = 1 To nColors - 1
        color = baseColor[n, HASH_VAL]
        筆の色を色番号で選択( color )
        BTN(LEFT, DOWN, start_x,       start_y        + n, g_wait)
        BTN(LEFT, UP,   start_x+width, start_y+height - n, g_wait)
        筆の色を色番号で選択( nColors-color )
        BTN(LEFT, DOWN, start_x,       start_y+height - n, g_wait)
        BTN(LEFT, UP,   start_x+width, start_y        + n, g_wait)
    Next
Fend

Procedure MakeColor_取得した色を用いて混色を作成( rs, start_x, start_y )
    rs.MoveFirst
    Dim pos_x
    Dim pos_y
    pos_x = start_x
    pos_y = start_y
    Dim n
    n = -1
    Dim color
    Dim color_r
    Dim color_g
    Dim color_b
    Dim color_h
    Dim color_s
    Dim color_v
    Dim depth
    Dim x
    Dim y
    While !rs.Bof() And !rs.Eof()
        n = n + 1
        x = rs.Fields("x").Value
        y = rs.Fields("y").Value
        筆の色をスポイトで選択( x, y )

        pos_x = start_x + Int( n Mod 100)*3
        pos_y = start_y + Int( n / 100)*3 + Random(3)
        //四角形を描く( pos_x, pos_y )
        丸を描く( pos_x, pos_y )

        rs.MoveNext()
    Wend
Fend

Procedure MakePalette( rs, start_x, start_y )
    //筆の太さを選択( 0 )
    筆の太さを選択( 1 )
    //筆の太さを選択( 2 )
    
    Dim tmp_g_r
    tmp_g_r = g_r
    //g_r = 4
    g_r = 2
    rs.MoveFirst
    Dim pos_x
    Dim pos_y
    pos_x = start_x
    pos_y = start_y
    Dim n
    //n = 0
    n = -1
    Dim color
    Dim color_r
    Dim color_g
    Dim color_b
    Dim color_h
    Dim color_s
    Dim color_v
    Dim depth
    Dim x
    Dim y
    While !rs.Bof() And !rs.Eof()
        n = n + 1
        x = rs.Fields("x").Value
        y = rs.Fields("y").Value
        
        color_h = rs.Fields("h").Value
        color_s = rs.Fields("s").Value
        color_v = rs.Fields("v").Value
        color_r = rs.Fields("r").Value
        color_g = rs.Fields("g").Value
        color_b = rs.Fields("v").Value
        Print "{h, s, v} = [" + color_h + ", " + color_s + ", " + color_v + "], " + _
              "{r, g, b} = [" + color_r + ", " + color_g + ", " + color_b + "]"
        
        筆の色をスポイトで選択( x, y )
        
        // 暗い色は除外
        Ifb color_v > 128 Then
            pos_x = start_x + Int(2*color_s * Cos( 2 * g_pi * color_h / 360 )) + 100
            pos_y = start_y - Int(2*color_s * Sin( 2 * g_pi * color_h / 360 )) + 100

            //六角形を描く( pos_x, pos_y )
            四角形を描く( pos_x, pos_y )
        EndIf

        rs.MoveNext()
    Wend

    g_r = tmp_g_r
Fend

Procedure MakeRecordset( Var rs )
    rs = CreateOleObj("ADODB.Recordset")
    rs.Fields.Append( "color", adInteger )
    rs.Fields.Append( "r", adInteger )
    rs.Fields.Append( "g", adInteger )
    rs.Fields.Append( "b", adInteger )
    rs.Fields.Append( "h", adInteger )
    rs.Fields.Append( "s", adInteger )
    rs.Fields.Append( "v", adInteger )
    rs.Fields.Append( "depth", adInteger )
    rs.Fields.Append( "x", adInteger )
    rs.Fields.Append( "y", adInteger )
    rs.Open
Fend

Procedure TruncateRecordset( Var rs )
    Ifb rs.State() = adStateOpen And rs.RecordCount() > 0 Then
        rs.MoveLast()
        While !rs.Bof() And !rs.Eof()
            rs.Delete()
            rs.MovePrevious()
        Wend
    EndIf
Fend

Procedure GetColorRecordset( Var rs, start_x, start_y, width, height )
    TruncateRecordset( rs )
    
    Dim color
    Dim depth
    Dim x
    Dim y
    Dim color_b
    Dim color_g
    Dim color_r
    Dim color_h
    Dim color_s
    Dim color_v
    For y = start_y to start_y + height
        For x = start_x To start_x + width
            color = PeekColor( x, y )
            color_b = (color And $FF0000)/(256*256)
            color_g = (color And $00FF00)/(256)
            color_r = (color And $0000FF)
            RGB2HSV( color_r, color_g, color_b, color_h, color_s, color_v )
            depth = Int((color_b + color_g + color_r))
            // 白色の情報は記録しない
            Ifb color <> $FFFFFF Then
                rs.AddNew()
                rs.Fields("color").Value = color
                rs.Fields("r").Value = color_r
                rs.Fields("g").Value = color_g
                rs.Fields("b").Value = color_b
                rs.Fields("h").Value = color_h
                rs.Fields("s").Value = color_s
                rs.Fields("v").Value = color_v
                rs.Fields("depth").Value = depth
                rs.Fields("x").Value = x
                rs.Fields("y").Value = y
                rs.Update()
            EndIf
        Next
    Next
    
    SortColorRecordset( rs )
Fend

Procedure SortColorRecordset( rs )
    
    //rs.Sort = "v,s,h,depth,r,g,b"
    rs.Sort = "h,s,v"
    //rs.Sort = "h,v,s"
    //rs.Sort = "v,h,s"
    Dim color
    Dim depth
    // 重複レコードの削除
    rs.MoveLast()
    Dim last_color
    last_color = -1
    While !rs.Bof() And !rs.Eof()
        color = rs.Fields("color").Value
        depth = rs.Fields("depth").Value
        Ifb color = last_color Then
            rs.Delete()    // 重複レコードの場合、カレントレコードを削除
        EndIf
        rs.MovePrevious()
        last_color = color
    Wend
    rs.MoveFirst()
Fend

Procedure ClearCanvas( start_x, start_y, width, height )
    Dim key
    key = キーコードを取得( "L" )
    KBD(key, CLICK,     g_wait)
    
    Dim color
    color = 0 // 白
    筆の色を色番号で選択( color )
    
    Dim x
    Dim y
    For y = start_y To start_y + height
        BTN(LEFT, DOWN, start_x,         y, g_wait)
        BTN(LEFT, UP,   start_x + width, y, g_wait)
    Next
Fend

// <参考>
// http://laputa.cs.shinshu-u.ac.jp/~gtakano/prog3.html
// http://laputa.cs.shinshu-u.ac.jp/~gtakano/RGB2HSV.c
Procedure RGB2HSV( R, G, B, Var H, Var S, Var V )
    Dim Z
    Dim tmp_r
    Dim tmp_g
    DIm tmp_b
    V = max_color( R, G, B )
    Z  = min_color( R, G, B )
    Ifb ( Int(V) <> Int(0.0) ) Then
        S = Int(( V - Z ) / V * 100.00)
    Else
        S = Int(0.0)
    EndIf
    
    Ifb ( Int( V - Z ) <> Int(0) ) Then
        tmp_r = ( V - R ) / ( V - Z )
        tmp_g = ( V - G ) / ( V - Z )
        tmp_b = ( V - B ) / ( V - Z )
    Else
        tmp_r = 0.0
        tmp_g = 0.0
        tmp_b = 0.0
    EndIf
    
    Ifb ( V = R ) Then
        H = Int(60 * ( tmp_b - tmp_g ))        // 60 = PI/3
    ElseIf ( V = G ) Then
        H = Int(60 * ( 2 + tmp_r - tmp_b ))
    Else
        H = Int(60 * ( 4 + tmp_g - tmp_r ))
    EndIf
    
    Ifb ( H < 0.0 ) Then
        H = Int(H + 360)
    EndIf
Fend

Function max_color( r, g, b )
    Dim ret
    Ifb ( r > g ) Then
        Ifb ( r > b ) Then
            ret = r
        Else
            ret = b
        EndIf
    Else
        Ifb ( g > b ) Then
            ret = g
        Else
            ret = b
        EndIf
    EndIf
    Result = ret
Fend

Function min_color( r, g, b )
    Dim ret
    Ifb ( r < g ) Then
        Ifb ( r < b ) Then
            ret = r
        Else
            ret = b
        EndIf
    Else
        IFb ( g < b ) Then
            ret = g
        Else
            ret = b
        EndIf
    EndIf
    Result = ret
Fend

Function はてなハイクのウィンドウIDを取得()
    Dim winID = 0

    // 「はてなハイク」のウィンドウIDを取得(IE6/IE7 版)
    winID = GETID("はてなハイク","IEFrame")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf
    
    // 「はてなハイク」のウィンドウIDを取得(Firefox 版)
    winID = GETID("はてなハイク","MozillaUIWindowClass")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf

    Result = winID
Fend

Procedure 塗りつぶし( x, y )
    Dim key
    key = キーコードを取得( "B" )
    KBD(key, CLICK,     g_wait)
    指定座標をクリック( x + g_r, y + g_r )
    key = キーコードを取得( "L" )
    KBD(key, CLICK,     g_wait)
Fend

Procedure 丸を描く( x, y )
    Dim n
    n = 12 // 数を大きくすると滑らかになりますが重くなります
    N角形を描く( x, y, n )
Fend

Procedure 三角形を描く( x, y )
    Dim n
    n = 3
    N角形を角度を付けて描く( x, y, n, 30 )
Fend

Procedure 四角形を描く( x, y )
    Dim n
    n = 4
    N角形を角度を付けて描く( x, y, n, 45 )
Fend

Procedure 五角形を描く( x, y )
    Dim n
    n = 5
    N角形を描く( x, y, n )
Fend

Procedure 六角形を描く( x, y )
    Dim n
    n = 6
    N角形を描く( x, y, n )
Fend

Procedure 星を描く( x, y )
    Dim angle
    angle = 0
    星を角度を付けて描く( x, y, angle )
Fend

Procedure N角形を描く( x, y, n )
    Dim angle
    angle = 0
    N角形を角度を付けて描く( x, y, n, angle )
Fend

Procedure N角形を角度を付けて描く( x, y, n, angle )
    Dim t
    Dim pos_x
    Dim pos_y
    Dim prev_x
    Dim prev_y
    t = 0 + angle
    prev_x = Int(g_r * Cos( g_pi * t / 180 )) + x + g_r
    prev_y = Int(g_r * Sin( g_pi * t / 180 )) + y + g_r
    
    // Step(360/N) にすると、N角形になります。
    For t = 0 + angle To 360 + angle Step (360/n)
        BTN(LEFT, DOWN, prev_x, prev_y, g_wait)
        pos_x = Int(g_r * Cos( 2 * g_pi * t / 360 )) + x + g_r
        pos_y = Int(g_r * Sin( 2 * g_pi * t / 360 )) + y + g_r
        BTN(LEFT, UP, pos_x, pos_y, g_wait)
        prev_x = pos_x
        prev_y = pos_y
    Next
Fend

Procedure 星を角度を付けて描く( x, y, angle )
    Dim pos_x
    Dim pos_y
    Dim prev_x
    Dim prev_y
    
    Dim theta
    Dim theta_diff
    theta = g_pi * 72 / 180
    theta_diff = g_pi * angle / 180
    
    Dim x_array[5]
    Dim y_array[5]

    x_array[0] = x + Int( g_r * Sin( 0 * theta - theta_diff ) )
    y_array[0] = y + Int( g_r * Cos( 0 * theta - theta_diff ) )
    x_array[1] = x + Int( g_r * Sin( 2 * theta - theta_diff ) )
    y_array[1] = y + Int( g_r * Cos( 2 * theta - theta_diff ) )
    x_array[2] = x + Int( g_r * Sin( 4 * theta - theta_diff ) )
    y_array[2] = y + Int( g_r * Cos( 4 * theta - theta_diff ) )
    x_array[3] = x + Int( g_r * Sin( 1 * theta - theta_diff ) )
    y_array[3] = y + Int( g_r * Cos( 1 * theta - theta_diff ) )
    x_array[4] = x + Int( g_r * Sin( 3 * theta - theta_diff ) )
    y_array[4] = y + Int( g_r * Cos( 3 * theta - theta_diff ) )
    x_array[5] = x + Int( g_r * Sin( 5 * theta - theta_diff ) )
    y_array[5] = y + Int( g_r * Cos( 5 * theta - theta_diff ) )

    prev_x = x_array[0]
    prev_y = y_array[0]

    Dim i
    For i = 0 To 5
        BTN(LEFT, DOWN, prev_x, prev_y, g_wait)
        pos_x = x_array[i]
        pos_y = y_array[i]
        Print "i = [" + i + "], pos_x = [" + pos_x + "], pos_y = [" + pos_y + "]"
        BTN(LEFT, UP, pos_x, pos_y, g_wait)
        prev_x = pos_x
        prev_y = pos_y
    Next
    
Fend

Procedure 指定回数ドットを描く( x, y, nCount )
    Dim i
    For i = 1 To nCount
        BTN(LEFT,CLICK, x, y, g_wait)
    Next
Fend

Function キーコードを取得( strDirection )
    // ■ はてなハイクのお絵かきキーボードショートカット一覧
    // http://d.hatena.ne.jp/hatenahaiku/20080122/1200970790
    Public HashTbl directionTable
    directionTable["C"] = VK_C // 通常のペン
    directionTable["V"] = VK_V // 補完しないペン
    directionTable["B"] = VK_B // バケツツール
    directionTable["L"] = VK_L // ラインツール
    directionTable["1"] = VK_1 // ペンの太さ
    directionTable["2"] = VK_2 // ペンの太さ
    directionTable["3"] = VK_3 // ペンの太さ
    directionTable["0"] = VK_0 // ペンの太さ
    directionTable["N"] = VK_N // アンチエイリアスオフ

    directionTable["→"] = VK_RIGHT
    directionTable["←"] = VK_LEFT
    directionTable["↓"] = VK_DOWN
    directionTable["↑"] = VK_UP

    Result = directionTable[strDirection]
Fend

Function 筆の太さを取得( toolName )
    Public HashTbl toolNameTable
    // 太さ→番号変換
    toolNameTable["細"] = 0  // 細い
    toolNameTable["小"] = 1  // 小
    toolNameTable["中"] = 2  // 中
    toolNameTable["大"] = 3  // 大

    Result = toolNameTable[toolName]

    Print "toolName = [" + toolName + "]"
    Print "tool_no = [" + Result + "]"
Fend

Procedure 筆の太さを選択( nWide )
    Dim x
    Dim y
    Dim nWidth
    x = g_x + 5   // 細筆の位置
    y = g_y - 14  // 細筆の位置
    nWidth = 18   // 筆の位置の間隔
    指定座標をクリック( x + nWidth * nWide, y )
Fend

Procedure 色を選択( dotChar )
    Dim nColor
    nColor = 色番号を取得( dotChar )
    筆の色を色番号で選択( nColor )
Fend

Procedure 筆の色を色番号で選択( nColor )
    Dim x
    Dim y
    Dim nWidth
    x = g_x + 83  // 白絵の具の位置
    y = g_y - 14  // 白絵の具の位置
    nWidth = 14 // 絵の具の位置の間隔
    指定座標をクリック( x + nWidth * nColor, y )
Fend

Procedure 筆の色をスポイトで選択( x, y )
    Dim key
    key = VK_CTRL
    KBD(key, DOWN,     g_wait*2)
    指定座標をクリック( x, y )
    KBD(key, UP,      g_wait)
Fend

Procedure 指定座標をクリック( x, y )
    BTN( LEFT, DOWN,  x, y, g_wait )
    BTN( LEFT, UP,    x, y, g_wait )
Fend

Function 色番号を取得( dotChar )
    Public HashTbl colorTable
    // 色名→色番号変換
    colorTable["無"] = -1 // 透明
    colorTable["白"] = 0  // 白
    colorTable["薄"] = 1  // 薄い灰色
    colorTable["灰"] = 2  // 灰色
    colorTable["黒"] = 3  // 黒
    colorTable["赤"] = 4  // 赤
    colorTable["茶"] = 5  // 茶色
    colorTable["肌"] = 6  // 肌色
    colorTable["黄"] = 7  // 黄色
    colorTable["緑"] = 8  // 緑
    colorTable["深"] = 9  // 深緑
    colorTable["青"] = 10  // 青
    colorTable["紫"] = 11  // 紫

    Result = colorTable[dotChar]
Fend

Function 色名からRGBコードを取得( dotChar )
    Public HashTbl colorTable
    // 色名→RGBコード変換
    colorTable["無"] = -1

    colorTable["青"] = $B2974C // 4C97B2
    colorTable["緑"] = $62A873 // 73A862
    colorTable["肌"] = $D5E6D7 // D7E6D5
    colorTable["黄"] = $F0F2E7 // E7F2F0
    colorTable["白"] = $F0F2E7 // E7F2F0

    Result = colorTable[dotChar]
Fend
 |