Смекни!
smekni.com

Програмирование на Visual Basic (стр. 23 из 30)

Таким образом, выбор длины записи определяется типом и длиной передаваемых данных и размерами дисковых секторов. Возможно, что реальная длина передаваемых данных будет меньше длины записи, указанной параметром Len. Если длина читаемых данных меньше длины, указанной параметром Len, то место до границы следующей записи заполняется содержанием буферного файла. Это нежелательно и следует стремиться к согласованию реальной длины передаваемых данных с задаваемой длиной записи с учетом указанных выше замечаний.

Пример программы.

Записи файла прямого доступа содержат информацию о сотрудниках подразделения предприятия (структура записей файла:

фамилия, должность, подразделение, заработная плата).

Программа обеспечивает ввод исходной информации в файл и получение информации по запросу: средняя заработная плата для заданных должности и подразделения.

Форма имеет вид, показанный на рис. 3.30.

Текстовые окна “Фамилия”, “Должность”, “Подразделение”, “Зарплата” (имена соответственно Textl, Text2, Text3, Text4) используются для ввода исходной информации и просмотра записей файла. Текстовые окна “Должность”, “Подразделение” (имена соответственно Text5, Text6) для ввода запроса. Текстовое окно “Результат” (имя Text?) используется для

Рис. з.зо

вывода результата и предупреждении о не заполнении необходимых текстовых окон. Коммандные кнопки “Начало/Ввод”, “Просмотр файла”, “Ввод запроса”, “Обработка запроса”. “Конец” (имена соответственно Command I, Command2, Command3, Command4, Command5) обеспечивают переход к функциональным алгоритмам. Оператор объявления пользовательского типа данных помещаются в модуль module l.bas. Работа программы иллюстрируется на рис. 3.31—3.33.

Текст процедуры обработки событий:

Type Primer

Familia As String * 20

Dolgnost As String * 20

Podrazdelenie As String * 20

Zarpiata As String * 10 End Type

Dim Nzapisi, Nzapisil As Integer Dim Peremen As Primer Private Sub Coirimandl_Cllck ()

Nzapisi = 1

Nzapibil 1

Open “TestFile” For Random Access Read Write As #10 Len = 70

Textl.Enabled - True

Text2.Enabled -= True

Text3.Enabled—True

Text 4.Enablea = True

Text?.Enabled - True

Textl.SetFocus

Commandl.Enabled -= False End Sub

Private Sub Command2_Click ( ) Dim Peremen As Primer Textl.Text = “” Text2.Text - “” Text3.Text - “” Text4.Text = “” If Nzapisil <” Nzapisi Then Get #10, Nzapisil, Peremen Textl.Text = Peremen.Familia Text2.Text =- Peremen.Dolgnost Text3.Text = Peremen.Podrazdeleni Text4.Text = Peremen.Zarplata End If

Nzapisil = Nzapisil + 1 End Sub

Private Sub Command3__Click()

Textl.Text = “”

Text2.Text = “”

Text3.Text =• “”

Text4.Text = “”

Text5-Enabled = True

Text 6.Enabled = True

Text5.Text = “”

TextG.Text = “”

Text5.SetFocus End Sub

Private Sub Conmand4_Clic1 Dim Peremen As Primer

Dim Zaprosi As baring - ^.u, ^аргоь^ as String * 20, Sum As Sinqie

Dim Pri As Integer, Pr2 As Integer, Koi As Integer, Rez As Single

Pri - -1: Pr2 - -1: Nzapisil = 1: Kol = 0: Sum - О

Zciprosi - Text’).Text: Zapros2 = Text6.Text Do While N^dpibil “•’zapisi ‘^rit #1’, Nzdpisil, Peremen If Peremen. Pcmra^aeienie - Z^prosi Th>.’n t’rl -= 1 End If

If Peremen.Dolgnost = Zapros2 Then Pr2 - 1 End If

If Peremen. Podrazdelenie - Zciprosi And Peremen.Dotqnosr Zdpros2 Then

