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

89.Пример работы с базовыми шрифтами.

Если Вам необходимо изменить шрифт на один из семи базовых (предопределенных) шрифтов, то используют функции GetStockObjectиSelectObject. Пример88. Продемонстрировать работу с базовыми шрифтами. DimMyDCAsLong, S AsString, y AsIntegerDimFntAsLong, OldFntAsLong, FntName(10 To16)AsStringSubPrintFont(ByValf AsInteger)Fnt= GetStockObject(f)OldFnt= SelectObject(MyDC, Fnt)S = FntName(f)CallTextOut(MyDC, 10, y, S, Len(S))у= y + 20S = "ABCDEFGabcdeg0123456789АБВГДЕЖабвгдеж"

CallTextOut(MyDC, 10, y, S, Len(S))у= y + 20CallSelectObject(MyDC, OldFnt)EndSub PrivateSubCommand1_Click()у= 20'Начальное значение ординаты MyDC= GetDC(hWnd)ForK% = 10 To16IF K Mod2 = 1 ThenR= 1ElseR = 2EndIFCall

SetBkMode(MyDC, R)'Режим отображения прямоугольника

CallSetBkColor(MyDC, &H50FFF1 * K)

Цвет прямоугольника CallPrintFont(K)NextCallReleaseDC(hWnd, MyDC)EndSubPrivateSubForm_Load()Caption="Пример использования базовых шрифтов"BackColor= &HFFFFFFFntName(10) = "Oem_Fixed_Font"FntName(11) = "Ansi_Fixed_Font"FntName(12) = "Ansi_Var_Font"FntName(13) = "System_Font"FntName(14) = "Device_Default_Font"FntName(15) = "Default_Pallete"FntName(16) = "System_Fixed_Font"EndSub

90.Создание логического шрифта функциями CreateFont, CreateFontIndirect.

Создать собственный логический шрифт, доступный системе, на основе контурного шрифта можно с помощью функций CreateFontиCreateFontIndirect. Обе они возвращают дескриптор шрифта, который следует связать с контекстом функцией SelectObject, а после вывода текстовой информации удалить его из памяти функцией DeleteObject. Функция CreateFont имеет 14 параметров, а функция CreateFontIndirect-один параметр типа LOGFONT с теми же 14-ю полями данных.TypeLOGFONT

lfHeightAsLong' Высота шрифта

lfWidthAsLong'Средняя ширина строчной буквы lfEscapementAsLong' Наклон строки или символа lfOrientationAsLong'Наклон символа lfWeightAsLong'Жирность шрифта lfItalicAsByte'Признак курсива

lfUnderlineAsByte'Признак подчеркивания lfStrikeOutAsByte'Признак перечеркивания lfCharSetAsByte'Набор символов lfOutPrecisionAsByte' Точность отображения lfClipPrecisionAsByte'Отсечение lfQualityAsByte'Качество прорисовки lfPitchAndFamilyAsByte'Семейство шрифта lfFaceName(1 To32) AsByte'Имя шрифта EndType Назначение полей(параметров) структуры следующее. lf Height—высота символов. Значение, большее0 (до16384), указывает на высоту шрифта в пикселях. Если же это значение равно0, то используется умалчиваемое значение. lfWidth—ширина символов. Для пропорциональных

шрифтов означает среднюю ширину строчных букв. Если параметр равен 0, ширина выбирается пропорционально высоте символа. lfEscapement—угол наклона базовой линии символов или строк к горизонтальной оси в десятых долях градуса. Положительный угол означает поворот базовой линии против часовой стрелки. lfOrientation—этот параметр зарезервирован. lfWeight-коэффициент, указывающий на жирность шрифта: FW_THIN =100 'Очень тонкий шрифт

FW_EXTRALIGHT = 200 'Очень светлый шрифт FW_LIGHT =300 'Светлый шрифт

FW_NORMAL = 400 'Нормальный шрифт FW_MEDIUM = 500 'Утолщенный шрифт FW_SEMIBOLD = 600 'Полужирный шрифт

FW_BOLD=700 'Жирный шрифт

FW_EXTRABOLD = 800 ' Усиленный шрифт FW_BLACK = 900 'Тяжелый шрифт

lfItalic-определяет наклонность символов, когда равно 1.

I/Underline-определяет подчеркнутость символов, когда равно1.

lfStrikeOut—определяет перечеркнутость, когда равно1.lfCharSet-определяет набор символов: ANSI_CharSet=0(Windows-кодировка, поддерживает кириллицу); Symbol_CharSet=2 иShiftJis_Char-Set=128 содержат греческий алфавит, спец символы и различные пиктограммы, не поддерживающие кириллицу.

lfOutPrecision—задает точность представления символов на физическом устройстве. Рекомендуемые значения: Out_Character_precis= 2,

Out_Default_precis= 0, Out_Device_precis= 5, Out_Outline_precis= 8, Out_Raster_precis= 6, Out_String_precis= 1, Out_Stroke_precis= 3, Out_TT_only_precis= 7, Out_TT_precis= 4.lfQuality-определяет качество прорисовки шрифта и может иметь одно из значений: Default_Quality=0,Draft_Quality=1,Proof_Quality=2 (поумолчанию). lfFaceName-задает имя шрифта. Например, «CourierNewСуг».lfPitchAndFamily—выбор семейства шрифта. Рекомендуемые значения: Default_Pitch=0 (по умолчанию), Fixed_Pitch=1(моноширинный), Variable_Pitch=2 (пропорциональный).Обычно в комплект русифицированных версий Windows входит более 30 контурных шрифтов(TrueType

шрифтов), поддерживающих кириллицу. Среди них основными в работе с документами являются три шрифта: CourierNewCyr, ArialCyr, TimesNewRomanCyr. Все контурные шрифты имеют по 4 начертания: обычный, наклонный, жирный, жирный наклонный. Шрифт ArialCyr-это пропорциональный шрифт без украшений, используемый в основном для заголовков, оглавлений документов. CourierNew-это моноширный шрифт, похожий на шрифт канцелярской пишущей машинки, используемый в оформлении таблиц. TimesNewRomanCyr-изящный в начертании шрифт, используемый при оформлении документов.

91.Создание логической кисти функциями CreateSolidBrush, CreateBrushIndirect, CreatePatternBrush, CreateHatchBrush.

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

1. CreateBrushIndirect(lpLogBrushAsLOGBRUSH)-создает произвольную кисть. Аргумент lpLogBrush—это структура данных типа LOGBRUSH:TypeLOGBRUSHlbStyleAsLong'Стиль кисти lbColorAsLong' Цвет

lbHatchAsLong' Способ штриховки(орнамент) EndType

Стиль кисти lbStyle может иметь одно из следующих значений констант :

BS_SOLID=0 –сплошная кисть;

BS_NULL=1 –пустая кисть;

BS_HATCHED=2-штрихующая кисть;

BS_PATTERN=3 –кисть использует растровое изображение для заполнения фона;

BS_DIBPATTERN =5 –кисть использует аппаратно-независимый образец фона.

Если lbStyle=BS_SOLID, то значение поля штриховки lbHatch игнорируется. ЕслиlbStyle=BS_PATTERN, то поле lbHatch должно содержать дескриптор растрового изображения.

2. CreateHatchBrush(ByValnIndexAsLong, ByValcrColorAsLong) —создает штрихующую кисть. Например, создадим кисть с цветным орнаментом и заполнимим прямоугольник :Brush=CreateHatchBrush(hs_Cross, RGB(50,50,50)) OldBrush=SelectObject(MyDc, Brush)

CallRectangle(MyDc,50,50,500,400)'Рисуем прямоугольник

CallSelectObject(MyDc,OldBrush)CallDeleteObject(Brush)

3.CreateSolidBrush(ByValcrColorAsLong) –создает сплошную без орнамента кисть.

4.CreatePatternBrush(ByValhBitmapAsLong) –создает кисть, заполняющую область узором растрового изображения.

92.Пример работы с базовыми и штрихующими кистями.

Продемонстрировать работу с базовыми и штрихующими кистями.

PrivateSubCommand1_Click()

DimMyDCAsLong, OldBrushAsLong, BrushAsLongMyDC= Form1.hdcFori%= 0 To5CallSelectObject(MyDC, GetStockObject(i))CallRectangle(MyDC, 10 + 60 * i, 30, 60 + 60 * i, 80)NextFori = 0 To5'Рисуем заштрихованные прямоугольники

Brush= CreateHatchBrush(i, RGB(255, 0, 0))OldBrush= SelectObject(MyDC,Brush)CallRectangle(MyDC, 10 + 60 * i, 100, 60 + 60 * i, 150)CallSelectObject(MyDC,OldBrush)CallDeleteObject(Brush)NextCallReleaseDC(hwnd, MyDC)

End SubPrivate Sub Form_Load()Caption= "Пример использования базовых и штрихующих кистей" BackColor= &HFFFFFFEnd Sub

93.Создание логического пера функциями CreatePen, CreatePenIndirect.

