Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структурные особенности Visual Basic.docx
Скачиваний:
44
Добавлен:
17.11.2019
Размер:
2.86 Mб
Скачать

59.Ручной и программный способ установления связи с источником данных.

Существуют два способа установления связи с источником данных: ручной и программный. При ручном способе необходимо открыть окно Администрирования и выбрать Источник данных(ODBC).

60.Цепочка связанных объектов COM.

В большинстве примеров, рассмотренных нами, в качестве OLE-клиента использовалось приложение Visual Basic, но с этой ролью в полнее может справиться любое офисное приложение. В качестве же OLE-сервер а могут выступать MS Excel, Word, Access и др., поскольку в них имеется окно VBA. Однако связь OLE-клиента с OLE-сервером не всегда может быть прямой. Эту связь можно расширить засчет введения дополнительных(транзитных) OLE-клиент-серверов, тем самым организовав цепочку связанных объектов COM.

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

Приложение FrontPage предназначено для создания Web-сайтов и так же, как все офисные приложения, обладает своей объектной моделью. Чтобы реализовать работу подобной цепочки объектов COM, необходимо управлять работой приложения FrontPage или Word (в нашем случае это запуск созданных в них макросов) с помощью метода Run объекта Application этих приложений. Синтаксис этого метода следующий:

Run(<Имя Макроса>[,<Список_параметров_макроса>])

Где Имя Макроса–имя процедуры или функции, записанной в окне Редактора Visual Basic;

Список_параметров_макроса–это параметры макроса(до30), указанные через запятую. Параметры у макроса могут отсутствовать.

•Создадим новый проект VB и разместим на форме две кнопки, два текстовых поля и две метки, как на рисунке.

61.Пример создания «на лету» программного кода макроса, определяющего полный путь к библиотеке типов и ClassID библиотеки. Программные способы добавления модуля класса, модуля формы и исходного модуля.

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

  1. •Сформируйте внешний вид формы, состоящий из двух кнопок и трех списков Combo, как на рисунке ниже.

  1. •В режиме конструктора измените свойство FontуCombo1 на жирный с размером 10 и подпишите все кнопки.

  2. •В окне Code формы введите следующую программу.

62.ActiveX-компонент WebBrowser и объект InternetExplorer для работы в www из проектов Visual Basic.

Элемент управления Web Browser–это компонент ActiveX, который отображает Web-страницу на форме Visual Basic, а также локальные файлы или ActiveX-документы, например, документы Word или Excel (но без меню и панелей инструментов, что не дает возможности их редактирования). Объект Internet Explorer–это объект COM(сервер OLE Automation), управляющий браузером MS IE из программы VB. Прежде чем поместить Web Browser на форму, его надо загрузить на панель General ToolBox, установив флажок на против Microsoft Internet Controls в списке диалога Components.

Чтобы установить ссылку на(библиотеку) COM-объект Internet Explorer из проекта (режим раннего связывания с объектом), следует воспользоваться командой Project\References и установить флажок на против библиотеки Microsoft Internet Controls.

Тогда в окне Object Browser Вы увидите класс Internet Explorer, а в списке Members–его свойства и методы. Чтобы обратиться к MS IE, используя механизм позднего связывания, следует сначала описать объектную переменную(типом Object), а затем оператором Set соединить ее с функцией Create Object ("Internet Explorer.Application"). Созданный таким образом объект Internet Explorer позволит запустить экземпляр MS IE из приложения и манипулировать им с помощью механизма OLE.

63.Скриптовые программы HTML-документа. Три способа формирования в программе процедур-событий в клиентских сценариях.

VB Script–это событий но-ориентированный язык html и asp-документов.

Существует три способа формирования в программе процедур-событий.

В первых двух способах имя события определялось в заголовке тега<Script> или в процедурах-событиях, но внутри тегов<Head>.

Однако событие можно определить и внутри других тегов, например, <Body> и<Form>:

Под HTML-документом следует понимать файл, содержащий программный код клиентского сценария и HTML-код. Для размещения скриптовых программ внутри HTML-документа используются специальные теги<Script> и</Script>, между которыми в комментариях(<!---->) размещается текст программы сценария. В качестве атрибутов первого тега указывается язык, на котором написана программа (это либо language=″VBScript″, либо language=″JavaScript″), и возможная принадлежность страницы к серверу(атрибут runat=”Server”). Программа, написанная на скриптовом языке, может располагаться в любой части HTML-документа.

Для размещения встроенных элементов управления на странице используют тег<Input…..>. Для обслуживания встроенных элементов управления и объектов страницы используют процедуры-события.

Например, событие onClick генерируется после щелчка на элементах управления Radio, Submit, Reset, CheckBox, Button или событие on Change, происходящее при изменении текста в элементах управленияText, TextArea, SelectиPassword.

Для размещения ActiveX-компонента на странице используются теги<Object…..> и</Object>. Первый тег имеет ряд важных атрибутов, которые следует перечислить:

  1. Classid–предназначен для идентификации ActiveX-компонента на клиентском компьютере. Когда MS IE запускает Web-страницу с ActiveX-компонентом, то он просматривает значение атрибута classid в системном реестре. Если MS IE находит его, то элементу правления отображается на странице. Если нет, то он пытается загрузить элементу правления с сервера по атрибуту Codebase и установить его на компьютере-клиенте, чтобы далее использовать. Значение атрибута Classid компоненты ActiveX на каждом компьютере будет свое. Напомню, что узнать значение атрибута Classid можно прочитав системный реестр или воспользовавшись утилитой Ole2vw32.exe.

  2. •Id–предназначен для идентификации ActiveX-компонента.

  3. •Width, Height–задают ширину, высоту области, занимаемой компонентом.

  1. Align–задает выравнивание относительно границ области.

  2. •Hspace, Vspace–определяют горизонтальный и вертикальный отступы относительно текста HTML-документа.

