找回密码
 立即注册
搜索
楼主: roc2003

(未解决)如何根据次数,动态地画出长方形。求帮助

30
回复
6647
查看
[复制链接]

3

主题

8

帖子

43

幻币

江湖少侠

Rank: 2

积分
172
QQ
2019-10-11 13:54:04 显示全部楼层
基本就是这个样子,有不明白的地方,还要向您请教。
PPT学习论坛
回复 支持 反对

使用道具 举报

4

主题

13

帖子

44

幻币

一流武者

Rank: 3Rank: 3

积分
237
QQ
2019-10-11 13:54:43 显示全部楼层
weiyingde,大神,还有几个问题:

1.            With .Shapes("Label1")  '显示当前摸到的是哪张牌
                ' .Fill.BackColor.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                ' .Fill.ForeColor.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                 With .OLEFormat.Object
                      .Caption = sr
                      .ForeColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                      .BackColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                      With .Font
                           .Name = "Arial Black"
                           .Bold = True
                           .Size = 40
                     End With
                 End With
           End With
这个标签,在点击开始按钮之前隐藏,点击开始按钮之后出现,且背景为透明、无边框线;

2.           With Shapes("矩形 13")    '根据摸到的次数画出条形图
                .Height = i * 400 / 500
                .Top = 419.62 - i * 384 / 500
                With .Fill
                     .ForeColor.RGB = RGB(128, 0, 0) 'RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                     .BackColor.RGB = RGB(170, 170, 170) 'RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                End With
           End With
这个长方形,在点击开始按钮之前也隐藏,点击开始按钮之后出现,且在变高的过程中,不能有向下的位移,不然会到了X轴下方

3.          tm1 = Timer  '控制刷新的时间
          Do
            DoEvents
          Loop While Timer - tm1 < 0.0004
上面这一段,应该是控制时间的,已经改成了0.0004,感觉还是慢,希望时间再快一些,怎么办?(可不可改成 摸10次牌,刷新一次)
PPT学习论坛
回复 支持 反对

使用道具 举报

1

主题

10

帖子

95

幻币

江湖少侠

Rank: 2

积分
183
QQ
2019-10-11 13:57:16 显示全部楼层
1、用label控件作显示,存在一个刷新的延迟的问题,若事先隐藏再显示的话,则可能出现要先的字符不能变化的问题。
2、可以是实现,向下延伸的问题,可能是感觉的问题。
3、0.0004秒应该是很快的速度,若向再快,建议换成用自选图形实现;若再不行,要更换别的编程语言来实现。那么在下也无能为力了。
Private Sub CommandButton1_Click()
On Error Resume Next
With ActivePresentation.Slides(1)
    For i = 1 To 500
        Randomize
            rd = Int(Rnd * 4) + 1
            sr = Choose(rd, &quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;)
            If rd = 1 Then a = a + 1
            If rd = 2 Then b = b + 1
            If rd = 3 Then c = c + 1
            If rd = 4 Then d = d + 1
            
            With .Shapes(&quot;Label1&quot;)
                 .Visible = msoCTrue
                 With .OLEFormat.Object
                      .Caption = sr
                      .ForeColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                      .BackColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                      With .Font
                           .Name = &quot;Arial Black&quot;
                           .Bold = True
                           .Size = 40
                     End With
                 End With
                 
           End With
           With .Shapes(&quot;Rectangle 20&quot;)
                .Visible = msoTrue
                .Height = i * 400 / 500
                .Top = 419.62 - i * 384 / 500
                With .Fill
                     .ForeColor.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255)) 'RGB(128, 0, 0)
                     .BackColor.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255)) 'RGB(170, 170, 170)
                End With
           End With
           With Shapes(&quot;文本框 21&quot;)
                With .TextFrame.TextRange
                     .Text = &quot;共摸了&quot; & i & &quot;次&quot;
                     With .Font
                          .NameFarEast = &quot;楷体&quot;
                          .Bold = True
                          .Size = 28
                          .Color.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                     End With
                End With
           End With
           
           For j = 1 To 4
               With .Shapes(&quot;Label&quot; & 1 + j)
                    .Width = Choose(j, a, b, c, d) * 4
                    .Fill.BackColor.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                    .Fill.ForeColor.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                    With .OLEFormat.Object
                         .Caption = Choose(j, a, b, c, d) & &quot;次&quot;
                         .ForeColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                         .BackColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                         With .Font
                              .Name = &quot;楷体&quot;
                              .Bold = True
                              .Size = 18
                         End With
                    End With
               End With
          Next
        tm1 = Timer
           Do
             DoEvents
        Loop While Timer - tm1 < 1
    Next
.Shapes(&quot;Label1&quot;).Visible = msoFalse
.Shapes(&quot;Rectangle 20&quot;).Visible = msoFalse
End With
End Sub
PPT学习论坛
回复 支持 反对

使用道具 举报

2

主题

10

帖子

15

幻币

江湖少侠

Rank: 2

积分
91
QQ
2019-10-11 14:03:50 显示全部楼层
已经很好了,非常感谢。
PPT学习论坛
回复 支持 反对

