Public Sub redraw() …… End SubPrivate Sub Form_Load() Me.Show …… C = 0.005 Call redraw End Sub '初始化 Private Sub Com3_Click() Tim.Enabled = False End Sub Private Sub Com2_Click() Pic1.Cls Pic2.Cls Pic3.Cls Pic4.Cls
T = 0 Tim.Enabled = False
Call redraw
End Sub '坐标线Private Sub Com1_Click() Tim.Enabled = True Call redraw …… End SubPrivate Sub HScroll1_Change() C = HScroll1.Value / 1000 End SubPrivate Sub Tim_Timer() 'C = 0.005 …… End Sub Private Sub Com4_Click() Unload Me End Sub Private Sub TA_Change() Tim.Enabled = False T = 0 End SubPrivate Sub TAlf_Change() Tim.Enabled = False T = 0 End Sub Private Sub TGam_GotFocus() Tb = True Tim.Enabled = False End Sub Private Sub Tk_GotFocus() Tim.Enabled = False End Sub Private Sub Tm_GotFocus() Tim.Enabled = False End Sub Private Sub TOmg_GotFocus() Tim.Enabled = False End Sub大致用到这么多东西,源程序太罗嗦了,不好意思给大家看,呵呵。
redraw中有没有对所画图形初始坐标的计算?这个计算是否正确?
如果是调试的时候正确,编译成为exe以后错误就试着编译成为P代码
Option Explicit public formoldWidth As Long public formoldHeight As Long Dim Obj As ControlPublic Sub ResizeInit(form1 As Form) On Error Resume Next formoldWidth = form1.ScaleWidth formoldHeight = form1.ScaleHeight For Each obj In form1 obj.Tag = obj.Left & "" & obj.Top & "" & obj.Width & "" & obj.Height & "" Next obj
End Sub
Public Sub Resizeform(form1 As Form) Dim Pos(4) As Double Dim F As Long, TempPos As Long, StartPos As Long Dim ScaleX As Double, ScaleY As Double On Error Resume Next ScaleX = form1.ScaleWidth / formoldWidth ScaleY = form1.ScaleHeight / formoldHeight For Each obj In form1 StartPos = 1 For F = 0 To 4 TempPos = InStr(StartPos, obj.Tag, "", vbTextCompare) If TempPos > 0 Then Pos(F) = Mid(obj.Tag, StartPos, TempPos - StartPos) StartPos = TempPos + 1 Else Pos(F) = 0 End If obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY Next F Next obj On Error GoTo 0 End SubPrivate Sub Form_Resize() Call Resizeform(Me) End Sub 调试的时候也是错的。
redraw中有对所画图形初始坐标的计算。 Public Sub redraw() Pic1.ScaleMode = 0 Pic1.ScaleMode = 3 Pic1.Scale (-1, 10)-(40, -10) Pic1.DrawWidth = 1 Pic1.Line (0, 9.5)-(0, -9.5), vbBlue X = 0 D = (14 + X) / 10 Pic1.Line (0, 9.5)-(0, -11.5), vbBlue Pic1.Line (0, 5)-(2, 5), &H996600 Pic1.Line (2, 5)-(0.5 * D + 2, 2), &H996600 For i = 0 To 9 Pic1.Line (D * i + 0.5 * D + 2, 3 * (-1) ^ (i + 1) + 5)-(D * i + 1.5 * D + 2, 3 * (-1) ^ i + 5), &H996600 Next i Pic1.Line (10.5 * D + 2, 2)-(11 * D + 2, 5), &H996600 ……………………
每个窗体和图片框都具有 AutoRedraw 属性。AutoRedraw 是 Boolean 属性,当它设置为 True 时,会把图形输出保存在内存里。可用 AutoRedraw 属性创建持久的图形。持久的图形
Microsoft Windows 操纵屏幕图象,来造成重叠窗口的影像。当一个窗口移到其它窗口上时,可暂时隐藏其它窗口,移过后,被覆盖的窗口和它的内容需要重新显示。Windows 管理和控制窗口与控件的重新显示。而用户的 Visual Basic 应用程序必须控制窗体和图片框内图形的重新显示。如果在窗体上用图形方法创建图形,通常希望它们重新显示在以前的位置 (persistent graphics),可用 AutoRedraw 属性创建持久的图形
……
End SubPrivate Sub Form_Load()
Me.Show
…… C = 0.005
Call redraw
End Sub '初始化
Private Sub Com3_Click()
Tim.Enabled = False
End Sub
Private Sub Com2_Click()
Pic1.Cls
Pic2.Cls
Pic3.Cls
Pic4.Cls
T = 0
Tim.Enabled = False
Call redraw
End Sub '坐标线Private Sub Com1_Click()
Tim.Enabled = True
Call redraw
……
End SubPrivate Sub HScroll1_Change()
C = HScroll1.Value / 1000
End SubPrivate Sub Tim_Timer() 'C = 0.005
……
End Sub
Private Sub Com4_Click()
Unload Me
End Sub
Private Sub TA_Change()
Tim.Enabled = False
T = 0
End SubPrivate Sub TAlf_Change()
Tim.Enabled = False
T = 0
End Sub
Private Sub TGam_GotFocus()
Tb = True
Tim.Enabled = False
End Sub
Private Sub Tk_GotFocus()
Tim.Enabled = False
End Sub
Private Sub Tm_GotFocus()
Tim.Enabled = False
End Sub
Private Sub TOmg_GotFocus()
Tim.Enabled = False
End Sub大致用到这么多东西,源程序太罗嗦了,不好意思给大家看,呵呵。
public formoldWidth As Long
public formoldHeight As Long
Dim Obj As ControlPublic Sub ResizeInit(form1 As Form)
On Error Resume Next
formoldWidth = form1.ScaleWidth
formoldHeight = form1.ScaleHeight
For Each obj In form1
obj.Tag = obj.Left & "" & obj.Top & "" & obj.Width & "" & obj.Height & ""
Next obj
End Sub
Public Sub Resizeform(form1 As Form)
Dim Pos(4) As Double
Dim F As Long, TempPos As Long, StartPos As Long
Dim ScaleX As Double, ScaleY As Double
On Error Resume Next
ScaleX = form1.ScaleWidth / formoldWidth
ScaleY = form1.ScaleHeight / formoldHeight
For Each obj In form1
StartPos = 1
For F = 0 To 4
TempPos = InStr(StartPos, obj.Tag, "", vbTextCompare)
If TempPos > 0 Then
Pos(F) = Mid(obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(F) = 0
End If
obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
Next F
Next obj
On Error GoTo 0
End SubPrivate Sub Form_Resize()
Call Resizeform(Me)
End Sub
调试的时候也是错的。
Public Sub redraw()
Pic1.ScaleMode = 0
Pic1.ScaleMode = 3
Pic1.Scale (-1, 10)-(40, -10)
Pic1.DrawWidth = 1
Pic1.Line (0, 9.5)-(0, -9.5), vbBlue
X = 0
D = (14 + X) / 10
Pic1.Line (0, 9.5)-(0, -11.5), vbBlue
Pic1.Line (0, 5)-(2, 5), &H996600
Pic1.Line (2, 5)-(0.5 * D + 2, 2), &H996600
For i = 0 To 9
Pic1.Line (D * i + 0.5 * D + 2, 3 * (-1) ^ (i + 1) + 5)-(D * i + 1.5 * D + 2, 3 * (-1) ^ i + 5), &H996600
Next i
Pic1.Line (10.5 * D + 2, 2)-(11 * D + 2, 5), &H996600
……………………