Связь со свойствами ActiveX-компонента осуществляется с помощью тегов<Param>, но внутри тегов<Object>…</Object>.

64.Объектная модель MS Internet Explorer. Способы задания цвета у объекта. объекта Window объектной модели Internet Explorer.

Объектная модель MS IE представляет собой иерархию объектов, доступных из скриптовых языков и предназначенных для управления браузером MS IE и доступа к свойствам HTML-документа.

Объектная модель MS IE состоит из 11 объектов, каждый из которых имеет свою область действия и область «видимости».

В вершине иерархии располагается объект Window, который представляет собой окно Internet Explorer. Объект Document представляет собой HTML-документ, открытый в данный момент в окне Internet Explorer. Такие свойства документа, как наличие ссылок и форм, представлены в модели соответственно объектами Link иForm. Каждый из этих объектов содержит свои под объекты. Доступ к списку ранее загружавшихся страниц осуществляется с помощью объекта History, место нахождение текущего документа можно узнать через объект Location, а получить информацию о версии MS IE–через объект Navigator.

65.События, свойства и методы объекта Window объектной модели Internet Explorer.

В вершине иерархии располагается объект Window, который представляет собой окно Internet Explorer. Объект Document представляет собой HTML-документ, открытый в данный момент в окне Internet Explorer. Такие свойства документа, как наличие ссылок и форм, представлены в модели соответственно объектами Link и Form. Каждый из этих объектов содержит свои под объекты. Доступ к списку ранее загружавшихся страниц осуществляется с помощью объекта History, место нахождение текущего документа можно узнать через объект Location, а получить информацию о версии MS IE–через объект Navigator.

Объект Window содержит ряд важных свойств и методов, доступных из программ.

Свойства:

Status-устанавливает текст в строке состояния

DefaultStatus-возвращает или устанавливает текст в строке состояния

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

ClearTimeout- выключает таймер

SetIntervalвызывает функцию через заданное число миллисекунд

Методы:

Alert-водит на экран панель предупреждения

MsgBox- выводит на экран панель сообщения

Confirm-выводит на экран панель запроса содержащую текст и кнопки ок и cancel. В зависимости от нажатой кнопки возвращает true-ok, false-cancel

Propmt-выводит на экран панель со строкой для вывода

Navigate-позволяет переместиться на страницу с адресом указанным в формате url

Close-закрывает текущую страницу и возвращает к предыдущей странице.

66.События, свойства и методы объекта Document объектной модели Internet Explorer.

Name-возвращает имя текущего окна

BGColor-позволяет узнать или установить цвет фона документа

FGColor-позволяет узнать или установить цвет текста документа

LastModified-позволяет узнать дату последней модификации документа

LinkColor-позволяет узнать или установить цвет которым отображается ссылка в документе

Цвет элементов в HTML-документе можно задавать в виде именованных констант (например, AQUA–ярко-голубой, BLACK–черный, BLUE–голубой, FUCHSIA–сиреневый, GRAY–серый, GREEN–зеленый, LIME–ярко-зеленый, MAROON–темно-красный, NAVY–темно-синий, OLIVE–оливковый, RED–красный, SILVER–серебряный, TEAL–сине-зеленый, WHITE–белый, YELLOW–желтый) или в виде шестнадцатеричной константы, но по формату ″#RGB″.

67.Атрибуты тега OBJECT для работы с ActiveX-компонентом на Web-странице.

Для размещения ActiveX-компонента на странице используются теги<Object…..> и</Object>. Первый тег имеет ряд важных атрибутов, которые следует перечислить:

  1. Classid–предназначен для идентификации ActiveX-компонента на клиентском компьютере. Когда MS IE запускает Web-страницу с ActiveX-компонентом, то он просматривает значение атрибута classid в системном реестре. Если MS IE находит его, то элементу правления отображается на странице. Если нет, то он пытается загрузить элементу правления с сервера по атрибуту Codebase и установить его на компьютере-клиенте, чтобы далее использовать. Значение атрибута Classid компоненты ActiveX на каждом компьютере будет свое. Напомню, что узнать значение атрибута Classid можно прочитав системный реестр или воспользовавшись утилитойOle2vw32.exe.

  2. •Id–предназначен для идентификации ActiveX-компонента.

  3. •Width, Height–задают ширину, высоту области, занимаемой компонентом.

  1. Align–задает выравнивание относительно границ области.

  2. •Hspace, Vspace–определяют горизонтальный и вертикальный отступы относительно текста HTML-документа.

Связь со свойствамиActiveX-компонента осуществляется с помощью тегов <Param>, но внутри тегов<Object>…</Object>.

68.Пример отображения на странице ActiveX-компонента.

<HTML><HEAD>

<script language="vbscript" type="text/vbscript">

sub OnHeightChange()

UserControl11.height=int(txtHeight.value)

end sub

sub OnWidthChange()

UserControl11.width=int(txtWidth.value)

end sub

</script>

<META http-equiv=Content-Type content="text/html; charset=windows-1251">

<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>

<BODY>

<OBJECT

classid=clsid:9FBC55B1-ADF5-40FA-9FCE-A1D1468B299D codebase="Project2.ocx" id="UserControl11"></OBJECT>

<p align="center">

<input id="btnHeight" onclick="OnHeightChange" type="button" value="Изменить высоту" />

<input id="txtHeight" type="text" />

</p>

<p align="center">

<input id="btnWidth" onclick="OnWidthChange" type="button" value="Изменить ширину" />

<input id="txtWidth" type="text" />

</BODY></HTML>

69.Атрибуты тега FORM. Элементы управления форм HTML-документа.

Метод Form позволяет получить значения, передаваемые серверу в post-режиме, элементами форм, размещенных в тегах<Form>…</Form>. Тег<Form>, кроме атрибута name имеет еще два главных атрибута, предназначенных для работы с сервером–это method и action. Первый определяет режим(postилиget) передачи значений встроенных элементов клиента серверу, а второй–URL-адрес серверного приложения, обрабатывающего пересылаемые значения.

Реально для передачи значений используется post-режим.

Например, введем следующую небольшую программу и присвоим ей имя Forma1.htm. <Html>

<Head>

<Script language="Vbscript"> <!—Randomize

Sub Begin

Frm.Chislo.value=CInt(Rnd*100)

end sub

-->

</Script>

</Head> <Body><Form name="Frm" method="post" action="http://127.0.0.1/forma2.asp">

<Input type="Button" onclick="Begin" value="Сгенерироватьчисло">

<p>Число: <Input type="Text" name="Chislo"></p>

<p><Input type="Submit" value="Submit">

</Form>

</Body>

</Html>

•Введем вторую программу и присвоим ей имя Forma2.asp.

<Html>

<%

Randomize

t=CInt(Rnd*100)

Response.Write"<H3> Возвращаемые значения с сервера</H3>"

Response.Write"<H3>" & "Число из поля: " & Request.Form("Chislo") & "</H3>"

Response.Write"<H3>" & "Значение выражения на сервере: " & t& "</H3>«

%>

</HTML>

70.Активные серверные страницы объектной модели MS IIS. Способы формирования серверных сценариев.

Windows XP предоставляет возможность проигрывать серверные приложения на компьютере клиента. Для этого следует инсталлировать дополнительный компонент–Web-сервер: Microsoft Internet Information Server(IIS). Тогда на системном диске появится системная папка сервера InetPub\WWWroot, в которой и следует размещать серверные приложения(asp-файлы), из которых станут доступными объекты IIS.Клиенты, подсоединенные к компьютеру сервера с помощью HTTP-протокола, после набора IP-адреса http://127.0.0.1 (или http://localhost), автоматически попадают в папку WWW root, при этом в окне браузере клиента(по умолчанию) будет открываться файл default.htm, если он будет находиться в этой системной папке.Если в поле Адрес браузера ввести http://127.0.0.1/<Имя_asp-файла>, то в его окне отобразится результат работы серверного приложения.

Asp-документом будем называть файл, содержащий программный код серверного сценария(СС), клиентского сценария(КС) и HTML-код. Причем HTML-код и программный код К Смогут отсутствовать. В СС исп-ся объектная модель сервера MS IIS, а в КС–объектная модель клиента MS IE. Заголовок СС в отличие от КС должен содержать атрибут runat=”Server”, например, <Script language=”VBScript”runat=”Server”>. Также СС может быть оформлен в виде тегов<% ……….%>. Именно в них чаще всего размещаются переменные и функции, вычисляемые на сервере. При этом существует приоритет выполнения сценариев в программе.

71.Пример тестирования работы сервера, используя клиентскую и серверную части совместного приложения, по передаче чисел.

Определить дату, время и значения функций при запуске клиента и ответа с сервера.

  1. •Введем в окне Code Front Page следующую программу, сохраним ее на диске в папке www root под именем Scripts.asp, после чего запустим MS IE с адресом http://127.0.0.1/Scripts.asp.

<HTML><head></head>

<% Dimd, t

d = Date()

t = Time()

FunctionSeconds(tt)

Seconds=Second(tt)

endfunction

FunctionDays(dd)

Days=Day(dd)

endfunction

Response.write"<HTML>"

Response.write"<B>Вывод даты и времени сервера</B>"

Response.write"<BR><SPAN style='color:Olive; font: bold'>" & "Первый вариантCC</SPAN>"

Response.write"<BR>Day: " & d & ""

Response.write"Time: " & t

Response.write"<BR>Секунды: " & Seconds(t) & " "

Response.write"День: " & Days(d)

Response.write"</HTML>"

%>

<Scriptlanguage="VBScript" runat="server">

Response.write"<HTML>"

Response.write"<BR><B>Вывод даты и времени сервера</B>"

Response.write"<BR><SPAN style='color:navy; font: bold'>" & "Второй вариантCC</SPAN>"

Response.write"<BR>Day: " & d & ""

Response.write"Time: " & t

Response.write"<BR>Секунды: " & Seconds(t) & " "

Response.write"День: " & Days(d)

Response.write"</HTML>"

var=5+5*sin(25)-cos(35)*log(4.1)'Вычислить

</Script>

<Scriptlanguage="VBScript" runat="server">

Response.write"<HTML>"

Response.write"<BR><SPAN style='color:maroon; font: bold'>" & "Третий вариантCC</SPAN>"

Response.write"<BR>Variable=" & var

'Вывод результат а выражения из предыдущего 'блока"Server"

Response.write"</HTML>"

</Script><Scriptlanguage="VBScript">

<!--' Начало КлиентскогоСценария

Document.write"<HTML>"

Document.write"<BR><B>Вывод даты и времени клиента</B>"

Document.write"<BR>DayКC: " & Date() & " "

Document.write"TimeКC: " & Time()

Document.write"<BR>СекундыCC: " &

<% =Seconds(t) %> & " "

