Главная страница
Навигация по странице:

  • 7.2 Добавление и удаление элементов в управляющем массиве

  • Private Sub Form Load () Dim I As Integer For I=2 To 5 Load Txt(x) Txt (I). Text="Text box"+Str $(I) Next I

  • 7.11 Файл прямого доступа.

  • 7.12 Связь с приложениями Windows, Буфер папки обмена Clipboard.

  • 7.13 Формат буфера папки обмена и перенос графических фрагментов

  • 7.14 Выделение текста в VB .

  • SetText .

  • Лекции по АТП. В состав бпо входят


    Скачать 419 Kb.
    НазваниеВ состав бпо входят
    Дата28.02.2018
    Размер419 Kb.
    Формат файлаdoc
    Имя файлаЛекции по АТП.doc
    ТипДокументы
    #37413
    страница5 из 6
    1   2   3   4   5   6

    Private Sub Text. Change (Index As Integer)

    If Index = 0 Then

    MsgBox (*You typed in text box 0”)

    Else

    MsgBox (*You typed in text box 1”)

    End If

    End Sub

    Сейчас при попытке ввести что-то в окно из этих полей VB вызовет данную процедуру и передаёт в неё индексный параметр. В этом случае процедура может использовать индекс, для того чтобы определить что делать?

    Когда что-то вводится в поле с индексом равное "0", то VB активирует 1-ю часть конструкции If и образует диалоговую панель, сообщающую место, куда происходит ввод, иначе выполнится ветвь Else.

    7.2 Добавление и удаление элементов в управляющем массиве

    Если создан управляющий массив, то можно в процессе выполнения приложения добавить в него новые элементы, чтобы это сделать необходимо, использовать разновидность команды Load.

    Пример: предположим, что необходимо добавить 4 новых поля ввода к управляющему массиву, для этого необходимо в процедуру загрузки формы Load добавить следующий код:

    Private Sub Form Load ()

    Dim I As Integer

    For I=2 To 5

    Load Txt(x)

    Txt (I). Text="Text box"+Str $(I)

    Next I
    Всякий раз, когда VB загружает новый элемент в управляющий массив, этот объект невидим, т.к. свойство Visible установлено False, все остальные свойства копируются из первого объекта массива
    7.3 Список: одномерный массив.

    В VB список - есть только коллекция переменных, каждая из которых идентифицируется 2 элементами:

    1. Имя в списке

    2. Положение в списке.

    НАПРИМЕР: предположим, что создается программа, которая позволит пользователю вводить «список поручений» с начала каждого дня. Здесь следует использовать информацию, сохраняемую в списке. Третье получение должно быть сохранено как Errend $ (3). Число в скобках обычно называется Subscript, указатель или, чаще всего, индекс.

    Списки в VB не могут быть бесконечными. Существуют 2 типа списков:

    1. Фиксированные списки, размер которых никогда не изменяется

    2. Динамические списки, которые могут изменять размер.

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

    Оба типа списка могут быть видимыми всему приложению, указанной форме или модулю, или только внутри одной процедуры.

    Синтаксис создания фиксированного списка:

    Dim A $ (13) или Dim A (13) As String Эта операция создает список из 14 элементов.

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

    Dim A () As String

    После этого можно использовать оператор Re Dim, внутри процедуры, для выделения необходимого размера.

    Private Sub Name of ()

    Dim Number As Integer

    Re Dim A (Number) As String

    ..

    ..

    ..

    END SUB.

    Каждый раз, когда VB выполняет команду Re Dim, информация в массиве теряется. В приведенном примере значение переменной Number может меняться в зависимости от обстоятельств.

    Так же используя вариации Re Dim можно увеличивать или уменьшать размер динамического списка, когда информация уже сохранена в списке. НАПРИМЕР: предположим, что текущий максимальный индекс для А храниться в переменной Old size; тогда команда Re Dim Preserve A (Old size+1) As string может быть помещена в процедуру для увеличения числа элементов массива А () на 1. При этом вся текущая информация останется не тронутой.

    Для создания глобальных списков необходимо перед именем массива разместить зарезервированные слова Public или Global.

    НАПРИМЕР: Public A (13) As string для фиксированного и

    Global A () As string для динамического массива.

    Можно создать локальный массив, все переменные которого будут сохраняться до следующего вызова процедуры. Используя ключевое слово Static:

    Private Sub Name of ()

    Static A (B) As string

    ..

    ..

    ..

    END SUB.

    7.4 СПИСОК ДИАПОЗОНОВ ИНДЕКСОВ.

    V.B. позволяет использовать при задании размера массива диапазон индексов, т.е. вместо записи:

    Dim A Year (17) можно записать для удобства.

    Dim A Year (1980 To 1997). Ключевое слово To устанавливает диапазон значений принимаемых индексом.

    7.5 Команда Erase.

    В процессе работы программы может увеличиваться объем занимаемой ею памяти. VB дает возможность освобождать место, занимаемое динамическими массивами. Для этого необходимо использовать команду Erase. НАПРИМЕР: для динамического массива А команда Erase А – удалит данный массив и освободит занимаемое им место. Если массив не является динамическим, то данная команда не удалит массив, а только очистит все его элементы. Использование команды Erase дает быстрый способ очистки всех элементов фиксированных и статистических массивов.

    7.6 МАССИВЫ С БОЛЕЕ ЧЕМ ОДНОЙ

    РАЗМЕРНОСТЬЮ.

    Можно также использовать массивы, имеющие более чем 1 размерность, обычно их называют многомерными массивами. Если в одномерном массиве положение его элемента определяется 1 индексом, то, например, в двухмерном массиве – 2-мя индексами и т.д. Предположим надо сохранить 2-мерную в памяти, для этого необходимо сделать следующее:

    Static Table (1 To 12, 1 To 12) As Integer

    Dim I As Integer, J As Integer

    For I To 12

    For J To 12

    Table (I, J)= I*J

    Next J

    Next I

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

    В VB принято, что при определении многомерного массива 1-ый параметр указывает число строк, а второй- число колонок. Следующее соглашение !!! последовательности заполнения элементов массива.. Заполнение выполняется последовательно, по строкам, столбец за столбцом, после этого осуществляется переход на новую строку. VB позволяет объявить до 60-ти размерностей при использовании команды Dim, и до 8-ми – с командой.

    7.7 ПРИСВАИВАНИЕ ЗНАЧЕНИЙ МАССИВА ПЕРЕМЕННОЙ ТИПА VARIANT: ФУНКЦИЯ ARRAY.

    Иногда возникает необходимость сохранить какой- либо массив в переменной. НАПРИМЕР, эту методику можно использовать, когда необходимо быстро поменять местами содержимое 2-ух массивов.

    Dim I As Long

    Re Dim A (1 To 2000) As Long

    Re Dim B (1 To 2000) As Long

    For I=1 To 2000

    A (1)=I

    B (1)=2*I

    Next I

    Dim Array 1=A (): Erase A ()

    Dim Array 2=B (): Erase B ()

    Temp=Array1

    Array1=Array2

    Array2=Temp

    В данном примере переменные Array1 и Array2 содержат резервные копии массивов. Этот метод значительно быстрее и удобнее для копирования ( в нашем примере 2000 ячеек друг в друга последовательно).

    7.8 ИСПОЛЬЗОВАНИЕ СПИСКОВ И МАССИВОВ В

    ПРОЦЕДУРАХ. ЗАПИСИ.

    VB имеет вложенные средства для работы со списками и массивами в процедурах и функциях. Чтобы использовать массив при вызове функции в списке параметров функции после имени массива поместите скобки (). НАПРИМЕР: если List А- одномерный массив числовой переменной с двойной точностью, Array $- 2-мерный массив строк, то декларация: Private Sub Example ( List, Array $ (), x%)- разрешит функции использовать и менять данные в этих массивах. Чтобы вызвать функцию в свои процедуры, необходимо вставить следующий протокол:

    Dim Pop Change (50), City State $ (3, 10) и теперь

    Example Pop Change A (), City State $ (), x1 %

    Предположим, что необходимо иметь 3-мерный массив: 1-ая колонка должна содержать Имя служащего, 2- оклад, 3- номер карточки страхования. Эти 3 типа переменных имеют разный формат, поэтому данная ситуация не может быть запрограммирована с помощью простого многомерного массива ( за исключением массива, использующего тип переменной Variant). Использование здесь типа Variant нежелательно, т.к. он замедляет работу компьютера и требует много памяти. Для ускорения работы можно использовать 3 отдельных массива.

    Dim Name $ (100), Salary ! (100) Soc Sec $ (100) и использовать 1 индекс для работы с конкретным служащим. Однако можно пойти другим путем и использовать новый тип данных, называемых запсью. Надо создать переменную, объединяющую переменные разного типа вместе:

    Пример объявления такой записи в разделе Declaration:

    Type Info

    Name as string

    Salary as Long

    Soc sec as String

    END TYPE

    Здесь определен тип; далее, в любой точке программы, можно создать переменную, имеющую такой тип.

    НАПРИМЕР:

    Static My Name As Info

    Чтобы обратиться к каждому из полей этой переменной надо использовать точки:

    My Name.Name= «Howard»

    My Name.Salary=100000

    My Name.Soc Sec= «036-78»

    Можно также создать массив записей. Например, выражение Dim Company (1 To 75) As Info создает список из 75 записей. Кроме того, можно создать запись в записи:

    Type A

    B As String

    C As Info

    END TYPE.

    7.9 ОПЕРАТОР WITH.

    Постоянное использование большого количества точек при обращении к переменным записи может быть несколько утомительна. Для упрощения обращения используется оператор With.

    НАПРИМЕР:

    With My Name

    . Name= «Howard»

    . Salary= 100000

    . Soc Sec= «036-78»

    END WITH.

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

    Оператор00 можно использовать также при работе со свойствами объектов. Например:

    With txt Box

    . Height=2000

    . With =2000

    . Text= «This is a text box»

    With. Font

    . Bold=True

    . Sire=is

    End with

    End with Font сам по себе не является объектом, поэтому необходимо использовать «». «».

    7.10 ПЕРЕЧИСЛЕНИЯ.

    В VB существует такое понятие как перечисляемые компоненты или просто перечисления. Например: поместим определение «перечисления» в секцию декларации формы.

    Enum The Week

    Sunday=1

    Monday

    Tuesday

    ..

    ..

    ..

    Saturday

    END ENUM.

    Если это сделать, то VB автоматически будет присваивать целочисленным переменным дни недели, т.е. (понедельник=1, вторник=2…). Можно далее использовать эти целые в своем коде. Перечисления могут использоваться в вызове функции. Например:

    Function A (x As The Week) As Single

    Select Case X

    Case Sunday, Monday

    Salary=1

    Case Else

    Salary=1.5

    End Select

    END FUNCTION

    Кроме того, можно задавать и произвольные значения своим константам. Например:

    Enum Bonus

    No Bonus=0

    Special Bonus=100

    END ENUM.

    И использовать следующий код:

    Dim C As Bonus

    C=Special Bonus, чтобы присвоить переменной С значение 100.

    Если не использовать печатные значения, перечисление будет начинаться с 0 и увеличиваться на 1.

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

    Файл прямого доступа это специальный файл на диске, упорядоченный по записям. Это позволяет быстро переместиться к 15-й записи, минуя прохождение по предыдущим 14-ти, что экономит значительное количество времени.

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

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

    Open “Sample.BND” As #5 Len =100

    Открывает файл прямого доступа под названием Sample.BND в текущем каталоге с идентификатором 5, каждая запись которого может содержать до 100 символов. Заметим, что в отличии от файлов последовательного доступа, не надо указывать, открывается ли этот файл для записи, для добавления или для чтения. Открытый файл прямого доступа может быть прочитан и записан практически одновременно.

    Предположим, требуется создать файл прямого доступа, который будет содержать 4- категории: автор, название, тема, издатель, с размерами, соответственно, 20, 30, 15, 20 байтов.

    Следовательно, в сумме каждая запись будет занимать 85 байт. Чтобы удовлетворить этой форме, создается файл прямого доступа:

    Open “MyLib.RND” As FileNum Len = 85

    Каждая запись внутри файла прямого доступа имеет номер записи. Один файл прямого доступа может содержать от 1 до 16777216 записей. Более того, можно поместить информацию в 15-ю запись без предварительного прохождения по предыдущим 14-ти.

    Прежде всего, опишем пользовательский тип (запись):

    Type Bookinfo

    Автор As String *20

    Название As String * 30

    Тема As String * 15

    Издатель As String * 20

    End Type

    Из-за ограниченной длины записи следует использовать строки фиксированной длины.

    Предположим, что переменная типа Bookinfo Example of Book предварительно была объявлена команда:

    Get FileNum, 10, Example of Book

    перенесет содержимое 10-й записи из файла прямого доступа в переменную Example of Book, автоматически заполняя необходимые компоненты этой записи. Команда

    Put FileNum, 37, Example of Book

    запишет поля Example of Book в 37-ю запись файла #FileNum

    Для определения точной длины записи в VB используется команда Len, которая возвращает не только длину строки, но и также и размер записи. Возьмем любую переменную данного типа, например:

    Dim Example of Record As This Type

    Len of Record = Len (Example of Record)

    и используем ее для установки длины в команде Open при создании файла прямого доступа.
    7.12 Связь с приложениями Windows, Буфер папки обмена Clipboard.
    Простейшим путем обмена информацией между приложениями Windows является использование буфера обмена Clipboard, поэтому в этом разделе мы опишем эту возможность системы Windows. Он представляет собой не просто пассивное место для хранения объектов при проведении операций копирования и вставки. Далее перейдем к обзору основных возможностей DDE и OLE. Работу приложения с DDE можно считать как указание что следует взять в буфере папки обмена или поместить в него ( хотя на самом деле, буфер папки обмена при работе с DDE не используется). Идея состоит в использовании стандартного формата Clipboard, однако следует помнить, что DDE не использует буфер папки обмена для операций вырезки и вставки. При этом можно создать несколько DDE одновременно, которые будут обмениваться между собой информацией.

    Ole является еще более мощным средством для организации взаимодействия и обмена данными между приложениями. OLE позволяет объединить между собой несколько приложений Windows, используя VB в качестве объединяющего фактора. OLE также является основой при создании элементов управления Active X в VB.

    Буфер папки обмена в Windows позволяет обмениваться текстовыми и графическими данными между несколькими приложениями при помощи операций вырезки – вставки, которые поддерживаются большинством приложений Windows.

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

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

    Clipboard. Clear

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

    Clipboard. SetText. StringData

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

    Clipboard. SetText.

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

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

    Destination= Clipboard. SetText()
    7.13 Формат буфера папки обмена и перенос графических фрагментов

    Для того чтобы правильно восстановить графическое изображение, находящееся в буфере папки обмена, VB должен знать его тип. Точно также, при переносе графического изображения в буфер папки обмена, программа должна сообщить буферу тип посылаемого изображения.

    В следующей таблице представлена информация такого рода.

    Символич. константа

    Значение

    Формат

    vbCFLink

    &HBFOO

    Информация, соответствующая соглашению DDE

    vbCFText

    1

    Текст (.txt)

    vbCFBitmap

    2

    Обычное побитовое изображение (.bmp)

    vbCFMetaFile

    3

    Метафайл Windows (.wmf)

    vbCFDIB

    8

    Побитовое изображение в формате (.dib)

    vbCFPalette

    9

    Цветовая палитра

    Можно узнать тип изображения, которое в настоящий момент хранится в буфере папки обмена, воспользовавшись методом GetFormat. Синтаксис этого метода следующий:

    Clipboard. GetFormat (Format %)

    где Format % представляет собой одно из значений или констант. Этот метод возвращает значение True, если изображение имеет соответствующий формат. Например: If Clipboard. GetFormat Format (2) Then MsgBox “Clipboard has a bitmap”

    Для полученного изображения из буфера папки обмена необходимо использовать метод GetData. Его синтаксис выглядит следующим образом:

    Clipboard.GetData (Format %)

    где Format % принимает значение 2,3,8 или эквивалентные символические константы.

    7.14 Выделение текста в VB.

    Часто бывает необходимо вставить в проект функции вырезки, вставки и копирования, предназначенные для работы с выделенным текстом. Особенно это может оказаться полезным для многострочных полей ввода. Для этого в VB выделенному тексту ставится в соответствие три свойства.

    SetStart – имеет тип long integer и содержит позицию в тексте, с которой начинается выделение. Если значение этого свойства равно 0, это означает, что пользователь начал выделение текста с начала поля ввода. Можно самостоятельно установить позицию начала выделенного текста. Например, для поля ввода с именем Text1, следующая строка устанавливает начало выделения на середину введенного текста:

    Text1.SetStart = Len(Text1.Text)/2

    SetLenght Это свойство имеет тип long integer и содержит количество символов выделенного пользователем текста. Если значение этого свойства равно 0, значит выделенный текст отсутствует. Для выделения первой половины содержимого поля ввода можно использовать следующий фрагмент кода:

    Text1.SetStart = 0

    Text1. SetLengh = Len(Text1.Text)/2

    SetText. Это свойство содержит выделенный пользователем фрагмент текста. Если добавить следующий фрагмент кода в программу:

    FirstHalfofText$ = Text1. SetText то переменная FirstHalfofText$ примет значение выделенной строки.

    Если самостоятельно присвоить значение какой либо строки свойству SetText, то VB заменит предыдущее значение выделенной строки на новое. Для предоставления пользователю возможностей копирования выделенного текста необходимо воспользоваться следующим фрагментом кода:

    Private Sub Copy_Click ()

    Clipboard. SetText Text1.SetText

    End Sub

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

    Private Sub Cut_Click ()

    Clipboard. SetText Text1.SetText

    Text1.SetText = “ ”

    End Sub

    Для применения процедуры Paste_Click к месту текущей позиции ввода в поле ввода Text1 можно использовать следующий код:

    Private Sub Paste_Click ()

    Text1. text = Clipboard. SetText ()

    End Sub
    1   2   3   4   5   6


    написать администратору сайта