Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zapiska (1)k.docx
Скачиваний:
0
Добавлен:
15.05.2020
Размер:
2.19 Mб
Скачать
    1. Разработка пользовательского интерфейса

Рисунок 3 – Пользовательская форма

Userform – пользовательская форма, которая предназначена для отображения основных элементов управления.

Label1 – надпись, которая предназначена для отображения текста «Длина кривошипа».

Label2 – надпись, которая предназначена для отображения текста «Начальный угол».

TextBox1 – текстовое поле, которое предназначено для ввода длины кривошипа.

TextBox2 – текстовое поле, которое предназначено для ввода начального угла.

TextBox3 – текстовое поле, которое предназначено для вывода длины шатуна .

TextBox4 – текстовое поле, которое предназначено для вывода межосевого расстояния .

TextBox5 – текстовое поле, которое предназначено для вывода длины кулисы X1.

TextBox6 – текстовое поле, которое предназначено для вывода расстояния до точки O2 LO1O2.

TextBox7 – текстовое поле, которое предназначено для вывода кулисы X2.

TextBox8 – текстовое поле, которое предназначено для вывода расстояния LAC.

Compare – кнопка, предназначенная для расчета длин , ,, X1, X2 LO1O2 и вывода их в текстовые поля.

Run – кнопка, которая предназначена для отображения анимации механизма на рабочем листе.

Cancel – кнопка выхода из формы.

Clear – кнопка, которая предназначена для очистки пользовательской формы.

BuildDiagram – кнопка, которая предназначена для рисования графиков скорости, перемещения и ускорения.

Image1 – элемент управления, который предназначен для отображения изображения графика перемещения.

Image2 – элемент управления, который предназначен для отображения изображения графика скорости.

Image3 – элемент управления, который предназначен для отображения изображения графика ускорения.

3 Реализация программного модуля

    1. Код программы

Const Pi = 3.14159265358979

Dim xo1, yo1, xo2, yo2, xA, yA, xB, yB, xC, yC, xD, yD As Double

Dim x1, x2, O1A, O2B, AB, CD, O1O2, AC, value As Double

Private Sub CommandButton2_Click()

kovalev2.Hide

End Sub

Private Sub UserForm_Initialize()

Image1.PictureAlignment = fmPictureAlignmentTopLeft

Image1.PictureSizeMode = fmPictureSizeModeStretch

Image2.PictureAlignment = fmPictureAlignmentTopLeft

Image2.PictureSizeMode = fmPictureSizeModeStretch

Image3.PictureAlignment = fmPictureAlignmentTopLeft

Image3.PictureSizeMode = fmPictureSizeModeStretch

Frame.Visible = False

End Sub

Private Sub CommandButton3_Click()

If Not IsNumeric(LO1A.Text) Then

MsgBox "Длина кривошипа должна быть числом, vbOKOnly, "Повторите ввод..."

TextBox1 = ""

TextBox1.SetFocus

Exit Sub

End If

If LO1A <= 0 Then

MsgBox "Длина кривошипа должна быть больше 0", vbOKOnly, "Повторите ввод..."

TextBox1 = ""

TextBox1.SetFocus

Exit Sub

End If

If Not IsNumeric(fi1.Text) Then

MsgBox "Значение угла должно быть числом", vbOKOnly, "Повторите ввод..."

TextBox2 = ""

TextBox2.SetFocus

Exit Sub

End If

O1A = CInt(LO1A.Text)

f1 = CInt(fi1.Text) * Pi / 180 + Pi / 2

xo1 = 300: yo1 = 300

AB = O1A: O2B = O1A: x1 = 1.5 * O1A: x2 = O1A: O1O2 = O1A: AC = 1.5 * O1A

For fi = 0 + f1 To f1 + 2 * Pi Step Pi / 60

xA = xo1 - O1A * Cos(fi)

yA = yo1 - O1A * Sin(fi)

