回 帖 发 新 帖 刷新版面

主题:[讨论]vb过程太大,高手们能否简化此程序,希望高手帮忙,万分感激

Private Sub 坐标系1(轴长, 最大值, 弯矩最大处)
    Pic1.Scale (-轴长 / 5, 最大值 * 2)-(轴长 * 1.4, -(最大值 * 2))
    Pic1.Line (0, -(最大值 * 1.5))-(0, 最大值 * 1.5)
    Pic1.Line -(-轴长 / 100, 最大值 * 1.3), vbBlue
    Pic1.Line (轴长 / 100, 最大值 * 1.3)-(0, 最大值 * 1.5), vbBlue
    
    Pic1.Line (0, 0)-(轴长 * 1.25, 0)
    Pic1.Line -(轴长 * 1.22, 最大值 / 16), vbBlue
    Pic1.Line (轴长 * 1.22, -最大值 / 16)-(轴长 * 1.25, 0), vbBlue
    
    Pic1.CurrentX = -轴长 / 100
    Pic1.CurrentY = 0
    Pic1.Print 0
    
    Pic1.CurrentX = 轴长
    Pic1.CurrentY = 0
    Pic1.Print 轴长
    
    Pic1.CurrentX = 弯矩最大处
    Pic1.CurrentY = 0
    Pic1.Print 弯矩最大处
    
    Pic1.CurrentX = 轴长 * 1.25
    Pic1.CurrentY = 0
    Pic1.Print "X"
    
    Pic1.CurrentX = 轴长 / 50
    Pic1.CurrentY = 最大值 * 1.5
    Pic1.Print "Y"
    
   
    Pic1.CurrentX = 弯矩最大处 * 0.99
    Pic1.CurrentY = 最大值 * 1.32
    Pic1.Print Round(最大值)
    
    'Pic1.Circle (弯矩最大处, 最大值), 0.1, vbRed
End Sub
Private Sub 坐标系2(轴长, 最小值, 弯矩最小处)
    Pic1.Scale (-轴长 / 5, Abs(最小值) * 2)-(轴长 * 1.4, -(Abs(最小值) * 2))
    Pic1.Line (0, -(Abs(最小值) * 1.5))-(0, Abs(最小值) * 1.5)
    Pic1.Line -(-轴长 / 100, Abs(最小值) * 1.3), vbBlue
    Pic1.Line (轴长 / 100, Abs(最小值) * 1.3)-(0, Abs(最小值) * 1.5), vbBlue
    
    Pic1.Line (0, 0)-(轴长 * 1.25, 0)
    Pic1.Line -(轴长 * 1.22, Abs(最小值) / 16), vbBlue
    Pic1.Line (轴长 * 1.22, Abs(最小值) / 16)-(轴长 * 1.25, 0), vbBlue
    
    Pic1.CurrentX = -轴长 / 100
    Pic1.CurrentY = 0
    Pic1.Print 0
    
    Pic1.CurrentX = 轴长
    Pic1.CurrentY = 0
    Pic1.Print 轴长
    
    Pic1.CurrentX = 弯矩最小处
    Pic1.CurrentY = 0
    Pic1.Print 弯矩最小处
    
    Pic1.CurrentX = 轴长 * 1.25
    Pic1.CurrentY = 0
    Pic1.Print "X"
    
    Pic1.CurrentX = 轴长 / 50
    Pic1.CurrentY = 最小值 * 1.5
    Pic1.Print "Y"
    
   
    Pic1.CurrentX = 弯矩最小处 * 0.99
    Pic1.CurrentY = 最小值 * 1.32
    Pic1.Print Round(最小值)
   
    
    'Pic1.Circle (弯矩最大处, 最大值), 0.1, vbRed
