287 109 50MB
Russian Pages 369 Year 2005
Дм ит р л В аи м д и
й Куза р Ша пор
н в
П Р О ГМ А М И Р О В Н И А
Е
Win32 API
- т нк а С ер б ту П
г
«Б-В Х гр уб е т П
» 2005
zyxwvuts
ДУ Б
К 681.3.06 К 32.973.26- 018.2 К 8 9zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA н Д . Я. , Ш а по р П р о г ам и р о в ан и 2005. —3 6 8 с : и л . уК з а
К 8 9
в В . Н . е Win32 API в Delphi. — С П б .
: ВХБ- П регбту
,
ISBN 5- 94157- 535- 1 н Р ре м с а о т о п ир н м е и е з а ир л ч н ы х и й е н фр о с т в н п и р д га о лк м а ри н в г о я Windows (Win32 API) пр и ркзаобрт е п ин р ж о е л з о нв а и е м Borland Delphi. Оп инас ы онс во ы робат ы с API. П норб д н ы пов с р ы и п к ос г чт ар е о п и рн ме и я API пр и наозсди и п и р н жо е л то б а р ы с эонр ктел о й о п тч й (MAPI), с о смва тс дер и н к мо у и ц а и ь л мд т е у а (MMCI), гиксфчеар м й и е о с ф рн т м и др . ирМеат с т еа ж д я н д ы я л гм а и и к с пч е м т а р и п ри м а е . Н а -мокпта иксд ол ж н е ы н до ы и х с е тк с е ы п ир м о в е , марпго ы и и м до ы н х б е ек и т .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ялД
а поктвг д
и ияианзд
Г лав н ы й реадкот р З ам . главн ог о реадкотр а З ав . раекдц и е й Р еа д к о т р К о м п ь ю е рт н а я верскт а К о р е к от р Д и з ай н сери и О фо р м л е н и е облож к и З ав . п рои з восдт м
е и Лз ц н мрФо а "Б- В"Х г р у б ерт П
I S B N 5- 94157- 535- 1
Д У К 681.3.06 К 32.973.26- 018.2
Кукваодн Шишг »
ийгро Гр
Динбо ап инЛ
Т ан т ь я ьг и л О а и Зн д ын И я г р оИ а йН и к л о
Сгрикнео ивтера м Д
Тйон иач zyxwvutsrqponmlkjihgfedcbaZYXWVUT
Цквшаоы улр ы
zyxwvutsrqponmlkjihgfedc
Т ксвирхе
о в пта еч ь 22.09.05. . Усл . печ . л . 29,67. 1 325 , ул . Еасени , 5Б .
- о н т ар и о С е к с ч и м г д л о э п и е зиенч лю ак е н а и ц к у пд ор No 77.99.02.953.Д. 006421.11.0 4 о т 11.11.2004 г .н а вд ы о Фо н еальр д п о роз адн у в сер ф е зти ща ы па р в птелибро й и и ч лу боп лга о с ы в о гт о в ГУ П "Ти фар г о пи 199034, Ст- к ан гр еутбП
й лд я й (TAPI), л о сп р в е п с ар о е иб л о -
:
Е к и а нт р е ь г р оИ
я И Д № 02429 о т 24.07.00. Пнаси п д о т 70x100Vie. та еч П ь есаят он ф а ри Т ж 3000 эзк . З а к з № , 194354, Ст- к ан гр еутбП
ат н е ч п О
-
втиос м гаорп Б
п у Гр
о п ор й с ипсьло о ощевс
х о вит з о паи д
ю й соб ж лу я чеалвок
й .
в я "На к уа , 9 ляи н
° к У О Оормнфел и е
" , 12
за
н
Д - я • • Ш паор , ивьлетс аз д
в В . Н . , 2005 о "БВ-Х "ргПбуе т
, 2005
л Ог а в е и н
нВе вд и
е
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
е
Г лав э л е к р то н ы В ев н д и Д о с т и н вс т П ко д л ю ч е н и пО т р а в к Р аб о т Р або т К од
Г а лв
8
а 1. MAPI - и н йрефт х сщоб не и
с п рог ам и рован и й
В в ен д и И н ер тф й с
Р або т О сн о в н ы К о н ф и р гу о в а н и
кО р т ы и Ба з о в ы В с п о м е га л т ь н ы
й 9
е
9 11 12 12 23 28 33zyxwvutsrq
а и н коаетдс и Simple MAPI е Simple MAPI к п роект у а с о б щ ен и я н а Simple MAPI а с ардесн о й кн и ог й н а Simple MAPI а с со бщ ен и ям и н а Simple MAPI ы ош и бо к Simple MAPI
а 2. TAP I - ией фетрн я аб о т р ы с теоин лф
лд
я п ри ложне и
е в TAPI ы и уровн й уро в ен
с оианвр м а рог п
я о жл е и н р п
й
й 36
36 37 Ба з о в ы 38 В с п о м е га л т ь н ы ь 39 Р а с ш и р ен ы й уровен ь 40 а с усрто й свтам и ли н и й 40 е ш аг и работ ы с телфон и е й 40 е и н арсотй к а ср т о у й св т а к о м н у и к ац и и 41 р укСт а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA VarStringTAPI 42 Т р и манех и з м а увеодм л н и й (со бщ ен и й ) Т РА ! 44 В ер с и о н о с т ь TAPI 46 О п р елд н и е с п о с б н о се т й телфон и и 47 е р с то у й в с т а ли н и и 49 Д ай т е м н е ва ш ID 50 е фн у кц и и TAPI 50 е н уф к ц и и TAPI 54 и п р о г ам и р о в ан и ь й р оу в ен
я TAPI
zyxw
гл Оа в е н и
О б р ако т
Р а з м ещ ен и
П р и н и тя
З а к л ю ч ен и
а с о б щ ен и й ли н и и TAPI LineCallback — н уфкц и я обра окт и с о б щ ен и й ли н и С о б щ ен и я ли н и и ТР А 1 П о р яд к п поуслтен и я с о б щ ен и й л д я щя о д в х и х и и оящсдх и Ф н у кц и и и ср кут ы TAPI, связ ан ы е с обраокт й е и оясщдх и х вы з ов в TAPI Ф о р м ат ы н о м ер в телфон о в в TAPI с и А ен т т е лт ф о н и и Ф н у кц и и ас и сент а е л т фо н и и с а нт У о в л е н и е вы з ов а с п ом щ ь ю н и з к р о ву н е в ы х н уф к ц и е воящдх и х вы з ов в П ои с к з аи н ерт сован ог о п р и л о ж ен и я Н е и з в не с т ы й реж и м н о с и ел т й П ри ори ет т реж и м о в н о с и ел т й О б яз а н о с т и п ри лож ен и я , п ри н и м аю щ ег о я що д в х и е Р е лг а м н т р аб о т ы п р и л о ж ен и я , оп релдяю щ ег о жр е и П р и н и ят е воящдх ег о вы з ов а З а в ер ш ен и е вы з ов а Ф н у кц и и и ср укт ы TAPI, п уравляю щ и е п р и ем о м е
Г а вл
а 3. M CI- ей ф етрни
В в е нд и И н ер тф й
с дл
я аб о т р
х вы з ов с о б щ ен и
в й ,
й ли н и
вы з ов м н о с и ел т
и
ы
вы з ов
й
в
а
с к ом ан д ы
х р ост и
к и ком ан -д со бщ ен и
К од З а к л ю ч ен и
е срток ы со бщ ен и й ы и драй вер ы MCI- ростйу в я MCI- ком ан д и и м акрос ы MCI я MCI е гла ф и дл я MCI- ком ан д ы а дн ы х MCI а и сп оль з ован и я П р о и рг ы в а н и е wave- айф ло в П р о и гр ы в а н и е MIDI- афй ло в З к в уо з а п и с ь П р о и гр ы в а н и е Audio- CD П р о и гр ы в а н и е ви еодфай ло в AVI ы ош и бо к MCI е
Г а вл
а 4. Video for Windows - ей ф етрни
К к и р ат В в ен д и са н т У о в к
й экрс у с е в Video for Windows а и требован и я к работ е
118 118 119 120 121 123 128 130 133 133 141 142 147 150 153 154 157 162
й MCI
с лд
я аб о т р
58zyxwv 59 60 65 66 71 71 73 74 75 93 93 95 96 97 98 100 102 105 117zyxw
118
е К о м ан д ы К о м ан д
Ти п К лас и ф к ац и Ф н у кц и С о б щ ен и О бщ и р у к Ст П р а ик т
ы с мие дмт ьлу
и
ы с ве ди
о
163 163 164 164
гл Оа в е н и
И сп о ль з о в ан и Delphi и н фу кц и Ф н у кц и Ф н у кц и Ф н у кц и С рто к в ы Ф н у кц и Ф ну кц и Ф н у кц и З а к л ю ч ен и е
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
и и и и и и
м Windows API
е сп р ав о ч н о й с и ем т ы п о фн у кц и я и API управлен и я о к н ам и ввоа/д вы вод а в фай л в од а е н уф к ц и и и н уф кц и и аотм в работ ы с бефроу м о б м ен а си семт н о й и н фо р м а ц и и каркети , рсоку а и иконо к
П о ли ж е р н
. О сипан
ые П н т м д р
й к а у з те л
е к-так п ом сик д ь
а
300 301 302 314 331 337 343 347 355 362zyxwvuts 363 364
и е н вд В
е
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
в а жУ е м ы й ч и ае л т ь , в ы дер ж и т е в к ра у х к н и гу , рас к з ы ваю щ у ю о вз аи м о е дй с в т и и Delphi с раз ли чн ы м и и н ер тф й с а м и п р и к лн а д о г о п р о г ам и р о в а н и я (API). В н е й м ы п оасрт ли с ь о з н ак о м и т ь ва с с р а з л и ч н ы м и API и п ока з ат ь р аб о т у с н им и в Delphi. Н ам и н е сатв и лас ь з ач д а п о рд б н о и п о л н о ьс т ю о п и сат ь к а жы д й и н е р ф тй с п р и к л на д о г о п р о г ам и р о в ан и я , д а и э т о бы л о б ы н ев о з м о ж н о в рам к х но д й кн и г . С коре е в с е ог , е е м ож н о бы л о б ы а ох р акет и з о в ат ь к а к в оящ д у ю ч и ел а т я в ми р API. He сек р т , чт о в н асотящ е е в рм е я сщ у е с в т у т о гр м н о е к о л и ч ве с т о кн и г п о Delphi, н о , к со ж ален и ю , бо ль ш а я ч аст ь и з н и х п о с в ящ ен а в о п р са м в и з а л уь н о г о п р о г ам и р о в ан и я . О ч ен ь ч аст о в н и х в р с е тч а ю с т я р аз ф ы ит п а "воз ь м и т е к о м п о н ен т Tlabel и з п али р т ы к о м п о н ен о т в и п ол ж и т е ег о н а фо р м"у . оврт А ы н и в кое м счлау е н е п р ио т в так и х кн и г , н о п ракит а п оказ ы вает , чт о м н оиг е и з н и х п рост о б л уи д юр у т рду г рдг а у . С оти т а кт ж е п у о м ян ь т у , чт о бо ль ш и н свт о и з н и х п н р де а з н а ч ен о дл я н о в и ч к о в . М ы ж е в сво ю оч ер д ь п о с а тр л и с ь о тй и н ем н о г о в у в з а и м о е й д в с ти я Delphi с раз ли ч н ы м и о ср т н у о т с а тн а д р о т в и вы брал и ем т API н е слчуай н о . Дел о в от м , чт о в н аостящ е е в р ем я м ал о м ае р т и а л о в , п о с в ящ ен ы х Delphi и API, к том у ж е бо ль ш а я и х ч аст ь о п б лу и к о в а н а н а ан г ли й ск о м яз ы к е , и эо т й кн и ог й м ы п о ас р т л и с ь о тх ь к а - т о з ап о лн и т ь м ву ак , п р и сю в т у щ и й в к о м п ь ю е р тн о й л и е рт а у . М ы п рек асн о п о н и м ае , чт о он а вря д л и бед у т сжлуи т ь п о лн ы м к р о у в с тд м л д я р а з р а б о чт и к о в , и сп оль зю у щ и х с о в т ес ю у щ и е API, н о он а м о ж е т с аь т , и н аедм ся , сант е т п ре ы в м ш а го м , котры й з а свт и т п р о г а м и со т в , и сп оль зю у щ и х Delphi, н ач т ь и з ч а ту ь р аз ли ч н ы е API. В ед ь н а Delphi м ож н о соз адв т ь н е толь к о р аз ли ч н ы е ок н ы е п р и л о ж ен и я и п ри лож ен и я л д я р аб о т ы с баз м и ад н н ы х , н о и слож н ы е п р о фе с и о н а л ь н ы е п р и л о ж ен и я , н ап ри м ер , дл я работ ы с о з вк у о м , ви ед о и л и э л ек рто н н ы м и к о м н у и к а ц и ям и . Те м боле е ч т о а тк и е п р и л о ж ен и я в б о л ь ш и н св т е и сп о ль зю у т со т р н н и е API. И кажыд й в уа ж ю щ и й с бе я п р о гр а м и с т од л ж е н есл и н е з н аьт , т о отх я б ы раз би рьатс я в м н о г бр аз и и р аз ли ч н ы х API. И а кт , м ы н еадм ся API лд я п рогам и сот гр а м и р о в а н и
, чт о анд а я кн и г в и дас т толч . Уачд и в ам !
а п ожслиу к л д я с оу в е р ш е н св т о а н и
т п е в т о иу д л е
м п о раз ли чн ы я з н ан и
м й в п ро
-
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
гл Оа в е н и
П р а ик т
а и сп оль з ован и О ктр ы ит П ч о ле н у и Д оу с т П о чл уе н и Р аб о т Р аб о т С ро а х н е н и О б р а ок т
е фа й л о е и н оф р м а ц и п к п окта е и н фо р м а ц и а с к ард м и а с к ард м и е п о тк а о ш и бо е
З а к л ю ч ен и
Г а вл
а 5. GDI+ — есикч аф р г
В в енд и са н т У о в к О б ъ е нк т а П ер в ы К л ас
е ы К л ас К л ас К лас К л ас К л ас К лас К лас К лас К лас К л ас К л ас К с ал К лас К с ал К лас К лас К с ал К л ас К л ас К лас К л ас К л ас К с ал К с ал К с ал К с ал К л ас К с ал
я в AVI и и з з аогл вк
а афй л
а AVI
м и о п отк . С роанх ен и . С роахн ен и в в оелдьт н ы к VFW
е е е л од ь т н ы е BMP- афй ло х фай л
й е й ф е т рн и
х краод
в в форм а в в AVI- офрм а
т BMP т
х
с о нв г
о о п к е ил н
я
е в G DI+ а и требован и я к рабо т е я м о е лд ь би бл оект и ш га и G DI с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA AdjustableArrowCap с Bitmap с BitmapData с Brush с CachedBitmap с CharasterRange с Color с CustomLineCap с EncoderParametr с EncoderParametrs с Font с FontCollection с FontFamily с GDIPlusBase с Graphics с GraphicsPath с GraphicsPathlterator с HatchBrush с Image с ImageAtlributes с ImageCodecInfo с installedFontCollection с LinearGradientBrush с Matrix с Metafile с MetafdeHeader с PathData с PathGradientBrush
165 165 167 170 171 184 188 198 203 205zyxwvuts
206 206 207 208 209 212 212 213 213 213 213 213 214 214 214 215 215 215 215 215 215 216 216 216 217 217 217 217 218 218 218 218 218 218
zyxwv
гл Оа в е н и
с РzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA пе с Point с PointF с PrivateFontCollection с Propertyltem рдеАса"т . е в таб л . 1.5.zyxwvutsrqponmlkjihg
е к о н е к т сн о г
я опт р а в к , до бав и в в н аш
и со в в н ег о е п ри -
я с мвду ь в п ерво
я м
Глав
20
Струк
а TMAPiRecipDesc нелватсдрп
а в Object Pascal следу ю щ и
I zyxwvu
м омозарб
:
PMapiRecipDesc = "TMAPiRecipDesc; MapiRecipDesc = packed record ulReserved: Cardinal; ulRecipClass: Cardinal; lpszName: LPSTR; lpszAddress: LPSTR; ulEIDSize: Cardinal; lpEntrylD: Pointer; end;
TMAPiRecipDesc = MapiRecipDesc;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG
Он
а с о е др ж и а и м е
р ут
т и н фо р м а ц и т с юл е у д щ и
ю о п очелаут е п оля , п расевдтлн ы
е и л
е
ulReserved
О п и с а ни
е
о лП в но л
ulRecipClass
е з ар е в и р о в ан ь
. Зенчаи
о и т а к И де н ф т
р тип
lpszAddress
с — пелотачу
;
и с о б щ ени я
ь о п ик
;
и blind copy
, щас одержу
ю им
я пеолтачу
я (опрта
-
)
е л за т к У
ь н а сроутк , сща одержу . Знечаи е дан о г от м , тч о дан о е п о ле , в о с но в м се т я с и емт о й д л я о щ в я дх и с о б щ ени й п р о г ма м и с т де о лж рд а е с в с ледующ е м рм фо еат [ ти п а д р е с а ] :[ э л е к тр о н ы
ю E- mail- реда о пол я оечн ь в е ли о к , и с позуельт х с о б щ ени й . Дл н п р и н уд е л ьт : й адр е с ]
(опртваиеля)
ач
о
;
ь с о б щ ени я ь о п ик
ь н а сротук е вя л и т
а су н а о т в л е
ь с о б щ ени я
й пелотачу
M API е е — пелотачу
е л за т к У
я в с е гд
: й пелотачу
M APIJTO — первы MAPI в е
е по л
а п о е л я та у ч
M API ORIG — о с н в о
lpszName
е с о б щ ен и я . кСрут . 1.6.zyxwvutsrqponmlkjihgfedcb
1.6. zyxwvutsrqponmlkjihgfedcbaZYXWVUT Л ОП Я с т ртку р ы TMAPiRecipDesc zyxw
аТ б л и ц По л
и опт рави елт е в таб л
дг е в тип е рд а е с е SMTP, напри м ер
а за ку
н п р о кт
л о п т р ав ик
с п е о л та чу
я о в
, дел я и запо лня я исощядх и о су на о т в и
, в нша е
х ь
м с ул
-
:
SMTP:demoSmail.ru ulEIDSize
за м Р е
р в байт
х а з еу к л т
я ulEIDSize
lp Ent r ylDzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е за л т к У ь н а о и ат р к д е н ф , и с позуельм ы й Simple MAPI, о т чб ы уснаотви ь п е о л та чу я с о б щ ени я
MAPI - и нт е й рс ф
о рВ т с о е рд ж а щ а
пр о г ам м и р о вани я
й р о ку й т с
преин лойж
, расм ит ваем о
элетк р о нхы
й н ма и
, ясвлеят х в л о ж ен и я
ю о прик реп л н ы
я и н фо р м а ц и
с о б щ ени й
я р ук т с
21zyxwvutsrq
а TMAPiFiieDesc, :
х в с о б щ ен и
PMapiF ileD esc = ^TMAPiFiieDesc; M apiF ileD esc = packed record ulR eserved: C a r d in a l; flF la gs: C a r d in a l; n P o sit io n : C a r d in a l; lpszPathN ame: LPSTR; lpszF ileN am e: LPSTR; lpF ileT ype: P o in t er ; end; TMAPiFiieDesc = M apiF ileD esc;
р С ку т
а и ме
т сюлеуд щ и
е п оля
, п расветдлн ы аТ б л и ц
ол П
. 1.7. zyxwvutsrqponmlkjihgfed
е в атб л 1.7. ПЛО Я
TMAPiFiieDesc zyxwvutsr
с т ртку р ы
О п и с а ни е е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
ulReserved
о Пл но л
f lFlag s
е з ар е в и р о в ан
. еничЗа
е по л
Мсак
а аго в фл т быт
м о уг
, опис ывюащ и
х ти
ь уснаотвле
о в
и н е усанотвле х
с лЕ н да ы
:
й OLE- тек объ
.
н н и оди
н флга
, т о вени ло ж
nPosition
е н и оП л ж е файолв- ени волж й в с о б щ ени M apiM essage.lpszNoteText
lpszPathName
е за л т к У
lpszFileName
е л за т к У ву и д
ь н а сруотк
, сща одержу
ь н а сруотк т пе л о та чу lpszPathName, ес л ни е н е здан о ил lpszPathName
иТ н тя
п й ла фа , а к
. с л Е к н е рса познаы
о о з н а к о м л ен и и в ы может н н а прилагем о
. В дано е флаги
м парм рет
е
;
M API_OLE_STATIC — синтчаы
П о сл е н еб о л ь ш о г Р е з л ь уа т т м оердн и з ац и ко д расп о л ж е
а ус ан о т в л е
п вени ляо ж
ы с леюдущ и
M APIJ DLE — OLE- тек об ъ
lpFileType
я в с е дг
ь
ю понлы
, сща оедруж ь с о б щ ени я и и с п з е о у т ьл и усанот влено и з ен ча и
я м оер д н и з и е р у е н а б л ю а тд м к о м п а -к т и д с к
е — про с т . Ис пзоеутль й пту
о N i l , фай й с и е мт о
м н аш ь н а рис е в калтог
л
я в п о л ь к файл
е
у
ю им я ай л ф . Дано . е М ож т с ьо л и т а ч я врем ены й файл , ка к N i l , т о ис пзоеутль е уснаотвле й о перцаи о н
й фай
е им я файл я о т им ен . с л Е и з н еа ч я им л б де у
т во с при
а и в я и з -
й
е п ер в о е п р и л о ж ен и е . . 1.2. П олн ы й и но д с х ы й е Source\ Ch01\ Ex02.
1zyxwv
ав Гл
22
: |D emo3@mait ru
йа Ф л Пр а в к а Вн д В с а вт к а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
о рм Ф а
т
ер в и С
с
оС б щ ени
е
"M zyxwvutsrqponmlkjihgfedcbaZYXWVU zyxwvu M zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG | п От р а в и т
[ И с п о лз ь в а н и
е Simple MAPI e п р о аетк
) КО М У
Щ
ОК П И Я
• Твнв
х Delphi.
:
war «HTbi\ Doc1.doc
ill M
:
т е й и р н фт й с в елно жы м
Г ' тларявОг
ь сраз
с Simple MAPI д л и файлм и м енсо вжт
[к..... ' Отпв а р
у
ь ь
я у
- :• .- • :• • • ;.< ';'. •
В с т а в и т
ь
1
1
• • , ' - ~
• * ^: i- ;, Пр о вер и т
ь рП л е о п и с . .
. ;
]
е S ^ h MAPI в п е с е т а
Й ^ 0о с 1.с * > :(14
Ami
ill й п ир м е
1 0
л
х DHph
2К6 )
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF ]Ж к ч z i ^ *-
р и с п о л ьз у е
и с о о б ще ни
а де р с а т о
р и с позлуеь
. • ' . . '-
]Ис п« окль «1| |
•
Да н ы
й при м е и с о б щ ени
р
| Oemo2ffims(.ru: Oemo3Uimal.ru
; ;
о та пр в к
анД ы о пт р а в к
йч-
• | р»дп Д м !* !.. (01 х | ZyXEl- Omni56K DUO(COM). PlugElay
• f TAPI Пи т янир
р аЗ е иг с т о в а и р т П ня ев т О ине до С е диаРзнеъ и е : (з аняот
н вщяод хи е вощядх ег т н а вызов.. е уоне.влас т .
й вы зо о вызо ва. .
в .
. . (AnswerCallTAPI.exe) )
i j t т и т а р к е р П
ь I • Г TAPI Пи т янир
е вощядх и
х вызов
в
ZyXEL Omni66K DUO(COM). PlugElay р аЗ е иг с т о в а и т я ни р П ев т О ине до С э
н вщяодх и е вщоядх ег т н а вызов.. е уо.нелв а ст . : (зо тяна в звераш ен
17 иероп тв А
Ри с
С о к р а щ ен ы п р о г ам Л ист ин пр и прие м
у пр
й к о д п р о ц уе д и п ри ем е вы з ова
г 2.4. Прим е е взыов
р проец уд
. 2.8. Принтя
ы о б р а ок т , п рсеадтвл ы обра от к
в .
. (AnsweiCallTAPI.exe ]
е ад з и ъ н е и е
В ы зо
й вы зо о вызов.а .
. ) .
м
е вохдящ ег
о вы зо в
и с о б щ ен и н в ли ст н г и соебщни
а
й TAPI, п опсут аю щ и х в е 2.4.zyxwvutsrqponmlkjihgfedcbaZYXW й TAPI
а
/ / О б р ка о т а щ бо с н е и й TAPI procedure lin eC allback(h D evice, dwMsg, dwC allbackln stan ce, dwParaml, dwParam2, dwParam3: Lo n gln t ) ; {$IFDEF WIN32} st d c a l l ; {$ELSE} exp o rt ; {$ENDIF}
104
Глав
var Str : string; begin with FormMain do begin hCall := THCall(hDevice); // До т п и р к с е р // ГП У Р А СИ Н Е Щ Б О Й LINE_CALLSTATE if dwMsg - LINE_CALLSTATE then { н е м з И о ч- о т т begin case dwParaml of // П инечанзанер е LINECALLSTATE_OFFERING : Begin MemoLog.Lines.Add('З авори тсигера н и щ я д о х в BitBtnAnswer.Enabled := True; IF CheckBoxAuto.Checked then BitBtnAnswerClick(nil); end; // Во з ы в в рм и ж е е ои н а д и ж я ил и пе щ а р к е р н LINECALLSTATE_IDLE : Begin // Пи р е в о р м до т п и р к с е р IF hcall 0 then begin // Уе а ж о т ч и н м во з ы в и ое а д ж о б в с м пт я м а lineDeallocateCall(hCall); MemoLog.Lines.Add('Во з ы в з. нешрва ') BitBtnAnswer.Enabled := False; end; end;
2zyx
о н а ли н
и }
й в' возы )
;
ь ;
// Пи н е ж о л и р е ул и в о н а т с о уо н ш е п с е си н е и д е о е и гв о т о // пт а л ы с о ь ды н а е LINECALLSTATE_CONNECTED: Begin IF hcall 0 then begin Str := 'Си н е н и д е о е у. о н е л в о н а т с ..' ; // Ое я л е д р п м пр т е м а р ы си н е и д е о я Callinfo.dwTotalSize := 1024; // Пе а ч у л о м ии ц а м р о ф н ю if lineGetCallInfo(hCall, callinfo) = 0 then if callinfo.dwAppNameSize > 0 then ($IFDEF WIN32}
TAPIzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - и нт е й рс ф пр о г ам м и р о вани я преин лойж для р аб о т ы с то неил фй
105zyxwvuts
Str := Str + ' ( ' + (buf + callinfo.dwAppNameOffset) + ' ) '; {$ELSE} Str := Str + ' ( ' + StrPas((buf + callinfo.dwAppNameOffset)) + ' )'; {$ENDIF} MemoLog.Lines.Add(Str); end; end; LINECALLSTATE_DISCONNECTED: begin Str := ќР иненидеъза е : '; // Пн и ч и р а ? if dwParam2 - LINEDISCONNECTMODE_NORMAL then еонта ' Str := Str + '(ш) else if dwParam2 = LINEDISCONNECTMODE_BUSY then Str := Str + ' (з) отяна ' ; MemoLog.Lines.Add(Str); BitBtnAnswer.Enabled := False; BitBtnDropCallClick(nil); end; end; end; end; // with end;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Ф иц у н к п у р а и щв л ю я В дан н о з ю у ст
Ф и ц ну к
и и струк
ы TAPI, м вовз ы
е прие м о я дл
м р аз едл я уп р ав лен и
е м ы п ри вод я п ри ем о
м фн у кц и м в ы з о в
в
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO
и и сркут в в TAPI.
ы TAPI, к отры
е и сп о ль
-
я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA HneAccept
Э т а н фу к ц и я п ри н и м ае м ац и ю п о л ь з о в ае л т ь с к о г м ац и я обы ч н о и с п о л ь з се т у Т ак ж е в ы м о ж ет е и сп о ль з о в ат К о гд а п р и о дх т о я вщ д х и "offering". В етч н и н и т ь вы з ов , и сп оль з у
т указ н н ы й вы з ов . Он а так ж е м ож е т п о слат о р еж и м а к в ы з ы в а ю щ ем у а б о н ен у т . Дан н а я в ц и фр о в ы х с яе т х к о м п л ек с н о г о о б с жл у и в а н и я . ь е е в о бы ч н ы х тел фо н н ы х сеятх й вы з ов е к р а то г я н фу к ц и
, о н п ерв о н ач ль н о н о и ад х с т о п ер и о д а в р ем н и п р и л о ж ен и ю lineD rop, п ер адсо в аьт
ь и н фо р я и н фо р
я в с о тян и е м ож е т ко т л , и сп оль з у
. и я
2 zyxw
л ав Г
106
lineRedirect, л и б о ов и те ь н а вы з ов , и сп оль з у я ад н н у , ка к вы з о в бы л п ри н я т п р и л о ж ен и ем , со тян и "accepting" (п р и н яот) . П р и акто м с о тя н и и п р и л о ж ен и лат ь и н фо рм ац и ю п о л ь з о в еа л т ь с к о г о р еж и м а .
от г
Ф н у кц и
я и м е
т сю л у е д щ и
й си н атк си с
ю нф у к ц и ю е е г о и з м ен с я т е м ож е т актж
. П осл
е я н а
е п о сы
-
:zyxwvutsrqponmlkjihgfedcbaZYXWVUTS
function lineAccept(hCall: HCALL; lpsUserUserlnfo: LPCSTR; dwSize: DWORD): Longint; stdcall;
П а р м ет
ы н фу к ц и
и п расевдтлн
. 2.21.zyxwvutsrqponmlkjihgfedcbaZYXW
ы в таб л
2.21. Пар м е т р ы
аТ б л и ц
lineAccept zy
р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
аПр м е т
hCall
е с Др к и по т е н и р П ло ж с о н х а ьд и т
lpsUser Userlnfo
е з н ач ен и е
н б ыт ь п р и ня м вы зо ва
т ил , и вызо
а фн у кц и
Ф ну кц и
я овтеч а я и м е
. в е до лж
р дан ы
х о р м и н ф ца и
и позльсеваткг
й и е нд и т ф к а о т
о и м реж
р вы з ова й ко д о ш и б к и , я с уп е ш н а
т н а указ н ы т сю л у е д щ и
й вы з ов й си н атк си с
н ь и н е й в
а
, есл
и н уф к ц и — сел и п ро о с о б щ ен и , и л и роит ц а
я ImeAnswer
Эт
и ол к т н е
зам Р е
а а с и н р ох н н о , и л и орти ц аелть н ы . П ар м ет р dwParam2 к о р есп о н ид рюу щ ег т и м ет ь з н а ч ен и е н о ль , есл и н фу кц и , — есл и п рои з ош л а о ш и бк а .
LINE_REPLY едбу
Ф и ц ну к
й е до лж ь в ц л да е ь и "offering"
ь н а с р о ут к , сща о держу ю ио рмнф аци ю пзосльевтак , корта я б уде т пос нал а в ы з аю щ е й со тр н е ка к чса т вы зо ва . Эо т т уезалтк ь ме о ж т б ыт ь у с а н от в л е н в N i l , ес л ю о р м и н ф ца и ю п о з л с ь е в ат к г о и м р еж а п е р в да т ь . о рмИнф аци я п о з л с ь е в ат к г о и м р еж а ме о ж т б ыт ь от о тк л ь о пр и ус ло ви , чт о остылк а и п в о с ае д т р ж я о с но в (с м . с т р тку р у LINEDEVCAPS в р а.зд "Опр елд ни е с по с б т о не и л ф ) . о Пл е д и с р к и м и но а т р а п р о тк л а дл я и н и позлсьеваткг о рим еж а дн о лж о б ыт ь з а н ку о в пер е с р от к и дан ы х . замР е р д ан ы х е до лж н б ыт ь з да н е dwSize
т п о л ж и е лт ь н ы
т з а к о н ч ен а ош и бк а
, оркты о б ыт
г о и м р ежа вод а у кн а и н о н жу с л ан а с ьет ю но с т е й рм фо аци в о м б йа т п ар м р е т
я в о з в р ащ ае
е тл ь н о
р вы зо ва е н до лж я в с о с тяни
ае з к л т У
dwSize
Ф н у кц и е д бу и з ош л
фуцнки
. :
function lineAnswer(hCall: HCALL; lpsUserUserlnfo: LPCSTR; dwSize: DWORD): Longint; stdcall;
я я -
TAPIzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - и нтей рс ф п р о г а м и р о ва н и я п р е ин л о й ж ля д р аб о т ы с то неил фй
П а р м ет ем : в ы з о со т я н и
ы н фу к ц и и т е ж е в h caii м о ж е т н о аи дх ь т с и "accepted".
Ф н у кц и едбу и з ош л
я в о з в р ащ ае т з а к о н ч ен а ош и бк а LINE_REPLY едбу е тл ь н о е з н ач ен и е
, ч т о и у н фу кц и я н е то л ь к
107_zyxwvutsrqpo
и lineAccept, з а онд и м и с к л ю ч ен и о в с о тян и и "offering", н о в с о -
т п о л ж и е лт ь н ы й и е дн и т ф к а о т а а с и н р ох н н о , и л и орти ц еалть н ы . П ар м ет р dwParam2 к о р есп о н ид рюу щ ег т и м ет ь з н а ч ен и е н о ль , есл и н фу кц и , — есл и п ро и з о ш л а о ш и бк а .
й ко
р вы з ова д ош и бк и
, есл и нфу к ц и , — есл и п ро о с о б щ ен и , и л и орти ц а
я с пу е ш н а
я я -
я HneDeallocateCall
у н Ф цк и Д ан н а ж ен и я б ез б о л ез н ен н
я н фу к ц и , и м ею щ и
я о с в б о ж а де е п р и в и леги о и сп о ль з о в ат
П И р ГВ е Л
т з а дн ы й в h caii едс к р и п от р вы з ова ю LINECALLPRIVILEGEMONITOR (м о н и отр и н г) ь ад н н у ю нф у к ц и ю . П р и ло ж ен и я же
Ю LINECALLPRIVILEGE_OWNER, о б я з а н
в е р ья т
, ч т о адн ы
с ет
й вы з о м в л е а дь ц е
я еид н свтен н ы
Ф ну кц и
я и м е
в н о иа д х с т
я в с о тян и .
м вы з ова
т сюлеуд щ и
ы П ере
й с и н ат к с и с
д О В ЫЗ В
. П р и л о , м о гу , и м ею щ и
М Н уф К Ц И
т е
И П рО
и "Idle", и п ри ло ж ен и
-
е яв л
-
:
fu n ct ion lin e D e a llo c a t e C a ll( h C a ll: HCALL): Lon gin t; s t d c a l l ;
П р и с уп е ш н о ц а етл ь н ы
й к о
у н Ф цк и
я HneDrop
Эт же ад н а
а н фу к ц и т о п р е дл и т , ка к ч аст
Ф ну кц и
я и ме
м з а в ер ш ен и д о ш и б к и
и н фу к ц и
я в о з в р ащ ае
т н л уь
. П р
и о ш и б к
е — орти
-
.
я окт л н и т ь и н фо р м а ц и ь з ап р о с
ь ил
и р а з ъ еид н и т ю п о ль з о в аетль ск о г а "disconnect".
т ю с луед щ и
й с и н ат к с и с
ь к уа з н н ы
й вы з ов о р еж и м а
. П р и ло ж ен и я беду
, котра
е мо т п ер
-
:
fu n ct io n lin eD ro p ( h C all: HCALL; lpsU serU serln fo : LPCSTR; dwSize: DWORD): Lon gin t; st d c a l l ;
П а р м ер т
ы н фу к ц и
и п ресадтв л н
. 2.22.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ
ы в таб л аТ б л и ц
аП р м е т
р
h Ca l l
Оп и с а н
же
е с Д рк и п о т не
2.22. аПр м е т р ы
фуцнки
HneDrop zyxwvutsrq
е р вы зо ва . енрПи ло ж н н о с ах д и ь т
, октры е н до лж я в лю б о
й де о лж о б ыт м с о с тяни
н б ыт ь в ц л да е ь , кром
ь е д и н р аз ъ м вы зо ва е с о с тяни
н и л и олокт, и вызо в до л я "Idle" -
л ав Г
108
аб Т л и ц а р
О п и с а ни
е
lpsUser Userlnfo
е за л т к У
ь н а сротук , корта
Пар м е т
г о и мр еж а вод а н у и ак н о н уж с л ан а с ьет ю но с т е й р м фо аци в о м б йа т п ар м р е т
запро с а ю о р м и н ф ац и . о рм Инф цаи ок т ль (с м . т о не и л ф и е е
2
2.22 (оокнчаи е)
zyxw
, сща о держу ю о р м и н ф ца и ю п з со е л ь в к т а я б деу т п о с н ал а в ы з юа щ е й с о тр н е ка к чса т . Эо т т уезалтк ь ем о ж т быт ь у с а н от в л е н в N i l , ес л ю п о з л ь с е в ат к г о и м р еж а п е р дв а т ь н я п зо с л ье в т а к г о и м р еж а ме о ж т б ыт ь оо т о п р и ус л о в и , чт о ос тыкл а и п в о с ае д т р ж я о с но в с т ртку р у LINEDEVCAPS в ра.зд "Опр елд ни е с по с б "). олП е д и с р к и м и но а т р а п р о тк л а дл я позлсьеваткг о рим еж а дн о лж о б ыьт а уз к н о в пер с р от к и днаых . зма Р е р д ан ы х е до лж н б ыт ь з да н dwSize
ь и е й ин
в
dwSizezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA зам Р е р днаы х о р м и н ф ца и и позлсьеваткг о рим еж а zyxwvutsrqponmlk
Ф н у кц и едбу и з ош л
я в о з в р ащ ае т п о л ж и е л ть н ы т з а к о н ч ен а а с и н р ох н о , а ош и бк а . П ар м ет р LIN EREPLY едб у т и м ет ь з н а ч ен и о р т и ц а е лт ь н о е з н а ч ен и е , — есл
и ц Ф нк у
ил
й и е нд и т ф к а о т и орти ц аелть н ы dwParam2 к о р есп о н ид юру щ ег е н о ль , есл и н уф кц и и п рои з ош л а о ш и бк а
р вы з ова д о ш и бк и
й ко
я бы л
, есл и н фу кц и , — есл и п ро о с о б щ ен и а б ы усп еш н а , и л
я я и
.
я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA HneGetCalllnfo
Ф н у кц и
я да е
т воз м ож н ост
Ф н у кц и
я и ме
ь п р и л о ж ен и
ю п чо л и у т
й с и н ат к с и с
:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR
т ю с луед щ и
ь и н фо рм ац и
ю о вы з ове
.
function lineGetCallInfo(hCall: HCALL; lpCalllnfo: PLineCalllnfo): Longint; stdcall;
П а р м ет
ы н фу к ц и
и п р с ае д вт л н
ы в атбл аТ б л и ц
аПр м е т
р
О п и с а ни
hCall
е с р Д к и по т
lp Callln f o
е за л т к У
2.23. аПр м е т р ы
фуцнки
HneGetCalllnfo
е р вызов
а
ь н а сру тк
в е р ш си т
. 2.23.
я уданчо
у д ан ы
, т о дан
с вы зо м о р ми н ф а ц и е й Hn e Ge t Ca l l l n f o , в ы дн о лж т и с зап с о м . енирП ло ж ру с т к ы LIN ECALLIN FO рзам е д л я в о з р та а иорм нф цаи и
х LIN ECALLIN FO. СЕЛ
я с ур т к . д рПеж ы в ы де л и т е н до лж
И цник фу
я за
-
а б деу т запо лне а с вязан о й е е ч м в ы з та ь цинк фу ю ь н е о б х ди м ы й б ол к п ма я о аз у к т ь в по л е d wTot alSize р оем б ъ а п ам и я т , до супнты й TAPI
- и нтей рс ф zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA прогам м и р о вани я преин лойж для р аб о т ы с то неил фй
!Р А Т
П р и с уп е ш н о ц ае л т ь н ы
м з а в ер ш ен и д о ш и бк и
й ко
109zyxwvutsrqpon
и н фу к ц и я в о з в р ащ ае т н о ль . П р и ош и бк е — орти .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
UNECALLINFO а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
тС рк у О рг о м н а м ац и
я р с к ут
а LINECALLINFO соердж и т и н фо р м а ц и ю о вы з ове . И н фо р й л д я о п р е дл н н о г о вы з ова . М н оги е н фу к ц и и zyxwvutsr Т LINECALLINFO В zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е О В С Й ре т о б а , В ИТСОНТСаЧ : lineGetCalllnfo,
я я в л ес т
я фи к с и р о в а н о
TAPI ИСПОЛЬЗуЮ TSPI_lineGetCallInfo.
Е сл
и ч аст
ь р к ус т
ы и з м е н ясе т
LIN ECALLIN F O.
вы з ова в о з в р ащ ае
П р о и з о ш ше д и о о п р е дл и т
, м о ж н т р ку с т
, п ри ло ж ен и
е и з м ен ен и я ь с п ом щ ь
я dwCallTreatment ч е р е
п р и л о ж ен и ям вы ш е
, н ап ри м е ю н фу к ц и
е я я
у LINECALLSTATUS.
Е сл и в аш е п р и л о ж ен и е и сп о ль зе у (device- specific extensions), в ы долж н dwD evspecificOffset, с ы лаю щ и ес с п ец и ф ч н ы е р а с ш и р ен и я . П ол
ю п о с ы л ас е т я с о б щ ен и р и з м ен ен и е с о тян и и lin eG etcailstatus, к о тра
, к отры
т с р туо й с в т о - с п е ц и ф ч н ы ы и сп о ль з о в ат я н а област
ь п ол и п а м и ят
е р а с ш и р ен и я я dwDevSpecificSize и , хран ящ и е с ур т о й с в т о -
з dwReceivingF lowspecOffset С Т ЯВЛЯЮ
е ок т р ы в а ю
т с р ту о й с в т
о ли н и
Я д о с т уп н ы м
и с в ер с и е
и
й Т АР
! 2.0 и л
и
. На
з а м е т ку
р П е нд п ы и о л ь т ч й рм фо а т хране и я но м ер а дл я по л я d wCalliD и други х по до б н ы х п о ле й ( d wCaller lDFlag , d wCaller lDSize, d wCalle r lDOf f se t , dwCallerlDNameSize И d wCallerlDNameOffset) — кано и ечс кй . На п р и м е р , ICLID "4258828080", поелчуны й о т окм м орта у о б р аз о в н в " +1 (425) 8828080", д преж е еч м п о м е щ е LINECALLINFO. оакТ е р е т б о в ан и е с а н дт р и з ц и о б легач п о в тр н о г о вызов а и пенри йло ж , рбаюощт и х с б азм и дан ы х
Т а к к а к р с к ут м ы н е е мд б у
а и ме , а п ерй д LINECALLINFO п р есадтв л н
т о ч ен ь м н ог о п а р м ер т о в м ср аз у к о п и сан и ы в таб л . 2.24.
, п ри в оид т
аТ б л и ц ол П
е
О п и с а ни
ю п о л ей
. И атк
2.24. оПля
с т ртку ы
а де о лж
н б ыьт н в с ур т к т р аб о т у фунцки .
п р е
у й
ь в и д р кс у т , п ол я ср к т у
ы ы
LINECALLINFO
е
d wTot alSize
оП лн ы
й рзам е
dwNeededSize
за м Р е
р (в б хйат
) возврща ено
dwUsedSize
за м Р е и де р ж
р (в бхайт т полезну
) от ю ио рм нф цаи
hLine
е с Др к и по т
р (в б хйат
р усротй свт
) с рутк
ы дан ы
х
й о р и м н ф ац и й а сч т а лини
и с ур т к ю , с котры
и ы дан ы х м связа
, ок тр а н вызо
в
я с о
-
110
аТ б л и ц По л
2 zyxw
л ав Г
е
О п и с а ни
dwLineDevicelD
о и ат к И д е н ф
dwAddressID
тЭ
zyxwv
2. 24 (пернио лд)ж
е р усрто й свт о по л
а ли н и
с в я з ан ы
е аз ук ы в е й с адрес о
т да р е с н ы м вызов
dwBearerMode
тЭ о по л п ра м е т
е аз ук ы в е р ис позеуль
т и р еж т онд
dwRate
о кСр с т
ь покт
dwMediaMode
тЭ п о ат к
о по л
т ти й
на ы Д
м с вяза
н вызо
й и о а т к рд е н ф
в
, пос нят
о
а м р ба о т у и з консат
а дан ы
е уазкы в е .
, с котры
ы на л к а вы зо ва . наы Д т LINEBEARERMODE_
х вы зо
а (б/ит с
п рим еж п ра м е т
а но с иелт р
й
) й ио рм нф цаио н г и с п о з уел ь
о т
о кн с ат
ы
LINEMEDIAMODE_
dwAppSpeci f i c
е н и р П - л о ж в дел а ц вы зо ва но в и т ь лю б о е з н е ча и lin e Se t Ap p Sp e c if ic . о Пл
d wCalllD
е н е иенртп сеут
н и ыал ь кУ тЭ
о по л х то неил ф
да dwCallParamFlags
е по л
е мн о ж ю
по м о щ ь
я TAPI и по савтщ иок й о и та к д е н ф
р о м ил d wRelat ed CalllD
, в дан о с е
р вы зо ва
и посващт иок
м ус ул
е уазкы ве
й о и ат к д е н ф ь о ид
о с вязы та
В д ан о м по л е р х ан и с т вы зо ва . Эт о т е ж е с ма ы в lineM akeCall.
, наз еч ы
и
г й о к м м о та у
-
г
т с в яз н а ы и мн о ж
м ус ул
о су а т цник фу
я о к л ец и е парм рет ра Пм р е т
ы
р вы зо а в с др уги
н вызо я п а р м ре т о ы вы зо ва о пр ед л н
, чт
. В с ре
-
м
в и с о х д ящ е г о уазкывюст ы о м а кн с т
о я и
LINECALLPARAMFLAGS_
d wCallSt at es
тЭ о по л е а зу к ы в е т с о т ян и е вы зо ва . В дан о м по л е ем о ж т б ыт ь лю в е к чн о н е с к о ьл о б о и вт ы х л аг о вф . ан ыД е га фл и з ад ю с т я о к н с ма т и LINECALLSTATE_. оПл е d wCallSt at es я в за яв сл е т я п о с т ян ы м в LIN ECALLIN FO И н е изм енсят ви с м о с т и о т сотяни я вызов а
dwMonitor DigitM odes
тЭ б ио т в ы м
о по л
е аз ук ы в е и агм фл и
т р за л и н ч ы . гла Ф
е р о цвиы ф и о пр ед л н
е и мр е ж ы ы
, знады в о а кн с т
е х
LINEDIGITM ODE_
dwMonitor MediaModes DialParams
тЭ
о по л
е а зу к ы в е н м о н и тр г . Флаг
п о з в ле агм фл и тЭ
о по л в р ем
е аз ук ы в е я д е й с в ту ю щ и
т р з а л и н чы . иТп и о предлн т п ра м р е т е н а вы зо
е и тп ы н о с еи л т ы в консат ы нба о р е и тп
ы н о с и е тл й
, дл я корыт й з ад н ы б ио т в ы м х LINEMEDIAMODE а но м ер а
х
, в нсаотящ е
и
а LINEDIALPARAM S. СЕЛ
е И
э т и п ар м р е т ы н е усанотвле ы н и фунцки е й lineM ak eCall, я аи к т е же , ка к знеча н и lineSet CallPar am s, т о и х знаеч и ни я , п о умоанлчи ю и с п з о е у мл ь ы е в LiNEDEVCAPS- р у т к ур ст е d wOr ig inzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA тЭ о п о л е аз ук ы в е т о и а т рк д е н ф , дг е б ы л иниц рова н вы зо . Пол е ис позеуль т одн у и з окнсат т LIN ECALLORIGIN _
TAPIzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - и нт е й рс ф пр о г ам м и р о вани я преин лойж для р аб о т ы с то неил фй 111
аб Т л и ц а По л
е
Оп и с а н и
dwReason
тЭ
е о пол
е уазкыве
КОНСТаН
dwCompletionID
2.24 (пернио лд)ж
т причн
. Пол
у вызо ва
е ис пзеоуль
т о дн
у и з
Т LINECALLREASON
тЭ щ ег
о по л е з а ы кв е у о вы зо а
т о т а и к и ф е дн т й о т а и к е дф н т
. на ы Д
р з ва е р ш е н и р з н аич м
я дл , октль
я вохяд о ес л
и
dwReason LINECALLREASON_CALLCOMPLETION
dwNumOwners
тЭ щи
о пол х дн а ы
е уазкыве
п р и в ел г
dwNumMonitors
тЭ щи
т коилесвч т
о прндыалик
й д е с р к и оп т
р вы зо а
й ц ье л д в а
о пол х дн а ы
т коилесчв т
о прндыалик
й д е с р к и оп т
р вы зо а
й м онирт г
о К д с р на т н в ес т а
dwTrunk
т Э о по л е з а ы ку в е о р тк й вызо в б ы о щ яв д х и х , и исощяхд и
т но м е л нпарвелн
тЭ о по л е и с о де р ж ил н до с ь т ) вызюащ е м цаи и о р т аи к е д фн т и с з еп у о ь л т онд
т флаги
d wCaller lDSize
тЭ м ен о г со р т н
ы — елпотачу
о по л
е за ы ку в е о р за м е р а
х п р о г ам м
, имею
-
х н а ли н
, рыкот
я вы зо а
. с л Е
и 0, т о срнат
т пол
е и с з пе у т о ь л
р ог уд м р н е ж
й ли н . Эо т в
х вызов
и с а неи з
и с в яз и
у и з окнса т
ь (ва
е о з ка н с т ы ил и опрвтаеил й с отр ны . Дано т LINECALLPARTYID_
р (в бхайт й о и т а к де н ф т
) обсал т
-
, п о я и дл я
, юдащ пвоердтжи й п р о гм а м а в ы з ю ащ е
т р з ам е , ща с оедрж
-
я о р и нф
е по л
и пм а тя р в ы з юа щ е
е
и пер
й
ы
d wCalle r lDOf f se t
о С с в ею у т щ е LINECALLINFO
dwCallerlDName Size
т Э о по л м ен о г н ы
d wCaller lD NameOffset
о С с в ею у т щ е LINECALLINFO
d wCalled lDFlag s; d wCalled lDSize; dwCalledID Of f set ; dwCalledlDName Size;
н ла о А г и ч с о тр н
dwCalledID NameOffset
и с
а ( LIN ECALLPRIVILEGE_M ON ITOR)
dwCount r yCode
d wCaller lDFlag s
, и м ею х н а ли н
а ( LINECALLPRIVILEGEJDWNER)
е узаыкве
п р и в ел г
х п р о г ам м , рыкот
е за ы ку в е о р аз м е р а
с м ещ ени т р з ам е
е
с м ещ ени о с и т о де р ж
е р (в бхайт й нзавни
, сща оедрж
, кольт е
е
е я о р м и н ф ца
о т
л а чн
) обсал т е в ы з ю ащ е о т
ла чн
а
с ур т к
и пм а тя
а я о в ы з е ма о
ы и пер й сорт
ру с т к
ы й
аТ б л и ц
лоП
2 zyxw
л ав Г
112
е
dwConnected IDFlags; dwConnected IDSize; dwConnected IDOffset;
инасипО
2.24 (пернио лд)ж
zyxwv
е
ончиг ланА он азявс
, тк ь л о о сстижредо й се н о р т . анзявС ар я б ы л а фксечитка и сн а з я в он аз й снор т е може т ос ь т а ч и л т ваемо й се н о р т . Тока е пт и д о х с и о р б ы л оенолкт н
я информаци я о фксечитка , о т о к я снор т а — т э о са н о р т а с мовзы . Информ а ц и я о я в с и о выз я о т информаци , еилс , нремипа , возы
и в
dwConnected IDNameSize; dwConnected IDNameOffset dwRedirection IDFlags; dwRedirection IDSize;
ончиг ланА яинечанз ор ток
й возы
, к ь л о т о сстижредо . Сторн а инеча з нер п в бы л павосерд
я информаци я — т э
я о нор тс о а н о р т с
е е р п , дл я
н
dwRedirection IDOffset; dwRedirection IDNameSize; dwRedirection IDNameOffset dwRedirecting IDFlags; dwRedirecting IDSize;
ончиголанА и цасерд лавосерд п
, кьлот . Сторн
о сстижредо а пицасерд
я и н ф о р м а ц и
а дан ы
й возы
я о нор тс и — т э о са н о р т
е ер п , ка р о т
я
в
dwRedirecting IDOffset; dwRedirecting IDNameSize; dwRedirecting IDNameOffset dwAppN ame Size
dwAppNameOffset
тЭ о пло е уеавыз к т ремза р (в хатй б гон ем о раремз , содержаще й инавз гешва ори ц о ввозы . Им я приложен linelnitializeEx. Елс и приложен стеузьлоп я им я ф а й л а Со тве с ующ
е
смещ ни
) тсалбо
и птяма е пяинежолр
я зстеад е н е еад з
е о т лач н
и пер , ии н
-
я в функци и т иям , т о ис а руткуртс
ы
LINECALLINFO DwCalledParty Эт о пло е уеавыз к т ремза р (в хатй б ) тсалбо и птяма и пер SizezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA гон ем о раремз , содержащ й инас по е вызваемог о аоб
атне . Дан я информаци я може иц и lineMakeCall ли и ньловзирп lpCallParams пр и синадзо и ввозы
т быт
ь опредлн
-
а в кнуф о в пар мет
а
е
- и нт е й рс ф zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA пр о г ам м и р о вани я преин лойж для р аб о т ы с то неил фй
!Р А Т
аТ б л и ц ло П
е
Оп и с а н
о С вс е т ю у щ е LINECALLINFO
dwCommentSize
тЭ
о по л м ен о г м ц аи п р о и з н в ьл
о С в с е т юу щ е LINECALLINFO
dwDisplaySize
тЭ
о по л
dwUserUser In f o Size
тЭ
м рим еж
тЭ
с м ещ ени
е
о т
р (в бхайт й о р м и н ф ца с м ещ ени
о уро вня
. Форм а м с а н дт р м
о С св еюут щ е LINECALLINFO
dwLowLevel CompSize
тЭ
е з а ы ку в е о разм ера о ур о в н я
е
л а чн
а
ы и
с ур т к
а ы
и п ам я т и п ер т н е о б р а но у т ю а н а э р ка н п о ль й с в яз и , по ю о р ми н ф а ла чн
а
) обсал т
с ур т к
ы
и п ам я т ю о п о з л ь е в та
т р за м е
dwLowLevel CompOffset
о С в с е т юу щ е LINECALLINFO
d wCharg ing lnfo Size
тЭ
е з а ы кв уе о р аз м е р а
е
е р (в бхайт й ио рм нф цаи т эо т й орм инфца , нпраим е
, сща оедрж . о рФм а с м ещ ени
е
т р за м е я о б с ал т
ю о р м и н ф ца и ю х снахдрт с м ещ ени
л а чн
а
и пер
-
ла чн
а
) о б лса т
л а чн
) обсал т
о т
н у
с ур т к
ы
а
с ур т к
и п м а тя т та к нзаывем у
т эо т й орминф цаи р в сандтр е
ы
и п ам я т и пер ю о с о вм еситм о с т и и о п р едл н п о с о у ISDN Q.931
р п о снардт о т
с ру т к
и п ам я т и пер ю о с о в м ес ит и о пр ед л р п о с а н тд р
ь и с о де р ж
. о рФм а , нпарим е е
о т
р (в бхайт
. Дна
о С вс е т ю у щ е LINECALLINFO
о т
р (в бхайт ) обсалт й о р м и н ф ца т эо т й иорм нф цаи , напри м е
с м ещ ени
м сандтрм
н в други
е
т р з ам е , щас одерж
dwHighLevel CompOffset
о по л
о т
) о б лса т ь си о де р ж я н оджл а б ыт ь вы едн и о т с р ед ы о н е лтф т и тз а в ел к ь цникоульа фу
е
е за ы ку в е о р за м е р а
и в ы с о кг п о с о п в ю ту щ и ISDN Q.931
о по л
с ур т к
е
dwHighLevel CompSize
м ен о г нег ни ж с п в т юу щ и
а
р (в бхайт
т р з ам е
о С вс е т ю у щ е LINECALLINFO о по л
е
, сща одерж
dwUserUserlnfo Of f s e t
м ен о г м ос т
ла чн
я о б с ал т
е
е за ы ку в е о р за м е р а
о т
р (в бхайт ) обсал т и п ам я т и п ер й о к м м е ар н т и й . Дан я о р и нф а в фуцинк и lineM akeCall ил е lpCallParams пр и с ознади и вызо в
т р з ам е
, оркта . В зваис м ос т к су л г ем о ж ю и з эогт о пол я
о по л
е
с м ещ ени
. Дна
о С вс е т ю у щ е LINECALLINFO
d wCharg ing lnfo Of f s e t
с м ещ ени
е
е з а ы кв уе о р аз м е р а
dwDisplay Of f s e t
м ен о г п у р в а л юя щ у де л
е
е за ы ку в е т зрм а е о р аз м е р а , ща с оедрж я ме о ж т б ыт ь о п р е длн о в прма ет
dwComment Of f s e t
м ен о г с ок
zyxwvutsrq
2. 24 (пернио лд)ж
е
d wCalled Part y Of f s e t
м ен о г о р м и н ф ца и ю з о е в л я ат в с ащ т и ци
113 zyxwvutsr
л а чн
ы и п ер
ю
и о пре е ISDN Q.931 а
с ур т к
ы
2.24 (пернио лд)ж
аТ б л и ц ло П
2zyxw
л ав Г
114
е
dwTerminal ModesSize
Оп и с а н
е
т Э о по л м ен о г о кн е ч г ле н ы о т 0 д де ля щ им и
е за ы ку в е т р за м е р (в хбайт ) о б лас т о р аз м е р а . ан Д я о б лса т ь о п р е д ля о су р о т й с в т а ли н и . ан ыД е в о б л ас т в им е е в м са и в е и пт а DWORD. М са и о dwNuitiTerminals- 1. Кыд жа й э ле м е н т в т еу щ к т и й терм иныаль й и р еж м и зад н конмаст и LINETERMMODE_
dwTerminal ModesOffset
о С в с е т юу щ е LINECALLINFO
dwDevSpecific Size
тЭ
о по л
м ен о г ш и р ен с у р о т й в - с и н уч п е ц ф
о С в с е т юу щ е LINECALLINFO
DwCallTreatment
тЭ о по л е аз ук ы в е иб ч о т к вы зо ва ин и с о в е т ю у щ и о б р а и оч т к вызов тЭ о по л п е р в он л а ь ч
dwCallData Offset dwSending FlowspecSize
dwSending FlowspecOffset
е
с м ещ ени
е
о т
нла ч
е
с м ещ ени т п р и м еням ы
. бОраичот х с о т ян и й а н е па оедрж т р за м е о п р и с о е ид н ы
о С в с е т юу щ е LINECALLINFO
е
с м ещ ени
ан о Д
е по л е си о де р ж FLOWSPEC, о предлно Service). ан Д я ру с т к ни я , нелоать же е пр п Ор е д л н а я п о с ав щ т и о к ру т ы FLOWSPEC н е н до лж б ло к и п ам и я т , покс ьл с ы лк и н а о р ыт к х з ад н ын е чер з взиам одейсвит о С св е ю т у щ е
е
нла ч
и пер
и
и п р е дс в а т т р з ам е р н о с т м са ив с о в е т юу
ь е о пр е
-
с ур т к
ы
и п ма я т
и пер е с ра
-
и с л о в ам и а
й в н ас о т я щ е а п р и м е н ся т . Ме ож т б ыт
к вы зо
е аз ук ы в е
о т
е
и п м а тя т в о з мн с то ж
а
е з а ы ку в е т р за м е р (в бхайт ) о б лас т о р аз м е р а , сща одерж й усрот й свот- с ипнчеыц ф я (device- specific extensions) и л , други м ю о р м и н ф ца и ю
dwDevSpecific Offset
dwCallDataSize
zyxw
,
ру с т к
ы
е в р ем я пр ь н ул е в ы м
я о б ра
-
и и зм ен
, ес л
и
н р (в бхайт х к вызов е
) приладнкы у о т
х д ан ы х
нла ч
а
ру с т к
, ы
т п о нл ы й р за м е р (в хбайт ) суртк ы й в WinSock2 дл я QOS (Quality Of а о п р е д ля т е чс а в к т о и о в а б с жлу и ус ан о т в к е и с о х д ящ е г о с о е ди н я . м ус ул г са ч т ь д ан ы х по с л е скрут а та с о д е р ж ь ае з у к л т и н а д р уг и е т с о б р та ь д ан ы е , у TAPI н е с м е о ж ы в уеазлякхт , и пертда ь э т и дан е процес о в к пенир лож ю с м ещ ени
е
о т
ла нч
а
с ур т к
ы
LINECALLPARAMS
dwReceiving ан о Д е по л е си о де р ж т п о лн ы й р за м е р (в бхайт ) суртк ы FlowspecSizezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA FLOWSPEC, о предлн о й в WinSock2 дл я QOS (Quality Of Service). ан Д я ру с т к а о п р е д ля т е ач с к в т о и о в б а с л жу ния , неольат же е пр и усанотвк е в о х д ящ е г о (прин м юащ еог с о е ди н и я . пОредлн а я п о с ва щ т и о к м ус лу г са ч т ь н да ы по с л е суртк ы FLOWSPEC н е дн о лж а с ат о д е р ж ь уаезклт и н д р уг и е б ло к и пам ият , покс ьл у TAPI н е с м е о ж т с о б рта ь дан ны е , с ы лк и н а оркты е з н да ы в уеазлякхт , и пер дта ь эт д ан ы е е чр з взиам одейсвит е процес о в к пенри ло ж ю
) х а и
TAPIzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - и нт е й рс ф пр о г ам м и р о вани я преин лойж для р аб о т ы с то неил фй 115zyxwvutsr
аТ б л и ц ол П
О п и с а ни е
dwReceiving FlowspecOffset
е
оС в с ет ую щ е е LINECALLPARAMS
dwAddressType
zyxwvutsrq
2. 24 (оокнчаи е)
ан о Д
е по л
с м ещ ени
а
ы
т с ан д р т ы
й
LINEADDRESSTYPE_SDP — уазкы ве
л с енас
В о змны о ж
е адрес ны
е ти п ы
, и с позуельм ы
с ру т к
LINEADDRESSTYPE_PHONENUMBER — уазкы ве но м е р о н е а тл ф ;
о пол .
й ит п
ла нч
й д л я в ы и TAPI 3.0
. Эт и вы ш е
т да р е с н ы о пр
о т
и вер с и
зо ва ил
е си о де р ж е д о с уп т н
е
и и с позльвани :
т п р о тк
LINEADDRESSTYPE_EMAILNAME — уакз ы в ае
т им
LINEADDRESSTYPE_IPADDRESS — уазкы в е
т да р е
а с в яз и я до м е н а
; ;
с IP
я HneGetCallStatuszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE
у н ц кФ и Эт
а н фу к ц и
Ф н у кц и
я в о з в р ащ ае я и ме
т е тк щ у е т сю л у е д щ и
е со стян и
е к уа з н о г
й с и н ат к с и с
о вы з ова
.
:
function H n eG etC allStatus(hC all: HCALL; lpC allSt at u s: P Lin eC allStatus): Lon gin t/ stdcall;
П а р м ер т
ы н фу к ц и
и п р ас е в дт л н
ы в атб л аТ блиц 2 .25.
аП р м е т
Пр ц ае л т ь н ы
р
О п и с а ни
. 2.25. Пар м е т р ы
фуцнки
HneGetCallStatus
е
hCall
е с Д рк и п о т
lp CallSt at us
ае з к л т У ь н а сру тк у д ан ы х LINECALLSTATUS. СЕЛ И нцки фу я я ру с т к а б уд е т з ап о л н е а с в яз ан з ав е р ш и с т я уданчо , т о дан но й с в ы з о м с у ат н о й о р и м н ф ац и е й . д рПе ж е еч м вы з ват ь ы в ы де ли т ь н е о б х ди м ы й б ло к п ам я т и с з ап нцки юфу , в ы дн о лж сом . енирП ло ж е н до лж о за т ку ь в пол е d wTo t alSize суртк ы LINECALLSTATUS рзма е р оем б ъ а п ам и я т , до с уптны й TAPI д л я воз в рта а о р ми н ф а ц и и
и с пу еш н о й ко
м з а в ер ш ен и д о ш и бк и
р вы зо
и н фу к ц и .
а
я в о з в р ащ ае
т н о ль
. П р
и ош и бк
е •
орти
-
116
л ав Г
2zyxw
LINECALLSTATUSzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
тС рк у р С ку т оф р м а ц и р ье д
а LINECALLSTATUS оп и сы вае я в о з в р а щ асе т я н фу к ц и е , о т сп о с бн о сет й с р т уо й с в т а
с р т Уо й с в т о - с п е ц и ф ч н ы
т е щк т у е е с о тян и е вы з ова . Дан а й lin eG etC alistatus и з ав и с т , в сво , реж и м а вы з ов а и текщу ег о с о т ян и я
е р а с ш и р ен и я
ю у Ь З Л И П ОС
т с л е д ую щ и
а дю щ и адн ы х П р и и з м ен ен и с о б щ ен и фо р м а ц и фо р м а ц и
р и см ещ ен и и с о тян и е
С о ти т а тк ж е о б р аи т tstateEntryTime подустн вст о ли н и и с верси е р С ку т
а
е в ы е лд н о й вы з ов
LIN ECALLSTATE.
ю о б и з м ен и в ш ем с и о со стян и
е а дн о
Д ан о я с о т ян и и в TAPI п срмуедотн
й л д я р а хн е н и а п р и л о ж ен и е с о б щ ен и . Дл
я о бласт
ю п о с ы л ас е т е п ера д я п чо л е н у и а н уф к ц и
о п р е дл н
а юс л у е д щ и
м о браз о м
dwTotalSize, dwNeededSize, dwUsedSize, dwCallState, dwCallStateMode, dwCallPrivilege, dwCallFeatures, dwDevSpecificSize, dwDevSpecificOffset: DWORD; ($IFDEF TAPI20} dwCallFeatures2: DWORD; // TAPI v2.0 {$IFDEF WIN32} tstateEntryTime: TSystemTime; 7 / TAPI v2.0 ($ELSE} tstateEntryTime: array[0..7] of WORD; // TAPI v2.0 {$ENDIF} {$ENDIF} end; TLineCallStatus = linecallstatus_tag; LINECALLSTATUS = linecallstatus_tag;
я сркут
ы
,
LINECALLINFO п расевдтл н
ы в таб л
и р а с ш и р ен ы
х е -
я dwCaiiFeatures2 и е октр ы в а ю т рс т о у й -
PLineCallStatus = ^TLineCallStatus; linecallstatus_tag = packed record
П ол
-
й р кс е у т
я с о в т ес ю у щ е т от л ь к о о сн о в н у ю ин я о д п о л н и е тл ь н о й ин я lin eG etC aiistatus.
ь в н и м ан и е н а от , чт о п ол ы отл ь к о п р и л о ж ен и ям , к отры й TAPI 2.0 и л и в ы ш е .
LINECALLSTATUS
-
: dwD evSpecificSize И dwD evSpecificOffset, З а -
е Я Л ОП
е р аз м е .
, п реодсатв лен ы
я ин ю оч е .
. 2.26.
:zyxwvutsrqponmlkji
TAPI — и нт е й рс ф
п р о г а м м и р о ва н и я
п р е ин л о й ж
ля д
аТ б л и ц ол П
р аб о т ы
117zyxwvutsrq
с то неил фй
2.26. оПля
LINECALLINFOzyxwvutsrqp
с т р т ку р ы
е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
dwTotalSize
оП лн ы
й з мр а е
р (в хабйт
dwNeededSize
аз Р м е
р (в бхайт
dwUsedSize
аз Р м е с и о де р ж
р (в бхайт т поелзну
п О р е д ля
dwCallState
d wCallPr ivileg e
п О р е д ля о Пл
е и с п з о е у ль
й ио рм нф цаи
) о т ю о р м и н ф ца и
й чса т
оП л
е о п р е д ля
и с ур т к
, октра
я
е с о т ян и
е вы зо а
. оПл
е и с п о з уел ь
т
й и р еж м с о т ян и ы LINECALLSTATE_
т консат т п р и в ле г
ю вы зо а
я вы зо ва
, о предлн у
. ю в
е по л
ик е д ан о но м б ыт ще
е и с о де р ж т б о и вт ы е аги фл , уазкы ваю щ и е , ак и TAPI с м е о ж т и с п о з л ь в ат ь еп н р и л о ж е н м вы зо е в тщуек е м с о т ян и . с лЕ и в о пр ед л н аг фл е с о ит т 0, т о с о всетюущ а я нцки я фу н е м е о ж ь и с п о з л ь в ан а е н и п р ол ж м в дан о м вы зо е в туек м с о т ян и . о Пл е и с п з о е у ль т ок н с а т цнки фу
LINECALLFEATURE , о п и с а ни а фй л е пом ощ и п о TAPI
тЭ
о по л
е з а ы ку в е о разм ера я
р ем ен о г р са ш и р е н
тЭ о п о л е а зу к ы в е ур т ы о б л ас т ус р от й с в о т - с и п н ч е ы ц ф н а л оА г и н ч е н лт ы ь
dwCallFeatures2
ы д ан ы х
х LIN EC ALLPRIVILEGE_
ан Д о
dwDevSpecificOffset
и
ю
т д о п л н и е ы ьт
о к на с т
dwDevSpecificSize
х
Ы LINECALLSTATE
dwCallStateMode
dwCallFeatures
ы дан ы
) во з рща ено
т щу е к т е
Т Н а Т С Н КО
) суртк
й бн а о
е от к р ы
т р за м е , сща о держ
р (в хбайт
) о б лас т
е на й т
и п ам я т
т ы
и в
и пе
-
й ус р от й с в о т - с и п н ч е ы ц ф
т с м ещ ени и п ер м ен о г
и пм а т я
х в ы м о же т
а
, задн о е рса ш ирен
о р аз м е р а я
о d wCallFeatures. оПл е с и о де р ж р б о и вт ы х гао в фл , зднаы
е е о т нлач , с ащо дер ж
а с р ут к
т до п лн и х в ок н с а т
й х
LINECALLFEATURE2_
В р ем
tStateEntryTiine
е и нч л З ю а к
е
я изм ен и
я с о с тяни
я
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
В а нд о й лга в е м ы п расветди л и о сн о в н ы е н ав ы к ь и н фо р м а ц и я я в н о н ое д с а т ч н п р и в е нд а я з е дс о дв а н и я ад н н о г о п р о г ам н о г о и н е рт ф й с а . Онд ак п о з в ли т п о н ят ь осн овн ы е к о н ц еп ц и и и манех и з м ко м к боле е п орд бн ом у и з ч уе н и ю .
и р або т ы с TAPI. К о н еч н о а лд я убглуен н о г о и с ле о п р и в е дн ы й м е р а ти ы TAPI и п осжлуи т отл ч
, л -
ВЛАГ
А 3
M CI- инт е йрф с м лтуьим еи д
с дл
я ратоб
ы
а
ве В д и н
е
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Media Control Interface (MCI) — эт о и нйерф т с п р и н кд а л о г о п р о ма г и р о в на и я п н р ед а з н а ч ен ы й л д я п у р а в л ен и я р аз ли ч н ы м и л ь и м т у ед й н ы м и р со т й у в а м и в Windows. В ч аснт осит , с п ом щ ь ю дан н о г о и н ер тф й с а п р и к лна д о р га м и с т п ч оа е л у т в сво и рк у и воз м жн ост ь управлен и я таки м и р с от у й в с та м и ка к Wave- з квоуы е , MIDI- си н езт оары , CD- и DVD- ROM, а так ж е с р ут о й с в т в о с п р о и з в е нд и я и з ап и с и ц и фр о в г о в и е до . П релст ь ад н н о г о и н ер тф й с х с ур т о й с в т . о тм , чт о о н являсет я и ед н ы м дл я все х мльуит м иед й н ы
, й п ро
, а а в
б с р А т а г и яр с у ь о т н и з к ро у в н е в ы х к о м ан д п у р а в л ен и я , MCI п роедсавтля т в ы с о к р у в н ев ы й и н ерт ф й с с еид н о й с и е мт о й к о м ан д , н ез ави с м ы х о т раз ли ч н ы х м л ь у и т м ие д й н ы х с р ут о й с в т . MCI — одв ль н о и з в ен с т ы й и н е рт ф й с , п о е др ж и в а ю щ и й с я п оч т и в с ме и щ с у е ю св т у щ и м и з кв уо ы м и и в и е о да п а ю рна т ы м и с р е дв т а м и ЭВМ . С оти т а тк ж е з а м ие т ь , чт о MCI явлсет я ч а сь т Win32 Multimedia API, к о тр ы й , в св о ю о ч ер ьд , п роедсатвляе т бо ле е ш и ро ки е в о з м о ж н о ст и п о работ е с м л ь у и т м ие д а . Дл я работ ы с а дн ы м и н е р тф й со м в а м н ж у о п ок д л ю ч и т ь л м уо д ь msystem (воящдх и й в с а тн а д р н т у ю по а св т к у D elphi), в корт м о п и с ы в а се т я б о л ь ш и н св т о MCI- нфу к ц и й . К с о ж а л ен и ю о ас н т о в и ь т с н аи бо ле п р и к л ан д о г
, объе я н а в се е и н е рт с н ы
м а нд о х о т н к о ся т е м о ен т
о п р о г а м и са т
Ин т е рй ф
й л аг в х р аб о т ы и сп о ль з о в ан и
с ком аынд я р або т
т в о з м о ж н о ст
и п ор д б н у з ед с ь м ы п р и ве д о API с отч к и з р ен и
о м я
.
и ком а н-д с о ебщ ни И е до л г и а т к н а з ы в а ем ы
ы н е п р с е а д тв л я ы с MCI, п оэмт я а дн о г
ы МС х и н ер тф й с о
1 в боль ш е в к о м ан д ы
х с т ро й M CI
к
й св о е
и о сн о в ан а н а и сп о ль з о в ан и к (command strings) и ком ан д
й ч аст х ср т о
и -
MCI- и нтейврс ф
с о б щ ен и б ы с рт о г щ ен и и н ерт ф й с эи т м П р еж д в о п ро се
для
р аб о т ы
с м луьт и м иеда
119 zyxwvutsrqpo
й (command messages). И н ертфй с к о м ан д ы х ср т о к о д б уе н лд я о п о ч л еу н и я н е о б и дх м ы х р е з л ь у оа т в , а и н ертфй с к о м ан -д с о б й — лд я со з адн и я сло ж н ы х м л ь у и т м ие д й н ы х п р и л о ж ен и й . Д а н н ы е у ы в ы п о л н яю т п р и м ер н о но д и и т е ж е н фу к ц и . Олти ч и е м еж д и в мд у я и н е рт ф й с а м и з а к л ю ч а се т я отл ь к о в сп о с б е п ачо д и к о м ан д . е ч е м п р и п су т и ь к раз бо р у М С1 , бо ле е п ор д б н о о с а тн о в и м с я н а эот м .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
о м К а н ыд
е с т рок
и
К аж од е м л ь у и т м ие д й н о е с р ту о й с в т о и ме т с в о й в н р т е ун н и й н або р к о м ан д . П о сы лк а к о м ан д о й срток и MCI с п о м щ ь ю фн у к ц и и mcisendstring п р и в ед т к в ы п о л н ен и ю ет х и л и и н ы х ед й с в т и й . Н ап р и м ер , к ом ан д а я с рт о к а 'set cdaudio door open wait 1 указ ы в ае т с р ту о й с в т у CD- ROM (в MCI: cdaudio) от 1 , з а кры т ь л о тк , а срто к а 'Set cdaudio door closed wait , со втес н н о к ры т ь его . Дл я п осы лк и к о м ан д ы х ср т о к в MCI о п р едл н а н фу к ц и я mcisendstring, и м ею щ а я слюеуд щ и й ви д : fu n ct ion m ciSen dStrin g (lpstrCoirmand, lp st r R e t u r n S t r in g: PChar; uR eturn Len gth: UINT; hWndCallback: HWND): MCIERROR;
В к а ч е свт лен н ы
е п а р м е то е в таб л
в н фу к ц и я п р и н и м ае т с ю л уе д щ и е а р м гу е н ыт , п р есдатв . 3.1.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 3.1. Пар м е т р ы
аТ б л и ц аП р м е т
mcisendstring
р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
lpstrCommand
о м К на д
lp st rRet urnSt ring
р о тк С
а в о з р та
а о р м и н ф ца
uReturnLength
зам Р е
р бер фу
а и с п о л н яе м о
hWndCallback
э Хнд п ра м е т ю ву
я с р от к
а дл
л (Handle) онк р и с п о з су л е ь т я т п р о ц е ду ы о б р а ок т
я усротй
в MCI и о б ис полнеи й срот к
а дл
и о к м на д
ы
и
я п р и ем а MCI- с о б щ ени й й п р о г ма м , ес л и в в аш е и MCI- енипр лож й
. ан Ды е п р и с ту
П о сл е з а в ер ш ен и я н фу к ц и я в о з в р ащ ае т к о д о ш и бк и MCIERROR. ЕСЛ И фн у к ц и бы л а в ы п о л н ен а с уп е ш н о , т о в о з в р ащ аем о е з н ач ен и е рав н о 0; есл и п р и вы п о л н ен и и к о м ан д ы п рои з ош л а о ш и бк а , т о MCIERROR в ерн е т ко д ош и бк и , п ри ч е м в м лш а д е м сло в е MCIERROR едбу т н е п о с р е вд т н н о ко д ош и бк и , а в сарт ш е м сло в е в о з в р а щ а ем о й в ел и ч н ы — и енд ит ф к аот р драй в ер а , есл и о ш и бк
й -
я а
-
120
3 zyxwv
л ав Г
в ы з в ан а с ру т о й с в т о м н и я о б ош и бк К о м ан д ы о т р а с р ут о й с в т л ен и я с о ед р ж а н о й к ом ан ыд
. Дл т Оа В О З ЛЬ О П С И
е Н МОЖ е ср т о к
и МС а и к ом ан т од п о л н и е тл ь н ы
я раз бор 1 состя
а о ш и бк ь фну к ц и
и и п чолену и я етк с о в г о со бщ е ю MCI mciG etErrorString.
т и з п о следв алть н о г д п у р а в л ен и я
о о п и сан и х с ч л уа я
. В н екотры е а р м гу е н ыт
-
я и енд ит ф ка х к о м ан д
, п ренд аз н ач ен н ы
е лд
ы п у р ав я кон крет
-
.
К о м ан д а я срт о к а и ме т с ю л еу д щ и й ви д : "command device_id arguments", р MCl- рстоуй вста , дг е command— ком ан д , device_ id— и енд ит ф коат arguments — одп о лн и етль н ы е м а р еу гн т ы к о м ан ыд . И едн ит ф к аотр ы М С 1 с р туо й с т в п р ес а д т в л н ы в таб л . 3.3. Н ек о тр ы е к о м ан д е тл ь н ы е а р мгу е н ыт position ", куаз ы в аю щ и м л ь у и т м ие д й н ы м не у г т ы в с рт о к Т ак ж е в к о м а н ад Ы Д а н н ы х
П ТИ
П ри м е
ы MCI, так и е к а к open, close и л и play, и м ею т одп л н и . К ом ан д а play и м е т а рм г у е н т ы "from position " и "t o е н а то , с како й и п о каку ю п оз и ц и ю н ж ну о п р о и гр а т ь е ар й фа й л . С оти т так ж е о м т ие ь , чт о есл и в ы н е указ ы в ает е к о м ан ыд , т о ком ан д а п ри м е т а рм г у е н т ы п о муо лч ан и ю . х в к а ч евс т е п ер м н ы х м ож н о и сп о ль з о в ат ь юс л у е д щ и е : St r in g, I n t eger И TRect.
р и сп оль з ован и
я к о м ан д о
й срто к и
, октры ваю щ е
й лот
к CD- ROM:
mciSendString('Set cdaudio door open wait ', n i l, 0, application .h an dle); zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH
ы с о ебщ ни
о м К а нд
й
MCI п ом и м о обы ч н ы х к о м ан д ы х ср т о к п о е др ж и в а е к о м ан д ы с о б щ ен и й (command messages). К ом ан д и з тре х э л ем н от в : П ко
д собщ ен и я
• р ак у с т
, соердж ащ а
я п о сы лк и м ею щ а
к н а з ы в а ем ы й MCI со тя
е т
;
• н аб о р флаго в л я в бло к е п а р м ер т о в Дл
т ат ы с о б щ ен и
я п а р м ет , о п редляю щ и
и к о м ан я с ю л еу д щ и
ы дл х в ар и ан т
я к о м ан ыд ы дл
; я ком ан д
ы и увтержадю щ и
й п о
-
. д с о б щ ен и й ви д
а н фу к ц и я mciSendCommand, й в MCI о п редл н :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH
function mciSendCommand(mcild: MCIDEVICEID; uMessage: UINT; fdwCommand, dwParam: DWORD): MCIERROR;
В к а ч е св т л ен н ы
е п а р м е то . 3.2. е в таб л
в н уф к ц и
я п р и н и м ае
т с юл е у д щ и
е а р м гу е н ыт
, п арсветд
-
MCI- и нт е й рс ф
для
р аб о т ы
121 zyxwvutsr
с м луьт и м ие да
р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Оп и с а н е
аП р м е т m c ild
о и та к И д е н ф о к м ан д о су р о т й с т
uMessage fdwCommand dwParam
р су р о т й с в т
о м К над л аг Ф
а MCI. о тЭ т п ра м е т р н е и с п о з еу л т ь я M CI OPEN. онсКат ы о и ат р к д е н ф е прос м роет ь в таб л . 3.3
й с о б щ ени в в ы мет ож а с о б щ ени и дл
я о мк н ад
ы с о б щ ени я
с л а д кы в е м ы
е о п е р ат о
е л за т к У о к м на д ц и р еу св и т
ь н а рд а е ы с о б щ ени я т о нк , корт е о мк н ад ы з ан и к ч в с е т
Л и с тн
р и сп ольз ван и н в ли ст н г а CD- ROM. г 3.1. Упрваелни
. лагФ
и — э т о б иотвы
е м ар т и ц ы
,
м o r с с ур т ык . Пол е поеалчу
, октра я си о де р ж т п а р м ре т ы дл я е dwCallback дан о й с ур т к ы и де н т ф т м м MCiNOTiFY- собщ ине , окгд а д е й я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML
т ко е з н а ч ен и
д о ш и бк
и
И н фу к ц и и п р и в ы п о лн е . Дл я р аз бо р о и сп о ль з о в ат
я
MCIERROR. ЕСЛ
о 0; есл MCIERROR врен т ко д ош и бк и я о б ош и бк е м ож н
я н с к е о ль и х к о м на - д со б щ н е и й е 3.1. В адн о м п р и м ер
е локт
я с в MCI
я
П о сл е з а в ер ш ен и я н фу к ц и я в о з в р ащ ае в ы п о л н ен а с уп е ш н о , т о воз вращ аем о н и и к о м ан д ы п рои з ош л а о ш и бк а , т о о ш и бк и и п о ч л еу н и я е тк с о в г о с о б щ ен и н фу к ц и ю MCI mciG etErrorString. П ри м е п р с е а д тв л ит е локт
mciSendCommand zyxwvutsr
3.2. Пар м е т р ы
аТ б л и ц
е р ав н
, рабюот щ и е п р о г ам
а п р о и з в ед
а ь
х с CD- ROM, т ок т р ы -
м CD- ROM zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON
var MCI_OPEN_PARMS; mciOpenParms DWORD; dwDevicelD begin mciOpenParms.lpstrDeviceType := PChar(MCI_DEVTYPE_CD_AUDIO); if mciSendCommand(0, MCIjDPEN, MCI_OPEN_TYPE or MCI_OPEN_TYPE_ID, DWORD(SmciOpenParms)) О 0 then Exit; dwDevicelD := mciOpenParms.wDevicelD; mciSendCommand(dwDevicelD, MCI_SET, MCI_SET_DOOR_OPEN, 0 ) ; mciSendCommand(dwDevicelD, MCI_CLOSE, 0, 0 ) ; Halt (0) ; end.
пи Т
ы и драйев р В п р еы д щ у и п о сы лк и пу р а в л яю щ и он о й с и е мт
ы MCI- сут рой х раз елд ы ч ер
х м ы р аз о б р ал х к о м ан д М С1 з MCI с к он к рнет ы м
и в д а и н е рт ф й с а , онд ак о воп ро и рда й в ер а м
в , п ренд аз н ач ен ы с в з а и м о е й д св т и
х лд я я о п ер а ц и
и м л ь у и т м ие д й н ы
х ст у
-
122zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
3 zyxw
л ав Г
ро й ст в о с а тл я о кт р ы т м . В анд о м р а з ел д е м ы п о р ое б у м п р о яс н и т ь а нд н ы й воп рос . П р и усатн о в к е рд а й в е р о в , п оердж и ваю щ и х с а тн а д р т MCI, де л а се т я с о в т ес ю у щ а я з ап и с ь в фа й л е SYSTEM.INI и в со втюеу щ е р а з е лд е рест а Windows, корта я с в яз ы в а е т и е дн и т ф к а о т р MCI- рсотуй вст с к о н к нр е т ы м рд а й в е р о м . Част ь рд а й в е р о в , п оедр ж и в аю щ и х М С1 , и н аслт л и с е рт у я п р и усатн о в к е Windows, ч аст ь — п р и п о слюеуд щ е й с а т ну о в к е р аз ли ч н ы х усрто й ст в и п ро г ам . Н а ри с рд а й в ер о
й Фа
. 3.1 в ы м о ж ет в усрто й ст
л кв ар П :
а иВ
д о н а р б з И
п р о с м р тье в в рерст
е в а р п С
Им
1 иТ
REG SZ
g ] CDAud io
REG SZ
mcicda.dl
REG SZ
mclgtz3Z.dll
REG.SZ
mciseq.dll
REG_SZ
mciwave.dll
е н е п р и с в о ено
)
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM mciqtz32.dl REG SZ
Ё Э Sequencer д )
J
_J
21
4 Л
WKO»nb«T»p\ HKEyj.OCALJ1ACHINE\ SCfTWARE\ Micro Soft\ Win< to «sNTKurrentVersionV CI32
Ри с
К а к в ы з ам еит ли бы т ь с в яз а н MCI- сртоуй свт о д б а в л ясе т
. 3.1. Свзяк
, с онд и о н еск оль к а с к о н к рн ет ы я н ом е р ср туо й св т а
-
е •
mctavi32.dll
_j
( 8 Q Network
j Значе и (з н аче н и
S| MPEGVideo2
•••••Јj Midimap
п
REG SZ
)
g)M P6GVideo
| Ј ] ModuleCompatbllity
l )
я GQftVIVideo
^ 1 ( П о ум о лчан и ю
: С J MCI f - Й M O Extensions
; : :
а
к l
i—i.2l LanguagePack : Ј 3 LastFontSweep
.
м
, ка к вы илгяд т с в яз к а и е н д и т ф к ао т р в и е Windows.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP
Q IMM ffl Ј j IniFieMapphg
; : :
-
а иоиртак денфт
в MCI с драй верам
м и те м ж е и едн ит ф к аотр о раз н ы х драй в ер о в м драй веро .
. В эот м к и енд ит ф к аотр
и усрто й с т
м счлау
в
м MCI- рсотуй вст е дл я и енд ит ф к ац и у MCI- рстоуй вст
а м ож е
т и а
В ат б л . 3.3 п рсаедвтл н ы о сн о в н ы е з а о д км у е н и т р о в а н н ы е и е н д и т ф к оа т р ы т а кт ж е з а м ие т ь , чт о и едн ит ф к аот р с р ут о й с в т а ис MCI- сртоуй свт . С елуд п о л ь зс е т у я в к о м ан д ы х ср т о к а х , а к он сант а ус т р о й с т в а — в и н ертфй са х к о м ан д с о б щ ен и й .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC аТ б л и ц е дИ а и н т к о ф су т р о й с т в лд с т ро
и ие ндитак офр ы
ус т р о й с т в
MCI
р а я ком а ныд
о с н т аК н х
лд
а я ком а-нд соебщни
й
О п и с а ни
е M CI- сут ройст в
а
к
Не Не
3.3. Конс т ант ы
т т
cdaudio
M CI_ALL_DEVICE_ID
Вс
MCI_DEVTYPE_ANIMATION
с р от У й с в т о про и гры вани я ан и м ац и о н ы х фай ло в (Animation- playback device)
MCI DEVTYPE CD AUDIO
р П о и г ы е в л та ди с ок
е ус рто й с вт
а
ь ауди о км птка в (CD audio device)
-
MCI- и нт е й рс ф
для
р аб о т ы
123 zyxwvutsrq
с м луьт и м ие да
аТ б л и ц е Ид аи н т к ф о су т р о й с т в лд с т ро
zyxwvutsrqp
3. 3 (оокнчаи е)
р а
я омк а ныд
о нс т К а н лд
а
О п и с а ни е MCI- ус тр о й с тв й к zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA х
а
я ком а-нд соебщни
d at
MCI_DEVTYPE_DAT
р о в Ци ф е лт
d ig it alvid e o
MCI_DEVTYPE_DIGITAL_VIDEO
р о в Ци ф й ви део пр и гры ва е лт ь (Digital- video playback device)
other
MCI_DEVTYPE_OTHER
еН о п р де л н о
е усрот й свт
overlay
MCI_DEVTYPE_OVERLAY
р П о и г ы е в л ат в и де в и де о
ь анало г в о о в онк е ( о верлйно е ) (Video- overlay device)
scanner
MCI_DEVTYPE_SCANNER
п р Уав л е н и device)
sequencer
MCI_DEVTYPE_SEQUENCER
MIDI- соиезтан р (MIDI sequencer device)
vc r
MCI DEVTYPE VCR
п р а вУ л е н и но
videodisc
MCI_DEVTYPE_VIDEODISC
VCD- про и гыевлта player)
waveaudio
MCI DEVTYPE_WAVEFORM AUDIO
р По и г ы вна е / зпа и с ь WAVE- йол фа в (Waveform- audio device) zyxwvutsrqponmlkjihg
й ауди о пр и гры ва ь (Digital- audio tape device)
е с анкер о
К о м ан д
я M CI- окм а н ы MCI к лас и ф ц и рюу ст
я п о ч ыет ре
м (Scanner
е ви део м о агни тф м (Video- cassette recorder) ь (Videodisc
х и е дн и т ф к а о т р в м оуг т п о я в ль т с я так ж П ом и м о осн овн ы н ы е и е дн и т ф к а о т р ы , атк и е ка к avivideo — п ро и гры в аелт qtwvideo — п ро и гры в аетл ь Quick Time for Windows лд я в и едо фай ло м ат е Quick Time (*.mov).
л аК с и к ц ф
о
е и од п о лн и етль ь AVI- фай лов в в фо р
, -
д м к аетго р и ям
.
• zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е ын тимес С ы а дн к м о (System commands) — о бр а ыт в аю ст я н еп о с р едт в ен о MCI б е з учасит я др ай в ер о в мльуит м иед й н ы х с ур т о й с в т . О е ьы н з а т л е я б О ыт в а ю ст ц и ф к ац и ед р ж и в а т
ы адн кмо я к о н к рн ет ы и лю б ы ь о бяз аетль н ы
(Required commands) — н еп о сревдт н н м рд а й в е р о м м л ь у и т м ие д й н о г о с р ту о й с в т а е MCI- совм еист м ы е драй вер ы и усрто й свт е к ом ан д ы и флаги .
а од л ж н ы
о о бра . П о спе п од
-
124
3 zyxw
л ав Г
• zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA евынос О ил е ь ы н п ац о л и ы а дн к м о (Basic commands or optional т л д я п у р а в л ен и я MCI- сртуо й свтам и . П ренд аз н ач ен ы commands) — сжлуа а кт ж е л д я с а ут н о в к и о д п о л н и е тл ь н ы х оп ц и й осн овн ы х к о м ан д е тп у м п од ерд ж к и о п р е дл н н ы х н аб о р в флаго в дл я то й и л и и н о й к о м ан ыд . • е ы н и шр Р а с отл ь к
ы а дн к м о
(Extended com m an ds)— явлю ст у ит п у с р ту о й с в т а и л и рд а й в е р у
о к опредл н н о м
я к а к с и е мт н ы е и обяз аелть н ы В т о врме н аб о р м лд я любог о MCI- рстоуй вста п ое р д ж и в а ю с т я в с ем и MCI- сртоуй свтам и и сп о ль з о в ат ь с и е мт н ы е и л и о б я з а е лт ь н ы в на и е м о сн о в н ы х и л и расши рен ы л и ьт , п оедр ж и в ае т л и MCI- сртоуй свт е с лу д т восп оль з овьатс я р т е бм у о . 3.4 п ресадтв л н д MCI, р аз би ыт
В а тб л к о м ан
я
е к о м ан д
ы яв л ю ст я м и н и м аль н ы е и р асш и р ен н ы е к о м ан д ы н . В аш е п р и л о ж ен и е м ож е т в с е гд е к о м ан ыд , онд ак о п ер д и сп о ль з о х к о м ан д ав м н жну о лд я н ач л а о п ре д о ад н н у ю к о м а н уд . Д л я оп релдн и й к о м а н о дй , со бщ ен и е м MCIGETDEVCAPS.
а к лас и ф к ац и х п о к аегто ри ям
о м К а дн с о е б щ ни
а
М Ы СЕИ Т Н
а
MCI BREAK
sysinfo
3.4. Класицк яф е ком а нд
з а е Нн ч и м ощ ь у с р то й с в т
MCI SYSINFO
Л Ы ЬЯО Н Е Б Т З А
Е КДОМН А
capability
MCI GETDEVCAPS
я
MCIzyx
о пре вта
а клави ш и ь рбаот
, с по у MCI-
-
а
В о з в р ща еа о MCI- усрто й свт
т с исемт ну е в вид
ю о р м и н ф ац и е тескотв
ю й срот к и
Ы (Required commands) о П е а ч лу MCI- суротй в
т ио рм нф аци
MCI INFO
о П е а ч лу т тескотву о т MCI- суротй в
MCIJOPEN MCI_STATUS
ю о во змн сято ж
т MCI- суротй в
е П р в и н ач св т
х
а
info
Е КДОМН А
о код й мн ож
рЗ а к ы в е
Ы О НВ С
ком анд
е вноилаьугрт
MCI_CLOSE
status
а
ы
ю корт
close
open
е
Ы (System commands) zyxwvutsrqponmlkjihgfedcbaZYX
Е КДОМН А
break
м
я с и е мт н ы х , ртеб ум ы х и о сн о в н ы х .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP
О п и с а ни я
и
, осн овн ы
аТ б л и ц ом К а н д с т р ок
я е дй с в т е н н ы м .
о ю о рми нф аци
ю
а
я и ни ц ал зци
я и рокыит
е ус рто й
-
а
е оа П ч у л т ссутан о т MCI- суротй в
ю о рминф цаи
ю
а
Ы (Basic c ommands)
Load
MCI_LOAD
р г з уа к З
Pause
MCI PAUSE
зуа П в о з б н о в ле ди й н ы
а днаы
х и з фай л
. Во с про и зведни х дан ы
ы и з еущтк е х
а е и зпаис й по зи ц
ь м оу г и мимт ьлу е
т быт
ь -
MCI- и нт е й рс ф
для
р аб о т ы
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ 125zyxwvutsrq
с м луьт и м ие да
З А
аТ б л и ц о м К а нд с т р ок
zyxwvutsrqp
(оокнчаи е)
я о м К а дн а О п и с а ни е ком а нд ы а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA с о е б щ ни я
Play
MCI PLAY
Зп а су
Record
MCI_RECORD
ра т С
Resume
MCI_RESUME
е н и р П о д лж
Save
MCI_SAVE
п аЗ и с
Seek
MCI_SEEK
По з и ц о н и р о в а н и е ( п е р м о ак т в м и т лу ь е д и й н ы
MCI_SET
Set
MCI_STATUS
St at us
к во с про и зведни
я
т зпаис
с ан в т У л и ае с о т ян и
и вохщяд и
х дан ы
е во с про и зведни
я ил
ь м имт льу едийны
х дан ы
и запи с
х н а ди с
и к
) х дан ы
х
т о п е р ца и о н е усротй свт
е м о уг
е (и м режно
)
а
е оа П ч у л т су т а н о т MCI- суротйсват т Э о о б н я ез а л т ь о к м на д о н а п р е д с ав л т н
х
ю ио рм нф аци . т б ыт
я о к м на д ь д о п л н и е т ыь а и в о с но в ы
К а к бы л о ск аз н о ран е , н екотры е MCI- рстоуй вст а п р ео д с а т в л я ю чи к у од п о л н и е тл ь н ы е к о м ан д ы и л и м оид ф ц и юру т щс у е с вю т у щ и к о м ан ыд , одп лн я я и х р а с ш и р ен ы м и фл а г м и . В с е атк и а тк ж е в к а е гт о р и ю р а с ш и р ен ы х к о м ан д . В т о врме я ка р ен ы е к о м ан д ы п р и м ен яю с т я от л ь к о лд я к о н к р нет о г б о л ь ш и н свт о р а с ш и р ен н ы х к о м ан д яв л сет я м оид ф ц и р о в а н ы м м и к о м а н ад м и . Н ап ри м ер , к ом ан д а MCI_SET Л Д Я MlDIи ме т р а с ш и р ен н ы й н аб о р ф л а го в и п оп аед т в р а с ш и р ен н ы , п реж д е че м и сп о ль з о в ат л д я с р ту о й с в т а SEQUENCER. П оэмт у т о п р е дл и ь т , п оердж и вае р а с ш и р ен н о г о н аб о р , селуд вс т о э т у к о м а н д у с а кт и м н або р м ф л а го в с п ом щ ь ю
ю
, н о т . к . в дан о й е л аг и ф , х ком анд х zyxwvutsrqponmlkjih
т р аз бо т е о сн о в н ы е е к о м ан д ы овя дх т к н ек о тр ы е р асш и о MCI- сртуо й свта , и о сн о в н ы с р т уо й с т в (SEQUENCER) й н аб о р к о м ан д ь к о м ан д у и з т л и ад н н о е с рут о й к о м ан д ы с о б щ ен и я zyxwvuts
MCI_GETDEVCAPS.
В ат б л рс т о у й вс т а м я в лс е т н и е лт ь н ы атб л и ц р ы в е ал т п р а с е дв т л
. 3.5 п ресадтв л н а с о в м е с ит м о с т ь р а с ш и р ен о г о н або р а к о м ан д MCI с и MCI. С елуд т и м ет ь в ви уд , чт о атбли ц а р а с ш и р ен ы х к о м ан д я н еп о л н о й , т . к . дл я сп ец и ф ч н ы х MCI- рстоуй ст в м о уг т бы т ь од п о л е (и сп о ль з ему ы е от л ь к о л д я н е го ) ком ан ыд . Н ап р и м ер , в адн н о й е н е т б о л ь ш и н св т а р а с ш и р ен н ы х к о м ан д л д я ц и фр о в г о в и е од п р о и г я и п рои гры веалт я AVI- афй лов . е д уБ м с ч и ьа т , чт о в дан о й таб ли ц е н о сн о в н о й (ч аст о и сп о ль з ему ы й ) н або р расш и рен н ы х к о м ан д .
126
3 zyxw
л ав Г
аТ б л и ц
3.5. Ос но в й
MCI- аворйсту
н аб о р
р ас ш и р енхы
MCIzyxwv
о к м ан д
,
о м К а нд а п е од и р в а ж щ ю е О п и с а ни е ком а нд ы а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC с о еб щ н и я ад н у ю ком а дн у
ом К а н д с т р ок
я
configure c ue delete escape freeze
put
r ealize
setaudio
setvideo
sig nal spin step
MCI_CONFIGURE MCI_CUE MCI_DELETE MCI_ESCAPE MCI_FREEZE
MCI_PUT
M CI REALIZE
MCI_SETAUDIO
MCI_SETVIDEO
MCI_SIGNAL M CI_SPIN MCI_STEP
d ig it alvid e o
оПа к ло г в о г дл
waveaudio
д а л е н иУ
overlay
d ig it al vid e o , overlay d ig it al vid e o
d ig it alvid e o
d ig it alvid e o
d ig it alvid e o videodisc d ig it al vid e o , videodisc
о ди а о онк
а MCI- суротй в я п р о и г ы в ан и е с егм ент х и з звоук г
о П с ы кл вс т у
update
MCI_UNFREEZE
MCI_UPDATE
overlay
d ig it alvid e o
и запи с
и ус рто й р я я т исоничтк
ь и разм ер а в и де
а дл
я
о
ю п л ра и т а р о цв и фг
с а н Ут в л и а е р ы дл р ы е в л та
я р о цв и фг
с а н тУ в л и а е т р ы дл р ы в е а тл
я р о цв и фг
т и нсаритве у в онк о виедопр
т е -
я т адуиопрам ет
о виедопр иг
-
я виедопрам ет
о виедопр иг
-
я
М р а и к еу в м е ди н а ы
т уазкн у
ю позиц
ю
х т врща ени
е VCD- идс к ди с к
и о сантвли ает
о П ш го а в вп ер
б О н о в ляе ус р т о й с в та ляе п р о и г ы е в л ат е у щтк е г
, поул ы онк
с а нУ т в л и а е ц во е т у вы о д и г р ы в е ал т
ае Д е н иб р аж ны
-
т в и е д о б уф м и езноиб раж а ди с п ле
с а нУ т в л и а е е л ат ч вы о д
и ча Н н е ил
а
а о р ми н ф а ц и
с О в до а е б ж с выво д са Н р о т й к
и
а ауди о ан о файл
е пер м ещ ени и нза
д ил
а
е д
п о м еид-а оентк unfreeze
а я ил
ны
-
а
о П д г тв к
d ig it al vid e o , waveaudio
videodisc
з ки гуроацнф о г
у ь бер фу ь в и д е о на
т во змно с тж я поичлут
у изо
-
е т фрей , фаитечкс
м в соекнт
т (пер ис о вы еат о кдра
е и о б но в ) онк
я си мо держы а
о м
MCI- и нт е й рс ф
для
р аб о т ы
127zyxwvutsr
с м луьт и м ие да
ом К а нд с т р ок
MCI- аворйсту
я
zyxwvutsrqp
3. 5 (оокнчаи е)
аТ б л и ц
,
о м К а нд а п е до и р в а ж щ ю е О п и с а ни е ком а нд ы с о е б щ ни я а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ад н у ю ком а нд у
where
digitalvideo, overlay
M CI_WHERE
о П е а л чу ке дл
window
digitalvideo, overlay
M C I WINDOW
п О р е д ля н е о б х ди м в и д е о и з е н б р аж о к м на д д и ст вер о у м о ан л ч и
о о с а нт о в и м с я н а п ар м ета х е м ы н ем н ог е и н е р тф й с а к о м ан д ы х ср т о к , ка к боле у о г в о ри м ся , чт о п ер в о д ад н н ы х п а р м е то й — н е особ о сло ж н а я з а чд а и реш сает х MCI. Т а х ф л а го в в сркаут е к о м а н - д с о б щ ен и й м ы н е сатн ем , а , н ояащдх и м с я н а прилагем о м к о м п а к- т и д с к
Д але к о н е кт с С р аз о б щ ен и с о в т ес ю у щ и и н е тр ф й с р ам В ат б л п о рд б н о
. 3.6 п ресадтв л н е о п и сан и
С и н а тк с и
о к р а то
с о п и сан и
е п ар м ето
е о п и сан и в в ы может
я п ар м ерто
в с л ю е уд щ и й
• {} — о бяз аелть н ы
е п а р м еты
П | — в о з м о ж н ы
е вари ан т
е п а р м е то е н ай т
т дан ы , поелатуч я вывод
е о б и сотнчи е и разм ер а виде о т онок о вывес т
е онк
, в котр и цро ви ф . Бе з эот е выво др ай
а е е й
ы иезноиб раж я в онко , с о здан о е м MCI и и с позулеьм о е п о ю zyxwvutsrqponmlkjihgfedcbaZYX
к о м ан
д и рас м орти м и х е п ро ст м лд я и з чуен и я в в и н ертфй с к о м ан д со я он а о бы ч н о в ы с а тв л е н и е к чот , раз би рат ь к о м ан д ы оотш ле м ч и е ла т я к п ри м е е в к атло г е Source\ Ch03\ .
в MCI- к о м ан д и в SDK.
в . м в
. Бо ле
:
; ы п ар м ето
в к о н к р нет о
й к о м ан ыд
;
П zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA к е с и дн — армгуен т п а р м ета ; • [пр тмеа
] — н еобяз еалть н ы аТ б л и ц
К о м ан д
а
й (доп о лн и етль н ы й 3.6. Пар м е т р ы П а р а м е тр
окм анд
) п ар м ет MCI в и нт е й рс фе
р к о м ан ыд ком нхаыд
. с т р о к
ы
break
{off | on кд о
ав икш)л
sysinfo
{installname I name кес идн | name икес дн quan tity I quan tity open}
capability
{can ejec t | can play I can record | can save | compound device | device type | has audio I has video | uses file s}
open |
е
-
3 zyxw
л ав Г
128
аТ б л и ц
3. 6 (оокнчаи е)
zyxwv
ртемар П ы а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
днамоК info
[product]
open
[aliaszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH псевдоним] [shareable] [type тип устройва]
status
[mode I ready]
В ачулс е ртема п команд ы ястюялв втсйор о н е о в о т о г stopped— в т с й о р т с у
а mode ыньлетазябо м ор бан м о т е в т о я следующи е зя и н е ч а н : not ready— т с у ; paused— а з у а п ; playing— еинавыргио п о онелвонатс о
в :
load
{имя
play
[from позиця]
[to позиця]
record
[from позиця]
[to позиця]
save
[имя
seek
{to позиця]
set
[audio all off | audio all on | audio left off I audio left on | audio right off | audio right on | video off | video on] [door closed | door open] [time format milliseconds | time format ms]
status
{current track | length | length track номе р | mode | number of tracks I position | position track номер | ready | start position | time format}zyxwvutsrqponmlkjihgfedcbaZY
К а к ви н д ан т а з адв ем ы
о и з табли ц ы
файл}
файл] to start | to end}
, н ап ри м ер х п а р м е то в
[insert I overwrite]
, дл
я MCI- ком ан д :
, а и м ен о
ы Seek воз м ож н
ы р т и в ар и
-
• to zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — зип ц о я п о з и ц и о н и р о в ан и е в з адн у ю п оз и ц и ю ; • to st a r t — п оз и ц и он и рован и
е н а н ач ло
.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR
• to end — п оз и ц и он и рован и
е н а к о н ец
Ф и ц нук
ы M CI
и и м раоск
;
от Х я б о л ь ш и н свт о MCI- п ри лож ен и й и сп о ль зю у mcisendstring и mcisendcommand, в сам о й MCI сщу есвюту г ир д у е п о л ез н ы е н фу к ц и , котры м и в ы бетд у е п о ль з о вьатс Н аи бо ле е п о л ез н ы е и ч аст о и с п о л ь з ем у ы е и з н и х : • mciGetDeviceiD — воз вращ ае О бы ч н о п о ч л уе н и е и е н д и т ф к оа т р MCI_OPEN, к о трая , в св о ю о ч ер ьд
т и е нд и т ф к а о т а с в яз а н , октры вае
р с р ту о й с в т о с и сп о ль з о в ан и е т с р ту о й с в т
т
от л ь к о н уф к ц и т а тк ж е н е к о тр ы я н е м ен е ч а со т а бе з о н о г м к о м ан д о MCI дл я р абоыт
и е . . ы .
MCI- и нт е й рс ф
Е сл ад н н а
для
р аб о т ы
с м луьт и м ие да
и ж е в ы п о к а и м - ли б я фн у кц и я дл я в ас
129 zyxwvut
о п ри ч н а
м н е ои т х
е октр ы в а т
ь с ру т о й с в т о
,
;
• mciG etCreatorTask— п оз воляе т в а ш ем у п р и л о ж ен и ю и сп о ль з о в ат ь и енд ит ф и к а от р с р ту о й с в т а л д я п о ч л еу н и я э хн лд а з а дч и , со з адв ш ег о ад н н ы й и едн и т ф к ао т р ;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA я л д я с а ту н о в к и и п олу П mciG etYieldProc и mciSetYieldProc — и сп оль зю у ст ч ен и я ар д е с а callback- фну к ц и , сжлуащ е й л д я п ч о ел н у и я с о б щ ен и й о т МС 1 п р и вы п олн ен и и к о м ан д с ф л а ог м M CIWAIT. TO ест ь нфу к ц и я mciSetYieldProc п оз в ляе т MCI п родлж ат ь ид а л о г с ваш и м п р и л о ж ен и е м п о сл е тог , ка к в ы диад т е к о м ан д у MCI с флаго м WAIT. Э ТО Т фла г со бщ ае т MCI о том , чт о уп р ав лен и е од л ж н о в ер н ь т с у я к п ри лож ен и ю то л ь к о тоагд , к до г а п о с л ан а я комна д а бед у т п о л н ьо с т ю в ы п о лн е а . Н ап ри м ер , в ы м оже т е дат ь MCI ком ан д у в о с п р о и з в е нд и я MlDI- фай л а п р о длж и етль н о сьт ю в н ес к о л ь к о ми н ту . Бе з флаг а WAIT MCI н ач н е т в о с п р о и з в оид т ь аф й л и ут т л бед у т в о сп ро и з ж е в ер н е т уп р ав лен и е в аш е й п р о г ам е , а са м MIDI- афй ве д н в фо н е . Е сл и ж е в ы и с п о л ь з ет у е лф а г WAIT С ком ан од й в о сп ро и з в е ед н и я , т о MCI в ерн е т п у р а в л ен и е в аш е й п р о г ам е отл ь к о п о сл е од и г р ы в ан и я фа й л а д о кон ц а . О нд ак о д о п р о и гр ы в а н и я в ы м о ж ет е о п р е дл и т ь callback- фну к ц и ю л д я п е род ж к и ди ало г а в а ш ег о п ри лож ен и я с MCI; О mciG etErrorString - — н уф кц и н и е о п и сан и я дан н о й о ш и бк и П ом и м ат б л Д ан н ы в р ме
о н уф к ц и . 3.7, со з адю е м ак р о с я MCI п оедрж и в ае
й в МС 1 сщ у есювту т и л и п о ч л ау ю ы о ч ен ь в жа н т с ю л уе д щ и
я п ер в о ид .
т ко
, н е вс е форм ат , о н бед у
ы п о з и ц и о н и р о в ан и и п о ы кт
. П р т о в т е р гн т у
е в я в рн т у
и м еи д а . В н асотящ е :
р м фо ат о в
по зи ц о ни р о вани я
О п и с а ни е с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA В о з в р ща еа
т час
MCI_HMS_MINUTE
В о з в р ащ ае
т м инту
MCI_HMS_SECOND
В о з в р ща еа
т с еункд
. 1325
. е
я п оедрж и в аю ст я р аз е с а тн у о в и т ь н е п о др ж и в а е м ы й .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO
3. 7. М рако с ы
MCI_HMS_HOUR
5 Зак
, п ресадтв л н н ы
ы (tracks/ minutes/ seconds/ frames).
аТ б л и ц М ар о к
-
ы (minutes/ seconds/ frames);
• TMSF — рке/т м и ны т у/ нскеуыд / рфйе м и MCI- сртоуй свтам и м фо р м а т
е з н ач е
ы (hours/ minutes/ seconds);
П 1 MSF —• м и ны т у/ нскеуыд / рфйе м у о г в о ри м ся
и в срт о к в о
т м ак р о сы . М ак росы т фо р м а т п о з и ц и о н и р о в ан и ы п р и с о з а нд и и MCI- п ри лож ен и й е оф р м а т ы п о з и ц и о н и ро в ан и я
• HMS — часы / ми ны т у/ нскеу д
С р аз ли ч н ы м с р ут о й с в т о
д о ш и бк
ы и з фо рм та ы и з фо рм ат ы и з форм та
а HMS а HMS а HMS
MCIzyxwvutsrq
130
3 zyxwv
л ав Г
аТ б л и ц
zyxwvu
3. 7 (оокнчаи е)
с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
М ро а к
MCI MAKE HMS
о С з д еа им е З н е ча и
т ти
• ач с
т рм фо а п — цело я о т м шдла ег ы (м лдаш и
т п о з и ц о н и р в на и е чис л
о дли но о к срашт ем
й б ай)т
я HMS. ан ыД . :
й рм фо а
я MSF. ан ыД .
й рм фо а
й 4 б ай т у б уйа т
:
й 4 б ай т у б уйа т
т
;
• м и ын у т ; • с е у нк д ы
;
• н е и с п о з уе л ь м ы MCI MAKE MSF
о С з д еа им е
й (срашт и т ти
е Зн ч а и
т рм фо а п — цеол
о дли но
я о т м лдаш ег
• м и тн у
ы (м ладш и
• с е у кн д ы
;
• р е й фм ы
;
• н е и с п о з уе л ь м ы MCI MAKE TMSF
т п о з и ц о н и р в на и е чис л
о С з е ад им е е н чЗи а
о к срашт ем й б ай)т
т ти
т рм фо а п — цеол
т п о з и ц о н и р в на и е чис л
й бйта о дли но
о к срашт ем
и (м шдла и
) т
;
й (срашт и
я о т м лдаш ег
• д ок р ж
й бйат
й б ай)т
) й 4 б ай т
я TMSF. ан ыД .
у б уйа т
:
й рм фо а
т
;
• м и ын у т ; • с е у нк д ы
;
• ей м фр
ы (срашт и
й бйат ы и з форм та
)
MCI_MSF_FRAME
В о з в р ща еа
т фрей м
MCI_MSF_MINUTE
В о з в р ща еа
т м итну
MCI MSF SECOND
В о з в р ащ ае
т с еункд
ы и з фо рм ат
а MSF
MCI TMSF FRAME
В о з в р ща еа
т фрей м
ы и з форм та
а TMSF
MCI_TMSF_MINUTE
В о з в р ща еа
т м итну
MCI_TMSF_SECOND
В о з в р ща еа
т с еункд
MCI_TMSF_TRACK
В о з в р ща еа
т тре
ие н щ б о С В а дн о з н а ет
а MSF
ы и з форм та
а MSF
ы и з фо рм ат
а TMSF
ы и з форм та к и з форм та
а TMSF а TMSF
я MCI zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC м р а з ед л , о бр а окт
е м ы о ас н т о в и м с а с о б щ ен и
й л еж и
я н а о сн о в н ы т в о сн о в
е р аб о т
х с о б щ ен и я ы р аз ли ч н ы
х MCI. К а х п р и л о ж ен и
к в ы й
MCI- и нт е й рс ф
для
р аб о т ы
с м луьт и м ие да
131 zyxwvut
Windows. С о бщ ен и е в Windows — э т о факит ч еск и сркут а ад н н ы х , кот ра я п е р а с д т я п р и л о ж ен и ю п р и в о з н и к н о в ен и и от г о и л и и н о г о с о б ы ит я . Ср к у т а с о б щ ен и я с о едр ж и т в с еб : Hwdn— дес к р и п от р окн а , Message — ит п с о б щ ен и я , wparam— з н ач ен и е wparam, LParam— з н ач ен и е Lparam, а так ж е мо к т е у в р ем н и опт р а в к и Time (в м и л и секну ад х п о сл е з а п с ку а Windows) и р ку с т у Point, соедрж ащ у ю к о ри д н а т ы X, Y рскоу а мы ш и . С о бщ ен и я МС 1 н и че м н е олит ч аю ст я о т со бщ ен и й Windows. С ю л еу д щ и
е с о б щ ен и
я являю ст
П MMMCINOTIFY — воз н и к ае MCI- ком ан д а с усатн о в лен н ы р еа д с т я в Callback- нфу к ц и ю dwCallback к ом ан ыд - со бщ ен и я С о б щ ен и
е п ерад
D
т в то т м о ен т м лф а о г , раде .
т с лю еуд щ и
• wparam — фла D
я MCI- со бщ ен и ям и
: , кодг
а п о слан а м MCI_NOTIFY. Д ан н о е с о б щ ен и с к о рт й бы л п е р а д н ч ер
е з н а ч ен и
г вы п олн ен и я
, м ож е
а з а в ер ш ен
я в п о лях
р о й свт о м
т п р и н и м ат
ош и бк
е
е пе з п ол е
: ь сюлеуд щ и
е з н а ч ен и я
MCI_NOTIFY_ABORTED— MCI- рсотуй вст о п оч л и у п р ео д в т а и л а и л и п р е в ал а ед й с в т и е п оа н д о п р и м ер , п р и восп рои з венд и и с п ом щ ь ю р ан е _см Р1а у бы л а п очлуен а к о м ан д а MC_stop; MCI_NOTIFY_FAILURE —
я р ан е
о к о м ан у д й ран е е к о м а н ыд е п о а дн о
а в ы п о л н ен и
я к о м ан д
: , корта
я . Н а
й к о м ан д
ы
ы М С1- тс у
-
;
° MCI_NOTIFY_SUCCESSFUL— ш нат о
е (усп еш н о е
°
а з ам ен ен
MCI_NOTIFY_SUPERSEDED —
• LParam— и енд ит ф к аот щ ен и е в Callback- нфу к ц и ю • MM_MCISIGNAL— о п редл н с о б щ ен и е в о з н и к ае од с и т г а е т п оз и ц и
т в то ,
к о м ан д
) вы п олн ен и а дргоу й
р MCI- рстоуй вста . о от л ь к т м о ен о п р е лд н о
о ад н н о
я ц и фр о в ы
е со б
х в и ед о с рут й с в т , кодг к о м а н о дй - с о б щ ен и е
й
а п оз и ц и
;zyxwvutsrq
.
, п осы лаю щ ег
о лд т в рем н и
е к о м ан ыд
-
. Э т я в м еид а н н ы
о
х м MCI_
SIG N AL.
С о б щ ен и
е п ерад
т с юл е у д щ и
е з н а ч ен и
• wparam— и едн ит ф к аот щ ен и е ; • LParam— з н ач ен и е
р MCI- рстоуй вста , п ерадн о . е . п оз и ц и
MCI_DGV_SIGNAL_PARAMS, т
П ри м е
р
о п рел д н и
MM_MCINOTIFY п ри вед
я в п олях
я callback- фну к ц и н в ли ст н г е 3.2.
: , п осы лаю щ ег
е в п ол я в м иед ан ы х и
лд
о ад н н о
е со б
е dwUserParm . я
п чо л е н у и
я
р кс у т
-
с о б щ ен и
я
ы
132
i Лиснт Т ур
л ав Г
г 3.2. Ртоб а
а с Callback- цнкие фу
3 zyxwv
й zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON
е / / zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
// Опред л ни
е Callback- функци
и дл
я получени
я со бщени
я
// MM_MCINOTIFY / /
i
procedure Message_MM_MCINOTIFY(var Message: TMessage);
message MM_MCINOTIFY;zyxwvutsrqponmlkjihgfedcbaZYXW it
// Приме //
,
р и с п о л ь з о в а н и
я MCI- команд
ы с флаго
м mci_Notify
var PlayParm: TMCI__Play__Parms; FFlags: Longint; begin PlayParm.dwCallback := Handle;// О к н
о д л
я получени
я со бщени
й
FFlags := 0; // Посылк
а со бщени
я MM_MCINOTIFY посл
е выполне и
я MCI- к о м а н д
FFlags := FFlags := FFlags or mci_Notify; mciSendCommand(MCI_DEVTYPE_WAVEFORM_AUDIO, mci_Play, FFlags, Longint(@PlayParm)); end; / / // Функци
я обра отк
и со бщени
я MM_MCINOTIFY
II procedure Message_MM_MCINOTIFY(var Message: TMessage); begin case Message.WParam of mci_Notify_Successful: begin // что- т
о дела
м
end; mci_Notify_Superseded: begin end; mci_Notify_Aborted : begin end; mci_Notify_Failure end; end; end;
: begin
ы
MCI- и нт е й рс ф
О би щ
для
р аб о т ы
е флаг
с м луьт и м ие да
и дл
133 zyxwvuts
я M CI- омк а н
д
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP
К а к в ы уж е з н ает , п р и п осы лк е к о м ан д с п ом щ ь ю н фу к ц и й mciSendCommand и mcisendstring в ы м ож ет е з а дв т ь а кт ж е р аз ли ч н ы е ф л а ги , в ли яю щ и е н а п о в е нд и е оп т р а в л яем о й к о м а н ыд . Ф лаг и — эт о би отвы е м ра т и ц ы , склыад т бы т ь св о и , онд ак о в а ем ы е о п е р ао т м or. Дл я кажод й к о м ан д ы лф а г и м оуг щс у е с вю т у т фл а ги , явлю щ и ес я о бщ и м и лд я лю бо й MCI- к ом ан ыд . Т ак и х ф л а го в дв а — wait и notify. Р ас м орти м и х п о рд б н е , т . к . и сп о ль з о в ан и е а дн ы х фл а го в п р и ог д с т я н а м п р и соз анд и и п р и л о ж ен и й . я дл я санту овк и о ж и а нд и я о к н ч ан и я в ы п о л н яем о г • Ф ла г wait п ри м ен ясет п р о ц ес а п р и л о ж ен и ем . Е сл и в MCI- ком ан д е н е и с п о л ь зс е т у я ад н н ы фл а г , т о п р и вы п олн е и и анд о й к о м ан д ы MCI з ап сук ае т фо н о в ы й п ро ц ес с и сраз у ж е в о з в р ащ ае т п у р а в л ен и е в ы з в а ш ем у а нд ы й п р о ц ес с п ри л о ж ен и ю . Чот , со гласи еть , н е сов е м о д бу н о , н ап ри м ер , оч ен ь сло ж н п р е в ат ь в ы п о л н ен и е MCI- п роц ес а бе з и сп о ль з о в ан и я к лав и ш и п ре ы ва н и я + . Дл я акт о й с иа ц у т и в п р о г ам е о бы ч н о п с р м уе д а т ри в аю т с р е дв т а од с р о ч н о г о п р ек а щ ен и я фо н о в г о MCI- п роц ес а с по м ощ ь ю дргиу х MCI- к ом ан д . Е сл и ж е в ком ан д е и с п о л ь сз ет у я фл а г wait, т т о к н ч ан и я э от г о MCI- п роц ес а , а п осл е ег о о к н в аш е п р и л о ж ен и е ж ед ч ан и я п ч о л а уе т ад л ь н е й ш е е пу р а в л ен и е . • Ф ла г notify жслиу т л д я в оеу д м л н и п р о ц ес а . К а к бы л о ск аз н о , п р и wait з аписту я оф н о в ы й MCI- п роц ес и п р о ц ес а е дб у т ит д и п ар л е ь н о ш а я п р о ц ес , з ун ал а о з а в ер ш ен и и сп о ль з о в ат ь лф а г notify. Дей свти ель н о сп ос б а в у е од м и т ь п р и л о ж ен и е о ск и м о ж н о п р о в е ят ь а нд ы й п р о ц ес нфу к ц и й , н о так о й по хд д яв с л е т с л е з а в ер ш ен и я MCI- ком ан д ы с флаог с о б щ ен и е MM_MCINOTIFY, и н форм и юру щ е в ращ аю щ е е р е з л ь ау т т в ы п о лн е и я
т р уСк
ы дыан
я п р и л о ж ен и
я о з а в ер ш ен и и сп о ль з о в ан и и MCI- ком ан , п осл е ч ег о в ы п о лн ен и . Дл я отг о очбт ы п р о г ам а и п ар л е ь н о г о MCI- п роц ес а , н е щсу есвту т бо ле з а в ер ш ен и и MCI- п роц ес а с с п ом щ ь ю н и з к ор у в н е в ы я о д ер м т у к и м и м ало э фекит в н ы м м notify п ри ло ж ен и ю едбу е о з а в ер ш ен и и к о м ан д ком ан д ы в MCI- сртоуй свте
о й о о -
и MCIд б е з фл а г а е п р о г ам ы , з ап сиут в , н ж у о е п р о стг о . Т ео р ит ч е х API. П о т п о слан о ы и воз .
х M CI
Б о л ь ш и н св т о к о м а н - д с о б щ ен и й и сп о ль зю у т р аз ли ч н ы е р к ус т ы ад н н ы х , п е р а дв е м ы е в в и д е к у а з е тл я н а ар д е с р к ус т ы в п ол е dwParam нфу к ц и и mciSendCommand. Дл я раз ли ч н ы х к о м а н - д с о б щ ен и й п с мр у е д о т н ы р аз ли ч н ы е р с к ы ут . В ы з ы ва я mciSendCommand, м ы соз аед м р к ус т у с дан н ы м и , н еоб о и хд м ы м и к о н к рн е т о й к о м а н ед , и паерд м н уф к ц и и к уа з е л т ь н а н е . Н а -
134
п р и м ер в п ол сы лк
3 zyxwv
л ав Г
, п р и опт рав к е MCI- ком ан д е dwParam п ерасдт я к у а з е тл е ком ан д ы MCI_SET куаз етл
ы MCI_PLAY С ЩМОПЬ Ю mcisendcommand ь н а р ку с т у MCI_PLAY_PARMS, а п р и п о ь н а ср укт у MCI_SET_PARMS .
т п р и н и м ат ь р аз ли ч н ы е С о ти т о м т еи ь т , чт о н екотры е MCI- ком ан д ы м уо г р ук т с ы в п а р м ер т е dwParam. Дан ы е р ук т с ы яв л ю ст я сп ец и ф ч н ы м и л д я к о н к р не т ы х MCI- сртуо й свт . Н ап ри м ер , к ом ан д- со бщ ен и е MCIOPEN м о ж е т п р и н и м ат ь сркут у MCIAN IMOPEN PARMS п р и октры ит и усртой свт а п ро и рг ы в а н и я ан и м ац и и ИЛ И общ у ю р ку с т у MCI_Open_Parms. П р же д п о ль зю у и сп о ль з о в ан и р ах п о слан к о м ан д ад р н т о й
е че м и сп о ль з о в ат ь р аз ли ч н ы е MCI- ком ан ыд , селуд т п р о в е и ьт , и с т л и он и ср кут ы а дн ы х в к ач есвт е п а р м ет а dwParam, а в счлау я п р ав и ль н о з ап о лн и т ь п о ля , п рсаедвтл н ы е в дан н ы х сукрт . Т акж е с ле уд т о б р аи т ь в н и м ан и е н а MCI- сртоуй свто , котр м у е д бу а к о м а н ад , т . к . воз м ож н о л д я к о н к р нет о г о с р ут о й с в т а и к о н к р ет о ы сщ у е с в т у т св о я с о б в т е н а я р а с ш и р ен а я (п о ср ав н ен и ю с о ан с т ) срктау .
С е лу д т ат к ж е о м т ие ь dwcailback, в корт с о б щ ен и й .
, чт о вс е MCI- р укт с ы и м ею м к ау з ы в а с е т я э нх д л (Handle) ок н а лд
Т ак ж е со т и т и м ет ь в в и д у с лю е у д щ е н ля а к с в е дн и ю п а р м е ыт , з ак лю ч ен ы с а тн у о в и т ь с о в т ес ю у щ и е лф а г mcisendcommand. Дл я окжад й MCI- ком ан д о т г о чо б т ы к о м ан д а MCI_STEP п ри н ял M CIAN IM STEP P ARM S, н ж у о к уа з т mcisendcommand ДЛ Я слюеуд щ и х М1С -ЙВ ТоС р т ус П MCI_ANIM_STEP_FRAMES— лд фа й л о в (Animation);
: лд я отг е в п о ля и в п а р м ет ы дан н ы а к с в е нд и ь с ю л уе д щ и
я с р т уо й с в т
• MCI_DGV_STEP_FRAMES — ДЛ
Я ц и фровы
П MCI_VCR_STEP_FRAMES — лд
я в и е о д м а гн и о т ф н
т о бщ е я п р и ем
е т й -
е п ол е а MCI-
о ч о тб ы MCI- ком ан д а п ри х ад н н ы х н фу к ц и й , н ж у о е fdwCommand н уф кц и и е флаг и св о и . Н ап ри м ер , дл я ю п ол е dwFrames р куст ы е фл а г и в н фу к ц и и :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK
а п р о и гр ы в а н и
я ан и м ац и о н ы
х Вройстиеуд
х
в (digitalvideo); а (VCR)
и т . д . В ат б л . 3.8 п ри венд ы к р а ти е о п и сан и ри я м усрто й свт . О бщ и е ср кут ы м о уг р и й с ур т о й с в т . оБле е п ор д б н у ю и н фо р м а ц и Multimedia Programmer's Reference. Н е с м ор т п р и в яз а н ы с р к т уа м и
я н а бо ль ш о е к о л и ч е св т е к MCI- рсотуй вст .
о п р ес а д т в л н ы , явлю ст
я скурт т бы т
р MCI, раз би ыт ь и сп о ль з о в ан ы дл ю в ы в с е гд а с м о ж ет х ср к т у я в з а и м о з а м ен яем ы м
, м н оги
х п о к еог а т я в с е х к е а го т е н ай т е и з н их и с о бщ и м
и в , и
MCI- и нт е й рс ф
для
р аб о т ы
с м луьт и м ие да
135zyxwvutsr аТ б л и ц
о пи с ани е
MCIzyxwvutsr
с т р т ку р
а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
С тр у к т р ОБ Щ И
3.8. Крат оке
Е Р УТК РСТ
Ы ДЛ
MCI_GENERIC_PARMS
MCI_BREAK_PARMS
Я ВЕС
Х УЙОСТР
В
у р та к С , н е сащ о держа я в с еб е ника р ко м е по л я dwCallback. и жлуС т в с во е ок й дл я MCI- омк нда , октры е н е р б а юо т ны м и до п лниеытьм и д ан ы м и , предсавтлн ы м д р уг и х сруатк х
х пар м ерто в м род
ру т к С
е клави ш а п р е д н аз
а с и о де р ж я MCI- процес а
р ы в на и е нч
ан ы Д
а дл
MCI GETDEVCAPS_PARMS
MCI_INFO_PARMS
MCI_LOAD_PARMS
MCI_OPEN_PARMS
т иорм нф цаи
я о к м н а ыд - с о б щ е н и
я
ру с т к
и и с п о з су л е ь т я е с гоа фл
а
п р е д н аз ч
а дл
я M CI_GETDEVCAPS, с ичытваю щ е
ус р то й с в т
а хеарткну
ан Д
я ру с т к
ю д л
ру с т к а и с п о з еу л т ь я M CI OPEN и си о держ от р wDevicelD дан о г о у с р т о й с в та о еч р д ь , б уде т и с позльва н д л
ан Д
я р у тс к и о кнеч п р е д н аз ч
MCI_RECORD_PARMS
ан Д по зи ц
MCI SAVE_PARMS
MCI_SEEK_PARNS
я с ур т к и з па и с ы в еа м ы я о к м н а ды - с о б щ е н и
ан Д
я ру с т к м о м с пом ощ ь
о к м на д ы - с о б щ е н и
-
ю о зае гр уж я в ком ан
-
я д л я ок м а н д ы т в с еб е и а кд е н т ф , октр ы й , в с во я окм над- с о б щ ени й
т ио рм нф цаи
ю о нначлоь х м еди ан ы
ю
м х и
я M CI_PLAY
я о к м н а ыд - с о б щ е н и
а с и о де р ж
т о р м и н ф ац и
ю о нначлоь х и предназ ч
х м е д и ан ы
й а
я M CI RECORD
а с и о де р ж ю ком нады- с о б щ ени
я ру с т к н и р о в ан и
я ин ю ок м а н д ы
е во с про изв д м ы а дл
дл
ан Д
а с и о де р ж м с егм ент
ю
я п о ле у ч н и
т о р м и н ф ца и е и и с позуельт
я
я ок м а н д ы
а ио рмнф аци
а дл е с по м о щ ь
с о б щ ени
MCI_PLAY_PARMS
-
й с MCI-
я ус рто й с вт
а п р е д н за ч и о MCI- суротй в я MCI INFO
я ру с т к а с ио де р ж м о м в MCI- суротй в о й л фа де - с о б щ е н и и MCI LOAD
ан Д
и пре
, ес л и 1 М С - ом д к н а а м M CI_BREAK KEY. я о к м б и н ца я л ав к и ш
с о б щ ени
ан Д рм фо аци с о б щ ени
-
я M C I BREAK.
й о к д квлаиш с а ро т в л а н а выпо лне и П о у м о ан л ч и ю у с а н тв л и с а е т +
ан Д
и в
ю о код я ру с т к
, ан Д
, е з аглуш т с р аз л и ч
а сио держ
ю о с орханяе я M CI Save файл
т о р м и н ф ца и т ио рм нф цаи
я в м и т л ь у е ди й н ы
х д ан ы я M CI SEEK
ю дл я позицо х с по м о щ ь
е ю
3 zyxwv
л ав Г
136
аТ б л и ц
zyxwvu
3. 8 (пернио лд)ж
О п и с а ни е а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
тС рк у
ру т к С н о льа
MCI_SET_PARMS
а с и о де р ж е с о т ян и
т д ан ы е е MCI- суротй ва
о к м н а ед - с о б щ е н и MCI_STATUS_PARMS
ан Д ус т н о
я ру с т к й о р ми н ф а ц и
а п р е д н за ч и о б MCI- суротйсвет
ан Д
я ру с т к й е н х ти ч с о к
Ы ДЛ
ру т к С , выохнд й усротйсвт
Я ПЛ ЕТ РЫАВ ОГИ
MCI ANIM OPEN PARMS
а с и о де р ж х MIDI- с иоезнрта й по р
ан Д
я слЕ м ент мет о ж вм ес т
.
т д ан ы
е о б ус ан тв л и ае м ы , икат х ак т и т . д . Ис позеулть а в ком наде- с о б щ ени
ру с т к а п р е д н за ч я MCI_OPEN.
х на к тем
-
п проигыва я дл я уснаотвк и M CI SET
и
а
дл
я о к м ан д ы
-
и в ы н е ои х т е и с п о з л ь в та ь р са ш и р е н ы е эел ы д ан о й с ру т кы , пр и раб о т е с M CI OPEN В Ы е в о с п о з л ь в ат я с ур о т к й MCI Open Parms о MCI Anim Open Parms
ан Д
я ру с т к
а си о де р ж а дл
с лЕ
и в ы н е ои х т , икат е ак е во с поз львта
м е ын т ме т о ж ан Д
я ру с т к он к
т ио рмнф аци е в о с п р о и з в о ди м о
м с е гм е н т
р П е дн з а ч
MCI ANIM STEP PARMS
я рза
И
и о кнеч
MCI_ANIM_RECT_PARMS
я
и M C I S YS I N F O
Я ИМ НЦ А с о б щ ени
MCI_ANIM_PLAY_PARMS
я са т
А с р о т йа к ни я о пци
Р У Т К РС Т У
я п е о н чи у л . Ис пзоеутль
я в ком наед- с о б щ ени
Я M IDI- ОРТЗ АЕ НИС
MCI_SEQ_SET_PARMS
а дл
а д л я п о ле у ч н и и о б MCI- суротй ве
а п р е д н за ч й о р м и н ф ца и
И с п о з еу л т ь
Ы ДЛ
я в
и M C I STATUS
ли нч о
Р У Т К РС Т У
е о пци . Ис пзеоутьл
и M CI_SET
в о к м н а ед - с о б щ е н и MCI_SYSINFO_PARMS
, насрит вающ и
а дл
ан Д
я о к м н а ды - с о б щ е н и
е и с п о з л ь в та к нлач
я ру с т к
м и
я M CI PLAY.
о и коне я с ур о т к
а си о де р ж
я о к м н а -д с о б щ е н и
к и пенио л ж
ю о нно ьлач й на и м ца и
ь р ас ш и р е н ы е э ел ц во с п р о и звед ни я , в ы й MCI Play Parms
т о р и м н ф ац и
ю о р за м е р а
х
й M C I PUT И M C I WHERE
а си о де р ж я в м еиднаы
т о р м и н ф ца и х дл
ю дл
я уснаотв
я ком нады- с о б щ ени
я
MCI STEP MCI ANIM UPDATE PARMS
ан Д
я ру с т к ин
и р за м е р о
с о б щ ени MCI ANIM WINDOW PARMS
ан Д
я ру с т к ни я п о в е д н и с о б щ ени
а си о де р ж в он к а п р о и г ы е в л ат я MCI UPDATE
т о р м и н ф ца и
а сио держ т ио рм нф аци м он к а п р о и г ы е в л ат я MCI WINDOW
ю о б о б н в ле я для ' окм анды ю дл я упрвале я д л я о к м ан д ы
-
MCI- и нт е й рс ф
для
р аб о т ы
137zyxwvuts
с м луьт и м ие да
аТ б л и ц Ст р ку Р ТУ К С ТР У
а
О п и с а ни Ы ДЛ
Я ЦФИ РОВГ
MCI DGV CAPTURE_PARMS
е
Я zyxwvutsrqponmlkjihgfedcbaZYXW
О Л ЕТ Р Ы О В А П И Г В И Д ан Д
я р у тс к
а п р е д н аз ч
т а в и де о н а ы MCI DGV COPY_PARMS
ан Д
х дл
я ру с т к я с е гм е н т
в н иа
а дл
и звах
а дл
я
-
я M CI CAPTURE
я дл я нсаротйк х в е б уф
е ус ан т в л и ае т
и окп и р о
-
р о б м ен
о к м н а ды - с о б щ е н и
, ика
о к п и р о в та
я насрто й к
я о к м н а ды - с о б щ е н и
а и с п з о е у т ль а м е ин д а ы
п р е д н аз ч
ж ка Т MCI DGV CUE_PARMS
zyxwvutsr
3. 8 (пернио лд)ж
а и
я M C I COPY.
е канл
ы (виед
о ил
и адиуо
)
и по зи и зап и с ь
-
ь
ан Д
я р у тс к , с корт
ци ру т к С
а дл
а п р е дн з а ч й ннсчает
я во с п р о и звед ни а дл
а п р е д н аз ч
я насрто й к е ил
я о к м на д ы - с о б щ е н и
. я
MCI_CUE MCI_DGV_CUT_PARMS
ан Д
я с ур т к я с е гм е н т а и с п о з уе л ь т е р у тс к и аидоу ) н жну
з ан и ру т ж ка Т ил MCI_DGV_DELETE_PARMS
ан Д
я ру с т к я с е гм е н т
ле н и
а п р е д н за ч а м е ид н а ы я в о к м н а ед - с о б щ е н и а ус ан т в л и ае т о в ы р е з та ь
ан Д
я
ру с т к
я ру с т к
ан Д
я с о б щ ени
MCI DGV LOAD PARMS
а д л я н ас р то й к . Ис позуельт
а
а
п р е д н за ч
а п р е дн з а ч и о п р о и г ы е в л та я MCI INFO
й о р м и н ф ца
ды - с о б щ е н и MCI DGV LIST PARMS
е ан к л
и уда я дл
я
дл
я
о к м ан д
-
й MCI_FREEZE И MCIJJNFREEZE
ан Д ще
, ика
и выре . ркутС и M CI_CUT. ы (виде о
я M CI_DELETE
с ообщ ени M CI DGV INFO PARMS
я нас рто й к р о б м ена
а п р е дн з а ч а ди у а о н ы х
о к м н а ды - с о б щ е н и MCI DGV FREEZEJPARMS
а дл х в бе фу
ан Д
а д л я п о л уе ч н и е с по м о щ ь
ру с т к а и с п о з уе л ь т я MCI_LIST
я р у тс к
а и с о де р ж е и и с п о з уе л ь т
м о м йл фа
я
дл
т о р м и н ф ац и я в о к м ан д е - с о б щ е н и
я об
-
ю ком ан я
-
о к м ан д ы
-
ю о зае гр уж
и
MCI_LOAD MCI DGV MONITOR PARMS
ан Д
я ру с т к п р о и г ы в еа м ы
MCI DGV OPEN PARMS
де - с о б щ е н и в ви д н ап р и м е р
е йл фа
ан Д
я
с о б щ ени р ен ы с лЕ м ент м ет о ж
, чер
а и с о де р ж т ио рм нф аци х в и ед о н а ы х и и с позуельт к дан ы и MCI LOAD. Исоничт а и л и в неш нег о с и г н ал з виедовх д
с ур т к
а п р е д н аз ч я M C I OPEN и си о держ е э л е м е ын т . и в ы н е ои х т е и с п з о ль в та ы д ан о й с р ут к ы , пр е во с позльват я с ур о т к
ю о б и с отнчи к я в ком ан х ме ож т б ыт , по с уптаю щ его
а дл т р з а л и н чы ь р са ш и р е н ы и рба от
е ь
я о к м ан д ы е р ас ш и
е э ле е с M CI OPEN В Ы й MCI Open Parms
, -
аТ б л и ц тС р к у
3 zyxwv
л ав Г
138
zyxwvu
3. 8 (пернио лд)ж
а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
MCI_DGV_PASTE_PARMS
ан Д
я ру с т к т а д ан ы х з н е ча у с а н вт л и а е т в с а лтя
MCI_DGV_PAUSE_PARMS
а и с п о з еу л т ь
я дл
, всаеялмт ы а дл
х и з бер фу я о к м н а ды - с о б щ е н и , ика
е кнла
ы (ви де
я усанот вк и с емг е н а о б м ена , и пренда я M C I PASTE. ажкТ о ил и аидуо ) н жну
е о
ь
ру т к С а п р е д н за ч MCI PASTE. ан Д
а дл я ру с т к
я о к м на д ы - с о б щ е н и а ан л о г и ч
я а с ур т к
е
MCI_GENERIC_PARMS MCI_DGV_PLAY_PARMS
ан Д
я ру с т к
а и с о де р ж
и о кн е ч п р е д н за ч
а дл
ан Д
я ру с т к
я о к м н а ды - с о б щ е н и
де - с о б щ е н и ан Д ил
и
я ру с т к в и де о н а ы
MCI_DGV_RECORD_PARMS
ан Д по зи ц дл
я р у тс к и зпаис ывеам ы
м е ны т
е э ел
в о с п о з л сь в ат
а си о де р ж
я р у о ст к
й
ю о р з ам е р а я в ком ан
т ур о в е н
ь е с ч ва к т я
т о р и м н ф ац и
х -
а и д уо а
-
в о м к ен д а
-
ю о ннольач х и преднзач
х м е д и ан ы
я о к м н а ды - с о б щ е н и
с лЕ
ь р са ш и р е н ы
а о п р е д ля х и и с п о з уе л ь т и MCI_QUALITY
с о б щ ени
м х и
я M CI PLAY.
е и с п з о ль в та е
а си о де р ж т о р и м н ф ац и я (рзам ера х о н к а) . Ис позлусеьт и MCI_PUT
и ез н о б р а ж MCI DGV QUALITY PARMS
ю о нноальч х м единаы
е вос произв дм ы
с лЕ и в ы н е и о тх м е ны т , в ы мет ож MCI Play Parms MCI_DGV_PUT_PARMS
т ио рм нф аци
м с егм ент
й а
я M CI RECORD.
и в ы н е ои х т , в ы мет о ж
е и с п з о ль в та е
ь р са ш и р е н ы
е э ел
в о с п о з л сь в ат
я
-
ру с о т к
й
MCI_RECORD_Parms MCI_DGV_RECT__PARMS
ру т к С
а
с и о де р ж я
еи н з о б р жа
т (рзам ера
о к м - н а хд с о б щ е н и я х UNFREEZE И MCI_WHERE MCI_DGV_RESERVE_PARMS
ру т к С
а с и о де р ж
в и р о в на г д и с ак
.
о р м и н ф ац и х
о н к а)
.
M CI_FREEZE,
т ио рм нф цаи
о п р о и г ы е в л та И с п з о е у т ль
ю И с п о з уе л ь т
ю о рзам ера я
м п р о с та н в в
о
р за м е р а
х я в
M CI_PUT, M C I
х зраез а сокгт же
о к м н а де - с о б щ е н и
о и
MCI_RESERVE MCI_DGV_RESTORE_PARMS
ру т к С ле
а с и о де р ж т ио рм нф цаи , bitmap корт г о всваляет buffer) про и гры веалтя . Ис позеулть с о б щ ени и MCI_RESTORE
ю о гиечс оркаф я в фрейм - е б фу
MCI DGV RESUME PARMS
ру т к С а и с п о з уе л ь т MCI RESUME. ан Д
я о к м на д ы - с о б щ е н и а ан л о г и ч
я дл я ру с т к
MCI_GENERIC_PARMS
м й фа р (frame я в о к м ан д е я а с ур т к
е
MCI- и нт е й рс ф
ля д
р аб о т ы
139
с м луьт и м ие да
аб Т л и ц а Ст р ку
zyxwvutsr
3 .8 (пернио лд)ж
а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
MCI_DGV_SAVE_PARMS
ан Д
я р у тс к ц и ю о с о р х ан я е м о (онак) . Ис позеулть с Ел м е ын т
а и с о ед р ж м й л фа я в ком наде- с о б щ ени
и в ы н е о их т , в ы етм ож
т р са ш и р е н у е и р за м е р а
е и с п о з л ь в та е
ю о ри м н ф а х и з е о н б р аж я и MCI Save. ь р ас ш и р е н ы
е э ле
в о с п о з л ь в та
я
-
с ур т о к
й
MCI SAVE PARMS MCI_DGV_SET_PARMS
MCI_DGV_SETAUDIO_PARMS
ру т к С н о ал ь о к м н а де - с о б щ е н и
а с и о де р ж е с о т ян и
т д ан ы е , нсаритвющ и е п р о и г р ы в е а тл я и MCI SET
ру т к С
а с ио де р ж т о р м и н ф ца и р е (кеодк ) звоук й д о ик р ж рм фо ат е ауд и о с и г н ал . ан Д и ау д и о с и г н ал з н е ча а д л я н са р о т й к н и и и з ев ах т . Ис позуельт
е о пци о
-
. Ис позлусеьт
я в
ю о б ауди о к м п р ес о , а жкат е о б ур о в н я ру с т к а п р е дн а а пр и про и гры ва я в о к м на д е - с о б щ е н и
е и и
MCI_SETAUDIO MCI_DGV_SETVIDEO_PARMS
ру т к С (коедк ечн з в а ех т
а си о де р ж ) ви деок ро ж а д л я нсаротйк . И с п о з еу л т ь
т иорм нф цаи
ю о ви део км прес о р я с ру т к а п р е д н аз а пр и про и гры вани в о к м ан д е - с о б щ е н и
. Дан и виедос нлга я
е и и и
MCI_SETVIDEO MCI_DGV_SIGNAL_PARMS
ан Д
я ру с т к (уехлязатк
а с и о де р ж
ан Д ус т н о
я р у тс к й о р и м н ф ац и
ан Д
а п р е д н за ч и о про и гры веалт
а дл
а с и о де р ж т вы б р а
я п о ле у ч н и . Ис позуельт
я сат
я в
ю о р е й фм е ) с по м о щ ь
т о р и м н ф ац и н (по зи ц о ни ро вна
о к м н а ды - с о б щ е н и MCI DGV STOP PARMS
я в
и M CI_STATUS
я ру с т к й б уд е
о к тр ы
х
. Ис позуельт
и M CI SIGNAL
о к м на д е - с о б щ е н и MCI_DGV_STEP_PARMS
ю о м ар е к
й в в ай и л е д о ф
о к м н а де - с о б щ е н и MCI DGV STATUS PARMS
т о р и м н ф ац и
) позиц
, ю
я M CI_STEP
ру т к С а и с п о з уе л ь т MCI STOP. ан Д
я дл я р у тс к
я о к м ан д ы - с о б щ е н и а н ола и г ч
я а с ру т к
е
MCI_GENERIC_PARMS MCI_DGV_UPDATE_PARMS
ан Д
я ру с т к и г р ы в е а лт я по м о щ ь
MCI DGV_WINDOW_PARMS
а с и о де р ж , си мо держ
т ио рм нф аци е о крт г
ю ком нады- с о б щ ени
ру т к С а и с п о з уе л ь т WINDOW. ан Д
о б де у
ю о б о нк т о б н в ле
е про
о с
я M CI UPDATE
я дл я с ур т к
MCI_GENERIC_PARMS
я ком анды- с о б щ ени а а н л о г и нч
а с ру т к
я M CI е
140
аТ б л и ц тС р к у Р У Т К РС Т У
3 zyxw
л ав Г
а
О п и с а ни Ы ДЛ
IМС _VCR_CUE_PARM
е
А zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR
Я ОТФИН МГ ЕА ДИВ S
zyxwv
3. 8 (пернио лд)ж
ан Д
я р у тс к , с корт
ци ру т к С
а п р е д н за ч
а дл
й нснечат
я во с п р о и звед ни а дл
а п р е д н за ч
я нсаротйк
и по зи и запись
е ил
.
я о к м н а ды - с о б щ е н и
я
MCI_CUE MCI_VCR_LIST_PARMS
ан Д
я
ру с т к а и с п з о е у т ль я MCI_LIST
с о б щ ени MCI VCR PLAY PARMS
ан Д
я ру с т к
а и с о де р ж
и конеч
MCI VCR RECORD PARMS
м с егм ент а дл
с лЕ и н е хоит ме т о ж е в о с п з о ьл в та Parms
е и с п з о ль в та
дл
MCI VCR SEEK PARMS
а и с о де р ж
-
ю о ннольач х м единаы
ь р ас ш и р е н ы с ур т о к
т о р и м н ф ац и
м х и
. PLAY.
е э л е м е ын т , M CI PLAY
й
ю о ннольач х и преднзач
х м е ди н а ы
й а
я M CI RECORD.
и н е и о тх е и с п з о ль в та , мет ож е в о с п з о ьл в та Parms
ан Д
я о к м ан д ы
я мт е
я о к м н а ыд - с о б щ е н и
с лЕ ыт
дл
я о к м н а ды - с о б щ е н и
я
я ру с т к и зпаис ывеам ы
по зи ц
т ио рмнф аци е во с про изв д м ы
п р е д н за ч
ан Д
я
я р у тс к
ь р са ш и р е н ы я с ур т о к
а и с о де р ж
н и р о в ан и я
.
т ио рм нф аци я
И с п з о е у т ль
е э ле м е н й M CI RECORD ю дл
в
я п о зи ц
-
о к м н а ед - с о б щ е н и
и
MCI_SEEK MCI_VCR_SET_PARMS
ру т к С а с и о де р ж н о ьл а е с о т ян и с я в ком наед- с о б щ ени
т д ан ы е е в и д е о п р и г р ы в е ал т я
, нсаритвющ и
е о пци
ру т к С с о б щ ени
а си о де р ж т о р м и н ф ца и я MCI SETAUDIO
ю дл
я о к м ан д ы
MCI_VCR__SETVIDEO_PARMS
ру т к С
а с и о де р ж т о р м и н ф ца и я MCI SETVIDEO
ю дл
я о к м н а ды
MCI_VCR_SETTUNER_PARMS
ру т к С лн а к
а си о де р ж е н а ю нт е р
и с п з о е у т ль MCI VCR STATUS PARMS
ан Д ус т н о
MCI VCR STEP PARMS
ан Д ле н т с по м о щ ь
т иорм нф цаи е в и д е о м о на г и т ф
я ру с т к й о р м и н ф ца и
ю ком наыд- с о б щ ени
м а
и M C I SETTUNER
а дл я поелчуни и в и д е о м о на г и т ф
я в ком наед- с о б щ ени
а сио держ я б уд е
-
. ру тк С
а п р е д н аз ч и о с о т ян и
я ру с т к , ортка
-
ю о б усанвтли аем о
я в ком наед- с о б щ ени
И с п о з еу л т ь
-
и M CI SET
MCI_VCR_SETAUDIO_PARMS
с о б щ ени
-
. сИезтупоьл
я сат
.
и M C I STATUS
т ио рм нф цаи т в ы б рна
ю о по зиц а (по зиц о нир вна я M C I STEP
и н а )
MCI- и нт е й рс ф
для
р аб о т ы
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ 141zyxwvuts
с м луьт и м ие да
аТ б л и ц С т р ку Р ТУ К С ТР У
О п и с а ни а Ы ДЛ
е
Я ПЛ ЕТ РЫАВОИГ
В zyxwvutsrqponmlkjihgfedcbaZYXWVUT
Я О СИК ОД Е ДИВ
MCI VD ESCAPE PARMS
ан Д
я ру с т к му
а си о де р ж ю в е ач с к в т
ю п р о и г ы е в л та
с я в ком наде- с о б щ ени MCI_VD_PLAY_PARMS
ан Д
т Escape- сроутк е о к м ан д ы
я р у тс к
а си о де р ж
т ио рмнф аци
м с е мг а е н т а дл
я о к м н а ды - с о б щ е н и
я р у тс к й б уд е
а си о де р ж т вы б р а
Ы ДЛ
м х
ь р са ш и р е н ы я с ур о т к
е э л е м е ныт , й M C I PLAY
т о р м и н ф ца и
ю о р е й фм е ) с по м о щ ь
н (по зи ц о ни ро вна
о к м н а ды - с о б щ е н и
Р ТУ К С ТР У
-
я M CI PLAY.
с лЕ и н е и о тх е и с п з о ль в т а в ы ме т о ж е в о с п о з л ь в та Parms о к тр ы
-
ю о н а чл о ь х м е ди а н ы
х во с про и зв д м ы
и п р е д н за ч
ан Д
, оптравляе . Ис пзоеутль
и M CI ESCAPE
и о кн е ч
MCI VD STEP PARMS
zyxwvuts
3. 8 (оокнчаи е)
, ю
я M CI_STEP
Я ОТИФН МГЕА ДИВ
А
MCI_WAVE_DELETE_PARMS
ан Д
я ру с т к
и о кн е ч ру т к С
а и с о де р ж м с е гм е н т
т ио рм нф аци
а
е уд ал я е м о и с п о з еу л т ь
я
й з о в ку о к м ан д о й - с о б щ е н и
ю о н а чл о ь й д о кри о ж
м . м
MCI_DELETE MCI_WAVE_OPEN_PARMS
ан Д
я р са ш и р е н а
я р у тс к
о к м н а ды - с о б щ е н и MCI_WAVE_SET_PARMS
ру т к С н о ал ь в о к м н а де - с о б щ е н и
Е щ е онд о й о с б е н о сь т н и е TRect- р укт с . В обы ч н о . Р аз ли ч е с о ти r e . r igh t и re.bottom, в п р я м ог у л ь н и к а . С леуд
рП а т к и
П о сл е и з ч е ун и я ето р и ч е с к о г ск и м в о п р о с а м . С ам ы л о ж ен и е , п ренд аз н ач ен о (к а к сам ог о п р о с тг п р и л о ж ен и я в ы м ож ет
а си о де р ж е с о т ян и
я дл
я
т дан ы е , насрит вающ и е о пци о е wave- про и гры велатя . Ис позуельт я и M CI SETzyxwvutsrqponmlkjihgfedcbaZYXWV
ю MCI- курст р я в лс е т я н е с а тн а д р н т о MCI TRect- р уктр с ы о б р а ыт в а ю ст т в от м , чт о в MCI и сп оль зю у ст к о тр ы х с оерд ж и с т я и н оф р м а ц и т э т о и м ет ь в ви д у п р и раз бокт
а исполазвиьн
а и с п о з лу с е ь т
я M CI_OPEN
я от л ь к я о ш ир н е п р и л о ж ен и й
е и сп о ль з о в а я н е акт , ка к о вд а п о л я — е и в ы со т е .
я о м а е рт и а л а п о MCI п рип уст м н аш и м п р о ек т м в и з ч еу н и е л д я и з ч е ун и я и н е рт ф й с а к о м ан д ы ) и олактд и п о с л е д в а т ь н о се т й к о м ан д е уви етд ь н а р и с . 3.2. м п ер в ы
м к п р а ки т ч е и MCI бед у х срт о . В н еш н и
т п ри к MCI й ви д
142
л ав Г 1.{" абРо т
а с ей с о ерифнт
3 zyxwv
х сzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK т ро к
м ко м а н д н ы
Open Demo.wav t yp e waveAudiо a l i a s S wait zyxwvutsrqponmlkjihgfedcba Play S n o t i f y Close S
иа С т с к
••
Выпо/ iHW М О - ко м а н
b с кр и п
И о нс д х ы п а к- т и д с к
а в р о и н П ыг Н а в ер н з о а чх е м ощ ь фа й л о в
к ви нд
: •
.
I
• ;
у
•
В ы п о лн и т
ь с кр и п
т по - ш аго в
о
ич О с т В ы п о лн и т
. 3.2. Внеш ни
о н а п ри венд о
, п р енд аз н ач ен й м н о г ср т о ч н ы срто в ы п о л н ят , ил
т с р аз
•
: jSt o p S
Ри с
Ка э к р ан а со б ск о ль к о н о ов м о ж ет ь т и он л п В ы ны е е и з о тб р а ж е
• •
а
и вс е з а п с ук а т
х MCI тек сотв п а р м ето н
й ви
ь
я CommandStringsMCIzyxwvutsrqponmlkjihgfed
д пени р олж
, расп ол ж ен о е в в н ер х й ч ас т и х с рт о к . Э т о о к н о п р ес а д т в л я т р е к т ас , п оэ тм у в ы м ож ет е в оид т ь ср аз у н е к к о м ан д е в м н огрстч н о м р е ад к о т р е к о м ан д ы мож ь п о оедлть н о сит , н ажи м а я кн оп к у zyxwvutsrqponmlkjihgfedcbaZYXW Втоинпл ы ь п и с рк т о аг ш п е вм ест , н ажи м а я кн оп к у т и о н пВ л ы ь п и с рк т аз у с р . Т ак ж е в ы ь MCI- ком ан д ы и з ком ан д о й срт о к и с п ом щ ь ю кн оп к и . В о к н е с и аС т к а о тб р а ж с е т я р е з л ьу а т т в ы п о л н ен и я дан к о м ан д . Е сл и в о врем я в ы п о лн е и я п рои з ош л а к а я- л и б о о ш и бк а , е о п и сан и е п о яв и с т я в дан о м окн е . Т ак ж е есл и в к ач есвт е он д о г о в к о м ан д ы бы л к ауз н фл а г notyfy, в о к н е С са и т к а е д бу т р ез л ьуа т , п еранд ы й с со бщ ен и е м MM_MCINOTIFY.
й к о д адн н о е в калтог
о лд й р ае д к о т . В венд ы
м р и нс у к е я ввод
ь
, о к н о
а к о м ан д ы
й п р о г ам ы в ы см о ж ет е Source\ Ch03\ Ex01.
е wave- йл фа о о р ан о и л и п ознд о лю бо т н ап и сат ь с в о й п р о и г р ы в а е тл ь ю MCI н есло ж н о с о з адт . К о н еч н о , м ы н е асвти
е н ай т
и н а п ри лагем о
м ком
-
в й п р о г ам и ст
, рабоют щ и й с мл ь иу т м е д а , м р а з едл е м ы п ок аж ем , чт о с п о й и п рост й п р о и г р ы в а е тл ь waveу н ап и сат ь ч о -т т о врод е Win Amp и л и
. В эот ь н еб о л ь ш о м з а дч
MCI- и нте й рс ф
ля д
JetAudio — н аш в п р и ло ж ен и ях
р аб о т ы
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG 143zyxwvutsrq
с м луьт и м иеда
а ц ле . В н еш н и
ь п о к аз т
ь о сн о в н ы й ви
•Г Про с т
е в о з м о ж н о ст я п расевтдл
д п рои гры веалт й п р о и гр ы в ает л
П р о гр е с - и н аи к го
и и сп о ль з о в ан и н н а ри
я M CI с 3.3.zyxwvutsrqponmlkji
ь Wave р
zyxwvutsrqponmlkjihgfedcbaZ
lifiliiiii | Сот
п
|E:\ Demo2.wav
Ри с
. 3.3. Прос т
й wave- про игыелвта
о Хт
ь
я и н е рт ф й с п р и л о ж ен и я н е в ы г л ия д т н фу к ц и о н а л ь н ы м е работсп ос бн о и п р и ж елан и и в ы легк о м о ж ет е 3.3 п расевдтл н к р аи т д о в аш и х н жду . В ли ст н г п р о и г р ы в а е лт я , п олн ы й и о сн д х ы й ко д ег о н иодасхт п а к- т и д с к е в калтог е Source\ Ch03\ Ex02. в п о лн
Л ист ин
г 3.3. Прост
й проигваы т е л
ь wave- йл фа о
, п ри ло ж ен и е ег о м оид ф ц и роват й и он сд х ы й ко я н а п ри лагем о
е ь д н аш ег м ком
в
varzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA FormMain: TFormMain; // Оы н в о н с е иы м е у з ь л о п с е MCI- р у т к у р т с ы MciOpenParms TMCI_Wave_Open_Parms; TMCI_Play_Parms; MciPlayParm MciGenericParm TMCI_Generic_Parms; TMCI_Seek_Parms; MciSeekParm TMCI_Set_Parms; MciSetParm TMCI Status Parms; MciStatusParm д // Фг а л и дл я н а м о к Flags
: DWORD;
implementation {$R *.dfm} // От ы р к т ь MCI- в т с й о р т с у о и зт и з у р г а ь фй а л procedure TFormMain.OpenFile(FileName: String); begin // Ое а в ы р к т м ув т с й о р т с о MCI_DEVTYPE_WAVEFORM_AUDIO mciOpenParms.lpstrDeviceType := PChar(MCI_DEVTYPE_WAVEFORM_AUDIO); mciOpenParms.lpstrElementName:= PChar(FileName); Flags := 0; Flags := MCI_OPEN_TYPE or MCI_OPEN_ELEMENT or MCI_OPEN_TYPE_ID;
о -
144
л ав Г
E rrorlD := mciSendCommand(0, MCI__OPEN, F lags, Longint(SmciOpenParms)); I F E rrorlD о 0 th en begin zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ShowMCIError; Exit; end; // Получае
м идентиф като
р устройств
а
dwDevicelD := mciOpenParms.wDevicelD; // Устан вли ае
м форма
т врем н
и
MciSetParm.dwCallback := 0; MciSetParm.dwTimeFormat := mci_Format__Samples; Flags := 0; Flags := mci_Set_Time_Format; ErrorlD : = mciSendCoiranand(dwDevicelD, mci_Set, Flags, Longint(SMciSetParm)); IF ErrorlD 0 then begin ShowMCIError; Exit; end; // Получае
м д л и н
у проиг ываемог
о файл
а в семпла
х
MciStatusParm.dwCallback := 0; // Получит
ь прод лжительност
ь
MciStatusParm.dwItem
:= mci_Status_Length;
Flags := 0; Flags : = mci_Status_Item; // Получит
ь ста у
с в MciStatusParm.dwReturn
ErrorlD := mciSendCommand(dwDevicelD, mci_Status, Flags , Longint(SMciStatusParm)); IF ErrorlD 0 then begin ShowMCIError; Exit; end; // Получит
ь длин
у
WaveLength := MciStatusParm.dwReturn; ProgressBar.Min := 0; ProgressBar.Max,:= WaveLength; ProgressBar.Position := ProgressBar.Min; StatusBar.SimpleText := FileName; FlgOpen
:= True;
end; // Проиг ат
ь с нач л
а
procedure TFormMain.BitBtnPlayClick(Sender: TObject); begin if dwDevicelD = 0 then Exit;
3 zyxw
MCI- и нт е й рс ф
для
р аб о т ы
с м луьт и м ие да
145zyxwvu
IIzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA В с т а е м н а нач л о MciSeekParm.dwCallback:= 0; // Н е устан вли ае
м хенд
// собираемс
я получат
// со бщени
я о т дан о
л окна
, т . к . н е
ь й команд
ы
Flags := 0; Flags := MCI_SEEK_TO_START; ErrorlD := mciSendCommand(dwDevicelD ,mci_Seek, Flags, Longint(@MciSeekParm)); IF ErrorlD 0 then begin ShowMCIError; Exit; end; // Запус
к н а проиг ывани
е
MciPlayParm.dwCallback := HandlerFlags := 0; Flags '." MCI_NOTIFY; // Подав т
ь со бщени
// проиг ыват
ь в фон
е о выполне и е
ErrorlD := mciSendCommand(dwDevicelD ,mci_Play, Flags, Longint(@MciPlayParm)); IF ErrorlD 0 then begin ShowMCIError; E x p end; ProgressBar.Position := ProgressBar.Min; Timer.Enabled := True; end; // Закрыт
ь
procedure TFormMain.CloseMCIDevice; begin MciGenericParm.dwCallback := Handle; Flags := 0; ErrorlD := mciSendCommand(dwDevicelD ,MCI_Close, Flags, Longint(@MciGenericParm)); end; // Сто
п
procedure TFormMain.BitBtn3Click(Sender: TObject); begin if dwDevicelD = 0 then Exit; MciGenericParm.dwCallback := Handle; Flags := 0;
и команд
ы +
146
Глав
ErrorlD := mciSendCommand(dwDevicelD ,MCI_STOP, Flags, Longint(@MciGenericParm)); end; // ОПРЕД Л НИ
Е ТЕКУЩЕ
Й ПОЗИЦ
И В МЕДИА Н Ы
Х
procedure TFormMain.TimerTimer(Sender: TObject); begin // П о л у ч а е
м п о з и ц
ю в медиа н ы
х
MciStatusParm.dwCallback := 0; MciStatusParm.dwItem
:= mci_Status_Position;
Flags := 0; Flags := mci_Status_Item; // Получит
ь ста у
с в MciStatusParm.dwReturn
ErrorlD := mciSendCommand(dwDevicelD, mci_Status, Flags , Longint(@MciStatusParm)); IF ErrorlD 0 then begin ShowMCIError; Exit; end; // Получит
ь длин
у и от бразит
ь в прог ес - бар
е
ProgressBar.Position := MciStatusParm.dwReturn; ProgressBar.Repaint; end; // ПЕР ХВА
Т СО БЩЕНИ
Я О ЗАВЕРШ НИ
И MCI- команд
ы
procedure TFormMain.MMNotify(var Message: TMessage); begin case Message.WParam of mci_Notify_Successful: ShowMessage('Проиг ан
о успешно')
mci_Notify_Superseded: ShowMessage('Пре ван
о друго
mci_Notify_Aborted
: ShowMessage('Пре ван
о п о л ь з о в а т е л м ' )
mci_Notify_Failure
: ShowMessage('О ш и б к а ' )
;
end; Timer.Enabled := False; end; // ПОКА
З ОШИБО
К
procedure TFormMain.ShowMCIError; begin mciGetErrorString(ErrorlD, ErrMsg, SizeOf(ErrMsg)); SetString(ErrMsgStr, ErrMsg, StrLen(ErrMsg)); ShowMessage('Ошибк end;
а MCI!' + #10#13 + ErrMsgStr);
; й командой')
; ;
3zyx
MCI- и нт е й рс ф
для
р аб о т ы
а в ри о н ы г П В а дн о П р еж д р а с м орти м
с м луьт и м ие да
е M IDI- а йлфо м р а з е лд е м ы р а с м о р ти е ч е м м ы о са нт о в и м с , чт о п раседвтляю
147zyxwvut
в
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML
м с о з а дн и я н а п р о г ам н о т со б й фай л
е п р о и гр ы в е а л т й р еа л и з а ц и ы форм ат
я лд я MID I- фай ло в и п р о и гр ы в а етл я а MIDI.
С а нт а д р т MIDI (Musical Instrument Digital Interface — ц и рфов мз у ы к а л ь н ы х и н с рм т у е н о т в ) бы л раз рабо т н лд я с о в м е си т м о с т э л ек рто н н ы х мз у ы к а л ь н ы х и н см р т у е н о т в (си н етз ао р в , мзуы к аль н ы г с р дг о у м . М о ж н о с к а з ьт в и р уа т ) с к о м п ь ю ерто м , а атк ж е рду MIDI рхан и т п о с л е д в а тл ь н о с т ь к о м ан д , п рнед аз н ач ен ы х лд р аз ли ч н ы м и и н мрстуен амт и ч ер з р аз ли ч н ы е к ан алы . MCI п оедрж и в ае л ен ы й в фай ла со в е м с о в т ес у щ и е сатн адрут
т ат к н а з ы в а ем ы х с расш и рен и т са н т д р т , и м ею т расш и рен и
й а во тр и з о в а н ы е mid. С елуд у RIFF. Ф ай л е rmi, онд ак
Д ан н о е р аз ли ч и е о б ъ я с н яс е т я ет м 16 ло ги ч ес к и х к ан ало в , п ренд аз н ач ен ы ет з а от р в . Дан н ы е к ан л ы п о с а тн а д р т к ан л ы с н о м ер а и 13...16 и сп оль зю у ст к ан л ы с н ом ерам и 1...10 — си н езт ао р м
О нд а к к ан ало
о н е в с е мз у ы к а л ь н ы в и и н мсртуен отв
П о сл е к рактог о обз ор а о сатн о в и м с п ер в ы й п ри м е р п р о и гр ы в е а л т н а л ь н о сь т ю , в ч аснт о ст и в п оз и ц и ю . П оэ тм у в дан н о од с а т к и . В ч аснт о сит , м ы п оз и ц и е й в м еи д а н ы х MIDI — в о з м о ж н о ст ь з адн и Дл я р еа л и з а ц и л и п р о ц р уед п р с е а д тв л
и п о з и ц и о н и р о в ан и , вк лю ч аю щ у н в ли ст н г
т в себ
е с и н е з т оа р , в слевдти
е э от г
й и н е тр ф й и р аз ли ч н ы
с х х к ал
я н а вы бран о
т я т н е .
и MIDI о п р едл н и 16 ло ги ч ес к и х си н ы юс л у е д щ и м о браз о м и баз о в г о руо в н я о уров н я .
х и тр е а рт е х м е л о и д ч н ы о с и н е тз а о р а р ав е н 6 лд . Э т о о з н ач ет , ч т о си н етз аот о 6 н о т н а м елоид ч н ы х и н р с ут ы р а с ш и р ен о г о уровн я с о едр ж а т в п р и р уо в н е п о л и фо н и , рав
ы : , х
е ог л с и так о г
ы и м ею о и п ояви л с
т о ид н а к о в
е м ес т , со к ращ ен н ы
я р в -
е р а с п р е дл н и ь дв
а фо р м а т
е а MIDI.
я н а н аш е м п ри м ер . К а к в ы уж е з ам еит ли я wave- афй ло в н е о л ит ч а л с я ос бо й нфу к ц и о н е м н ел ь з я бы л о ес л д а т ь п е р м ок т у н а з а дн н у м п р и м ер е м ы п о ас р т л и с ь ч уе с т ь н ек о тр ы в а м п о к аж е м п р и ем ы , п оз воляю щ и е р або т , а атк ж е р еа л и з е у м и н е рт с н у ю о с б ен н о с т я тем п а п ро и гры в ан и я .
ю в о с п р о и з в е дн и е е 3.4.
-
, чт о фо р м а я п у р а в л ен и
й фо р м а т MIDI, п р есдатв т омт еи ьт , чт о дан н ы й форм а ы ж е , п олн осьт ю с о в т ес ю у о MCI н е п оедр ж и в аю стя
, чт о в сп ец и ф к ац и х л д я ар д е с ц и у р а с п р е лд н я с и н е зт ао р м и р а с ш и р ен о г
С и н е тз а о р баз о в г о р о ув н я с о е др ж и а д р ун ы х и н с р мт у е н о т в . рУо в ен ь п о л и фо н и м е л о ид ч н ы х и 3 — лд я адрун ы х и н с рм т у е н о т в баз о в г о р уо в н я м ож е т и гр а т ь о нд о в р е м н н м ен а т х и 3 н от ы н а уадрн ы х . С и н езт оар себ е 9 м елоид ч н ы х и 8 адрун ы х и н м ср т у е н о т н о м 16.
. ,
о м ы н ем н о г й к о
, ю е не ь с ь
о и з м ен и д п р о ц уе д
ы
148 i Лиснт
л ав Г г 3.4. Риц азл е
я во с про и зведни я
х зонад
й позиц
3 zyxw
и zyxwvutsrqponmlkjihgfed
procedure TF orm M ain.P lay(P osition: C a r d in a l) ; begin zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA MciPlayParm.dwCallback := Handle; MciPlayParm.dwFrom := Position; Flags := MCI_NOTIFY or MCI_FROM ; ErrorlD := mciSendCommand(dwDeviceID, MCI_PIAY, Flags, Longint(@MciPlayParm)); end;
е п о яв и л а с ь в о з м о ж н о ст ь к уа з н и я н ач ль н о й п оз и ц и и и з В а дн о й п р о ц р уе д п ер м н о й P osition. До сит гасет я э т о з а с ч е т и сп о ль з о в ан и я фл а г а MCI_FROM ы MciPlayParm. Дале е м ы п ол ж и и указ н и я п оз и ц и и в п ол е dwFrom р куст е со бы ит я ScroilBarScroli п ро и сал и л и н а фо р м у ScroiiBar и в о бра очти к сю л у е д щ и й код , п рсеадвтл н ы й в ли ст н г е 3.5. :
'
; нитсЛ
'
........,.,.....,.,,
г 3.5. Обраотк
а п е р м е щ н и
я к н у г е б
...,...„,
.
'"":";
а
procedure TFormMain.ScroilBarScroli(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); var Prom: Integer; begin // Коне ц пер таскивани я бегунк а IF ScrollCode = scEndScroll then Begin // Есл и проигрывател // бегунка , и н а ч // позиц онировани IF IsPlay then begin
ь и г р а е т е — е н а выбран о
, т о прод лжит е врем
ь игр
у с позиц
я
Play(ScroiiBar.Position) end else begin MciSeekParm.dwCallback := 0; MciSeekParm.dwTo := ScroiiBar.Position; Flags := 0; Flags := MCIJTO; ErrorlD := mciSendCommand(dwDeviceID, mci_SEEK, Flags, Longint(@MciSeekParm)); end; end
и
MCI- и нт е й рс ф
для
р аб о т ы
с м луьт и м ие да
149 zyxwvuts
elsezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Timer.Enabled := False; end;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
С мы с л ад н н о г о код а п ро ст : есл и п оль з овеалт ь п ер м щ а е т б н е гу о к ScrollBar, т о в з ав и с м о ст и о т р еж и м а р аб о т ы MCI- рсотйу в а Sequencer п рои гры ва е тл ь л и б о п ер с к а и в а е т н а п р о и гр ы в а н и е с з а дн о г о м ес т а и п р о длж ае т п р о и гр ы в а н и е , ли б о п р о ст о п о з и ц и о н и с е тр у я н а з а дн о е м е со т . Ф ну к ц и я IsPiay, п рсеадтвл н а я в к о ед , п чолауе т о п ц и о н аль н о е с о тян и е р еж и м а с р ту о й с в т а и , есл и сртуо й свт о н о и да х с т я в р еж и м е в о с п р о и з в е дн и я , воз ра щ ае т TRUE. Ф ну к ц и я isP iay п ресадтв л н а в ли ст н г е 3.6. Л ис т н г 3.6. Пеолчиун е оипоацн лгь о сост иня я уст ройст в а ! zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
.....1zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ....: : i
;....
function TFormMain.IsPlay: Boolean; begin Result := False; MciStatusParm.dwCallback := 0; MciStatusParm.dwItem := MCI_STATUS_MODE; Flags := 0; Flags := mci_Status_Item; // Получит ь р е ж и м в MciStatusParm.dwReturn ErrorlD := mciSendCommand(dwDeviceID, mci_Status, Flags , Longint(@MciStatusParm)); Result := MciStatusParm.dwReturn = MCI_MODE_PLAY ; end;
Дл
я р еа л и з а ц и и бы л
н ам к о тр ы
и в о з м о ж н о ст и с о з а нд х п р с е а д тв л
:
• —• '• •- •
| Л ис т ин
——v
г 3.7. Фиц кну
и м ан и п лиу р о в ан и ы с ю л уе д щ и н в ли ст н г . . . . ». . -
и упра лв е ин
•
я е мт п о ы и н фу к ц и
е п р о ц у ед е 3.7. —
м п р о и гр ы в а н и , со к ращ ен н ы
—
я т е м по
я MIDI й ко д • ——".
м проиавгын
я
// // У с т а н в л и а е м скор т ь проигрывани я MIDI (тпме ) II procedure TFormMain.SetTempo(Value: Cardinal); begin MciSetSeqParm.dwCallback := 0; MciSetSeqParm.dwTempo := Value; Flags := 0; Flags := MCI_SEQ_SET_TEMPO; ErrorlD := mciSendCommand(dwDeviceID, mci_Set, Flags , Longint(@MciSetSeqParm)); end;
—• ;••
. . ————" —:
150 ii
Глав
3
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
// Пе а ч у л о
м ст с о р к
ь пи н а в ы р г и о р
я MIDI (тп м е
)
/ /
,
function TFormMain.GetTempo: Cardinal; begin MciStatusParm.dwCallback := 0; MciStatusParm.dwItem := MCI_SEQ_STATUS_TEMPO; Flags := 0;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA F lags := MCI_STATUS_ITEM o r MCI_WAIT; E rrorlD := mciSendCommand(dwDeviceID, MCI_STATUS, F lags, Longint(@M ciStatusP arm )); R esu lt := M ciStatusP arm.dwReturn; end;
П о лн ы ид с к
й и о с н хд ы е в калтог
й ко д п ри лож ен и я п р а с ве т д л е Source\ Ch03\ Ex03.
Д але ср т оу й св т
я н а н е к о тр ы е м ы о са нт о в и м с у SEQUEN CER.
• SEQUENCER н е п оедрж и в ае
н н а п ри лагем о х о с б е н о с я хт
т с ю л уе д щ и
м к о м п ак т , п ри щсу и
е м а р уг е н т
ы к о м ан д о
х MCIй р с от к
SET: audio a ll off, audio a ll on, audio left on, audio left off, right on, audio right off.
и audio
• SEQUENCER и м е т од п о л н и е тл ь н ы е а м р гу е н т ы к о м ан д о й р с от к и SET, а фо р м а т а в р ем н и в еид а тк и е ка : time format song poin ter — сатну о в к н ица х 1/16 н ыот , а такж е tempo, port, offset, master, slave.zyxwvutsrqponmlkji
Звукозапис П о сл з вк у о з а п и с н еб о л ь ш о в иу е тд
ь е то г
о ка к м ы с вма . Д л я дем о н сртац и е дем о н сртац и о н н о ь н а рис . 3.4.
и с о з а дл
и вд и в о з м о ж н о се т е п р и л о ж ен и е
а раз ли ч н ы
х п р о и г р ы в а е лт я й MCI п о з ап и с , вн еш н и й в и д котр г
, п ерй д и м ы созалд о в ы м ож ет
Д ан о е п р и л о ж ен и е о ч ен ь п о жх е н а п ри лож ен и е "З вкуо з а п и с ь " в сант рд н о й п о са в т к е Windows, отх я и м ен е е н фу к ц и о н а л ь н о . П ер д з ап и сь ю в ж ет е в ы с а тв и т ь р аз ли ч н ы е н ар с о т й к и з а п и с ы в а ем о г о с и гн а л , атк и е ка л и ч е свт о к ан ало в , ди ск рент о ст ь с и гн а л а и чоаст у ид с к р е и т з а ц и . И онсдх ы м к о м п а к- т и д с к е в к о д ад н н о г о п р и л о ж ен и я п р а с е дв т л н н а п ри лагем о е и з ч ен у и ло г е Source\ Ch03\ Ex04. Н аи боле е и н ер т с н о й н фу к ц и е й в п лан MCI сжлуи т нфу к ц и я , п огдатвли ваю щ а я MCI- сртоуй свт о к з ап и с и и н ав ли в аю щ а я к а ч е вс т о з ап и си . Дан н а я н фу к ц и я с о к р а щ ен н о п р с е а д тв л н ли ст н г е 3.8.
м к и е ы мо к ко
й
ка т
я
уаст
а в
MCI- и нтей рс ф
ля д
р аб о т ы 1 «f Про с т у та тС . Ос та н о
151 zyxwvutsrqp zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
с м луьт и м иеда
с Ма -в Отсйо р тс у
: ;
в
г к й о р ст а Н j (• е р е т С
* ' т а д з о С
и зсип а о
j Дисотн ер ск
и - "• " С н оМ ь салниг
ь ны в о
й |
© т аси п а З
[ W ^ о
: 116 би т
:иц аз тер сикд а]44100М то с а Ч 1г мерВ
Ul- fel- lplxl
й MCI Recorder
J г
i
^
о Ср н х а и т
ь то
п
1 ь
_^J !
: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Q т ар гиор П ь с 00 м и н 11 с е к )
я зпаис
11003 ms (00 ча
Рис
;
Лист н
'
. 3 . 4 . Прил о же н и
е дл
я з вуок з а п и с
и
zyxwvutsrqponmlkjihgfedcbaZ
' ' 'zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
г 3.8. Подгтвк
а MCI- втсйору
а к запис
и
// Оы н в о н с е иы м е у з ь л о п с е М1 С - руткуртс ы MciWaveSetParm: TMCI Wave Set Parms; procedure TFormMain.BitBtnRecordClick(Sender: TObject); var SamplesPerSec,BPS : Integer; begin if dwDevicelD = 0 then Exit; // Уе а в и л в а н т с м оы н ь л а н о и ц п е нк й о р т с а и ув т с й о р т с а MciWaveSetParm.dwCallback := 0; // фа м р о т вн е м е р и - в ма д н у к е с и л и х MciWaveSetParm.dwTimeFormat :» MCI_FORMAT_MILLISECONDS ; // Уе а в и л в а н т с м к- л о в о ко л а н а в - м/ он ер тс о IF RadioButtonMONO.Checked then MciWaveSetParm. nChannels := 1 else MciWaveSetParm.nChannels := 2; // Уе а в и л в а н т с м чт о с а у д ицазитеркси и и к- л о в о би т Case ComboBox.Itemlndex of 0 : SamplesPerSec :» 44100; 1 : SamplesPerSec := 22050; 2 : SamplesPerSec := 11025; end; // В пл о е nSamplesPerSec зн а с и п а а чт о с а а д и цазитеркси , т . е . // кв т с е ч и л о о во р б ы к сл а н г и а в су д н у к е .
152
Глав
/ / В это
м пол
// значе и
е м о г у
т находитьс
я 11025 кГц
я станд ртны
, 22050 кГ
// Дискретност
ь сигнал
е
ц ил
MciWaveSetParm.nSamplesPerSec
3zy
и 44100 кГ
ц
: = SamplesPerSec;
а - Обычн
о используютс
я значе и
я 8 ил
и 16.
Case ComboBoxDiskret.Itemlndex of 0 : MciWaveSetParm.wBitsPerSample
:= 16;
1 : MciWaveSetParm.wBitsPerSample
:= 8;
end; // Пол
е nAvgBytesPerSec содержи
// т . е . количеств // Д л
о бай
я м о н ф о н и ч е с к о г
// скор ст
о сигнал и совпад е
// Д л
я стер оф ническог
// выше
.
т средню
т в секунд
ю скор т
ь пот к
, пер дав емо а с дискретнос ь
ю 8 би
т с о значе и
м ч а с т о
о сигнал
а с дискретнос ь
а дан ых
е драйвер
,
у устройств т числен о
а е значе и
ы дискретизац и
е
. ю 8 би
т он
а в дв
а раз
а
MciWaveSetParm.nAvgBytesPerSec := Round((MciWaveSetParm.nChannels * SamplesPerSec * MciWaveSetParm.wBitsPerSample) / 8 ) ; // В пол
е nBlockAlign находитс
я выра нива
MciWaveSetParm.nBlockAlign
е блок
а в байт
х
:= Round((MciWaveSetParm.nChannels * MciWaveSetParm.wBitsPerSample) / 8 ) ;
Flags := 0; Flags := MCI_SET_TIME_FORMAT or
// установит
ь врем
// установит
ь кан л
MCI_WAVE_SET_BITSPERSAMPLE on 11 установит
ь часто
MCI_WAVE_SET_BITSPERSAMPLE or // установит
ь выра нива
MCI_WAVE_SET_CHANNELS or
я ы у выбор
к е блок
MCI_WAVE_SET_SAMPLESPERSEC; ErrorlD := mciSendCommand(dwDevicelD, mci_Set, Flags , Longint(@MciWaveSetParm)) ; IF ErrorlD 0 then begin ShowMCIError; Exit; end; MciRecordParm.dwCallback := Handle; MciRecordParm.dwFrom := 0; MciRecordParm.dwTo
:= 10000;
Flags := 0; Flags := MCI_NOTIFY; // Подав т
ь со бщени
е о выполне и
и команд
ErrorlD := mciSendCommand(dwDevicelD ,mci_Record, Flags, Longint(SMciRecordParm)); IF ErrorlD 0 then begin
ы
а
MCI- и нтей рс ф
для
р аб о т ы
с м луьт и м иеда
153 zyxwvutsrqpo
ShowMCIError; E xit ; end; end; zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
р а ов и П г ы н
е Audio- CD
С лю еу д щ и св т а м и в и д к о тр г
, сатл
м н аш и м п р и м ер о м о п р и л о ж ен и е о в ы м ож ет е р а с м ор те
, и л ю срти ю у щ и , п оз воляю щ е
м р або т
е п р о и гр ы в а т ь н а р и с . 3.5.
у с М С 1- ройст у ь Audio- CD, вн еш н и
й
е Н ^с е Of 'Jjg Л a ~jc zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 1- g- ] т | [audio cd) О К Б и з О К Б с в о б о дн
ТИ м
о
Ти п я
TrackOI cda TiackCG cda О к с а Тг З cda
i Ра з м е
[л Г MCI CD п р о и г р ы в ате л CD- йрадв
,
01 З б " : ' 0 ;
Ы • в с е о и лч т К
Ри с
П о лн ы ид с к о с б е н н о с я тх п р о г ам и ст
й и о сн д х ы е в к а тл о г
. 3.5. П р о с т о
\ d- fLJakJ d
: JG
1/3
О
р
ь
П р о и г р а ть о а у д и
й п р о и г р ы в а т е л
й к о д п р и л о ж ен и я п р а с е дв т л е Source\ Ch03\ Ex05. З едс , п ри щсу и х MCI- сртоуй свт .
^ о тр е ко
if Q
о тС
2 42
п
в :3
ь Aud io - CD
н н а п р и л а г ем о ь ж е м ы о с а тн о в и м с у CD AU D IO, котры
м к о м п ак т я н а н ек о т р ы е о б яз а н з н ат
х ь
• zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA в и а нг ы ео р П — п о ок н ч ан и и п р о и гр ы в а н и я з а дн н о г о рт е к а и пр и н а ли ч и и с лю е у д щ и х рт е к о в CDAUDIO авотм аи ч еск и п ер к л ю ч и с т я н а сле ю уд щ и й рт е к , п оэ тм у в ы од л ж н ы п с р м еу д о т ь в св о е й п р о г ам е от с л еж и в а н и е с м ен ы ртек а , есл и в п ро г ам е п с р м уе д о т н к а о й - ли б о с ч ет и к п о л ж ен и я . С едлат ь э т о н ес л о ж н о п р и и сп о ль з о в ан и и атй м е р а и MCI- к ом ан д ы status. ткейущ О ин е л е д п р О в то м , ч т о еткщу а ми н ту а / секну д а/т нсеку д а / фр ей м ) рт е к а в к ач есвт юв у щ и й н ом е р л ди н у и ме т рте т . к . н ом е р трек
зип ц о
— з едс ь ск ры т а н еб о л ь ш а я и х рт о сь . Д ел о я в трек е в о з в р а щ асе т я в фо рм ат е TMSF (тре к / , а дли н а сам о г о трек а — в фо р м ат е MSF (м и н у . Э т о о бъ ясн яест я ет м , чт о п р и о п р едл н и и лд и н ы я с о в те е п а р м ето в MCI- ком ан д ы STATUS и сп о ль зсету трек а , п рощ е го в р я , в ы сп раш и в ает е у с р т уо й с в т а , к а у ю к № N , п оэмт у MCI и воз вращ ае т и н фо р м а ц и ю в MSF, а уж е и з в естн . Дгроу е дел о — о п редл н и е текщ у е й п оз и я п оз и ц и а / фр ей м )
154
л ав Г
ци . П р и з ап р о с ц и о н и р о в ан о с р ут о й с в т MCI и в о з в ращ ае п р ав и ль н о е о тб р а ж ен и в ьа т .
е в ы м ож ет т и н фо р м а ц и
е и н е з н аьт , н а како м к о н к р ен т о ртек е п оз и о CD AUDIO в дан н ы й м о ен т в р ем н и , п оэ тм ю в TMSF. П оэ тм у , есл и в ы хоит е с е дл а т , в ы долж н ы эт о учи ыт е е кщ т у е й п оз и ц и и в трек
3 zyxw
у ь -
П zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA квраео П к е т ар — п ер д р або т й с к о н к нр е т ы м рт е к о м в ы долж н ы ег о п р о в е и ьт , яв ляест я л и дан ы й тре к н а ком п ак-т ид ск е з вкуо й од р ж к о й , и е с л и я в л ес т я , т о з еат м п р о и з в оид т е н е о би д х м ы е ед й с в т и я . Дан а я п рове к а о сб л у в е н а е тм , ч т о н а ком п ак-т ид ск е п ом и м о и д а у о р те к в м о уг т бы т ь з ап и сан ы трек и с дан н ы м и . Т ак и е ди ск и о ч ен ь ч аст о и сп о ль зю у т с я в к о м п ь ю етр н ы х и рг а х , кодг а в з вкуо ы х рт е к а х з ап и сан а фо н о в а я му зы к а и гры , а в трек а х ад н н ы х — сам а и гр а .zyxwvutsrqponmlkjihgfedcbaZYXWV
е ва йлеидоф
а в ри о н ы г П
в AVI
П о с лн е д и м п р и л о ж ен и ем , и л ю срти ю у щ и м р аб о т у с MCI, сат л п ри м е р про о с гт о п р о и г р ы в а е лт я в и е до ф а й л о в . В адн о м п р и л о ж ен и и л д я п у р а в л ен и я MCI- рсотйу во м в м ес т о и н е рт ф й с а к о м а н - д с о б щ ен и й MCI м ы и сп оль з о лв а и и н е р т ф й с к о м ан д ы х ср т о к . К од , дем о н срти рюу щ и й и сп о ль з о в ан и е м в и д е в ы м о ж ет е в у и ед т ь в ли ст н г е 3.9. к о м ан д ы х ср т о к , в со к ращ ен о П о лн ы й и о с н хд ы й ко д п расветдл н н а п ри лагем о м к о м п а к- т и д с к е в калот г е Source\ Ch03\ Ex06.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC I Лиснт : просгт
г 3.9. Исзонивпаьл о проигыелвта
е ком нады я вйаол иедф
х сро т
к н а прим е
е
в
/ / З ак р ы в ае м ус т р о й с т в о procedu re TF ormMain.CloseMCID evice; begin zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Stop; // Остановит ь н а всяки й случа й // Закрыт ь CommandStr := F o r m a t ( ' C l o se v i d e o ' , [ ] ) ; E r r o r l D := m c i S e n d S t r i n g( P C h a r ( C o r a m a n d S t r ) , n i l, 0, 0 ) ; I F E r r o r l D 0 t h e n b e gi n ShowM C I Error; E x i t ; en d; O n O ff( F a lse ) ; en d; // Откры ь MCI- устройств о и загрузит ь фай л procedure TForraMain.OpenFile(FileName: String); var Coord : TSepRec;
MCI- и нт е й рс ф
для
р аб о т ы
с м луьт и м ие да
begin zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA // Зе а ж у р г а м фй а л CommandStr := Format('Open "%S" type avivideo alias video Parent %D style child',[FileName, Window.Handle]); ErrorlD := mciSendString (PChar (CoinmandStr), nil, 0, 0); IF ErrorlD 0 then begin ShowMCIError; Exit; end; // Уе а в и л в а н т с м фа м р о т вн е м е р и CoinmandStr := Format ('Set video time format milliseconds', []); ErrorlD := mciSendString(PChar(CommandStr),nil, 0, 0); IF ErrorlD о 0 then begin ShowMCIError; Exit; end; // Пе а ч у л о м дн и л у п гомеавыргиор о фл й а а в CommandStr := Format('Status video length',[]); ErrorlD := mciSendString(PChar(CommandStr),ReturnStr, Length(ReturnStr), 0); IF ErrorlD 0 then begin ShowMCIError; Exit; end; SetStringfRet, ReturnStr, StrLen(ReturnStr)); // Пт и ч у л о ь дн и л у AVILength := StrToInt(Ret); ScrollBar.Min := 0; ScrollBar.Max := AVILength; ScrollBar.Position := ScrollBar.Min; StaticTextTime.Caption := MillisecondsToTimeStr(AVILength); StatusBar.SimpleText := FileName; FlgOpen := True; // Ое я л е д р п м вт о с ы у и шн и р у вг о м и д о в ы о ии н е ж а р б о з я CommandStr := Format('Where video destination',[]); ErrorlD := mciSendString(PChar(CommandStr),ReturnStr, Length(ReturnStr), 0); IF ErrorlD 0 then begin ShowMCIError; Exit; end; SetString(Ret, ReturnStr, StrLen(ReturnStr));
155zyxwvuts
156
Глав
3
IIzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Ре а в и б з а м ск о р т у н а эт н е м л ы Coord := GetSeparatorRec(Ret, ' ' ) ; // Не а в и а р т с а м он к о пл е т а в ы р г и о р я Window.Width := StrToInt(Coord.Rec[3]) + 7; // пк в а р п о и Window.Height : = StrToInt(Coord.Rec[4]) + 24; Window.Left := (Left + (Width div 2)) - (Window.zyxwvutsrqponmlkjihgfe Width Div 2); Window.Top := top - Window.Height; Window.Show; // Ое я л в о н б м он к о ве д и о CommandStr := Format('put video window at %S',[Ret]); ErrorlD := mciSendString(PChar(CommandStr),nil, 0, 0); IF ErrorlD 0 then begin ShowMCIError; Expend; end; // Пт а р г и о р ь procedure TFormMain.Play(Position: Cardinal); begin CommandStr := Format('Play video from %D',[Position]); ErrorlD := mciSendString(PChar(CommandStr),nil, 0, 0); IF ErrorlD 0 then begin ShowMCIError; Exit; end; Timer.Enabled:= True; end; // Со т п procedure TFormMain.Stop; begin CommandStr := Format('Stop video',[]); ErrorlD := mciSendString(PChar(CommandStr),nil, 0, 0); Timer.Enabled := False; end; // ОИ Н Е Л Д Е Р П Е ТЕ Щ У К Е Й ПИ Ц З О И В МЫ Н А Д И Д Е Х procedure TFormMain.TimerTimer(Sender: TObject); begin // Пе а ч у л о м ту щ к е ю пи ц з о ю в мы н а д и д е х CommandStr := Format('Status video Position',[]);
MCI- и нтей рс ф
ля д
р аб о т ы
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML 157zyxwvuts
с м луьт и м иеда
ErrorlD : = mciSendString(PChar(CommandStr),ReturnStr, Length(ReturnStr), 0 ) ; IF ErrorlD 0 then begin ShowMCIError; Exit; end; SetString(Ret, ReturnStr, StrLen(ReturnStr)); ScrollBar.Position := StrToInt(Ret); StaticTextPos.Caption := MillisecondsToTimeStr(ScrollBar.Position); end;
Внешни
й ви д приложен
я в ы может
е т ре р о м с а
ь н а с и р . 3.6.zyxwvutsrqponmlkjihgfedcba
р По с т
й п р о и гр ы веатл
ь AVI
П рогрес - иондтак
В р ем
р
я Фм ьила *? Загрузи т
ь
i|
: { 0 0 :0 0 :0 0
По з и ц и я
: 0 0 : 0 0 : 1 2
Q Сто п ь IzyxwvutsrqponmlkjihgfedcbaZYX
Qi рПоигта
H:\ clock.avi
иР с
д Ко
ы ооишб В ат б л к о ад м
. 3.6. Прос т
й про игыевлта
ь AVI- йло фа
в
к M CI zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG
. 3.9 м ы п осатр ли с и и дат ь совет
ь п р и в ес т ы п о воз м ож н ом
и о п и сан и у и х р аз р еш ен и ю
я о ш и бо
к в со втсе и и с и х .zyxwvutsrqponmlkjihgfedcbaZYXWV аТ б л и ц
оК
д оши бк
и
MCIERR_BAD_TIME_FORMAT
О п и с а ни е Н п р ав и н ы л ь ош ибк рм фо та з да н о г д ан о и ка т н ыр т е к
е и с пос
3.9. Ош и б к б ус т р а не и
й р мфо а т врем ени а са ч т о п о яв л се т я пр а вр ем ен и в MCI- окм над о у с р то й с в т а и в ы з ан е MCI- суротй в о н е ем о ж м рм фо оат м вр ем ени . снаотвУи й фо р м а т врем ен и
MCI
я . ан Д и ус ан о т в к е SET ЛД а те м , чт т р ба т о ь ь о кр
я е Я о с -
158
аТ б л и ц оК
д ошибк
3 zyxw
л ав Г
zyxwv
3. 9 (пернио лд)ж
и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Оп и с а н е и с пос б ус т ра не и я
MCIERR_CANNOT_LOAD_DRIVER
е Нв о з м н о ж о з г ра у и т ь д р ай в е р . ан Д я ь в ы з на а п р и р о к ыи т и ош ибк а ем о ж т б ыт MCI- суротй ва . шО иб к а с в и де л т ь у т о б о с т ву и и н е о б х ди м о г о д р ай в е а дл я о и ат р к д е н ф а MCI- суротй ва . тЭ о до в н о ль о с е р з нь а я ош ибк а ем о ж т быт ь жа к т е с в я з на а с кмалитко нф и су р о т й в в с и семт е
MCIERR_CANNOT_USE_ALL
лД с р от к шО и б к о к м ан д
MCIERR CREATEWINDOW
я э о т й о к м на д ы зн е л ь у a l l в е а ч с к в т е и м ен а с в я з на а с нев р ны ы
е Нв о з м н о ж
о с о з т ад
ан Д
я ош иб к м е нх д л е п е р н и ля о ж м р о в ыц и ф о аз ук л
з ад н о р аб о к т в ан и е н в и ьл п р о и с хд т м и MCI MCIERR_DEVICE_LENGTH MCIERR_DEVICE_ORD_LENGTH
MCIERRJ3EVICE_LOCKED
MCIERR DEVICE_NOT_INSTALLED MCIERR_DEVICE_TYPE_REQUIRED
MCIERR_DEVICE_NOT_READY
рП е в ы ш е н су р о т й с в т ло в ) . ан Д о мк н а д ы о к м н а д- с о б щ е н и но й о ш и б к с р Ут о й с в т р о в ан о к м на д у шо
о з р ак ы т , поэ мт . оПврти й портум еж
и в ы п о нл и т
шО иб к н иеа т к р ок й т
а пр , ес л е усротйсвт
шО иб к
а д р ай в е р т вер с и ь драй ве
ви т
я пр
. о т -
о о г р ан и е ч е н а дли н у и м ен и а ил и драй вер а (бшоьл е 79 с им во я ош ибк а ме о ж т п р о с вя ь и т я в х с р о та к х MCI. рП и ис пзо львнаи и й в е р о н ят с ь вы зо а дан и с во дист я к нлу ю
с р от У й с в т вр ем ен
и к фл
. м
ь онк и нев р . аНпри м ер , пр и зра , с вязан о г о с про и гы х в и м л ьд е о ф в , в ы непра л о нка , н а корт е б уд е и эх нд ь вы о д и ез н о б р а ж я с р е д в ат
о и л и вр ем ен у н е ме ож т в ы п о нл и т е о м к н да у е чр к вр ем ен и
е су р о т й с в т н е н й а ед о в с и е тм е ди м о е П О и л и др ай в е р ы п р и и с п о з л ь в ан и ус р т о й с в т , напри м ер е тл й
MCIERR DRIVER
ь
и и с п з о ль в та
а п р о я в л ес т е о нк а
за н к о У
MCIERR_DEVICE_OPEN
MCIERR_DRIVER__INTERNAL
ь ил
я и с п з о ль в та и у с р т о й с в ат м с и ак н т с о
о н е ус ан о т в л е . санотУви . асЧ т и п р о г ма м н ы , ровыциф
о MCI н е го тв ь в ша и ро к ы ит и ус р то й с в т
о з аб л о и к
ь MCI-
з н е б о ьл
о ил
и
е нео б х о в о з н е аи к х х п р о и гр ы в а
т MCI-
й м о м ен
т
о в д ан ы у о м к н да и MCI- суротй ва о ж у е ро к ы т
-
у . Воз . За
-
о а MCI- суротй в й д р ай в е р о в р б о ле
е п о з дн е
. лСеду й верс и
а и л и ок н т у с а н от и
-
MCI- и нт е й рс ф
для
р аб о т ы
сzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA м луьт и м ие да 159 zyxwvutsrqp
аТ б л и ц оК
д оши бк
и
О п и с а ни
е и спос
б ус т ра не и
MCIERR_DUPLICATE_ALIAS
з а н ык У с п з е о у т ль
й лаи я в с и семт
с MCI- суротй в е
MCIERR_EXTENSION_NOT_FOUND
за н к о м У с о в т ес у а н то в л е н о н и ае к еч с к рП о в е т ь у с р от й с в т
MCIERR EXTRA CHARACTERS
MCIERR_FILE_NOT_FOUND
MCIERR_FILE_READ
MCIERR_FLAGS_NOT_COMPATIBLE
шО и б к г о ди с окв г шО и б к б ыт рм фо оат у с р т о й с в то
и й ла фа
и е нт ч и а н е п р ва и л ь м й л фа м
а
е в о флга . рПовте ь у с о б
ь мд еж
е га фл й и MCI- суротй в
я аз у к т
ь правиноль
MCIERR GET CD
Н е нйаед
н нны жу
й фай
MCIERR_HARDWARE
шО и б к
а па н р о т г
р о й с в ат
ю о м к н да , оркытвеам о г
MCIERR_INTERNAL
M CIERR_INVALID_DEVICE_ID MCIERR INVALID DEVICE_NAME
шО и б к м о пер зпасуит еНв р н ы
ны
т м м MCI-
ы парм рет и н а с о вм ес ит
л ил
а пр
у н зе л ь
я файл
и др ай в е
а р
я в ы п о нл и т о аовтм иеатчс к
ь дл
р MCI- суротй в я у с р т о й с в ат , о предлно
я су т
-
и и MCI. Нео б хди ю с и с етм
ь о перцаио ну
м
-
я
и и н ц л аи з
е им ь у с р т о й с в то
а н е м
е им
й о и та к д е н ф т р окы т м им ен
а ме ож
о о б ес п чни
е Н п р ав и н о л ь же
. шО и б к о с о п с ав т л е н ы с о к нр е ы т
х о к м ан д
р еТ б су т
а н уД
е
я п р и с о рх ан е и и ю MCI- окм над ы Save. а о к н в е т ха й с в о б дн о а
а пр
аз к н ы У
. MCIо
н
MCIERR_FILENAME REQUIRED
MCIERR_ILLEGAL_FOR_A0TO_OPEN
-
а в
ь в ы з на
с о в м е с ит м ы м ос т
е ис
ь з л а кю е ч н а дн о лж а б ыт . Есл и повяисал ь э т а о ш и б ь с и м в о лы , рас епноыл ж й кваыкч и
, про явлющ аяс а с по м о щ ь а а сч т о в ы з на о прос натв
й л фа
а уж
а н е , ус во з -
л н е нйаед шО и б а к
MCIERR_FILE_NOT_SAVED MCIERR_FILE_WRITE
я
у р са ш и р е н ю и м ен и й л фа т н и о дн о MCI- усрто й свот е в с и с етм е . Дан я ош ибк а т п р и р о к ыи т и у с р т о й с в та , оавтм иат и с в я з на о г о с р ас ш и р е н м й ла фа , усанотвле о л и д ан о е о в с и с емт е , ил и уи т ажк е ег о явн
е с Тк о т в а я с р то к дв о й н ы е ав к ы и ч ак , в срто к е ес т по с л е зракывющ е айФ
zyxwvutsrqpon
3. 9 (пернио лд)ж
у а
. MCI н е м о е дан
-
аТ б л и ц оК
3 zyxw
л ав Г
160
д ошибк
zyxw
3. 9 (пернио лд)ж
О п и с а ни е и с пос б ус т р а не и я и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
M CIERR_INVALID_FILE
а йФ л мн о ж и п в е оа д р ж в о з н и ь ут к п р о и г та
MCIERR_INVALID_SETUP
е Н п р ва н и ль е Н о б х ди м
, рыкот о п р о и г ь ат
но о м К н да ви д
MCIERR_NO_INTEGER MCIERR_MISSING_PARAMETER
а и д еа о ж е цеолг
о м К над отр ы
MCIERR_MULTIPLE
В о з н ил к
и ош ибк
MCIERR OUTOFRANGE
еН
MCIERR_SET_DRIVE MCIERR_UNNAMED_RESOURCE
и о дн в р е м е н
, ок
-
о н а н е с о к ль
я с м о н п ы ль у MCI- суротй ва о д о с уп т а с ле ду р shareab le
. л Д
о н е и п в о ае д р ж
т он к
а дл л онк
р а ш уН е Из м е н и т в на и
я вы о д а в с о всет ующ е
н п о р дя е ил
-
м до с у т я ус а т т и с п о ьл
т бр а о т
у с
MCI- суротйв р а ненлуво е Н д о с н т ач о к м на д
. ит жак У й о мк н а д
к в ы п о лн е и и п е р с м о р ти
е п о р дя
е е
я MCI- омк нда к с ле до
. -
о р те б у й ар г у м е н т
т в кеачсвт
о п м а тя
и дл
е п р ма е т
я в ы п о лн е и
я MCI-
ы
за н к ы У
й ей фр ц о б л ас т
MCI- суротй в н е ме ож
я н е уазкн
м и ле ж
т нв
е д о п ус и т м ы
х
и о н е д о с уп т н о т выб рта
шО иб к а пр MCI- суротй в мИ
а и з е о н б я р аж
я
гр н а и MCIERR_SET_CD
й п ра м р е т
и ех н д
MCIERR OUT_OF_MEMORY
р в
х
MCI- суротй в
MCIERR_NO_WINDOW
MCIERR_NULL_PARAMETER_BLOCK
й п ра м е т
т р те б у м ы
х усрто й сват
ймла фа
MCIERR_NONAPPLICABLE_FUNCTION
в MIDI. й й в с и е мт -
н
шО и б а к , с взяна п о м к д р ай в е но в к и с о в м ес нотг з о вт а ь п ра м е т
MCIERR NO ELEMENT_ALLOWED
о р и г н ы ал ь
т н е о б х ди м ы а
о ичс л
а и е да о ж й н е узак
ик MCIERR MUST USE SHAREABLE
, невоз е у с р от й с в т о н е . шО иб к а ме о ж т а в ы е п с а ыт ь м waveaudio
я ус ан о т в к а п р а м р ео т о в о с на о т в и ь л midimap.cfg, рсаенпыо л ж м калотг е Windows
й фа MCIERR_MISSING_INTEGER
й MCI- усрот й свотм , т . к . дан о т ег о рм фо ат , напри м ер , одгк ь фай л МР З ус рто й с вто
ь н е о б х ди м ы и с м ен
е д р ай в е р а о
, т . к . ени пр олж й ол а т к а н е о б х ди м о г
е г о
MCI- и нт е й рс ф
для
р аб о т ы
161 zyxwvutsr
с м луьт и м ие да
аТ б л и ц оК
д ошибк
и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Оп и с а н е и спос б ус т ра не и я
MCIERR_UNRECOGNIZED_COMMAND MCIERR UNSUPPORTED FUNCTION
еН и з в с н а т веа жи ын
я о к м ан д т л и д ан о е о мк н а д ы
. рПоевт ь е MCI- суротй в
MCIERR SEQ DIV INCOMPATIBLE
е Н с о в м е с и мт ы е рм фо ат pointer" и SMPTE
MCIERR_SEQJSTOMIDIPRESENT
иС с е м т
а н е ои лб наруж
MCIERR SEQ PORT INUSE
аз к н ы У
й по р
MCIERR SEQ PORT MAPNODEVICE
с р от У й с в т ил и н е нйаедн
MCIERR SEQ PORT NONEXISTENT
т MIDI уж
ш О иб к
MCIERR SEQ_PORTUNSPICIFIED
В с и е мт е н е выб ра ь управлени по р т в "Пелна у с р то й с в а т "
MCIERR_SEQ_TIMER MCIERR_WAVE_INPUTSINUSE
MCIERR WAVE INPUTSUNSUITABLE
MCIERR WAVE INPUTUNSPECIFIED
MCIERR WAVE_OUTPUTSINUSE
Вс с в о т на
Н е з а н ку у м о ла н ч и ю в м е с и тм о с р о т йа к уа д и о с р т й с в а т
MCIERR WAVE_SETINPUTUNSUITABLE MCIERR_WAVE_SETOUTPUTUNSUITABLE
. 1325
я
е н е ус ан то в л е н
о
т MIDI. с анУто ви я \ Звку и и ауди о
ы м и т л ь у е ди
ы вс т з ап и с ы в ат
е -
а з ад е й
и пенри ямло ж
-
и е о з в к уы ь й фа
е у с р т о й с в та л в дан о
о н и одног о б ы зпаис ывта о з ап и с о за т ку о з па и с ь у п р ав л е н и
о ус рто й ь й фа
, м л в
и з в ук а п ь лю б о е с о и з в ук а в на я \ Зв к у и
о и
" е м о уг е
ы вс т п р о и г ы в та
Н е з а н ку о у с р от й с в т а п о у м о ла н ч и ю е с о в м е с и тм о я з в ку а в н са р о т й к я \ Звку и и аудио сртйсват
с р тУ о й с в о т (во с про изведния з тн а
а MIDI
е и с позуельт
н по р
о у с р от й с в т . еНоб хидм е у с р от й с в т х "Пнела
Зд а е й с в о т н а о р кт ы рм фо та
ущ е к Т е во на
я "song
е
ы с и е мт ы д р уг и м е м о уг е
-
а MIDI
В с и семт е н е усанотвле с в та , оркт е м о лг д ан о м рм фо ат е
з в ку лю б о де н и ин MCIERR WAVE SETINPUTINUSE
е ай т м е р
Зд а е й с в о т н а о р кт ы рм фо та
MCIERR_WAVE_OUTPUTSUNSUITABLE
ы е з ла т к у
о MIDI, октр о в с и семт
а по рт
, по дер о в ы б р ан
а у с р то й с в т
MCIERR_SEQ_PORT_MISCERROR
6 3ак
zyxwvutsrqp
3. 9 (оокнчаи е)
е з ов ку
е зо в ку ы ь й фа
е ус р т о й с в та л в д ан о
, м
о во с п р о и звед ни
я
. еНоб хидм е су р о т й с в т
о а зу к т
ь
о во с про и зве х "Пнаел
ь уп р ав л е
-
" е су р о т й с в т
о жу
е задей с т
-
о , и с позльван о ) звуак ь фо рм а
т п о с у юа т щ и
е д л я з ап и с , н е м е о ж т р ас п о х дан ы х
и -
162
З а л ек ч ю н и
е
л ав Г
3 zyxwv
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
В дан о й глав е м ы коркт о п расветди л и н е р ф йт с а Windows лд я работ ю уд щ е й лг а в е м ы с вам и р а с м о р ти к нл а д о г о п р о г а м и са т , и н ертфй бот ы с в и едо .
и в аш ме у в н и м ан и ю кркато ы с мл ь и у т е д й н ы м и с р ут о й с в т а м и . м о ч ен ь и н е рт с н ы й , с точ к с Video for Windows — и н ертфй
е оп и сан и и з рен и
е В сле я п ри с дл я ра -
В А ГЛ
А 4 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Ш К
Video for Windows - инте йрф л д я ратоб ы с веид о и ар т к К
й эру ск
с
с
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB
. И п ок а к ри т к и сп о ря Вс е м ы п окл н и к и ки н о и н ог о фи л ь м а , мы , з ри елт , с уодв ль свти е м с м ро и т ровы х н е тх о л г и й , а актж е п о в ы ш ен и е м в ы ч и с л и е ть н ы см о т р фи ль м о в н а к ом п ь ю ерт е а ст л п о в с не д в н ы м ы н а к о м п ь ю е рт е в и е о дк л п ы и л и н а с л ж е дм с м ы и ме м е д л о с в и е од ф а й л а м и , п расевдтлн ы м с р а с ш и р ен и е м avi, mpg, mov и др . В адн о й лга в AVI- афй лм и .
т о од с т и н с в т а м е го
х от г о и л . С раз ви т е м ц и ф х м о щ н о ес т й п ро м дело м . Н е важ н о , см орти я н овы м б л о к б а с те р о м , и в Windows фай лам е м ы р а с м ор и т м р або т у
С к о н ц е п а л уь т н о й отч к и з р ен и я , ви еодфай л п р а с е вд т л я т со б й фа й л , хран я щ и й п о с л е д в а лт ь н о с т ь в и е о д к ар в , з аюд щ и х н е о иб д х м ы й в и ед о р я К п о следв алть н о ст и в и е од к а р в п р и в яз а н а ида у о р ж к а , си н рхо н и з и р о в ан а я с в и ео д р я м п о клю чевы м рк а д м (фр ей м а ) . В и едо р ли к м ож е т со е др ж а т ь лю бо е к о л и ч е вс т о к л ю ч ев ы х к ра д о в , в з ави с м ост и о т тог , н аск оль к о ч аст о и си ль н о м ен с я т я и з о б р а ж ен и е . Э т и ркда ы сж л у а т в св о е м род оп рн ы м и о тч к а м и м же д у п ое а р м д х и с ц ен . К лю ч евы е р к ад ы ч р ез в ы ч а й н в аж н ы п р и ч е тн и и в и е од р л и к а , бе з н и х п ром ежтчун ы е кр ад ы те р я ю см ы сл , т . к . о н и , в сво ю о ч ерьд , п раседвтляю т со б й ли ш ь и з м ен ен и е п ре ыд щ у е г о и з ображ ен и я , а н е сам о стеяль н о е (ц ель н о е ) и з о браж ен и е . С о ти т так ж е з а м ие т ь , чт о н о . Бо ле е тог , к ви еодря Д о п о л н и етл ь н о в и е о да ф й и н фо р м а ц и ю , а такж е мз у ы к а л ь н ы и т га с е я з а с ч е т о п р е лд н о в с лт я ь р а з е дл ь н о е р а хн е н и П от к п р е с да т в л я е т со б й ных , сюлуед щ и х рду г з а дргоу м о д в а е тл ь н о с ь т ю к р а до в , слюеуд щ и
н али ч у м ож е л м ож е
и м — и с . е о т -
е аид уо р ж к и в ви еодфай л е н е о б я з а е тл ь т бы т ь п р и в яз а н о н еск оль к о ида у о р ж е к . т с о е др ж а т ь в с еб е р аз ли ч н у ю ет к с о в у ю й MIDI- п отк . Так я н у и в ер с а л ь н о с т ь од с й р ку с т ы в и е о д фа й л , п оз воляю щ е й що с у е е од р ж е к в ат к н а з ы в а е м ы х п о тк а х (streams). н еп р е ы в н у ю п о с л е д в а лт ь н о с т ь ц и фр о в ы х а нд . Т ак , н ап ри м ер , ви еодря д п р а с е дв т л н п о сле х ио д н з а ргдиу м .
164
В аж н п а р с в те д л н щ с у е в с ту
л ав Г
о так ж
е о б р аи т ы в ви еодфай л т м н о ж е св т м и к о м п а н и ям и ; кыажд к ам и . П о эот й п ри ч н в р с от е н а я п о е др ж к р а с п р о с та н е н ы м н фо р м а т MPEG 4 и л и МРЗ . Т ак о в и н ерт ф й
а в к рц а т
ь в н и м ан и
е н а то е в раз н ы
о р аз ли ч н ы й и з н и е р а з б оч т и к а м а р аз ли ч н ы а сегонд яш н и DivX. Дл
е р ку с т
а фа й л о
с п рогам и рован и
, чт х фо р м а т
х а л го р и м т о х о б л а де
о ид оау
- и ви еодп отк х с ж аи т я
и м уо г . В н аостящ е
в с ж иа т я
, раз рабо тн н ы и о д с т и н св т а м а AVI и бы л а п с м р у ео д т н . Т ак , сам ы х фо р м а т в с жи ат я в п о тк ах й е дн ь оф р м а т м с ж иа т я ви е д о яв с л е т я аид у о сам ы м р а с п р о с та н е н ы м яв с л е т т св о и м и фо р м а т
а м я я
в AVI, лд я работ ы с котры м и п с м ур о е д т н я Video for Windows.zyxwvutsrqponmlkjihgfedcbaZYXW
Video for Windows, в даль н ей ш е м VFW — э т о и н ертфй рг а м и р о в а н и я (application programming interfaces), п реодсатв ляю щ и р л д я с о з а дн и я , раедкит рован и б оч т и к а м н або р фн у к ц и й и п роц уед о в ср т о е н и з ен в д и я в и едо ф а й л о в . П еордж к а VFW и з н ач ль н н ы е си есмт ы Microsoft Windows. VFW п рсеадтвля с и е мт н ы о д с а тв л я е ко в п ро г ам и ро в ан и я в юс е ту щ и б и л и о е кт И м не
ь я
е в Video for Windows
в Ве д н и
Д иг р у
т бы т е м ев р х р аз н ы и и н оеадст
4 zyxwv
а м н оиг е н фу к ц и
1С . Сщ у еювсту с н а б ж ен AVI и м е
х к а л то г т ш и роки х з а го л в о ч н ы
т со б й ря д ди н ам и ч еск и х б и л и оект х Windows. И сп оль з ован и е ди н ам и ч еск и е в о з м о ж н о ст и п о вы з ов у и х фн у кц и , в то м чи сл е и з Delphi, с п ом щ ь х фа й л о в , та к н аз ы ваем ы
с п р и к лна д о г
о п ро й р аз я и воспро а в оп ерац и он
, расп о л ж ен н ы х б и л и оет й и з раз ли ч н ы ю п ок д л ю ч е н и х о б е р от к ид н а м и ч е с к и
х в
к п ер х яз ы я со т
х
. х н фу к ц и й , п рсеадтвл н ы и (н ап р и м ер , онт осящ и ес т н е к о тр ы е и с к л ю ч ен и я ы онд и м и з эит х п рефи к со в . Так т и м я AviFiieOpen, а н уф кц и
х в VFW, н ач и н аю ст я к сж иат ю ) н ач и н аю ст , н о бо ль ш и н свт , н ап ри м ер , фн у к ц и я п ч о ел н у и я и н фо р м а ц и
я с п рефи кс
а AVI. а й VFW я фай л а и о а фй л е zyxw
я с п рефи кс о н фу к ц и я октры ит
AVI — AVIF ilelnfo.
с т У а но вк
а и т ре бова ин
я к ра бот
К с о ж а л ен и ю , в Delphi н е т готвы х з а го л в о ч н ы п р о б л ем а ж у е р еш ен а р аз ли ч н ы м и э н з у т и а с тм и о щс у е св т л я ю т п ер в о д р аз ли ч н ы х з а го л в о ч н ы п р и м ер , з аго л в о ч н ы й йа ф л API VFW (обекрт AviFile32.dll) в ы м ож ет е в з ят ь с п р и л а г ем о г InstallWFW H eaders.
е х фа й л о , котры х фа й л о у ид н а м и ч ес к о о к о м п а к- т и д с к
в VFW. Онд ак о эт а е св о и м и с и лам и , н а в в D elphi. Т ак й б и л ео к т и а и з к а лт о г а
Video for WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB - и нт е й рс ф для р аб о т ы с виеод 165 zyxwvutsr
С о ти з а го л в о ч н ы св о е е д бу
т ср аз
у о м т еи ь т х фа й л о в
, чт о в дан о м к а л от г е л еж а т вд е раз ли ч н ы х в ер с и и , э т о AViFile32.pas и VFW.pas. Хот я э т и верси и п о ст у и м в н аш и х п р и м ер а х м ы т со б й онд о и т о ж е , в даль н ей ш е ь в ер с и ю о беркти , п расевдтлн у ю в фай л е AviF iie32.pas.
й п р ес а д т в л я ю м и сп о ль з о в ат
Дл я р а б о т ы с VFW в Delphi в ы долж н ы п ок д л ю ч и т ь з а го л в о ч н ы й аф й л AViFile32 в сек ц и ю uses лмуод я в ша е й п р о г ам ы . Дл я и сп оль з ован и я н ек о о тр ы х н фу к ц и й и кон аст т трсебту я н али ч е п ок д л ю ч е н о г о фа й л а MMSystem (Win32 multimedia API Interface), корты й ои в д х т в п аовскт у D elphi. П р и м е р и о с н дх о г о код а в ы м ож ет е уви етд ь в ли ст н г е 4.1.zyxwvutsrqponmlkjihgfedcbaZYXWVU г 4 . 1 . лечкоюПдни
; Л и с т и н
е за гол вночг
о фа йл
а
u n it Main; in t er fa c e uses Windows, Messages, SysU tils, Varian ts, C lasses, G raphics, C on trols, Forms, D ialogs, ComCtrls, E xt C t rls, ToolWin, AVIFile32,MMSystem;
Р або т а с VFW н ачи н сает AviF iiein it и з ак н ч и васет о сн о в н о е п рави ло , котр
Пр а т к и
я с и н и ц и ал з ац и я з ак р ы и т е е н еоибдх м
и би бли оект м VFW с п ом щ ь о з ап о м н и ьт .
а иасвлозпнь
П о сл
е к ракто г
и о
я
о з н ак о м свт
т р ыи О к
и с п ом щ ь ю фн у к ц и ю AviF ileExit. Э т
а с VFW п ерй д
е фа йл о
м к п ракит ч ески
м воп росам
.
в AVI
Дл
я р аб о т ы с к о н к н р ет ы м фа й л о м AVI ртесбу я лд я н ач л а ег о октр ы ьт й п а р м е ты , п рсеадтвл н ы е в с п ом щ ь ю н фу к ц и и AViFiieOpen, и м юе щ е ат б л . 4.1.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA а ц и а лб Т
аПр м е т ppfile szFile
р
О п и с а ни
е
е за л т к У ез л ат
ь н а суртк ь н а ией нртф мИ
4.1. zyxwvutsrqponmlkjihgfedcbaZYXWV Пытер амр AViFiieOpen
я файл
а дл
у PAVIFILE, В октру с i a vi Fi l e я оркиыт
я
ю б деу
т п о м ещ е
н аук
-
166 аТ б л и ц
zyxwv
4. 1 (оокнчаи е)
р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
аПр м е т
р а мП е т р кы т
Mode
. Ниж
р о п р е д ля е предсвалнт
т и р еж
м до с упта
, в октр
ы в ра и н т
OF_CREATE — с озтад о б н ул е ;
ь й л фа
. с лЕ т фай
л бе
т фай
л и запрещ ае
т й фа
т фай
л и запрещ ае
е за л т к У ак . с лЕ м а т заго л вк
С р аз у ос т и м о з ак р ы ьт с п ар м ето П ри м е
ь н а с ал к и з ен ча и а сандтр
с снардотг е рв н а
о к о рт ы и т
я аф й л
я е чт н и я
л дл
л ок т ль
я е н ти ч о дл
и р аб о т
• • • • • • • • • • • • • • • < • • • • ••
у а в ы м ож ет
е в иу е тд ,
е о т р ык и
и о дру
м д о с у пт о м а н е б де у
-
. Н е т вы -
; я и зап и с
я з ап и с и
;
.
м е г о н е о и бд х й AViFiieRelease
PAVIF ILE.
, . . >
г 4.2. Пра вил ньо
; е др уги м ь в нег
, пок
ы с AVI- айф ло я н фу к ц и е ь в ли ст н г
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
\ Л ис т ин
ь е го
т
о ил и позлсьеваткг о заго л в о N i l — оавтм иатечс к и в ы б и р с еа т я р фо а RIFFzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ
т о м т еи ь т , ч т о п о окон ч ан и , лд я э отг о нжу о в о с п о л ь з о в ьа т с , куаз ы в аю щ и м н а ср укт р п рав и ль н о г
т запи с
л с м о н п о н ыл ь т р ыко т
т фай т фай
я до с упта т ег о четни
о дл
т от -
, т о о н б уде
з рзаделни
л о тк л ь
OF_READWRITE — рокытвеа OF_WRITE — рокытвеа p c l s i d Ha n d l e r
л с у щ е с в ту
OF_DENYNONE — рокытвеа
л б де у
:
и й фа
OF_DENYREAD — рокытвае п р о ц е с ам и ; OF_DENYWRITE — рокытвеа иг м и про цес ам и ;
OF READ — рокытвеа
м фай
ы до с утп а
OF_EXCLUSIVE— рокытвае т й фа о ди н д р уг о й п р о цес с н е с ме о ж п о лн е о зрикыат е й ла фа ;
i
4zyxw
л ав Г
е и зарткы и
е ваиедйлоф
,
е 4.2.zyxwvutsrq ,
,
,
,
• • '• • • • %
а zyxwvutsrqponmlkjih
hAvi : PAVIFile; begin // И н и ц а л и з а ц и
я API
AVIFilelnit; // Откры и
е файл
а
AVIFileOpen (hAvi, PChar(FilenameEdit.Text), OF_READ,zyxwvutsrqponmlkjihgf nil); // * * * Ч Т О - Т // Вс
е выгружае
О ДЕЛА
М * * *
м и закрывае
м
AViFiieRelease(hAvi); // Закрыти AVIFileExit; // Закрыти end;
е API
е файл
а
Video for WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - и нтей рс ф для р аб о т ы с виеод 167zyxwvutsr
о л П е ч у ни
е о р м и нф а и ц
Дл н фу к ц и
я п чо л е н у и
и и з заголвк
я и н оф р м а ц и я AviF iieinfo, и м юе щ а
и о фай л я сюлуед щ и
а файл
е AVI и з з аго л в к й ви д
а AVI zyxwvutsrqponm
а в VFW п р енд аз н ач ен
а
:
AVI F ileI n fo ( p file: IAVIF ile; var p fi : TAVIFILEINFO; I S iz e : LONG) : Longlnt Д ан н а
я фн у к ц и
я и м е
т сюлеуд щ и
е п а р м е ты
, п рсаедвтл н н ы аТ б л и ц
аП р м е т
р
О п и с а ни
p f ile
е с Др к и по т
Pf i
е л за т к У ци я
ISize
Ср к у т
4.2. Пар м е т р ы
р AVI- йл фа , авзтя
а
ь н а сру тк я и з заго л вк
у TAVi Fi l e l n f o , дук а AVI
зам Р е р срутк ы TAVi Fi l e i n f о , окрты sizeof(AVIFILEINFO)
т сюлуед щ и
е п о ля аТ б л и ц
е
О п и с а ни
dwMaxBytesPerSec
dwFlags
AviFiieinfo
е
а TAViFilelnfo и м е
о лП
. 4.2.zyxwvutsrqp
е в табл
й мн ож
а о р ми н ф а
о поичулт
е в таб л с т ртку ы
я с о кр с т ь вывод т (bitrate), и зм еряст
а п о кт
-
ь с по м о щ ь
, п рсеадтв л н н ы 4.3. Поля
, азукывющ и в ай и л е д о ф
т з на е с
ю
. 4.3.
TAViFilelnfo
е
М с ка и м н а ль в еа м ы й б и р те й (BPS) л агФ
а б уд е
, ме ож
й н а до п лниетуь т принм та
A VI F HASNDEX — езнчиа д ан ы й йа в и д е о ф л им е
а в и де о я в б иат ю о ри м н ф ац и е з н а че и я
ь с ледующ и е аг фл т индек
, та к назы х в с е ун к д
а аз ук ы в е с в конц
е ай л ф
A VI F M USTUSEINDEX— езнчиа е га фл а а зу к ы в е т ч о п о р яд к во с п р о и звед ни я зад н в и ндеск п р о и зведни е в и ед о н до лж о и тд и в с о всет и д е кс о м , а н е с фи зиечс к м п о р яд к м с ледо вани д ан ы х ; A VI F ISIN TERLEAVED— знечаи е га фл от , тч о ль фи м з па и с н в "чер с ротнч й (INTERLEAVED). ыд жа К й д а к р в ы о с ди т , рзаб оит н о ц е ьл й а рки т н о й , а киартонкй ср о тк у д в ум я п о лям и . оакТ й с по с б вы о д и н т е р л й с нм ы (дос лвн о "чер довнаие" ) р з а в ке т и е да т ан м н е 25, а 50 подарлку
у ю о :
т н а то ;
, чт
о
т н а то , , т . е . вос и с ин я в и де о а аз ук ы в е
т н " рзавект я н е про с т й чер з д у жа к а н аз ы в с е т . ан ыД й ви в в с е у нк д
а е о ю я д ,
л ав Г
168
Оп и с а н и
е
тч о п р и во д ни я . ан ыД з ен ч а ы е тл в и з о р а с р от н ч г сет я пр о г ес и внмы
т к пв а н л о м й а фл г и с п з о е у т ль х дл я TV- вещ наия , вы оди т ыд ж а к о вы о д а п о ле й (дос лвн
е
у вы о д
у пр и с м ен е е и з о б ржа я дл я й ло в фа , предна , т . к . м о ни тр , в олитч е о й да к р ц е л и ок м , б е з ерчс . Тоак й с по с б вы о д а нза ы в о "пос лендывьмта ") ;
A VI F WASCAPTUREFILE— флга
, азукы вю щ и
д ан ы й й а в и де о ф л вс я л е т я з в е ха ч н ы в и де о в рим еж е рногьела о врем ени AVIF_COPYRIGHTED— еноч ь и ен рт с н ы в аю щ и й , тч о AVI- й фа л и с о де р ж т с и к м п р ва о м д ан ы е . еоТритчс к п е чн и е н е н до лж о р за е ш та ь о к п и р о в ан и я з а го д ы в н аи е в и ед о н а ы х . о тХ в с р и е тл и токаг о прогма м ног о о б ес печни dwCaps
ла Ф
г с по с б но сет В нсаощят е
dwStreams
п О р е д ля й фа
dwSuggestedBufferSize
е в р ем л с аиду
й (Дослвн я дан ы
т о к ли е сч в т о и виед
п О р е д ля т р о е к м е н ду м ы ни я и в о с п р о и з в е д н и е до лж н б ыт ь д о с а т нч н иа б шо л ь и й суок ег о р в а н о 0 ил г р ам м н о е о б е с п чн и б уд е т с ма о п е р с а п р е д т ля е чтн и е вр ем ен и л Д я interleaved- йл фа б ыт ь д о с н ат ч о дв у х с р оа т к х развеиркт
й фла
й е р н ы б уф я йла фа о б о шль и м
х в фай ле я с ли ш о к
З н е ач и , предсвалтно dwRate, обтч ы о п р е д ли т в и де о и аиду о в м са ш ба т иь т , тч о в с о всети о т к ме о ж т им ет ь с об свенты и звед ни я .
е
. паНрим ер
,
р дл я е тч , эот т рзам е , отчб ы т а с о ед р ж и зенчаи . с л Е м м а л ие к н м ь , про я в и ед о н до лж ю п м а тя ь
р ь е о в
. т е р н ы б уф , чобт , а н е токль
dwScale
-
й р за м е
а эо т
з ма Р е
, азукы е о вр а т е обес е и д уб л и р о ы м ы ат к и н я
р аб о т
ь о п е и р т ва н у
dwHeight
, тч о
й га фл з ащ и щ е н ы и п р о г ма м н о
. Во б щ е
во с про и зведни я
з ма Р е р е н и з о б р жа сеч т я с рза у омт иьет з на ы й в з г оа л в к н о р е л гь а о р з ам е р п р ва н и о л ь г о о п р ед л ни п о з с л ь в та я цнике фу ек , о корт й бдеу
-
;
е во с п р о и зведни
dwWidth
т
м (Capture)
в в й ле фа а покт а
т дв
к виедонаы и вс я л е т
й н а от
-
о "Specifies capability flags"). г н е ис позеулть я
о по к т о им е
б о ш ль и м
zyxwv
4.3 (пернио лд)ж
аб Т л и ц а По л
4
ы т иа ч о с у ок
й р з ма е ь да р к к ег о
р е до лж , ищуд и
н й в
я ви е д о п о ш ир н е в п и с к е х ал . о Х х р аз м е р , уак , чт о в риекд х с яалчу е й л фа а AVI, ме ож т с о л иь т а ч я о т а е н и з о б р жа я в в и д е о п ет к . л Д я я р аз м е р а ш л уч е вс ег о во с й п о е н ч лу и я о р м и н ф ца и и о по т т р са з н к о дале е
р в и де о н з б р ж а
я п о выс от
е в псикеал
х
е в э о т м п о ле , ис позеулть я с ь с о кр с т ь во с п р о и зведни я е вр ем ени . отСи т с р за у зма е и с аруотиехк й AVI ыд жак й по й м са ш а т б вр ем ен и во с про -
Video lor WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - и нтей рс ф для р аб о т ы с виеод 169 zyxwvut
аТ б л и ц ол П
е
Оп и с а н
е
е л н Ди
е з е н ч аи во с п р о и звед ни я в ейм фр а х (кдарх д у аи о — в баолк
dwRate
З не ч а и
dwLength
е заде т дли н . иднЕц
Дл
В д ан о м ца и
ло г I Л ис т ин
и и сп о ль з о в ан и , ч аст ь и о с н хд о г о код ю п р о г ам ы в ы м о ж ет е Source\ Ch04\ Ex01. г 4.3. Полечуин
е иорм нф а иц
е си т о де р ж
я н уф к ц и а к о рт е н ай т
, орытк
е б ыл
и д о б ав
-
ы
м по л и о вйалидеоф
я е дм о н с р т а ц и рг а м у в ер с и
я
)
о п о тк в
и ду л а е н
ь я
и во с п р о и звед ни я AVIы в dwRate и dwScale
у вр ем ен
т о к ли е сч в т ы ил
п (б/олк андсу ек
ы о п р едлн
п О р е д ля ле н
szFileTyp e
я dwRate н а dwScale дае т с ок р с т . л Д я виед о э т о знечаи е и з м е р ся т у (FramesPerSec), дл ) в с еункд х в с уендк у (BlocksPerSec) т тем
п О р е д ля й ла фа
dwEditCount
zyxwvutsrq
4. 3 (оокнчаи е)
й п ар с в е т д л н и н а п р и л а г ем о
я о п и с н еа л ь т я са ч т ь о р и нф е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR
и AViFileinfo м ы раз рабо тл а в ли ст н г м к о м п а к- т и д с к
и о ваиейдлоф
е и з за гол вк
и п ро е 4.3. П о л н у е в а кт
ю -
а AVI
procedure TF orm l.F ileListBoxC han ge(Sen der: TObject); var hAvi : PAVIF ile; infoAvi : TAVIF ilelnfo; begin I F F ileListBox.F ileN am e = ' ' Then E xit ; Try / / И н и ц и ал з ац и я и ко т р ы и т е й а фл а AVI F ileln it ; / / И н и ц и ал з ац и я API AVIFileOpen (hAvi, P C h ar(F ileListBox.F ileN am e), OF_READ, zyxwvutsrqponmlkjihgfed nil); / / И н ц м ра о ф и я , в з я т а я и з з а го л о в к а AViF ilein fo (hAvi, in foAvi, SizeO f( in fo Avi) ) ; / / П чне оули е и цн м а р о ф и with InfoAvi do begin / / Р аз м е р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Size.Caption
:= IntToStr(dwWidth) + ' x ' + IntToStr(dwHeight);
// FPS FPSHeader.Caption := IntToStr(Round(dwRate/dwScale));
170
л ав Г
4 zyxwvu
II zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA м еВ р я TimeH eader.Caption := TimeToStr(dwLength/ (dwRate/ dwScale) / SecsPerD ay); end; / / В с е ж в ы е а ру г м и з ак р ы в ае м AVIF ileRelease (hAvi); / / З акры ит е API AVIF ileExit; / / З акры ит except end; end; О б р иа т в п ри вы ч н ы
е в н и м ан и е х ч ел о в к
, чт о врем у ие д н и ц а
е йа ф л
я в о с п р о и з в е нд и х и з м ер н и я
а
я в и е до ф а й л , а и м ен
К о н еч н о , н а эот м эапт е м ы п ч о ил у и ли ш ь м алу ю ед о ф а й л е . Дл я п олн от ы ки ар т н ы хоелт с ь б ы такж г о кео д а бы л и з аж т ы в и ое д - и аид уоан ы е в фай ле и т я ид ауо . П очлуи т ь э т у и н фо р м а ц и ю и з з а го л в к AviF ileinfo н ель з я , з аот , и сп оль з у я н фу к ц и и че н т и з ун ат ь э т и ад н н ы е н е с о а вт и т о с бы х п р о б л ем . Онд ак эит х дан н ы х м ы долж н ы обесп еч и т ь доуст п к п отк ам
п к па тко
сту До Д л я п о л уч е н и кры т ь ТО О П
а п ар с в ет д л н о в Ч.М .С
о .
ч аст е з у н аьт
ь и н фо р м а ц и и о ви , с п о м щ ь ю како , а так ж е с е пт н ь жс а а AVI- айф л а с п ом щ ь ю я и н фо р м а ц и и о п октах , о п ер д с ч и ы т в ан и е м .zyxwvutsrqponmlkjihgfedcbaZ
м а к п о то к а м Ю ф ун к ц и
я д о с т уп К С ЬЩ О М ПО
, н а хо д я щ и м с я в в и де о ф а й л е и AVIFileG etStream:
, н уж н
о от -
fun ction AVI F ileG etStream (pF ile: PAVIFile; var pStream: PAVIStream; fccType: FourCC; lParam: Longlnt) : Longlnt; П а р м ет
ы фн у к ц и
П о сл п р о и с хо д и
е р аб о т
и п арсвтедлн
ы с п о кт т С ЬЩ О М О П
ы в таб л
м ег о н ж у о о б я з а е тл ь н о з а к р ы ьт Ю ф ун к ц и и AVIStreamRelease. аТ б л и ц
аПр м е т
. 4.4.
4.4. аПр м ет р ы
. З акры ит
е п о кт
а
AVIFileGetStream
р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
p f ile
е с Др к и по т
р AVI- йл фа
ppavi
е с р Д к и по т
р покт
а
а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED
Video for WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE - и нтей рс ф для р аб о т ы с виеод 171 zyxwvutsr
аТ б л и ц аП р м е т
р
О п и с а ни
fccType
е
п Ои с е л т а щи
ь ви д
а п о ат к
е знаеч и я
. Днаы
й п ра м е т
StreamtypeVlDEO — видеоп кт
й но м е
й п р и м ер
j Л и с тн
;
р покт
е п е р и ч с ле н и а пр
е вс е
х по тк
в
и zyxwvutsrqponmlkjihgfedcbaZYXW
и перичс лен
й в л и сит н г
, п расевдтлн н ы
е в и е од п о т к а
-
;
е N i l , о предляющ е
е знечаи
о П р дяк в ы
С ю л уе д щ и
ь с л е д ую
; й MIDI- покт
StreamtypeTEXT — теск т
ит
т п р и н м ат
;
streamtypeM lDl — мнызульак
а тжак
р ем о ж
:
StreamtypeAUDlO — диуаоп кт
lParam
zyxwvutsrqp
4. 4 (оокнчаи е)
е 4.4, дем о н срти реу
т ок т р ы
-
. г 4.4. Пине ч уол
е допсу т
а к воиекдпт
у
/ / Бе р м п рв ы е й в и ед о п о т к I F AVIF ileG etStream (hAvi, hStreamVideo, STREAMTYPEVIDEO, 0) = AVTERR__OK Then begin / / П ро и з в о д м к а о е- ли б о д е й с тв и е end;
о П л е чу н и
е иорм нф а иц
Дл
я к о р екн т о
и о потк
й р аб о т
фо р м а ц и
ю О п о тк
ы с п о тк а м е СЬ Щ МО ПО
и п р о г ам и ст Ю
е
у р т е бс у я п о ч л уи т ь ин и AVIStreamlnfo:zyxwvutsrqponmlkjihgfedcb
фн у к ц и
function AVIStreamlnfo(pStream: PAVIStream; var asilnfo: TAVIStreamlnfo; ISize: Longlnt): Longlnt
Д ан н а
я фн у к ц и
я и м е
т сюлеуд щ и
е п а р м е ты
, п рсаедвтл н н ы аТ б л и ц
аП р м е т
р
Оп и с а н
pavi
е с Др к и по т
Asilnfo
е л за т к У д е запо лнясет
е в таб л
4.5. Пар м ет р ы
. 4.5.
AVIStreamlnfo
е р покт ь н а суртк я ио рм нф цаие
а у TAVIStreamlnfo. ан Д й о покт е
я с ур т к
а н а воых
-
172zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
л ав Г
4
4. 5 (оокнчаи е )
аТ б л и ц
р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE О п и с а ни е
а Пр м е т ISize
зам Р е Ь МОЩ
ь о к рт ы й нм ож о с по - zyxwv р ру с т к ы AVist r eam inf o , пиочтул Ю size o f ( AVist r e am in f o ) zyxwvutsrqponmlkjihgfedcbaZYXWVUTS
О м ти е , чт о ркуст а AVistreaminfo явлсет я баз о в й л д я к а ж о гд о п о кт а . В з ав и с м о ст и о т ит п а п о кт а , куаз н н о г о в е дс к р и п о т р е , ркуст а е д бу т и м ет ь с юл е у д щ и е з н а ч ен и я п о л ей , п расевдтлн ы е в таб л . 4.6. Та к ка к н а с в о сн о в н о м и н е рт ю с у т п о кт и ви ед о и и д а уо , и н офрм ац и я о п о кт а х MIDI и е кт с а рас м арти ваьтс я н ма и н е бетд у .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR
4.6. zyxwvutsrqponmlkjihgfedcbaZYXWVU я лоП у т к ср ы AVistreaminfo
а ц и а лб Т
ло П
е
О п и с а ни
е дл
я в ие д о п т к
fccType
иТ
f c c Hand ler
32- бныит й о к д (FOURCC), иедн и ц р т ую ф щ и й рм фо а т и та с ж в и де о к м (ком прес ор м и ат с ж я в и де о ) . оПрдбне е т рса знк о о FOURCC бдеу д ал е е
dwFlags
п оп к т
ла Ф
а
г покт с л е д юу щ и
а ме ож е з н а еч и я
т прин м та
т н а то я и с п з о ль в т а ;
-
, чт о дан ы
я аидуоп т ок
То ж
е
а
Н е и с п о з еу л т ь
ь
я
ла Ф г поатк т о же , з а ислюекчн
Г уЫЗЭк
й о пт ь п о м у о а лч
е
лд
я
:
AVISF_DISABLED — Э фЛ
ев а з н е ьл ни ю
О п и с а ни а
. езначиН
е м
AVISFJVIDEO_PALCHANGEЈ -
к -
AVISF VIDEO PALCHANGES —
а фл
г за ы ку в е оп т к им е в у ю р п и л уа т га фл а аз ук ы в е о б е с п чн и с м ен ы п р ил а т dwCaps
г ла Ф
т н а то т и зм ен у . илачН т п р о г ма м н о м ю н а н е о б х ди м о с т ы
и с во й с вт
wPr i o r i t y
рПи о е т
wLanguage
Н е и с п з о е у т ль
. Н е ис пзоюутль т покт я
а
, чт о виеод ю цо в е т е д ан о г
о у ь я
Т о ж е Т о ж е о и та к И д е н ф о т ак й ло в фа ду а и к о р ж зя ы х а к
р зяы к . Ис позеулть
а по я
я дл , щас одержи
х и н а рзнаы
.
-
х
Video for Windows - и нт е й рс ф
для
р аб о т ы
173 zyxwvuts
с виеод
аТ б л и ц ло П
zyxwvutsr
4. 6 (пернио лд)ж
О п и с а ни е е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е дл я виед опт к а лд я аидоупт к а К п р и м е р у, е с л и к виде о п р и ке л н ы дв е ауди о к ро ж и н а рзныа х языхак , т о с пом ощ ь ю wLanguage нм ож о и ц де нр тфо в а ь вы б о р дко р ж и дл я овс п р о и зведни я
dwScale
М са ш а т
ил
б врем ен и поатк . Резда в dwRate н а d wScale, поичул м с о кр т ь покт а в фрейм а х в се дн у к у
М са ш а т б врем ен и по так з а д е Рл и в dwRate н а dwScale, дл я ыта нес ж й ло фа в поичул м с окр с т п о тк а в б олак х в с еункд рП и нилач и и ат с ж dwScale бдеу т рван n B lo c k Alig n суртк
. х ь . я о по л
ю ы
WAVEFORMATEX
dwRate
dwStart
о кСр с т че н и д ра к о з н е ча и
ь в целоичс ено . Дл я поенчлуи в фрей м о е раздели т
о Нм е с не ат н о в жа в и де о р л и к 0 ил
р фрейм а я во с п р о и звед ни , помт
п О р е д ля п р о и звед ни о п р ед л н
d wInitialFram es
Н е и с п о з уе л ь т
в н е о б х ди м
о нича е (э т о й кда р ь индек с
То ж
у вр ем ен и вос я поатк . идн Ец ы ы в dwRate и dwScale
То ж
у чт о первы а ме ож т им ет т дли н
х з н е ча и
ь в целоичс лен о м . Дл я поелчуни я а болк а ауди о ан е н е о б х ди м о ь н а dwScale
е
г ауди о к ро ж п ра м е т ре з кока та ч ь во с про и зведни де о пос л З н е ач и (0,75) с еункд
й рзам е т рзма е
р бер фу . бОынч
р ниаб шо ль е . Рвеа н женелыать
н нлюу
е
вд С и
я
и в б хйат
п м а тя п о ат к вес т
о кС р с т з н а еч и р аз м е р ны р за де ли т
о ь н а dwScale
, с корт г
нелыать Же жи
и
и 1)
dwLength
dwSuggested Buf f er Size
м зан я сокр с т
о с о дер й ц еп ок ч , ес л и неиз й р за м е р
То ж а и -
е
. Эот т , че я нда о на е в и а ауди о . о р ва н о 3/4
р о предлят е врем е нлач е об ынч ы
174
аТ б л и ц ло П
zyxwvu
4. 6 (оокнчаи е)
О п и с а ни е е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е дл я веид опт к а лд я аидуоп т ок а
d wQualit y
е сч а в тК
о зпаис
лД
я сы та ж р ван д на о м б ыл а нч и е
dwSampleSize
о прам ет у о к ед о п е р нд а , т о зенчаи
ы онк а видео з б ржа . RectFrame рнхаи т ы в ен р ог х - ел в о г и ш ир н у о ил е К с ч в т
dwFormatChange Count
о ил е К с ч в т п о кт
szName
п Ои с н а
, адн а е и н е н ес м к п о ч л уе н и е н а о сн о в
Т о ж е
и о т 0 д о 10 000. х з ен ча и е у кечасвт , пер у сиатя ж . Есл и о си та ж е п о ум о л е рвна о - 1
з ам Р е р ни я
dwEditCount
к ви д м
х дан ы
за м Р е р ондог о фрейм а д ан ы в бхайт . с лЕ и п ра м е т р рвае н лю у , т о рзам е р ме ож т изм ьентя с я . Нпарим ер , в сы та ж х в и ед о д ан ы х р за м е р ы фрейм а в зави с им ос т и о т киранкт и м оуг т вираь с р оь в т а я
rectFrame
Ка п о тк р йе д п о тк
4zyxwv
л ав Г
о ц р и е к ад
зам Р е ауд и о по л
н -
ур т
р о дно г о болк а . Знечаи е рв н а о ю n B lo c k Alig n скрут ы WAVEFORMATEX -
-
Н е с т е у з иь лопс -
т ко рдина о улг а + выс от й покт
о и зм ен и
х
я
у а
й форм та
а
о Тж
е
о Тж
е
а е покт
я р ку с т т и н фо р м а ц и ю и р аз б о р е ан али з а дан н ы х
оТ ж а
а п р о е д са в т л я е и о сам и у н фу к ц и , врем н
т отл ь к х дан н ы х
. Онд ак , п роедсавтляю щ е о оаснт ови м с
е zyxwvutsrqponmlkjihgfedcbaZY
о о бщ у о п ер
ю и н фо р м а ц и ю о д те м ка к м ы п е й и н фо р м а ц и ю о я н а п ол е fccHandier.
П ол е fccHandler и сп оль сзет у я л д я п чо л е н у и я и н фо р м а ц и и о сп о с б е с иж а т я в и е оад н ы х и п р и м ен с яет я п р и в ы бо р е с о в т ес ю у щ е г о к оед а . И енд ит фи к а ц и я к оед а о с н о в ы в а се т я н а п р и м ен и и а т к н а з ы в а ем о й с и ем т ы об а п о с в р ет д м ч ы е т р к б е у вх н н о г о код а (FourCC — Four з н а ч ен и я к ое д х к ое д в ж е скт о з а нд ы к о м п ан и е й Character Code). К од ы р аз ли ч н ы Microsoft. Н ап р и м ер , FOURCC 'CVID' и едн ит ф ц и реу т к оед к Cinepak (п реж д е Compact Video). П р им е а и ч н о ит С т тжак и ац к д е н т ф ни я х и ви део в YUV- м оедл
е о м т и ье т и п р е д с ва л т н и . Нпарим ер и пресдвалнти
, чт о Microsoft ис пзоеуль я п и с к е ла , код ы 'YUY2' и цденртфую я ц ва е т . Вмозь е
, ис пзоеумль ог
т FOURCC тжак о в ы та н е с ж т предсавтлни м дан о е п р и м е ан ч и
е дл
я у н и о ал ь к х и е з о б р жа е п и с к е ло е н а зма укет
й в .
Video for Windows — и нт е й рс ф
для
р аб о т ы
К а к бы л о ск аз н о , лю бо й к ое д к сж иат Microsoft, онд ак о п р акит а п о к а з ы в а ет т а кт о й р е ги ср т а ц и и г е к ое д и н е и м ею н д яш н и й ед н ь DivX. В ат б л . 4.7 п рсеадтвл ков . В о з м о ж н о жу е н е п о лн ы м
с виеод
175zyxwvutsrq
я ви ед о долж е н бы т ь з ар еги срти р о в а , чт о п о те м и л и и н ы м п ри ч н а . В и х ч и сл е п о л я р ун ы
-
н сп и со к и е н д и т ф к ао т р в з а р е ги с р т и р о в а н ы х к ео д , н а м о ен т п б луи к а ц и и а нд о й кн и г и э от т сп и со к о к а ж сет я .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA аТ б л и ц
оК
н в м мн о й н а с е го
4.7. FOURCC кыо д
д zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е од К к оК д е до К к
3iv1
3ivx Delta 1/2/3
H265
Intel ITU H.265
3iv2
3ivx Delta 4
H266
Intel ITU H.266
aasc
Autodesk Animator
H267
Intel ITU H.267
afli
Autodesk Animator
H268
Intel ITU H.268
aflc
Autodesk Animator
H269
Intel ITU H.269
ap41
AngelPotion
i263
Intel ITU H.263
asv1
Asus Video
ir21
Intel Indeo2.1
asv2
Asus Video 2
iv30
Ligos Indeo 3
bink
Bink Video
iv31
Ligos Indeo 3
cram
Microsoft Video 1
iv32
Ligos Indeo 3.2
cvid
Cinepak Radius
iv33
Ligos Indeo 3
div3
DivX 3.11 Low Motion
iv34
Ligos Indeo 3
div4
DivX 3.11 Fast Motion
iv35
Ligos Indeo 3
div5
DivX 3.11 VKI Low Motion
iv36
Ligos Indeo 3
div6
DivX 3.11 VKI Fast Motion
iv37
Ligos Indeo 3
divx
DivX 4
iv38
Ligos Indeo 3
dmb1
Matrox Rainbow Runner
iv39
Ligos Indeo 3
dx50
DivX 5
iv40
Ligos Indeo Inderactive 4
H260
Intel ITU H.260
iv41
Ligos Indeo Inderactive 4
H261
Intel ITU H.261
iv42
Ligos Indeo Inderactive 4
H262
Intel ITU H.262
iv43
Ligos Indeo Inderactive 4
H263
Intel ITU H.263
iv44
Ligos Indeo Inderactive 4
H264
Intel ITU H.264
iv45
Ligos Indeo Inderactive 4
ео к д в
zyxwvutsrq
176
аТ б л и ц оК
4 zyxw
л ав Г
д
оК д е
оК к
д
е до К
zyxwvu
4. 7 ( о кнчаи е)
к
iv46
Ligos Indeo Inderactive 4
MP4S
Microsoft MPEG- 4
iv47
Ligos Indeo Inderactive 4
MPEG
MPEG- 1
iv48
Ligos Indeo Inderactive 4
MPG4
Microsoft MPEG- 4 High Speed Compressor
iv49
Ligos Indeo Inderactive 4
MRLE
Microsoft RLE
lv50
Ligos Indeo Inderactive 5
MSVC
Microsoft Video 1
m261
Microsoft H.261
rv20
RealVideo G2
m263
Microsoft H.263
rv30
RealVideo 8
MC12
ATI Motion Compensation Format
tscc
TechSmith Screen Capture
MCAM
ATI Motion Compensation Format
VCR1
ATI Video Codec 1
MJPG
Motion JPEG
VCR2
ATI Video Codec 2
MP42
Microsoft MPEG- 4
XMPG
Xing MPEG
MP43
Microsoft MPEG- 4
XVIDzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ XviDzyxwvutsrqponmlkjihgfedcbaZYXW
аЧ с т о в р аз ли ч н ы б о т е с в и еод ки м с п о б сло в г о з н а ч ен и м ы п р с е а д тв и л н у ю дл я п реоб аз ован и : Л ист ин
х к о н фе р н ц и я
, п освящ ен ы н и то т ж е воп рос о п чолиу т ь к б ву е н о е FourCC н а осн ов я п ол я fccH andler?". Дл а н а эот т воп ро с в ли ст н г и н аш и м ч и еа л т я м н фу к ц и ю FourCCToString, п рнед аз н ач ен я ч и сло в г о код а в бкув ен н ы й .
, н ач и н аю щ и м м ож н
г 4.5. Пре обра зов ни
х и фомруа
е п р о г ам и ст
е кдо
ы з а дю е о б з н а ч ен и я ов те
х в И н е рт н е т т иод
а FourCC и з числ е онг
;
о в бвеку ны ,
,
Function FourCCToString(lFourCC : DWORD): String; var sRet
: String;
lUByte : DWORD; begin sRet := Chr(lFourCC And $FF); sRet := sRet + Chr((lFourCC And $FF00) div $100); sRet := sRet + Chr((lFourCC And $FFO000) div $10000); lUByte := (lFourCC And $7F000000) div $1000000; If (lFourCC And $80000000) = $80000000 Then lUByte := lUByte Or $80;
х ар : "К а е чи е 4.5 -
й zyxwvutsrqpo
Video for WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — и нтей рс ф для р аб о т ы с виеод zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP 177zyxwvutsrq
sRet := sR et + C h r(lU Byte); FourCCToString := sR et; End;
П р о длж и м
. Дл я п чоелну и нертомсудер х В V F W п
ын ад
я и н фо р м а ц и
и о п отк е н а осн ов е ан али з я AVIStreamReadFormat:
а и ц к н у ф
а фо рм ат
а zyxwvuts
function AVIStreamReadFormat(pStream: PAVIStream; lPos: Longlnt; lpFormat: LPVoid; var cbFormat: Longlnt):Longlnt П а р а м е тр
ы ф ун к ц и
и п р е д с та в л е н
. 4.8.zyxwvutsrqponmlkjihgfedcbaZYXWVUTS
ы в т а б л
аП р м е т
Оп и с а н р
pavi
е
е с р Д к и по т
р покт
о н тч lpFormat
о с таи ч
з ма Р е
, дл
я о р кт т к о тл ь
ь рм фо а ь н а обсал т е
е л з та к У е й о покт
lpcbFormat
а
я в поетк
о Пзи ц
IPOS
AVistreamReadForma tzyxwvutsrq
4.8. Пытер амр
а ц и а лб Т
й сыичсвтеа о дл
ь п ам и я т
я рм фо ат я перво
, корта
й позиц я б де у
. бнОыч
о до с ат
т з па о л н е
а о ри м н ф ац и
-
р б ло к
а пм а т я и дл я запо лне и я . с л Е и прам ет р lpFormat бу н N i l , т о пос л е вы зо а п ар м е т р lpcbFormat при м е т зна е н е о б х ди м о г о р за м е р а о б с ал т и п а м ия т . Т о есь т , дл я по леуч ин я необ хдим ог о рзам ер а с леду т вы зта ь с л е д юу щ и й код : AVIStreamReadFormat (hStream, 0, n i l , h d r Si ze ) ;
де еч н и
т р ва е
П о сл е п ч о ел н у и я н е о б и дх м о г о р а з м ер а о бласт и п а м ят и м ы м ож е м п о ч л уи т и н фо р м а ц и ю о п отк е н а осн ов е ан али з а форм ат а адн н ы х , онд ак о п ер м ы долж н ы я су н и т ь с ю л еу д щ е . Д ел о в том , чт о в з ави с м ост и о т ти п к а н фу к ц и я AVIStreamReadFormat одлж н а з а п о л н ят ь р аз н ы е р с к ы ут л д я в и е до п о т к а в к а ч вес т е п а р м ет а lpFormat одлж е н бы т ь п ер а д н е т л ь н а р к ус т у BITMAPINFOHEADER, а лд я идауоп тк а — н а ркуст WAVEFORMATEX. Т а к ж
к ур с т
р долж н В ли ст н г п о тк е Л ист н
е п ере
а бы т е 4.6 п оказ
д О В О ЗЫ В
ь в ы е л дн н п ри м е
М ф ун к ц и
а о бласт р п ч о ен л у и
и AVI Stream R eadF orm at Л Д
ь п а м тя
и с п о м щ ь я п ро д б н о
ю фн у кц и
е с леуж бно
va r hAvi, hStream : PAVIFile;
й о р м и нф а и ц
й и н фо р м а ц и
и о б а иудоп т ок
-
ь д эит а п от . Т ак к а уз
м , у
Я ЭИ Т
Х
и GetMem. и о б идауо
. г 4.6. Полечу ни
-
и
е
-
178
4zyx Глав
hdrSize : Integer; : PWaveFormat; // летазакУ ь н а WAVEFORMATEX hdrWav begin // Ии ц а з и л а и ц н я и итыркто е фл й а а AVIFilelnit; // цин . API AVIFileOpen (hAvi, PChar(FilenameEdit.Text), OF_READ,zyxwvutsrqponmlkjihg nil); // Бе р м пы в р е й ао т п о и д у к AVIFileGetStream (hAvi, hStream, streamtypeAUDIO, 0); ов кувз м пк о т е н а в о нсо // Па н б о р д о я ии ц а м р о ф н я о AVIStreamReadFormat (hStream, 0, nil, hdrSize); нилд ы
е аз и л а н
а фт а м р о // Пи н е ч у л о
// бк о л GetMem (hdrWav, hdrSize); // Ви н е л д ы // Зи н е л о п а е ср у т к у р т ы WAVEFORMATEX AVIStreamReadFormat (hStream, 0, hdrWav, hdrSize), // ***** чт о Т О Е А Л ЕД М ****** AVIStreamRelease (hStream); // Зе а в ы р к а FreeMem (hdrWav); // Ое а д ж о б в с // Вс е ве а ж у р г ы м и еавырказ м AVIFileRelease (hAvi); // итыркаЗ е фл й а а AVIFileExit; // итыркаЗ е API end;
а е
а пт я м а
и е пт я м а
м по т м пт я м а
и
к ь
Ка к ветид , в дано м кдо е е н т г ечин о согнжл , кандо о иинавозьлпс е функ ци и AVistrearoReadFormat еуд лс т тавиртамс р ь в комплес е с орбза м уткуртс р BITMAPINFOHEADER и WAVEFORMATEX.р у т к у р т С а BITMAPINFOHEADER ое р п нел д а в Win32 API и име т с л е д у ю щ и е пя л о , пынелватсдр е в л б а т . 4.9. Некот ры е ПЛО Я срутк ы (нремипа , biXPelsPerMeter И biYPelsPerMeter) н е имею т отноше и я к AVI- файл м , н о икат х пело й ногнме , мотэп у в цилбат е едуб т дан о понл е оинасп е срутк ы BITMAPINFOHEADER.zyxwvutsrqponmlkjihgfedcba Таблиц ол П
4.9. Поля
струкы
BITMAPINFOHEADERzyx
е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF Оп и с а н е
biSize
и Чс л
о б айотв
, треб ующ исх
biWidth
Ш ирин
biHeight
Выс от
biPlanes
Чи с л о п л о с ок с е т н о 1
я в совсет и
а р а с тр о в о г а р ас рт о в г
и с о сруотк
о и з о б р е анж и о изобе нриаж й дл
я в п и кс е л а я в п и ск ела
я цел во г
о ус рт о й с вт а
й
х х . Об ы чн
о он
о рав
-
Video for WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH - и нт е й рс ф для р аб о т ы с виеод zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON 179
4.9 (оокнчаи е)
аб Т л и ц а По л
е
О п и с а ни
biBitCount
е
Чи с л з н а че н и я
о б и от
в н а п и кс е л
8, 16, 24 ил biCompression
иТ
. оПл
е м е ож
т п р и н м ат
ь с ле дую щ и
ь с ледующ и
е з н а еч и я
е
: и 32
п уп лонте и я
. олП
е ме о ж
B I_RGB — но теа с ж
т прин м та
:
;
B I_RLE8 — фо рм а т о к д и р в на и encoding) дл я рсра т а е ни з о б р жа м а т и ат с ж я п р е д с ва л я т т с об щ и й и з бйат а ичс л а п о в тр е н и й ащ д е р ж и й инедк с цвает ; B i RLE4 — фо рм а м и н а п иск ел . Форм а р м фо ат , с о тящ и с ле ду т б йа т , сащ о держи
я дли
н с ер и й с 8 б имат
й (RLE — run- length и н а писк ел . Фо р й рм фо та , с о с от я м с ле ду т б ай т , с о -
й двбух айныт , з а оркты
т RLE дл т сиат ж й и з бйат
я рсраотвы я предсавлтя а ич с л й инедк
х ие н з о б р ж а
й с 4 б иат й д в убх а й н т ы , з а котры
т с об а п о в тр е н и й с цвеат
й м
;
B I _B I T FI EL D S — заыкувет , тч о рсаротв е и е н з о б р жа е н е та с ж о и тбалиц а о ц в ет в с о ит т и з рет х м са о к ц в ет а в ви д е дв о й н г о с ло в а , оркты е с ат о д е р ж , с о всет н о , ркас ны й , й ком поне т кдо г жа о пискела , Дано е з н еач и е зел ны й и с ин п ра м р е т а яв сл е т я д о п ус и т м ы м пр и ег о испзо львнаи и дл я р са о т в ы х и е з н о б р аж й с 16 и 32 б имат и н а писк ел ; B I JPEG — заыкувет
, чт
B I PNG — узаыквет biSizelmage
Ра з м е
biXPelsPerMeter
а Рз р е ш а ю щ а с вт
р и з о б р е ан ж и а р а с тр о в о г
а Рз р е ш а ю щ а в а р а с тр о в о г
biYPelsPerMeter
иЧ с л з еум ы р са о т в ц в ое т
biClrUsed
м жи
, чт
о иени зоб ржа
е и м е
о иенизоб ржа
е им е
я в б а й т
т форм а
т JPEG;
т фо рм а
т PNG
х
я с по с о б но с т о и з о б р е ан ж и
ь п о горизоналт я в п и кс е л а
я с по с о б но с т о и з о б р е анж и
ь п о веритакл я в п и кс е л а
о и с н ед к о в ц в ет а в тба ли ц м иезнои б ржа х в рса отв м ие н з о б р ж а и и с п з о е у т ль , с о всет ующ е е з н е ча и а сиатя ж , узанко г о прам реот
и цел во г х н а м е т и цел во г х н а м е т
о у с рт о й
-
р о у с рт о й с т
-
р
е ц в ое т . Есл
, иечстк фа и и с п о ль и э т о зенчаи е р ван о 0, в я м с к а и м н о л ьа е ич с л о ю по л я b i B i t Co u n t дл я р е м biCompression
b iClrIm portant zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA а рса иЧ с л о и с н ед к о в ц ва е т , оркты е н е о б х ди м ы дл я выо д
р то в г вс е цвет
Ср к у т Д ан а и ме
а я р ксу т т сюлеуд щ и
WAVEFORMATEX
а вклю ч ен е п оля
о и з е о н б я р аж . Есл и э т о знечаи е р ван о 0, нео б хди м ы а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED
о п р е дл я
т и н фо р м а ц и ю о фо р м а т е ида у о н н ы х . а в Win32 Multimedia Programmer's Reference API и , указ н н ы е в атб л . 4.10.
180
л ав Г аб Т л и ц а
ло П
4.10. Поля
4
WAVEFORMATEXzyx
с т ртку р ы
Оп и с а н е е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
wFormatTag
nChannels nSamplesPerSec
nAvgBytesPerSec
и ц И др е н ю у тф щ и й о кд , заыкувющ и д уи а о . а Т к же , а к к и дл я видео Microsoft опредлн ы и н д в ы ль а у рми т о в и ат я с ж . л Д я ы та нес ж WAVE FORMAT мер . оПрд б ны й с пи о ме т о ж е нйат и в таб л . 4.11
й н а рм фо а , дл я дуаи о о кр п ц а и е е окд ы д л я м они г х д ан ы х и с п з о е у т ль к о и т а р к д е н тф
о ли К е чс в т и с п з ою у ль
. Мо ниечсфк е — дв
о о нл а к т оди
н канл
в в адиуонаых , серто днаы
т и ат с ж
я й
х л га о в в ы
е нд а ы а н ла к
wBitsPerSample
cbSize
е
а
о крС с т ь вы б о р к в с н уд е к у — а т к назывем а я с а чо т а ди с р к и е т з ац и . с л Е и wFormatTag им е т з н е ча и е WAVE FORMAT С Р М (дела е PCM), т о о б ынч о по л е nSamplesPerSec прин м еа т с л е ю ду щ и е з н еа ч и я : 8,0 кц Г , 11,025 кц Г , 22,05 кц Г , и 44,1 кц Г . с лЕ и диу а о н ы е та с ж ы и м к а - ил б о ауди о кде м , т о зенча ни е nSamplesPerSec н до лж о б ыт ь в ы и ч с ле н о с о алг н о с пе ци а к ф и изогвтеил я днао г о кодек а с а н Ре тч
я с о кр с т
ь перчад
и дан ы
х в б хйат
.
с лЕ и рм фо а т МС Р , т о nAvgBytesPerSec е до лж н б ыт ь р ва е nSamplesPerSec х nChannels. л Д я рм фо ота в н е С Р М з н е ча и н до лж о быт ь в ы и ч с ле н о с о гл а н о с пиаецк ф и изогвтеил n B lo c k Alig n
я
В ы р ва н и е б ол к а н ад ы х . енчО рба о т ы с о ы мта с ж и д ан ы м и . ел Д М С - Р ын х а д , м ноиг е о к де и р б а юо т ш им и б л о а мк и , рзаедлни е о р ыт к тЭ а п ер м ен а я о п и с ы в ае т р за м е о е дк у д л я р аб о ы т . л Д я МС-Р nChannelsxwBitsPerSample/ 8, тч о б о р ик . Дл я рм фо ота в н е С Р М з н е ча и н о с о глас н о с иацпке ф и изго твеил о ил е К с ч в т ем о ж з ен ча и иц и м та ы а т к чт
о би
ь н а в жа я п ер м ен а я дл о в от м , отч , в лоичт е о т с о н т с и е л ьт о б о ьл х н а а сч т и нево зм о ж р б ло ак , необ хидм ог ны а д х о н а р в на р ван о р з ам е р у о нд й вы е дн о лж о б ыт ь в ы и ч с ле я
т н а он д у в ы б о ур к . л Д я ь з не ч а и я 8 ил и 16. Дл е по л я н до лж о б ыт ь су н а о т в л е о и з го т в ие ля . Тжка е с ел у д т е уч с ь т и ат с ж я н е м о уг т о п р е д ли т ь ез н чи а х зенчаи е ем о ж о в норетык х сяачул т п р и н м та
СР
н е я я т . о а -
М wBitsPerSample я рм фо ота в н е СР М с о гла н о сиакпец ф , тч о онеркты е р фо е wBitsPerSample, т быт ь н лу е в ы м
з ма Р е р б ол к а д о п л н и еы ь т х д ан ы х , до б авлен ы с ур т к ы WAVEFORMATEX. Ис пзеоутьл я п р и и та с ж и о кв е днаых . на о Д е по л е ем о ж т и с позльват я о н е кр т ы м рм фо амт и , отчб ы р хн а и т ь д о п л н и е ыть е д ан ы е т е в н и м ан и е , тч о дл я рм фо оат в WAVE FORMAT С Р М д на о г о пол я и гно ри усет я .
х в о нке и р са п
ц и
. бОирта знеач и
е
Video for Windows - и нт е й рс ф
для
р аб о т ы
181 zyxwvutsr
с виеод
аТ б л и ц ол П
е
zyxwvutsrq
4. 10 (оокнчаи е)
е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC
Оп и с а н р Пи м е
р и с п о з л ь в ан и я д ан о г о по л я ох р ш о в и ед н в ауди о к р WAVE_FORMAT_ADPCM). В дан е MS- ADPCM (иоиатк денф о н м о е дк е cbSize вс дег а б уд е т рв е а н 32. о пД лниетаь я о о е дк а б уд е т та с о д е р ж ь ци ефи окнэ ф о р м и н ф ца я д л я эо г т ыт , ртеб ую щ и ес я д л я з аш р о в и к ф и и р са ш р о в к и ф и з в о ук ы х н да ы х zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB
де к
В таб л етм бы т
. 4.11 п раседвтл е с ч и с л ен и я) ь п а р с в те д л н
н сп и со з ареги срти ро в ан н ы ы в п ол
к и енд ит ф к аотр
в (в ш еснт ацд ерти ч н о , з н ач ен и
х идау о к ед о в е wFomatTag. аб Т л и ц а
оК д
е од К
0001
СР
0002
к
оК
д
4.11. ыо дК е од К
й си с х м о уг
я к о тр ы
аи дуоекв
к
0020
YAMAHA ADPCM
ADPCM
0021
SONARC
0003
IEEE FLOAT
0022
DSPGROUP TRUESPEECH
0004
VSELP
0023
ECHOSC1
0005
IBM CVSD
0024
AUDIOFILE AF36
0006
ALAW
0025
APTX
0007
MULAW
0026
AUDIOFILE AF10
0008
DTS
0027
PROSODY 1612
0009
DRM
0028
LRC
0010
OKI ADPCM
0030
DOLBY AC2
0011
DVI ADPCM / IM A ADPCM
0031
GSM610
0012
MEDIASPACE ADPCM
0032
MSNAUDIO
0013
SIERRA ADPCM
0033
ANTEXADPCME
0014
G723 ADPCM
0034
CONTROL RES VQLPC
0015
DIGISTD
0035
DIGIREAL
0016
DIGIFIX
0036
DIGIADPCM
0017
DIALOGIC OKI ADPCM
0037
CONTROL RES CR10
0018
MEDIAVISION ADPCM
0038
NMS VBXADPCM
0019
CU CODEC
0039
CS IMAADPCM
М
т
182
л ав Г
аб Т л и ц а оК
д
оК д е
к
оК
д
оК д е
4.11 (пернио лд)ж к
003а
ECHOSC3
0079
VOXWARE TQ40
003b
ROCKWELL ADPCM
0080
SOFTSOUND
003с
ROCKWELL DIGITALK
0081
VOXWARE TQ60
003d
XEBEC
0082
MSRT24
0040
G721 ADPCM
0083
G729A
0041
G728 CELP
0084
MVI MVI2
0042
MSG723
0085
DF G726
0050
MPEG
0086
DFGSM610
0052
RT24
0088
ISIAUDIO
0053
АР
0089
ONLIVE
0055
MPEG Layer 3 (MP3)
0091
SBC24
0059
LUCENT G723
0092
DOLBY AC3SPDIF
0060
CIRRUS
0093
MEDIASONIC G723
0061
ESPCM
0094
PROSODY 8KBPS
0062
VOXWARE
0097
ZYXEL ADPCM
0063
CANOPUS ATRAC
0098
PHILIPS LPCBB
0064
G726 ADPCM
0099
PACKED
0065
G722 ADPCM
00a0
MALDEN PHONYTALK
0067
DSAT DISPLAY
0100
RHETOREX ADPCM
0069
VOXWARE BYTE ALIGNED
0101
I RAT
0070
VOXWARE AC8
0111
VIVO G723
0071
VOXWARE AC 10
0112
VIVO SIREN
0072
VOXWARE AC 16
0123
DIGITAL G723
0073
VOXWARE AC20
0125
SANYO LD ADPCM
0074
VOXWARE RT24
0130
SIPROLAB ACEPLNET
0075
VOXWARE RT29
0131
SIPROLAB ACELP4800
0076
VOXWARE RT29HW
0132
SIPROLAB ACELP8V3
0077
VOXWARE VR12
0133
SIPROLAB G729
0078
VOXWARE VR18
0134
SIPROLAB G729A
С
4
zyxw
Video for WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - и нтей рс ф для р аб о т ы с виеод 183 zyxwvutsrq
аТ б л и ц оК
д
е од К
оК
д
е до К
к
0135
SIPROLAB KELVIN
0251
IPI RPELP
0140
G726ADPCM
0260
CS2
0150
QUALCOMM PUREVOICE
0270
SONY SCX
0151
QUALCOMM HALFRATE
0300
FM TOWNS SND
0155
TUBGSM
0400
BTV DIGITAL
0160
MSAUDIO1
0450
QDESIGN MUSIC
0161
DivX Audio (WMA 2)
0680
VME VMPCM
0170
UNISYS NAP ADPCM
0681
TPC
0171
UNISYS NAP ULAW
1000
OLIGSM
0172
UNISYS NAP ALAW
1001
OLIADPCM
0173
UNISYS NAP 16K
1002
OLICELP
0200
CREATIVE ADPCM
1003
OLISBC
0202
CREATIVE FASTSPEECH8
1004
OLIOPR
0203
CREATIVE FASTSPEECH10
1100
LH CODEC
0210
UHERADPCM
1400
NORRIS
0220
QUARTERDECK
1500
SOUNDSPACE MUSICOMPRESS
0230
ILINKVC
2000
AC3
0240
RAW SPORT
fffe
EXTENSIBLE (РШС А М ЙЫЕЯИР
0241
ESST AC3
ffff
0250
IPI HSX
DEVELOPMENT (РЩ ВЗЮИА ЯИЙС
МИ О П
ещ
к
zyxwvutsrqpo
4.11 (оокнчаи е)
О Ы ВН О ОСН
е н есколь к
Х ф ун к ц и
о п роыст
)
) zyxwvutsrqponmlkjihgfedc
й AVIStreamlnfo И AVIStreamReadFormat, В VF W е с т
х фну к ц и й
ь
:
• AVistreamLength— п оз воляе т п о ч л иу т ь л ди н у п о тк а . Дл я в и едо п о тк л ид н а в о з в р а щ а се т я в к ар д х . Дл я з квуо ы х п о тк в н уф к ц и я бед у т воз в р ащ ат ь лд и н у в бло к а х и да у о н н ы х . Н ап р и м ер , есл и з вкуо ы е ад н н ы и м ею т ч а ос т у 22 кГ ц и ADPCM — форм а т сж иат я , т о бло к и да у о н н ы едбу т раве н 256 бай тм .
а е
П р им е а и ч н
х
лД
я п о е н ч лу и я дли н ы оп к т AVIStreamSampleToTime.
а в м и л с н у ад е к
х мн о ж
о и с п о з л ь в та
ь нцки фу
ю
4 zyxw
л ав Г
184
П Avistreamstart — п оз в ляе н ач ль н а я п оз и ц и я п окт е уд т и сп о ль з о в ат ь адн н у п оз и ц и .
т п чолиу т ь н ач ль н у а в AVl- айф л е ж ескт ю н фу к ц и ю л д я п ч о ен л у и
ю п оз и ц и ю п окта о н е реглам н ит рован а я р еа л ь н о
. Т а й а с ор т в
к ка к , сле й
Ка
к ви дет , в п очлеун и и и н фо р м а ц и и о п отка х AVI- афй л а н е т н и чег о сло ж н ог . Дл я з ак реп л н и я м ер аи т л а м ы р а з б ао л т и е дм о н с р т а ц и о н н у ю п ро рг а м у , корта я н ио д а с х т я н а п р и л а г ем о м к о м п а к- т и д с к е в а кл о т . 4.1 п расветдл н р е з л ь ау т т р або т ы а нд о й п ро г е Source\ Ch04\ Ex01. Н а р и с гр а м ы .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
е : [ data]
ВЕ
-
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC рм о и а ф цн И я с з а го л в к а AVI
Л (Р=> Ф и л ь м
-
Ра зм е
ы new
р ве оди
ел ичст вКо
:
512x364
о о тп к
2
в :
FPS: р еВ м
я п оак з а
оед К
••
:
мр о и а ц ф н И
я о е и в д оп т к к са ж т и
е
DivX3.11 FastM olion
!div4
я :
" " " " 24
FPS: ит л о ж д р П гА е н т п о б р ачн ы м ц е р е м о н и я м _Тп е Wedding B i В о з в р ащ е н и е (DVDRip).avi иЖв о й OKeaH.avi о т -К т о т а к о й ж е к а к Tbi_Someone Like You.avi ад К а п р и в о дя т м е чт ы (DVDRip).avi П о с л е з а в тр а (DVDRipJ_pait1.avi П о с л е з а в тр а (DVDRipl_part2.avi лФ и н с т о у м ы 2.avi
, пот к Разм е
е од К
к са ж т и
С ю луед щ и с о е дл т ь н ы м VFW од сат ч н AVI, п рогам и аст (расп ак о в у
) крад
:
0055
)
62 Kbit/ sec
, п о т о ка г аи д у
MPEG Layer 3 (З МР
1:34:27
:
о [ ms) : 4 4 1 0 0 Г ц
а : о а нкл о
в :
. 4 . 1 . Пр о г р а м м
а Avi Info 2
. е оынетльд
м ш ао г и к ра д м
я Ох
е
я BPS :
ит л о ж д р П
zyxwvu
..• :.;'2*
|
Рис
а с кард м и
5127384
я о аитопдкч
я н ер С д
Ча с т о
Ра б от С о хр а н е и
р :
мр о и а ц ф н И
елисчт в Ко ы new\ 15- 06- 2004\ 102 до лм аит н ц а. ау
1:34:27
,
ив дС
(Ё;\м иьл Ф
а
х карод
в в форм а
т BM P
и Video For Windows сатн е т и з ч е ун и е р аб о т ы м в о св аи в ан и и в и е до и з о б р а ж е н и я . Тнех ол ги я р або т ы с рк а м д и в о п р о ас т . Дл я тог о чобт ы сч и ат ь н ек о тр ы й кад р и з фай л а м н а VFW ртесбу я сн ач л а в ы п о лн и т ь е дк о м п р е с и ю , т . е . п огдтви т ь кад р к оотбраж ен и ю . Деласт я эт о с по -
Video for WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — и нтей рс ф для р аб о т ы с виеод zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE 185zyxwvutsrqpo
ЬЩ О М Ю с л е д ую щ и х ф ун к ц и AVIStreamG etClose.
Ф ну кц и в и е од п о т к с лю е у д щ и
й — AVIStreamGetFrameOpen, AVIStreamG etFrame И
я AVIStreamGetFrameOpen з ап раш и вае а и , есл и акт ов й и м с еят й ви д :
т едк о м п р е с о , октры вае
т е го
р лд я в ы бр ан н о г я н уф к ц и
. Дан а
о я и ме
т
fun ction AVIStreamG etFrameOpen(pStream: PAVIStream; pbmpWanted: P BitmapInfoH eader): PgetFrame
Н а ов дх е н фу к ц и я п р и н и м ае т с ю л уе д щ и е п а р м е ты , п рсеадтвл н ы е в ат б л . 4.12.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
аПр м е т
р
Оп и с а н
AVIStreamGetFrameOpenzyxwvutsrqp
4.12. ы Птер амр
а ц и а лб Т
е
pStream
е с Др к и по т
р по тк
pbmpWanted
аез к л т У е н лт ы ь
ь н а ру с т к й о в и р д ме ф а б уд е
т усанотвле
а у BITMAPINFOHEADER, о предляющ у т вывоад . Есл и з н е ча и е рван н п о ум оналчи ю .
ю ел а ж о N i l , фо рм а
т
с лЕ и ж е уазкт ь знеачи , равно е AVIGETFRAMEF_BESTDISPLAYFMT, т о б уд е т выб ра н нишачул и й фо рм ат , чт о сущесвтн о по вы с и т про и з в о д и н е л ть с . тЭ о про щ е , еч м ин ц лаиз я с ур т к ы BITMAPINFOHEADER, н о э т о о знаечт , тч о ва м неи зв снот , ока й фор м а т б уд е т по леуч н н а выохд е — о н опредлсит я теущк и м и н ас р о т й ма к и эрнак а и па нрот й киргуцаонф и ком юепрть а
П о сл е в ы п о л н ен и GetFrame, л и б ед н .
я н уф к ц и о N il, есл и со втюе у щ и
П о сл е с пу е ш н о г о сч и ыт в ан и к а д р п о тк а в вы бран о AVIStreamGetFrame, и м ею щ у
я AVIStreamGetFrameOpen воз вращ ае й едк о м п р е с о р ви ед
я о б ъ ек т м ф о р м ае т ю ю с луед щ и
. Дл
а GetFrame м ы м оже я эотг о н а м н ж ну й ВД И !
т о б ъ ек о н е бы л н ай
м п чо л и у т о в ы з в ат
т -
ь лю бо
й
ь н фу к ц и
ю
AVIStreamG etFrame(pgFrame: PgetF rame; lP o s: L o n gln t ) : LPVoid
В к а ч е св т л ен н ы
е п а р м е то е в таб л
аП р м е т pgFrame lPos
в н фу к ц и
я п р и н и м ае
т с ю л уе д щ и
а ц и а лб Т
4.13. ы Птер амр
е з н а ч ен и я
, п ресадтв
-
. 4.13.
р
Оп и с а н
е
е за л т к У
ь н а ек о б ъ т GetFrame, по елучн ы AVIStreamGetFrameOpen о Нм е
AVIStreamGetFrame
р фрейм
а (крда
)
й пр
и вы зо
е
186
л ав Г
П о сл е з а в ер ш ен и чи м в ы б р а н ы р а н е сщу есвту П р им е а и ч н З ам еи т м
4 zyxw
я р аб о т
й кад
ы н уф к ц и и н а в ы о дх е в п а р м ет е LPVoid м ы п оул р в н еоибдх м о м н а м форм еат , л и б о N il, есл и таког о кда .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA , тч о в с ма о м ла нч е п о е члн у г о др а к а и е д т ру с т к
BITMAPINFOHEADER, а уж
В аж н о й о с б е н н о сь т п о ч л е ун ы й к ад р е д бу и л и д о з акры ит я крад
ю работ т е й д св т и е л а с п ом щ ь
П о сл е работ ы с крадм т а GetFrame СЬ ПОМОЩ Ю и работ
и н жну н уф кц и
Дл
я дем о н сртац и
п р о ек т бр ан ы п р о ек т р аб о т р а нх е н и е по хд ров п р и м ер
, п о з в о ляю щ и й п р о с м ра ти в а т е р к ад ы в гр а ф и ч е с к и а н ам и бы л а п о а св т л е н ы с а дн н ы м и н фу к ц и я м и м о е дл т ь н ы х к р аод д бы л осблуов е н м н о ж в ес т , з адв ем ы х в р аз ли ч н ы е м ы п оасртли с ь дат
В ли ст н г е 4.7 сок ращ ен щ а я о тб р аз и т ь в ы б р ан ы т е image. П олн ы й и о н дс х ы к о м п а к- т и д с к е в калотг
ы дан н ы
е с ледо
м с ма
ы с фн у кц и е н от л ь к ю фн у кц и
и дан ы е
а
.
й AVistreamGetFrame явлсет я то о д о п о в тр н о г о вы з ов а фн у кц и и AVistreamGetFrameClose.
о н е з абы т ь освоб ид т ь з ан яыт и AVistreamGetFrameClose. х фн у кц и
й п расевдтля ь р к ад ы в и ео д , а й йа ф л фо р м а т а BMP. П р а з ачд а н е толь к о п ок аз т , а актж е р аз о бр ат ь в о п ро сы в п о кт а в расртовы й фа й л м воп рос в , св яз ан н ы х и н е р т н - е т фо м р у а х и к о н фе р н ц и ях ь н а н и х овте .
о п р а с е в тд л н а н уф к ц и й крад , з анд ы й в п ар м ет й к о д п р и м ер а в ы м о ж ет е Source\ Ch04\ Ex03.
е ррсеу
, ч т о и
ы о б ъ ке
м дем о н сртац и о н н ы а тк ж е с ро а х н я т ь ыв и р а з р а б ок т е а дн н о г ь ч и еалт ю п ри н ц и п , св яз ан н ы е с со . Т ако й п ракит чески х с сроахн ен и е м кда . В дан о
я GrabFrameAVi, п оз в ляю е iFrameNumber в объек е н ай т и н а п р и л а г ем о
й о ы й м м
| zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Л ист н г 4.7. От обраежни е кард а в оетбкъ е image
Procedure TForml.G rabFrameAVi(AVIStream : PAVIStream; iFrameNumber: I n t e ge r ) ; var gapgf : PGETFRAME; lp bi : PBITMAPINFOHEADER; b i t s : PChar;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED hBmp
: HBITMAP;
TmpBmp : TBitmap; DC_Handle : HDC; begin // Подг товк
а к декомпрес и
и видеока р
а
gapgf := AVIStreamGetFrameOpen(AVIStream, nil);
Video for Windows - и нт е й рс ф
для
р аб о т ы
с виеод
187zyxwvuts
IIzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Че а т и м фй е р м // Фи ц к н у я AVIStreamGetFrame ве а щ р в з о т ае р д с // д гон аворис ерпмоке о вр д а к о е д и а lpbi := AVIStreamGetFrame(gapgf, iFrameNumber); // Се а д з о м Bitmap TmpBmp := TBitmap.Create; TmpBmp.Height := lpbi.biHeight; TmpBnip. Width := lpbi.biWidth; // Ми с а в бв о т й а ; си щ а ж р е д о х ны н ь л а ч е ды н а е рг о в р т с а о ии н е ж а р б о з bits := Pointer(Integer(lpbi) + SizeOf(TBITMAPINFOHEADER)); я
// Се а д з о м кс к е т н о т ув т с й о р т с а де л п с и я DC_Handle := CreateDC('Display', nil, nil,zyxwvutsrqponmlkjihgfedcbaZYXWVUTS nil); try // Се а д з о м а- о н т ма ир с п в а з е н е ро в р т с а е ии н е ж а р б о з е (DIB) hBmp := CreateDIBitmap(DC_Handle, /I Кс к е т н о т ув т с й о р т с а lpbiA, // Ул е т а з к ь н а КД А Р CBM_INIT, // Фг а л , уй и щ ю а в ы з а к , чт о дл я // ии ц а з и л а и ц н и // рг о в р т с а о ии н е ж а р б о з я // пс т ю я н е м и р я ды н а е // lpbi и bits. bits,
// Ул е т а з к ь н а ми с а в бв о т й а // си щ а ж р е д о х // ны н ь л а ч е ды н а е рг о в р т с а // ии н е ж а р б о з я PBITMAPINFO(lpbi)Л , // Ул е т а з к ь н а ср у т к у р т // BitMapInfo, ка р о т я ое а в ы с и п // рр е м з а ы и фа м р о т пи н е л в а т с д е р // цт е в а в мв и с а е bits DIB_RGB_COLORS); // Уе а в и л в а н т с м яы н в
finally DeleteDC(DC_Handle) ; end; TmpBmp.Handle := hBmp; // Зе а в ы р к а м фй е р м AVIStreamGetFrameClose(gapgf); // Пе а в ы з а к о м ии н е ж а р б о з е Image.Picture.Assign(TmpBmp); // Ое а щ и ч м пт я м а ь TmpBmp.Free ; end;
, о у т я е цт е в
а
188
л ав Г
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е кардо в в В т р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
*f и ен а р х о С
ы П6УЛ
Л Е и Ф л мь
:
гА е н
102д о л м а ти н ц а . а т п о б р анчы а В м хсельи нг
о-т К т ду К П о с л е з а в рт П о с л е з а в рт лФ и н с т о у н
о та к о а при во дя
^ м ц е р м о н и ям _ТЬ
Ш zyxwv
_ •
е Wedding
й ж е к а к Tbi_Sorneone Like You avi т м е чт ы (DVDRip).avi af a v а (DVDRipl_P 4 ' а (DVDRipl_part2.avi ы 2.avi
По з и ц и я ь Фай
Ри с
П Э48 5 frame ( 0 0 ча
с 13 м и
н 32 с е
: .56846 frames [ 00 ча
с 33 м и
н 30 с е к
к J о р н С аи х т
. 4.2. Рбаот
т р або т
;
л Врем
я п о т о к е
а с крмда
и (с орнеахи
ы е мд о н с р т а ц и о н о
е н ы де о л ь т
й п р о гам
х крдоа
ь ка д
р
)
в в форм а
ы в ы м о ж ет
т BMP)
е в иу е тд
ь н а
. 4.2.
Р а б от С о рх а н е и
а с ка рд м и
. е ВМ Р- йл о фа
Он д о й и з ч аст о в р с те ч а ю щ и с х з а чд а с о з а дн и я AVI- йаф л а п ес т ь р к ад ы (з адн н ы е в фо р м а т в св о ю о ч е р ьд , н ж у о з ап и сат п р и м ен с яет я в р аз ли ч н ы х с и с е тм а п р о г ам х ид з а й н а . В эо т м раз елд и з р аз н ы х и з о б р а ж ен и й , и м ею щ и ц ва е т . Так я п о с а тн о в к а з а чд бо ле е допсутн ы м л д я п о н и м ан и я н ы й п ри м е р легк о м ож н о бед у И а тк (п сотуй н фу к ц и
ЕШШ
й OKeaH.avi
. avi
О тк р ы т
Р ез л ь а у т ри с
1 б - 06- 2004\ во Жи
4
, п оряд
в в AVI- орм ф а
т
я з ад о крадм
ч п р и п р о г ам и р о в ан и и VFW явслет я . З ачд а фо р м л и у с е т р я п р и м ер н о так : е BMP и л и ген ери емуы е н а э к р а н е) , и х , ь з ай ф л AVI. О ч ен ь ч аст о а дн а я о п ер а ц и я х п р о еки т р о в а н и я и ан и м ац и , а атк ж е в а е м ы раз бер м сп о с б соз анд и я AVI- йафл х оид н а к о в у ю ш ир н у , вы сот у и б и лг у н у и п о з в о ли т п у р о си т ь м е р а ти л и седлат ь ег о . Онд ак о п р и н еб о л ь ш о м ж ел а н и и п ри венд т п одгн ат ь п о д сво и н жыду .
к дей всти й п р и м ер н о сюлеуд щ и й : сн ач л а нжу о с о з а дт ь н овы й ) айф л AVI. К а к м ы ж у е раз би рали , селдат ь э т о н ес л о ж н о , и сп оль з у я ю AviFiieOpen с флагм и OF_CREATE и OF__WRITE:zyxwvutsrqponmlkjihgfed
AVIFileOpen(tekFile, PChar(ExtractFilePath(Paramstr(0))+'\Demo.AVI'), OF CREATE or OF WRITE, nil);
Video for WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF - и нт е й рс ф для р аб о т ы с виеод 189 zyxwvutsrq
е п о сл е соз адн и я фа й л а AVI — с о з адн и е п о тк а с м в работ и AviF ileCreatestream. Дан а я н уф к ц и я с о з ад е т н овы й п о м фа й л е и в о з в р ащ ае т к уа з е л т ь и н ер тф й с а п о тк а я и м е т сюлеуд щ и й ви д :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO
С ю л уе д щ и п ом щ ь
м ш а ог ю н уф к ц и о т к в щ с у е с вю т у щ е pstream . Ф н у к ц и
function AVIFileCreateStream(pFile: PAVIFile; var pStream: PAVIStream; var asilnfo: TAVIStreamlnfo): Longlnt
П а р м ет
ы фн у кц и
и п расветдлн
. 4.14.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ
ы в атб л аТ б л и ц
а Пр м е т
р
О п и с а ни е с Д рк и п о т
р AVI- йл фа
pStream
е с р Д к и по т
р по тк
asiln f o
е за л т к У
Ср к у т ат б л
а а
ь н а суртк о но в м п ое кт . ан Д б ыт ь иниц лазировна
аТ б л и ц е
fccType
у TAVIStreamlnfo, сащ о держу я сру тк а п ер д вы зо а
а п ер м н а я pstream куаз ы в ае с о з а нд и я с ж о а тг о п о кт а , соедрж ащ ег з ап и с и ег о в фай л . Н а эот м м ест , ч т о ви еодп т к в фай л е м ож е й с о в т юе у щ и м к оед м ь п о су т а ю щ и е к аи р т н к и с п ом щ ь ь ря д опредл н н ы х едй с в т и й ю и н и ц и али з ац и ю э к з ем п ляр а п р не д а з н а ч е н а дл я з анд и к в и едо , та к и иаду о ) . С леуд т омт еи ьт а кт ж е и в фн у кц и и AVisave, к отру я н а н е й п орд бн е .
а TAVicompressOptions и м е . 4.15.
ло П
AviFileCreatestream zyxwvutsr
е
p File
Т еп р ь , кодг ват ь е е лд я м ац и ю лд я Д ел о в то м п р ес и р о в а н н ы VFW сж и м ат нжу о в ы п о лн и т н и т ь п ер в и ч н у Д ан н а я р с к ут п о тк в (к а п о л ь зс е т у я э о тм у о с а тн о в и м с
4.14. Пар м е т р ы
ю и н до лж
а
т н а п окт , м ы може м и сп о ль з о о в с ю н е о би дх м у ю и н фо р е ос т и т о ас н т о в и ь т с я п о рд б н е . т р а нх и ь т с я в сжоат м ви ед , ком . Д л я от г о чотб ы ад т ь к о м а н д у ю с о в т ес ю у щ е г о к о ед а , . С н ач л а н а м н жу о вы п ол а сркут ы TAVicompressOptions. я оп ц и й сжиат я м л ь у и т м еи д й н ы х , ч т о дан н а я сркту а и с ю м ы расм орит м ад л е . П о -
т с ю л уе д щ и
е п о ля
4.15. ПЛО Я
с т ртку р ы
о и та к И д е н ф р и вд а по так с л е д ую щ и е значе и я : StreamtypeAUDIO — аидуоп кт
. Дано
О п и с а ни
ю ио рмнф аци м цнки фу
, п ресадтв л н н ы
е в
TAVicompressOptions
е е по л
т п р и н м та
;
StreamtypeVIDEO — видеоп кт
;
StreamtypeM IDI — м нызуьлак
й MIDI- опкт
StreamtypeTEXT — теск
е ме ож
т
;
ь
л ав Г
190zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
аб Т л и ц а ло П
4
zyxw
4.15 (пернио дл)ж
Оп и с а н е е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA f c c Hand ler
на о Д
е по л е п р е дн за ч т о к де р и ат я с ж (FourCC). пиСс о к о и т а р к д е н тф аб т л . 4.7 з д еа
dwKeyFrameEvery
ан о Д
е по л
е о п р е д ля и р д а м к и / б м о ла к и о п р и в ы с а л е тн о и д ан ы й а фл я лю е к чв ы
лю ке ч в ы м ок т ль с лЕ с и ае ч т d wQualit y
dwBytesPerSecond
е да З ни м т а с з е ут о рк С с т в ы ед л н мы
ь о км п р е с и и видеонаых е о т 0 д о 1000. Дл
я в и де о п а тк
. оПл м о кд в п р е сд в а л т
. енЗчаи
. оПл я ау д и о п т к
и в ы с а л е нт о
м флга
и ком прес и
е з ад е я 1 с еункд е д на о г о по л
н в
е ме о ж т при в н е ис поьл
т о к ли е сч в т ы п о та к я и с п з о е у т ль
о б й ао т в , а т к нзаыве я к о тл ь
г а зу к ы в е
т о км п р е с о р у м (interleaved) ыд жа к
AVICOMPRESSF DATARATE — заыкуве т окм п р ес о р у в и ед о п т к е до лж н б ыт ь а сж т с з ад н о dwBytesPerSecond сокр ь т ю пер даич ;
ь н а рм фо а н б ыт ь н а ру с т к ь н а сру тк зам Р е мн о ж
р с руткы о поичулт
, о
, уазкн о ь с пом ощ ь
. л Д я дуаио ны х а ез у к л т у WAVEFORMATEX, а дл я виед у BITMAPINFOHEADER й в lpFormat. зма Р е и sizeOf
, о
, чт о эо т
т д на ы х
ю фуцник
, е
т
й в п р ма е т
AVICOMPRESSF V A L I D — еноч ь и ен рт с н ы й га фл , заыкувю щ и й н а от , тч о зпао лне а я с ур т к а им е т но ы р к т е и эо т т а фл г ус ан о т в л е н , т о AVl Fi l e ис пзеуоьл д ан ы е . с л Е д ан ы е ру с т к ы д л я у с ан о т в к и с епт н и и ат с ж я дл ци и AVlSaveOptions. с лЕ и а фл г н е у с а н то в л е н , ноектры п ра м р е т ы о ек д р а м о уг т б ыт ь в ы с а л ет н ы о ав т м и е ат ч с к (п о му онаилчю )
cbFormat
-
:
AVICOMPRESSF KEYFRAMES — а фл г аз ук ы в е т о мк п р е с о р у т ч о э о т т в и ед о п т к е до лж н б ыт ь с юл е в ч к ы м и рд а к м и / б м ао л к и , с ледующ и м и ер ч з о п р ед л н о е о и кл е с ч в т р д а о кв / б о л в к , знады х в dwKeyFrameEvery;
е за л т к У е до лж е з а л т ку
-
е AVICOMPRESSF DATARATE
AVICOMPRESSF IN TERLEAVE— а фл тч о по т к е до лж н б ыт ь е ч р с р то н ч ы dwInterleaveEvery квор д а ;
lpFormat
е м
я х д л я р х на е и й data rate. енЗчаи
л аг Ф
о дл й ы е ч т р б х в ук е н ы в о к де р
т м с ак и м н ы ал ь й п ер и о д д м еж у . Знечаи е по л я и с п з е о у т ьл я м га фл е AVICOMPRESSF KEYFRAMES. г н е в ы с а л те н , т о ды жак й бол к н да ы х м
ь п е р д иа ч
пр
dwFlags
т сеп тн ь з ен ча и
о ок т ль , занкыу
р с ур т к
е е т я кн фу
е и ь о — ы
Video for Windows - и нтей рс ф
для
р аб о т ы
191zyxwvutsrqp
с виеод
аТ б л и ц
zyxwvutsrqpo
4.15 (оокнчаи е)
е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Оп и с а н е
ол П
ipParms
оП л е и с п о з уе л ь т д л я р х на е и рг м а м и с т
cbParms
з ма Р е
dwInterleaveEvery
о Пл д ан ы м
я дл я о п р едлн ы т резон
у не
р днаы
а ис пзольвта
, а к о п о ат к
и п ер во г м пр
х цел ь дан о
к са ч т . Эт
и усанотвлен о
о е ч р д о в ат о пол
ь дан ы е и с п о з еу л т ь
Ь о б н о в л е н н у
Ф ун к ц и
ю с т р ук т ур
я AvisaveOption s и м е
о . Про
-
е п о кт я окм п р ес о
о п ер адл ь н е й ш е
й ви д
-
а и и н и ц и али з и ро в ан а д иэ т я
и и м п р ео д с а т в и т с ег а
,
м м ы н ем н о г й р або т ы ад н оч ен ь даж е п о лез н а вы бор а к о е др а сжа ь п о ль з о в а о с о б вт ен н ы м и на п р о г ам и с т м ож е
у TAViCompressOptions И ИТ Ж Л О Д О р п т с л е д ую щ и
а с
е AVICOM PRESSF INTERLEAVEzyxwvutsrqponml
м флга
а TAViCompressOptions соз адн П осл е о т г о к а к р ксу т м ож н о п р и п су т а ь к работ е с о сж ы ат м п о тк м . Н о с а тн о в и м с я н а н фу к ц и и AvisaveOptions. отХ я лд я н а я н фу к ц и я н е важ н а , н о дл я п ракит ч еск о г о п ри м ен ен и Д ел о в том , ч т о он а п оз воляе т в ы в ес т и о к н о н асртой к ти я . Т о есьт , и сп оль з у я адн н у ю н фу к ц и ю , м ы м оже е т л ю с а м о с т ея л ь н о в ы бр ат ь нж у ы й ем у к о е д к рс т о й к а м и с ж аи т я . П осл е в ы бо р а п о л ь з о в еа л т м к ое д Т ЛУЧИ О П
й и предназ ч м д на ы х е пол е
х окм п р ес о р
х в IpParms
е о п р е д ля т
ро
я рв н е т у и
о . т
Ь р а б о ту
.
:
fu n ct io n AVISaveOptions(hP arent: HWnd; u iF la gs: Word; n Stream s: I n t e ge r ; var pStream : PAVIStream; var pacoOption s: PAVICompressOptions): WordBool
В к а ч е св т н ы е в та б л
е а дн н ы х н уф к ц и . 4.16.
я п ри н и м ае
т слюеуд щ и
аТ б л и ц аП р м е т
р
О п и с а ни
, п расевдтлн
4.16. Пар м е т р ы
-
AvisaveOptions
е
hParent
э Хнд
uiFlags
л аФ г и , насрит вающ и е ди ало г во н ы с л е д ую щ и е флаги : ICMF_CHOOSE_KEYFRAME — позаыкве в д и ал о г в о м онке ; ICMF_CHOOSE_DATARATE — поазкыве
л ро диселтькг
о онк
а
ICM F CHOOSE PREVIEW— поазкы ве
с м ор т
е п а р м еты
а
е он к
о вы б о р
а и ат я с ж
т о к ли е сч в т
о ю л е в ч ык
т с окр с т т онк
ь пер дча о п р е д в а н и о л ьт г
. пОредл
х крдао
в
и (data rate); о про
-
192
л ав Г
4.16 (оокнчаи е)
аТ б л и ц аПр м е т
р
О п и с а ни
nStreams
п О р е д ля р ва н о
т о к ли е сч в т
о п о ктв
р покт
pacoOptions
е л за т к У
ь н а сру тк
я верн е я р аб о т
AVISaveOptions, у З Ь Л ОП СИ
П о сл к уа з е л т п о кт а п ч ои лу т
. бОынч
о в ы с а л яте
я з н е ач и
,
е 1
е с Др к и по т
е фн у кц и е з а в ер ш ен и
zyx
е
pStream
Н а в ы о дх О К . П осл
4 zyx zyxw
а
у TAVlCompressOptionszyxwvutsrqponmlkjihgfedcbaZY
т True, есл и в ди алогв ы н е з ь да б т у
Я ф ун к ц и
м окн
е бед у
е о с в б о ид т
т н аж т ь р е с уы
а кн оп к , з ан ыят
а е
ю AVISaveOptionsF ree.
е с а ту н о в к
и оп ц и й сж иат я мл ь и у т е д й н ы х п о тк в нж у о п ч о ил у т ь ь н а с ж ыат й п о кт , котры й , в сво ю о ч ер ьд , соз ад н о т н е с ж о а гт о . Т о ест ь факит ч еск и н а м нжу о и н и ц и али з и р о в ат ь с ж ы ат й по т к и ь к у а з е тл ь н а н е ог . Делсат я эт о с п ом щ ь ю н уф к ц и и AVIMakeCompressedStream, и м е ю щ е й ИД В :zyxwvutsrqponmlkjihgfedcbaZYXWVUT function AVIMakeCompressedStream(var pCompressed: PAVIStream; pSource: PAVIStream; var acoOptions: TAVlCompressOptions; var clsidHandler: TClsID): Longlnt
П а р м ет
ы н фу к ц и
и п расветдлн
ы в таб л аТ б л и ц
аПр м е т
р
4.17. Пар м ет р ы
Оп и с а н
е
pCompressed
е за л т к У
ь н а дес рки пот
pSource
е с р Д к и по т
р ногта ес ж
acoOptions
е л за т к У
ь н а р у тс к я усанотвк
ун ю дл
clsidHandler
П р и с пу еш н о н а ед с к р и п о т с ж ыа т е в и е ода н ы
е л з та к У
и н уф к ц и о п о тк а е в ф о р м еа т
AVlMakeCompressedStream
р согта ж о покт
ь н а ксал
м з а в ер ш ен и р с ж ао т г
. 4.17.
о покт
а
а у TAVlCompressOptions, преднзач й си та ж я
и опци
с TClsid , ис пзоеумль ы
и п ерм н а . П отк
, в сво , з анд о
й дл
я с озндаи
я покт
а
я pCompressed едбу т к уа з ы в а т ь ю о ч ер ьд , см о ж е т з ап и сы в ат ь м р а мк у с т и TAVistreaminfo и
TAVlCompressOptions.
П о с лн е д и н овк и м ею щ е
м ш ао г а фо р м а т
м п ер а п о кт а
й с ю л еу д щ и
. Деласт й ви д
д н е п о с р ев д т н о я э т о с п ом щ ь :
й з ап и сь ю н уф к ц и
ю к р аод
в яв с л е т я а ст у и AvistreamSetFormat,
Video for Windows — инте й рс ф
для
работы
с виеод
zyxwvutsrqponmlkjihgfedcbaZYXWVUTS 193zyxwvut
function AVIStreamSetFormat(pStream: PAVIStream; lPos: Longlnt; lpFormat: LPVoid;
c b F o m a t : Longlnt) : LonglntzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM
Ф н у кц и
я и ме
т юс л у е д щ и
е п ар м еты
, п расевдтлн ы
р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
аП р м е т pStream
е с р Д к и по т п о кт
lPos
cbFormat
е в ы п о лн е и . З ап и с
и м ею щ е
я в по етк в в код жа
е за л т к У же
от к
р п о а тк
. Та
м с а л чу
е д е с р к и по т
к в нша е
й рм фо а н н а сру тк
р с ру т кы с ур т к
к ка , усанвтли ае
м кдрае
ь н а новы ь у с ан о т в л е
н быт зам Р е м ер
. В нша е
р ком прес и ро ван г
о
а
оП з и ц о кн а
lpFormat
П о сл
AVistreamSetForma t zyxwvutsrq
4.18. Пар м е т р ы
аТ б л и ц
. 4.18.zyxwvutsrqponmlkji
е в таб л
, опис ывюащ е о узнта
ы мн ож
ь к ар д о
е рм фо а
т оп к т , рвано
а б уд е
й рм фо ат
, зднаы
ь д о л
й в lpFormat. Рза и SizeOf
ю фуцнки
й м ы може я с п ом щ ь
т о ди
м н ач т ю н фу к ц и
ь з ап и с
-
е 0
. Дл я виедонаы х а з у к е тл у BITM APINFOHEADER
ь с пом ощ ь
я в с е х иэ т х н у ф к ц и в о щ с у е св т л я й ви д :
й ю с луед щ и
т п о ат к
м с а л чу м з н е ач и
-
ь к ар д о в в по и AVistreamWrite,
function AVistreamWrite(pStream: PAVIStream; IStart,
.
- -
ISamples: Longlnt; lpBuffer: LPVoid; cbBuffer: Longlnt; dwFlags: DWord; plSampWritten, plBytesWritten: PLonglnt): Longlnt
Ф н у кц и
я и ме
т юс л у е д щ и
е п ар м еты
, п рсаедвтлн ы
е в таб л
аТ б л и ц аП р м е т
р
pStream
О п и с а ни е с Др к и по т в на о г
ISt ar t
а ро т С в ы
ISamples
о ли К е чс в т
7 З ак
. 1325
4.19. Пар м е т р ы
. 4.19. AVistreamWri te
е р п о ат к о покт
. В нша е
м с а л чу
е д е с р к и по т
р ком прес и ро
а й а д кр о рд а о к
, с корт г в дл
о по й де я зпаис
и
т запи с
ь
-
4 zyxwv
л ав Г
194
аТ б л и ц
zyxwvu
4. 19 (оокнчаи е)
О п и с а ни е р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
а Пр м е т
lpBuffer
е за л т к У
ь н а бе уф де о ар к а в те к о б ъ б о и тв е и е н з о б р жа с он у к (DIB). детСла Bitmap.
р с дан ы м и дл я з ап и с и е Bitmap н жун о п р и н уд е л ьт е в апнраот- незваис м ы ь э т о нм ож о м ое тд
Т о ес т
е l p B u f f e r с леду
ь в прам рет
. рП
и перчад
е ви
-
о п ер в с т
и
й р са о т в ы й ри м ScanLine салк а
т аз у к т
ь
Bitmap.ScanLine[ Bitmap.Height- 1] cbBuffer
зам Р е р бер фу а с дан ы м и . Пр и перчад Bitmap азукы всет я р аз м е р , Bit m ap . Heig ht * ко-л в о б йат , выедлн
р в ан ы
е в и д е о ар к а в отек б ъ й Bit m ap .Wid t h х д л я р х на е и я ца в е т
с лЕ и е ин з о б р ж а е предсвалтн о в 8- нобит м цвет н нж у о н а 1 б ай т , ес л и в 16- онбит м — н а 2, ес л н а 3 и ес л и в 32- бноит м цвет , — с о всет н о dwFlags
лг а Ф
, азукывющ и
з ен ча и р/да к бол plSampWritten plBytesWritten
е л за т к У л ушч
е су на о т в и
е за л т к У л ушч
е су на о т в и
ь н а о к ли е сч в т
Л ист ин
й п ри м е н в ли ст н г г 4.8. Прим е
х а кд р о в
т п р и н м та , чт о дан ы
. П о му ноиачл
ь й ю
о зпа и с н ы х б ай о т в . П о му оналич ю ь в N i lzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON
, з ап и сы ваю щ и м к о м п а к- т и д с к т п р о см т л бы л сген ери ова
р н фу к ц и е 4.8. р за пис
о зпа и с н ы
. е М ож е н а от
ь м —
ь в N i l ь н а о к ли е сч в т
Д е м о н ср т а ц и о н ы й п р и м ер ж ет е н йа т и н а п ри лагем о ри с . 4.3 и з ображ е н р ез л ь а у т й аф й р е Light Alloy. Дан ы С о к р а щ ен ы п а р с в ет д л
й с о ня т и е р/да к баолк е A V I I F KEYFRAME, заыкувющ е к явслеят я юл е в ч к ы м
, т о умит нож и в 24- бноит , н а 4
е * .
и файло
й айф л е в к а л от г а с ге н е р и о в а н о г
ы BMP в AVI- айф л , в ы мо е Source\ Ch04\ Ex04. Н а о фа й л а AVI в п ле н с чоаст й 1 кад р в снеку д .
, з ап и сы ваю щ е
й аф й л
ы BMP в AVI- айф л
в BMP в AVI
procedure TF orml.BitBtnlClick(Sender: TObject); varzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA bmiHeader : TBitmapInfoHeader; // ВМР- загол в к AVIStreamlnfo : TAVIStreamlnfo; CompOptions : TAVICompressOptions; PCompOptions : PAVICompressOptions;
,
Video for Windows — и нтей рс ф
A
clsicfflandler :
для
р аб о т ы
с виеод
195zyxwv
TC lsID ;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED
FName : String; Bitmap : TBitmap; begin // Иниц ализаци
я AVIFile.
AVIFilelnit; // Создае
м фай
л
AVIFileOpenttekFile, PChar(ExtractFilePath(Paramstr(0))+'\Demo.AVI'), OF_CREATE or OF_WRITE, nil); // Обнуле и
е
FillChar(bmiHeader,SizeOf(TBitmapInfoHeader), 0 ) ; with bmiHeader do // BITMAPINFOHEADER begin biSize
:= SizeOf(TBitmapInfoHeader);
biwidth
:= 480;
biHeight
:= 352;
biplanes
:= 1;
// Разреш ни // Числ // цел вог
biBitCount
е файл о плоск те
р одн г
о кадр
й дл
о устройства
:= 24;
// Числ
biCompression:= BI_RGB; // Разме
а
а в пиксела
. о бито
// Ти
я
в н а пиксел
п уплотне и
. я
х
biSizelmage := (((biWidth * biBitCount) + 31) div 32) * 4 * biHeight; end; // Обнуле и
е
FillChar(AVIStreamlnfо,SizeOf(AVIStreamlnfо),0) // Загол в
к создав емог
о пот к
;
а
with AVIStreamlnfo do begin dwSuggestedBufferSize:=bmiHeader.biSi zelmage; fccType
:= streamtypeVIDEO;
fccHandler := GenerateFourCC('DIVX 1 ); // FourCC идентиф като dwFlags dwScale dwRate dwStart
р коде
:= 0; := 1;
// кадро
в в секунд
у = dwRate / dwScale
: = SpinEditFrame.Value; := 0;
dwLength := 1; dwSampleSize:= GenerateFourCC('CVID'); // Видеоп т dwSuggestedBufferSize:=bmiHeader.biSizelmage; // Прямоуг льни
к дл
я пот к
а
rectFrame.Right := bmiHeader.biWidth;
к
а
196
Глав
rectFrame.Bottom := bmiHeader.biHeight; end; // Создае
м пот
к
AVIFileCreateStream(TekFile,TekAVIStream,AVIStreamInfo) ; // Подг тавли ае
м информаци
// Обнуле и
ю о компрес ор
е
е
FillChar (CompOptions, SizeOf (CompOptions) , 0) ; with CompOptions do // TAVICompressOptions begin fccType
: = AVIStreamlnfo.fccType; // Т и
fccHandler
п
:= AVIStreamlnfo.fccHandler; // Коде
dwKeyFrameEvery dwQuality
:= 7500;
dwFlags
р
:= SpinEditKeyFrames.Value; // Ключ.кадр //0- 10000 качеств
о сжати
ы
я
:= AVICOMPRESSF_KEYFRAMES or AVICOMPRESSF_DATARATE ;
lpFormat
:= SbmiHeader;
cbFormat
:= SizeOf(TBitmapInfoHeader);
dwBytesPerSecond := 1024 * 100; // Скор ст
ь пер дач
и
IF CheckBoxCompressOptions.Checked Then begin // Показывае
м диало
// Указ тел
г
ь н а TAVICompressOptions
PCompOptions :=@CompOptions; dwFlags
:=dwFlags or AVICOMPRESSF_VALID;
if not AVISaveOptions(Application.Handle, ICMF_CHOOSE_KEYFRAME or ICMF_CHOOSE_DATARATE, 1, TekAVIStream, PCompOptions) then begin // Коде
к н е выбра
н
end; end; end; // Обнуляе
м clsidHandler
clsidHandler:=nil; // Первична
я иниц ализаци
я и создани
е сжатог
о пот к
а
AVIMakeCompressedStream(CompStream,tekAVIStream,CompOptions, clsidHandler A );
4zyxw
Video for Windows - интерфйс
для
работы
с видео
197
I/zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA У с т а н в л и а е м настройк и формат а д л я пот к а AVIStreamSetFormat(CompStream,0,@bmiHeader,SizeOf(TBitmapInfoHeader)); // Счет и
к количеств
а кадро
в
FramePos : = 0; // З а п и с ы в а е
м 3 кадр
а
Bitmap := TBitmap.Create; FName := ExtractFilePath(Paramstr(0)) + '01.bmp'; Bitmap.LoadFromFile( FName ) ; WriteFrame(Bitmap); FName := ExtractFilePath(Paramstr(0)) + '02.bmp'; Bitmap.LoadFromFile( FName ) ; WriteFrame(Bitmap); FName := ExtractFilePath(Paramstr(0)) + '03.bmp 1 ; Bitmap.LoadFromFile( FName ) ; WriteFrame(Bitmap); Bitmap.Free; IF CheckBoxCompressOptions.Checked Then // Освоб ждае
т ресу ы
, связан ы
е с AVISaveOptons
AVISaveOptionsFree(1,PCompOptions); // Закрыти
е пот к
а и файл
а
AVIStreamRelease(CompStream); AVIStreamRelease(tekAVIStream); AVIFileRelease(TekFile); // Закрыти
е API
AVIFileExit; ShowMessage('фай
л AVI- фай
л сген ри ова
н ! ' ) ;
end; function TForml.WriteFrame(Bitmap: Graphics.TBitmap): Integer; var Sze: integer; begin Bitmap.PixelFormat := pf24Bit; / / В завис мо т // В дан о // устан вли аетс
и о т глубин м п р и м е р
е ко я равны
ы цвет д оставле м 24 бита
case Bitmap.PixelFormat of pf8bit : Sze := 1;
// Глубин а выставляютс
н дл
я коэф иц ент я изучения
м
а цвет
а ы
, т . к . Bitmap.PixelFormat
Глав
198
4zyxw
p fl6b it : Sze := 2; p f24bit : Sze := 3; p f32bit : Sze := 4; end;
Result:= AVIStreamWrite(CompStream, Frame Pos, zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC
1, zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Bitmap.ScanLine[Bitmap.Height- 1], // По м я р й ду т с о п к aDIB р Bitmap.Width * Bitmap.Height * Sze, // Ре м з а 0, nil, nil); // Уе а в и ч л е в м и ч т е ч с к о р д а к в Inc(FramePos); end;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
я о фа й л
И н оф р м а ц и Р а с п о л е о н жи Фо р м а
т Фай л
Ра з м е
р Фай л
И
AVI 0.105 М Ь (1 1 0 59 2 bytes)
а
3 с е ь
И с п о л н и те л
к (0:00:03.000)
ь
Наз в ан и
е
Demo иТ
к
лД и т е л ьн о с т
к FourCC
Ра зм е р
ы изоб ре анж и а ка д р о
п веид
3 с е ь
Ко д е Ч а с то
ВЕ Г а
л Д и т е л ьн о с т
По т
zyxwvutsrqponmlkjihgfedcbaZYXWVUTS Е е
е
о к (0:00:03.000)
DX5 0 я в
4 8 0 x3 5 2 ( 1 5 : 1 1 ) 1.000 Г ц
(Ж Ри с
С о хр а н е и
. 4.3. Прос м от
е пот к
В а дн о м р а з ед л е м ы раск ж ем в и ое д - и л и идау о ф й л , з агруи о нд а к о п ер д тем , ка к м ы п ерй д ж и м м ае р т и а л , п раседвтлн ы
р с генри овна г
в в ы нелтьдо
о AVI- йл фа
х а йлф а
а
х
, каи м и сп ос бам и м ож н о с о з адв т ь н овы в в н ег о п от к и з сщу есвюту щ ег о AVI- айф л м н е п о с р ев д т н о к тем е р а з ед л а , п ыод т й в п рыед щ у и х р а з е дл а х . оХр ш и м п р и м ер о
й , м
-
Video for WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — и нт е й рс ф для работы с виеод 199 zyxwvuts
з а к р еп л н и ек т
я м е р а ти л
а м ож е
, с п рыед остри е
т сж л уи т о в ы сейча
й к о тр г
ь н еб о л ь ш о с п о з н ак о м и етсь
й ед м о н с р т а ц и о н н ы
й про
-
.
В он д о м н еб о л ь ш о м п р о ек т е н а м п он оадби лос ь с о з а дт ь б а з у адн н ы х , корта я е "с л еп к и " ви еод , взыят е с сщу есвюту щ ег о в и е од м а т р ах н и л а б ы н еболь ш и р и ал . Т о ест ь требо в ало с ь с о з адт ь н еч т о врод е баз ы дан н ы х п р ве д а и е л т ь н о г о п р о см рт а (preview) н ак о п лен о г о в и е од м а р т и а л . В н аш е м п р о ек т е к од л ж е н бы т ь р ав е н 1 м и н т у е ви ед о бе з п р еп д о л а г о с ь , ч т о preview- скоу з вк у о г о с о п р о в ж е дн и я . И сп оль з у я м еа р т и а л ы п р ые д щ у и х р а з е дл о в , в ы с ам и л егк о с м о ж ет е с о з а тд ь а тк о й п р о ек т . Онд ак о дл я от г , очбт ы п у р о сит ь з а чд у , м ы соз адл и е дм о н с р т а ц и о н н ы й п р и м ер , сроахн яю щ и й в ы бр ан ы й с ок у к в и едо п о тк а в оелдьт н ы й ай ф л AVI. Н а ри с с о р ха н я ю щ е г
. 4.4 в ы м ож ет о с ко у
е в иу е тд
ь р ез л ь уа т
к ви ед
т р аб о т м AVI- афй ле
о в оелдьт н о
ы п р и м ер а , вы рез аю щ ег о и .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA м и Л ль Ф Е ы new\ 15- 6О - 2О04\Кд у а п р и в о дя т м е тч ы (UVDRip) avi ~3f
3 е : [dsla]
102 до лм аит м ц т п о б р а чнь Ва н хесль н г. аВ о з в р ащ е н и иЖ в о й о ке ан а
ге А н
:лр те аэ
оП с л е з а в т р Ф пм у мот с
а avi 1 м це р е м о ни ям . !- » Wedding pfc л е (OVDRip).av м | И Я1 Г а !Ј а (DVDRp] _pait2 avi ы 2. а \
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
а Нч л
.
О т р ык
ь Фай
И со х н д ы к а тл о г
П ри ч е к о м п р ес о з в о л яе ков
а | оне К
: л
|
м е рб
иР с
П о сл Н е с м ор т отс п о с б ен щу
о Ф ра игвм т
я пе ок т
ц Ф р у м е н т
. 4.4. Рбаот
а про г ам м ы
ю сорхан и т м п р
я п ер й д и п р и в е нд о г о VFW п роедсатвляе ь сщу есвюту щ и е п о тк е (з ап и си о п о тк ь п е р с ж аи т х в AVI- афй ле
1 се
е н ай т
е неодсакт
и вы гзрук р дл я кажодг т а тк ж е в ы п о л н ят
н 17 cm \ "
) п отк а в оедлть н о сит
«и н 17 с е г
к ) • 4 1 550 Irames ( 0 0 ча
р№П »прсм >«от
р
й ксуо
к виед
и н а п ри лагем о
м н е п о с р ев д т н о п ри м ера т ж у е готву и в оелдьтн о
с 27 м и _ о С яр ' т н а к
к )
, вырезюащ е
о п о ус т л е н и
я н а вс , онд ак
, п рсаедвтлн ы
с 24 м и
; nЈ3043fi«net(0i 4 са ч 8м4 ны
й ко д п ри м ер а в ы см ож ет е Source\ Ch04\ Ex05. е н еб о л ь ш о г
а | ;%448Ь
;Э6 44 8 tiame" f 00 ча
н 4 2 с е к
}
ь Фр а г м
*
о
м к о м п а к- т и д с к
е в
о к тем е р а з е лд й к о д вп олн е рабо ю нфу к ц и ю , п оз воляю м фай ле .
.
, дан н ы
-
в в ы м ож ет
е в дгору . И м я эот
е з а дт ь и со втсюе у щ и . Т о ест ь адн н а я н уф к ц и й фо р м а т щс у е с в ю т у щ и й фн у кц и и Avisave.
-
й я по х п от
-
200
Д ан а
4zyxwvu
л ав Г
я н фу к ц и
я и ме
т сюлеуд щ и
й ви д
:
fu n ct io n AVI Save(szF ile: PChar; p c lsid H an d ler: PClsID ; pfn C allback: P o in t e r ; n Stream s: I n t e ge r ; pStream : PAVIStream; pacoOption s: PAVICompressOptions): Longlnt
В оя щ д х и
е п ар м ет
ы фн у кц и
и AVisave п расветдлн
. 4.20.zyxwvutsrqponmlk
ы в та б л аТ б л и ц
AVisave zyxwvu
4 .20. Пар м е т р ы
р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Оп и с а н е
ам р П е т szFile
Им
pclsidHandler pfnCallback
я с о здваем о г
е за л т к У
о файл
с ле ду
ь н а д е с р к и по т т ег о уснаотви
ле т аз к У н ж ол д
а им те
ь н а иц кн фу ь щ ю у д е с ли
а р й ла фа ь в N i l
. рП
ю го н т а бо р
и с о з д ан и
о во з ы й вди
и но в г
о йл фа
а
а saveCallBack, аор т к
я
:
Func tion SaveCallback(nPercent: In t e g e r ) : Bool; p asc al; begin о е сз д ь е а ле д м / / ч то - т end; ан Д
я цнки фу т п о и ч ул т
я де ла т с рза ь и о бт р з а и я п о ат к . о сДитгае й nPercent и перчад .
з в о л яе с о р х на е и м ен о и н до а т р к В о - о р ы вх т п о нл е и о б р а ок т в р ща еа nStreams
о ли К е чс в т
pStream
е с Др к и по т в й л фа р окы т
pacoOptions
а з е к лт У
, он а дае е о б р а ок т и VFW та резьлу т True, тогд о с орнхаеям ы . ерП
р п о - а к т и с о н ч та к д вы зо
е о п е р ац и . Во- первых ь п р о цес с в ы п о лн е и я э т о з а с е ч т с и ы ч вт на и е е знаеч и я , напри м ер
т в о з мн с то ж и в лю б о
у дв
х (веам ыргжух
) по тк , с орхнаяем о г и дан ы
й по т
-
ю п р е в та ь вы я э т о з а с еч и цник фу я во з а
. с лЕ ь покт
т зпаис
и
я п ер
. о сДитгаес ы ун ц к и ф
а по
, в прогес
ь п о з л ь е в ат й м о м ент
а р ба о т а VFW прекащ ае
м цник фу
, он я о п е р ца и
т -
в о (пимерс жам ог к де о лж
) н б ыт
ь жу
е
т ь н а суртк
у TAViCompressOptions
З а м е а и чн В о вр ем о ш и б ак е е з а в е р ш са е т
я р ба о т ы с дан о й нцки е фу й мн а . елД о в от м , тч о в онеркты х с я а лч у я с о ш и б ок й , и цнки фу
и б ыл
а в ы я ел н а о е чн ь н е п р и а тя х по с л е вы зо а нцки фу и рба о т я вм ес т о AVI ERRO K во з рща еа
я а т
Video for Windows - и нт е й рс ф
для
р аб о т ы
с вие од
201 zyxwvut
а р о к иы т я й ла фа . В тарезлуь е AVIERR_FILEOPEN (ко д $8004406F)— ош иб к до лг о теситр о вани я и н е нйад я ус о т й и ч в о й з о ак н м е р н о с и т , м ы приш л и к вы а со лт ь д в о як г о п о ведни я нцки фу , с окре в с е ог , роксет я в о уд , тч о причн в с ам о й DLL Обират е н а эт о вни м ани е . zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO
В л и с ит н г ок тр ы о тг м о ж ет
е 4.9 п ри вед н с о к р а щ ен ы о фа й л а AVI в горду й в и едо фай л е н ай т и н а п ри лагем о м к о м п а к- т и д с к
Л ист ин
г 4.9. Врзкгуы
а ви е д о п т о к
й п р и м ер . П олн ы
, вы жргуаю щ и й и онсдх ы е в калтог
а в д р у г о
й фа й
й в и е од п о т к й ко д п ри м ер а в ы е Source\ Ch04\ Ex06.zyxwvutsrq
л AVI
function SaveCallback(nPercent: I n t eger ) : Bool; pascal; begin zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Application.ProcessMessages; Forml.Progressbar.Position := nPercent; // Отображе м прог ес - ба р if abort - True then Result := True else Result := False; end; procedure TForml.BitBtnSaveClick(Sender: TObject); var CompOptions
: TAVICompressOptions; PCoitipOptions : PAVICompressOptions; NewFile : String; Error : Integer; begin Abort := False; SaveDialog.FileName := 'Новый.avi'
;
IF SaveDialog.Execute Then begin NewFile := SaveDialog.FileName; // П о д г т а в л и а е м информаци ю о компрес ор е FillChar(CompOptions,SizeOf(CompOptions),0); with CompOptions do // TAVICompressOptions begin // Показывае
м диало
г // Указ тел ь н а TAVICompressOptions PCompOptions :=@CompOptions; dwFlags :=dwFlags or AVICOMPRESSF_VALID; AVISaveOptions(Application.Handle, ICMF_CHOOSE_KEYFRAME or ICMF_CHOOSE_DATARATE, 1,
202
4zyxw
ав Гл TekAVIStream, PCompOptions) ;
end; Bt n Abo rt .Visible := True; e r r o r := AVI Save(P ch ar(SaveD ialog.F ileN am e), n il, @SaveCallback,1,TekAVIStream, PCompOptions); Bt n Abo rt .Visible := F a lse ; I F e r r o r 0 Then ShowMessage('Ош и бк а пр и вы з ов е AVISave - E rro r code : ' + I n tT oH ex( E rror, 4) ) e l se ShowMessage('Ф ай л " ' + SaveD ialog.F ileN ame + ' " псше у н о с ор ха н е н !' ) ; / / О св о е а б ж д т р ес у ы , св яз ан н ы е с AVISaveOptons AVISaveOptionsF ree(I,P C ompOptions); en d; en d; procedure TF orm l.Btn AbortC lick(Sen der: T O bject); begin Abort := T rue; / / П ре ват ь с о р ха н е н и е end;
И сп о ль з у я нфу к ц и ю AVisave, в ы такж е м о ж ет е в ы ж рг а у т ь и з вкуо ю о др ж к у в з квоу й фа й л . Дл я дем о н сртац и и м ы п ер аболт и п р и в е нд ы й п ри м ер , одбав и в в н ег о в о з м о ж н о с т ь в ы з гр у к и з квоу й од р ж к и в е л ьдо т н ы фа й л . П олн ы й и он сд х ы й ко д п ри м ер а в ы н ай етд е н а п ри лагем о м к о м п ак т е Source\ Ch04\ Ex07. ид ск е в калтог К а к в ы з ам еит л , в п рыедщ у и х вду х п ри м ера х н фу к ц и я AVISave вы жргауе о ет м , ч т о в дан отл ь к о иод н п о тк : ли б о в и еод , ли б о ида у о . Э т о осблуо в ен н о й в ре с и и о б е рк т и AviF ile32.pas (а так ж е и в vrw.pas) фн у к ц и я Avisave мо ж е т в ы ж гр у а т ь от л ь к о иод н п о тк , з анд ы й в п а р м ет е pstream. Н а само т в о з м о ж н о ст ь в ы ж рг у а т ь н ес к о л ь к о п о кт е д л е н фу к ц и я AVisave и м е о нд о в р е м н н о , н ап ри м е р ви ед о + аид у о и л и ви ед о + аид у о + аид уо . Доист га , чт о фн у кц и я м ож е т о б р а ыт в ат ь м ас и в ы , в котры сет я э т о з а сч е т отг и к о м п р ес о р в . Т а к ка к з ан д ы с о в т ес ю у щ и е п о кт и и н ар с о т й к AviF iie32.pas н е п срмуедотн а акт я в о з м о ж н о ьс т , м ы п ош л и н а хиртос ь с о з а лд и с в о ю в ер с и ю о б ек р т и н уф к ц и и AVISave, п о з в о ляю щ у ю в ы ж ра т г у а онд о в рем н н о (в и ед о + аиду о ) . Дан у ю н фу к ц и ю м ы н зав ср аз у вд а п окт л и AVisaveTwoStream. П ри м е р и сп о ль з о в ан и я э о т й н уф к ц и и в ы м ож ет е н йа т н а п ри лагем о м к о м п а к- т и д с к е в калтог е Source\ Ch04\ Ex08.
й т м в х в и ь и
Video for WindowszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - и нт е й рс ф для р аб о т ы с виеод 203 zyxwvutsr
В ли ст н г н фу к ц и
е 4.10 п ри вед и Avisave (точ н е
н п ри м е , расш и рен о г
р о п р е лд н и
я а дн о й н уф к ц и а Avisavev).
о ан алог
и ка
к оберкт
и
г zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 4.10. Собс т ве на я ве рс и я обе рт к и фицнку и Avxsave
| Л и с ти н
typezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA = array[0..1] of PAVISTREAM; ArrayPAVISTREAM ArrayPAVICompressOptions = array[0..1] of PAVICompressOptions; function AVISaveTwoStream(szFile: PChar; pclsidHandler: PCLSID; lpfnCallback: Pointer; nStreams : integer; pavi : ArrayPAVISTREAM; lpOptions: ArrayPAVICompressOptions): HResult; stdcall; function AVISaveTwoStream; external 'avifil32.dll' name 'AVISaveV
Об р а б от к
а оши бо
О б р а окт г р а м и с а мт и В дан н о
а о ш и бо , ж елаю щ и м м раз елд
к VFW
к — э т о онд а и з главн ы х з а дч , корта и н ап и сат ь с а тб и л ь н о р а б о тю щ у е м ы осант ови м с я н а обра окт е о ш и бо
О сн о в н ы м сп о с б м я в лс е т я ан али з в о з в р а щ а ем о г VFW п о сл е в ы п о л н ен и м ож н о з у н аьт , с каи В с чл у а е с уп е ш н о г ($00000000). Е сл и в н е т с о в т ею у щ и ж е т обра от ь воз н и кш у н и е п ри венд ы в таб л
п о ч л еу н и
я в с а те
д п ро
.
к VFW.
я и н фо р м а ц и о з н а ч ен и
и о п рои з ош шед е й о ш и бк е в VFW я н фу к ц и й . Бо ль ш и н свт о н фу к ц и й я в о з в р ащ аю т ч и сло в й код , ан ли з и ру я к о тр ы й м р е з л о ь а ту м з а в ер ш и л а р або т у а дн а я нф у к ц и я . о в ы п о л н ен и я н фу к ц и и VFW в о з в р ащ аю т AVIERROK работ е н фу к ц и и п рои з ош л а к а я- т о ош и бк а , VFW вер й ко д о ш и бк и , н а осн ован и и к о тр г о п р о г ам и с т м о ю с и а уц т и ю . К од ы о ш и бо к VFW и кркато е о п и са . 4.21.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE 4.21. Кыо д
аТ б л и ц Ош и б к
т п ер ю п р о г ам у
а
оК
д ошибк
и
р а т Ко к
е описа н
AVIERR_UNSUPPORTED
$80044065
п О е р ац и
AVIERR_BADFORMAT
$80044066
шО иб к
а в фо рм ат
AVIERR_MEMORY
$80044067
к в е т На х
а п м а тя
AVIERR_INTERNAL
$80044068
рВ е н т у я
ош ибок
е
VFW
я н е м е о ж
т б ыт
ь в ы п о лн е
е дан ы
х
и я ош иб к
а
а
л ав Г
204
zyxw
4.21 (пернио лд)ж
аб Т л и ц а шО и б к
4
а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA о К д ошибк и р а то К к е описа н е
AVIERR_BADFLAGS
$80044069
е вН р н ы е ат к в ер ны п р и н м еа м ы па Н р и м е р п е р дн а о п р е д л яю щ и
AVIERR_BADPARAM
$8004406A
е Нв р н ы
AVIERRJBADSIZE
$8004406B
ш О и б о н ыч н иеа т к о п р е д ли с во ечс в т р едлни с ле ду
AVIERR BADHANDLE
$8004406C
е аги фл . ан Д я ош иб к а во зни , ес л и цник фу и б ыл и п е р н ад ы не е и л и в з иа м о и с л ю а к ч щ и е аги фл , е и мк а - ил б о п ар м ре т о м . , цник фу и AViFileOp en был и ы в з аи м о и с л ю к а ч щ и е аги фл , е до с ут п к файл у е п ра м р е т , ес л ю о е рч д е п ар м р е а т
й р аз м е р и п р о г ам м и с л р за м е ь п е р д ан
AVIERR FILEWRITE
$8004406E
$8004406D
а а сч т о во з т н е п р ва и л ь р с р ту к ы , ортка я а в цинк фу ю в ка . л Д я онкргте о оп а у стр к р н да ы ь sizeOf
я р за м е р
е нХдл
и
. шО иб к
т и с п з о ль в т а , пер ндаы
р а в фуцнкию AVIERR_FILEREAD
ы цник фу
й в е ач с к в т н
, невр
шО иб к а е н ти ч я ай л ф он й о ш и б к и о б ын ч у д о с уп т а к файл
$8004406F
шО иб к
AVIERR_COMPRESSOR
$80044070
ш О иб к а о к дае . рПичн но й о ш и б к и до в н ль и нч а я о т нев р ы в а я н е п р ва и ы льм м р ое т в коерд а
а оркиыт
. оПвялени о с в я з на
я файл
$80044071
оед К к н е н ай д е л и о едк к в с исемт
. рПоевт ь е
AVIERR READONLY
$80044072
ко л Т ь
я
AVIERR_NODATA
$80044073
о дл еН е й н е се т
т д на ы х рба о т и о л а б н р уж я пр
я е нт ч и . уцнкиФ ы р з е та б о в л
и рбаот
AVIERR_BUFFERTOOSMALL
$80044074
е р Б фу , выделн ок м м а л
AVIERR_CANTCOMPRESS
$80044075
шО иб к
а в кодек
. шО иб к е с берам уф
х -
е дан
и
е д ан о с п р вм а
и
а я дан
, и пр а
н
я VFW в о врем я с во а д ан ы е , оркты а а сч т о п р о яв л и д ан ы х д д ан ы е
-
х и ин а ч з к
, сунаотвле
й по е
-
о с п р вам
а п о в я ле н и о н е о п р д е л н ая х д ан ы и ус ан о т в м к
AVIERR NOCOMPRESSOR
в
е п р ма е т
шО иб к а з ап и с и в а й лф . оПвялени но й о ш и б к и о б ы нч о с в я з на д о с уп т а к файл у
AVIERR_FILEOPEN
о
, с ли ш
х -
Video for Windows - и нт е й рс ф
для
р аб о т ы
205zyxwvuts
с виеод
аТ б л и ц Ош и б к
zyxwvutsrq
4.21 (оокнчаи е)
о К д ошибк и а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA р а то К к е описани е
AVIERR USERABORT
$80044006
п еО р ц а и
AVIERR_ERROR
$800440С 7
еН о п р д е л н а
З а л к еч ю н и В ад н н о й лга в р або т ы с в и ед еад т л я х р ас к аз т воз м ож н о бы л н и ю м ы п р а с в е тд и л гр а м и р о в а н и я
е
я VFW пре вна
а позль веат
я ош иб к
м
а
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
е м ы кор т о п р ас е вд т и л и в а ш ем у в н и м ан и и н е сатв и лас о - — Video for Windows. Н ма ь о б о в с е х в о з м о ж н о ся т х ад н н о г о и н е рт ф й с а о б ы с е л д ьа т , чиуыт ва я о бъ е м гл а в ы . П оэ тм и н аи бо ле е и н е рт с н ы е , с точ к и з р ен и , воз м ож н ост и VFW. Т еп р ь дел о з а вам и
ю и н е рт ф й с лд а п орд б н о и , д а э т о и н е у в а ш ем у вн и м а я п ри к ланд ог о п ро . Д ер з ай ет .
ь з а чд
я в -
В ЛА Г
А 5 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Ш \
GDI+ — гиерча сфк го в н о пол ке ин иен дв В
й инт е йрф я
е в GDI+ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
G D I + — э т о графи ч еск о в св о и х н овы х о п ер а ц и о н ы И м ен о GDI+ явлсяет И ак т п р и з в ан а л яю щ а м н о ж в ес т Во
с
, п осл
е дес якт я з а м ен и т м н овы
я ли ц о
е и з н и х
П рг и а д е н т а
я з али в к а
• п е ро д ж к
а п р о з р а ч н о си т
• р еж и м али аси н г
ы ч л шу е н и ) и п рефи льратц и
• р а с ш и р ен ы ен в д и
е н яант о у
• к о р и д н ан т ы р т а н с фо р м а ц и
я и з о б р а ж ен и р сп лай н о й и и з онг т у
в (к ри вы й а с л ть н о
ь би бли оекта а и п о ар в с е д т а пв к у
о р яд о п р еш д е с в т н н и к
, е с о
в с гл а ж и в а н и
я (ан ит
-
;
е Бе з ь е й п р о в ло к и )
, сп лай н ы
, и м и т юру щ и
е п о
-
;
, п оз воляю щ и
а с р асрт м и
й фо р м а ь п о с л едв а ть н о с т
ю мо д ет
е о щс у е с в т л я
ь о п ер а ц и
и
в G D1+ ; й к о рид н ат ы
я работ
н н овы
а GDI п ояви лас ю гр а ф и ч е с к о г а с в о ег .
я с п ом щ ь х и з о б р а ж ен и й
и рарстовы
ы с п оедрж к о
м п р о и гр а т
я и н е р ф йт с ю в ер с и
;
• п е р од ж к а п о л я ру н ы JPEG , Exif (расш и рен и ICON, WMF и EMF; • од б а в л е з еа т
х оп ерац и он ы
, п ресадтв л н н о е Microsoft — Windows XP® и .NET Server*. х си сетм .
:
е п р ео б а з о в а н и я и объекот
• р а с ш и р ен а
о п о к л ен и я
;
й н аб о
• р е иг о н
о н ов г х с и с те м а х м дан н ы
а ле т ц арвсто ан и ь с а рт у е в ш у м вс е од с т и н св т х м ощ н ы х в о з м о ж н о се й т
я р а з б оч т и к а т н е к о тр ы
е ря д
х п реоб аз ован и й
;
;
х ф о р м ао т в гр а ф и ч е с к и е TIFF и JPEG лд т EMF+ , корты
х фа й л о я ц и фр о в ы й п о з в л яе
ь гр а ф и ч е с к и
в BMP, G IF, TIFF, х фо т к а м е р ) , PNG , т с о р ха н и т
х к ом ан д
ь н а ид с .
к и
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — и чгерсафикй и нт е й рс ф но в г по клени я
В Delphi д о си б чо т и к у н дс к у ы п о э мт у п р о г а м и са т гр а ф и к о й , и сп оль з у о д ус т п к ви еодп ам ият
х п о р и с п о л ь сз ет у я б и л и о е кт а G DI, п роедсавтляю щ а й (п о сегонд яш н и м м ер к а м ) н або р н уф к ц и м ч аст о п р и о дсх т я и т д и н а и х рто с я DirectX, OpenG L и л и би ли оект и .
Н ов з о в ат
е графи ч еск и
е гр афи ч еск о ь со з адн и
с т У а но вк Дл
е р яд
о GDI+ п ри з ван х о фи с н ы
о сщу есвтн х п ри ло ж ен и й
а и т ре бова ни
Дл аль н о г
я п о л ь з о в еа л т о сер в
, е с й
е
: те , кт о рабо те т н е б е с п о к о и ть с я
й р гд и у х о п ер а ц и о н ы а Microsoft п о ардесу
я р аз й лд я р и с о в а н и я ь п р и р або т , и м ею щ и е п р ям о
о п у р о си т ь и сатн адрит .zyxwvutsrqponmlkjihgfedcbaZYXWV
я к ра бот
я н ач л а дав й т е о п р е дл и м с я Windows Х Р и .NET Server м огу э т и с и с е тм ы .
207zyxwvutsrq
т н а о п ер ац и о н н ы — GD1+ уж
х си е т
м п р ис т е д
я ск ач т
х с и е мт а
х а в
е в к л ю ч ен ь с офи ц и
-
:
http:/ / www.microsoft.com/ msdownload/ platformsdk/ sdkupdate/ psclkredist.htm аф й га е м о г с а т л оя р В с о ат л и о е тк о п ер а ц и о н о
л gdiplus_dnld.exe (раз м еро м тч у ь б о л е е 1 М бай т ) и л и вз ят о к о м п а к- т и д с к а и з к а тл о г а Install\ GDI+ SDK. Н ач ль н о а и з о б р а ж ен о н а ри с . 5.1. в ди срти бу в а в о их д а G diPlus.dll, корту й си семт ы .
т и н ксртцу и ю н е о иб д х м
я п о усатн о в к о ск о п и р о в ат
е и ди н ам и ч еск а ь в с и ем т н ы
Platform SDK Redist for GDI+ RIM Please read the following license agreement. Piess the PAGE DOWN key to see the test of t he agreement. END- USER LICENSE AGREEMENT *J MICROSOFT PLATFORM SOFTWARE DEVELOPMENT KIT Z3 IMPORTANT- READ CAREFULLY: This End- User License Agreement ("EULA") is a legal agreement between you (either an individual or a single entity) and Microsoft Corporation for the Microsoft software product identified above, which includes computer software and may include associated media, printed materials, and "online" or electronic documentation ("SOFTWARE PRODUCT"). An amendment or addendum to this EULA may accompany the SOFTWARE PRODUCT. YOU AGREE TO BE BOUND BY THE TERMS OF THIS EULA BY INSTALLING. COFYING, OR OTHERWISE USING THE jj Do you accept all of the terms of the preceding License Agreement? II you choose No, Install will close. To install you must accept this agreement. Yes
Ри с
. 5.1. снаотвУк
а GDI+
No
ь ег о с п р и л а е окн о ин
-
я би б
-
й к а л от
г
-
208
5zyxwvu
л ав Г
В ле а ь д ц а
, рабоют щ и х п о д п у р а в л ен и е м Windows 95, п ри м п р и з н аь т , чт о п ерждок а а нд о й о п ер а ц и о н н о й си емст , и о н е й н е т (п о край н е й м ре е м ы н е н аш ли ) н и ка ог о упо е Microsoft. Т еорит ч еск и м ож н о п р еп д о л ж и ь т , чт о анд а т кор екнт о работ ь и там .
м к о м п ь ю е тр о в
с ет д
я с о г р ч ен и е н е п с р м еу д о т н а ми н а и б и л и о е кт
я н а сай т а бед у
ы я
И а кт , би бли оетк а с пу е ш н о с а тн у о в л е н а и , п рведи я с ю л еу д щ и й воп р с , доя з а го л в о ч н ы е фа й л ы , бав и м , лд я работ ы с GDI+ в Delphi ав м п орюетбу с http:/ / п о с лн ед и е в ер с и и к о тр ы х м ож н о ск ач т ь с сай т а open- sourcezyxwvutsrqpo www.progdigy.com и л и вз тя ь с п р и л а г ем о г о к о м п а к- т и д с к а и з а лко г т а Install\ GDI+ H eaders.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
анткеъбО
я модел
GDI+ и м е к лас о в би бли оетк
ь бкетоилб
т о б ъ ек нт у
ю и ер а х
и ю к лас о в а н а ри с
и п раседвтлн
. Ди агр м а сам ы х н и о ед б х м ы х . 5.2.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR
GetiPlusBase
F
CustomLineCap |
Brush f
CachedBitmap |
Graphics)
GraphicsPath j
GraphicsPathlteratorj
| L AdjustableArrowCap j - Hatch ' Brush j - LinearGradientBrush | "! PathGradientBrush j
О б е ь кт
ы GDI+
" SolidBrush j - TextureBrush |
Font { Font Co I l ec tion)
F o n t F 3 m i l
f
'i \
l m a
e
9 f I m ageAttributes | Matrix | Penf Region | StringFormat |
p Bitmap |
f—lnstalledFontCollection « , , , •— PrivateFontCollection |
BitmapData |
ImageCodaclnfo j
CharacterRange j
MetaflteHeaderj
с ал К уп р ав л е н и
Color | . zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA PathData i EncoelerParameter|
ы с о б ынч
м м пмаь тя
ю
1
Point )
EncoderParameters t PointF j
Ри с
К а к ви д м , боль ш и н вст В а м н е п о н о а дб и с т от л ь к о ср есдвт а п у р а в л ен и
. 5.2. Диграм м
о о б ъ ек т
а с ал к о
в и м юе
я с о з а дв т
т в корн ы дан н о г
ь э к з ем п л яр я п а м ья т
ю би бли оетк и
в GDI+
е и иреах о к лас .
и клас с G diPiusBase. , т . к . о н соердж и т
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — ги черсафикй и нтей рс ф но в г по клени я
Вс
е к лас ы
, и н к ап лсиу юр щ и
у с G DI+ , п ор женд
е р аб о т
209 zyxwvutsr
ы о т м а е тр и н с к о г
о
а G diPlusBase.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE
клас
П р им е а и ч н
р П и и с п з о ль в н а и и з ог а л в н ы ч х й ло в фа , ы твзя х с с йа т а open- sourcezyxwvutsrq о к ни г к е о к м - т п к а ди с а к , к и м ен и http:/ / www.progdigy.com ил и с приегалм ог с ал к а д о б ав л с я е т я пик реф с GP, Т . е . ес л и ксал с GDI+ им е т н аз в и е , напри м ер , TSolid Brush, т о в Delphi о н б уде т им ет ь н за в и е TGPSolidBrush. Эт о н е б ош ль о е олитч е с о с ти т в то м , чт о аовт р заго л вк в GDI+ вне с разделни е , о т чб ы н е пта у ь с с о звнучым и клас ам и , оркты е уж е с щу есвюут т в Delphi, кка , н ап р и м е р , TFont, TPen.
Пр
и р аб о т е с GDT+ н а п рогам и ст н и е , врме я ж и з н и и уаледн и е о б ъ ек от в н а м GDI в Delphi, гд е м ы н е з абоит м с о б ъ е к от в , а п рост о и сп оль зе у м их .
е ы П рв
е ша г
а ло ж и ст я в с я о в т се н о с т . Э т о си ль н о олит ч асет я о с о з а нд и и и уалден и
ь з а со з ад я о т п ри в ы ч н о г и гр а ф и ч е с к и
о х
и
П о сл е от г о к а к в ы с к а ч л и и усант ови л и б и л ое к т у G diPlus.dll, а так ж е по ч л иу и з а го л в о ч н ы е фа й л ы , в ы одлж н ы п окдл ю ч и т ь э т и фа й л ы в с ек ц и ю uses л муод я в аш е й п р о г ам ы и о б ъ яв и т ь м е р а ти н с к и й к л ас с TGPGraphics. П ри м е р и оснхд о г о к од а п рсеадтвл н в ли ст н г е 5.1.zyxwvutsrqponmlkjihgfedcbaZYXWVU г
••
: Л ист н
•
•
"• '•
г 5. 1. Овялбъе ни
•
•
е м а т е рионсгк
о кла с
г
• • • • • " • •
• '• "
"
а TGPGrapchicszyxwvutsrqponmlkjihgfed
unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ExtCtrls, ToolWin, GDIPAPI,GDIPOBJ; // Д л
я подключени
// подключит
я GDI+ нуж ь вд
а м о д у л
type TForml = class(TForm) PaintBoxl: TPaintBox; procedure PaintBoxlPaint(Sender: TObject); private { Private declarations } public { Public declarations } end;
о
я - GDIPAPI,GDIPOBJ;
л ав Г
210
var Forml: TForml; / / О б ъ в я л не и е клас а TG PG raphics, о тв е тс в е н н о г var graphicsG D IP lus : TG PG raphics; Дл
я п ер в и ч н о г о о з н а к о м л ен и PaintBox и в о бр а очт и к со бы и т п ь тя ю р аз ли ч н ы м и си т л я м и в а н и ем , с граид ен т о й з али в к о й я вы вод
Дл
а рг а фи к
к о н е к тс р г а иф к у
т с р ут о й с в т . П осл
П ри м е а св т л е
о з а работ
я с GDI+ м ы рше и л и п ол ж и т я onPaint о бъ ек т а вы вест : обы чн ы м б е з с гл а ж и в а н и я , с текрнсут о й з али в к о
у GDI :)
ь н а форм у о б ъ ек т и те к с т "H ello G D I+ " , обы ч н ы м с о с лг а ж и й и п о д улго м 45°.
и в к о н кс р о т у е о б ъ ек т а TGPGraphics ртебсу а (DC) Thandle, д ку а б и л и о е кт а едбу т н а п р а в л ят я нжу о н е з абы т ь к о р ен т о о св о б ид т
е р и со в ан и
5zyxwv
я к уа з т
ь ь вс ю .
ь п а м ь ят
р код а ед м о н с р т а ц и о н н о г о п р и м ер а , вы воящд ег о "H ello G D I+ ", п ред н в ли ст н г е 5.2.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Лиснт
г 5.2. Hello GDI+
procedure TF orm l.P ain tBoxlP ain t(Sen der: TObject); Const StrH ello = 'H ello G D I+ '; var • : TRect;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG R FontFamily
TGPFontFamily;
Font
TGPFont;
SolidBrush
TGPSolidBrush;
// Заливк
а непр ывн
GradientBrush
TGPLinearGradientBrush
// Заливк
а л и н е й н ы
м градиенто
TextureBrush
TGPTextureBrush;
// Заливк
а текстуро
й
Image
TGPImage;
// Объек
т - Изображени
Matrix
TGPMatrix;
// М а т р и ц
м цвето
м м
е
ы
begin graphicsGDIPlus := TGPGraphics.Create(PaintBoxl.Canvas.Handle); // И м
я шрифт
а
FontFamily := TGPFontFamily.Create('Times New Roman'); // Ш р и ф
т
Font
:= TGPFont.Create(FontFamily, 32, FontStyleRegular, UnitPixel);
// Создае
м объек
т д л
я непр ывно
й заливк
и
SolidBrush := TGPSolidBrush.Create(MakeColor(255, 0, 0, 255)); // Рисуе
м текс
// цвето
м
т бе
з антиал синг
а (сяинавжлг
) с закр с о
й син
м
GDI+ — графическй
интерфйс
новг
покления
211
IIzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Уеавилнтс м слит ь оквосирт и татске // TextRenderingHintSingleBitPerPixel graphicsGDIPlus.SetTextRenderingHint(TextRenderingHintSingleBitPerPixel); graphicsGDIPlus.Drawstring(StrHello, - 1, Font, MakePointd, 10.0), solidBrush); // Рисован
е текс
а с
// Установк
а стил
я отрисовк
антиал синго
м с закр с о и текс
й син
м цвето
м
а - TextRenderingHintAntiAlias
graphicsGDIPlus.SetTextRenderingHint(TextRenderingHintAntiAlias); graphicsGDIPlus.Drawstring(StrHello, - 1 , Font, MakePointd, 40.0), solidBrush); // Рисован
е текс
а с антиал синго
м с закр с о
й градиенто
м
R.X := 1; R.Y := 1; R.Width := 100; R.Height := 40; // С о з д а е
м объек
т д л
я градиент о
й заливк
и
GradientBrush := TGPLinearGradientBrush.Create(R,MakeColor(255, 255, 255, 255),MakeColor(255, 0, 0, 255), LinearGradientModeForwardDiagonal); graphicsGDIPlus.SetTextRenderingHint(TextRenderingHintAntiAlias); graphicsGDIPlus.Drawstring(StrHello, - 1, Font, MakePointd, 70.0), GradientBrush); // Рисуе
м текс
// С о з д а е
т с антиал синго
м ш р и ф
т занов
м и с закрсо
й текс уро
й
о
Font.Free; Font UnitPixel);
:= TGPFont.Create(FontFamily, 70, FontStyleRegular,
Image := TGPImage.Create('01.jpg'); TextureBrush := TGPTextureBrush.Create(image); graphicsGDIPlus.SetTextRenderingHint(TextRenderingHintAntiAlias); graphicsGDIPlus.Drawstring(StrHello, - 1, Font, MakePointd, 100.0), TextureBrush); // Рисуе
м по
// Создае
м шриф
д у г л о
м - и с п о л ь з у е т занов
м трансформаци
ю
о
Font.Free; Font UnitPixel);
:- TGPFont.Create(FontFamily, 32, FontStyleRegular,
graphicsGDIPlus.RotateTransform(- 45); // Производи
м
graphicsGDIPlus.Drawstring(StrHello, - 1 , Font, MakePoint(- 200, 200.0), TextureBrush); graphicsGDIPlus.ResetTransform;
// Сбрасыв е
м
212zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA //Н е зе а в ы б а м вт и д о б в с ы Image.Free; GradientBrush.Free; TextureBrush.Free; SolidBrush.Free; graphicsGDIPlus.Free; end;
Н а рс и
. 5.3 в ы тидв
ь пт я м а
е а т ь л у з е р
л ав Г
5zyxw
ь
т тобар
ы нашег
о приложеня
.zyxwvutsrqponmlkjihgfe
, f ForrnlzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
H ello G D I+ H ello Ю ГС + iio GD1+
AzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC L w JL t \ J СУ
Ри с
П о сл с н ей
л а сК В с о ат фа в и н т о
л аКс К лас ср т е л о к
е п ер в и ч н о г . О з н ак ом и м с
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
. 5.3. Раетзуль
о з н а к о м вс т я с клас м
т вы о д
а рзаным
а с б и л и о е кт и и маомдет
и силмят
и "Hello GDI+"
й р а с м ор и т и GDI+ .
м а е дт л ь н
о р аб о т
у
ы GDI в б и л и о е тк м п о рякде
и овя дх
т с ю л уе д щ и
е к лас ы
, п ресадтв л н ы
е ад л е
е в ла -
.
с AdjustableArrowCap с AdjustableArrowCap форм и еру .
т фо р м
у к о н ц ев ы
х ч уа ск т о
в ли н и
и в ви д
е
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — ги черсафикй и нтей рс ф но в г поклени я
213 zyxwvuts
л аКс
с Bitmap zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Д ан ы о б ес п еч и в а е к л ас
й к л ас
лд
с п р не д а з н а ч е т в о з м о ж н о ст
с н ас е т л у д
я о т к л ас
я работ
ы с и з о браж ен и ем
н л д я р аб о т и п о с о з адн и а image, котры : ка к с рарстовы м
ы с рарсотвы м и и з о б р а ж ен и ям и ю и п у р а в л ен и ю р аст м и й в св о ю о ч ер д ь я в л се т , та к и с векотрн ы м
. К лас . Дан н ы я баз о в ы
с й м
.
К лас с Bitmap п роедсавтляе т в о з м о ж н о ст ь з а ж гр у т ь и з о б р а ж ен и е ка к и з фай л а (п ри ч е м п р и з а гр у к е о п р е л дся т я фо р м а т и з о б р а ж ен и я) , ат к и и з п от ков . П ри нят ы м доп о лн и етль н ы м н о в ш в е с от м яв с л е т я в рс т о е н а я п о е др ж к а фо р м а т в JPG , TIF, GIF и PN G . Соит т а кт ж е о м т ие ь т , чт о в клас е Bitmap р еа л и з о в а н а р аб о т а и с и кон кам и (ICO).
л а Кс
с BitmapData
К лас лд
я п ч о ен л у и
л аКс
с BitmapD atazyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ЛЬЗуеТС О П С И Я метоамд и LockBits И U nlockBits са л К а Bitmap я п р ям о г о допсут а к н екотр й п р я м го л у ь н о й о бласт и р аст .
с Brush
Р о и д е л ть с к и сп ло ш н ы
й к л ас
с Brush п роедсавтляе й и и н кап лису ер
х о бласет
т в о з м о ж н о ст
и п о р аз ли ч н о е м о еыт д
т с о в т ею у щ и
й з али в к
е
.
С а м п о себ е э от т клас с п р а ки т ч ес к и б ес п о л ез н , т . к . ег о н ель з я и сп о ль з о в ат ь н в п е с т о рд н о л д я з ал и в к . Вс е оп рцае и и н в а е л п о тс д р ы в - кхсал помктха , та к и х ка : SolidBrush, Lin earG radien tBrush, H atchBrush, P athG radientBrush, TextureBrush.
л аКс
с CachedBitmap
К л ас с CachedBitmap п раседвтля т со б й к л ас с дл я о п ит м и з и р о в ан ы лд я вы вод а н а кон крнет о е усрто й свто GDI+ н аи боле е б ы рс т о в ы в ои д т ь р а с ты . П р и соз анд и о и дх м о к уа з т ь о р и г н аль н ы й р аст р и усрто й свто ид т ь вы во д и з о б р а ж ен и я . С к о р ст ь вы вод а р аст н ы е о гр а н и ч е н и я . В ч анст оист , сртуо й свт о вы вод п р и н е р от м и л и м а е фт й л о м . Т ак ж е п р и с м ен е арх кет и с т в о д а к л ас с CachedBitmap н ео бихд м о п е р с о з а дв т . с р ту о й с в т о п р о и з в ои д ь т с я н е бетд у
л аКс К лас П р и м ен сяет
р або т
ы с расрт м и , к о тры . Э от т к лас с п о з в о л яе и а дн н о г о к лас а н ео б т п ро и сх , н а к отр е е д бу а н ак лы д в ае т и о п р е лд н а G raphics н е од л ж н о бы т к с р ту о й с в т а вы ь з ан о в , и н ач е вы во д н
е т ь а
с CharasterRange , оп релдяю щ и я пр
и работ
й ид а п з о е с о ш ри афтм и
н си м в о ль н ы
х п оз и ц и .
й в п р е лд а
х с рт о к и
.
214
5zyxwv
л ав Г
л а Кс
с Color zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
К с ал Н о в ш в ес о т о п и сан и м ле о д ли ч н п и к с ел а ц в ет
с Color п роедсатвляе т п р о г ам и ст у в о з м о ж н о ст ь р аб о т ы м к лас а color явлсет я п о лн а я п еродж к а 32- раз няд ог я ц в а ет . Т еп р ь ц ве т м ож н о п р ас е в дт л я ь н е то л ь к о в ви д о в обы ч н о м GDI, Н О И добав и т ь к эот й и RGB, к а к э т о п ри н ят у н еп р о з р а ч н о с т и — alpha, п рощ е го в р я , вели ч н у н еп р о з р а ч н о с т . З ап и с ь о ц вет е хран и ст я в сркут е ARGB ти п а DWORD. И н форм ац и е п рсеадтвл н а в ви ед :
• п ер в ы
е 8 би от
в — соердж а
т Alpha- кан
• ов рт ы
е 8 б и от
в — соердж а
т в ел и ч н
у с о е рд ж а н и
я к р асн о г
• р т ье
и 8 би от
в — соердж а
т в ел и ч н
у соердж ан и
я з ел н о г
• п о с лн ед и
е 8 би от
С е луд т так ж е о м т еи ь т color с трем я ц во е т ы м вс а ет я п о муо лч ан и саль н о ст ь досит гн ту
в — соедрж а
л аКс
с ц в о е тм о з н ач ен и е ц о в ет м оелд
. я й и ве и я о
л а ;
т в ел и ч н
у с оер д ж а н и
о ц вет о ц в те я си н ег
о ц вте
а г; а д ; а ь .
, чт о оасвтлен а и траид ц и он а я фо рм а п ра с в е т д л н и и к о м п о н е н а тм и , п р и эот м з н ач ен и е Alpha аснту авли ю р ав н ы м 255 (п олн а я н е п р о з р а ч н о сь т ) . Так я н у и в ер а з а сч е т п ерзгук и м о е дт а MakeColor.
я -
с CustomLineCap
К лас , о п редляю щ и й фо р м у к о н ц ев ы х ч у а ск т о в ли н и , о сн о в ан н у ю н а ео г м р ие т ч с к о м п ит у . К он ц ево й учаост к ли н и и м ож е т и м ет ь раз ли ч н у ю офр м у и п р с ае д вт л я ь со б й к в радт , кгру , сртелк у , з н ач о к алм з а и п роч и е ф и р ыгу . Д л я бо ле е сло ж н ы х фи р у г , н ап ри м е р рс т е л о к , м ожн о и сп о ль з о в ат ь о гв т ы й к л ас с AdjustableArrowCap. Д ан н ы й к л ас с и с п о л ь сз ет у я к лас о м еР п п р и п ро ри со в к е ли н и й и фо р м . В н ртеу н и е о бласт и к о н ц ев ы х ч у а с кт о в , п авсртед т л ен ы е в в и д е з ам к н ыт у х ф и гу р (н ап р и м ер , ром б в) , в св о ю о ч ер д ь м оуг бы т
И н е р вт а
л аКс К лас з ап и с а кт ж ны м о ж ет с а тун о в и т с и ем т
ь И Л ТЗа
Ы КЬ ТИС
л м еж д
Ю
у з н ач ко
Brush .
м и сам о
й ли н и е
й м ож е
т бы т
ь окто р екит р о в ан
.
с EncoderParametr с с о е др ж и т п а р м е ыт , котры е п е ра ю д с т я н а к ео д р и з о б р а ж ен и я пр и р аст а в оп релдн ы й фо р м а т (JPG , PNG , TIFF и п р . ) . К лас с м ож е е и с п о л ь з о в аь т с я л д я п ч о ел н у и я сп и ск а воз м ож н ы х з н а ч ен и й , объявлен х в с о в т ею у щ е м п а р м ет е к оерд а и з о б р а ж ен и я . Т ак , н ап ри м ер , в е с п ом щ ь ю а дн н о г о к лас а добав и т ь к о м ен а рт и й к TIFF- афй л у и л ь с е тп н ь с жи ат я JPEG , т . е . анд ы й к с ал с к а к б ы п р о е ад с в т л я у к о м ан д дл я управлен и я к ер о д м п р и сроахн ен и и р аст .
и т ы и т
GDI+ —и чгерсафикй
и нт е й рс ф
но в г
по клени я
215 zyxwvutsrq
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG с EncoderParametrs
л аК с
Д ан ы й к л ас с п р о е д са в т л я п ч о ел н у и я и н фо р м а ц и count и в о з м о ж н о сьт м ое т д Parameter.
л аКс
т м ас и и о коли ч евст ю о дп с у т
в к лас о е к лас о
в EncoderParametrs с фну к ц и ям в в м ас и в е с п ом щ ь ю м ое т д у к лас у EncoderParametrs ч ер
а к кон крнет ом
и а з
с Font
Д ан н ы й к лас н ог о в к о н скртоу с ит л е й ) .
с и н к а п л ис у е р
т а рх кет и с т к , так и е ка к вы соат
Д ан ы
й клас
с и сп оль зсету
л аКс
с FontCollection
е к лас
я пр
К л ас с F ontCollection явлсет л д я п о ч л еу н и я и н оф р м а ц и отв . О бъ екыт , сформ и рован ы
и п ро и совк
я а б рс т к н ы и о ш р и а хфт
и о п р е дл н о г , раз м ер
, сит л
е срток
о ш р и а фт ь (и л и ком би н ац и
, з адн
я
.
м к сл а о , н оящадх и с х е и з э отг о к лас
м и с о е др ж и я в коле ц и , вклю чаю
т м о е тд и ш ри ф т к лас
ы ы
PrivateF ontCollection И InstalledF ontCollection.
л аКс Д ан ы н ог ио д бк у в
с FontFamily й к лас с фо р м и реу о ш р и афт . С ем й свт н и от т ж е ш ри фт .
л аКс
й клас я гр а ф и ч е с к и
с о з адв т
л аКс
р ш ри офтв
, котры а — э т о гпру , н ап ри м ер
е со сатв ляю а ш р и оф т в , в н ач ернт и
т с е м й с вт , корты и ил
о од
-
е и м ею и то л щ и н
т е
с GDIPIusBase
Ба з о в ы лд
т н або о ш р и тф , н о различ аю стя
с GDIPIusBase сжлуи т дл я расп релдн и х усрто й свт . К а к бы л о ск аз н ь в свое й п рогам е э к з ем п ля р о бъ ек т
я и освбоженд и о п реж д , в ы н и кодг а GDIPIusBase.
я п а м ят а н е долж н ы
и
с Graphics
К л ас с G raphics явслет я к л ю ч ве ы м в GDI+ . Дан ы й к лас с с оерд ж и т п оч т п ра у ед с як т о в к лас о в и пар у сеот н м о е тд в , овтеч аю щ и х з а ри со в ан и е , осет ы с р ту о й с в т а в ы в ао д . П рослеж и васет я п мр я а я с в яз ь с о са т ч ен и е и п ар м ет м усртой свт а (Device Context), эт а связ ь ви д ыр м G DI, связ ан а я с кон ектос н а п р и и сп о ль з о в ан и и дву х к о н с кр от у в , котры е со з адю т э к з ем п ля р клас с а н а осн ов е хен лд а (H D C).
и -
216
Г лав н о п ре п р мя у к о н е ст ви о д т
л а Кс
л ав Г
5 zyxw
е ж е о л ти ч и е п о срав н ен и ю с о сарты м GDI з ак лю ч асет я в то м , чт о те ь в с е м о де т ы GDI+ рабоют т в собвстен ы х к лас х и н е з аейд ювсту т на ю HDC. До сатч н о ио д н ра з п р и соз анд и и к лас а G raphics куаз т ь е м о де т ы р и со в ан и я буд т вы т усрто й свт а вы од а и вс е п оюслуед щ и ь р ез л ь а ту ы св о е й работ ы и м ен о в эт о усрто й свто .zyxwvutsrqponmlkjihgfed
с GraphicsPath zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
И н ер т с н ы со б ка пр фо р м а ц и о с я щт и р а з в ер н т у р а с ч и ыт в а т (э т а дн н о г в ио д т м о ет ед сл фи ч е с к и
й с точ к и з р ен и я п р о г ам и ст а к л ас с G raphicsPath п арсветдля ь п рг у и р о в к и гр а ф и ч е с к и х к о м ан д , акти й ка к б ы п оследвать н ост к вы во д ли н и й , окжрун осейт , фор м и п р . Э от т к лас с о д уб н о и сп о ль з о в ат и р и со в ан и и сло ж н ы х о б ъ еко тв , корты е в сво ю о ч ер д ь п о л де ж а т р та н с . О бъясн и м н а п ри м ер . П рпед ол ж и м , в ы н ари совал и о б ъ ек т , со й и з соет н ли н и й и п ра ы дескято в о кж р н у о е с т й ("деатль ") . Ва м нж у . В м ест о от г , чобт ы р и со в ат ь ь "деатл ь " н а оп релдн ы й г рс а у д ь н овы е ко рид н ат ы коажд й ли н и и и окжрун ост и п о сл е п ов р т о о рд т еу м к о и требу т з н ан и й а н а л и т ч ес к о й ге о м р т и ) , в ы с п ом щ ь о к лас а ка к б ы пгру и ерту е вс е сво и объект ы в онд у "деатл ь " . П рои з е н жу ю р т а н с фо р м а ц и ю е е (в н ша е м счлау е э т о п о в ро т ) и , и сп оль з у м ви д DrawPath объек т а G raphics, вы воид т е сво ю "деатль " в п ерв н от у , п ри че м п ер с ч т к о ри д н а т в ес х о б ъ е к о т в , оящвдх и х в G raphicsPath п о е рт а н с фо р м а ц и , GDI+ воз ь м е т н а себя . В ы м ож ет е о б ъ ие д н я т ь гар е п ри м и т в ы в р а з ел д ы и р або т ь с н и ми , и сп оль з у я к л ас
т х ь о и а ю я с
G raphicsPathiterator.
л а Кс
с GraphicsPathiterator
К л ас с сжлуи т л д я р або т ы с вы бран ы м и раз елд м и пи т у с е G raphicsPath. С оти т бо ле е п ор д б н о о ас н т о в и ь т с я н а в о тм , чот , п ом и м о о бщ е й п рг у и р о в к и гр а ф и ч е с к и х G raphicsPath, эот т ж е клас с п о з в о л яе т р аз би в ат ь о б ъ ек ыт гр а ф и ч е с к и м и п р и м и т в ам и , н а разелд ы с п ом щ ь ю п р и в е нд ы й п ри м е р с "деатл ь ю " , м ож н о бы л о р аз б и т п р и м ер , н а дв а раз елд : ли н и и и окжрун осит . П ри че м р аз е д ка к и з онд о г о гр а ф и ч е с к о г о п ри м и т ва , та к и и з множевста л ы в G raphicsP athiterator (усатн ав ли в ат ь м ар к е ы ) м ожн д а SetMarker клас а G raphicsPath.
л а Кс К л ас о сн о в о п и с ы в а ем ы
, соз адн ы м а дн о п ри м и т во
м к лас е
и в клас . Дел в в клас
о е
, п расевдтлн ы м ар к е о в ь н аш
. И сп оль з у у "деатл ь " , н а л м ож е т с о тя . С о з адв т ь р аз е д о с п ом щ ь ю о м те
е я ь -
с HatchBrush с HatchBrush п роедсавтля е би отв г о ш аб ло н х п ер ч и с л ен и е
т с р ве дт а з али в к а (pattern ). GDI+ соердж и м H atchstyie. П арм ет
и ц хв д у н е т ы м з уо р м н а т ж у е 53 готвы х ш аб ло н а , ы forecoior и backcoior
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — и чгерсафикй и нт е й рс ф но в г по клени я
217zyxwvutsrqp
п о з в о л яю к и ст
т к уа з ьт , со вте н о , ц ве т ли н и й ш аб ло н а и фо н о в ы й ц ве .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
л аКс
с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Image
Д ан н ы й к лас с яв л сет (расрто в ы м и и в екотр н ы м и ) M etafile — со бвтен т е с расрто в ы м и и веокртн ы м
л аК с Дл
я б аз о в ы
м л д я р аб о т и ад н н о г т требму и и з о б р а ж ен и ям и . П омтк
о и реали зю у
л аК с
и ы Bitmap и ь п р и р аб о -
м и з о б р а ж ен и
я в GD1+ соз ад н к л ас ь ц во ет й кор е ц и е й и ег о , м ож н о о б ес п еч и т ь вы во д и з о бр аж е к лас а п р о и с дх т п р и вы вод е и зо х (overloaded) вреси й м о е тд и з п а р м е то в п е р а сд т я к у а з е тл
с а ь
с ImageCodeclnfo й к лас с п о з в о л яе т п чо л и у т ь и н фо р м а ц и ю о к ое д е и з о б р а ж ен и я би о к ео д а и з о б р а ж ен и я и м с ет я н у и к аль н ы й CLSID и G DI+ . У кажогд , п оз в ляю щ и й б и л и о е кт е о тч н о и е дн и т ф ц и р о в а т ь с о в те й к оед . оЧтб ы п о ч л иу т ь сп и со к фи л ь р то в и м п орт а к ое д в , н еоб о в о с п о л ь з о в ьа т с я н фу к ц и е й GetimageDecoders, а дл я п чолену и я сп и ск а в с о р ах н е н и я — нфу кц и е й GetimageEncoders. Э т и фн у кц и и з а п о л н яю т т м ас и в о м к ур с т р imagecodecinfo. й и м бфеу р р а з м ер о м size бай
Н ес м ор т я н а то , чт о в верси ActiveX- объекамт и к а к так о в ы м с в те у т воз м ож н ост ь р або т Microsoft о бещ ае т п ер а б о т едр ж к и к ое д в н ез а в и с м ы
л аК с К лас те м
и и з о б р а ж ен и ям — клса
с Image Attributes
я бо ле е ги б к о г о к о н р от л я н а д вы во д imageAttributes, корты й п о з в о л яе т п у р а в л ят м р ие т й вы вод а и з о б р а ж ен и я (н ап ри м ер н и я м о з аи к о й ) . И сп оль з ован и е ад н н о г о б р а ж ен и я с п ом щ ь ю он д о г о и з п ер жг у н ы Drawimage о бъ ек т а G raphics, дг е в онд о м н а о бъ ек т к лас а ImageAttributes.
Д ан ы л и о е тк и ед н и т ф к а о т р ю в с ту щ и о ихд м фи л ь р т о п е р а нд ы
ы с р аз ли ч н ы м о клас а ю н фу к ц и о н а л ь н о с т .
т
и 1.0 би ли оект и GDI+ кеод и н е яв л ю с т и и врсотен ы в сам у б и л и о е кт у , а атк ж е от ы с в н еш н и м и к оед а м и , в щ удб и х в ер с и я ь GDI+ и врстои ь в н е е в о з м о ж н о ст ь п од х п р о и з в о и д е тл й . я
х -
с InstalledFontCollection с InstalledF ontC ollection п расевдтля .
т ш р и ы фт
, саутн о в лен н ы
е в си
-
П р им е а и ч н В ы н е дн о лж ем т у . с л Е
ы и с поз львта и ои х т
ь дан ы е су н а о т в и
й ксла ь ш т риф
с дл я усанотвк , в ы н до лж
и новы ы и с п з о ль в та
х шо т риф
в в с ис ь цник фу
ю
218
5zyx
л ав Г AddFontResource, приеч ок т ль о т е ш ытр и ф , корты
м соит е б ыл
т о м т ьи е т и в с исемт
, чт о дан ы е д о усанотвк
й ксла
с б деу и нов г
т пзаоыквт
ь . zyxwvuts
о ш а т риф
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO с LinearGradientBrush
л а Кс Н а з н а ч ен и од
е ад н н о г м и л и гриад ен от
л аКс
о клас а м ц ва е т
— з али вк
а р т е бм у о
й о бласт
и ц о в ет ы
м п о ер х
-
.
с M atrix
К лас о щ с у е св т л н и о б ъ ек т
л а Кс
с Matrix п ресадтв ля я о п ер а ц и в G DI+ .
т со б й п ов рат
й м р а ит ц
у р а з м ер о , п ерн оса
м 3*3 и п рнед аз н аче , м асш абти рован и
н лд я я
я и оражтен и
с M etafile
Д ан ы й к лас с о б ес п еч и в а е мы и м еа т ф й л а м и . М афетй л ва о д , лд я к отр г о он и с о з а д в л и с ь р аз ли ч н ы х рт а н с фо р м а ц и я ш а бт и р о в а н и е (п р и си ль н о с те я в ы с о к и м ) . Р азм усеят ю вс т у щ и х в м аетфй лах .
л а Кс К лас о б ласт
л а Кс
т р аб о т
у с в е ок р т н ы м и р и нс у к а м и ы н е п р и в яз а н ы к раз реш ен и . П реи мщ у есвт о м еа т ф й л о х в е к о тр н ы х р и нс у к о в , атк и х ка м увели ч ен и и и з о б р а ж ен и я к а ч е св т , э т о н е касет я р а с то в ы х и з о б р а ж ен и й
, ат к н аз ы вае
а вы в в и нд о пр и , н ап ри м ер , мса о ри нсу к а оаст , п рит су -
ю усртой свт
с M etafileHeader с п р не д а з н а ч е и в еко тр н о г
н лд о ри нсу к а
я п ч о ел н у и
я и н фо р м а ц и
и о м еатф й ле
, н ап ри м ер
, о б
.
с PathData
К л ас с PathData явслет G raphicsP athlterator И и м аси в ти п о в . К аыжд о тч к и и н або р флаж ко в В ы м о ж ет е и сп о ль з о в ат отч е к дан н ы х п ит у . Н ап ри м ер п о ли н и и и л и к ри вой
я в с п о м е га л т ь н ы G raphicsPath. К лас й э лем н т в м ас и в дл я со втсею у щ ег ь дан н ы й клас с дл , в ы м ож ет е .
л аКс
с PathGradientBrush
Н а з н а ч ен и з али в к
а рт е б му о
е а дн н о г
о к л ас й о бласт
а атк о и ц о в ет ы
е же
м к лас о м лд я с G raphicsPath и м е т м ас и е ти п о в — бай т , оп релдяю щ и о ти п а э лем н т а в м ас и в я п ч о ел н у и я и усатн о в к и к о рид н а п к узловы м п чо л и у т ь о д су т
к л ас о
в в точ е
к й ти п
е точ ек
. т
отч к а
м
, ка к и клас а LinearG radientBrush, — м п е ро д х м (граид ен т а я з али в к а) . От -
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — ги черсафикй инте й рс ф но в г по клени я
219 zyxwvutsrq
ли ч е м к лас а PathG radientBrush явлсет я в о з м о ж н о ст ь и сп о ль з о в ан и я р аг а с р аз у м ж ед у н ес к о л ь к и м и ц в а е мт и . П ол ж ен и е рт е б у ид е н т о г о п ое р д х мы х з у л о в ы х от ч е к о п р е л с дя т я ге о м р т и ч е с к и м е тп у м (path), корты й мо ж е т п ри н и м ат ь п рои з воль н у ю фо р м у .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ
еп с РzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
л аКс К лас ид м ы мы с в о й св т а з али в о к н ий р аз ли ч н о
с еР п п р н ед а з н а ч е х гр а ф и ч е с к и х св о й ст в "п ер а . Дл я ли н и , тек сут р и . Н ап ри м ер , в ы й толщ и н ы
л аК с
с Point
К л ас р а нх е и
с Point п олн оьст я X и Y отч к и
л а Кс К лас н ат
ыт
х п ри м и т во " (ц вет й ал с т ш аблон ов м о ж ет , а такж
я н а ср т о й к
в "п ер а " раз ли ч н ы , сп лай н о в и к ри вы х Бе з ь е . П о м и м ы м н о иг , толщ и н а ли н и ) , в GDI+ добав лен и п о д ус т н ы вс е в о з м о ж н ы е в ар и н т ы гр а и д е н т ы , раз ли ч н ы е ге о м р т и ч е с к и е а рх кет и с т к е н ар и со в ат ь ли н и ю и з н абор а п ар л е ь н ы е з а дв т ь ви д ы и форм ы к о н ц ев ы х ч у а с кт о в
ю п ер ш е .
и п а р м е то
л и з са рт о г
о GDI и п рсеадтвля
х вы во о з н ак о е дргуи
е х
и ли
-
х ли н и
й .
т со б
й к л ас
с
с PointF , и енд ит ч н ы . В дан н о
л аК с К лас р ан и
н лд
м клас
й к л ас е к о ри д н а т
у Point, з а и склю чен и е а точ к и хран и ст
м фо р м а т я в вещ евстн о
а р ах н е н и
я к о рид м ти п е
.
с PrivateFontCollection с P rivateF ontCollection п ресадтв ля т со б й со бр ан и е ш р и оф т в . В соб е ш ри офт в п оп аюд т ш р и тф ы ка к усатн о в лен ы е в си сетм , та к и ш ри ф , к о тры е н е бы л и усатн овлен ы в си семт , а и сп оль зю у ст я ка к в рем н н ы е . П р им е а и ч н а н ыД у с а н от в к з ам е н ш т ри ф с ет
л аК с До в ль н м о ж н о ст ск и
й с ал к с п о з в л яе и и х в с и ем т у ы ш т ри ф а в с и е тм е а Arial в до п лне и я в с и с етм е .
т р за б и чо к т , а жка т . паНри м ер е к с исемт но м
у ис пзольвта е уснавлит
ь врем ены ь час нты
е ш т ри ф и ш о т риф
е вер с и
, GDI+ ме о ж т с о з д та у ш т риф у Arial, окрты
ь чсанут й уж
ы б е в б е ю верс и е ис пзоуль
з з ю -
с Propertyltem х фа й л
о н ео б ы ч н ы й к л ас и р аб о т ы с м а н де т ы м х м ож н о ск р ы т
с Propertyltem п ресадтв ля и в и з о б р а ж ен и ях ь о д п л н и е лт ь н ы е а дн ы е
т п р о г ам и ст . Н е сек р т , и м н оиг
у воз , ч т о в графи ч е е п р и л о ж ен и
я
-
220
5zyxwv
ав Гл
п р и з ап и с и и з о б р а ж ен и м ер , авотр ск и е п р ав н и ел ь т н а я и н фо р м а ц и а дт н ы х п с р м уе д о т н м у в GDI+ и п ояви лс
л а Кс
й з ап и сы в аю , дат у съем к я н а з ы в ас е т а п р а ки т ч е с к я дан ы й клас
т д у т а р аз ли ч н у ю и н фо р м а ц и ю , н ап ри и и л и соз адн и я и з о б р а ж ен и я . Вс я эт а доп л я м а е нд т ы м и . В о з м о ж н о ст ь р а нх е и я ме и в о в с е х гр а ф и ч е с к и х ф о р м а тх , п оэт .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON
с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Red
К лас
с Rect п ресадтв ля
л а Кс
т со б
й к л ас
с дл я ранх е и
я п р я м го л у ь н о
й о б л а си т
.
с RectF
К лас , и енд ит ч н ы о п р я м го л у ь н о ит п е .
л аКс О ч ен гр а ф и ч е с к и п аю д щ и вы од
й к л ас й о б л а си т
ь и н ер т с н ы
й к л ас
ыт
л аКс
с Size
Д ан ы с и е мт
й к л ас е к о рид н а т
л аКс
с SizeF
а р ах н е н и я в в е щ в е с тн о
я а дн ы
х м
т о б ласт
ь вы вод
а л д я п о юс л у е д щ и е п ри м и т вы т о б р ез ан ы , уд б т бы т ь к о м би н ац и е х п е йт у .
х
, графи ч еск и и в ы в ао д у и м ож е , графи ч ески
н л д я р а нх е и
я ш ирн
ы и в ы со т
, п о
-
. О бласт й и з он г у
ы 2- Э - объект
ь -
а в
.
й к л ас е 2- О- объакет
у size, з а и склю чен и е . В эо т м клас е адн ы
м фо р м а т е хран стя
а р ан х е и
я а нд ы м ит п е
я в вещ евстн о
х .
с SolidBrush й п ро ст й онд о р нд ы
й к л ас о о б ъ ек т
л аК с Д ан ы (ти
с Region оп и сы вае . Р аз ли ч н ы е и з о б р а ж ен и я ы з а нд о й о б ласт ь лю бу ю офр м , п рям огуль н и к о в
с п р не д а з н а ч е
, и енд ит ч н ы
л аКс С ам ы л а с ет гр а ф и ч е с к о г
м фо р м а т е р а нх с ят
е адн ы
с Region х к о м ан д е з а п ел р д а м ож е т п р и н и м ат х и п рям ы х л и н и й
К лас о раз м ер
у Rect, з а и склю чен и е . В оэт м клас
с и з с е м й св т м ц в о е тм . Сщ у есвтн о а GDI — перждок
а Brush. Н аз н ач ен и е о л ит ч и а п о л у р о з р а ч н о сит
е клас а е к л ас
— з али вк а о т а н а л о ги ч н о г .
а об о
с StringFormat й клас п в ы р ав н и в ан и я
с и н к а п л ис у е р
т м о д ет , ори ен ацт и
я е тк с а
ы п о форм аит рован и , ви д обрез к
и е тк с
ю в ы в ои д м о г а пр
о ек т с и н ев о з м о ж н о
а -
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — и чгерсафикй и нт е й рс ф но в г поклени я
ст и п о л н о сь т ю в ы в ес т и ег о в з адн н у ю о б л а сьт ) , д ы п о п у р а в л ен и ю п о к аз о м . Т ак , в ы м ож ет г ир д у м п р и н ев о з м о ж н о с т и п о к аз а си м в о л в в аю с т я адн н ы м ш р и о фтм . К лас с и с п о л ь сз ет у И З П жнергу ы х О Д тО е м В D rawstring клас
221 zyxwvutsrqpo
а такж е п р ое д с а т в л я е т м о ет е з а тд ь з а м ен у о нд о г о ш р и тф а , есл и эт и си м вол ы н е п е ор д ж и я в к ач есвт е п а р м ет а в онд о м а G raphics.zyxwvutsrqponmlkjihgfedcbaZYXWV
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA с TextureBrush
л аК с
К лас с TextureBrush п оз воляе т п р о и з в о ид т ь з али в к у р а с то в ы м р и нсу к о м ил и е тк р с у о й . П р и и н и ц и ал з ац и и о б ъ ек т а к лас а TextureBrush в к о н ксроту е н е о б и хд м о з а тд ь э к з ем п л я р к л ас а image. В кач евст е э к з ем п л яр а к лас а image м оуг т вы п уста ь ка к рарстовы е и з о б р а ж ен и я (Bitmap), та к и м аетфй л ы (M etafile). Эот , в сво ю о ч ер ьд , п реодсатв ляе т п р о г ам и ст у о гр м н ы е воз м о ж н о си т : н ари сова в з ам ы словыат й зуор , в ы м ож ет е п р о в ид т ь н а д н и м раз ли ч н ы е рт а н с фо р м а ц и и и и сп о ль з о в ат ь э о т т з у о р л д я п о с ю л уе д щ е г о ри со в ан и я .
е П р и ч с л е ин
я GDI+
П ом и м о к лас о в б и л и ое к т а GDI+ соедрж и т бо ль ш о е к о л и ч е вс т о п р ое д п р е е дл н н ы х zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA и н ей л и с ч е п р (Enumerates) G DI+ , и сп оль зю у щ и с х я в к о н кс р о т у р а х и м о ае т д х н е к о тр ы х к лас о в . Н ап ри м ер , п ер ч и слен и е D ashstyle оп ре ед л я т си т л ь р и со в ан и я ли н и й — ри сован и е н еп р ы в н о й л и н и ей ; л и н и ей с о тящ е й и з точ ек ; ли н и е й ш рит- х очтка- очтк а и дгриу м и ис т л я м и л и н и й . К с о ж а л ен и ю п ер ч и с л ен и я сп и со м о ж ет
, объе м а нд о х G DI+ , п оэмт к в се е п о ч л иу т
х п ер ч и с л ен и
й л аг в ы н е п о з в о л яе т п орд б н у в ат б л . 5.1 м ы п ри вод й G DI+ . П о лн у ю и н фо р м а ц и ь в SDK и з п ри лагем о о к кн и г е ком п ак-т ид ска аТ б л и ц
,
о о с а тн о в и ь т с м ли ш ь алф в и нт ы ю п о п ер ч и слен и я .
я н а й м в ы
5.1. еПр чи с лени я
GDI+
BrushType
DashCap
Flushlntention
ColorAdjustType
DashStyle
FontStyle
ColorChannelFlags
DriverStringOptions
Hatch Style
ColorMatrixFlags
EmfPlusRecordType
HotkeyPrefix
CombineMode
EmfType
ImageCodecFlags
CompositingMode
EncoderParameterValueType
ImageFlags
CompositingQuality
EncoderValue
ImageLockMode
CoordinateSpace
FillMode
ImageType
222 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
аб Т л и ц а
5
л ав Г
5.1 (оокнчаи е)
InterpolationMode
PathPointType
StringDigitSubstitute
LinearGradientMode
PenAlignment
StringFormatFlags
LineCap
PenType
StringTrimming
LineJoin
PixelOffsetMode
TextRenderingHint
MatrixOrder
RotateFlipType
Unit
MetafileFrameUnit
SmoothingMode
WarpMode
MetafileType
Status
WrapModezyxwvutsrqponml
PaletteFlags
StringAlignment zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP
сон т а К
ы и струк
ы GDI+ zyxwvutsrqponmlkjihgfedcbaZYXWVU
в и п ер ч и с л ен и П ом и м о к лас о к о н ас н т т и в о с ем ь п р ое д п р е лд н н ы C olorP alette о п редля т м н о ж е св т п али р ут .
рП а т к и
й GDI+ соердж и х р кс у т о ц в о ет , котры
а иасвлиозпнь
П о сл з о в ан и
е к р а то г я б и л и о е кт
е и екс гчи афр
К с ал фи ч е с к и п р ес а д т в л н
с G raphics о бесп еч и в ае х п ри м и т во ы в таб л
а в GDI+ п ерй д и в п ри кнлад ы х п р и л о ж ен и ях
д
м к п ракит ч ески
м в о п р о са
о а ю
т бо ль ш о . О сн овн ы . 5.2.
О п и с а ни
DrawArc
Мо ет ли п ан с ет
DrawEllipse
М о ет р ен уг о н и л ь
-
в е р аз н о бр аз и
е м о д ет
5.2. М е т оы д
м и сп о ль
.
х о в мит р п
аТ б л и ц М ео т
е к о л и ч ве с т , рксут т ц во ет у
я
о э крс у
и на в о с и Р
т о гр м н о . Н ап р и м ер е с о а тв л я ю
е м ое т д ы с п р и м и т в ам
ы р аб о т
р и с о вани я
в п о вы вод
и ч ге р с а ф и к х
у гар и в G DI+
п р и м и т и во
GDI+
е д о б е с п и ч в ае с о п р е д с ля т я о к чт а с е гм е н т я в грсудах д о б е с п и ч в еа й о б лс а т к
т р и с о в на и е с егм ент я о п и с ы в юа щ и м п р я м о уг н лиь о к м а s t a r t An g l e и конеча . Сегм ен т рис еут я приот т р и с о в на и и э ли п с а
. илЭп
е э ил п с с вп и с а
а э ил п с
а (дигу) . лЭ . ьлач Н я sweepAngle зда в час о в й среклт и
а б е з зилавк н в задющ и
и т в ну й прмя о
-
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — и чгерсафикй и нт е й рс ф но в г по клени я
аТ б л и ц М ето
д
Оп и с а н
DrawPie
д о б е с п и ч в ае м о г о п р я м о уг н и л ь к м s t a r t An g l e и конеча м ен т ри с ует я приот Мо ет п о с ле дн Мо ет с п л ай н )
д о б е с п и ч в еа . Дл е о т кч т поср тен
ы е р тч б де у DrawBeziers
М о ет
М о ет
д о б ес пичвеа
DrawLines
М о ет е ди н ы
д о б е с п и ч в еа
Мо ет вр н е т у
д о б е с п и ч в еа
DrawClosedCurve
а э ли п с а , о пи с ы вае а с о ет рк а э ил п с я в грдасу х я м са и
а . Сег
в о к р ди н а а с о е д и н ся т и н е про и с х
й о б л ас т
М о ет бе
у с о б
М о ет з ал и в к
д о б ес пичвеа и вренту
М о ет дящ е м ощ ь рки в о й
д о б е с п и ч в еа й п о н аз д ы ю б у ки е с ч , персюдат
е рг п у
п р и вк ы
е н жну е о п р ны е
я дл м п о с л е дн я й криво
т я с -
е (кубиечс к ы м ин м у . П о ни
й м м
х Бе з ь . рП и з а я п о с р т ени я по я о к чт а о дн й кри й
й ли н
е м са и в й (поил н й
и а п рм я ы
х ли н й
, с о
-
)
т р и с о вн а
и врентуи
о пордкя
е прям о
т р и с о вн а
д о б е с п и ч в еа
, анлоагичы
й дл
и и с п о з уюс л ь т , приеч я с л е д юу щ е
т р и с о в н аи
й о б лс а т
М о ед т о т й кри во
т р и с о в н аи к он
й е Бз ь й Безь я и дв а
, окнеач я вортг
а ео ч т х р иквы х
х д м еж
з зали вк
е р ик в о й криво
я ондо
я п ер в о
DrawLine
DrawCurve
, ис пзоуль а м н о г у и ль к а р в е н ту
т р и с о вн а
с л е д о н ы в ь та во й явсляет
DrawPath
я о тк ч
я п о с р т ени и — наялчь а крива
д о б е с п и ч в еа и м са и в
д ан и
DrawRectangles
е с ое т кр . наьлчН я о к чт я sweepAngle зсдает в чса ов й сретлк и
т
DrawBezier
DrawRectangle
т р и с о в н аи
д с р от и т м н о г у и ль к к TPoint s. ерПва й о т кч й . илаЗвк
о е чт ди
zyxwvutsrqp
5. 2 (оокнчаи е)
е
М ое т
DrawPoligon
223 zyxwvutsrq
е п р я м о гу н и л ь к
а бе
з з ал и в к
и
и т р и с о в н аи х о б л ас е т т р и с о в н аи й о б л ас т т р и с о вн а м о а ткч х с п л ай н о в ) я в м са ив
е м са и в
а п р я м о уг н и л ь к
в
й е гиечсокргфа
о пту
и (Path) б е
з
и е е н о с г л аж м (сивна глж . Тоичк , задющ и е TPoint
й рки в о й е пр о и с хд е д е п н ри о х ж
, про х т с по
е
й м о дет у DrawCurve дл я ри с о вани я заркы й zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE
С е лу д т з а м еи т ь , чт о н екотры е п р се а д т в л н ы е в атб л и ц е м о е ыт д , соз а дю щ и е з ам к н ыт у е к о н рыу т , н е п рои з вояд т з али в к у в н р т е ун и х о б л а с е тй Э т о о б ъ я с н я се т я ет м , чт о в GDI+ , в олит ч е о т сартог о G D I, ввенд а р аз би в к м о е тд в , п рои з воящд и х з али в к у и н е п р о и з в о я щд и х е . М оыетд , п рои з вояд т п р е фи к с F ill и в оаслть н о щ и е з али в к у гр а ф и ч е с к и х п ри м и т во , и м ею н и че м н е ол и т ч а ю с т я о т ат к и х ж е м о е тд в , и м ею щ и х п р е фи к с Draw. Н ап ри
. а м -
м ер л а с ит
, м оет
Н иж иксеч фарг
д DrawRectangie ри есу , а м оет д F illRectangie ри есу
е п р а с в е тд л н
ы м ыо д ет
т п р я м г о ул ь н и т ег о с з али в к о й
, п рои з воящд и
к бе з з а л и в к . е з али в к
и в н р ет у н е
у в н р те у н и
5zyxw
л ав Г
224zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
й об х о б л а ес т
-
й zyxw
:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ FillClosedCurve, FillEllipse, FillPath, FillPie, х ПрИМТВО FillPolygon, FillRectangie, FillRectangles.
Н а ри с . 5.4 п ри вед р аз н ы х гр а ф и ч е с к и
н р ез л ь а у т х п ри м и т во
т и сп о ль з о в ан и я ад н н ы х м ое т д в п о вы од у .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO
Demo 2 : Ратоб а с ми кес чи фар г и ма в пмит р и ЕЗ Е zyxwvutsrqponmlkjihgfedcbaZ if zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Ри с
В ли ст н г п р и м ер а к а л от г Л и с нт
. 5.4. Воыв
д гиесч к рфа
е 5.3 п расветдлн ы и з б р ан ы , п олн ы й в ар и ан т в ы м о ж ет е Source\ Ch05\ ExO2. г 5.3. Выво
д исе гчк фра
х прим ивот
х прим ивто
е н йа т
е м сте а и о с н хд о г и н а п р и л а г ем о
в
о ек т с м к о м п а- к т и д с к
а а дн о г
в
procedure TForml.PaintBoxlPaint(Sender: TObject); Const dash : array[0..3] of single = (1, 1, 5, 4); points: array[0..4] of TGPPoint = ((x: 0 ; y: 150), (x: 60 ; y: 100 ), (x: 115; y: 150 (x: 180; y: 100 ), (x: 230; y: 150)); var R : TGPRect; Pen : TGPPen; // т с и К ь path : TGPGraphicsPath; // Ги к с е ч и ф а р й т у п ь
о е в
GDI+ — ги черсафикй
и нт е й рс ф
но в г
поклени я
225zyxwvutsr
p i , c l , с 2 , p2: TG PPoint; Image
: TGPImage;
// Изображени
е
H atchBrush zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA : TGPHatchBrush; // Кист ь - двухцветны й узо р / / Н а осн в
е битов г
// шаблон TextureBrush : TGPTextureBrush;
// Кист
ь - текстур
GradientBrush : TGPLinearGradientBrush;
// Кист
ь - градиен
SolidBrush
// Кист
ь - непр ывна
// заливк
а
: TGPSolidBrush;
о
а а т я
begin graphicsGDIPlus := TGPGraphics.Create(PaintBoxl.Canvas.Handle); // // Рисован //
е прим т во
// 2. Рисовани
в бе
з заливк
и .
е эл ипс
а (кагур
) с толщин
й лин
и 5 пиксело
в
pen:= TGPPen.Create(MakeColor(255, 0, 0, 0 ) , 5 ) ; R.X :- 60; R.Y := 1 0; R.Width := 50; R.Height := 50; graphicsGDIPlus.DrawEllipse(Pen,R); pen.Free; // 5. Рисовани
е криво
й (кубическог
о сплайн
) текс уро
й
image : = TGPImage.Create('01.jpg'); TextureBrush := TGPTextureBrush.Create(image); Pen := TGPPen.Create(TextureBrush, 5 ) ; // В качеств
е пер
// указывае
м текс ур
а у
graphicsGDIPlus.DrawCurve(pen, PGPPoint(@points), 5 ) ; pen.Free; image.Free; TextureBrush.Free; // 6. Рисовани
е кривы
х Безь
е градиент о
й заливко
й
R.X := 10; R.Y := ISO; R.Width := 190; R.Height := 100; GradientBrush := TGPLinearGradientBrush.Create(R,MakeColor(0, 0, 0 ) , MakeColor (0, 255, 0) , LinearGradientModeForwardDiagonal); pen:= TGPPen.Create(GradientBrush, 5); pen.SetStartCap(LineCapRoundAnchor); pen.SetEndCap(LineCapArrowAnchor); pi := MakePoint(10 , 200); // Начльна
я точк
а криво
й
cl := MakePoint(100, 100); // Перва
я контр льна
я точк
с 2 := MakePoint(150, 250); /7 Втора
я контр льна
я точк
р 2 := MakePoint(200, 200); // Конеча
8 3ак . 1325
я точк
а криво
а а й
226
л ав Г
5zyxw
graphicsG D I P lus.D rawBezier(pen , p i , c l , c2, p 2) ; P en .F ree;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA GradientBrush.Free; // // Ри н а в о с и //
е по в и т м и р
в с зо к в и л а
й
// 1. Зк в и л а а го т н е и д а р м GradientBrush := TGPLinearGradientBrush.Create(R,MakeColor(255, 0, 0), MakeColor(0, 0, 255), LinearGradientModeForwardDiagonal); R.X := 0; R.Y := 220; R.Width := 50; R.Height := 50; // Ре у с и м и пн ь л о г у о м я р к graphicsGDIPlus.FillRectangle(GradientBrush, R) ; // Ое а д ж о б в с м "кьтси " GradientBrush.Free; // 2. Зк в и л а а то р у т с к е й image :» TGPImage.Create('01.jpg'); TextureBrush := TGPTextureBrush.Create(image); R.X := 60; R.Y := 220; R.Width := 50; R.Height := 50; graphicsGDIPlus.FillEllipse(TextureBrush,R); image.Free; TextureBrush.Free; //He е а в ы б а з м со м а е го н в а л graphicsGDIPlus.Free; end;
е — от и д о б в с
ь т я м а п
ь
end.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
тобаР
а с изображениям
и
Дл
я р аб о т ы с и з о б р а ж ен и ям и , ка к бы л о р ан е е ск аз н о , в GDI+ созад н к с ал image. Дан ы й к лас с п р ое д с а т в л я е т п р о г ам и ст у о гр м н ы е в о з м о ж н о ст и п р аб о т е с р аз ли ч н ы м и и з о б р а ж ен и ям и . П ом и м о р або т ы с р аст м и и в о ек р т ным и и з о б р а ж ен и ям и , клас с image, н ап ри м ер , п оз воляе т с о з ад в т ь н а о сн о в и з о б р а ж ен и я ег о м и н и - п р о см т р (Thumbnail), работ ь с гр а ф и ч е с к и м и оф р мати , п оердж и ваю щ и м и р ах н е н и е н ес к о л ь к и х к а ир т н о к в он д о м фа й л е п у р а в л ят ь ц в о ет ы м и а рх кет и с т к а м и и к а ч е вс т о м и з о б р а ж ен и я с по м ощ ь ю к лас а ImageAttributes.
с о е , -
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — ги черсафикй инте й рс ф но в г поклени я
я вы вод а и з о б р а ж ен и G raphics, и м ею щ и л яю щ и х п о - р аз н о м фо р м а ц и ю , н ап ри м ер го у л ь н и к а и л и п а р л е о гр а м а
я щ с у е св т у
Дл
В осн овн о
й ш енс т ца д т у в ы в ои д т , вы воид т
м вари ан т
т в с ег ь п ер жг у н ы
ы м о едт
ь и з о б р а ж ен и ь и з о б р а ж ен и .
227zyxwvuts
о ио д
н м о ет д Drawimage клас х в ер с и й вы з ов в и п оз в е о щс у е с в т л я ь ег о р т а н с е и даж е в в и д е р а з в ер н о тг у о п р ям о
в Drawimage делсят
я н а дв е к аегто ри
а -
:
1. М еотыд , п оз воляю щ и е в ы в ои д т ь и з о б р а ж ен и е и л и е г о ч ас т и в п р ям о го у л ь н у ю о бласт ь с в о з м о ж н о сь т ю м а с ш а бт и р о в а н и я п о дву м к о ри д н а т н ы м о с ям . П ожхи й э фек т вы од а и з о б р а ж ен и я м ы м ож е м п р о и з в е си т и сп о ль з у я м оет д stretch Bit сатро г о G DI, кодг а п р о г ам и с т м ож е т вы ю п о л ск у . В олит ч и е о в ес т и и з о б р а ж ен и е , раяснт оеу , н ап р и м ер , в узк у с ат р о г о G DI, вы воид вш ег о а тк и е и з о б р а ж ен и я с п о г р е ш н о ся м т и п ро и со в к и , н овы й GDI+ п роедсатвляе т бо ле е ш и рок и е в о з м о ж н о ис т , в част н о ст и в о з м о ж н о ст ь и н ер тп о л и р о в а н и я (сглаж и ван и я ) и з ображ ен и я пр в ы в о ед . 2. М еотыд , п оз воляю щ и е в ы в ои д т гр а м . В асрто м G DI п обдн а Дл я работ ы эит х моетд в в к ач есвт с я м ас и в и з 3- х отч ек , образю у щ и от ч к а в ы ч и с л яет я а в о т м аи ч е с к и Н ес м ор т ес й т ш и н ат ы нфу к ц и о н а л ь н о сьт П р о се й т ш и п р а с ве т д л
я н а а тк о е р та н с фо р м а ц и е п р ео б а з о в а н и
е м н о г бр аз и
ь и з о б р а ж ен и я н фу к ц и о н а л ь н о с т
, т и
е и л и ег о ч аст и в п ар л е о ь свот у а л а во бщ е в м о е тд а Drawimage требту ы п ар л е ограм а . Чвет ра
е п а р м ер т о х в ер ш и н
. я
.
е в ер с и й м о е дт а Drawimage, н ек отры и и з о б р а ж ен и я чл уш е п р о в ид ьт , и сп оль з у я GDI+ и л и нфу к ц и , п реодсатв ляю щ и
е п ро я к о рид е п о дбн у
ю
. й п р и м ер н в ли ст н г
, п рои з воящд и е 5.4.
й з азгрук
у и з о б р а ж ен и
я и з фай л
а и вы вод
,
! zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Л и с т и н г 5.4. Ввыо д изобрае жни я
Image:= TG P Image.C reate('И з о б р а ж е н и е . JP G ') / / ы оВ в д и з о б р а ж ен и я ка к ест ь graphicsG D IP lus.D rawimage(image, 0, 0) ; Image. F ree;
В дан о м п ри м ер р а з о би р а т м в аш ад в т ь и з о б р а ж ен и Д але гр а ф и к
е м ы р а с м о р ти .
е и з ображ ен и е в ы в ио д с т я в сам о е в н и м ан и е н а то , чт о в э к з ем п ляр е и и з в екотрн о г о фай ла . м и н е рт с н ы
е в о з м о ж н о ст
;
м внерх е клас и G DI+ , св яз ан н ы
м лг у у э к ран а а Timage м ож н е с вы од
. Е щ о со з
е
м
-
228
5zyxwvu
л ав Г
, зпаис
о С з н ад и е
ь и вос произведн
е мйоал фа ет
в
zyxwvutsrqponmlkjihgf
М а еф т й л ы , и л и айф л ы с з а нд ы м и п о с л е д в а лт ь н о с я м т и гр а ф и ч е с к и к о м ан д , п ояви л с ь е щ е в с ам о й п р в ео й в ре с и и Windows. К он ц еп ц и я а мте аф й л о в та к уадч н о з а р ек о м ен о дв а л а сбе я в п оюслуед щ и х в ер с и ях , чт о м ы ж у н е п расевдтля м с еб е о к т а з о т дан о й тнех о л ги . М афйет л ы р а с п р о с та н и л и с ь в ез д , н ачи н а я о т о фи с н ы х п р и л о ж ен и й и з ак н ч и в а я CAD- и Г И С с и е мт а и . Д ей свти ель н о , вы бран а я к о н ц еп ц и я м а е фт й л о в о ч ен ь п ро с т а — в ы з ап и сы в ает е гр а ф и ч е с к и е ком ан д ы в фай л и в л ю б о й м о ен т м оже т е в ы се т и и х н а лю бо е усрто й свт о в ы в ао д . В олит ч е о т расртовы х р и нсу к о м а фе т й л ы н е п ри вяз ан ы к раз реш ен и ю усртой свт а в ы в оа д , дл я к отр г о он т л е гк о п в о ь е др а г т с я рт а н с фо р м а ц и я м и м ас ш а т с о з а дв л и с ь , п оэ тм у м о гу би р о в ан и ю . Р аз муестя , э т о н е касет я р а с то в ы х к о м ан д , котры е а кт ж м уо г т п ри свтоу а ь в м а е тф й л а х .
х е в и е
и од в л ь н о о гр а н и ч е н ы й фор е п ер в ы е в ре с и и Windows п еродж и вал е м а ефт й л ы п е р од ж и в а л и т м е та ф а й л о в — Windows Metafiles. Дан ы 16- ибн т у ю к о р и д н ан т у ю с и ем т у , н е соердж ал и и н фо р м а ц и и о раз еш ен и и рс т о у й вс т а вы вод а и п о з в ля и з ап и сы в ат ь н е в с е с щ у е с в тю у щ и е к о м ан д ы GDI. Т ак и е м аетфй л ы сщ у есювту т д о си х п о р и и м юе т расш и рен и е WMF. С ам ы ма
П о мре е п р о дл ж ен и п р л ео д ж н ы р те б н о я с т м с гл а ж и в а н и в ы н еж д у ы ш и р ен ы й м о тс и бы л н аб о р з ап и се в о все х о п ерац и о н н ы
и фо р м а п р л е од ж
я раз ви т я оп ерац и он ы х си ест м в ск о р е ок аз лось , чт о и т EMF н е уодв лето р яе т п о л н о ьс т ю по й в Windows 95 фо рм а р а з б оч т и к о в (н ап ри м ер , EMF н е сроахн яе т и н фо р м а ц и ю о гр а ф и ч е с к и х п ри м и т во ) . Дл я эотг о п р о г ам и ст ы Microsoft бы л и р асш и р т ь о р и г н аль н ы й н аб о р з ап и се й EMF. Т ако й р ас т п ч и о лу л н аз в н и е EMF+ . Т акж е л д я о б р на т о й с о в м еи с т й вдо й н о й н а л ьу д н ы й фо р м а т (Dual EMF+ ), соердж ащ и ы так о г о фо р м а т а к о р екн т о ок т р ы в а ю с т я й EMF и EMF+ . Ф ай л х си есмта х Microsoft, н ачи н а я с Windows 95.
В ол и т ч е о т с а тн ад р н т о г о G DI, н овы й GDI+ п реодсатв ляе т р а з б оч т и к у з н а ч и е лт ь н о бо ль ш и й в ы бо р з а п и с ы в а ем ы х п о с л е д в а т ь н о се т й рг а фи ч е ск и х к о м ан д , корты е м ож н о с ро а х н и т ь н а ди с к в ви д е маефтй ла , оятх , пр и ж ел а н и , в G DI+ м ож е т з ап и сы в ат ь и ори г н аль н ы е EMF. П р и эот м вс е ыв з о в ы гр а ф и ч е с к и х к о м ан д GDI+ буд т р т а н с л и р о в аь т с я в н або р к о м ан д а ст рог о G DI. В н ов м п р и м ер п ри м е р п о вы вод о и хд т в м а фе т й в ио дс т я н а э кра Д ан ы й п ри м е т и н а п ри лагем о
, п расветдлн о у гр а ф и ч е с к и л с и м не н СЬ Щ МО О П р п р и ев д м к о м п а -к т и д с к
м в ли ст н г е 5.5, м х п ри м и т во . В н ов м м Sample.wmf, п от м а дн ы Ю модет а Drawlmage объек т а н ч а си т ч н о
, п олн у е в калтог
ы п е р а б о лт и а ср т ы п р и м ер е вы во д п рои с й м а ф ей т л в о сп ро и з G raphics.
ю в ер с и ю п р и м ер а в ы м о ж ет е Source\ Ch05\ ЕЗО х .
й е н йа
-
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — графическй интерфйс новг покления
229
Листн г 5.5. Работ с метафа й л о м \zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA // Создае
м м е т а ф й л
, куд
а буде
м вы одит
ь графическ
е команд
ы
metafile :- TGPMetaFile.Create('Sample.emf) ; // Создае
м объек
т Graphics дл
я вы од
а в метаф й
л
graphicsGDIPlus := TGPGraphics.Create(metafile); // // ПРОИЗВ ДИ
М ВЫ О
Д
II
,
// Создае
м клас
с "к и с т ь
"
pen:= TGPPen.Create(MakeColor(255, 0, 0, 0 ) , 1 ) ; R.X := 0; R.Y := 10; R.Width := 50; R.Height := 50; // Рисуе
м прямоуг льни
к
graphicsGDIPlus.DrawRectangle(Pen,R); // Рисуе
м лин
ю
graphicsGDIPlus.DrawLine(Pen,R.X,R.Y,R.X+R.Width,R.Y+R.Height); // О с в о б ж д а е
м "к и с т ь
"
pen.Free; / / H e забывае
м само
е главно
е - освоб дит
ь памят
ь
graphicsGDIPlus.Free; // П р о и г р ы в а е
м метаф й
л
graphicsGDIPlus := TGPGraphics.Create(PaintBoxl.Canvas.Handle); graphicsGDIPlus.DrawImage(metafile, 0, 0 ) ; graphicsGDIPlus.Free;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
а и м са ш баитровн
бО р езк
К лас с G raphics о бесп еч и в ае ры е в ы м о ж е т е и сп о ль з о в ат Д е й св т и е э и т х м о едт сатв л е н н о г о в ли ст н г Л и с нт
г 5.6. кзбер О
е и зеноиб раж
в лч шу е 5.6.
т н ес к о л ь к ь л д я о б р ез к е р а с м о р те
а и м сшаинборв т
й о в ар и н о т и и м асш абти рован и ь н а п ри м ер
zyxwvutsrqponmlkjihgfedcbaZYXWVU
в м о едт
в Drawimage, кот я и з о браж ен и й о к оа д , п ред
е и онсдх ог
е иине ожзбра
й
procedure TForml.PaintBoxlPaint{Sender: TObject); var Image width, height
: TGPImage;
// Изображени
е
: UINT;
// Разме
р
NewWidth, Newheight : UINT;
// Новы
й разме
destinationRect: TGPRectF;
// Област
ь
р
. -
230
Глав
WidthCrop
:UINT;
// Ш и р н
а обреза мог
о кус
HeightCrop
:UINT;
// Высот
а обреза мог
о кус
OffsetWidthCrop :UINT;
// Смещ ни
е п о шир н
OffsetHeightCrop:UINT;
// Смещ ни
е п о высот
5zyxw а а
е е
begin // Создае
м объек
т Graphics
graphicsGDIPlus := TGPGraphics.Create(PaintBoxl.Canvas.Handle); Image:= TGPImage.Create('И с т р е б и т е л ь . JPG')
;
width := image.GetWidth; height := image.GetHeight; // Рисуе
м ориг наль у
ю картинк
у
graphicsGDIPlus.Drawlmage(image, 0, 0 ) ; // Выводи
м эт
о изображени
е с 20 процент ы
м уменьшени
м
NewWidth := Round(width / 1.2); NewHeight:= Round(height/ 1.2); destinationRect := MakeRect(0,height, NewWidth, NewHeight); graphicsGDIPlus.Drawlmage( image, destinationRect, // Област
ь вы од й верхни
а
0, 0,
// Левы
й уго
width,
// Разме
р п о шир н
е исходн г
л исходн г
о прямоуг льник
о прямоуг льник
height,
// Разме
р п о высот
е исходн г
о прямоуг льник
а а а
UnitPixel); // Выводи
м кусо
к изображени
я (деал
м обрезку
)
OffsetWidthCrop := 250; OffsetHeightCrop:= 0; WidthCrop := 300; HeightCrop:= 200; // Обрати е внима е , чт о размер ы област и вы од а п о длин е и шир н // р а в н ы р а з м е р а м обреза мог о и с х о д н г о прямоуг льника . destinationRect := MakeRect(0,height + NewHeight, WidthCrop, HeightCrop); graphicsGDIPlus.Drawlmage(
е
image, destinationRect, // Област
ь вы од
OffsetWidthCrop,OffsetHeightCrop,
а // Смещ ни // угл
е о т л е в о г а исходн г
WidthCrop,
// Разме
р п о шир н
е исходн г
о прямоуг льник
HeightCrop,
// Разме
р п о высот
е исходн г
о прямоуг льник
UnitPixel);
о верхн г
о
о прямоуг льник
а а
а
GDI+ — ги черсафикй
и нт е й рс ф
но в г
zyxwvutsrqponmlkjihgfedcbaZYXWVUT 231zyxwvut
покле ни я
Image.Free; graphicsGDIPlus.Free; end;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
П о лн у в калотг
ю в ер с и ю п р и м ер а в ы м о ж ет е Source\ Ch05\ ExO4.
Н а ри с . 5.5 п ри венд ласт ь о б р ез к и . Р езльаут на ьл ч Н
я токч
а емс х а т р аб о т
а исондхг
е н ай т
и н а п р и л а г ем о
, п оказ ы ваю щ ая ы п р о гам
о ени з о б рж а
м к о м п а к- т и д с к
, ка к п рави ль н ы в ы м ож ет
е
о о п р е дл и т ь н а ри с
е уви едт
ь об . 5.6.zyxwvutsrqpon
я мС е щ е н и
е п о и
в л иа е р к т
OffsetHeightCrop
. . , .
мС е щ е н и
е п о горизлант
.
;
:
•
:
и
OffsetWidthCrop
Выс от о б л ас т
а и
Heig htCrop
WtdttiCrap
Ри с
л ш у ч еУ н и и гиреча фсик В п р ые д щ у е н и я . Дан ы гр а м и о с т в ш а бт и р о в а н и н и мя и р аст п о в ы ш ен и в ан и я расрт
е каеч ст в
а пр
. 5.5. Семх
и вдо в ы
х прим итов
е и зобр аеж ни
и
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR
й
в
м р а з ел д е м ы рас м ортел й п ри м е р уодв лето ряе , онд ак о у н ег о е с т и н а и з ображ ен и и . Д л я реш ен и я я к а ч е вс т а в ы в оид м о г а и ан ит али аси н г графи ч еск и
В ли ст н г е 5.7 п расветдл р еж и м б и к у ч ес к о н ай т и н а п ри лагем о
а об резк
н с ок у й и н е рт п о л я ц и м к о м п а к- т и д с к
и п ри м е т п р а ки т ч е с к ь щ с у е св т н ы п о яв л ю с т эо т й п р о б л е м о и з о б р а ж ен и к п р и м ер
р м а с ш а бт и р о в а н и я и з о бр аж е и вс е нжд у ы п р и к л ан д ы х п ро й ми н у с — п р и си ль н о м м ас я "з буч и к и " , св яз ан н ы е с и с к аж е ы в GDI+ врстоен ы с р евд т я — в о з м о ж н о ст и и н ертп оли ро х п ри м и т во . а п р о г ам ы
. П о лн у е в калтог
а -
, вклю чаю щ и й в GDI+ ю в ер с и ю п р и м ер а в ы м о ж ет е е Source\ Ch05\ Ex05.
Глав
232
сиР
нитс Л рп и в ы в о д
. 5.6. Пемир
г 5.7. Использвани е изображени
// Используе
р и н а в орибатшсам
я и к з е рбо
е оксечибу
и о к н усир
й иицялопретн
в
5zyxwv
zyxwvutsrqponmlkjihgfe
и
й м интерполяци
ю высок г
о качеств
а (бикубчесю
)
graphicsGDIPlus.SetlnterpolationMode (InterpolationModeHighQualityBicubic); graphicsGDIPlus.Drawlmage( image, MakeRect((0.9*width)*2 + 1,Height, 0.9*width, 0.9*height), // Област 0, 0,
// Смещ ни
е о т левог
// исходн г
о прямоуг льник
о верхн г а
о угл
а
ь вы од
а
GDI+ — ги черсафикй
и нтей рс ф
width , h eigh t , U n it P ixe l) ;
но в г
/ / Р аз м е / / Р аз м е
р п о ш ин р р п о в ы со т
Ка о тд
к в и д ет , лд я аснту овк и р еж и м м SetlnterpolationM ode клас к а ч евс т е п а р м е то в п р и н и м ае В ар и н т ы э л ем н о т в м о е дт а п арсвтедлн
233 zyxwvutsrq
по клени я
е и с о х нд о г е и с о х нд о г
о п р я м г о лу ь н и к о п р я м го л у ь н и к
а а
а и н е р пт о л я ц и и нжу о в о с п о л ь з о в ьа т с я ме а G raphics. М оет д SetlnterpolationM ode В т э л ем н т п ер ч и с л ен и я interpoiationM ode. ы в табл . 5.3.zyxwvutsrqponmlkjihgfedcbaZYXW аТ б л и ц
5.3. Пар м ет р ы
SetlnterpolationModezyxwvutsr
InterpolationModeDefault
InterpolationModeBicubic
InterpolationModeLowQuality
InterpolationModeNearestNeighbor
InterpolationModeHighQuality
InterpolationModeHighQualityBilinear
InterpolationModeBilinear
InterpolationModeHighQualityBicubiczyxwvutsrqp
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Примечан
К ал ес н и о ю ж , в GDI+ не т нов г л яю щ е г о с ма ы е выс иок е т а р е з ьл у ни я м р за б и о ч к т в к п о е др ж ц д ак и и GDI+.
Н а ри с н о м в и ед бки у ч ес к о
. 5.7 п арсветдл , а н а ри с й и н ер тп о л яц и
о п е р с и в т н ок г а д на о г
н вы во д и з о б р а ж ен и . 5.8 — от т ж е ри нсу ок и п р и умен ь ш ен и
ми ре П о мд т е и н е ж а рб о з и
о р т ьл фи ы п о иенртпо лир внаию о р т ль фи
а б деу
я б е з и н ге р п о л я ц и , вы енвд ы и о р и г н ал
р и ин авоз ь лосп в ин сави ж а л г
а Lancroz3, предо савт . нкдаО о п о завер т всротен а в но в ы
и в о р и г н аль й с и сп о ль з о в ан и е а н а 10%.
. 5.7. Оригна
V
я
л д о м са ш ба итровнаи
Пр и м е м е то д о
я в к л ю ч ен и щ е вс т у
т м о ет
-
м би
-
р испо л зь о в а н и я в zyxwvutsrqponmlkjihgfe слгиавнж я я
я
иР с
. 5.8. Иенизоб ржа
е пос л
е иенртпо ляци
и м са ш батиро внаи
Дл
е ре
я я
• >\ и з о б ерн аиж
Ри с
-
я р еж и м а ан ит али аси н г д setSmoothingMode ксал
а гр а ф и ч е с к и х п ри м и т во а G raphics. В к ач есвт
и я
е п а р м ет
в в GDI+ су а ме -
234
отд
5zyxwv
л ав Г
а и с п о л ь зс е т у я э л ем н SmoothingMode п арсвтедлн
т п ер ч и с л ен и ы в таб л
я SmoothingMode. В ари ан т ы э л ем н от в . 5.4.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP 5.4. Пар м ет р ы
аТ б л и ц
SmoothingModezyxwv
SmoothingModeDefault
SmoothingModeNone
SmoothingModeHighSpeed
Smooth i ngModeAnt iAlias
SmoothingModeHighQuality
SmoothingModelnvalid
В а дн ы
й м о ен
т в GDI+ н е щсу есвту
т р аз н и ц
ы м же д
у р еж и м а
и
SmoothingModeD efault, SmoothingModeHighSpeed И SmoothingModeNone — в с е ОН
в ы к лю ч аю п ри вы ч н ы Дл а сн т
т ан ит али ас и н е з бчу аыт
е к р ая
г п ри м и т во .
. И з ображ ен и
я в к л ю ч ен и я р еж и м а с гл а ж и в а н и ы SmoothingModeHighQuality ИЛ
асн т У о в к
а р еж и м
П ри м е л а г ем о
р п о с гл а ж и в а н и м к о м п а к- т и д с к
т ро в ы П
е пр
, нланок
т ош и бк
у в р ем н
О ч ер нд о с т з ом с л не д г
е о д си т га е а Drawimage. В , со тящ и й и т к о ри д н а т ы и вы вод а р ас ч и ыт в аю ст
: X,Y лев о г о п а р м ет
о в не р х г а м ас и в
.
я и зобр а еж ни
й а воз м ж . Дан а м ракде ь р о а тж е н и и сп ос бам и
я вы з ов м в с ег о ли ш ь о нд о й в ер с и к а ч вес т е п а р м ет а вы з ов а в дан н ы в TGPPoint, к отры й з тре х э лем н от отч е к о бласт и в ы в оа д . К о рид н ат я а во тм и ч ес к и н а о сн о в
а э л ем н о т , X,Y п равог а — X,Y лев о г
в о п р е лд я с т о в н ер х г о н и ж н ег
и п ер й м о ет , в сво ы чв ер т е п еранд
я юс л у е д щ и о гл у а и в к а ч в е с т о угл а и з о браж ен и я
м о бр а е по .
я я , д ю -
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB
П р им е а и ч н о ечс Х т
я с раз и ез н о б р аж рП
я м ас и в о гл а у
ь кон
х п ри м и т во в в ы м о ж ет е н ай т и н а п ри е Source\ Ch05\ ЕбО х .zyxwvutsrqponmlkjihgfedcba
ы и от рае ж ни
ь з а п о л н ен и
т
и вы п олн ен и я
нО д и м и з н ес о м н ен ы х од с т и н с т в GDI+ аслт а п р оас т я п е ро д ж к н ое с т й п о в р о тв , н аклон о в и о р та ж е н и й и о нс д х о г о и з о б р а ж ен и я н фу к ц и о н а л ь н о с т ь бы л а п р и щ су е р ан е , п ожйалу , то л ь к о графи ч еск и от р а м . Т еп р ь с п ом щ ь ю п ра ы р с от к код а в ы м о ж ет е с о з адв т п о веирт кал и и го ри з о н атли , н аклон ят ь и з ображ ен и е р аз ли ч н ы м а такж е в ы в ои д т ь е г о в п а р л е о гр а м . В с е э т о м н о г бр аз и ж рг у е н о г о м о е тд п с е ра т д я м ас и в о ч ер ь д , о п р едля от й точ к и област н ы х трех .
м п р и о б ра ет
я п ри м и т во в н жу о з а ед й с в т о а т И SmoothingModeAntiAlias.
а SmoothingModelnvalid верн е ю гр а ф и ч е с к и е в калтог
и оэ т
И
и и с п о з л ь в ан и
у з ам и ь е т я н а 45°, шлуч и дан ы
, чт о дл е вс ег х м оетд
я п р о сы т о и с п з о ль в т а
х троансмф аци й
, напри м ер ь м оедт
в у ва
с опатде
, пов р т
ы троансм ф аци т нео б хди м о с т
ь с о б с в ет н о
а и GDI+. -
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — и чгерсафикй и нтей рс ф но в г по клени я р н чу еч с к же
о р са ыи ч в т а и с де ла , дан ы
ни йже
ь о к р ди н т а ы о б с ал т и в ы о да т э т о з а вса . Модет ы о р та н с м ф а ц и й ж е ко д шлуч е вс ег о и с з п о в ьт л а
X,Y г е н жи н о ев о л г о угл
о левог
а е м с ха
о угл
, п о к аз ы в аю щ ая я п р и о п ер ац и я
, ка
к п р ав и ль н , н аклон
х п о в р оа т
а
о о п р е дл и т а и ортаж ен и я
X,Y огв арп
-
о вген рх
о угл
ь об .
-
-
а
а
иР с
от
а GDI+ авотм иат т р а с м о р ет н ы н и я ол н к а в и орта
и б ду
ь дл я с о здани . zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Н а ри с . 5.9 п ри венд ласт ь вы вод а и з о б р а ж ен и
X,Y ген хрв
, б и леокт
235
. 5.9. Семх
а о п р едлни
я о б л ас т
и вы о д
а
В л и сит н г е 5.8 п арсветдл н ф р а гм е н т и онсдх ог о као д , вы воящд и й п ер в н у е п о го р и з о н а лт и и о нс д х о е и з о б р а ж ен и е и ср т е б и л т я . П олн ы й и о сн д х ы й к о д п р и м ер а в ы м о ж ет е н ай т и н а п р и л а г ем о м к о м п а к- т и д с к е в к а л то г е Source\ Ch05\ ExO7.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Л ист ин
г 5.8. Пе р вор т
ы и повр т
ы изобрае жни
Image:= TG P I m age.C reate('И с т р е б и т е л ь . JP G ') ; widthOrig := image.G etWidth; h eigh t O rig := im age.G etH eight; / / Р и е су м о р и г н аль н у ю к а р ит н к у graphicsG D IP lus.D rawlmage(image, 0, 0 ) ; / / и д оы В в м и з о б р аж ен и е , п е р в е р н тоу е п о г о р и з о н та л / / н х иВ р е й вл е ы й уг о л вы и од м г о и з о б р а ж ен и я d e st P o in t s[ 0] . X := width Orig * 2; d e st P o in t s[ 0] . У : - 0;
я
и
л ав Г
236
5 zyxw
IIzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Правы й левы й у г о л выводим г о изображени я destPoints[1].X := widthOrig; destPoints[1].Y := 0; // Нижн
й левы
й уго
л выводим г
о изображени
я
destPoints[2].X := widthOrig * 2; destPoints[2].Y := HeightOrig; // Выво д zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA graphicsG D IPlus.D rawImage(image, P G P P oin t(SdestP oin ts), 3)
Р е з л ь уа т
т р або т
ы п р о гам
ы п а в ср т л е д
Ри с
о С зн а и д
е э с ки з о
. 5.10. Врща ени
. 5.10.zyxwvutsrqponmlkjihgfedcbaZYXW
н н а ри с
е и оени ржат
е иенизоб ржа
в (м ин - прос м ротв
я
) и зеониб раж
я
К аз ло с ь бы , моетд ы м а с ш а бт и р о в а н и я ж у е п о з в о л яю т в ы в ои д т ь и з о б р аж е н и я в м алы х р а з м ер а х и п ри свт у е в GDI+ оедлть н о г о м а ен х и з м а лд я с о з анд и я э ск и з о в и з ображ ен и й (thumbnail) н еобяз еалть н о . Онд ак о в боль ш и н ст в е гр а ф и ч е с к и х фо р м а т в уж е п срмуедотн о р ах н е н и е э ск и з а в м ес т е с изо б р а ж ен и е м и н е т см ы сл а з а ж гр у т ь и о бр а ыт в ат ь и з о б р а ж ен и е , кдог а П ор с т о "втыа щи т ь " Ы В О Т О Г Й КИ С Э З . П о э т о м у ме т о д G et T h u m bn ailI m age Н Ж ОМ О zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA к лас а image явлсяет я н аи бо ле е бы рст м сп о с б м п чоенлу и я э ск и з о в . М о ет со т
д GetThumbnaiiimage и м е т всег у с о з ад в е м о г о э ск и з а , и п ар м еты
о дв
а п ар м ета , вли яю щ и
, з адю щ и е н а в о з м о ж н о ст
х ш ир н
у и вы ь п реы ва
-
GDI+zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA — и чгерсафикй и нт е й рс ф но в г по клени я
а с о з а нд и н и я п р о ц ес р а з м ер ы , а п ар м ет ы р ы в ан и я ; п о муо лч ан и н о ст ь и г н о р и р е с т уя . Елс з н а ч ен и е О , GDI+ п оасрт е ж ен и . Е сетв н о пр с я с о з адв т ь э ск и з сам о стеяль н о
я э ск и з а . П арм ет ы thumbwidth и thumbHeight з адю т callback и callbackD ata пу рав ляю т в о з м о ж н о сь т ю п ре ю callback и callbackD ata равн ы NULL, и эт а воз м ож и ж е п ератд ь в п ар м ет х thumbwidth и thumbHeight я и з в л еч ь го т в ы й э ск и з , рахн ящ и й с я в и з о бра и и сп о ль з о в ан и и н е п о я щд х е г о фо р м а т а ва м п р и е т д .
П о лн ы ло
й и но д с х ы й к о д п р и м ер а , соз аюд щ ег в JPG , в ы можте е н ай т и н а п р и л а г ем о г е Source\ Ch05\ ExO8.
Р ез л ьуа т
т р аб о т
237zyxwvutsrqpo
ы п р о г ам
о э ск и з м к о м п а -к т и д с к
ы п а в рс т е л д
н н а ри с
ы и з о б р а ж ен и
й фа й е в к а лт о
-
. 5.11.
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е э с ки з о в и з о б р а же н и й : • • • • • • • • • : •.I.IGTTI • .
| tf С о з д а н и
!- у
^
F 5 Documents and Settings
Ј 3 All Users (P^ оД к у м е н т Ј=> М о и р и с ун к 1
Sj^ Об р аз ц
ы и ы р и с ун ко
•
в
Ри с
с И п о л з ь ва ин лд
р э сикзо
е кэшироавын я питродзве слнть
я еш и н ы в о п
М а нех и з м р а нх е и я р и нс у к о и з о б р а ж ен и я в н ез а в и с м о р а хн е н и я п с рм уе д а ти в а е с р ту о й с в т а вы вод а (э к ран п р о и з в ои д т к о н в ер ит о в а н и ад н н о г о с р ту о й с в т а . Онд ак сам ы м в аж н ы м и з котры лД я п о в ы ш е н и я п рои з воид елть н ост р о й вст а вы вод а фо р м а CachedBitmap. Дл я работ з ат ь о р и г н аль н ы й р аст и з о б р а ж ен и я . Та к в п ри м ер с я н ек э ш и р о в а н ы
. 5.11. Прос м от
, п рсаедвтлн о й р аст
в иенизобржа
й
х расто
в и вдо в ы
а
ю п орда з м уев а т р ах н е н и в GDI+ п о м уолч ан и м о т с р т уо й с в т а вы вод а ф о р м ае т . Т ак о й в ар и ан т н у и в ер с а л ь н о с т ь пр и вы вод е р аст а н а раз ли ч н ы , п ри н ерт) , т . к . в эо т м счлау е GD1+ авотм аи ч еск и е и з о б р а ж ен и я , осн ован о е н а а рх к е т и с т к а о так о й м о ет д и ме т и сво и н оедскати , п ож айлу х яв л сет я н и з ка я п рои з воид елть н ост ь п р и в ы в о ед и вы вод а и бы л соз ад н з ав и с м ы й о т ст у т р ан х е и я р а с то в , п раседвтлн ы й в к лас ы с н и м н ж ну о п р и с о з ан д и и э к з ем п л яр а к л ас а кау т п р о и с дх т ь вы во р и усрто й свто , н а котр е едбу м в ли ст н г р и в кон ц
е о с тл ь к
е 5.9, в н ач л е п ь ят с о о ж е р а з п р о и з в ои д с т
е т е й х , . е д
т р а з в ы в ои д т
я вы во
д
238 гон ав ришэк он еч ню
Глав
о ра р т с а . Посл е кгоджа о вывод а пстеавытичсдо я вя м е р . Рт а ь л у з е ы тинаворитсе я п о м е щ а ю т с е GDI+ н а уквосир п ю пь л е н а .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA нитс Л
г 5.9. Оптимзаци
я в ы в о д
а рортса
5zyxwv
, артаз я в ниж
-
в zyxwvutsrqponmlkjihgfedcbaZYXWVUT \
procedure TForml.PaintBoxlPaint(Sender: TObject); var bitmap : TGPBitmap; // Кс а л с дл я хи н е а р я // у- о вг то см йи ос р тв са з е н о рр т с а width, height: Integer; cBitmap: TGPCachedBitmap; // Кс а л с дл я хи н е а р я кг о м е у р и ш э // о г о м е у(ор и з и м и т п ) рр т с а а j: integer; Tl, Т2 : TDateTime; h,ra,s, ms: word; begin // Се а д з о м ок е ъ б т Graphics graphicsGDIPlus := TGPGraphics.Create(PaintBoxl.Canvas.Handle); // Зе а ж у р г а м рт с а р // Ды н а й ртса р яс т е я л в я у- о в ты см йи ос р тв са з е н м м ы н а в о(н ризимитпое bitmap := TGPBitmap.Create('И. ь л е т и б е р т с JPG') ; width := bitmap. GetWidth; height := bitmap.GetHeight;ќ // Се а д з о м у- о в т с йыомритс в а з й й ы н а в (о оризимитп ) ртса р cBitmap:= TGPCachedBitmap.Create(bitmap, graphicsGDIPlus); // Ри н а в о с и е г о н а н вориз митпое о рр т с а а j :- 0; Tl := now; While j
V
J > * (2,1)
(- 1,2) Ј 90° 3 — 4 — >( Рис
П О рта ж ен и
е о н т о с и е лт ь н
. 5.24. П овр
о ос и X (р и с
т н а 90°
. 5.25).zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
* . ) ( ;_• , ) - - l then SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(FileListBoxl.FileName), SPIF_SENDCHANGE); end;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
и ц к н Фу
и каеритк
, крос у
а и он ки
к ) п раседвтляю
К а р ке т , рксоу р мы ш и и и кон к ш и е гр а ф и ч е с к и е о б ъ екы т , пу рав ляем ы н и х р або т а с ок н ы м и н ер тф й с о п рг у о й н фу к ц и й , п оз воляю щ и
х н а п р ям у
е о п ер а ц и о н о м едбу т о д б ну а ю п у р а в л ят
В таб л
и к а р ет и
, рксуо
. 6.21 п ри венд
и (п и котграм ы
ы н уф к ц и
т со б й н еб о л ь й с и с е тм о й . В ря д л и бе з . Windows р асп о лаг е т ь эит м и о б ъ е к атм и .
.zyxwvutsrqponmlkjihgfedcb
а и и к о н о к
6.21. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON Ф ц ну к и ар к е т и к , кру с о р а и и о кн
аТ б л и ц мИ
zyxwvutsrqponmlkjihgfedcbaZYXWVUT
я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О п и с а ни е
CopyIcon Copylmage CreateBitmap
о п К и р уе м о л уд
т о и нк
у и з д р уг о
о м о д лу
я в е т ук щ и
й
ь
оС з д ае и е н з о б р жа
т но в у
ю ио у к н е с аритбмау
, уркс о и дргуо
р и л и р а с то в о и зоенби р аж
о П з в л яе т с о з т ад ь н а о с но в е м са и в з н е ча и й ц в ет а р са о т в е е ин з о б р ж а но й ш и р н о й , выс о т й и рм фо оат д ан ы м ич с ло м ц во е т ы х п ло с к е т пси к ел )
CreateCaret
См
. атб л
. 6.16
CreateCursor
См
. атб л
. 6.16
Cr eat elc o n
оС з д ае и д в о и нч ы м
т о и нк
CreatelconFromResource
оС з д ае р ес у
т о и нк а с о пи с ани е
CreatelconFromResourceEx
н ла о А г и ч з а и с лю е к чн р аз м е р
у с аз ук н ы и ш б а ол н м
а д в о и нч ы е с задн м ц вет а (с з а й и б иот в н
м р аз м е р о м
, цмавет
р и з дво инчы и
х д ан ы
х а
и
и у ил
а цинк фу м отг ы иенизоб ржа
е я
и ру к с о м иокн
х
и CreatelconFromResource , чт о в не й мн ож о аз ук ы в т ь я
л ав Г
356
аб Т л и ц а мИ
я
Оп и с а н и
е
о С з е ад
т о и нк
Cr eat elc o nlnd ir ec t
у ил
6
zyxwvu
6.21 (оокнчаи е)
и ру к с о
р п о даны
м р у тс к
ы
ICONINFO DestroyCaret
еа н о и т ж ч У
т ек о б ъ
т рус к о
а кракет
DestroyCursor
е а о н и жт ч У
т ек о б ъ
т рус к о
а м ыш
Destroylcon
е а о н и жт ч У
Drawlcon
т и о к ун Cr eat eic o n, и о с вдаео б ж о и нк й
В ы в о ид ща н да л е ж г
DrawIconEx
т о и нк
Ext r ac t lc o n
а цник фу м крус о
В о з в р ща еа
й о б лас т
и о н ак
ю ю , при
у усротй в
и Drawlcon, рокм ь о п р ед л н ы е о п е р ца и а р ио к н
а
е о тг
, по и ан -
и и з за н ку о г
д о
а
ExtractIconEx
В о з в р ща еа о и нк
GetCursor
См
Getlc onlnfo
о П з в л яе ру с к о
т д е с р к и оп т
р б ошль о
и и з узанко г . таб л
о фай л
и м о к ел ан ь
й
т п и о чт у л
ь о р м и н ф ца
ю о ио к н
е ил
и
е
См
. таб л
. 6.16
LoadCursor
См
. таб л
. 6.16
. таб л
. 6.16
LoadCursorFromFile
См
Loadlcon
е а З г р уж
LookupIconldFromDirectory
В ы п о л н ея о каг т ш л уч е о н и т б р аж н ла о А г и ч от г
й ил а
. 6.16
HideCaret
о э з е к м п л яр е вс ег
, по зв ляе к и ил и крус о
SetCursor
См
SetSystemCursor
с ан в т У л и е
ShowCaret
См
ShowCursor
ю с по м о щ ь , знаим еам у
у косекнт
т д е с р к и оп т
й л фа
LookupIconldFromDirectoryEx
т п ам ь я т
у в клисенотк
т в ы п о н ли т
и
, с о зднау
о узанко м
н ла о А г и ч з в о л яе и е н з о б р жа
и
. таб л
См
т ионк
у и з файл
а о пи с ани
т по и с
к в дан ы а ио к н
х ио кн и ил и курс о р а т дл я теущк ег
о п о х ди я
я рес ру и ил
а и крус о , окрты
о су р о т й в
а Lookup Ic onld From Direc t ory, рокм т уазкт ь желаем ы е р аз м е р ы иокн а . 6.16 т с и емт ны
. таб л
. 6.16
. таб л
. 6.16
й крус о
р
а й а е -
357zyxwvuts
Windows API
П о сл н е к о тр ы
е то г
о ка к м ы к р ат х и з н и х н а к он к рнет ы
о о з н ак о м и ли с
ь с эит м х п р и м ер а х
и фн у к ц и ям и
, п ок аж е
м р або т
у
.
В л и с ит н г е 6.17 п ри вед н п р и м ер , вы воящд и й и кон к у тещк у ег о п р и л о ж ен и я . П ри м е р е дм о н с р т и ер у т и сп о ль з о в ан и е н фу к ц и й Copyicon и Drawicon. И осдх н ы й к о д п р и м ер а н о и да х с т я н а п ри лагем о м к кн и г е к о м п а к- т и д с к е в к а л то г е Source\ Ch06\ Ex22.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA : Л и с т и н
г 6.17. Полечуин
е ионк
и п р и л е о ж ни
: zyxwvuts я
procedure TF orm l.Button lC lick(Sen der: TObject); var IconCopy: HICON; {дл я рхан ен и я д е с к р и п от р а к о п им е р у й и кон ки } begin {с о з да е м пио к ю и кон к и п р и л о ж е н и я . .. } IconCopy := C opyicon ( Applicat ion .I con .H an dle) ; {...и п о к аз ы в ае м е } D rawicon (P ain tBoxl.C an vas.H an dle, (P ain tBoxl.Width d iv 2)- 16, (P ain tBoxl.H eigh t d iv 2)- 16, IconCopy); end;
С лю е у д щ и ед м о н с р т и р е у с и с е тм н ы п р и л а г ем о в ы п о л н ен и I Л ис т ин
й п р и м ер т р аб о т х р кс оу а м к кн и г я п р о г ам г 6.18. Полечуин
, со к ращ ен н ы у н фу к ц и х и и к о н к ах е к о м п а к- т и д с к ы п р а с е дв т л е иорм нф а иц
й к о д к о тр г о п р и ве д н в л и с ит н г и G eticoninfo, п очлаую щ е й и н фо р м а ц и . П о лн ы й и осндх ы й к о д п р и м ер а н о иа д х с т е в к а л от г е Source\ Ch06\ Ex23. Р ез льуат н н а ри с . 6.10. и о с и с те м н ы
х крусо а
х и иаонк
е 6.18, ю о я н а т
х
typezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA TIconTypes = array[0..8] of PAnsiChar; TCursorTypes = array[0..12] of PAnsiChar; const IconTypes: TIconTypes = (IDI_APPLICATION,IDI_ASTERISK,IDI_ERROR, IDI_EXCLAMATION,IDI_HAND,IDI_INFORMATION, IDI_QUESTION,IDI_WARNING,IDI_WINLOGO); CursorTypes: TCursorTypes = (IDC_ARROW,IDC_IBEAM,IDC_WAIT,IDC_CROSS, IDC_UPARROW,IDC_SIZENWSE,IDC_SIZENESW, IDC_SIZEWE,IDC_SIZENS,IDC_SIZEALL, IDC NO,IDC APPSTARTING,IDC HELP);
358
Глав
6zyxw
procedure TForml.ComboBoxlChange(Sender: TObject); var Thelcon: HICON; {дл я хране и TheCursor: HCURSOR; {дл я хране и Thelconlnfo: TIconlnfo; {дл begin
я дескрипто
а икон я дескриптор
я хране и
} а курсо а
я информаци
и икон
} и ил
и курсо а
}
{стирае м преды ущи е изображения , есл и есть } Imagel.Canvas.Brush.Color:=clBtnFace; Imagel.Canvas.Fillrect(Imagel.Canvas.Cliprect); if Thelconlnfo.hbmMaskoO then DeleteObject(Thelconlnfo.hbmMask); if Thelconlnfo.hbmColoroO then DeleteObject(Thelconlnfo.hbmColor); {елс и пер ключател м RadioButton выбран ы икон и , т о выдае м информаци ю о б и к о н е , выбран о й в ComboBox...} if RadioButtonl.Checked then begin {загруже
м выбран у
ю си темну
ю икон у
}
TheIcon:=LoadIcon(0, IconTypes[ComboBox1.Itemlndex]); {заполняе
м информацион у
ю струк
у о б это
й икон е
}
Getlconlnfo(Thelcon, Thelconlnfo); {про ис вы ае м икон у } DrawIconEx(Imagel.Canvas.Handle,0,0,Thelcon, 0, 0,0, Imagel.Canvas.Brush.Handle,DI_DEFAULTSIZE OR DI_NORMAL); end else {...иечан begin
, выдае
{загруже
м информаци
м выбран ы
ю о курсо е й си темны
й курсо
} }
TheCursor:=LoadCursor(0, CursorTypes[ComboBoxl.Itemlndex]); {заполняе м информацион у ю струк у о б это Getlconlnfo(TheCursor, Thelconlnfo); {про ис вы ае м курсо }
м курсо е
}
DrawIconEx(Imagel.Canvas.Handle,0,0,TheCursor,0,0,0, Imagel.Canvas.Brush.Handle,DI_DEFAULTSIZE OR DI_NORMAL); end; {очищае
м пол
е информаци
и Edit}
Editl.Clear; {заполняе
м п о л
е Edit информацие
if Thelconlnfo.fIcon then Editl.Text := 'Эт о и к о н к а 'x' +
й о курсо
е ил
и икон е
}
: ' + IntToStr(Thelconlnfo.xHotspot)+ IntToStr(Thelconlnfo.yHotspot)
else Editl.Text := 'Эт о курсо 'x' +
: ' + IntToStr(Thelconlnfo.xHotspot)+ IntToStr(Thelconlnfo.yHotspot);
359zyxwvuts
Windows API {вывед
м и з о б р а ж е н и
я с маск м
и AND и OR)
Image2.Picture.Bitmap.Handle:=TheIconInfо.hbmMask ; Image3.Picture.Bitmap.Handle:=TheIconInfо.hbmColor ; end;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
ITi- ПzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ие н ч лу о е им рцао иф н и о стсием ын х карсоу х и партмгоик м
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA