tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルグループ化した図形の塗りつぶし
記事No11578
投稿日: 2008/02/29(Fri) 10:36
投稿者hanai
エクセルに立方体の図を描きました。
立方体の図を描く為、色々なページを参考に組み合わせたらやっと描けたのですがこれで良いのでしょうか?
その立方体の上面と右側面になる部分を塗りつぶしたいのですがどうすれば良いのでしょうか?
立方体を積み重ねたり、並べた時に最初の立方体の見えない部分を隠すためです。

TX SY 作図の基準点です
L W H 立方体のサイズです
RE    縮小率です
SYU   種類によって実線又は破線で描く
VB6 XP excel2000
宜しくお願いします。
'立体図
    RX = TX - 0.3 * W * RE - 20
    RY = SY + 0.3 * W * RE + 150
    le = L * RE
    wi = W * RE * 0.5
    hi = H * RE
    With XL.Worksheets(2).Shapes
        With .AddShape(msoShapeRectangle, RX, RY - hi, le - 1, hi - 1)
            .TextFrame.Characters.Text = CS
            
            If SYU = 4 Or SYU = 5 Then
                 .Line.DashStyle = msoLineSquareDot
            Else
                 .Line.DashStyle = msoLineSolid
            End If
        End With
        arr(1) = .Item(.Count).Name
    
        With .AddLine(RX, RY - hi, RX + wi, RY - hi - wi)
        
            If SYU = 4 Or SYU = 5 Then
                 .Line.DashStyle = msoLineSquareDot
            Else
                 .Line.DashStyle = msoLineSolid
            End If
        End With
        arr(2) = .Item(.Count).Name
    
        With .AddLine(RX + wi, RY - hi - wi, RX + wi + le, RY - hi - wi)
        
            If SYU = 4 Or SYU = 5 Then
                 .Line.DashStyle = msoLineSquareDot
            Else
                 .Line.DashStyle = msoLineSolid
            End If
        End With
        arr(3) = .Item(.Count).Name
    
        With .AddLine(RX + le, RY - hi, RX + wi + le, RY - hi - wi)
        
            If SYU = 4 Or SYU = 5 Then
                 .Line.DashStyle = msoLineSquareDot
            Else
                 .Line.DashStyle = msoLineSolid
            End If
        End With
        arr(4) = .Item(.Count).Name
    
        With .AddLine(RX + le, RY, RX + wi + le, RY - wi)
        
            If SYU = 4 Or SYU = 5 Then
                 .Line.DashStyle = msoLineSquareDot
            Else
                 .Line.DashStyle = msoLineSolid
            End If
        End With
        arr(5) = .Item(.Count).Name
    
        With .AddLine(RX + le + wi, RY - wi - hi, RX + wi + le, RY - wi)
        
            If SYU = 4 Or SYU = 5 Then
                 .Line.DashStyle = msoLineSquareDot
            Else
                 .Line.DashStyle = msoLineSolid
            End If
        End With
        arr(6) = .Item(.Count).Name
        .Range(arr).Group
    End With

[ツリー表示へ]
タイトルRe: グループ化した図形の塗りつぶし
記事No11581
投稿日: 2008/02/29(Fri) 17:12
投稿者花ちゃん
> その立方体の上面と右側面になる部分を塗りつぶしたいのですがどうすれば良いのでしょうか?

確認はしていませんが、ここの 図形の内部を塗りつぶす ではだめでしょうか? http://hanatyan.sakura.ne.jp/vbhlp/gra_nuritubusi.htm

[ツリー表示へ]
タイトルRe^2: グループ化した図形の塗りつぶし
記事No11583
投稿日: 2008/02/29(Fri) 18:05
投稿者hanai
> > その立方体の上面と右側面になる部分を塗りつぶしたいのですがどうすれば良いのでしょうか?
>
> 確認はしていませんが、ここの 図形の内部を塗りつぶす ではだめでしょうか? http://hanatyan.sakura.ne.jp/vbhlp/gra_nuritubusi.htm

早速の回答を有難うございます。
このページは色々捜す段階で見せて頂いたのですが
pictureなのでと読み飛ばしていきました。
今回試してみました。
 .Range(arr).Group
 .FillStyle = vbFSSolid            '塗りつぶし
 .FillColor = RGB(255, 0, 0)       '赤

End With
と最後の所に入れてみましたが「サポートしていません」と出ました。

その後自分なりの方法として
太い白い線を上面と側面に何本も描いてグループ化して隠そうとしています
幸い寸法から言って合わせて20本程引くだけです。
何とか誤魔化す事を思い付いたのですがスマートでないし
これしか無いでしょうか。

[ツリー表示へ]
タイトルRe^3: グループ化した図形の塗りつぶし
記事No11584
投稿日: 2008/02/29(Fri) 18:53
投稿者花ちゃん
Fill プロパティを使って見ては。
http://www.feedsoft.net/excel/tips/vba_61.html

Private Sub CommandButton1_Click()
    Set myDocument = Worksheets(1)
    With myDocument.Shapes.AddShape(msoShapeRectangle, _
                90, 90, 90, 50).Fill
    End With
    With myDocument.Rectangles(1)
        .ShapeRange.Fill.ForeColor.RGB = RGB(255, 0, 0)
        .ShapeRange.Rotation = 45
    End With
End Sub

[ツリー表示へ]
タイトルRe^4: グループ化した図形の塗りつぶし
記事No11610
投稿日: 2008/03/03(Mon) 12:00
投稿者hanai
> Fill プロパティを使って見ては。
> http://www.feedsoft.net/excel/tips/vba_61.html
>
> Private Sub CommandButton1_Click()
>     Set myDocument = Worksheets(1)
>     With myDocument.Shapes.AddShape(msoShapeRectangle, _
>                 90, 90, 90, 50).Fill
>     End With
>     With myDocument.Rectangles(1)
>         .ShapeRange.Fill.ForeColor.RGB = RGB(255, 0, 0)
>         .ShapeRange.Rotation = 45
>     End With
> End Sub
早速の回答を有難うございます。
休日明けの今朝から試しています。
最後から2行目に挿入しましたが「サポートしていません」
         arr(6) = .Item(.Count).Name
        .Range(arr).Group
        .ShapeRange.Fill.ForeColor.RGB = RGB(255, 0, 0)
    End With
ShapeRange.に代えてRange(arr).とすると
    arr(6) = .Item(.Count).Name
        .Range(arr).Group
        .Range(arr).Fill.ForeColor.RGB = RGB(255, 0, 0)
    End With
グループ化した立体図のうちの長方形の部分だけ着色されましたが
立体図の上面と側面は透明のままでした。

グループ化した立体図の名前を入れるのかなと思うのですが
その名前の書き方が判りません。
もしくはfillは標準の長方形や円だけでグループ化したものには適用されないのでしょうか。

[ツリー表示へ]