Рефераты

Реферат: Програмирование на Visual Basic

Line Input #5, Filedata Filedatal = “” 1=1 Do While InStrfI, Filedata, “*”)

> 0

NPoz = InStr(I, Filedata, “*”) Filedatal = Filedatal + Mid$(Filedata, 1,

NPoz - I) NProbel = Val (Mid$ (Filedata, NPoz +1, 1);

Fiiedatal = Filedatal + String$(NProbel, “ I .= NPoz + 2 Loop

Filedatal = Filedatal + Mid$(Filedata, I) Write #6, Filedatal Loop

Close #5 Close ft6 End Sub

Private Sub Command3_Click() Dim Filedata As String Close #5

Text2.Text = “”

Open “Filel” For Input As ft5 Do While Not EOF(5)

Line Input #5, Filedata

Text2.Text = Text2.Text + Filedata :hr$ (13) + Chr$(10)

Loop End Sub

‘Private Sub Command4 Click() Dim Filedata As String Open “File2” For Input

As #6 Do While Not EOF(6) Line Input tt6, Filedata

Textl.Text = Textl.Text + Filedata + Chr$(13) ^ Chr$(10)

Loop Close #6 End Sub

Private Sub Command5_Click()

Kill “Filel”

Kill “File2”

End End Sub

Private Sub Text3_KeyPress(keyAscii As Integer) Dim Filedata As String If

keyAscii = 13 Then Filedata = Text3.Text

Write tt5, Filedata Text3.Text •= “”

Описание используемых стандартных (функции для обработки строк

Stiing$(niimbei, chaiactci) возвращает проку одинаковых символов (chaiaciei)

заданной длины (niimbel)

Mid$(stung, start|. length|) возвращает строку с заданным количеством

символов (length) из cirokh (stung), начиная с заданной позиции (start) el in

start больше количесгва символов в строке - возвращаечся прока нулевой длины

Если отсутствуег параметр length, то воз праща клея симво1ы от заданной

позиции до конца строки Если slung равно Null - возвращается Null

lnSti(|stait. |stiingl. stiing2) возвращает первую позицию, с которой одна

строка (stiing2) вхолиг в другую (stimgl), как подстрока Start —

арифмешческое выражение, значение которого задае! начальную позицию поиска в

slungi (если параметр stait не задан, ю поиск иде1 с первой позиции)

Возвращаемое значение' если stiingi имеет нулевую длину — О если string! равно

Null - Null если stiing2 имеет нулевую длину — start если stiing2 равно Null —

Null если string2 не найдено — О если start > длины stimgl — О

3.7.2. Файлы прямого доступа

Для получения доступа к файлу для операции ввода-вывода используется оператор

открыгия файла, синтаксис которого следующий

Open имя_фаша [For Random] [Access {Read] Write I Read

Write}]

[ Lock Read ] As [#] номер файла [Len =

длина записи}

где Foi Random, Access. Read, Wiite, Read Wiite, Shaied, Lock Read, Lock

Wiite, Lock Read Wiite, Len - ключевые слова.

For Random определяет прямои доступ и принимается по умолчанию

Access определяет допустимые операции с файлом (Read — чтение

фаипа (ввод). Write - вывод в файл. Read Write — допускается

ввод и вывод)

Shared, Lock Read, Lock Write, Lock Read Write определяют допустимые

операции над фаилом для друшх пользователей сеги (только для сетевых

приложении)

имя_фа1иа имя файла (символьная константа или переменная) или путь

Номер файла - целочисленное выражение, значение которого

должно лежать между 1 и 255 Другие операторы ввода-вывода используют номер

открытого файла

Len определяет длину записи в байтах (по умолчанию длина записи

устанавливается в 128 бант)

Длина записи определяется информацией, хранимой в файле, и

задается целочисленным выражением и должна быть меньше 32767 байт (см ниже) Все

записи одного файла прямого доступа имеют одинаковую длину (записи одного файла

последовательного доступа Moiyr иметь разные длины)

Несушес1вующии файл создается при выполнении оператора Open Примеры:

Open “TESTFILE” For Random As#l Len=Len (Cl ien CWame)

'открывается файл “TESTFILE” прямого 'доступа с номером 1, длина записи

'определяется с помощью встроенной 'функции Len (определение длины строки)

Open “MYFILE.TXT” For Random As #5 Len = 256

Для файлов прямого доступа можно открыть файл с другим номером, не закрывая файл

Файл прямого доступа закрывается оператором

Close #номер файла где номер фалла - указанный при открытии номер

Для ввода и вывода в файлах прямого доступа используются соответственно

операторы

Get #номер файла, [номер записи], имя_переменной

Put #номер файла, [номер записи], имя_переменной где Get, Put -

ключевые слова (Get — ввод. Put — вывод).

номер записи - арифметическое выражение, значение которого

должно лежать в диапазоне от 1 до 2247483647, и которое определяет номер

читаемой записи при вводе и номер записи, в которую выводится переменная

Если номер записи отсутствует, то ввод — вывод начинается со следующей от

текущеи записи (используемый номер в последнем из предыдущих операторов Get и

Put) Обратите внимание, что запятые должны присутствовать при отсутствии

номера записи (Get #4„FileBufTer)

Имя^переменной имя любой переменной, кроме имени

массива (отдельный элемент массива может быть) и имени объекта,

значение которой записывается в файл при выводе и значение которой считывается

из файла при вводе

Примеры

Put #3, 4, Massiv(5)'выводится значение 5-го 'элемента массива Massiv в

4-ю запись J-го файла.

Get #fileNum, I, RecVar 'ич 1-й -записи файла с 'номером liieNun’

считывается 'значение переменной RecVar.

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

Создадим форму с двумя командными кнопками и две процедуры обработки событии

“Click” для каждой кнопки По щелчку кнопки “Ввод” выводится окно для

последовательного ввода пяти символьных строк и их записи в фаил прямого

доступа (рис 3 26) По щелчку кнопки “Вывод” выводится окно для ввода номера

требуемои записи фаила и запись, соответствующая введенному номеру, выводится

в окне вывода (рис 3 27)

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

Private Sub Commandl_C-Lick ()

i^im PEREMLN Ач String * 15

Open “Prirrb^le” For Random As 5 Len - 15

For I - 1 ^r b PEREMEN = InputBox(“Введите запись” + Str(I))

Put #1-, T, PEPEMEN

Next r

Close ^ End Sub

Private Sub Commcind2 Click ()

Dim PEREMEN As String * 15

Open “Primflie” For Random As 5 Len = 15 К = InputBox(“Введите номер записи

для вывода”)

Get #5, К, PEREMEN

MsgBox Str(K) +' “-ая запись” + “ “ + PEREMEN

Close #5

Kill “PrimFile” End Sub

Еще одним преимуществом файлов прямого доступа является возможность

использования индексов записеи Если для реорганизации фаила последовательного

доступа (добавление, удаление, перестановка записей) необходимо сначала его

прочитать, затем реорганизовать данные, а потом переписать фаил на диск в

соответствии с новой реорганизациеи, то используя индекс, можно

реорганизовывать индекс без реорганизации самого фаила Это значительно

увеличивает скорость обработки больших объемов информации

Чтобы создать индекс, вначале создается массив целых чисел, в котором каждый

элемент содержит один (свой) номер записи фаила прямого доступа Этот массив

используется для определения номера записи, к которой нужно обратиться Такая

организация хранения записи файла называется индексированием записи. Записи

одного файла могут иметь несколько разных индексов для организации различных

алгоритмов работы с одним и тем же файлом.

Для массива индексов Index () оператор ввода для связанного с этим индексом

файла имеет вид

Get ftFiieNiim. Imlex(l), RecVar

Первоначально каждый элемент массива Index () содержит свой собственный номер:

Index (1) = 1

Index (2) = 2 “.', Index (3) = 3

Результат использования такого массива для доступа к записям файла идентичен

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

вторую и третью запись, вместо реальной перестановки записей достаточно

изменить значения индексов следующим образом:

Index (I) = 1

Index (2) = 3

Index (3) = 2

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

Добавим к предыдущей программе процедуру обработки события щелчка мыши по форме.

Private Sub Form_C]-ick ( )

Dim PEREMEN As String * 15, PEREMEN1 As String * 15 Static thelndex(l

To 5) As Integer Open “PrimFile” For Random As 5 Len = 15 For I = 1 To 5

thelndex(l) = I Next I

11 = Val(InputBox(“Введите номер 1-й записи для

перестановки”))

Get #5, thelndex(ll), PEREMEN

12 = InputBox(“Введите номер 2-й записи для перестановки”)

Get #5, thelndex(12), PEREMEN1 Print Str(thelndex(ll)) + “-ая запись “ + PEREMEN

Print Str(thelndex(12)) + “-ая запись “ + PEREMEN1 thelndex(ll) = 12

thelndex(12) = II Get #5, thelndex(ll), PEREMEN Get #5, thelndex(12), PEREMEN1

Print Str(Il) + “-ая запись “ + PEREMEN Print Str(I2) + “-ая запись “ +

PEREMEN1 Close #5

Kill “PrimFile” End Sub

В процедуре вводится массив thelndex для задания индексов записей

используемого файла. Первоначально значениям массива последовательно

присваиваются значения от 1 до 5 (индекс записи совпадает с ее реальным

номером’в файле). Далее вводятся значения двух номеров записей для их

перестановки, записи Private Sub Commandl_Click()

Nzapisi = 1

Nzapisil = 1

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

Text 1.Enabled = True

Text2.Enabled = True

Text3.Enabled = True

Text4.Enabled = True

Text7.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.Podrazdeienie 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

Text6.Enabled = True

Text5.Text = “”

Text6.Text = “”

Text5.SetFocus End Sub

Private Sub Command4_Clicki’ Dim Peremen As Primer

Dim Zaprosi As String * 20, Zapros2 As String * 20, Sum As Single

Dim Pri As Integer, Pr2 As Integer, Kol As integer, Rez As Single

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

Zaprosi = Text5.Text: Zapros2 = Text6.Text Do While Nzapisil <

Nzapisi Get #10, Nzapisil, Peremen If Peremen.Podrazdeienie - Zaprosi Then Pri

= 1 End If

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

If Peremen.Podrazdeienie = Zdprosi And Peremen.Doignost = Zapros2 Then

Kol -= Kol + 1: Sum = Sum + Val(Peremen.Zarplata): Rez = Sum /

Kol End If

Nzapisil = Nzapisil + 1 Loop If Pri < 0 Then

• • MsgBox “Такого подразделения нет” Text5.Text = “”: GoTo Finish6 End If If

Pr2 < 0 Then MsgBox “Такой должности нет”

Text6.Text = “”: GoTo Finish6 End If

Text7.Text = Str$(Rez) Command5.Enabled =- True Finish6:

End Sub

Private Sub Cun-iniand5_Ciick ()

Cl?Qse„#10

Kill “TeS-tFile”

End End Sub

.Private Sub Form_Load() ' Commandl.Enabled = True Command2.Enabled - False

Command3.Enabled = False Command4.Enabled a False Хотя

можно указать запись длиной 1 байт, компьютер на самом деле прочитает в буфер

памяти один или более секторов. Когда программа читает данные из дискового

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

читает в этот буфер следующие несколько секторов из файла. Аналогично данные

записываются в дисковый файл: сначала они записываются в буфер памяти, а когда

он заполняется, то записываются на диск.

Предположим, что размер дискового сектора 512 байтов, а длина записи файла 260

байтов. При такой длине записи большинство записей файла будут

расположены в двух секторах (например, запись 2 использует байты с 261 по 512

первого сектора и с 1 по 8 байт второго сектора) и для чтения с диска такой

записи потребуется прочесть два сектора. Использование вместо 260-байтных

записей 256-байтных обеспечивает упаковку в один дисковый сектор двух полных

записей и позволяет для ввода одной записи читать только один сектор.

Таким образом, выбор длины записи определяется типом и длиной передаваемых

данных и размерами дисковых секторов. Возможно, что реальная длина

передаваемых данных будет меньше длины записи, указанной параметром 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Определяются пользователем
1twips (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, позволяющие рисовать линии

и прямоугольники, дуги и отдельные точки на экране. объект —

форма, окно рисунка (pictur box), объект печати, на

которых рисуется линия или прямоугольник; Line — ключевое слово;

Step — ключевое слово, обозначающее, что начальная или конечная

координата линии задана относительно текущей позиции, задаваемой свойствами

CurrentX и CurrentY (отсчитывается как смещение от текущей позиции);

xl, yl координаты начальной точки рисуемой линии или

прямоугольника (в используемой системе координат). Тип Single. Если отсутствует

координата начальной точки, то линия нчинается от текущей позиции;

х2, у2 — координаты конечной точки рисуемой линии (обязательные

параметры). Тип Single;

цвет — RGB-цвет линии (может использоваться функция RGB);

В определяет рисование прямоугольника по заданным координатам

противоположенных углов;

F используется только при заданном параметре В и определяет закрашивание

прямоугольника тем же цветом, что и линии сторон.

Синтаксис использования метода Circle (используется для рисования

окружностей, эллипсов, дуг и секторов) следующий:

[объект.]С1гс\е[81ер](х,у),радиус[, [цвет] [, [start] [,[end}[, aspect]]]}

где объект — форма, окно рисунка (pictiir box), объект печати, на которых

рисуется окружность, эллипс, дуга или сектор;

Circle — ключевое слово;

Step — ключевое слово, обозначающее, что центр окружности, эллипса, дуги

или сектора задан относительно текущей позиции, задаваемой свойствами CurrentX

и CurrentY (отсчитывается как смещение от текущей позиции);

х,у координаты центра (обязательные параметры). Тип Single;

радиус радиус (в используемой системе координат);

цвет — RGB-цвет линии (может использоваться функция RGB);

start, end используются при рисовании дуги и определяют в радианах

начальный и конечный углы дуги (диапазон — от -2 П до 2 П). По умолчанию start

равен 0, end — 2 П. Для перевода значений углов из градусов в радианы

используется формула ГРАДУ С*П/180.

aspect соотношение радиусов по осям Х и Y при рисовании эллипса.

Для рисования сектора задаются отрицательные значения параметров start

и end. При рисовании проводятся радиальные линии под углом,

заданными абсолютными значениями параметра.

Свойства FillColor и FillStyle (относятся к объекту) определяют

соответственно цвет заполнения прямоугольника, окружности, дуги или сектора и

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

[/or;n.][c<w”-o/.]FillColor[= цвет] где цвет — RGB

— цвет или QBColor — функция (возвращает значение RGB — цвета для 16

фиксированных цветов, см. Справочную систему Visual Basic). По умолчанию —

черный цвет.

Синтаксис применения свойства FillStyle:

FillStyle[ = style] где style

принимает следующие значения:

О — полное заполнение;

1 — прозрачное (по умолчанию);

2 — горизонтальные линии;

3 — вертикальные линии;

4 — диагональ (направленная вверх);

5 — диагональ (направленная вниз);

6 — крест на крест;

7- крест на крест по диагонали.

Синтаксис использования метода Pset для высвечивания какой-либо точки

определенным цветом следующий

[объект.] PSet[Step](^,^)[,uBeT]

где объект форма, окно рисунка (pictur box), объект

печати, на которых рисуется точка;

Pset — ключевое слово;

Step — ключевое слово, обозначающее, что координаты точки заданы

относительно текущей позиции, задаваемой свойствами CurrentX и CurrentY

(отсчитывается как смещение от текущей позиции);

х, у — координаты точки (обязательные параметры). Тип Single;

цвет — RGB-цвет или QBColor-функция (возвращает значение RGB-цвета для 16

фиксированных цветов, см. справочную систему Visual Basic). Если этот параметр

отсутствует, то Цвет определяется свойством ForeColor.

Толщина и вид рисуемых линий, а также размер и внешний вид точки определяется

значением свойств DrawWidth, DrawStyle и DrawMode. При значении DrawWidth =

1 (измеряется в пикселах) толщина линии и точки равна 1 пикселу. При увеличении

значения толшина увеличивается (координата точки определяет ее центр). Значения

свойства DrawStyle от 0 до б определяют, какой будет линия:

сплошной, пунктирной, точечной и др.

Свойство DrawMode может принимать одно из 16 значений которые определяют

характер взаимодействия вычерчиваемого изображения с уже имеющимся на экране.

Например, по умолчанию DrawMode равно 13 (Copy Pen) и означает, что новое

изображение закрывает собой существующее.

Метод Point возвращает цвет заданной точки. Синтаксис:

[объект.} Point (x,y)

Возвращает значение цвета в RGB-кодировке пиксела в заданных координатах х и у.

Рассмотрим примеры использования приведенных графических методов. Приводится

текст процедуры рисования объектов на форме. Нарисованные объекты показаны на

рис. 4.3.

Текст процедуры:

Private Sub Form_Pa-Lnt ( )

Scale (-10, 10)-(10, -10) 'установка масштаба

Line (-10, 0)-(10, 0) 'ось X

Line (0, -10)-(0, 10) 'ось Y

Line (-8.5, 9.2)-(9.01, -2.1) 'прямая линия Line (-5, 2)-(2, 1), , В 'не

закрашен, прямоугольник Line(-8.5,3.5)-(-5.5, -4),,F 'закрашен, прямоугольник

Circle (1, 2), 5 'окружность

Circle (-1, -5), 3, , , , 0.4 'эллипс

Circle (-7, -9.5), 4, , -0.7, -2.1 'малый сектор Circle (6, -6), 3.5, , -2.1,

-0.7 'большой сектор DrawWidth = 10 'изменение ширины линии 'или размера

точки

PSet (7, 6.5) 'точка

End Sub

Методы, осуществляющие вывод информации на форму, позволяют направлять ее

непосредственно на принтер. Принтер (объект Printer) рассматривается как

особая форма, размер которой -совпадает с размером печатаемой страницы. Метод

Scale применим и для объекта Printer и позволяет установить нужную систему

координат.

Рис 43 4.4. ПОСТРОЕНИЕ ГРАФИКОВ ФУНКЦИЙ

Использование пользовательской системы координат удобно при построении на

экране графиков функций. В этом случае нет необходимости переводить и

масштабировать значения аргументов и функций в единицы измерения координатных

осей. Достаточно задать систему координат соответственно значениям аргументов

и функций.

Для задания стандартной системы координат с точкой (0,0) в середине экрана

свойству ScaleTop присваивается некоторое Положительное значение, а свойству

ScaleHeight отрицательное значение, которые определяют диапазон значений шкалы

Y. На-“ример, ScaleTop = 50, ScaleHeight = -100, шкала Y имеет диапазон от

-50 до +50. Аналогично свойству ScaleLeft присваивается некоторое отрицательное

значение, а свойству ScaleWidth положительное значение. Зти значения определяют

диапазон значений шкалы X. Например, ScaleLeft = -20, ScaleWidth = 40, шкала \

имеет диапазон от -20 до +20 (рис. 4 4)

Построим график функции

у = -.25 * х л 3 + .14 * х л 2 + .25 * х - 25 на

отрезке значений аргумента [-10,+10]. Анализ показывает, что область значении

функции на этом отрезке: -270 < у < +270. Для вычисления значения функции

зададим функцию Primer_Function:

Function Primer_Function(ByVal х As Single) у = -0.25 * х •”• 3 + 0.14 * х -

2 + 0.25 * х - 25

Debug.Print у Primer_Function = у End Function

Рис 44

Алгоритм построения графика поместим в процедуру обработки события Form_Click:

Private Sub Form_Ciick()

Scale (-10, 270)-(10, -270) 'установка масштаба CIs 'очистка экрана

DrawWidth = 1 'установка толщины линии Line (-10ft, 0)-(10#, 0) 'ось Х Line (0,

-270ft)-(0, 270ft) 'ось Y CurrentX = -10# 'текущее значение Х CurrentY

= Primer_Function(-10ft)

'текущее значение Y • For х = -10ft То 10ft Step 0.5

Line -(х,Primer_Function(х))'построение отрезков

‘графика Next End Sub

Построенный график показан на рис. 4.5. Процедуру Sub Foim_Click () можно

преобразовать для печати графика на принтере'

Private Sub Form_Click()

Printer.Scale (-10, 270)-(10, -270) 'установка

'масштаба DrawWidth = 1 'установка толщины линии Printer.Line (-10<t,

0)-(10#, 0)'ось X Printer.Line (0, -270ft)-(0, 270ft) 'ось Y CurrentX = -10ft

'текущее значение X CurrentY = Primer_Function(-10ft) 'текущее

‘значение У

For x = -10ft To 10ft Step 0.5 Printer.Line -(x, Primer_Function(x))

'построение отрезков графика Next Printer.EndDoc End Sub

Кроме того, выведя графическую информацию на форму, можно использовать метод

PlintFoirn для распечатки растровой копии формы на принтере.

Рис 45

4.5. АНИМАЦИЯ ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ

Если в последовательные моменты и изменять координаты графических объектов на

экране, то объекты будут “перемешаться” по экрану. Для инициирования

некоторых событий (в случае анимации изображений в моменты свершения этих

событий необходимо изменять координаты графических объектов) через регулярные

промежутки времени используется инструмент Таймер (timer). Таймер

программируют присвоением определенных значений свойству Interval, которое

задает периодичность возникновения событий, связанных с таймером.

Значение свойства Interval задается в миллисекундах (мс) и может принимать

значение О...65535 и теоретически способно заставить систему генерировать

события со скоростью от 1000 раз

секунду до 1 раза в минуту. Интервал, равный 0 (по умолчанию), отключает

таймер. Для того, чтобы события возникали п раз, задаваемое значение свойства

Interval можно пассчитывать приблизительно по формуле 1000/п (событие

генерируется 2 раза при значении свойства Interval равном 500). Однако

необходимо учитывать, что технически для компьютера имеется порог

чувствительности разрешения таймера (примерно 18 событий в секунду или 56

мс).

В качестве примера рассмотрим перемещение окружности по форме из нижнего

левого угла в правый верхний. Это обеспечивается размещением на форме

инструмента таймер, заданием значения свойства Interval отличного от 0 (при

выполнении приложения таймер не виден на форме) и следующей программой,

включающей описание переменной в разделе general формы, задание начального

значения этой переменной в процедуре обработки события Forml_Load и процедуру

Timerl_Timer :

Option Explicit Dim I As Integer

Private Sub Form_Load()

1=1 End Sub

Private Sub Timerl_Timer() Dim Dx, Dy As Single Beep 'подача звукового сигнала '

Dx = 5 'смещение по оси Х Dy •= 5 'смещение по оси Y Scale (0,

100)-(100, 0) 'оси координат

'(0,0)-в нижнем левом углу Circle (5 + Dx * (1-1), 5 + Dy * (1-1)), 5

'окружность

I =• I + 1 'переход к следующей точке End Sub

После запуска приложения на форме последовательно рисуются окружности (рис.

4.6).

По такому же принципу можно строить более сложную анимацию (например,

движение предметов на экране). В отличии от приведенной картинки движущейся

окружности, при движе-чии предметов в каждый момент должно показываться

только текущее положение предмета. В каждом конкретном случае это может

достигаться комбинацией использования свойств FillColor, FillStyle и

DrawMode. В частности, при значении свойства DrawMode, равном 6 (Invert),

проведенная еще раз линия или другая фигура через те же координаты рисуется

цветом инверсным к первой линии (если первая черная, то вторая белая т.е. при

белом фоне экрана исходная линии исчезнет).

Подробно о значениях свойств и их действии при рисовании можно узнать из

справочной системы Visual Basic.

Приведем пример программы, обеспечивающей показ движения парохода по бурному

морю. Вид движущегося парохода показан на рис. 4.7.

Рис 4 6

В заключение следует отметить разницу в использовании графических элементов

управления (Line, Shape), которые используются для улучшения внешнего вида

экранных форм, и графических методов. С помощью графических методов

графические объекты рисуются на этапе выполнения приложения, а графические

элементы управления размещаются на этапе проектирования. Однако, если

графические методы используются с

1елью улучшения внешнего вида форм, то они используют мень-пе системных

ресурсов, поскольку приложение не хранит описание графических элементов

управления. Вместе с тем, результат использования графических элементов

управления виден уже на этапе проектирования. Глава 5. ИСПОЛЬЗОВАНИЕ БАЗ

ДАННЫХ

5.1. МЕХАНИЗМЫ РАБОТЫ С БАЗАМИ ДАННЫХ В VISUAL BASIC

Параллельно с развитием ЭВМ и их широким внедрением во все сферы деятельности

увеличивались объемы и усложнялась структура обрабатываемой информации. Для

решения проблемы структуризации, хранения и обработки больших объемов

информации разработаны системы управления базами данных (СУБД) (database

management system — DBMS). Примерами таких систем для персональных

компьютеров являются Microsoft Access, Microsoft FoxPro, Borland Paradox,

Borland dBase. Универсальной и очень развитой системой для различных платформ

является СУБД Oracle, для больших компьютеров широко используется СУБД DB2

фирмы IBM и др.

Visual Basic использует механизм баз данных Jet фирмы Microsoft для

подключения баз данных и доступа к информации, хранящейся в них. Механизм Jet

является тем же самым механизмом базы данных, что используется в системе

Microsoft Access. Механизм Jet позволяет работать с данными, хранящимися в

собственных базах данных Jet (файлы с расширением .MDB), а также с базами

данных из других систем, таких как dBase, FoxPro, Paia-dox, BTtrieve, SQL-

server.

Доступ к данным из Visual Basic выполняется посредством использования объекта

управления данными и связанных с данными объектов управления или объектов

доступа к данным. Механизм Jet, объект управления Data (Данные) и связанные

объекты управления позволяют легко обрабатывать ввод и вывод элементов

данных. Кроме того, имеется два дополнения: Data Manager (Управление данными)

и Form Designer (Разработчик данных), которые упрощают построение баз данных

и создание форм для доступа к данным.

Типы данных, поддерживаемые механизмом Jet, во многом совпадают с типам

данных Visual Basic и приведены в табл. 5.1.

При работе с большими объемами информации необходимо, по возможности,

гарантировать правильность (корректность) информации в базе данных

(прикладная информация, организованная на основе используемой СУБД). Эта

корректность может обеспечиваться написанным программным приложением,

средствами СУБД или и тем и другим. Механизм Jet поддерживает два

типа целостности данных (целостность первичного ключа и ссылочную целостность

отношений) и две формы правильности данных (правильность на уровне поля и

правильность на уровне записи). Эти функции можно реализовать на этапе

создания базы данных и они далее поддерживаются и используются при обращениях

к базе данных.

Таблица 5.1

Тип данногоИнформацияДиапазон значении
TextСтроки символов255 символов
MemoДлинные строки символовДо 1,2 Гбайт
ByteЦелыеОт 0 до 255
IntegerЦелыеОт -32768 до 327670
LongЦелыеОт -2147483648 до 2147483647
CounterДлинные целые с приращением
SingleВещественныеОт-3,4*10-38 до 3.4* 10”38
DoubleВещественныеОт -1,8*10”308 до 1.8*10”308
Yes/NoЛогическая
DateЗначение д>пъ1
BinaryДвоичныеДо 1,2 Гбайт
OLEOLE — объектыДо 1.2 Гбайт

Кроме механизма Jet можно также использовать драйверы связи открытых баз

данных (ODBC — Open Database Connectivity) для доступа к другим базам данных.

Существуют также разнообразные механизмы баз данных других фирм, которые

Страницы: 1, 2, 3, 4, 5, 6, 7, 8


© 2010 Собрание рефератов