Kol k’)i + 1 : Sun suit + Val ( E’fc r emen . Zdrplata ) : Rez - iiiim / Koi End If

N?apisil - ^Zcioisil + 1 Loop II: Pri < (• T^hen

MsqBox “Tai- ого псдразд&ления нет” Tex^J.rext - “”: GoTo l-mishb End If If Pr2 < 0 Then MsgBox “Такой допкно ••ти нет”

r^xtt.rex”- - “”: u^Tu Finishfa End I*

Text /.It >;r Str$ ;Re.i) i”^mmdndb . Fn,jbi( ci =- ‘I rue F i n i a n о :

End Sub

briV.itt S л1 ‘ .:l”LcU!f.t^ CLlCK(,

^1оъе #1-;

Kill “Tebtr.i-“ Enci bnd Suo

Private Suo ruriii L’^ad () Comricinal .Enabit ‘•i True Coi’mdnd2 . Er.JDied r.aisp Command i. EnaO-l ed - i-alse Command4 . Eriab i-ed - ‘: ^lae Commands.Enabled = False Textl.Enabled =- False Text2.Enabled = False Text3.Enabled = False Text4.Enabled = False Text5.Enabled = False Text6.Enabled = False Text7.Enabled = False End Sub

Private Sub Textl_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then

If Textl.Text = “” Then

Label7.Caption = “Предупреждение” Text7.Text = “Введите фамилию” Textl.SetFocus GoTo Finish End If

If Label7.Caption = “Предупреждение” Then Label7.Caption = “Результат” Text7.Text = “” End If Text2.SetFocus End If Finish:

End Sub

Private Sub Text2 Keypress(KeyAscii As Integer) If KeyAscii ^ 13 Then

If Text2.Text = “” Then

Label7.Caption = “Предупреждение” Text7.Text = “Введите должность” Text2.SetFocus GoTo Finishi End If

If Label7.Caption = “Предупреждение” Then Label7.Caption = “Результат” Text7.Text = “” End If

Text3.SetFocus End If Finishi:

End Sub

Private Sub Text3 Keypress(KeyAscii As Integer) If KeyAscii ~= 13 Then

If Text3.Text = “” Then

Label7.Caption = “Предупреждение” Text7.Text - “Введите подразделение Text3.SetFocus GoTo Finish2 End If

If Label7.Caption = “Предупреждение” Then Ldbei7.Caption = “Результат” Text 7.Text = “” End If Text4.SetFocus End If Finish2:

End Sub

Private Sub Text4_KeyPress(KeyAscii As Integer) Dim Peremen As Primer

If KeyAscii =. 1 3 Then

It Text 4.Text = “” Then

Labei7.Caption = “Предупреждение” Text7.Text = “Введите зарплату” Text4.SetFocus GoTo Finish3 End If

If Labei7.Caption = “Предупреждение” Then Label7.Caption = “Результат” Text7.Text = “” End If Finish3:

Peremen.Familia = Textl.Text Peremen.Dolgnost = Text2.Text Peremen.Podrazdelenie = Text3.Text Peremen.Zarplata = Text4.Text Put #10, Nzapisi, Peremen Nzapisi = Nzapisi + 1 Command2.Enabled = True Command3.Enabled = True

Рис 332

Глава 4. ПРОГРАММИРОВАНИЕ ГРАФИКИ 4.1 ГЕНЕРАЦИЯ ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ

Изображение на экране дисплея складывается из множества отдельных точек, которые называются пикселами (pixel — образуется аббревиатурой английских слов picture elements — элементы картинки) Изображение на экране является образом видеопамяти — специальный блок памяти, с которым работает видеоконтроллер Количество точек на экране и информация по каждой из точек определяют режим работы дисплея и требуемый объем видеопамяти. В монохромных дисплеях 1 пиксел требует 1 бит видеопамяти (бит содержит 1 — соответствующая ему точка экрана светится, бит содержит О—не светится) При разрешении экрана, например, 640*320 (очень плохое разрешение) требуется уже 640*320 = 204 800 бит видеопамяти (25 600 байт).

В цветных дисплеях каждый пиксел кодируется несколькими битами, определяющими цвет Любой цвет создается смешением красного, зеленого и синего цветов различной интенсивности В зависимости от видеоконтроллера на 1 пиксел требуется от 4 до 32 бит, определяющих возможность передачи оттенков цветов (например, 256 или более цветов), и объем видеопамяти достигает 4 Мбайт

Для задания цвета графических объектов в Visual Basic используется специальная функция RGB, название которой образовано по первым буквам английских слов Red (красный). Green (зеленый) и Blue (голубой) Функция использует три целочисленных параметра (аргумента), которые могут принимать значения от 0 до 255 Первый параметр определяет интенсивность красного цвета, второй — интенсивность зеленого, третий — интенсивность голубого При значении параметра 0 — соответствующий цвет полностью отсутствует, 255 — максимальная интенсивность

В табл. 4 1 приводятся значения параметров RGB-функции Для наиболее распространенных цветов.

Теоретически функция RGB позволяет работать с 16 млн. Цветов, но реально цветовая гамма определяется видеоплатой компьютера.

Рис 331

Text 1.Text = “”

Text2.Text = “”

Text3.Text = “”

Text4.Text = “” Textl.Setbocus End If End Sub

Private Sub Text5_KeyPress(KeyAscii As Integer) If KeyAscii - 13 Then

If TextS.Text = “” Then

Label7.Caption = “Предупреждение” Text7.Text - “Введите подразделение” Texi-S.SetFocus GoTo Finish4 End If

If Label7.Caption = “Предупреждение” Then Label7.Caption = “Результат” Тех!”7. Text = “” End If Text6.SetFocus t End If Finish4:

End Sub

Рис 332

Таблица 4 3
Значения свойства ScaleMode Единицы измерения
0 Определяются пользователем
1 twips (no умолчанию)
2 Пункты (0 035 см)
3 Пикселы (зависит от разрешения дисплея)
4 Символы (1/6 дюйма по вертикали и 1/12 дюйма по горизонтали)
5 Дюймы
6 Миллиметры
7 Сантиметры

Единицы измерения координат и размеров объектов на форме определяются значением свойства ScaleMode для формы В табл 4 3 приводятся значения свойства ScaleMode и соответствующие им единицы измерения.

При значении ScaleMode равном 0 можно задать собственную систему единиц Для этого также нужно настроить свойства ScaleHeight (шкала по Y) и ScaleWidth (шкала по X) Если, например, ScaleWidth приравнять 100 и ScaleHeight приравнять 200, то ширина формы будет равна 100 единицам, а высота 200 единицам Если для размещаемого после этого на форме текстового окна свойству Width присвоить значение 25, то оно будет занимать четверть ширины формы

Как было сказано, начало координат по умолчанию находится в верхнем левом углу. Это положение определяется значениями свойств ScaleLeft и ScaleTop, которые по умолчанию равны 0. Задавая другие значения, можно изменить положение начала координат

Например, при задании ScaleLeft = 5 и ScaleTop = — 6 начало координат смещается из (0,0) в (5, — 6). Координаты нижнего правого угла формы определяются как (ScaleLeft + ScaleWidth, ScaleTop + ScaleHeight) Если задать ScaleHeight = 18, ScaleWidth = 11, то координаты нижнего правого угла станут (16, 12) (рис 42)

Заданный масштаб формы можно изменять, варьируя значения указанных выше свойств, либо используя метод Scale

Синтаксис использования метода следующий'

[имя формы.} Scale [(координаты верхнего левого угла) — (координаты нижнего правого угла)}

Рис 42

По заданным координатам верхнего левого и нижнего правого угла вычисляются значения ScaleHeight и ScaleWidth. Применение метода Scale без параметров восстанавливает исходный масштаб окна формы и возвращает начало координат в верхний левый угол (0,0)

4.3. ГРАФИЧЕСКИЕ МЕТОДЫ

Для создания экранных изображений используются графические методы Line, Circle, Pset, позволяющие рисовать линии