📄 ÷
字号:
dblDatMax(intI) = -100000
For intJ = 1 To intCol
If dblData(intI, intJ) < dblDatMin(intI) Then _
dblDatMin(intI) = dblData(intI, intJ)
If dblData(intI, intJ) > dblDatMax(intI) Then _
dblDatMax(intI) = dblData(intI, intJ)
Next intJ
If dblDatMax(intI) - dblDatMin(intI) <= 0.0001 Then
MsgBox "数据的极大值和极小值太接近,请检查数据或另编程序"
Unload Me
End
End If
Next intI
'变换数据值为坐标值
For intI = 1 To intRow
dblMaxMin = dblDatMax(intI) - dblDatMin(intI)
sngYInc = sngCH / dblMaxMin
For intJ = 1 To intCol
sngData(intI, intJ) = sngCH - sngYInc * _
(dblData(intI, intJ) - dblDatMin(intI))
Next intJ
Next intI
intS = 1 '写刻度标识
End Sub
'改变图形为原大的一半
Private Sub cmdLittle_Click()
intS1 = 34: intS2 = 24
Me.Scale (0, 0)-(intS1, intS2) '窗体的自定义坐标系
'为了给曲线腾出位置,将所有命令按钮下移
cmdDraw.Top = 20
cmdPrint.Top = 20
cmdExit.Top = 20
cmdLittle.Top = 20
lblTitle.Top = 20
cmdDraw.Visible = True
intS = 0 '不写刻度标识
Me.Cls
End Sub
'可以拖动图题
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Source.Move X, Y
End Sub
'窗体作图
Private Sub cmdDraw_Click()
On Error Resume Next
'绘曲线
For intI = 1 To intRow
Me.CurrentX = 0.1
Me.CurrentY = (intI - 1) * (sngCH + 0.5) + sngCH / 2 + 1.1
Me.Print strRowLabel(intI) '写行标
'PSet绘起始点,起始点的X坐标是 1.5
Me.PSet (1.5, sngData(intI, 1) + (intI - 1) * (sngCH + 0.5) + 1.5)
For intJ = 2 To intCol '绘曲线
Me.Line -(1.5 + sngXInc * (intJ - 1), _
sngData(intI, intJ) + (intI - 1) * (sngCH + 0.5) + 1.5)
Next intJ
Next intI
'绘横坐标轴
If intRow > 9 Then GoTo PP '超过9条曲线不绘X、Y轴
For intI = 1 To intRow
'PSet绘起始点,起始点的X坐标是 1.5
Me.PSet (1.5, intI * (sngCH + 0.5) + 1)
For intJ = 2 To intCol
'绘曲线
Me.Line -(1.5 + sngXInc * (intJ - 1), intI * (sngCH + 0.5) + 1)
'绘刻度线
Me.Line -(1.5 + sngXInc * (intJ - 1), intI * (sngCH + 0.5) + 1.1)
Me.Line -(1.5 + sngXInc * (intJ - 1), intI * (sngCH + 0.5) + 1)
Next intJ
Next intI
'在横坐标轴刻度上写列标
For intI = 1 To intRow
If intCol <= 40 Then
For intJ = 1 To intCol
Me.CurrentX = 1.5 + sngXInc * (intJ - 1)
Me.CurrentY = intI * (sngCH + 0.5) + 1.1
Me.Print strColLabel(intJ)
Next intJ
End If
Next intI
'绘纵坐标轴
For intI = 1 To intRow
Me.PSet (1.5, intI * (sngCH + 0.5) + 1)
Me.Line -(1.5, intI * (sngCH + 0.5) + 1 - sngCH)
Next intI
'在纵坐标轴上画刻度线及写刻度值
'sngCH是曲线的高度
For intI = 1 To intRow
dblMaxMin = dblDatMax(intI) - dblDatMin(intI)
For intJ = 1 To 4
'sngYScale为刻度的位置
sngYScale(intJ) = intI * (sngCH + 0.5) + 1 - sngCH / 4 * intJ
'intYScale为取整后的刻度值
intYScale(intJ) = dblDatMin(intI) + dblMaxMin / 4 * intJ
Next intJ
'在纵坐标轴上画刻度线及写刻度值
For intJ = 1 To 4
Me.PSet (1.5, sngYScale(intJ))
Me.Line -(1.4, sngYScale(intJ))
'只有极差是4的整数倍才都写刻度值,这样作是为了确保刻度是整数
If intS = 0 Then GoTo SS '“1/2”的情况下,不再写纵轴刻度
If (dblMaxMin \ 4) * 4 = dblMaxMin Then
Me.CurrentX = 0.8
Me.CurrentY = sngYScale(intJ) - 0.1
Me.Print intYScale(intJ)
'如果极差是2的整数倍,只写第2条和第4条刻度的刻度值
ElseIf (intJ = 2 Or intJ = 4) And _
(dblMaxMin \ 2) * 2 = dblMaxMin Then
Me.CurrentX = 0.8
Me.CurrentY = sngYScale(intJ) - 0.1
Me.Print intYScale(intJ)
End If
SS:
Next intJ
Next intI
PP:
cmdPrint.Visible = True
End Sub
'打印机作图
Private Sub cmdPrint_Click()
'绘曲线
Dim DY As Single
On Error Resume Next
Printer.Scale (0, 0)-(intS1, intS2) '打印机的自定义坐标系
DY = 1 '如果曲线位置不好,可以修改源程序,调整DY值
For intI = 1 To intRow
Printer.CurrentX = 0.1
Printer.CurrentY = (intI - 1) * (sngCH + 0.5) + sngCH / 2 + 1.1 - DY
Printer.Print strRowLabel(intI) '写行标(某条曲线名称)
'PSet绘起始点,起始点的X坐标是 1.5
Printer.PSet (1.5, sngData(intI, 1) + (intI - 1) * (sngCH + 0.5) + 1.5 - DY)
For intJ = 2 To intCol '绘曲线
Printer.Line -(1.5 + sngXInc * (intJ - 1), _
sngData(intI, intJ) + (intI - 1) * (sngCH + 0.5) + 1.5 - DY)
Next intJ
Next intI
'绘横坐标轴
If intRow > 9 Then GoTo PP '超过9条曲线不绘X、Y轴
For intI = 1 To intRow
'PSet绘起始点,起始点的X坐标是 1.5
Printer.PSet (1.5, intI * (sngCH + 0.5) + 1 - DY)
For intJ = 2 To intCol
'绘曲线
Printer.Line -(1.5 + sngXInc * (intJ - 1), intI * (sngCH + 0.5) + 1 - DY)
'绘刻度线
Printer.Line -(1.5 + sngXInc * (intJ - 1), intI * (sngCH + 0.5) + 1.1 - DY)
Printer.Line -(1.5 + sngXInc * (intJ - 1), intI * (sngCH + 0.5) + 1 - DY)
Next intJ
Next intI
'在横坐标轴刻度上写列标
For intI = 1 To intRow
If intCol <= 40 Then
For intJ = 1 To intCol
Printer.CurrentX = 1.5 + sngXInc * (intJ - 1)
Printer.CurrentY = intI * (sngCH + 0.5) + 1.1 - DY
Printer.Print strColLabel(intJ)
Next intJ
End If
Next intI
'绘纵坐标轴
For intI = 1 To intRow
Printer.PSet (1.5, intI * (sngCH + 0.5) + 1 - DY)
Printer.Line -(1.5, intI * (sngCH + 0.5) + 1 - sngCH - DY)
Next intI
'在纵坐标轴上画刻度线及写刻度值
'sngCH是曲线的高度
For intI = 1 To intRow
dblMaxMin = dblDatMax(intI) - dblDatMin(intI)
For intJ = 1 To 4
'sngYScale为刻度的位置
sngYScale(intJ) = intI * (sngCH + 0.5) + 1 - sngCH / 4 * intJ
'intYScale为取整后的刻度值
intYScale(intJ) = dblDatMin(intI) + dblMaxMin / 4 * intJ
Next intJ
'在纵坐标轴上画刻度线及写刻度值
For intJ = 1 To 4
Printer.PSet (1.5, sngYScale(intJ) - DY)
Printer.Line -(1.4, sngYScale(intJ) - DY)
'只有极差是4的整数倍才都写刻度值,这样作是为了确保刻度是整数
If intS = 0 Then GoTo SS '缩小图形时不写纵轴刻度
If (dblMaxMin \ 4) * 4 = dblMaxMin Then
Printer.CurrentX = 0.8
Printer.CurrentY = sngYScale(intJ) - DY - 0.1
Printer.Print intYScale(intJ)
'如果极差是2的整数倍,只写第2条和第4条刻度的刻度值
ElseIf (intJ = 2 Or intJ = 4) And _
(dblMaxMin \ 2) * 2 = dblMaxMin Then
Printer.CurrentX = 0.8
Printer.CurrentY = sngYScale(intJ) - DY - 0.1
Printer.Print intYScale(intJ)
End If
SS:
Next intJ
Next intI
PP:
Printer.EndDoc
End Sub
'退出
Private Sub cmdExit_Click()
Unload Me
frmFileName.Visible = True
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -