Программирование Win32 API в Delphi 5-94157-535-1

Введение в Win32 API. GDI+- интерфейс нового поколения. Simple MAPI - работа с электронной почтой. Video for Windows - р

287 109 50MB

Russian Pages 369 Year 2005

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

Программирование Win32 API в Delphi
 5-94157-535-1

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

Дм ит р л В аи м д и

й  Куза р  Ша пор

н в

П Р О ГМ А М И Р О В Н И А

Е

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

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—  рокытвае т   й фа о ди н   д р уг о й   п р о цес с   н е   с ме о ж п о лн е о  зрикыат е  й ла фа ;



 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. Оригна



я

л  д о  м са ш ба итровнаи

Пр и м е м е то д о

я   в к л ю ч ен и щ е вс т у

т   м о ет

-

м   би

-

р  испо л зь о в а н и я в 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