Document.write"ДеньCC: " & <% =Days(d) %>

Document.write"</HTML>"

-->

</Script>

<Body>

<BR><B>Вывод даты и времени сервера</B>

<BR><SPAN style='color:lime; font: bold'>Обращение к функциям и переменным1-гои2-гоCC</SPAN>

<BR>Day: <% =d%>    

Time: <% =t%>

<BR>Секунды: <% =Seconds(t) %>     День: <% =Days(d) %>

<BR>Variable: <% =var%>

</Body>

</HTML>

Прокомментирую программу.

Программа содержит КС и четыре СС. Обратите внимание, в какой последовательности происходит обработка сценариев в программе.

Сначала вычисляются переменные t, d и функции в первом СС, расположенные в тегах<% …. %>, затем управление передается КС и с помощью тех же самых тегов осуществляется получение значений функций, а потом и переменных. При получении значений переменных и функций из СС знак равенства обязателен. На рисунке ниже Вы можете увидеть, что значение переменной var во втором СС еще не было вычислено, поскольку действие третьего СС не наступило. Далее выполняется третий СС и наконец четвертый, в котором и выводится значение переменной var.

72.Свойства, методы и события объектов активного сервера MS IIS.

Метод QueryString объекта Request позволяет получить все значения, передаваемые серверу элементами страницы, имеющим и атрибуты href или src. Например:

Request.QueryString("Id") 'получить значение5 изId

Request.QueryString("N") 'получить значениеHelизN

Получить значения двух переменных из передавае-мого по гиперссылке<Аhref="get.asp?Id=5 & Nam=Hel">сообщения клиента в расположенный на сервере файл get.asp.

Объект Application позволяет создавать глобальные переменные приложения, которые будут доступны всем пользователям данного приложения. Объект Application поддерживает методы Lock и Unlock. Первый метод блокирует изменение значения переменной другими клиентами, второй позволяет другим клиентам изменять значение переменной, сохраненной в объекте Application.

Каждому пользователю на время сеанса связи назначается отдельный объект Session, который позволяет создавать и передавать переменные между страницами сессии в течение текущего сеанса работы приложения. Одна страница пишет данные в сессию, другая–забирает и хот туда.

Session("var") = var'Записать значение переменной

var= Session("var") 'Считать значение переменной

Объект Session поддерживает свойства SessionlD и Timeout. Первое свойство возвращает идентификатор пользователя. Второе устанавливает в минутах временной интервал работы, по истечении которого завершится сеанс связи, если пользователь не обновит Web-страницу.

Объект Application и объект Session поддерживают два события: onStart и onEnd. Первое генерируется при начале работы приложения(перед началом первого сеанса связи). Второе генерируется при завершении и работы приложения.

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

Объект Server позволяет серверному сценарию с помощью метода CreateObject обращаться к ActiveX-компонентами создавать экземпляры объектов ActiveX. Причем это может быть как встроенный в системе компонент, таки созданный разработчиком. Параметром метода CreateObject является Progid–программный идентификатор требуемого ActiveX-компонента.

Метод Execute вызывает на выполнение asp-файл.

Метод Transfer–посылает запрос из одного asp-файла другому.

Метод MapPath преобразует URL-адрес в локальный адрес операционной системы. Если в качестве значения аргумента этого метода используется точка, то подразумевается текущий каталог.

Таким образом, инструкция Server.MapPath(".") возвращает каталог, в котором находится asp-сценарий(т. е. преобразуется адрес http://127.0.0.1 в локальный адресc:\inetpub\wwwroot).

С другими методами и свойствами объектов активного сервера MS IIS можно познакомиться самостоятельно через окно Object Browser, если загрузить библиотеку aps.dll с помощью команды References из окна VB или VBA, предварительно установив флажок в списке Available References напротив строки Microsoft Active Server Pages ObjectLibrary.

74.Системное программирование. Архитектура Windows-программ.

Как известно, все приложения запускаются под управлением ОС, поэтому с позиции прикладной программы ОС Windows представляет собой совокупность системных функций, формирующих интерфейс прикладных программ-Win32 API (Application Programming Interface). Win32 API состоит из функций, структур, констант и сообщений, позволяющих непосредственно создавать приложения Windows и управлять ими. Так, чтобы выполнить те или иные действия (например, открыть окно и отобразить текст или графику), Ваша программа должна обратиться к соответствующим функциям Win32 API напрямую или подключить к проекту элементы ActiveX, взяв их спанели GeneralToolBox, в которых могут встречаться ссылки на функции Win32API. Следует отметить, что прямое обращение к функциям Win32 API увеличивает быстродействие приложения. Программный код этих функций образует ядро ОС, который слишком велик по объему и не может целиком размещаться в оперативной памяти, поэтому большая часть функций остается на диске в библиотеках динамической компоновки и загружается в память по мере надобности по их вызовам из прикладной программы. Способ загрузки библиотечных функций может быть статическим (в дальнейшем именно с ним нам предстоит работать) и динамическим.

В состав ядра входит более 1000 функций. Основные из них размещены в трех динамических библиотеках: KRNL386.EXE, USER.EXE, GDI.EXE. Ядро MS DOS, как известно, формируется из файлов IO.SYS иMSDOS.SYS.KRNL386.EXE управляет памятью и загрузкой прикладных программ. USER.EXE содержит функции создания и управления окнами(перемещение, изменение размеров, удаление), управляет иконками и курсорами, обрабатывает сообщения с клавиатуры, мыши и других пользовательских приложений. Эти функции позволяют приложениям организовать более эффективную обработку событий мыши посравнению с возможностями, предоставляемыми VisualBasic. GDI.EXE (GraphicsDeviceInterface) содержит функции графического вывода.

Единственным отличием API-функций Windows от обычных функций Visual Basic является необходимость объявлять их перед использованием (статическая загрузка) с помощью оператора Declare. По сути, требуется сообщить Visual Basic имя и местоположение DLL-библиотеки(user32.dll, gdi32.dll, kernel32.dll), в которой находится ссылка(заголовок) на API-функцию ядра ОС или описание самой функции. Синтаксис объявления API-функции следующий. [Public| Private] DeclareFunction Имя Функции Lib "Имя Библиотеки" [Alias"псевдоним"] ([Список Аргументов])] [As Type] Объявления API-функций должны размещаться в общей области GD модуля. Если Вы размещаете его в модуле формы, то обязательно нужно указать ключевое. Слово Private (чтобы данное объявление было доступно только внутри модуля). Это требование касается и всех подпрограмм, размещенных в модуле формы. Набор Win32 API реализован только в виде функций. В большинстве своем это функции типа Long, которые чаще всего возвращают код завершения операции. Причем не нулевое значение означает нормальное завершение, нулевое-ошибку. В Win32 API чаще всего используется передача параметров по значению (ByVal), то есть выполняется односторонняя передача данных -от VB-программы к API-функции. В качестве типов параметров, кроме известных, могут использоваться и новые.•... As Any означает, что в стек будет помещен не который адрес буфера памяти. Тип Any может использоваться только в операторе Declare, а Фактический параметр при вызове функции должен иметь конкретный тип.•... As User Defined Type означает, что требуется обменяться данными(в обе стороны) с помощью некоторой структуры. Такая конструкция всегда используется без слова By Val, то есть в данном случае выполняется передача по ссылке, то есть в стек записывается адрес переменной. Некоторые API-функции начинаются с символа подчеркивания, что недопустимо для VB. Поэтому для обращения к таким функциям их имя следует указать в поле «псевдонима» за ключевым словом Alias. Вызов API-функции аналогичен вызову любой обычной функции VB, то есть ее можно вызвать операторным(бесскобочным) или скобочным способом.