使用道具 举报

3

主题

8

帖子

79

幻币

一流武者

Rank: 3Rank: 3

积分
254
2019-10-11 14:30:03 显示全部楼层
非常感谢!
1.  if 摸的次数i是10的倍数 then  
上面的条件语句怎么写?
2. For i = 1 To 50
把步长改成2,即每次增加2,语句怎么写?

求大神帮帮忙啊
PPT学习论坛
回复 支持 反对

使用道具 举报

2

主题

8

帖子

83

幻币

江湖少侠

Rank: 2

积分
198
QQ
2019-10-11 14:32:39 显示全部楼层
Private Sub CommandButton1_Click()
On Error Resume Next
With ActivePresentation.Slides(1)
   ' For i = 1 To 500
   '2、改为步长为2,代码如下:
     For i = 1 To 500 Step 2
        Randomize
            rd = Int(Rnd * 4) + 1
            sr = Choose(rd, &quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;)
            If rd = 1 Then a = a + 1
            If rd = 2 Then b = b + 1
            If rd = 3 Then c = c + 1
            If rd = 4 Then d = d + 1
            '1、第一个问题:提示摸了10的倍数。
             N = N + 1
            If N Mod 10 = 0 Then
               m = m + 1
               iStr = &quot;次数:10的&quot; & m & &quot;倍。&quot;
            Else
               iStr = &quot;共摸了&quot; & N & &quot;次&quot;
            End If
           ' If N Mod 10 = 0 Then MsgBox Space(10) + &quot;已经摸了&quot; + N + &quot;次&quot; & vbCrLf & &quot;是10的&quot; + N / 10 & &quot;倍。&quot;, vbCritical, &quot;温馨提示&quot;
            With .Shapes(&quot;Label1&quot;)
                 .Visible = msoCTrue
                 With .OLEFormat.Object
                      .Caption = sr
                      .ForeColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                      .BackColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                      With .Font
                           .Name = &quot;Arial Black&quot;
                           .Bold = True
                           .Size = 40
                     End With
                 End With

           End With
           With .Shapes(&quot;Rectangle 20&quot;)
                .Visible = msoTrue
                .Height = i * 400 / 500
                .Top = 419.62 - i * 384 / 500
                With .Fill
                     .ForeColor.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255)) 'RGB(128, 0, 0)
                     .BackColor.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255)) 'RGB(170, 170, 170)
                End With
           End With
           With Shapes(&quot;文本框 21&quot;)
                With .TextFrame.TextRange
                     .Text = iStr
                     With .Font
                          .NameFarEast = &quot;楷体&quot;
                          .Bold = True
                          .Size = 28
                          .Color.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                     End With
                End With
           End With

           For j = 1 To 4
               With .Shapes(&quot;Label&quot; & 1 + j)
                    .Width = Choose(j, a, b, c, d) * 4
                    .Fill.BackColor.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                    .Fill.ForeColor.RGB = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                    With .OLEFormat.Object
                         .Caption = Choose(j, a, b, c, d) & &quot;次&quot;
                         .ForeColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                         .BackColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
                         With .Font
                              .Name = &quot;楷体&quot;
                              .Bold = True
                              .Size = 18
                         End With
                    End With
               End With
          Next
        tm1 = Timer
           Do
             DoEvents
        Loop While Timer - tm1 < 1
    Next
.Shapes(&quot;Label1&quot;).Visible = msoFalse
.Shapes(&quot;Rectangle 20&quot;).Visible = msoFalse
End With
End Sub
PPT学习论坛
回复 支持 反对

使用道具 举报

0

主题

17

帖子

41

幻币

江湖少侠

Rank: 2

积分
74
QQ
2019-10-11 14:32:48 显示全部楼层
附件如下,请参阅。 共摸10的倍次.rar (60.68 KB, 下载次数: 50)
PPT学习论坛
回复 支持 反对

使用道具 举报

3

主题

11

帖子

32

幻币

一流武者

Rank: 3Rank: 3

积分
204
QQ
2019-10-11 14:55:44 显示全部楼层
非常感谢。通过这个例子学会了很多,知道了怎么通过语言控制页面中的元素,显示内容不一定非得用标签控件,还有一些常用的语法……,非常感谢!!!
PPT学习论坛
回复 支持 反对

使用道具 举报

1

主题

7

帖子

83

幻币

一流武者

Rank: 3Rank: 3

积分
304
QQ
2019-10-11 14:56:32 显示全部楼层
不谢不谢,共同学习,一起进步。
PPT学习论坛
回复 支持 反对

使用道具 举报

4

主题

7

帖子

71

幻币

江湖少侠

Rank: 2

积分
102
QQ
2019-10-11 14:57:33 显示全部楼层
求教:

1.On Error Resume Next
  With ActivePresentation.Slides(1)
这两行代码什么意思?第二行,怎么改成用current表示的句子。

2.       tm1 = Timer  '控制时间
           Do
             DoEvents
        Loop While Timer - tm1 < 0.01
上面这几行分别是什么意思?
PPT学习论坛
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册