xo2 = xo1 + x2

yo2 = y01 + 300

xB = xA + x2

yB = yA

xC = xA - AC

yC = yA

xD = xo1 - 1.5 * O1A - O1A

yD = yA - x1

yd2 = yA + x1

ActiveSheet.Shapes.AddShape(msoShapeIsoscelesTriangle, xo1 - 5, yo1, 10, 10).Line.ForeColor.RGB = RGB(0, 0, 0)

ActiveSheet.Shapes.AddShape(msoShapeIsoscelesTriangle, xo2 - 5, yo2, 10, 10).Line.ForeColor.RGB = RGB(0, 0, 0)

ActiveSheet.Shapes.AddShape(msoShapeRectangle, xC - 10, yC - 5, 20, 10).Line.ForeColor.RGB = RGB(0, 0, 0)

ActiveSheet.Shapes.AddLine(xo1, yo1, xA, yA).Line.ForeColor.RGB = RGB(0, 0, 250)

ActiveSheet.Shapes.AddLine(xA, yA, xB, yB).Line.ForeColor.RGB = RGB(0, 0, 250)

ActiveSheet.Shapes.AddLine(xB, yB, xo2, yo2).Line.ForeColor.RGB = RGB(0, 0, 250)

ActiveSheet.Shapes.AddLine(xA, yA, xC, yC).Line.ForeColor.RGB = RGB(0, 0, 250)

ActiveSheet.Shapes.AddLine(xo1, yo1, xo2, yo2).Line.ForeColor.RGB = RGB(0, 0, 250)

ActiveSheet.Shapes.AddLine(xD, yD, xD, yd2).Line.ForeColor.RGB = RGB(0, 0, 250)

ActiveSheet.Shapes.AddLine(xD, yC, xD + 1.5 * x1, yC).Line.ForeColor.RGB = RGB(0, 0, 250)

ActiveSheet.Shapes.AddShape(msoShapeOval, xA - 3, yA - 3, 6, 6).Line.ForeColor.RGB = RGB(0, 0, 0)

ActiveSheet.Shapes.AddShape(msoShapeOval, xB - 3, yB - 3, 6, 6).Line.ForeColor.RGB = RGB(0, 0, 0)

ActiveSheet.Shapes.AddShape(msoShapeOval, xC - 3, yC - 3, 6, 6).Line.ForeColor.RGB = RGB(0, 0, 0)

ActiveSheet.Shapes.AddShape(msoShapeOval, xo1 - 3, yo1 - 3, 6, 6).Line.ForeColor.RGB = RGB(0, 0, 0)

ActiveSheet.Shapes.AddShape(msoShapeOval, xo2 - 3, yo2 - 3, 6, 6).Line.ForeColor.RGB = RGB(0, 0, 0)

Clock 0.01

ActiveSheet.Shapes.SelectAll

Selection.Delete

Next fi

End Sub

Sub Clock(PauseTime)

Start = Timer

Do While Timer < Start + PauseTime

DoEvents

Loop

End Sub

Private Sub BuildDiagram_Click()

Dim fi As Double, L As Double

Dim input_text As Boolean

Dim iter As Integer

return_value = CheckInputData(LO1A.Text, fi1.Text, L, fi)

If (return_value = False) Then

MsgBox "ошибка исходных данных", vbCritical, "сообщение о ошибке"

Exit Sub

End If

angle = fi

For iter = 1 To 13

Call WriteDataOnList(angle, L, iter)

angle = angle + Pi / 6

Next iter

Call DrawGraphics

ActiveSheet.Shapes.SelectAll

Selection.Delete

End Sub

Function CheckInputData(ByVal L_text As String, ByVal fi1_text As String, _

ByRef L As Double, ByRef fi As Double)

If (IsNumeric(L_text)) Then

If (CDbl(L_text) > 0) Then

L = CDbl(L_text)

Else

CheackInputData = False

Exit Function