75.Системное программирование. Структура Windows-программ. Оконная функция.

Структура Windows-программ при работе с ОС реализована по принципу управления потоком сообщений. В ответ на любое событие(нажатие клавиш и на клавиатуре, щелчок по кнопке на форме, перемещение манипулятора мышь, изменение значения таймера) ядро Windows посылает прикладным программам сообщение. Например, при нажатии клавиши посылается сообщение с константой WM_KEYDOWN, при нажатии левой кнопки мыши-сообщение с константой WM_LBUTTONDOWN, а при выборе команды меню-сообщение с константой WM_COMMAND. При этом каждое сообщение содержит полную информацию о наступившем событии способе его обработки. Все сообщения помещаются в специальную очередь, которые затем обрабатываются в«оконной»функции прикладной программы. В ОС Windows используется Венгерская нотация.

Оконная функцияWindows-программы анализирует поступающие сообщения и выбирает соответствующую процедуру обработки сообщения. При работе с файлами в VB Вы познакомились с понятием дескриптор. В ОС Windows также есть дескрипторы, представляющие собой переменные типа Long и определяющие общие сведения о каком-либо инструменте(объекте) системы.Наиболее важными и часто используемыми являются дескриптор окна и дескриптор контекста устройства. Дескриптор окна позволяет однозначно определить каждое окно, используемое в системе, перемещать его, изменять его в размере, делать невидимым, перерисовывать изображение внутри окна ит.п. ВсефункцииWin32 API, управляющие окнами, используют в качестве своего первого параметра дескриптор окна. Дескриптор контекста устройства используется для отображения графической информации в окне. Все функции отображения используют в качестве первого параметра дескриптор контекста устройства. Таким образом, прежде чем использовать функции вывода на экран или устройство печати, необходимо получить от Windows дескриптор контекста этого устройства.Помимо перечисленных дескрипторов в программе могут присутствовать дескрипторы на кисть, перо, шрифт, иконку, курсор, область, Bitmap-растри exe-файл.

76.Контекст графических устройств Windows.

Контекст графических устройств Windows поддерживает три вида графических устройств: дисплей, принтер и плоттер. Чтобы Windows-программе не учитывать особенности каждого устройства и соответствующие настройки драйвера устройства, ядром Windows любой программе предоставляется универсальный интерфейс-контекст графических устройств. Контекст устройства- это ряд числовых параметров, характеризующих виртуальное графическое устройство и, прежде всего, коэффициенты, с помощью которых логическая система координат преобразуется в физическую. Для обеспечения аппаратной независимости от устройств ядро Windows поддерживает два типа координат: виртуальные и физические. Так, сначала программа создает изображение, работая с виртуальными коор-динатами, не зависящими от конкретного устройства, а затем в момент вывода на устройство(дисплей, принтер) ядро Windows преобразует виртуальные координаты в физические, обеспечивая тем самым идентичность изображений, создаваемых на различных устройствах. К числовым параметрам контекста относится также информация о трех основных инструментах: пере, кисти и

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

Работать с контекстом устройства следует по правилу: получить контекст, вывести информацию и освободить контекст. Каждый контекст занимает в памяти от 1 до 4 Кбайт и его следует всегда освобождать после завершения вывода на устройство.

77.Программные ресурсы приложений.

