Выдача результатов
Выдачу результатоврешения задачи можноосуществить:
1) В этикетки Label или в текстовые поля TextBox с помощью оператора присваивания. Например:
lblSumma.Caption = intSum
‘значение переменной целого типа intSum присваивается
‘этикетке lblSumma.
txtПроизведение.Text = sngПроизведение
‘значение переменной sngПроизведение типа Single
‘присваивается текстовому полю txtПроизведение
2) На форму или в графические поля с помощью оператора Print. Например:
frmMatr.CurrentX = 250
‘координата Х, определяющая на форме начало печати,
‘отсчет Х направо от левого края формы
frmMatr.CurrentY = 500
‘координата Y, определяющая на форме начало печати,
‘отсчет Y от верхнего края формы вниз
frmMatr.Print “Сумма положительных элементов равна “; intSum
‘на форме frmMatr будет выдан текст, заключенный в операторе
‘ в двойных кавычках (но на форме этих кавычек уже не будет!),
‘а за ним значение переменной intSum; при выдаче на текущую форму
‘название формы перед Print можно не приводить.
picGrafWin.Print “Сумма равна “; sngSumma
‘в графическое поле picGrafWin будут выданы: текст, который
‘заключен в двойных кавычках, и сумма sngSumma.
Иногда результаты расчетов требуется выдать в табличном виде. Приведем пример такой выдачи. Особенность этого примера состоит в том, что построенная с помощью графических объектов Line и этикеток Label шапка таблицы может быть перенесена в любое место формы, и данные все равно будут выдаваться в таблицу. Какого-либо изменения программы для этого не потребуется.
Форма с шапкой таблицы представлена на рис. 1.9.
Линии в шапке таблицы имеют такие имена: Line1 – верхняя горизонтальная линия, Line2 – нижняя горизонтальная, Line3 – левая вертикальная (указана на рис. 1.9), Line4 – вторая вертикальная после Line3, Line5 – правая крайняя вертикальная линия.
В процедуре, приведенной ниже, выдача текста и дальнейшее построение таблицы привязаны к свойствам X1 и Y2 линий шапки. Поэтому перемещение шапки не требует изменения программы для выдачи в нее результатов.
Процедура такой выдачи будет такой:
Private Sub cmdPrintTab_Click()
CurrentY = Line2.Y2 + TextHeight("4") / 2
str1 = CurrentY ‘ координата Y, определяющая
‘ начало выдачи 1-й строки в таблице
i = 0
msi = 1 'msi – для регулирования межстрочного интервала
' для примера рассчитывается Sinx от 0 до 3,14 радиан:
For x = 0 To 3.14 Step 0.157
i = i + 1 ‘ счетчик выданных строк
y = Sin(x)
CurrentY = str1 + msi * TextHeight("4") * (i - 1)
' число 700 подбирается один раз, чтобы выдать
' результаты в нужном месте столбца:
CurrentX = Line3.X1 + 700: Print FormatNumber(x, 2);
CurrentX = Line4.X1 + 700: Print FormatNumber(y, 2)
Next x
DrawWidth = 2: yk = CurrentY + TextHeight("4") / 2
Line3.Y2 = yk: Line4.Y2 = yk: Line5.Y2 = yk
' рисуется нижняя линия:
Line (Line3.X1, yk)-(Line5.X1, yk)
End Sub
В этой процедуре используется функция TextHeight() для определения координаты Y следующей строки выдачи. В качестве текста как аргумента можно задать хотя бы один и любой символ. Функция возвращает высоту строки с учетом заданного размера шрифта.
3) На принтер можно выдать:
§ форму со всеми текстами на ней и графикой с помощью метода формы PrintForm. При этом можно не выдавать управляющие элементы (например, командные кнопки), сделав их перед выдачей невидимыми. В процедуре, приведенной ниже, перед печатью формы Form2 кнопки cmdPrintForm и cmdPrinter делаются невидимыми, а после выдачи – видимыми:
Private Sub cmdPrintForm_Click()
cmdPrintForm.Visible = False
cmdPrinter.Visible = False
Form2.PrintForm
cmdPrintForm.Visible = True
cmdPrinter.Visible = True
End Sub
§ с помощью объекта Printerи методов Print, Line, Circle, Psetи PaintPicture. Используя их, копируем текст или графику, создаваемую этими методами, на объект Printer, а затем выдаем на печать с помощью метода EndDoc.
Если требуется выдача результатов на принтер, необходимо создать процедуру (не событийную), в которой будет содержаться решение задачи и выдача результатов, но перед всеми указанными выше методами привести наименование объектов. Эти объекты – формальные параметры процедуры. Приведем пример по разработки программы с выдачей результатов на форму и на принтер.
Private Sub cmdPrinter_Click()
ГрафП Form2, Printer
End Sub
Private Sub Form_Click()
ГрафП Form2, Form2
End Sub
Private Sub ГрафП (nForm As Object, Dest As Object)
Dim intR As Integer, intCX As Integer, intCY As Integer
intCX = 6050 ‘координата Х центра окружности
intCY = 4120 ‘координата Y центра окружности
intR = 3000 ‘радиус окружности
If Dest Is Printer Then
intCX = 6000
intCY = 8000
End If
Dest.CurrentX = 3000: Dest.CurrentY = 500 ‘координаты
‘начала выдачи текста на Form2 или на листе при печати
Dest.Print "Выдача текста и графики "
Dest.Circle (intCX, intCY), intR
If Not (Dest Is nForm) Then
Dest.PaintPicture nForm.Picture1, 250, 1500, 2280, 2280
End If
If Dest Is Printer Then Printer.EndDoc
End Sub
Форма Form2 после запуска программы и щелчка по форме кнопкой мыши имеет вид, изображенный на рис. 1.9.
Поясним программу. В процедуре ГрафП первый формальный параметр nForm – объект-источник (объект Form2), второй Dest – объект-адресат (объект Printer или другая форма). Если в программе не используются методы графики (PaintPicture, Line, Circle, Pset),то в процедуре первый формальный параметр будет отсутствовать.
В объект Picture1 рисунок вставлен заранее в процессе конструирования формы. Но на объект Printer этот трактор из формы надо перерисовать с помощью метода PaintPicture. Поэтому в процедуре есть проверка, в результате которой метод PaintPicture будет выполняться, если адресат картинки и источник картинки различны.
После этого для печати результатов достаточно обратиться к процедуре ГрафП с формальными параметрами Form2 и Printer (см. процедуру cmdPrinter_Click()), а для выполнения программы с выводом результатов на форму – обратиться к процедуре ГрафП с параметрами Form2 и Form2 (см. процедуру Form_Click()).
Если добавить новую форму Form3, из Form2 откроем ее и обратимся к процедуре ГрафП с параметрами Form2 и Form3, то на форме Form3 получим копию формы Form2 (но без кнопки).
Дата добавления: 2015-02-05; просмотров: 1030;