End If

Else

CheackInputData = False

Exit Function

End If

If (IsNumeric(f1_text)) Then

fi = CDbl(fi1_text) * Pi / 180

Else

CheackInputData = False

Exit Function

End If

CheckInputData = True

End Function

Sub WriteDataOnList(ByVal angle As Double, ByVal L As Double, ByVal iterator As Integer)

Worksheets(2).range("A" & iterator) = iterator - 1

Worksheets(2).range("B" & iterator) = Recompare(angle, L)

Worksheets(2).range("C" & iterator) = iterator - 1

Worksheets(2).range("D" & iterator) = (Recompare(angle + 0.000001, L) - Recompare(angle - 0.000001, L)) / 0.000001

Worksheets(2).range("E" & iterator) = iterator - 1

Worksheets(2).range("F" & iterator) = (Recompare(angle + 0.001, L) - 2 * Recompare(angle, L) + Recompare(angle - 0.001, L)) / 0.001 ^ 2

End Sub

Function Recompare(ByVal angle As Double, ByVal L_value As Double)

O1A = L_value

xo1 = 0: yo1 = 0

AB = O1A: O2B = O1A: x1 = 2.5 * O1A: x2 = O1A: O1O2 = O1A: AC = 1.5 * O1A

xA = O1A * Cos(angle) + 300

yA = O1A * Sin(angle) + 300

xo2 = xo1 + x2

yo2 = y01 + 300

xB = xA + x2

yB = yA

xC = xA - AC

yC = yA

xD = xo1 - 1.5 * O1A - O1A

yD = yA - x1

yd2 = yA + x1

Recompare = yD

End Function

Sub DrawGraphics()

Const count_cell = 13

Image1.Picture = LoadPicture(Diagram("A1:B" & count_cell, "Перемещение"))

Image2.Picture = LoadPicture(Diagram("C1:D" & count_cell, "Скорость"))

Image3.Picture = LoadPicture(Diagram("E1:F" & count_cell, "Ускорение"))

End Sub

Function Diagram(o, name)

cells_range = o

range(cells_range).Select

Charts.Add

ActiveChart.ChartType = xlXYScatterLinesNoMarkers

ActiveChart.SetSourceData Source:=Sheets("Ëèñò2").range(cells_range)

ActiveChart.Location Where:=xlLocationAsObject, name:="Лист2"

ActiveChart.SeriesCollection(1).Smooth = True

ActiveChart.Legend.Delete

ActiveChart.ChartWizard , , , , , , , Title:=name

ActiveChart.Export ActiveWorkbook.Path & "\ss.gif"

Worksheets(2).ChartObjects.Delete

Worksheets(2).range(cells_range) = ""

Worksheets(2).Cells(1, 1).Select

Diagram = ActiveWorkbook.Path & "\ss.gif"

End Function

Private Sub Compare_Click()

Dim fi As Double, L As Double

Dim input_text As Boolean

return_value = CheckInputData(LO1A.Text, fi1.Text, L, fi)

If (return_value = False) Then

MsgBox "Ошибка исходных данных", vbCritical, "Сообщение о ошибкке

Exit Sub

End If

Call Recompare(fi, L)

Text1 = "AB:" & AB

Text2 = "O2B:" & O2B

Text3 = "x1:" & x1

Text4 = "O1O2:" & O1O2

Text5 = "x2:" & x2

Text6 = "AC:" & AC

Frame.Visible = True

End Sub

Private Sub Clear_Click()

Cells.Clear

ActiveSheet.Shapes.SelectAll

Selection.Delete

Image1.Picture = LoadPicture("")

Image2.Picture = LoadPicture("")

Image3.Picture = LoadPicture("")

Text1.Text = ""

Text2.Text = ""

Text3.Text = ""

Text4.Text = ""

Text5.Text = ""

Text6.Text = ""

End Sub

Соседние файлы в предмете Информатика