Программные ресурсы приложений К программным ресурсам пользовательского интерфейса относят: меню, статусную строку, панели инструментов, диалоговые окна, курсоры, иконки(пиктограммы), растровые изображения(bmp-файлы) истроки сообщения. Если меню в VB создается командой Tools\MenuEditor, диалоговые окна и формы-командой Project\AddForm, то панель инструментов (элемент ToolBar), статусная строка(StatusBar), список изображений(ListImage) –используя ActiveX-компонент MS WindowCommonControls6.0.

Используя элемент ListImage (через свойство Custom и закладку Images), можно занести любое графическое изображение(ico, cur, bmp, jpg-файлы), при этом оно автоматически масштабируется к размеру 32x32 пикселя. Обычно элемент ListImage используется для формирования кнопок, которые предполагается использовать на панели ToolBar для быстрого доступа к командам меню. Иногда иконки, курсоры, bmp-файлы и строки сообщения удобно хранить в файле ресурсов, откуда они могут загружаться по мере необходимости и использоваться разработчиком по своему назначению. При этом каждый из этих элементов(кроме строк сообщения) может быть создан с помощью графического редактора Image Editor(файлImagEdit.exe), а уж затем загружен в файл ресурса с помощью редактора ресурсов Resource Editor(рис.167), активизируемого командой Tools\Resource Editor. Если последняя команда отсутствует в списке.

78.Особенности описаний интерфейсных элементов ядра Windows.

Способы отображения информации в окне Каждому приложению, работающему под управлением Windows, для ввода-вывода информации выделяется специальная прямоугольная область экрана, называемая главным окном. При этом окно может быть распахнуто до максимального размера экрана, закрыто до значка на панели Задач, перемещено или изменено в размере. Среда программирования VB предоставляет два способа формирования главного окна приложения для работы с сообщениями Windows, используя API-функции. Каждый

Из них может готовить свои собственные сообщения и передавать их Windows, а с ее помощью -к другим прикладным программам, работающим в среде.

Первый способ основана не посредственном создании отображении главного окна приложения, получении его дескриптора и обработки сообщений, посылаемых окну ядром Windows. Этот способ включает описание класса окна, его регистрацию, отображение, а также описание оконной функции, обрабатывающей все сообщения, посылаемые ядром Windows программе. Второй способ Вам уже знаком и отличается от первого способа лишь тем, что основана использовании стандартного окна(формы), предлагаемого средой VB. Единственное, что необходимо здесь делать, так это получать от ОС дескриптор формы(обычно он уже определен в виде свойства) или его объекта для отображения на нем графической информации, изменять, если это необходимо атрибуты окна и класса окна функциями SetWindowLong, SetClassLong.

79.Первый способ отображения информации в окне, использующий API-функции ядра (процедура Main: регистрация класса, создание и отображение окна приложения, цикл обработке сообщений, оконная функция). Пример.

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

Каждая программа, которая самостоятельно создает главное окно приложения(первый способ), должна состоять из двух обязательных частей:•процедуры Main(«стартующий»объект), являющейся точкой входа в программу, в которой определяются атрибуты класса окна, осуществляется регистрация класса, формируется стиль окна, создается экземпляр окна в памяти, отображается окно, и наконец, запускается цикл обработки сообщений;

оконной функции, обрабатывающей все сообщения Windows.

80.Второй способ отображения информации в окне, использующий API-функции ядра (форма Visual Basic и оконная функция). Пример.

Второй способ Вам уже знаком и отличается от первого способа лишь тем, что основана использовании стандартного окна(формы), предлагаемого средой VB. Единственное, что необходимо здесь делать, так это получать от ОС дескриптор формы(обычно он уже определен в виде свойства) или его объекта для отображения на нем графической информации, изменять, если это необходимо атрибуты окна и класса окна функциями SetWindowLong, SetClassLong.

81. Методы оконной функции.

Оконная функция Window обрабатывает сообщения, посылаемые окну ядром Windows. Имя оконной функции присваивает пользователь при регистрации класса, а вызывается она непосредственно ядром Windows. Окно всегда создается на основе класса окна, в котором должны быть описаны основные характеристики главного окна. В частности, при определении адреса оконной функции используется скрытая функция AddressOf в качестве аргумента дополнительной функции GetAddress.wc.lpfnwndproc= GetAddress(AddressOfWindow) К атрибутам класса относят: наличие и тип иконки, курсора, шаблон заполнения фона, наличие меню и ряд других параметров. Для того чтобы можно было использовать в дальнейшем созданный класс окна, его необходимо зарегистрировать в Windows вызовом API-функции RegisterClass (ClassAsWNDCLASS) AsLong Значение, отличное от нуля, возвращаемое этой функцией, означает успешное завершение операции регистрации. Константы, определяющие стиль окна, имеют префикс CS. Стили CS_VREDRAW OrCS_HREDRAW используются, если содержимое окна должно быть перерисовано при изменении размеров по вертикали и горизонтали. Чтобы окно получало сообщения о двойном нажатии кнопок мыши(константы сообщений WM_LBUTTONDBLCLK,WM_MBUTTONDBLCLK,WM_RBUTTONDBLCLK),необходимо еще установить стиль окна CS_DBLCLKS. Поле hInstanse определяет дескриптор на сегмент данных экземпляра программы или дескриптор exe-файла, что позволяет Windows запускать несколько экземпляров одной и той же программы, при использовании одного экземпляра программного кода. Поле hIcon определяет дескриптор иконки для всех окон в минимизированном состоянии, созданных на основе этого класса. Для получения дескриптора стандартной(предопределенной в системе) иконки необходимо воспользоваться функцией LoadIcon с нулевым значением первого параметра. В Windows предопределены 5 типов иконок. Поле hCursor определяет дескриптор курсора, используемого в программе. Для использования стандартного курсора в программе необходимо воспользоваться функцией LoadCursor с нулевым значением первого параметра. В Windows предопределены 12 типов курсоров. Поле hbrBackground определяет дескриптор кисти в качестве шаблона заполнения фона всех окон, созданных на основе этого класса. С помощью API-функции GetStockObject осуществляется выбор стандартного шаблона кисти, например, черного цвета:wc. Hbr Background=GetStockObject(Black_brush) Имеется способ задания цвета фона окна, используя дескриптор кисти одного из объектов Windows(окна,

рамки, заголовка и т. п.), определенный в виде константы с префиксом color_, увеличенной на единицу, например :wc.hbrBackground= COLOR_APPWORKSPACE+1

