2010年2月アーカイブ

 先日、Advanced W-ZERO3 [es]のW-VALUE SELECTが終了しました。それが1月28日だったのをいいことに、即座にHybrid W-ZERO3に機種変更しました。それでまあいろいろいじくり回していたのですが、それが一段落したところで、昔使っていたPocketPC CASSIOPEIA E-750をついでにもう一度いじってみることに。

TODAYはまあそれなりですが、とりあえずランチャーとか壁紙表示とかバッテリーとかそんくらいです。

Windows Media Playerが標準で入っているのですが、使ったことある人なら分かると思いますが、これが何しろ使いづらいんです。ファイルを開くとかいうメニューがないんです。曲はすべてプレイリストになっていないと読んでくれません。

ということで、プレイリストの書式です。

[Pocket WMP Playlist File v1.1]

[Directories]
1 = \メモリ カード\My Documents\only my railgun

[Tracks]
<1>\only my railgun.mp3
<1>\late in autumn.mp3

[Settings]
CurrentTrack = 0
CurrentTime = 0
Shuffle = 0
Repeat = 0

拡張子は .PMP で、ファイルエンコードは UTF-16 、改行は CR+LF でした。このファイルは本体の My Documents に置かれないと駄目なのかな?

WMPからの操作が非常に面倒くさいので、これを作るプログラムを作ろうかと考えています。あ、開発環境がないので本体にインストールするようなものは作れません。あくまで母艦で操作するタイプのものです。

誰得?w

 

ちなみに、Hybrid W-ZERO3が搭載しているWMPも基本は一緒で使いづらいです。こちらの方は、S2Pというソフトで対応しています。これならフォルダ単位で開くことが簡単にできるので重宝しています。

 工程表では、客先協議や関係機関協議などの「協議」を記すことも重要です。「協議」はピンポイントで行われるものなので、ラインではなく別の表示をしてやります。

ここでは▲としました。これは文字列の「▲」ではなく、Shapeオブジェクトの三角形です。

三角形を描画するメソッド、というか図形を描画するメソッドは、

expression.AddShape(Type, Left, Top, Width, Height)

Type : 描画する図形のタイプ (MsoAutoShapeType クラスの定数)
Left, Top : 描画する図形の左上の座標値 As Single
Width, Height : 描画する図形の幅と高さ As Single

です。

ここでは上向きの三角形なので、msoShapeIsoscelesTriangleとなります。既に述べたように、選択範囲の左上の座標値や幅、高さは取得できるので簡単です。

今回ちょっと工夫をしたところは、上図の青▲がライン上に、赤▲がセル上に描画されていますね。この両方のパターンを一つのボタン(プロシージャ)で出来るようにしたことです。

    ' 協議マークの開始座標、幅、高さを設定
    If Selection.Columns.Count = 1 Then
        X0 = SentakuLeft
        Y0 = SentakuTop
        W1 = SentakuWidth
        H1 = SentakuHeight
    Else
        X0 = SentakuLeft + (SentakuWidth / 4)
        Y0 = SentakuTop
        W1 = SentakuWidth / 2
        H1 = SentakuHeight
    End If

セルを1列選択したときと2列選択したときで図形左上の座標値、幅と高さの計算式を変えているだけです。単純です。

図形の描画についても、描画範囲外の場合や2行以上選択した場合、また上のコードに当てはまらない場合つまり3列以上選択した場合にはメッセージを出して処理を抜けます。

    ' 協議マークをプロットする
    Set shp = ActiveSheet.Shapes.AddShape(msoShapeIsoscelesTriangle, X0, Y0, W1, H1)
    
    ' 協議マークの塗りつぶしを設定
    shp.Line.Weight = 0.1
    shp.Line.ForeColor.RGB = RGB(ColorR, ColorG, ColorB)
    shp.Fill.Visible = True
    shp.Fill.ForeColor.RGB = RGB(ColorR, ColorG, ColorB)

最後に描画した三角形の色と塗りつぶし色を設定して終了です。 

 

完成したファイルを置いておきます。特にパスワードはかけていないので拙いコーディングですが、見てやって下さい。

 前回のコードでは、複数行を選択したときにでもその複数行の中央にラインが引かれてしまいます。工程表で必要なラインは一行で十分ですので、一行選択したときのみラインを引くように制限します。

    ' 2行以上の場合メッセージを出して終了
    If Selection.Rows.Count > 1 Then
        MsgBox "1行のみ選択して下さい。"
        Exit Sub
    End If

また、工程表のラインは「予定」と「実績」があります。ラインカラーを「予定=青」「実績=赤」とすることとし、条件分けによって同じコードでラインを引き分けることとします。

偶数・奇数行の選択はテンプレートによって変わるでしょうから、適宜修正して下さい。

    ' 選択行によるラインカラーの設定(偶数:青 奇数:赤)
    If (Selection(1).Row Mod 2) = 0 Then
        ColorR = 0
        ColorG = 0
        ColorB = 255
    Else
        ColorR = 255
        ColorG = 0
        ColorB = 0
    End If

    ' 工数ラインをプロットする
    With ActiveSheet.Shapes.AddLine(X0, Y0, X1, Y1).Line
        .ForeColor.RGB = RGB(ColorR, ColorG, ColorB)
        .Weight = 4
    End With

偶数・奇数の条件分けは選択した行番号を2で割って余りがなければ偶数行という単純な方法です。それぞれの場合に、RGBの数値を指定しておき、プロットに反映させます。

---

次に描画範囲の設定をします。設定というか、どこにでもラインが引けてしまうのは表としていかがなものかと思うので、指定した範囲外には描画できないようにします。これも最初に作るテンプレートにより変わるので適宜修正して下さい。

私が作ったテンプレートはこれです。

これについて、描画範囲は以下のようになります。

選択範囲の左上と右下が描画範囲を外れていれば描画させないようにします。

    ' 選択範囲が工程表外の場合メッセージを出して終了
    If Selection(1).Row < 10 Or Selection(1).Column < 6 Then
        MsgBox "描画範囲外です。"
        Exit Sub
    End If
    If Selection(Selection.Count).Row > 47 Or _
       Selection(Selection.Count).Column > 83 Then
        MsgBox "描画範囲外です。"
        Exit Sub
    End If

次回は「協議」時のアイコンの描画について書きます。

 

カスタム検索
Access Counter
Powered by Movable Type 4.22-ja

2016年9月

Sun Mon Tue Wed Thu Fri Sat
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30