End Sub
Private Sub 坐标系3(轴长, 最大值, 弯矩最大处)
    Pic2.Scale (-轴长 / 5, 最大值 * 2)-(轴长 * 1.4, -(最大值 * 2))
    Pic2.Line (0, -(最大值 * 1.5))-(0, 最大值 * 1.5)
    Pic2.Line -(-轴长 / 100, 最大值 * 1.3), vbBlue
    Pic2.Line (轴长 / 100, 最大值 * 1.3)-(0, 最大值 * 1.5), vbBlue
    
    Pic2.Line (0, 0)-(轴长 * 1.25, 0)
    Pic2.Line -(轴长 * 1.22, 最大值 / 16), vbBlue
    Pic2.Line (轴长 * 1.22, -最大值 / 16)-(轴长 * 1.25, 0), vbBlue
    
    Pic2.CurrentX = -轴长 / 100
    Pic2.CurrentY = 0
    Pic2.Print 0
    
    Pic2.CurrentX = 轴长
    Pic2.CurrentY = 0
    Pic2.Print 轴长
    
    Pic2.CurrentX = 弯矩最大处
    Pic2.CurrentY = 0
    Pic2.Print 弯矩最大处
    
    Pic2.CurrentX = 轴长 * 1.25
    Pic2.CurrentY = 0
    Pic2.Print "X"
    
    Pic2.CurrentX = 轴长 / 50
    Pic2.CurrentY = 最大值 * 1.5
    Pic2.Print "Y"
    
   
    Pic2.CurrentX = 弯矩最大处 * 0.99
    Pic2.CurrentY = 最大值 * 1.32
    Pic2.Print Round(最大值)
End Sub
Private Sub 坐标系4(轴长, 最小值, 弯矩最小处)
    Pic2.Scale (-轴长 / 5, Abs(最小值) * 2)-(轴长 * 1.4, -(Abs(最小值) * 2))
    Pic2.Line (0, -(Abs(最小值) * 1.5))-(0, Abs(最小值) * 1.5)
    Pic2.Line -(-轴长 / 100, Abs(最小值) * 1.3), vbBlue
    Pic2.Line (轴长 / 100, Abs(最小值) * 1.3)-(0, Abs(最小值) * 1.5), vbBlue
    
    Pic2.Line (0, 0)-(轴长 * 1.25, 0)
    Pic2.Line -(轴长 * 1.22, Abs(最小值) / 16), vbBlue
    Pic2.Line (轴长 * 1.22, Abs(最小值) / 16)-(轴长 * 1.25, 0), vbBlue
    
    Pic2.CurrentX = -轴长 / 100
    Pic2.CurrentY = 0
    Pic2.Print 0
    
    Pic2.CurrentX = 轴长
    Pic2.CurrentY = 0
    Pic2.Print 轴长
    
    Pic2.CurrentX = 弯矩最小处
    Pic2.CurrentY = 0
    Pic2.Print 弯矩最小处
    
    Pic2.CurrentX = 轴长 * 1.25
    Pic2.CurrentY = 0
    Pic2.Print "X"
    
    Pic2.CurrentX = 轴长 / 50
    Pic2.CurrentY = 最小值 * 1.5
    Pic2.Print "Y"
    
   
    Pic2.CurrentX = 弯矩最小处 * 0.99
    Pic2.CurrentY = 最小值 * 1.32
    Pic2.Print Round(最小值)
End Sub

Private Function Fp11(l, xp1, p1, x)
    Fp11 = (1 - xp1 / l) * p1
End Function
Private Function Fp12(l, xp1, p1, x)
    Fp12 = -xp1 * p1 / l
End Function
Private Function Mp11(l, xp1, p1, x)
    Mp11 = (1 - xp1 / l) * p1 * x
End Function
Private Function Mp12(l, xp1, p1, x)
    Mp12 = (1 - xp1 / l) * p1 * x - p1 * (x - xp1)
End Function