Оконная функция Wind осуществляет непосредствен-ную обработку сообщений. Первый параметр оконной функции-дескриптор окна, которому принадлежит сообщение, то есть дескриптор, возвращаемый функцией CreateWindowEx. Второй параметр-идентификатор(константа) сообщения, остальные-зависят от типа сообщения.

82.Константы сообщений при работе с мышью и клавиатурой. Программная обработка констант сообщений.

Процедура Translate Message передает структуру типа MSG обратно ядру Windows для преобразования константы сообщения, содержащей виртуальный код клавиши, в константу сообщения, содержащую физический код клавиши. Существует много кодовых таблиц, в которых одинаковым по функциональному назначению клавишам соответствуют различные физические коды. В кодировке Win-1251 символ кириллицы «А» имеет код 192, в кодировке ISO -176, а в кодировке КОИ-8 -225 (табл.18). Поэтому, чтобы не зависеть от конкретной кодовой таблицы, используемой в компьютере, применяют виртуальный код клавиш. Эту процедуру можно опустить, если Вы не работаете с клавиатурой. Например, если Вы нажали или отпустили клавишу на клавиатуре, то ядро сгенерирует сообщение структуры

MSG, в которой поле message будет содержать константу WM_KEYDOWN или WM_KEYUP, а поле wparam-код виртуальной клавиши. Перечислим некоторые коды виртуальных клавиш. VK_CONTROL –нажата клавиша CTRL;

VK_SHIFT –нажата клавиша SHIFT;

VK_MENU –нажата клавиша ALT;

VK_RETURN –нажата клавиша ENTER;

VK_BACK –нажата клавиша BACKSPACE;

VK_F1... VK_F9 –нажата клавиша из диапазона F1... F9; VK_INSERT –нажата клавиша INSERT;

VK_DELETE –нажата клавиша DELETE;

VK_SPACE –нажата клавиша SPACE;

VK_M-нажата клавиша M;

VK 1-нажата клавиша 1.

При помощи функции Translate Message константы сообщений WM_KEYDOWN и WM_KEYUP, содержа-щихся в поле message, преобразуются в константы WM_CHAR и WM_DEADCHAR, а код виртуальной клавиши, содержащийся в поле wparam, будет содержать код ANSI-клавиши. Процедура DispatchMessage выполняет диспетчеризацию сообщения, то есть вновь направляет сообщение в оконную функцию. Оконная функция Wind осуществляет непосредственную обработку сообщений. Первый параметр оконной функции-дескриптор окна, которому принадлежит сообщение, то есть дескриптор, возвращаемый функцией CreateWindowEx. Второй параметр-идентификатор (константа) сообщения, остальные-зависят от типа сообщения. Обычно wparam(3-йпараметр) содержит код сообщения(например, код виртуальной клавиши или код символа ANSI), в старшем слове параметра lparam содержится дескриптор окна, а в младшем слове-целое значение, уникальное для конкретного типа сообщения. Для ряда сообщений lparam содержит пару координат манипулятора мыши. Наша оконная функция обрабатывает всего лишь три сообщения-WM_PAINT, WM_LBUTTONUP, WM_DESTROY. Сообщение WM_PAINT позволяет отображать графическую информацию в окне и перерисовывать содержимое окна после его сворачивания. При нажатии и последующем отпускании и левой кнопки мыши генерируется сообщение WM_LBUTTONUP, которое поступает в цикл обработки сообщений оконной функции. В результате с помощью функции SendMessage генерируется сообщение к ОС Windows-WM_CLOSE, которое означает, что ОС должна закрыть окно (дескриптор ghWnd). Тоже сообщение посылается к Windows и при выборе команды Закрыть из системного меню или после нажатия клавиш ALT+F4. Определив, какому окну принадлежит сообщение, Windows генерирует ответное сообщение WM_DESTROY, которое, попав в оконную функцию, завершает процесс графического отображения информации в окне(функция EndPaint) и с помощью процедуры PostQuitMessage генерирует последнее сообщение -WM_QUIT. Получив это сообщение, функция GetMessege возвращает нулевое значение, и цикл обработки сообщений заканчивается и программа завершается. Ввод информации может происходить не только с клавиатуры, но и с использованием манипулятора мышь. При этом ядро Windows, прежде чем поместить сообщение в очередь, проверяет, не исходит ли предыдущее сообщение также от мыши, так как в большинстве случаев необходимо знать лишь конечную точку перемещения мыши.Таблица45

Константы сообщений Действие над мышью WM_MOUSEMOVE Перемещение WM_LBUTTONDOWN Нажата левая кнопка WM_LBUTTONUP Отпущена левая кнопка WM_MBUTTONDOWN Нажата средняя кнопка WM_MBUTTONUP Отпущена средняя кнопка WM_RBUTTONDOWN Нажата правая кнопка WM_RBUTTONUP Отпущена правая кнопка WM_LBUTTONDBLCLK Двойное нажатие левой кнопки WM_MBUTTONDBLCLK Двойное нажатие средней WM_RBUTTONDBLCLK Двойное нажатие правой кнопки