Перо используется для вычерчивания прямых линий многогранников, окружностей, дуг и т.п. Перо характеризуется цветом линии, толщиной и стилем. По умолчанию используется перо черного цвета, толщинойв1 пиксель, и стиль PS_SOLID. В базовый набор инструментов входят три константы перьев: WHITE_PEN=6, BLACK_PEN=7 и NULL_PEN=8 (перо, которое не рисует). Любой из этих инструментов выбирается и устанавливается в контекст устройства функциями GetStockObjectиSelectObject. Логическое перо, имеющее собственный стиль, цвет и толщину, создается одной из следующих функций.

1. CreatePenIndirect(lpLogPenAsLOGPEN) AsLong-создает перо, определенное заданной структурой типа LOGPEN:

TypeLOGPENlopnStyleAsLong' Стиль пера lopnWidthAsPOINTAPI ' Ширина пера lopnColorAsLong' Цвет пераEndType В структуре POINTAPI y-координата не используется. Поле lopnStyle должно содержать одну из 6 констант стилей: PS_SOLID = 0 {сплошной}; PS_DASH = 1 {пунктир}; PS_DOT = 2 {точки}; PS_DASHDOT = 3 {точка-тире}; PS_DASHDOTDOT = 4 {точка-точка-тире}; PS_NULL = 5 {невидимые линии}; PS_INSIDEFRAME = =6. При этом следует отметить, что стили PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT определены только при толщине пера, равной единице. Толщина пера задается целым числом.

CreatePen(ByValnPenStyleAsLong, ByValnWidthAsLong, ByValcrColorAsLong) –создает перо явным определением параметров.

94.Основные API-функции ядра для работы с пером.

В Visual Basic у объектов формы и Picture имеются методы, позволяющие рисовать. Однако они работают не так быстро, каких «двойники» из набора API-функций. Система Windows содержит много графических объектов и достаточное количество API-функций для рисования и заливки изображений. Рассмотрим некоторые из них, которые помогут повысить быстро действие приложений, создаваемых в VisualBasic. Перечислим некоторые полезные API-функции при работе с пером.

MoveToEx(ByValhdcAsLong, ByValx AsLong, ByValyAsLong, lpPointAsPOINTAPI) –перемещает перо без отображения в заданные x,y(координаты окна);

LineTo(ByValhdcAsLong, ByValx AsLong, ByValyAsLong) –перемещает перо с отображением линии от предыдущей координаты;

Rectangle(ByValhdcAsLong, ByValx1 AsLong,ByValy1 AsLong, ByValx2 AsLong, ByValy2 AsLong) –вычерчивает и заполняет текущей кистью прямоугольник с x1,y1 —координатами левого верхнего угла и x2,y2 правого нижнего угла.

Ellipse(ByValhdcAsLong, ByValx1 AsLong,ByValy1AsLong, ByValx2 AsLong, ByValy2 AsLong) –вычерчивает и заполняет текущей кистью эллипс, вписанный в прямоугольник с x1,y1 –координатами левого верхнего угла иx2,y2 правого нижнего угла.

RoundRect(ByValhdcAsLong, ByValx1 AsLong,ByValy1 AsLong, ByValx2 AsLong, ByValy2 AsLong,ByValx3 AsLong, ByValy3 AsLong) –вычерчивает и заполняет текущей кистью прямоугольник с оскругленными углами, которые определяются шириной x3 и высотой y3 вписанного эллипса. ♦Arc(ByValhdcAsLong, ByValx1 AsLong, ByValy1 AsLong, ByValx2 AsLong, ByValy2 AsLong, ByValx3 AsLong, ByValy3 AsLong, ByValx4 AsLong, ByValy4 AsLong) –вычерчивает дугу эллипса. x1,y1,x2,y2 –координаты описанного прямоугольника. x3,y3, x4,y4 –координаты начальной и конечной точки дуги, которые в общем случае могут располагаться и не на дуге эллипса, вписанной в прямоугольник. Вычерчивание осуществляется против часовой стрелки

Chord(ByValhdcAsLong, ByValx1 AsLong, ByValy1 AsLong, ByValx2 AsLong, ByValy2 AsLong,ByValx3 AsLong, ByValy3 AsLong, ByValx4 AsLong, ByValy4 AsLong)-вычерчивает и заполняет текущей кистью сегмент эллипса.

Pie(ByValhdcAsLong, ByValx1 AsLong, ByValy1AsLong, ByValX2 AsLong, ByValy2 AsLong, ByValx3 AsLong, ByValy3 AsLong, ByValx4 AsLong,ByValy4 AsLong)-вычерчивает и заполняет текущей кистью сектор эллипса.

FloodFill(ByValhdcAsLong, ByValx AsLong, ByValуAsLong, ByValcrColorAsLong)-заливает текущей кистью область, ограниченную цветом crColor. x, y —внутренняя точка области.