Private Sub Command2_Click()
    Pic1.Cls
    Dim y()
    l = Val(Text3.Text)
    ReDim y(l * 1000)
    Max = 0
    Maxx = 0
    Min = 0
    Minx1 = 0
 If Combo1.Text = "简支梁" Then
    If Val(Text1.Text) = 1 Then
        If Val(Text2.Text) = 0 And Val(Text11.Text) = 0 Then
            p1 = Arr(1)
            xp1 = Brr(1)
            For i = 0 To l * 1000
                x = i / 1000
                If x < xp1 Then
                    y(i) = Mp11(l, xp1, p1, x)
                Else
                    y(i) = Mp12(l, xp1, p1, x)
                End If
                If y(i) > Max Then
                    Max = y(i)
                    Maxx = x
                End If
            Next i
  'frm扭转计算.Print Max
            坐标系1 l, Max, Maxx  '调用的上面的建坐标系的函数,很好
            For i = 0 To l * 1000
                x = i / 1000
                Pic1.PSet (x, y(i))
                If i Mod (50 * l) = 0 Then Pic1.Line (x, y(i))-(x, 0), vbBlack
            Next i
                Max = 0
                Maxx = 0
                Min = 0
                Minx1 = 0
                For i = 0 To l * 1000
                x = i / 1000
                Select Case x
                    Case Is <= xp1
                        y(i) = Fp11(l, xp1, p1, x)
                    Case Else
                        y(i) = Fp12(l, xp1, p1, x)
                End Select
                 If y(i) > Max Then
                    Max = y(i)
                    Maxx = x
                ElseIf y(i) < Min Then
                    Min = y(i)
                    Minx1 = x
                End If
            Next i
                 If Abs(Max) > Abs(Min) Then
                    坐标系3 l, Max, Maxx
                 Else
                    坐标系4 l, Min, Minx1
                 End If
               For i = 0 To l * 1000
                x = i / 1000
                 If i = 0 Then
                    Pic2.PSet (x, y(i))
                Else
                    Pic2.Line (x, y(i))-(x - 1 / 1000, y(i - 1)), vbBlack
                    If i = l * 1000 Then Pic2.Line (x, y(i))-(x, 0), vbBlack
                End If
                If i Mod (50 * l) = 0 Then
                    Pic2.Line (x, y(i))-(x, 0), vbBlue
                End If
            Next i
        End If
     End If
     End If
End Sub

回复列表 (共17个回复)

11 楼

简支梁的?前面谁做过一个多种梁体力学分析的工程。
连100行都不到,算不得太大吧?

12 楼

高手,这个是不多,但是我没都给您传上,因为我问了很多人,他们一看代码这么多直接说:晕。我只好把一部分代码传到上面去,其他的代码都是类似的,您看看上面的两种情况就可以看出来了,只要简化上面的代码其他的只要类比过来就没问题了,高手您看看能否简化呢??谢谢高手的关注,急

13 楼

光靠缩写几个语句根本不能解决问题。你如果有决心,整个程序应该重新写!

不要一上来就写代码,先做软件设计报告,定义各种结构,要用数据结构解决问题!

不要把具体的常数,如 -轴长 / 5, 轴长 * 1.4,等等写道程序里面,程序代码不要用来定义具体的元件。可以另外开发 元件编辑软件, 用来给编辑“元件库”中的内容。

举个例子,汉字显示,汉字库很少有人直接写在程序里,除非就只要用几个汉字。

14 楼

如果,只是编译限制,可以多开几个模块,每个模块就是一个.bas文件, 工程资源管理器(屏幕右上方)里可以设置。

15 楼


14楼的高手,谢谢您的建议,如果再重新写代码,肯定来不及了,高手问您一句能否简化现有的代码呢?谢谢

16 楼

11楼的高手,希望给点指点,您说可以简化,能否给个具体的例子呢?谢谢

17 楼

[quote]如果,只是编译限制,可以多开几个模块,每个模块就是一个.bas文件, 工程资源管理器(屏幕右上方)里可以设置。[/quote]
高手,您能否帮忙简化一下,Private Sub Command2_Click() 中的代码呢,过程太大了,谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册