83.Методы SetWindowLong, SetClassLong, SetWindowPos.

Функция SetWindowLong заменяет атрибут стpуктуpы класса окна новым значением и возвращает предыдущее значение класса окна. Имеет следующие паpаметpы: hWnd-дескриптор окна; nIndex-одна из констант: GWL_EXSTYLE, GWL_STYLE, GWL_WNDPROC или положительное смещение в байтах для доступа к дополнительным четыpех байтным значениям; dwNewLong—значение атрибута замены. Функция SetClassLong (ByValhwndAsLong, ByValnIndexAsLong, ByValdwNewLongAsLong) –устанавливает в нужное поле структуры WndClass соответствующее значение и возвращает старое значение поля или ноль, если ошибка. Она является парной функцией к функции GetClassLong. Имеет следующие параметры: hWnd-дескриптор окна; nIndex-одна из

Констант GCL_XXX из функции GetClassLong, определяющее нужное поле; dwNewLong-поле замены. Функция SetWindowPos (ByValhwndAsLong, ByValhWndInsertAfterAsLong, ByValx AsLong, ByValy AsLong, ByValcxAsLong, ByValcyAsLong, ByValwFlagsAsLong) –устанавливает окно в новую позицию. Имеет параметры: hWnd-дескриптор окна; hWndInsertAfter-дескриптор окна, перед которым в списке Z-order (определяет порядок расположения элементов окна) будет вставлено окно hWnd или одна из следующих констант:•HWND_BOTTOM –поместить окно на дно списка Z-order;

•HWND_TOP –поместить окно на верх списка Z-order; •HWND_TOPMOST –поместить окно поверх всех окон;

•HWND_NOTOPMOST –убрать окно с позиции«поверх всех окон».

84.Четыре способа создания и удаления контекста графических устройств.

Существуют 4 способа получения и удаления контекста устройства, каждый из которых определяется парой под программ. 1. Для перерисовки части рабочей области окна используется функция BeginPaint (ByValhwndAsLong, lpPaintAsPAINTSTRUCT)AsLong Эта функция возвращает дескриптор экранного контекста рабочей области, требующей обновления в ответ на сообщение с константой WM_PAINT. Размеры области определяются ОС Windows в структуре PAINTSTRUCT. Сообщение с константой WM_PAINT должно обрабатываться оконной функцией приложения. Удаление контекста, созданного функцией BeginPaint, осуществляется процедурой EndPaint (ByValhwndAsLong, lpPaintAsPAINTSTRUCT)AsLong, завершающей операцию по отображению в окне hWnd графической информации. Сообщение c константой WM_PAINT посылается ядром Windows, если необходимо перерисовать часть(или всю) рабочей области окна. Например, когда окно было частично перекрыто другим окном или часть окна потеряла свое прежнее содержимое и требует обновления. В этом случае ядро определяет ту область, которая подлежит перерисовке, и посылает программе ее координаты в структуре PAINTSTRUCT и сообщение с константой WM_PAINT, в ответ на которое прикладная программа должна сама восстановить содержимое окна. Первый раз прикладная программа получает это сообщение при вызове функции UpdateWindows. Оно также посылается и в случае изменения размеров окна, если стиль класса окна указан с атрибутами CS_HREDRAW иCS_VREDRAW. Попробуйте удалить функцию UpdateWindows из программы, основанной на обработке сообщений, и Вы уже не сможете работать с константами сообщений WM_RBUTTONDOWN, WM_CHAR, WM_KEYDOWN.2. Для перерисовки всей рабочей области окна используется функция GetDC(ByValhwndAsLong) AsLong Эта функция возвращает дескриптор контекста этой области. Удаление контекста, созданного функцией GetDC, осуществляется другой функцией ReleaseDC(ByValhwndAsLong, ByVal hdc As Long) As Long,которая освобождает контекст указанного окна и делает его обще доступным.

3.Для перерисовки всего окна, включая области, занятые заголовком, рамкой и меню, используется функция GetWindowDC(ByValhwndAsLong) AsLong Функции GetWindowDC в программе должна соответствовать функция ReleaseDC.

4.Для перерисовки всего экрана или для создания дескриптора контекста других графических устройств(принтера, плоттера) используется функция

CreateDC (ByVallpDriverNameAsString, ByVallpDeviceNameAsString, ByVallpOutputAsString,lpInitDataAsDEVMODE) AsLong,гдеlpDriverNameиlpDeviceName—имя драйвера и устройства;

lpOutPut-имяпорта ввода-вывода;

lpInitData-ссылка на

структуру типаDEVMODE, содержащую информацию о начальных установках принтера(плоттера). Функции CreateDC в программе должна соответствовать функция DeleteDC.

85.Основные характеристики контекста устройств. Способы задания цвета объектов в окне.

Во многих случаях стандартные параметры контекста нуждаются в изменении. Чаще возникает необходимость смены чертежного инструмента. Для этого в распоряжении программиста есть два способа: выбор инструмента из базового(встроенного, предопределенного) набора инструментов или создание собственного(логического) инструмента. Доступ к базовому набору(т.е. получение дескриптора инструмента) открывается функцией: GetStockObject(ByValnIndexAsLong) AsLong Полученный с помощью GetStockObject дескриптор базового инструмента затем включается в контекст с помощью функции SelectObject(ByValhdcAsLong, ByValhObjectAsLong) AsLong