C++ Builder: Книга рецептов 5-9579-0091-5

Данная книга написана специалистами в области разработки ПО по материалам дискуссий на самом известном российском сайте,

272 121 24MB

Russian Pages 209 Year 2006

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

C++ Builder: Книга рецептов
 5-9579-0091-5

  • 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

С Л В Я Ч ЕА

В  ЕВ РМЕ ЛОА

C

+



,  ТАР

С   СОР ОК

А

B L I L D E R : zyxwvutsrqponmlkjihgf

 р е ц пт о в

н и К га

А УК И М О С КВ

И  ОРБА З А   •  2 0 0 6

Б К  32.973.- 018.2zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB е В с а я чл в  Еоаелмвр , Та р с  Сок р а C+ +  Builder: Кгин а  ротепц в М . : КИ ЦДУ - З ОБР А , 2006.  -   208 с . Д на а я  кн и г а  н ап и сан а  сп це и лам ст и   в  отсалб и   р аз к б о т и  П О  п о   риемтал м и с дк у й   н а   с ам о м   и н з тс в е о м   р ои с й к о м   с йа е т ,  п освщя не о м   C+ + Builder:zyxwvutsr ,  пронест о й   ак к   с п р а в о ч н и к ,  аюд ст я   п ри м е ы   ш ре н и я http:/ / bcbdev.ru.  В   кн и ег и тп и чн ы х   з ач д ,  авюст щ и х   в   п ро ц с е с   р аз к б о т и   п р и ло ж не и я   н а   C+ + Builder. Э т о п о з в е ля т   р аз чб о и т к а м   с к о н ц н е р и т ь ос в а я   н а   п н м т ре д о й   о б ли а с т ,  экон м я м е рв я  и  н е  овлеткаяс ь  н а  чнастио . К ро м е   о сн в н о й   м са ы   воп р с ,  юакс щ си х я   н а о сз д и я   п о л ь з е в атс к о г о   ин й е р ф ас т ,  акжт е   з ри а г с т в е я   р бо а т а   с   йа ф лм и ,  ор тсе м   и   о д ря м   нрев т у и х о с а лк в   VCL.  И занд и е   ос п т р е а в ж д я   к о м - п т а и к д ос м   с   п о нл ы м   о кд м   вес х  рса н р см е о т ы х  п рокевт . лД я  п росефи н альн ы х  раз рчбоит к в . Ткаж е  кн и г а  м оже т  бы т ь  п олзе н а  не д у тс а т м  и  асп и рна т м  сювустоещ и х   с п ц е и ла ь н й е о с т . В чя е с л а

в   Е р м о л а ев

, Т ар

C+ +  Builder:  К н и г

а  рце по т

- он бе ч У е онапчврс

 аине зд

К о р еко т М ак е

р  В . К ли м ен к т  О . Г о рк и н

с  С орк

а в

о а

ISBN  5- 9579- 0091- 5 «И Д   КДИУ Ц - ОРБЗ А 119049, М осква П опд и с ан Ф орм а П еч а т с лУ В с е  п вра И в ль е с т з а д Вс е  ннзави

» , Лен и н ск и

й  п р- т

„ д . 4, срт

о  в  п еч ат ь   11.07.05.  т  70*90/ 16.  ь  о фс . Бм уаг а   газ .  .  .  п еч : л .  15,21. Т и р а ж  3000. За к а а  з ащ и щ ен ы

. о   «И Д  КДИ У Ц - ОЗРБ»А я  пмнар гыо

х  по тк у дор

.  1А .  Т ел.

: 333- 82- 11,  [email protected]

н а п т ч еО

о  с  гыво т в  ОА О  «Щ ибрне акс 117623, М осква

х   и д ап о з и т в о я  тип ориафг я , ул .  Т и п о гр афск ая

в » , д .  10

з   1534

, © 2006. в  яюсялвт я  зниарво тгсеырам

и  товыгр м

и  ммкар

и ю увщ стс иев то

х   и ф рм

.

Ка Д ан а

я  кн и г

к  устеро н

а  эт

а  кгин

а

zyxwvutsrq

а  в  ви д е  сборн и к а  воп р со в  и  оовте . П о д  воп рс м  п он и мсает я ,  чсат о   вш а ж д йу собе я   н а   м а у ро ф х zyxwvutsrqponmlkjihgfedcbaZYXWV   http:/ / bcbdev.ru,  а   кажт е  н а х  фмаору , унчста и кма и   ы ор к т х   в яюл с т я  аорывт ; п о д  оо вте м  е  рше не и е  дна о й  пмелорб ы  вмсте е  с  ин оды хс м  кмо д . В  овте е  объсян те я  н е о   ак к  рше с тае я   на д а я   п р м о еб л а ,  н о   и  п моче у   он а  та к  реш сяает ,  а   кжа т е   л д я   ч ге о т  то т  и л и  и н о й  эа т п  в  е е  рше н и . П тчо и  дл я  кго жда о  рнер мтосаг о  в  кн и г е  воп рс а н  товсыет й  пкторе . нДа а я   кн и г а   о ис т т   и з  тре х   разелодв :  п рвеы й ,  н боельш ой ,  п освщя е н  C+ + Builder ще е  по тя й  вреси . Во- првые х , д о  си х  п о р  ещ е  з н ачильент о е  чи сл о  рзачирботк в  и сп оль ез у т  в  свое й  робта е   э т у   р и вс е ю   в с т др е а   р а з к б ои т , и  п р и  е е   и пс оьлз вна и и  воз н и каю т н ки е е  тн ди ортсу ,  ыро тк е  м ы  н е  слмго и  обой т и  сортн ой . Во- ыор втх , тем , кт о   и сп ольез у т C+ + Builder п носдле й , ш о сте й  вреси , такж е  ркеомн у д м   н е  п кстраоп у ь  дан ы й  разелд . П н е ир д в ы е   в   н е м   п ри м е ы  у д уб т   п о л зе н ы   и   в ам , те м   обел е   ч т о   в   ш о тс е й   в р еси и  и х жн м о о  ипсьзлотав ь  бе з  кика х  б ы  т о  н и  бы л о  и з мне и й : пртос о  в  н ов й  вирсе и  дл я  рше н и я о п и ы с м ве а х   п р ео л б м  п воия сл я  сна тр ды й  пт у ь  о т  Borland. ор В т й  разед л  соист т  и з  пронбд г о  оп и сан и я  н скеоьл и х  косал в  би блкеот и   VCL, ыро т к е  ли б о  ночнта сде о  и знвсет ы , ли б о  п о  кикам- т о  н пе он тяы м  п ри ч н а м  вы з ы вюа т а  раз рчбоит к в . н д отс ру и   в  и пс оьлз вна и и  и  тип и чн ы е  ош и бк и  у  ногр кте о  кг ур И  н каон це , тирте й  разлед .  Свнеобст о   о п и с ан и е  з аи н рсеоватш ге о   о р ав т в   воп р с а и  ег о  п робнд е , п ош вога е  рше не и е  с  комнериа тя и  к о  вмсе у  тумо , чт о  ком не и трова ь м ж он о  и  н льез я . С з ар у  п ри з н меа , чт о  кн и г а  н и  в  кое й  мре е  н е  пен утрд т  н а  пнло т у  отав х а  мреиат л . В о п р сы , расрмитвеы е   в  дан о й  кн и ег , оби трал с ь   мо р а в т и   п о  своме у   р м аз н е у и ю . Ел с и  в ы  счеита , чт о  м ы  з абы л и  о  чме- т о  раскзьт , о  че м  раскз т ь  бы л и  дожлн ы , и л и п р о ст о   с ч еи а т ,  чт о   сет ь   и н ерст ы е  темы ,  н е  освще не ы е   в  дан о й  кн и ег , п и ш и т е  н а [email protected].  М ы  п аорсемт я   ч ес ут ь   ш ав и   п н оа ж л е и я   в   ю п у о щ д с ле и х   и наз д и я х на д о й  и л и  в  н овы х  кн и ахг . Об о  вес х  з мачне ы х   в  кн и г е  ош и кба х  ткаж е  собщ ай т е  н а  [email protected]. и л кво р м у ф и г ру д р аз в е он т у ь кл о т иж у л с в а е л п о ст д р

а  уростен а   п р о м б ле ы х   и  кон реф ц и хя

о ры в т А

.

лГ а в О  ве рси

и  прошл

а  1

й  за м ол вит

е с л о в. .

.

ст о н а р ч з П ь  в  W2K/XP с  иеианвозльсп м SetLayeredWindowAttributeszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

 дюма у ,  в ы  влие д и  в  ныро т к е х  пн ежиорля х  пнчзоар ы е  онк а  и  ннревкая а  злав д и Я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е  воп р с  о  рилаезц и и  пнбо д й  пзочрниа тс . А  риланзево а  п зорчна тс ь  межо т  бы т ь м ув д я  спмаобси . Ои д н  и з  ни х  -  сжнол ы й , нн быо д у е й  и чно та дсо о  нир втеьлна ы й  - п р и м е н сл я я  пмаиртгсо и  в  смае итс х  Windows NT 4.0, Windows 95- Windows Me вьнюлкеоич т , н о  ег о  м ы ирт рав мс ь  н е е  бд у м  в  сзвя и  с  ньнлатсоу кае ю  н а  сн шдояге н и й  дне ь  дна ы х е ис т м  и  с о  сжоньл тс ю  рилазец и и  дна го о  спабос , а  во т  о  вор т м   п с ое б , дчно та со о н п и тор я м  и  н е  нчое ь н тмдо ур , м ы  пировмг . н иа ч Н а я  с  Windows 2000, в  Windows API вн еюч л к а  на в о я цнияк  у ф , zyxwvutsrqponmlkjihgfedcbaZY  SetLayeredWindowAttributes. н аД а я  фн цкиу я н е олв яъб а  в  Winuser.h ка к zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML б ес

BOOL SetLayeredWindowAttributes( HWND hwnd, COLORREF crKey, . BYTE bAlpha, DWORD dwFlags ); и  п оз веля з р ча н ы м

т  в  оп реац и он ы

, н чаи н а я  с  Windows 2000 и  дале , слеатд ь  окн о  пор ь  п роз чан ост и  може т   л и у ь р г ео в с я а т . П ыв р е й  пмтрае р   н цку ф и ,  hwnd, zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ  -   эт о  дксрие оп т р  окн а , кор т е  м ы  жеал м   тал е дс ь н ч а з п ор ы м . К  нко у сю пялтв ъ д ер я  оыбос е  тнавобери я : у  н ге о  джело н  бы т ь  унаелвотс н  си лт ь WS_EX_LAYERED. Си тл ь  межо т  бы т ь  уна теслво н  ли б о  в о  вмер я  снаозди я  онк а  фн цку и е й CreateWindowEx,  ил б о   н ц к у и фе й  SetWindowLong плсо е   н а з ио д с я   ок н а .  Пьклос у  м ы пиш е м   в  C+ + Builder, п рвые й   сп о б  дл я  н ас , я  счиаю т , н е  очне ь   на л е у к т ,  и  м ы  бе д у м и п с ь зл о т а в ь  уна тсовк у  си лт я  с  пщмо ь ю  SetWindowLong. , п ри че

х  симеасхт

м  и н е т си вн ост

о с н т ч ар з П

ь  в  W2K/XP с  ииенаовз сьпл

ор В т

  SetLayeredW indowAttributes, crKey, еялва тс пдер т   обс й р   н ц к уи ф и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED а  COLORREF, zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  о р т о к е  оеял пдер т  ц ев т  пзочрна тс и  дл я  онк а  (о б  эо т м  бе д у т . й  п армте ,  bAlpha,  оепля др т   пе стн ь  п роз чан ост и  окн а  п р и  и пс оьлз вна и и и  (рнсзяъае и я  тжка е  бу д у т  пн е дирв ы  н и)же . Меж о т  пирн тма ь  зн ечаи я а  0- 255. П р и  0 окн о  яс твеля я   п о лн ь с т ю   п ро з ча н ы м , п р и  255 -   п олн ьост ю . , чы ртве й   п а р м те ,  dwFlags,  оепля др т  ти п  прозчан ост и  окн а . М жео т ь  он д о  и з ю ущделс и х  з н ачне и й : й   т пм е а р

з н че а и

е  тип о  н и ж)е

зн ак с и Т т ре - а ьф л нч п з а о т р с и з  диап з он н п е р о з ча н ы м

И  н каон це п ир н и м т а • 

LWACOLORKEY

• 

LWAALPHA З н чае и

е   LWACOLORKEY  ралие з у .  Т о  еьст , говр я   ин ы м и  словам и а  dwFlags в  кв тсеча е  пзчнора г м  пр тмеа а  сеу.гК  В  эо т м  сча ул . н З е чи а е   LWAALPHA  еилзау р т   - а ь ф л ь нч п з ао р т с ь  вгес о  онк а  цилмоке , вн е  зивас мто о  чь сат . И не иств о ь  пчнзоартс и с те и рлур ге ь  вы ш е . Т пе р ь ,  внсеобт о ,  можн о   п р и у тс  C+ + Builder. Н а  монир т е  у  ва с  ожлнд о п о у Гр й  ринкопда к  м ы  вы иебар м  ви ь  спне т ь  пнтчсазор и  онк а  п р и  он еч м от П ж д ер е   че м  зктсап у ь   п кт е о р ,  авйд т ь  WS_EX_LAYERED. Во т  ок д  дл я  уна ст овле и

клю ч"а р п мт а е з н че а и п р о з ча н ы м зч н а р т с о ге п мои у н с л а в т ав и тс л

м  SetLayeredWindowAttributeszyxwvutsrqponmlkjihgfedcbaZYXWV

т   а т к   н аз ы в м ае у ю   "п роз ачн ост ь   ц о в гте , п р и  укзан и и   LWACOLORKEY  ка к   з н чае и о  ц тве а  бе д у т  иьсп злотав я  цт ев , онел пдеры е  вс е  в  окн е , чт о  зшарк не о  дна ы м  цмо тев , бе д у . А-а фьл нчтсазорп и  о т  ог т

, в  кока

й  ц ве м  пр тмеа

я   з н е ч иа

я й т

ь   -   тэ о   п о р а  т а  и л и  ина я а  bAlpha,  о  еч м ж у е

т  ршарксне

ь   к   п и р ак т е .  з иЗругат  бы т ь  н чте о  врод е  эогт . д  пнчзаортс и  онк а , а  пнок зу ло й  ринкопда е  "А-аьфл ь"пчнзоартс е   р а с м ои т ,  н као це я  сит ля .

о

е   о в сые т м  мнжо

й   п р о ке о иорл ру г е

т -

. , ка

к  уанст вли сате

я

SetWindowLong(MainF orm- >H andle,  GWL_EXSTYLE,GetWindowLong (M ainF orm- >H andle,  GWL_EXSTYLE)  |WS_EX_LAYERED); В  фн цку и

и  S etWindowLong пвыре й  пмтрае р  яс теявл м  сча ул е  си лт ь  унас илвте я  си ьтл . В  н ша е ы  пктеор а  -  MainForm.  G WL_EXSTYLE в о  вор т н ав л и е м   н ов е  з н ачне и е  дл я  расш и рен ы х   и ст ле SetWindowLong ое ял е д пр т  нов е  зн ечиа е  дл я  вгор т в тс е  зн ечиа я гье т р о  пр тмеар а  илаьзпвос и а  ртьл зуе

н а с и лв т е у мро ф

я  дикрсоеп т

м  окн а , лд я  кгор т о й  (и  еиневд тс йо ) м  пр тмеа е  отзенач , чт о  м ы  уа тс й   окн а . Тирет й   п а р м ет р  в  фн укц и и о  пар тмеа . В  нша е м  сач ул е  м ы  в  кеч а т  вы зво а  фн цкиу и  GetWindowLong. zyxwvuts я  дл

я  гнваол

GetWindowLong (MainForm- >Handle, GWL_EXSTYLE) | WS_EX_LAYERED).

О   ср е в и

и  прош ол

й  зма овитл

е  с ло в . .

.

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB ь  с   SetLayeiedWindowAttributes " Вид ™ и тсы ™ рачно з  про ™""™ " zyxwvutsrqponmlkjihgfedcba

г : .  Прозаснтч

ColorKeyT ran s parencyM emo

С   а - л ф Аь п р о з р а ч н о с т

"С   Пр о з р ачн о с т

ь  п о  ц вет

(•   Не п р о з р ачн о

е  о кн

; Фо р м

В ы ох

Рс.и

ь

у

о

а   н е п р о з р ачн а; ; ; ; ; ; ; ; ; ; ; ; ; ;

;

zyxwvutsrqponmlkjihgf

д

 в ид  гвтосе  пкетоар zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 1.1. инВйше

а   в о з р ща е т   к ом и б н ц а и ю   щ к уе ит х   и т се л й   ок н а   MainForm и  си тл Д ан а я   р о к ст WS_EX_LAYERED. И н ы м и  словами , можн о  сьчита , чт о  оэт т  ко д  п рост о  добавлея т   и ст л WS_EX_LAYERED  в  расширне ы е  си тл и  окн а . п р Те ь  зи тспа у е   п к ое р т  и  оьт ме е  ри одкна п к у  "П розчан отс ь  п о  ц"увте . У  ва с е д  уб н тч е о  пежо х е  н а  нижеазрбо е  н а  рис . 1.2. о к аТ й  внше н и й  ви д  фмро ы  оелво с уб н   ме т , чт о  в  оичк тобар е  сыибо т я  OnClick  кпмо и  "П орзчна тс ь  п о  цу тев н ет а  TransparencySelectionRadioGroup (TRadioGroup)  дл я  кн пок е в у п тс р и у т   ю у щ д е лс и й  кдо .

я ь т "

SetLayeredWindowAttributes(M ainF orm- >H andle,  clWhite,  0,  LWA_COLORKEY); To ест ь   все , ч т о  бы л о  н а  форм е  болге о   ц а в те , сал т о   п р о з ча н ы м . П р и  эо т н  и н рест ы й  эекфт : п опй рбту е   мы ш ь ю  патред з р ач н о с т и  псовтяел я  ещ е  и до в  ColorKeyTransparencyMemo -  у  ва с  н и чге о  н е  п чоилусят . Ф оку с  бе д у т  парде ор т к е   ж ел и т   н е в т с пд е р о о   п о д  ColorKeyTransparencyMemo  и  кор т и   п ч н з о ра ы м и  вс е  днроче и "п рочвсе"и та .  жкаТ е  ои т арб е   нв и м н а и е , чт о  сла т п у р а в л не и я , кыро т е  и мле и  быле й  цтев . е  питвагдо п р Те ь  оьт ме т е  ри нкода п у   "А-аьлф пзорчньа тс "  и  йптоубр У  ва с е  бд у т  н а  экрна е  сю у щдел а я   и к ра т н а .

м  ви д

е  п ро ь   ко у ф с н  в  т о  окн о , е   к вс о з ь   н ге о е  энмелт ы ь  пн зклоу

.

о сн т ч ра з П

м   SetLayeredWindowAttributeszyxwvutsrqponmlkjihgfedcbaZYXWVU

ь   в  W2K/ XP с  иинеозав сьпл

- Вид

ы  п р о з р а чн о с ти

-

a i n F o r r n ( T C o i t i p o n e n t *-   O wn e r ) > А-тсоан чФ а рь зло п

ь

'i оснт ч арз П

ь  п о  цт е в

) о н ч а р зо п е Н

е  он к

zyxwvutsrqponmlkjihgfed а

• rn:  : T r a n s p a r e n c y S e l e c t i o n R a d i o G r o u ] ySelec t io n R ad io G ro u p - > I t ern I n d ex)

Фо р м п о  ц в еот м

В ыо х

.Рис

  1.2. Птьс оначзр

 окан

д

у

1 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM

ь  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA с   SetLayeiedWindowAttiibutes

Л  , П р о з р а чн о с т

-В т

С   с то н ч а р з о П

ь  п о  цт е в

С   о н ч а р зо п е Н

е  он к

ст о н ч а р з о П м ро ы Ф

  1.3. Вид

а у   люк ч

 по  цвтеу

1 ColorKeiiTransparencyM emo

.Рис

а   п р о з р а чн

о

 тгвтосе

 пкетоар

 с  аа- ьф л тьсюоначзр п

ь : 76  %

о

у

О   ср е в и

и  порш ол

й  змаитвол

. zyxwvutsr

е  с ло в . .

- аь л ф А п р о з ч а н о т с ь   на с т в у ли т еа я   в   ч и о бр а т к е   о с бы и т я zyxwvutsrqponmlkjihgfedcb   Н С ск п О   м ок п н е т а TransparencySelectionRadioGroup (TRadioGroup)  пр и  ок мте е  ри адокн оп к и  "А-аьлф п ор з р ач н ь о с т " сю ущдел и м  кмо д .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB SetLayeredWindowAttributes(MainForm- >Handle,  О , (255 * FormTransparencyTrackBar- >Position)  / 100, LWA_ALPHA); З н ч еа и у тц ев

а  сzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA уе г К  ан ст оувнле о  в  0, та к  ка к  м ы  и пс оеьлз у м  н е  п роз чан отс ь  п о . Ко д

е  п рамте , а  аль-аф п роз чан ьост

(255 * FormTransparencyTrackBar- >Position)  / 100 и п в о д ер

т  п роз ачн ост о т  0 д о  100. В  п оцр не то с т з еа д я  п оз и ц и е Н иж е  п рие вд

ь  фмро е  сн тош не и й  пн злоук н  все

ы  и з  дипа з он

а  и з мне и

й  о т  0 д о  255  в  диап з о . Сма а  ж е  и не тис вн тос . Дл я ав утсбо д а  FormTransparencyTrackBar. ь  ко д  товгсте о   п а р оке т .

н  з н чае и ь  пзочрна тс

// #include  #pragma  hdrstop #include  "TransparencyUnit.h" ,  //  tpragma  package(smart_init) #pragma resource  "*.dfm" TMainForm  *MainForm; // fastcall TMainForm::TMainForm(TComponent*  Owner) :  TForm(Owner)

,

void  fastcall  TMainForm::TransparencySelectionRadioGroupClick (TObject  *Sender) { switch(TransparencySelectionRadioGroup- >ItemIndex) { case 0: < // а- а ф ь л ' сончарзорп т ь SetWindowLong(MainForm- >Handle,  GWL_EXSTYLE, GetWindowLong(MainForm- >Handle,  GWL_EXSTYLE) & ~WS_EX_LAYERED) ;

й и

о с н т ч ар з П

м   SetLayeredWindowAttributeszyxwvutsrqponmlkjihgfedcbaZYXWVU

ь   в  W2K/XP с  ииенаовз сьпл

Set Win do wLo n g( M ain F o rm - > H an dle,  GWL_EXSTYLE, G etWin dowLon g(M ain F orm - > H an dle,  GWL_EXSTYLE)  | WS_EX_LAYERED); Set Layered Win d o wAt t ribu t es( M ain F o rm - > H an d le,  0,  (255  * F o r m T r a n sp a r e n c yT r a c k B a r - > P o si t i o n )  / 1 0 0 ,  LWA_ALPHA); F o r m T r a n s p a r e n c y L a b e l - > C a p t i o n =   "П р о з р а ч н о с т ь   фо р м ы :  " + I n t T o S t r ( F o r m T r a n s p a r e n c y T r a c k B a r - > P o s i t i o n )  +  " %"; break; c a s e  1:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA // тсончарзо п ь  гов тевц о  кч ю л а SetWindowLong(MainForm- >Handle,  GWL_EXSTYLE, GetWindowLong(MainForm- >Handle,  GWL_EXSTYLE) & WS_EX_LAYERED)  ; SetWindowLong(MainForm- >Handle,  GWL_EXSTYLE, GetWindowLong(MainForm- >Handle,  GWL_EXSTYLE) | WS_EX_LAYERED); SetLayeredWindowAttributes(MainForm- >Handle, clWhite, 0, LWA_COLORKEY); FormTransparencyLabel- >Caption="Фмро а   нчарзо п а  п о мов тевц у  к" учюл ; break; case 2: // ончарзо пен е  нко о SetWindowLong(MainForm- >Handle,  GWL_EXSTYLE, GetWindowLong(MainForm- >Handle,  GWL_EXSTYLE) & - WS_EX_LAYERED)  ; FormTransparencyLabel- >Caption = "Фм р о а   " анч рзо пен

;

} break; }zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA j  I __ 

void  {

,

fastcall TMainForm: :FormTransparencyTrackBarChange(TObject *Sender) iff!TransparencySelectionRadioGroup- >ItemIndex) { SetLayeredWindowAttributes(MainForm- >Handle,  0,  (255 *

О  всреи и  прош ол й  зма овилт 10zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

. zyxwvuts

е  с ло в . .

FormTransparencyTrackBar- >Position) / 100, LWA_ALPHA); FormTransparencYLabel- >Caption = "Пт с о н ч а р з о ь   ымроф : % IntToStr(FormTransparencyTrackBar- >Position) + "  %";

fastcall TMainForm::ExitButtonClick(TObject *Sender) vo i d zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Application- >Terminate(); IIтВо , снве тсоб , и  все , чт о  мжон о  рзкаст SetLayeredWindoH'Attributes.  олсе т Х н а  дву х  асп ахкет . П р в ые й  асп ект : п осл е  рбаот ы  с  п розчан ы ю у щ д елс и м  ком д .

ь  о  пзочрна тс ь  бы

, парвд

и  с  и псьлознав и е к  з аорсит

, н пао дсел м  окн о

м  н е ьт зд уба

ь  ваш

и zyxwvuts е

м  фн цку и е  вн и ман и

е  э т у  п роз ачн ост

ь  сн ят

ь

SetWindowLong(MainForm- >Handle, GWL_EXSTYLE,  GetWindowLong (MainForm- >Handle, GWLJEXSTYLE) & ~WS_EX_LAYERED); Н п е ро з ч а н я  фмро и  т о  же . ор В т й   а с п ке т :  воз мжн о в м сте е  с о  вмес и  ег о  дочрне и м л д я  оьлен д отг о  эмлен т

а  и  п роз чан я

, н о  с  уна ст овле н о ,  ка и  окн маи

а  упнрваел и

й  в  255 п роз ачн ьост

ю  -  н е  н до

о

к  в   ов сте

м   п ре о к т ,  тале дс ь   ок н о   п р о зу л ч а н ы м , н о  н воземжн о  и пс оьлз вта ь  аьл-аф п роз чан ост ь я  в  окне .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON

ь  csOwnerDrawFixed в  TComboBox

т лиС и Од

х   в о п р со в ,  орыкт е   в о   м н в о ж тс е е   з аю д с т я   в   м а у ро ф х х  (и  н е  очне ь ) пмраогив тс : ка к  и псьзлотав ь  снев тсбо у ю к в ио р с т у  в  кмпноа ет х  VCL лд я  кимцоза тс и  и х  внше н ге о  ваи д ? Етс ь  оев т т  н а  эо т т  воп ср . Н иж е е  бд у т  рнер мтсоа а  снев тсбао я  оикврос т а  в  кпмно ет е  TComboBox с  иньпазвслои е м и тл с я  csOwnerDrawFixed. Н м е н ог о   ео р т и . Дл я  тго о   обчт ы   в ы п о нл т я ь   в н с ео б т у ю   ри о т с в к у   в  TComboBoxzyxwvutsr (и  в  TListBox тож)е , ни мдо хбе о  з н чае и е  свой тс а  Style уан ст ови т ь  в  csOwnerDrawFixed и л и  csOwnerDrawVariable.   на квотс У а  Style в  csOwnerDrawFixed  п ри мне сят , кд го а  вс е э м ен л т ы   пс и к а   и юм е т   и н до увк а ю   в ы ос т у   -   вы от с а   г о жд ак о   э мле н т а   сп и ск а  е д уб т ь ос п т л я е рд я   з н ча е и е м   св о й т а   ItemHeight.  П р и  уна ст овк е   з н ча е и я   всо й т а   Style в zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  csOwnerDrawVariable выотс а   г о ж д ак о   э м ел н т а  мжое т   ыб т ь  раз ли чн ой . Дл я  и з мнре и я в ы о тс ы   ьл е н д о т г о   э м ел н т а   в  дна о м   ч а у лс е   и м до н х б е о   п и т ас ь   ч о и бр а т к   о с бы и т я и  кнероц фи я

н   и з  расп ронт е н ы

х  о т  н чиан ю щ и

ил т С

11zyxwvutsr

ь  csOwnerDrawFixed в  TComboBox

 Дна ы й  пт у ь  ньклосе о  солжн е , помэт у  дл я  н чла а  рримсаот м  рбоат OnMeasureltem.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA с  TComboBox с о  си тле м  csOwnerDrawFixed, а  по т м  уж е  рсармиот м  TListBox с о  си тле csOwnerDraw Variable. И ка т , зча д . Дйавт е  си да зо м  вюьша щд и е  спикс и  (TComboBox) с  эмнаелт и  зарн го ц а в ет . П онб д ы е  сп и кс и  в ы  н рнвеа кя а  влие д и   в о   м н и ог х   п р о ам г х .  М ы  си доаз м   вд сп и ск а . П ревы й  -   л д я  вы бор а  ц тве а   ш ри а тф , вор т й  -   лд я   вы обр а  ц тве а   но ф а  и л и  ц вте с во неб т о  эмлен т а  упрванле и я  (см . ри с . 1.4  и  1.5 свесонт о) . [ c lBlac k

clBlue clFuchsia cIGray cIGreen cILime cIMaroon cINavy

  1.4.  иающйпВды тнеа ме  лэ

.Рис т а ифрш

.Рис ил

 скпоис

  1.5. Виающйп ды  цвтеа

я  дл

 заиня д

  ц в т еа

 уинея апврл

 скпоис г со ам

тнеа м эе л

я  дл  инея уапврл

 заиня д

 цвтеа

 фоан

у м о а а

и  прош ол й  зма ивотл О  всрие 12 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  и псьлознав и

Пр но ме ти у рн с

и  си лт м  дл

я  кмои зцтас

. zyxwvutsr

е  с олв ..

я  csOwnerDrawFixed zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG  в  ТхВотЬС  онс ов ы м  и  еиневд тс ы м и  вн ше н ге о  ви д а  яс теявл я  ок тобар а  собы и т я  OnDrawItem.

property  TDrawItemEvent OnDrawItem =  {read= FOnDrawItem,  write= FOnDrawItem}; н аД о е  сыибо т е   з о в н и е ак т  викяс й  раз , д г о к а  ним до хбо е о   з а р иб о т пс и к а . С оыби т е   OnDrawItem пи одр хс т   ь кл о т о   п р и  уанст овк в  csOwnerDrawFixed  ил и  csOwnerDrawVariable  -   п р и  диг ру оы бс и т е  OnDrawItem н е  пи тдо ирхс . иТ п   TDrawItemEvent

е   з н ач н е и х   з н ча е и я

ь   н а  энарк я  свой тс х   всо й т

е  энмел

т а  zyxwvutsrqpon Style а   Style

typedef  void  fa st c a ll  (  closu re  *TDrawItemEvent)  (C on trols:  :TWinControl* C on trol,  i n t  Index,  const Windows: :TRect  &Rect,  TOwnerDrawState  S t a t e ) ; т   в  сбе

ю вк л е ч а

я  сю у дщле и

е   п а р м ы те

Control — кмоп н е т Index -   и н ке д

и кв е т а тм жо е

:

, в  кор т с  элмен т

м  пи одр хс

а  в  свой ст

Rect -  киордн та ы  эмелн т State -  сняо тис е  эмнела т н  л и  о н  в  нщоя тса и е  п осмрте ь  в  сп рвак

т   со бы и т е

;

е  Items;

а  н а  кна в е  комп н еа т ; , кор то е  узтыаке в , вы арб н  л и  нме тлэ , зпащер й  момне т  и  т . д . П онл ы й  сп и ос к  з н чае и й  эог т е  п о  VCL дл я  тип а  TOwnerDrawState.

К а к  вни д о  и з  вын ешодпгирв щ и м  озарбом : м ы  жолн д ы  пич т уло и   е з та м   н а   о э т й   нк а в е   в   а л еп д р и н о ф р м ац и ю . П рип уст м . о  вюаыщдпг е Н нч а е м  с  пговре ыро ток й  н а м с пте убер то я  дл я  о г эт С вп р е а  н а м  и одмн хбе о   ч п и о ул т

, пт у ь  рше н и ь  в  очи ктобар х   ьо л н г п м р я у и к о   п си к , н е  сишл ок ь   у о ст д

я  нша е е  сыибо т

а  -  с  рзна цотыевм м  сжеол п   к  кна в

н  л и  нме тлэ

й  с  вма и  зча д и   е а г п ло р я  OnDrawItem кна в а   Rect  вы сет и   и о д нм у х б е и  тыво мтске н  и  н е  сишл ок е  вы юап д щ ге

,

о   п р ма т е

а  в ы т  ю у д е л с ю   на

и  энмаиел т м  бьшло о   сп и к а

-

у  ТхВотЬС м

. Кдо

,

й  п о  мзаре .

.

Т С о тЬ о В о х   *p C o m bo Bo x  =   s t a t i c _ c a s t  < T C om boBox  *>  ( C o n t r o l ) ; T C a n va s  * p C a n v a s  =  p C o m b o B o x - > C a n va s ;

е З та

м  м ы  ожлнд

ы  очи тс

ь  пьолнг мряуи к

, омеялып др

й  з н чае и е

м  п рамте

а  Rect. zyxwvut

pCanvas- >FillRect(Rect); Ел с н а д  н и

и  эог т м  крос у

о  н е  сь тале д а   мы ш

и  бу д у

, т о  п р т  вни д

и нжеарбои т ы  аткафе тр

и  эмнел т ы  инжезарбои я

а  п р

и  ег о  ркырсаи т , ка к  пзкоан

и  и  пщмер н и о  н а  рис

и . 1.6.

ь  csOwnerDrawFixed в  TComboBoxzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF 13

ил т С

clBlack c lB lac k c lB lue c lF uc hs ia IGray

, zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA c I G re e n

.Рис   1.6. Аак ты фер  иинея ажр бзо  пир  отусви FillRectzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML

c I Lime

е З та

м   н а м   и м до н х б е е  дожлн ы  оьсжтароб о  зна ди

в  сп и ск и н ль а д в и у о г

о   анс т у о в и т я  ц тве

я  н за вн и а  бе д у

ь   ц ве я  ц овте т  сю у дщле и й

т   г о ж д ак

о   э мле н т м  пыротс

, смаы

а   в   сп и ск е м  и  уноб ды

. Учиы т вяа м  сп осб

,  чт о м  дл я

.

pCanvas- >F ont- >Color  =  Strin gToC olor(pC om boBox- > I tem s- > Strin gs[I n dex]); с еЗ д ь   м ы   в о с п л ь з о в иа с ь   н у к цф и е "clBlack" в  ц овте е  з н чае и е  clBlack. И  нноцкае , м ы  днжло ы  вытсев и  н а  эарк од мт е а   TextOut ксал а  TCanvas.

й   StringToColor, каор т н ы джак

й  энме л

т  спиакс

я   п е о р бз а у . Сеал д

т   ро к т с м  эт о  с  пщмо ь

у ю

pCanvas- >TextOut  (R ect.Left,  R ect.Top, pComboBox- >Items- >Strings  [Index] ) ; п р Те

ь  пейрд , а  вмсте

э л ме н о в т В  оич ктобар ьо л н г у и к

м  к о  вмор т у  вюыа пщд ме у  спуикс о  н и х  в  сп и кс е  дожлн ы  бы т ь  ц н вте ы е  сыибо т я  м ы  тчно о  та к  ж е  печа уло

. О н  н е  джело н  отжарбо т е  поьлгнмряуи к . м  кна в у  TComboBox и  оичщ еа

ь  тыво тксе

х м  пмояр

-

. TComboBox  *pComboBox  =   s t a t i c _ c a s t    ( C o n t r o l) ; TCanvas  *pCanvas  =   pComboBox- >Canvas; pC an va.s- > F illR ect  (Rect) ;

е ав

кь л По с м ю щув  стси ев то

у  н а м с те  тубер й   ц ев

я  втмсе о  тктсе т  дл я  свйо тс

а  виы тдов а  Brush  салк

ь  гирксчотме

е  фыр уи г а  TCanvas, а  н е  дл я  свйотс

, м ы ниалв утс

а  Font.

pCanvas- >Brush- >Color  =  StringToC olor(pC omboBox- > Items- > Strings[Index]);

и  прош ол й  зма овитл О  верс и 14zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

П о сл

е   е св к  в  квчасте

оь л нг у и

х   в ы ш о е п и нс а ы

х   п н о е в л ри т г е  элмен т

а  сп и кс

е  слов..

.

й   м ы   ов т г ы   о б р а зт и ь   ц н тв е о й  п мряо ю  мод те а  Rectangle zyxwvutsrqponmlkjihgfedcbaZYXWVUT  клас а  TCanvas.

а  с  п омщ ь

pC an vas- > R ect an gle( R ect .Left  +   2,  R ect.Top  +   2,  R e c t . R igh t  -   2, R ect.Bottom  - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   2); ж к аТ

е   м жо н

с  знелг кураы м

о   и п с о ь л з вт а и  крмаяи

ь   о тм е

д   RoundRect  TCanvas,  выщя вод и

й   ь о л н г п м ря у и

к

.

pC an vas- > R oun dR ect(R ect.Left  +   2,  R ect.T op  +   2,  R e c t . R igh t  -   2, R ect.Bottom  -   2,  2,  2 ) ; н тс е Ч о  говря , я  ппачоидерт чт о  та к  спиос к  виыдялг ыб л  ипсьзлоав н  и мне э м ен л т ы  в  сп и ска х  бу д у и ьд с т я   16 срокт , павюлястрдещ и

ю  и нме т  си мпчнта е о  эо т т  мод те т  оьсожрбат

о  мо те , и  в  выюапдщ е . И  ещ е  он д я   н к о р те х   16 осн овн ы

у  Rectangle.  М н е  кяс тжае , д  RoundRect мдо те м   пс и к е , инжезарбо м  н а  ри с . 1.5, а  мнелаяьк , н о  чзревы чйа н о  вжна я  дальет : , есл и  в  и х  свой аст х   Items бу д у т  но ха х  ц воет :

•   clAqua • 

clBIack

•   clBlue • 

clFuchsia

• 

clGray clGreen

• 

clLime

•   clMaroon • 

clNavy

•   clOlive clPurple • 

clRed

•   clSilver • 

clTeal

• 

clWhite

•   clYellow ви

пТ е р д  фмро

ь  зз рагиу ы  товсетг

м  тоевст о   п р и о лж н е и

е  п ри олжне и я  и зжорабе

е  и  и сп ы ае т н  н а  ри с

м  н ша и  сп и ск .  1.7.

и  в  дей всти

. В н ше н и

й

ь  csOwnerDrawFixed  в  TComboBoxzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED 15

ил т С

TComboBox zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE и  стли ь   csOwnerDrawFixed -  Це в т  ша т ф и р ы  с еи  тыбос м  0 nD rawl tern и

т Э о  тыво сте й  тсек т  дл я и ц а р дтсм нео и т роб а е л и ст м  csOwnerDtawFixed  TComboBox.

ев Ц

ты р к а З

.Рис Ко

  1.7. Винйше

 в ид

д   р- с й а ф л

а  фмро

 фоы м р

 гвтосе ы  товгсте

ь

т  тстке

а

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

 пкетоар о   п р ок е т

а  п рие дв

н  н и ж е

.

/ / zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA #include  #pragma hdrstop

#include  "OwnerDrawFixedUnit.h"zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR II  #pragma  package(smart_init) #pragma  resource  "*.dfm" TMainForm  *MainForm; // 



,

,

fastcall TMainForm::TMainForm(TComponent*  Owner) :  TForm(Owner)

// v o i d 

f a s t c a l l  T M a i n F o r m : : F o n t C o l o r C o m b o B o x D r a w I t e m ( T Wi n C o n t r o l  * C o n t r o l ,  i n t I n d e x ,  T R e c t & R e c t ,  T O wn e r D r a wS t a t e  S t a t e )

{ T C om boBox  *p C o m bo Bo x  =   s t a t i c _ c a s t  < T C o m bo Bo x  *>  ( C o n t r o l ) ; T C a n va s  *p C a n v a s  =   p C o m b o B o x- > C a n va s ;

и  порш ол й  зма ивтол О  всреи 16 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

е  с олв ..

. zyxwvuts

pCanvas- >FillRect(Rect) ; pCanvas- >Font- >Color  = StringToColor (pComboBox- >items- >Strings[Index]); pCanvas- >TextOut (Rect.Left,. Rect.Top, pComboBox- >Items- >Strings[Index]); // void  fastcall  TMainForm::BackgroundColorComboBoxDrawItem (TWinControl  *Control, int Index, TRect &Rect, TOwnerDrawState  State) TComboBox  *pComboBox = static_cast   (Control); TCanvas  *pCanvas = pComboBox- >Canvas; pCanvas- >FillRect(Rect); pCanvas- >Brush- >Color  = StringToColor(pComboBox- >Items- >Strings[Index]); pCanvas- >RoundRect(Rect.Left  + 2, Rect.Top + 2, Rect.Right -  2, Rect.Bottom  -  2, 2, 2 ) ; // void 

fastcall TMainForm::FormCreate(TObject  *Sender) FontColorComboBox- >ItemIndex  = 1; BackgroundColorComboBox- >ItemIndex  = 14;

} //  void  {

^ fastcall TMainForm::CloseButtonClick(TObject  *Sender) Application- >Terminate();

} //  void  {

. fastcall TMainForm::FontColorComboBoxChange(TObject  *Sender) TestMemo- >Font- >Color = StringToColor(FontColorComboBox- >Text);

} / / void 

fastcall TMainForm: :BackgroundColorComboBoxChange (TObject  *Sender)

ь  csOwnerDrawFixed в  TComboBoxzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE 17

ил т С

TestMemo- >Color = StringToColor(BackgroundColorComboBox- >Text);zyxwvuts

II- zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA чи к т о б а р О у  п раокет В  очбираот к

док

 OnDrawItem рнер мтоса ы  вы ш е , пмо тэ у  пейрд м  к  оьлна тсом у я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  сыибо т . е  собы и т

я  OnCreate орфмы

.

// void  {

fastcall TMainForm::FormCreate(TObject  *Sender) FontColorComboBox- >ItemIndex  = 1; BackgroundColorComboBox- >ItemIndex  = 14;

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

ы у бд у

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

//  



void  {

. Зе ьт меа м  пиав рс

, .

т   ш ри т ф .

а

,

fastcall TMainForm::FontColorComboBoxChange(TUbject  *Sender)

TestMemo- >Font- >Color = StringToColor(FontColorComboBox- >Text); } //  , '_ void  fastcall  TMainForm::BackgroundColorComboBoxChange (TObject  *Sender) { TestMemo- >Color = StringToColor(BackgroundColorComboBox- >Text); // В  н и и пс о т ь л е з у З и ап с т у

х  нв о

ь  дл я   н цу к ф и е  товсыет

я на звоирбпе

я  ттске я  StringToColor. й  п крое т  (вн ше н и

а  вынарб го й  ви

о  энмелт д  приолжне и

а  спикс я  п окза

а  в  цов те н  н а  ри с

е  зн ечаи . 1.8).

е

18

О   ве р с и

и  прошл о

й  з а м ол ви т

е  сл ов. .

. zyxwvutsrq

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  TComboBox и  слит ь  csOwneiDiawFixed H H B I zyxwvutsrqp Ш

о ыво  тсте

тЭ с и тле м

й  тс ке т  дл я иц ар м стенод   csOwnerDrawFixed ТС коВо Ьп го

и  ртоб а

ы  с еи тыбсо

м  OnDrawltem и  

е в Цр

т а т ф и шр

"

.

 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 1.8. инВйше  в ид г оне  загужр  пинея ж о илр  с  цвмтео  TestMemo clSilver и  цвмтео  clRedzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Рс.и т а ифрш

П с о и ей ар г т

ь  с  вюыа пщд и м и  спимакс и  цма тев и  TestMemo,  уьсие дтб , чт о  св е  н цкуфи о т  инме о  тка , ка к  хсоле т ь   и  змы уьослвад . Дмюау , чт о  несято й  с  ипсьнзлоав и е м .  д гоТ а   -   в п ер д !  ю уСщдел а я   п м рео л б а , и тл с я  csOwnerDrawFixed  у  ва с  уж е  н е  оаслто ь уро т к ю  н а м  поист дре т  рше иь т , -  си тл ь  csOwnerDraw Variable у  TListBox.  О б  эо т м  -  дале е в  н ша е й  кн и ег . не и у р

лГа в ы рт о е к Н е и на р в С

а  2

е  и з  класо е  стор

к  п о  м кас

в  VCL

е  и  иианвозльсп

е  TMaskzyxwvutsrqponm

К а к  можн о  бы л о  пп дорлежиь т , фирм а  Borland  н е  обош л а  сорнт й  и  тако й  воп рос , ка к  срван е и е  срот к  п о  мсаке . Дл я  эи т х  ц ле й  в  VCL  щесув т т  ксал с zyxwvutsrqponmlkjihgfed  TMask. К л ас с  TMask zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  -  эт о  очне ь  п орст й  клас . О н  уновадсле н  н пе внострд о  о т  TObject. TMask  н е  и ме т   вс о й т , а  мо д те в  у  н ге о  вгес о  три . К о р кнт у с : f a s t c a l l  TM ask(const  An siS t r in g  M askValue); :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ок р т е с у д

fastcall virtual - TMask(void); и  мо те

д  Matches: bool  В ро т кк ур нтос

в  кв тсчеа ис м в о л нк в е у Б о м Т о  ест ж ол е д

ь н п Т ре Ко ж а д

к ва ы ч к е нж л о д рВ н т у ны нз е ч м и а

ы и м   ис м в о л

i

f a s t c a l l  M at ch es( co n st  An siS t r in g  F ilen a m e) ;

е  зс теа д я е  пр тмае а  в  мо те ы  (wildcards)  и  мн воажсте у  си мвол у  в   лсе и   в  мкса е  укза   ь и с но д т х а я  си мво л ь  рсармиот м  мн воажсте е  мн вожтсе о  джолн ,  сярмазтеу .  И   вс  бы т ь  унзак ы  бе з  кывкаеч  собк к  нс тя од ха я  энмел т , ли б о   и дп а з о н , кнчоые м  зн еич а

 макс

, с  ко р т о й е д бу т ит пдо хиоср ь д  Matches.  В  мкса е  ди мтспо у ы  невк убы .  мкса е  се вуст ео т   ка о т й  ж е   ис мво н   и с м ов л   "7", т о   л д я   вистое  "7" в  то й  ж е  п оз и ц и . . о  н чиа ньс та я  с  окрыт вюа щ е й  поьлгнмряу е   ал е д е   р ч е м а в с ыт е   в   к е ст е   ис м в о л ) и  зьснактичв я  зырюкавщ е ы  мн ваожсте , кыор т е  муог м   си м в о л . Ди ап з он ы   си м в о л м  и ел  ри те зда м  "- " (зн а к  "ми нс у

 снваеир

е  сикор т е  сиымлов

, н а доерп , гп уывро

л  в  срван и вмеао я   н а д ом

й  сротке у   в  срок т

у   ис м в о л

й  скбо ы   в   к ва ы ч к а й ньл по г уом яр т  бы т " н а ер  ку итва л

ь  ли б о  пыротс в   юаз дс т

й е . е

и  "[" (бе з х   в   м кс а е й  сок б й  "]". м  бнкве у я   н ь лч а ы м ) мдж е у  н им .

в  VCLzyxwvutsrq

ы ор т к е Н е 20 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

 и з  ксало

Н е  нжн у з на о г

я   и з  вы ш касе

о   т я л рез а д , м ы  мжео [а- П 8

ь   м нэ е л т м  зта д

у  джело

н  ставо с тев о т   с о  ммов нтсжео , илб о  се а дпаво

л  сеапвод

в т с е н жм о

а   п м а л р ое б о  сю ущдел и

и   ил

и  з апы тя ми .

м   о б р аз м

. Идо хс

-

]

в Мт сн еж о Со и в м

ы  мнв тсоже ь   м н в о тж с е

е  динзпоав

, елс

ь   и до н  Со в ми л  в  змоеав д и  о н  лжие т  ли б о   в  пале др т  с  люы б м  и з и г дур х  со л ивм

й  в  мдо те х   н д го в  мав т снежо

е zyxwvutsrqponmlkjihgfedc  Matches скоер т . о  и з  узнак ы х  в о . Дл я  мв т с ежн о а

,  [a- fl8] ю о а вс п д щ и

м  с  н и а, Ь

Ел с в о к и с л ь ц не т а ы и с м вол

м  бу д у

т  си мвол

ы

, с , d, e, f,  1,8.  .

н а Гр и ч ы и  пвыре

е  силомв й  си мво , н е  пчреи нлс ы

ы  дипзноа , ка к  вни д о  и з  пиарме л  в о  мн ве ожтс , п осл е  окры т юва щ е м   з н ко а м   "!",  т о   мн в отжсе у   в   п р о м ве я й  в о  мн воежст . Дл я  мн вожтсе

, тжка й   ь о л н г п м ря у

е  вя до х й   р о к ст

т  в  дипазо й   к со б и е   е в у ст е о

н  знчеаи й , яс твеля т   ю л бо

. я й

а

[!a- fl8] ю о а вс п д щ и

м   с  н и м  бе д у т  лю бо й  си мвол , корм е  "а" , "Ь " , "с " , "d", "e", "F , "1",  "8". и   с и м в о ла и  (wildcards) яювял с т я   ис м в о л ы  з взоечкд и   "*"  и  воп рсилье т н ог о  з н ка а  "?". П рави л а  свист ео я  дл я  эи т х  си мвол в  таки е  ж е , ка к  и  дл я  и ме н  фай лов . С и л мо в у   "*" се ув тс ев то т   ю л об е   в т и с л о к еч о  лю ыб х   и с м во л . Си млов у   "?" е ув тс ев тос т п ро и з в ь л н ы й  еи дн и чн ы й  си мвол . С вр а н е и е   р о к ст и   с   о к с ма й   с в я т ле я   р и ге о с н т зе а в и с м ы м .  Елс и   в   к мс а е   кз а у н т  свотас е ь   ак к  си мво л  "а" , та к  и   "А" . и с м ов л  "а" , н па ри ме , т о  в  сокр т е  ем у  бе д у В   до т м е е   Matches  кза ыус твеа я   р о к а ст ,  л д я   ор тк й  е д уб т   п р о и з ь в о дс т я   в рн а с е и е с  мкйоса . Matches воз вращ ае т  true, елс и  срокт а  се вуст ео т   м с ка е , зан д о й  в  кк ноур тс о ер т , и  false, есл и  узнак а я  скор т а  мкса е  н е те ув  стс ев то .  В  сеча ул , елс и  мкса а  н е  ст ев то е ув т с т  си нксау т , Matches вы брса ве т   и с к лю ч не и е . И   п о н с л де е   з ам че н и е .  П ьколс у   TMask  н уоваслде н   о т   TObject, ег о   экзмеп ял р и м до н х б е о   о с в та з д ь   в о п тс д р е м   ор п та е а   new. Тп е р ь  внзялг и т е  н а  ко д  товгсте о   п р а о ке т . // # in c lu d e  # in c lu d e  < vcl.h > # pragma  heirs t o p п Г ур о в ы м

# in c lu d e "TM askU nit.h" //

Screen и  ег о  ииноазв сьпл

е

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 21

#pragma package(smart_init) #pragma resource "*.dfm" TMainForm  *MainPorm; /





ќ

fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { } /



ќ

void  {

fastcall TMainForm::ExitButtonClick(TObject  *Sender) Application- >Terminate();

} // void , fastcall TMainFcorm::CompareButtonClick(TObject  *Sender) { TMask *Mask = new TMask(MaskEdit- >Text); if(Mask- >Matches(StringEdit~>Text)) Application- >MessageBox("Скорт а  е а д п в о с т  с  м. йокса " , "И" яицамрофн , _ ВМ О К   | MB_ICONINFORMATION); else Application- >MessageBox("Скорт а   н е  сеад пво т  с  м! йокса " , "В! еинамин " , М_ В О К   |  MB_ICONWARNING); } //  .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA н аД ы

й  ко д  нькло тса

и о б р ат

о   т пс о р , -   эт о   рок тс

ь  вн и ман и е

, чт о  н е  те убер а

т  кивреанмот

.  инеЕвд тс о

,  н а  чт о  се у дел

т

#include  Н е  з абы вй т

е  пюкл дотча

Screen и  е г о  ииавнозлспь Н д яр а в  рспа ожряне и я вз л г ч н в ру К  таки

д   ак к  т д уб ю  сльеамнотяс м   ас кл Р ри м с а о т

и н е л пу р к а с

у   с  виьланз уы м

ь  мл у до

ь  Masks.hpp, кд го

а  в ы  хи от

е  и пс оьлз вта

ь zyxwvutsrqponmlkjih   TMask.zyxwvutsrq

е

и  и  н веи ьлазн у ы м и   к ом п н е м а т и   и м рф а   Borland павиострдел а е   п р о ам г и с т в   к л ас ы ,  работ а  кыор т х  "и  оп сна ,  и  тн да ур , и  н а   п рвые й о   н е   в и н д а" .  Э кзмепрял ы   ак и т х   о с ак л в   в ы   н д и г ок а   н е  т е д уб е  стваоз д ь о  -   но и   дгесв а  созюа дс т я  аи комсчтаев и  п р и   рта с е   п р и ол ж н е и я . м   нот с я я   ск а л ы zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI   TScreen, TApplication и  ря д  диг хру . м   р боа т у   с   TScreen — космал ,  ыор ктй ,  ак к   мжон о   п он т я ь   и з   н за в н и я , т  в  сбе е  пнеовд и е   э к р на , и ли , и н аче , робгчае о  сол т а  комп ьюрае т .

ы ор т к е Н е 22 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

К с ал ав йо с т

 и з  ксал о

в  VCLzyxwvutsrqp

  TScreen  с те ну длса я   н в п е с т о рд н о   о т   TComponent и   и ме т   ю у щ д елс и е с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA , мдо те ы  и  собы и тя .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED

вСо й с т в а •   ActiveControl •   ActiveCustomForm •   ActiveForm Cursor •   Cursors •   CustomFormCount •   CustomForms •   DataModuleCount •   DataModules Defaultlme •   DefaultKbLayout •   DesktopHeight •   DesktopLeft •   DesktopTop •   DesktopWidth Fonts •   FormCount •   Forms •   Height •   HintFont •   IconFont •   Imes •   MenuFont •   MonitorCount •   Monitors •   PixelsPerlnch •   Width

М е т оы д •   - TScreen •   DisableAlign •   EnableAlign

Screen и  ег о  иинаовз сьпл

• 

23 zyxwvutsr е

R e a lign

• 

R e se t F o n t s

• 

T S c r e e n zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

оС б т ы и я •   OnActiveControlChange •   OnActiveFormChange о льБ ш и н в с т ц т а р Вк н и ко а

о  свой тс е  о ха  мдо т е й  сложн иост

С п вр е

, иб

в  ксал о  ию зуь лпос

а  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED TScreen яювял с т я  свмойа тс и  тьолк о  дл я  чент и я . т  и х  дньлов о  рок д е , д а  и  инавизьоплс е  н е е я плва тс д ер т

. а  ни мдо хбе

о  скзат

ь  о  кор ктну с

е

f a s t c a l l  v i r t u a l  T Screen (C lasses::T C om pon en t*  AOwner).; е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  орктусед

fastcall virtual - TScreen(void); к сл а

. м  ним до хбо е т  кс ал

Ва

о  п мон ьи т а  TScreen. Дл ь   ло б ьа г н а я   п м р ен а т  Screen -   о н  аиомктсчаев еД л а . К а к  ва м  и нз тсвео ак к  фмро а  бе д у т  вы рван иьсвта

к еъ бо ес т к ъ ое б

void  р аз ш е ае

void 

void  о  п оз и ц и он ие ру оМте

ыс в з т е а в в ы з ы в ат со б щ н е и

ь и й . ,

и  врнт у

и  экран

.

fastcall DisableAlign(void); ь  вынворе ы м м  июсн гиртуо

и  вр тн у и  энарк я  д о  те х  п ор

, пко

. П лсо е  вы зво а  н е е  бд у т  выазв

о  з н чае и я

м  и х  свой тс

а  эго т

о  мдо те н  мо те

а  зн ечаи я д  EnableAlign.

fastcall Realign(void);

т  фмро д  ResetFonts

void 

е  н е  джнло ы  сма и  став зод а  в  ко дж а м  VCL- н ежиоплр ы   ш р за у т ь   ол ь б а г н ы и  рбаот ы  п ри ложне и я о  Align, кор т е  отеял дпер д  EnableAlign

fastcall EnableAlign(void);

т  фамро м  бы т в  Align у  вес х  фро А  мо те д  Realign

з на о в

, чт о  в ы  на д гиок , н и  в  кок а м  сча ул а  к  сав йтос м  и а мдо т е м  кс ал я   Screen.  жкТа е   н д иг о к а   н е   о жл н д и  бе д у т  ршзару е н  п р и  зрвшае не и , у  фро м  в  C+ + Builder етс ь  свйо тс я  вр нт у и  экран . Та к  вто , мо те

т  фмроа м  бы т ь  вы ровн е н ы м д  DisableAlign

оМ т е

з п ща е р вой с т

я  дп у тсо

ы  н а  энкар

е  снсалог

в  Align.

fastcall Realign (void).;

я  дл я  онбелвио я  спикс ь  эо т т  мо те д  сам оселтяь н я  Windows о б  и з мне и

а  шво тирф

, пнеичлср ы о  -   о н  вы з ы всает и  сп и кс а  дп уност ы

х  в  свйотс я   в нр т у х  ш роив тф

и  клас .

е  Fonts. В ы  н е  нжло д а   TScreen в  овет

ы т  н а

в о ыр т к е Н е  и з  ксал о 24 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и до П х е р С в ой т с

 VCLzyxwvutsr

м  к  расмрнеот и ю  свой ст в  и  собыит й . zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA о  ActiveControl p r o p e r t y C o n t r o ls:  :TWinControl*  Act iveC o n t ro l  =  {read= F ActiveC on trol}  ;

п о з ве я л в  нщяо тиса с  сыоби ет

т   о п л ие ь р д т

,  ока й  окон ы й  эмлен й   м он е т   ко у ф с   а в од .  Дан о м  OnActiveControlChange

т   п у р а в нл е и

я   в  аиктвн о

е   св о й т

о   и м до н х б е

й   мо р ф о   р и мс а т в

е   п ч е а о ул ь   в м сте

т е

p r o p e r t y  C la sses::T N o t ifyE ven t  OnActiveC ontrolC hange  = {read= F OnActiveC ontrolC hange,  wr i t e  = F On ActiveC on trolC han ge}; Д на о е  собы и т е  пи тдо рхс , кд го а   ук о ф л ен и я . Т о  еьст , есл и  ва м  ни мдо хбе о  ои дслет нл е и я  н а  догйру , в ы  дожлн ы  н па и тс ь  очбриаот эт о  дсялтае , дмеон риест у т   п ыв р е й  товысте е дв н  н а  рис . 2.1.  \  С< * йсотвС

Рс.и

о  ActiveContiol и  ст иыбо

с  ввод ь   о п х ер

а   с п т еа р д

я  домг ру у  эмелн т у  упрва а  с  он дог о  эмелн т а  упрва я  OnActiveControlChange.   К а к й  ви д  омрф ы  кгор т о  п ри •

д   с ок у ф к   со б ы и т

й  пктеор

, вн ше н и

е  OnActiveControlChange

 2.1, Винйше zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  в ид ы м р фо  гвтосе  пкетоар

и т с Зп а у е  пткеор . П р и ч па д ер и л и  с  пмщо ь ю   и в а шлк и  ц яил уба т м  в  нщяо итса п н е вл а р у и я , в  кор то Э т о   р ае л и с т з у я   ь л н ка в у б с а кл а   м ро ф ы   о б ва н л е д о   н о в бъ е л я и OnActiveControlChange. vo id 

е  фс уко а  дмо г ур и   в  зкволга й  мнмое т  нси тдо ха о   п ро а й   р о чс т ке е   н у фкц и

у  энмел т е   мро ф

у  унпелвари ы  е д у б я  фуко

.  В  золвгачн о ,  аро тк

т   н ж е а р бо т с  вдов

я   е д уб

а  (см м   йа ф л т   ч и о тб ра к

я  с  пщмо ь ю  ым ш и о   и м я  мнэел т а . ри с . 2.2). е   в  скец и ю  private м   о с бы и т я

f a s t c a l l  ActiveC on trolC h an ge(T O bject  *Sen der)

Screen и  ге о  ииноазв сьпл

е

25

laStringGridizyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Рс.и в  зв ко е агл о

  2.2. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Ия м тнеа ме  лэ  у,инея апврл  в  км о рт  ниятс адхо  фок,ус  аятес ажр бто  фоы м р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

В  очи ктобар

е  сыбои т я  OnCreate фмро я  OnActiveControlChange.

о с бы и т

ы  м ы  нзаеч

м  дна у

ю  фн цку и

ю  оич октбар

м

II zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  fastcall TMainForm::FormCreate(TObject  *Sender) Screen- >OnActiveControlChange  = ActiveControlChange; // С в оне б с т о

, сма

II  void 

а  фн укц и

я  ActiveControlChange. _

fastcall TMainForm::ActiveControlChange(TObject  *Sender)

TWinControl  *WinControl = Screen- >ActiveControl; if(WinControl) Caption = WinControl- >Name;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP II-

П н об д ы м  ж е  озрабо м   щ о с у в лт е я OnActiveFormChange.  С вой ст

я   р б оа т о  ActiveForm

а   с о  свой тс

м  ActiveForm и  собы и те

м

p r o p e r t y  TForm*  ActiveF orm  =   {read= F ActiveF orm }; т е я л е д е п ро мас на етс

, как о  пн иежо лр т  аинв ток

я  и з  фро е  в щ  няио т с а й  пр и ци аав тк

м  пн еижо лр

я  в щ няио т с а т  нинв отка е

й  мн емо и  пн ежиорля

й  мн емо , т о  н зеич а . Оит арб

т  аинватк е  св тйсов е   н в и ма е

, т о  етс ь  ие м т  фс уко . Ел с а т е я ол е д епр , как я м р о ф , чт о  ActiveForm -   в йтос

и а о

ы р о т Нк е

26 ьк л о т ьс т а в

е  и з  косал

в  VCL

о  дл я  чент и я , и,- л д я  тог о  чоб т ы  стале д ь  ф с мр у  ак т и нв йо , ва м  ни мдо хбе о  восп льз о я  мо д т е м zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  SetFocus. П р и  пдо хер е  фс куо а  с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP н до й  ф мро ы  н а  дуг р ю  взон иека т  сыоби т е OnActiveForm Change. p r o p e r t y  Classes::TNotiЈyEvent  0n Activ sFormChange = {read=FOnActiveFormChange,  w r i t e  = FOnAct .veF ormChange}; Р ри м с а о т

ыобси т мро ф

м   ан л о г   щ ы п у д ре г я  OnActiveFormChange.  Зз риауг т ы  пваел тс др н  н а  рис . 2.3. Щ

о   п р ок е т

  2.3. Винйше

ДЛ

Я   СВ

р э й   те с т

а   ActiveForm и   чиобтрак < )йв тс . В н ше н и й  ви о вы й  пкторе

 вид

 айвонг л

ы м р фо

ь

 твтосе

'. '.  '.  Зыкра т

г о   ье оп р

ь

нв а л г о е д уб

й

J

та

и   кн оп к и  ShowFormsButton , са м  п роке т   ч р зе в ы ч а й н о   п ро с г . П р и   н и жат м  "Пь"тзако ) осюажтрбо т я  оыла тс н ie дв е  ф с >рм ы  п ро екат , и  пр и  поердх е   фо с к у а ю  фмор у  н а  экра н  вы исводт я   щ бо с е ь ш е  с  и м е н е м   ф о р м ы , к о т р а я  в  н а с то я щ и й т  аи квнт а  (см . ри с . 2.4). К о д   ог э т о  п рокет а  онче ь  по х ж  н а  ко д  епр д щы у де г о  п р о е к та . В  с е к ц и ю  private  к л а с а й   м ро ф ы  п ир ожнле и я  добавлне о   в яъ бо л не и е  ф у н кц и и  ActiveFormChange,   аро тк я т  очиотбрак м  собы и т я  OnActiveFormCh ange. К а к   ви н д о

(с  зокв ло г а н а  дуг р м он е

а д  вналго

  о с С вй т zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB о  ActiveFoim  и  ситобы е   OnAclivel oimChange  S H E t l

П о к за т

Рс.и

а е   о вт

p r i va t e :  void 

/ /   U ser  d e c l a r a t i csns f a s t c a l l  ActiveF ormChang е ( T O b j e c t  *Sen d er ) ;

Screen и  ег о  иинозавсьпл

е

27

IzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE   }   В  щоястани й  м ом не т  аивнт к а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO

.Рис   2.4. инВйше ActiveForm и  стимеы б о

ю у щ д елс и

А   са м  ко д  гвнал о м  обрза ом

 в ид

 г оврт

 тгвтосе  пкетоа,р  игеующиотрс л  ртуоаб  со  стйвмсо  OnActiveFormChangezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM

й   о рм ф ы

,  вюаляпст дрещ и

й   н п е в н с от р д ы

й   и н ер с т

,  и выдялг

т

.

//   , zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  fastcall TFirstForm::ShowFormsButtonClick(TObject  *Sender) { SecondForm- >Show(); ThirdForm- >Show(); } //zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   .

ы ор т к е Н 28 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

void 

fastcall TFirstForm::ActiveFormChange(TObject  *Sender) TForm  *Form = Screen- >ActiveForm; if(Form) Application- >MessageBox(AnsiString("В   ищяотсан

нвитка

в  VCLzyxwvuts

е   и з  ксало

й  мнемо

т

а амроф : " + Form- >Name).c_str(), "В! еинам " MB_ICONINFORHATION); MB_OK  | 

// void 

,

fastcall TFirstForm::FormCreate(TObject  *Sender)

Screen- >OnActiveFormChange  = ActiveFormChange;zyxwvutsrqponmlkjihgfedcbaZ

е  н е т  и нодмтсхбе и   к о м н е и ь т ро в а . Д на ы й  ко д  н оьлкста о  п торс , чт о  ег о  ажд Во т   и  вс е  о  соыби тя х   с ка л а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH   TScreen.  алСе д ю   ил ш ь   н об ь л е ш о е   з ам че н и е .  С оыби т е OnActiveFormChange п рои з ойе д т  и  в  то м  счеа лу , кд го а   м ро ф а  н иакетвн а , н о  в  н е й  вы з ы с т ве а я  мо те д  SetFocusedControl лд я  пча дре и  фс оку а  в  эмлен т  упрванле и я  эо т й  н иеактв н о й  формы . п р Те ь  о  диг ру х   с в о й ха т . С в о й тс о  AcdveCustomForm p r o p e r t y  TCustomForm*  ActiveCustomF orm  =   {read= F ActiveCustomF orm}; п оз е вя л н мео т ны и г чн

т   з н у ь ат . К  нн делсаи к м   н д е и л с а ко о  свой тс С в ой т с

,  ока

й  и з  нн делсаи ко в   с ка л а   TCustomForm  и ме м  TCustomForm он тсоя я  фмро ы  и  снра ти ц м   TCustomForm  святле я   о м р аф , т о  дан о е   св о й т у  ActiveForm. о  Cursor.

т   ко у ф ы  свой ст о   п о лн ь о ст

с   в  нщоя тсаи . Елс

й и  аи ктв ю   н а ло

-

p r o p e r t y  C o n t r o ls::T C u r so r  C ursor  = {read= F C ursor,  wr it e = Se t C u r so r ,  n o d e fa u lt };

м   мы ш и  н а  уровн е   п р и ло ж н е и я , а  н е  н а  уровн е   ь л н е д ы от х е  свой ст а  Cursor  рван о  crDefault,  т о  ви д  корс у а   мы ш и  оп ре о   к ом п н е т а   о мр ф ы   нс а л ог о   з н чае и ю   св о й т а с т е ля д я   и н и д ал ь в н у о   л д я  кго жда Cursor  дна ог о   к ом п н е а т . Елс и  ж е  з н чае и е   всо й т а   Cursor  оил чнт о   о т  crDefault,   т о на д ы й  коср у р  бе д у т  оьсожрбат я   л д я  вес х  око н  и  эмлен о т в  упрванле и я  дна ог о  п ри ло ж не и я , вн е  з ави с м ост и   о т  з н чае и я  свой ст а   Cursor  оьленд ты х   э м ле н о т в   п у р а в л ен и я . р   е д уб т   к ао в ы т м   д о  те х  п ор , пко а  з н чае и е н а е л в о т с Уы й   ч ре з   св о й т о   Cursor  коср у в ойс т а   вн о ь   н е  бе д у т   а н с т у о в лн е о   в zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML   crDefault. Воз мжн о ,  чт о  и з мне и е   з н ча е и я п оз е вя л к ом п н е ов т

т   та р бо

. Елс

ь   с  корс у и  з н чае и

е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 29 zyxwvutsrq

Screen и  ге о и наовз сьпл

св о й т а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   Cursor н е е бд у т  п озкан о  н нлемд о . В  эо т м  сча ул е  ни мдо хбе о   вы з т а ь   о мт е д Application::ProcessMessages, дл я  тог о   об чт ы   п р и о лж н е и е   ик л о т н с у ь   н а  и з мне и е о рс а к у . Чща е  вгес о  свой ст о  Cursor и пс оюьлз у т   ю у щ д е лс и м   о б р аз м .zyxwvutsrqponmlkjihgf TCursor OldCursor = Screen- >Cursor; Screen- >Cursor = crHourGlass;  //  еаж рбот try // пы н ь л е т и ж л о д р

е  п о  вн е м р

м о  срук

и   ицарепо

р  "пы н ч о с е

е  ысач

м   и с хо д н ы

й   к ур с о

"

и

finally S c r e e n - > C u r so r  =  O ld C u r so r ;  / /   в о с с т а н а в л и в а е В ан о с т в н л е и С в о й тс

е   н до г и х с о  Cursors

о   ро с к у

а   ол ь зе б я н т а о

р

.

p r o p er t y  HICONCursors [ in t Index]  =  {read= G etC ursors,  write= SetC ursors}  ; ва е л я п с т р д ли б К с ал л и ч ес к и м .албТ

т   со б о   л д я  вгес о   п ри олж н е и я с   TScreen  жреи одс и  кон а стми  2.1.  Пев аоны имо К о н с та н т

а

й  и нкисе рдова н ы

й  сп и ос о   л д я  оьлен д отг

к  корсв у

, кыор т

е  в ы  можте

е   и пс о ь л з вт а я   в  п ри олжне и

ь

, ли б о   э м ел н т а   п р у ва н л е и . т   ря д  вронест ы х   р со кв у ,  ыро тк е   п р о и н к е си д р о в н а ы   ис м во .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC  ктасн оы  и  их  зинеяач З н ач ен и

crDefault

0

crNone

-I

crArrow

-2

crCross

-3

crIBeam

-4

crSizeNESW

-6

crSizeNS

-7

crSizeNWSE

-8

crSizeWE

-9

crUpArrow

- 10

crHourGlass

- II

crDrag

- 12

crNoDrop

- 13

е

в  VCL ы р о Нт к е е  и з  осакл 30zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  иzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON х  зинеяач  (1   2.1. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ев аоны имоП  ктасноы ин)е ж ло д р Ч

.албТ оК н с т а н

а

З наеч ни

crHSplit

- 14

crVSplit

- 15

crMultiDrag

- 16

crSQLWait

17

crNo

18

crAppStart

- 19

crHelp

- 20

crHandPoint

- 21

crSize  (уарсевтш ая

)

- 22 - 22

crSizeAll ж к аТ н в е тс ы н ав и л ае с д

е

е  в ы  можте е   с  п омщ ь ю  фн укц и й  коср у р  дл я  и сп оьлз вна и я  в  п ри олжне и я  дна ог о  корс у а   в ы  н е  должн ы   в ы з ы тв а т  эт о  аиомвтачске . С в о й тс о  CustomFormCount 

и  Windows API  LoadCursor  зрагиу т ь   всо й  соб . В  эо т м  сча ул е  п о  окон ча и и  и пс оьлз ь   API- н укцф и ю  DestroyCursor.   C+ + Builder '

p r o p e r t y  i n t  CustomF ormCount= {read= G etCustomF ormCount,  n o d e fa u lt }; п оз е вя л в со й т

т   ав м  узн та о  и сп ольтез у

ь   к о и в л т сч е я  совнмсет

о   ро ф м  и  срант и о  с  и н кеис дровна ы

ц  свой ст

в   в  п ри ложне и м  свой ст

. Чща е  вгес м  CustotnForms

о  эт о

p r o p e r t y  TCustomForm* CustomForms [ in t  I n dex]  =  {read= G etCustomF orms}; ор тк п о   у си к не д ю у щ д елс и

е   п о з в е ля

ь   уо с дт

т   ч и п уо т л .  Н па ри ме м   о б р аз м

, сп и ос

к  вес

п  к о  вес х   н д елс а и к о

м   м рао ф

м  и  срна т и ц а м   св о й т в   TCustomForm  в  п ри олжне и

в   в  п ри олжне и

и и  пчюа оул

т

.

T S t r in gL ist  *F orm List  =  new  T S t r i n gL i st ( ) ;  fo r  ( i n t  i  =   0;  i  CustomF ormCount; F orm List  - > Add(Screen- > C ustomF orms[i]- > N ame); П о сл е  вы п онл е и я  дна ог о  кдо а  окъеб т  FormList  скал а   TStringListе д уб т   р ж е т а со д в  сбе е  сп и ос к  вес х  фро м  и  срна т и ц  свой ст в  в  п ри олжне и . б со лю А н т о   ан л о иг ч н ы   с в о й ас т м   CustomFormCount  и   CustomForms  свой ст DataModuleCount и  DataModules.

,

ь а

p r o p e r t y  i n t  D ataM oduleCount  =  {read= G etD ataM oduleCount,  n o d e fa u lt }; p r o p e r t y  TD ataModule* D ataM odules [ i n t  I n dex]  =  {read= G etD ataM odule};

Screen и  ге о  иинаовз сьпл

е

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 31 zyxwvutsrq

о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  DataModuleCount пеязлов т  узнта ь  кв илтосче о  мел у до й  дна ы х  (эзкморпеял в , а  свйо тс о  DataModules -  пчи туло ь  ду отс п  к  ктноерк а   TDataModule)  в  пнижерол у  эмзкрпеял у  п о  иуск ен д . С в о й тс о  DefaultKbLayout p r o p e r t y  HKL  D efaultKbLayout  =  {read= F D efaultKbLayout,  n o d e fa u lt }; Св йо т с

с а лк н мо

е п я з ло в п р и ол ж н е и я с  ркосдал

т  пичт уло

п о з ю в ял о сн в о г г чео б а р н а и ол г ч н П ра

п оз е я в л н г ехр в на д ы

и  кыр у тива л н   в  вы з ова

р   же н у

я  бы л а  аинв тк а  в  мн мео й  Windows  API,  юарбот щ и

, каро т х   н у кц ф и

т  стра

а х

т  узн та ь  вы тос у  и  ш и р н у  ргочбеа о   ло т с а  п о  н от ш не и ю  к  вн рхем у   в ле о м у  ул г о  мно ри т а  (н е  з быа ве м  о  мн омг иорн т ы х  кон рцаифуг)хя . Вы ост а  и  ш и р н . В  он дмо риыт х  кцарияноу гф х  дна ы е  свйотс о   ло т с а  июсярзмте я  в  пхаилеск ы  свойа тс м  Height и  Width свнесто о . а  свой тс ,  DesktopLeft и  DesktopTop, p r o p e r t y  i n t  D esktopLeft  =   {read= G etD esktopLeft,  n o d e fa u lt }; p r o p e r t y  i n t  D esktopTop  =   {read= G etD esktopTop,  n o d e fa u lt }; ы  лвое й  и  вн хре й  гнар и ц ы  ргчоеба о   ло т с а  он ьтлеиос ь  х -  и  у- интдраок о  ул г а  онсвог о  мрно ит а нев стсо ев то . В  онроымидт х  кц аиря униогф а  ани гочла ы  савйотс м  Left и  Т.ро о  Fonts p r o p e r t y  C l a sse s: : T S t r i n gs*  F o n t s  =   {read= G et F on t s};

у а а

о

т  узн та о  лгове е  свйо тс С в о й тс

к за ы у в еа С о в н м с те

р  рк далкс й  дскери по т

. а  свойа ст ,  DesktopHeight и  DesktopWidth, p r o p e r t y  i n t  D esktopH eight  =   {read= G etD esktopH eigh t,  n o d e fa u lt }; p r o p e r t y  i n t  D esktopWidth  =   {read= G etD esktopWidth,  n o d e fa u lt };

вД

н до пс и о ь ол к т

ь  доиркпсте . Дна ы й   р ы к в а и лу т

х

е   т сч а о   и п с м е ы ьо л з у х   в ос й т в   к л ас а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP   TScreen.  Он о  позвеял т   ч п и о ул т ь о  и з  н иа боле к  и ме н  ш во итрф , унаелвотсы х  в  смеи тс . Зе ьт меа , чт о  вйост о  Fonts пеялва тс дер т ы  п ри н еа т . о  экрна ы е  ш иртф ы  — н е  шритф С вой тс о  FormCount p r o p e r t y  i n t  FormCount  =   {read= G etF ormCount,  n o d e fa u lt }; т   в ки о л т с ч е о  с о  свой тс

о   ро ф

м  п ри олжне и я м  Forms

, ообржаметы

х   в  нщоя тса и

й  момне

т  н а  экране

.

p r o p e r t y  TForm*  F o rm s[in t  I n dex]  =   {read= G etF orm}; п о з ве я л

т  п оирй ст

ь  п о  вмес

у   пс и к

у  ообржаметы

х   в  п ирнжоле

TStringList *FormList = new TStringList(); for (int  i = 0; i FormCount;  i++) FormList - >Add(Screen- >Forms[i]- >Name);

и  форм

.zyxwvutsrqponmlkjih

о ыр т к е Н 32 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

в  VCLzyxwvut

е  и з  ксало

о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Height

С в ой т с

p r o p e r t y  i n t  H eigh t  =   {read= G etH eigh t,  n o d e fa u l t }; е ял оп д р

т  вы ост С вой тс

у  экрна а  в  п и хкалсе . о  Width zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

p r o p e r t y  i n t  Width  =   {read= G etWidth,  n o d e fa u lt }; е я л дпо е р т е я л оп д е р

т  ш и р н , п о  си т у В  доп лн е и

у  энарк , тщ кеу е  к  эи т

а  в  п хиалекс е  раз рше не и м  дув м  свойа тс

. Тика

м  озармбо е  экран м  ест

, кимбноцаи

я  свой тс

в   Width  и  Height

. ь  ещ

е  свой ст

о  PixelsPerlnch

p r o p e r t y  i n t  P ixe lsP e r ln c h  =   {read = F P ixelsP erI n c h ,  n o d e fa u lt }; ор тк жме о м а л пе и с к нч о т зр а н ы

е  п оз веля т  и сп оьлз свта

т  узн ат и  и  ликсгмчео о  дл я  вьнлиакы тр е

о  ткьло

ь  коилв чтсе я  п р и  раз ли чн ы и  еин д цма

о  п и клосе х  и з мнре и я и  дилн ы

е  свой ст

о и

о  св йотс

а

т й  кифоэц и не о  MonitorCountzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE

й  мсша бн т ы С вой тс

х  инерзим

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

ы  июме

property int MonitorCount = {read=GetMonitorCount, nodefault}; И  СВЙО СВТ

О p r o p e r t y  T M o n i t o r *  M o n i t o r s [ i n t 

I n d e x ]  =  

{r e a d = G e t M o n i t o r };

з пн е л о ы  в  мнмо гри т й  кцарнои уфг . MonitorCount пезяолв т  пчи туло м о н и ро в т , кыро т е  савюоляст т  рбоачи й  сол т , а  свой ст о  Monitors п оз веля к   о м кж а д у   м о н и о рт у   п о   и н к е су д .  О сн овн о й   м он и о т р   и ме т   и н ек д с ,  равн ы Screen-  > Monitors[0]. ц В т к ар е   о   св о й а т х   все .  В   п ри н ц и п е  эо т й   и н ормфца и и  должн о   ыб т ь об ч т ы  п р и  работ е  с  TScreen н е  и пс ы т ва ь  зн д реу та и й . П рйе д м  теп р ь  к т   н а   п и к р ат е  пмеронд истровна о  и сп ольз вна и ь м е рт у   о в с ет м у   у тк пе о р ,  д г е  е д уб вс о й т в   TScreen.

ь   в т и с л о к еч т  оиьбрста

о я й   н лю у

  о ч ат н с д о  пн доелсму

:

е

, ,

Screen и  ег о  ииноазв сьпл

й  ви д   вналг о

В н ше н и

П  мра те

ы  э  нра к

ш е р из н а Р

й  н а  дюй

  2.5. Главня и З ст па у

о  товсетг

о  п кроте

а  п окза

н   н а   ри с

.  2.5.

и  О и м  

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA О

а м фор

 ттгеьро

в   п ир о жн л е и

и н тр ка у

ы  тьгетр

а

е  п о  вла ик тре

с е ли к П

.Рис

й  фмро

е  п о  гла тоирзн

ш е и р зн а Р

33zyxwvuts

е

 гвтсое

е   и   н жа

 пкетоар

в   к н оп к

у   "С атр"

,  в ы   виу д т

е   п р и м не

о   ю у д сщ л е у

ю

. а  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA с о   с во й с т ва м и  и  м е т о да м и  TScie e n к  шMonitors[0] опелярд т  осн овн о й  мон иорт о  Width

о   и  н дигок у  мон ир т .

p r o p e r t y  i n t  Width  =   {read= G etWidth,  n o d e fa u l t ) ; е ял оп д р 2*

т  ш и р н

у  мон ир т

а  в  п и кслеах

.

а  н е у  ва м

оы р т к е Н е  и з  ксало 36zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

в  VCL

о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  HeightzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

С в ой т с

_property int Height = {read=GetHeight, nodefault}; е яол п д р

т   вы от с м  обрза ом .  жкТа х   в  сповкну ост

и к Та м о н и ра т цра у и г я

у   м он и р т , сповкну отс е   эт и  свой тс

а  в  п и кслеах ь   восй т а   п з о ел н и  с о  свойма тс

. в zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM   Width и  Height оепля др т  тщ кеу е   р за ш е н е и е ы   п р и   и с п о ль з в на и и   в   м н о мг н и о рн т ы х   н ок и ф и  Left  и  Т.ро

property int Left = {read=GetLeft, nodefault}; property int Top = {read=GetTop, nodefault}; в Сй о т с о  Left оеял пдер т   и н т д ар о к ы  лвое й  гнар и ц ы  мнори т х  мно ри т в  рочбеа м  сеол т . Св йотс о  Тро  оеял пдер т  киндтроа а   н а   щ бо е м   л д я   ь и нк л о с е х   нм о р и т в   ч ое б а р м   о е л тс .  икаТ м т  тчно о  п зои ц но итавор в  Left, Top, Width и  Height пезоялв м   ло т с е   в   мн о р г и ы т х   м х ае и с т .  В   меист е   с  он ди м л  рнпрас оте н  ткьло о  ои д н  мно ри т , зн чеа и я  свойтс в  Left и С в о й тс о  MonitorNum

ки ро т вой с т ч ое б а р о тс

а  н а  ощб е ы  вн рхе   з ар о б м ь  эмелн   м но р и т  Тро  рвна

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

е я  н а й

p r o p e r t y  i n t  MonitorNum  =   {read= F MonitorN um,  n o d e fa u lt }; о е п л я др п вр о г е с  он ди

т   н ом е о  мон ир т м  мон ир т И  н каон це

р   м он и р т а  з н чае и м  з н чае и , пнодсле

а   в   с и ем т е  свой тс а  рван е  эог т о  свой тс е   в ой с т о  ксал

.  Н мреацу и я   м он и ор т в   н ач и н с т ае я   с   н ял у о  нюл у , дл я  ворг т о  -   и ден и ц а  и  т . д . В  смиеа тс а  вдгес а  рван о  нюл у . а   TMonitor  -   свой т о  Handle.

.  Дл

я х

p r o p e r t y  HMONITOR H andle  =   {read= F H andle,  n o d e fa u lt }; Эт

о  свой ст й  мно и т

ы дж а к в  вы зова Ф н у кц и

о  опелярд т  дскери по т р  в  Windows ием т  сов х   н у фк ц и й  Windows API, н па ри ме я  GetMonitorlnfo невлъяоб

BOOL GetMonitorlnfo( HMONITOR hMonitor, // дотпирксе LPMONITORINFO lpmi // иицамрофн ); и  мжое

т  и сп оьлз свта

р  мон иорат

. Э т о  може т  п оказьст я  н оебы чн ы м . И  дкирсеоп т р  эо т т  мжон о  иптьсзалво р  в  фн укц и и  GetMonitorlnfo. а  в  Winuser.h сю ущдел и м   о б р аз м :

й  дксрие оп т

р  мротин я  о  мротин

, н о ь

а е

я   в  висрея х   Windows 98/ 2000 и  вы ш е . м  пор тмеа м  пс теа дре я  дксрие оп т р  мно ари т , а  выро т м  -   ле зкат у ь н а  ср у кт ур т у  тип а  MONITORINFO и л и  MOMTORINFOEX. К   с о ж н ле а и ю ,  н икоа й  доп лн иьент о й   и н о рм ф ц а и и  о  мон ир т е   с  п омщ ь ю  дан о й н у кц ф и и   и  ср у кт р ы   MONITORINFO п о   срван е и ю   с   и пс о ь л з в н а и е м   св о й т в   к с ал а TMonitor  м ы  н е  пчиолум . Н о  елс и  м ы  восп мьлез у я  ро укт р с й  MONITORINFOEX,  то , п ро ч и а т в   з н ча е и е   е е   н чел а   на д ы х   szDevice, сможе м   щ е е   ч и п уо т л ь   н за в н и е  мон иорат . Ко д  бе д у т  п рие вд н  н и ж е  дл я  вгес о  п раокет . В  фн цку и

ю  пывре

м е Н ог н

37zyxwvutsr

о  о  TMonitor

Тп е р ь   ва й д т е  рсармиот м   о в се т е  п ри олжне и е ,  в  кор т м   м е о дн с р и т е у zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA В н ше н и й  ви д  фмро ы   п кр о т е а   п р и е вд н   н а  ри с . 2.8. с  TMonitor.  Ј** ани в ьзо л о п  Ис

я   р аб о т

е  TMonitor

г   м ра т еП

а  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA —

ы  мро тин мз а Р е

р  п о  гилаортзн

зм а Р е

р  п о ила к ртев

т а н и д ро К

а  лове

т а н и д ро К

а  вен хр

ек д н И мИ

н исе вз т

:

о

ие н з в с т

: й  гиныцра

: й  гиныцра

с  маор итн

о

н исе вз т :

о

ие н з в с т

о

:

я  уровйст

а

н исе вз т

ра тС

о хыВ т

о

д

.Рис и н ея ж о и п л р П о сл

е   з кс п а у

и з о б р аж н е и е

а   п р и о лж н е и ,  жео пх

е  н а  ри с

я   и  ни жта . 2.9.

я   кн оп к

и   "Сарт

  2.8. Фа м р о

 тгвтосе  в  design- time

"  у  ва с  н а  экнра

е   о лж д н

о   бы т

fy, zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Ис п о л ьз о в а н и е   TM onitor м ар П т е ы  мор итн а мз а Р е

р  п о  гилаорзтн

зм а Р е

р  п о и вла к рте

т а н и д ро К

а  лове

т а н и д ро К

а  верш е

ек д н И



я  увройст

1024

:  й  гиныцра

:  а  

768 : 

й  гиныцра

с  маор итн Им

а

О : 

0 0 WSDIS PLAY1

.Рис и н ея ж о и п л р

  2.9. Вид

 згапонеущ

 тгвтосе

ь

ы ор т к е Н е 38 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

в  VCLzyxwvutsr

 и з  ксал о

й  вс ю  ртоба у  с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK  TMonitor,  рпжосела н  в  очи ктобар е  сыбои т я  OnClick , вы пнлоюя щ и и  StartB utton. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   >

дК о кн п о

/ / zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  fastcall TMainForm::StartButtonClick(TObject *Sender) WidthLabel- >Caption = IntToStr(Screen- >Monitors[0]- >Width); HeightLabel- >Caption = IntToStr(Screen- >Monitors[0]- >Height); LeftLabel- >Caption = IntToStr(Screen- >Monitors[0]- >Left); TopLabel- >Caption = IntToStr(Screen- >Monitors[0]- >Top); MonitorNumLabell- >Caption = IntToStr(Screen- >Monitors[0]- >MonitorNum);

// иеузьлопс м  ицкнуф ю  GetMonitorlnfo MONITORINFOEX Monitorlnfo; Monitorlnfo.cbSize = sizeof(MONITORINFOEX); GetMonitorlnfo(Screen- >Monitors[0]- >Handle, ScMonitorlnfo); MonitorNameLabel- >Caption = Monitorlnfo.szDevice;zyxwvutsrqponmlkjih

IIВа

м   и м до н х б е о   и т ра о б ь   в н и м на и е  н а  то , чт о   лд я   кмоп ьюре т а   с   н од и м  мно ри т м о   ко а т й   ц а и су т и   е в у тс е о т   ри с . 2.9)  и сп оьлз вна и е   св о й т в   Width и  Height а   TMonitor  ан илоаг чн о   и с п о ль з в н а и ю   св о й ст в   Width и   Height  ксал а   TScreen. т   н е  н за вн и е  мон иорт а  ка к  ткаов е е   з е ь ма т ,  чт о  Monitorlnfo.szDevice оепля др а  Samsung  755 N F), а  н за вн и е  мон ри т а  ка к  уростй ва :  WADISPLAY1. И   н а п о к с лде .  GetMonitorlnfo н е   и ден в ст н а я   н у фкц и я  дл я   работ ы   с  мон имра т и в  Windows  API,  разм уестя .  В   Windows  API  ест ь   ц елы й   р а з елд ,  п освящ ен ы й   р аб о т е с  ммнаор и т и  и  мнмор гиытм и  смаеи тс . Дл я  дпонль еи от й  и н цмроафи и  ир тмсо е р аз е д л   "Multiple Display Monitors Reference". (и мне с ка л ж к аТ (тип

е в зис т ы Н н

й  TLanguages л у М до

ь л у м од н а ни м ал о и з н в с ет ы ч б и о т к ам эт

ь   Sysutils.hpp баог т  н а  раз ли чн ы , пйожула , он д а  и з  н иа боле е  ушва дси х  C+ + Builder вще йе . Он окда , ка к  п окзаы веа е  дкела о  н е  все х  и знвсет о  в  эо т м  мл у до й  ксал с  TLanguages. р о вГ я  окровтне о , дна ы й  ксал с  може , чо т , он дкоа , н и ак к  н е  пиротвче о  з н а и е  н е  омбрен и т .

е  п олзе н ы е  и  унбо ды е   н у фк ц и я   Borland и  п зоелн ы х  в  работ т  оп ы т  общ не и я  с  раз рбчоит кам и . Та к  давй т е   в о с п лн и м  п рлоеб т  п риьсодгт т  тмуо

я  в  работ , чт о  о б  эо т

и  и  класы е  п роамг и ст , мн иог

е   н да

т а м  и з м

ы  и  расмриот

е   н то ю д м  ксал

. Эо т

ь   н е  вес о  з н ь ат

м  рзар , бгал

о

ы н с ие в з т Н

й  TLanguages

39zyxwvutsr

 TLanguages пн дреза н чае н  дл я  пчне оули я  сп и кс а  локйлае , дп уност ы х   в  си емст . с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA у  н да о  оовгриьсят , чт о  "локаль " (locale) и  "рксадл а  кры ваилу т "  (keyboard layout) щ ев и  рза н ы е  и  н е  вз аи моз ане мяы е . П они тя е  "локаль "  ш и р е  п они тя я  "рксадл а   в к иа л рыу т " и  вюкл еча т   в  сбе я  свнеобст о  рк дасл у   ры у в и к а л т , а  также , кмор е  н е , н ройаст к и ы ат д , врмен и , ди стеячн ог о  разлиеядт , дне ж ог о  з н ак а  и  ещ е  ря д  диг ру х  сп це и альн ы х п ар мо в те .  Та к   тов ,   TLanguages пчеаоул т   и мн е о   пс и о к  п нуостды х   л о к а ей .  Дна а я и н о мр ц ф а и я  бс рте я  н внпесторд о  и з  оп реац и он о й  симеыст . TLanguages уновадсел н   н в п е с т о рд н о  о т  TObject и  и ме т  сю ущдел и е   св о й а т : •   Count •   Ext •   ID •   LocalelD •   Name •   NameFromLCID •   NameFromLocalelD т   со б й  коилв чтсе о  дп уност ы х   ло к й ае . С в о й тс о  Count павелястрд в Сй о т с о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Ext пеялва тс дер т  соб й  инавиосрк ен д е  св йотс о  дл я  пн ечи уло я  сн гтора д о н е вк у б г о х е р т о   ш с ар и н ер я  дл я  локила . Дл я  аигнолйкс о  язы к а  (аирмнеак)огс , нпаир ме , ш с ар и н ер е  бе д у т  птялва с дер ь   обс й  сна итчео е   "ENU", дл я  ргокс у о   "RUS", дл я  иьнлая т г ок с о  "ITA"  и  т . д . С вой тс о  LD  авпелястрд т   о сб й  и нкисе дрова н о е  свой ст о  дл я  пнче уоли я  ине ид тф ро т к а а  локал и  в  ви д е  сротки . С в о й тс о   LocalelD   павлеястрд т   со б й   и н к ес д р о в на о е   св о й т о   л д я   ч нп е о у л и я ин е д т фо р к а а  локла и  в  ви д е  ц олег о  чи сла . в С йо т с о  Name -   тэ о  оптя ь  ж е  иинскавоер д о е  свой тс , вщзаорв ю щ е е   н а рт с о д е и м я  Windows дл я  локали . в Сй о т с а   NameFromLCID  и  NameFromLocalelD  мне е  п зоелн ы , н о  тжо е  и нсре ты . NameFromLCID  пн здаерч о  дл я  пнечи уло я  инме и  ллако и  п о  смовк р т у   н е л в а и т с пд е р ю е е  иро тиакнфе д а  (эт о  то , чт о  м ы  пмеач уло , чаи т я  св йотс о zyxwvutsrqponmlkjihgfedcbaZYXWVU  ID).  NameFromLocalelD   еал д т т о  же , чт о  и  NameFromLCID,  н о  дл я  чговилс о  иро тианкфе д а  ллако и  (эт о  то , чт о  м ы  пу ло м е ча , чиа т я  свой тс о  LocalelD). и т а р бО е  вн и ма е , чт о  вс е  св йотс а  кс ал а  TLanguages ию ем т  ду тсо п  тькло о  дл я  чнеит я (read- only). Тжка е  ои траб е   в н и м ан и е , чт о  вс е  свойа ст , з а  июклс нче и м  NameFromLCID и  NameFromLocalelD,  явюля с т я  и н кесидровна ы ми .

К сал

С з ар

оы р т к е Н е 40 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

п Т ре ил ш п жо л и д е р м

ь  ои д

 и з  ксал о

в  VCLzyxwvutsr

ь   о  мхаодте . З а  июклс нче и м   ор к т н у с а   и  доркат усе ,  у zyxwvutsrqponmlkjihgfedcb   TLanguages  гевс о н  модте :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC  IndexOf.   О н  воз врща е т   и нк е д с  локла и   п о  е е  инеидорутфка .  Т о  ест ь , чт о  иьланят кс я  локла ь  пчиренлс а  тьрет й   в  TLanguages.  д гоТ а  вы з о в

IndexOf(0x0410) нр ве

т  2. (И н кцеас ди я  н чаи нс теа я  с  нял у , о б  эо т м  н е  з баы вме. ) и   в и ст у о и   ло к а и   с   к за н у ы м   ч и сло в ы м   ин е д т фор к а м   о мт е д   IndexOf рн в е т zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  - 1 . П ре д   в н с ео б т о   н па и н с и е м  кдо а   аолст ь   кс з а т ь   п о нс л е д :  н е т   и нодмтсхбе и з   о п рт а е р   new.   Дл я   ог эт о   е с т ь   с п ц е и ал ь н а я  фн ку т ва оз с д ь   э к з ме п ля р  TLanguages чре ц и я , LanguagesQ, ткжа е   н е в л ъояб а я  в  Sysutils.hpp и  воз вщра ю щ а я   кл е за т у ь   н а  океъб т TLanguages. рпе Т ь  пе убпор м  пнирем т ь  пн еч ыуло е  зн а и я  н а  пиектар . Ззи тур га е  тыво тсе й  пкеор т в  C++Builder. Н а  энарк е  днжло о  псь ивтяо я  нтч е о  пежо хо е  н а  пне идрво е  инжеарзибо . Пр

е  с п и с к

Ь« * Пол еуч ни ID

Ext

Ц н юш к

о  дынп у ост

х  л о ка л е LocalelD 

-  

В с ге

а  дост пуны

Ц шм ш

х  лйел а ок

  2.10.  C++Builder с  зм ыне агужр

N ame

и

:  О ра тС

Рс.и

й

т

 в  нгео

о хыВ

 тмвтосые

д

 пкемто р

41 zyxwvutsr й   TLanguageszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ы н и ес вз Н т

и З ст п а у

е  п роке

т  и  н жами т

е  кн оп к

у   "Са"рт

• • l - ! ^  .1! •-  •

. Во

т   от , чт о   у   ав с  должн

' . U I ' . ' M 

о  пчиоьлусят

.

l _| - f x|

Ext ARA BGR CAT

ID LocalelD Name  • •* р б а с Аи к й  (Са свокд у а я  Аяив ар ) 1025 0x00000401 р ис а о г Б л к й 102S 0x00000402 1027 и сн а л к т К й 0x00000403 1028 й а си т к К й  (Тьн авй ) 0x00000404 ;  сн т zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA еш Ч с и к й '  CSY 0x00000405 1029 с а т и Дк й DAN 0x00000406 1030 ме Н и ц к й  (Гмяирен а ) DEU 0x00000407 1031 и се к чр Г й 0x00000408 1032 ELL н илг й А с к й  (США ) ENU 0x00000409 1033 1034 с И нп а и к й  (тан оиц д ар я  с оирт.а . 0x000004OA ESP 0x00O0040B 1035 и Ф н с ки й FIN р ан Ф ц уз с и к й  (Фциняра ) 103S Ox0000040C FRA ир в И т HEB 0xO000040D 1037 В е р нг с и к й HUN 0x00O0040E 1038 : 1039 и с д н к аИ л й Ox0000040F  ISL 1040 иснйя(к ьла тИ ияла тИ ) 0x00000410 ITA 1041 п о Янс и к й 0x00000411 JPN о р ей Кс и к й KOR 0x00000412 1042 и с кд н а л о Г й  (Ны д н а лре ни ) NLD 0x00000413 1043 с и к о Нр в е ж й  (бм клоу ) NOR 0x00000414 1044 1045 с и о к ьП л й   т\ 0x00000415 PLK В с ег

о  дынп у ост

х  лелаок

!с  126

i  Стар

Рс.и

т  j

о хыВ

д

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP

 Зй апынеущ  пкето р   2.11. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Тп е р

ь  раз бремся

ав п ел я с т р д

т  соб

й  сю улдещ е

, ка к  эт о  селанд о .

. Очбриаот

к  собы и т

я  ОНСскп

 кн оп к

и  StartButton

// zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  {

fastcall TMainForm::StartButtonClick(TObject  *Sender) TListltem  *NewListItem; LocaleListView- >Items- >Clear(); f o r ( i n t  i  =   0;  i  C oun t;  i { N ewListltem  =   LocaleListView- > I tem s- > Add(); N ewListI tem - > C aption  =   Languages () - >Ext [i] ,-

оы р т к е Н е 42 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

в  VCLzyxwvuts

 и з  ксало

NewListItem- >SubItems- >Add(Languages( NewListItem- >SubItems- >Add(Languages()- >LocaleID[i] NewListItem- >SubItems- >Add(Languages()- >Name[i]);

LocaleCountLabel- >Caption = "Вг е с о  ынпутсод х й  елако : IntToStr(Languages()- >Count);zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR

II- zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA лД я  эо т

лд

я  выдов й  цл е

а  и цнмароиф и  кмпно ет

и  о  лялкао . И  в  ц и лк

м zyxwvutsrqponmlkjihgfedcbaZYXWVUT   TreeView ка к  н иаелоб е  пщ я идо х до й

х  м ы  ие пьзслуо е

fo r ( i n t  i  =   0;  i  C oun t; е я лв а бо д о  лхяолка

м  в  спиос .  а

р Со к т

к  н ыво

й  энметл

, в  кырой т

, в  сов

ю  оь дерч

, деялвабо

м  вс ю  ицмнарои ф

ю

*

NewListltem = LocaleListView- >Items- >Add(); о б а вд л е я

т  н овы а

ко р С т

й  элмен

т  в  TreeView.

NewListItem- >Caption = Languages()- >Ext[i]; о м ре и ф у кн в е уб о

т  срежиод м е  расш и рне и а

ко р С т

е  кнол к е  локали

и  "Ext"  в  TreeView:  з ан оси

т  в  н овы

й  эмлен

т  сп и кс

а  тхер

-

.

NewListItem- >SubItems- >Add(Languages( е уи м р о ф н и е о д фт к а

т  сжиремо д р  локали ор к С т

и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF  "ID" в  TreeView: зна иос т  в  ныво й  энмел т  спикс а ывок р тс й

е  кнокл .

а N ewListI tem - > SubI tem s- > Add( Lan guages( ) - > LocaleI D [i]) ;

о р м фе и у ч и о вл с в а е л п тс д р ч и о лв с г

т  срежиод м й   н и е д от ф к а н   в  ш н стцерида чн о о  инеидортфка

е  кнол к р   ло к а и а  ткжа

и  "LocalelD " в  TreeView:  з ан оси т  в  н овы й  элмен .  иОтрба е   в н и м ан и е ,  чт о   рокствы й   н и е д от ф к а м   ви е д , а  чи олсв й  -   в  диестя чн ом . Дл я   внаелпст дри е  в  ш н стцерида чн о м  ви д е  срок т у

т  сп и кс

а р я

N ewListI tem - > SubI teras- > Add(Lan guages()- > LocaleI D [i]); н да

о  з амне и т

ь  н а

N ewListI tem - > SubI tem s- > Add(I n tToH ex(in t(Lan guages()- > LocaleI D [i]),  4)) ;

и н о а зв с ь И п л

43zyxwvutsr

е  TAction в  C++Builder

И  н каон це

, п носдле я

я  срок т

а  в  ц и кл

е

N ewListI tem - > SubI tem s- > Add(Lan guages()- > N am e[i]); з ап о л н е я в  н овы

т  чу рвте й  эмлен , снев тсбо

ю  кноулк т  сп и кса

, "N ame", н занв и е

т оВ , и  вес , чт и  с о  омс"вку , и б о  нечза м  ита зербо й а рн к е й   м ре ,  д гок а   ав м  п сноиб тда о  н и х , в ы теа л дс е  эт о  в  тнче и

и а н в о з л ь сп И

м  дна о

й  локила

, з на ос

я  дан о

е  н за вн и

е

.

о  зн та ь  о  ксал е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO  TLanguages. Ка к  гясиров т , "пнеротськ о ь  висолпе д  там , гд е  о н  уж е  е ит зрбо н  рна е . Тпеьр , п о я   чи т п у л о ь   пс и о к   е л ак о й   и  кук тар ю   и н ц м ра о и ф ю е  ньиклосе х  ми тн у .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

о  н да

е  TAction в  C++Builder н Од и я  дивйетс

с те м и н аво р

и тд Су чт о  п оьлез тва н п ук т к ом и б н ц а и н м ое (пн тку К с ал с п ро ц се

м  и з  эикетфвн ы х  и нмеруост в  дл я  ц не рила тз овна ог о  управнле и я  ко д м  явля е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  (TAction).  Оносб ва н о е  п ирнме и е  TAction зьнлечиат о  упщор еа т  пмарго е  п ьлоксегз тва о   и н ре й ф т с а . е  сам и . С овмрен ы е   к он ц п е и и  п ьлоксегз тва о   и йн е р ф с т а   ю п а г д о л ре т , е   р з а ил ч н ы м и  сп осбам и : чре з ь   м жо е т   в ы п о нл т я ь  он д о  и  т о  ж е  дйевист  мне ю  (гнвалго о  и/ ил и  впсыл юав щ )оге , кн пок у  н а  ьнлмаеи туор с й  п на иле , ни тжа е и  квиал ш  и  т . д . В  зависм ост и  о т  ноя сти я  п рмаог ы , эт о  дйе вист е  в  кы жда й т  вмнер и  мжео т  бы т ь  дп уност о  и л и  нп нуостде . Евнест о , энмел т ы  и йнерфст а ы  мне ю , кн поик ) днжло ы  ан тавк е д о  отаж р т ь  дп н утсо ь  ил и п нн утсо де ь  дивйеятс .  TAction,  опсебчи ва я  сзвя ь  мжде у  дйе вист е м  и  эмелн а т и  и нйерф сат , свиод т  все ь с  упнрваел и я   п н у о ст ь д ю / п н у о ст ь д е ю   к  сроткам :zyxwvutsrqponmlkjihgfedcb

MyAction- >Enabled = true; ЛИ

И MyAction- >Enabled = false Дл

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

е  дйе вист е  кно текмр у   Action кго жда т  у  все х  комп н еов т о   ви а оп с т ь   н м е р вд о я   м ож н о   п р о и з в ес т м   в н се и я   ю в у щ тс е о г .

у  эмнел т о   э м ел н т

. fa st c a l l  TF orml:  :TF orml(TComponent*  Owner) :  TForm(Owner) TAction* Action = new TAction(this); ExitBtn- >Action =  Action; ExitMenu- >Action = Action;

у  ил а   п ри в ос т

, пнеоржд ы и   ак

о   и ьк л н о с е к  в   ид з ай н - реж и м е о   а д ок

и  гп ру е  эел ь   м е о рб у т е х   о т  TControl. м   н а м е эл т м , та к .  Н па ри ме , эт о

ы ор т к е Н 44 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

е  и з  ксало

в  VCLzyxwvutsr

н к адО о  елс и  пьс птоаы я  онаритлвсо ь   и  зи тспау ь   н п и ж е ор л е  в  ток а м  веи д , т о  н и ы в нп л о и т ь  пн ку т  мне ю , н и  н тжа ь  кн пок у  н е  уяс та д ,  а т к  ка к  мне ю  и  кн по к а  бу д у т  золба н аи к в о р ы . Бело е  тог , н а  мн е ю  и  кн пок е  бу д у т  отаво с т ус т ь   н п ид а с , джа е  елс и  св йотс а zyxwvutsr Caption и  бы л и  зпанло е ы  у  эи т х  энмоелт в  унпевлар и я  в  дизйа н - жиер м . Эт о  сзнаяв о  с  тме , чт о  св йотс о  Caption  н е  бы л о  зпнало е о  у   мгоас о  экзмпреял а  TAction. Сио т т  н а м  ткьло о зп н а л о и т ь  эт о  свйотс о  у  эрмзпкяел а  TAction, он о ки асечтмоа в и  онб овси т я  и  у  вес х  энме л о т в  упневлар и я . Эт о  кс теас я  н е  тькло о  Caption. Акисечтмоа в и   к жа т е   и с н о р юх с з и у т р я в йо т с а   Checked, Enabled, HelpContext, Hint, Imagelndex,  Shortcut  и   Visible,  лсе и  он и , н оч к е , ю ув тс пирус т   у   н г о т ке р о   н м е эл т а   п н ев л ра у и я .  Вс е   ьлан дйе ш и е  и знме и я , н е п и од р з ыв е  с  эи мт и  смиавйотс , акисечтмао в и  у д у б т  оьс тжар я   и  н а  вес х   намеэлт х н еп лв а р и у я , ацосинавор ы х  с  дна ы м  эормзпкяел м  TAction. Тика м  озарбом , в  н ша е м  рса н ж е п я р ио и  осзаыктев я  мна ихзе м  цилнарезвот го о  унпевлар и я  н е  тькло о  дйвиемтся , н о н яо и т с е м   и  снжареидо м  свойтс в  энмеол т в  упнвреал и я . Тпре ь  н е т  нитмсод хбое и  п о ь нл е т со д и  пиратвс ь ю  сущв тсе в то е   н ж ра е и д о с е  Caption л д я  пн укт а  мне ю  и  кн оп ки . В п н ло е  дчно та со о  вы пнло и т ь  п ирнеовс е  тькло о  дл я  эзмкрпеял а  TAction.zyxwvutsrqponmlkjih Action- >Caption = "В" ьтинлопы п Т ре

;

ь  пр

и  вы п онл е и и  пмраог ы  и  кн оп ка , и  пн ук т  мне ю у  бу д у т  нп ну ытсо де . Дле о  в  тмо , чо т , сзява в  эт и  энме лт м ы   н е   ла з д и   ог т ,  очт ,  внсеобт о ,  ожлнд о   в ы п о л н ь с ят .  У и мю е с т я  ещ е  и  тр и  собы ит я : OnExecute, OnHint, OnUpdate. И з OnExecute еял дпоер т  оич ктобар , кыро т й е  бд у т  вьш снлотя я  п р п р у ав н л е и я .  и даЗ м   о э т т   ч о иб р а т к .  Пктса у ь   п р и   г е о   в ы п о лн е и о щ сб н е и е  "В ы п олн е о" . п - о жн п м е р

 бу д у

т  и мте ь  н за вн и я ы  унпевлар и я   TAction,  корм  эит х  тре х  соыб и т и  знавойиетс да и  е д уб т   в ы ьи с о д т

void  fastcall TForml::ExitActionExecute(TObject *Sender) { ShowMessage("В" оне л пы ) ;

Модиф цируе

м  ко д  л е т а а р о т к у р т с н о к

.

fastcall TForml::TForml(TComponenfOwner) : TForm(Owner) TAction* Action = new TAction(this); ExitBtn- >Action = Action; ExitMenu- >Action = Action; Action- >Caption = "В" ьтинлопы ; Action- >OnExecute = ExecActionExecute;

, н о  с  T Action, е   св о й т , й  и мне о и  энмелт а я

и н а о в з ь с И лп

45zyxwvutsr

е  TAction в  C++Builder

е  эи т

П о сл я  вы п олн е и я

лд

х  и з мне и . Н мен ог

ы ор к т

х   п о ь л е з тв а "В ы п олн е о

ыро т к р ше не и ес л

"  е д у б е  яюсялв т е  -   ваист

т я  эмарпзкяел ь е  услови

и  ни мдыо хбе void 

й  и  пн ук т  мне ю , и  кн оп к а  пр и  робта е  пмарго ы  бу д у т  дп уност ы у  и  н жоила м  доп лн иьент ы е  орган и чне и я , пр и о  уожлсн и м  зча д ь   м жо е т   в о пс ь л з с о в т а я   м не ю   и   к н оп к й . Н па ри ме , со бщ ен и е   п ь с я т во л ,  сел и   пльеозтва ь   з п а о нл и л   п ол я   Login  и   Password, и  кмпно ет а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO  TEdit.   Н еилоаб е  по трс е  и  н пашр июав щ се я   в  очиобрат к   п рк о в е у   и  вы тсве и   п н с оя ю щ е е  собщ не и е  в   чаеслу , я  н е  бы л и  вы п онл е ы .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

fastcall TForml::ExecActionExecute(TObject *Sender)

if(Login- >Text.IsEmpty(] ShowMessage("Лиго return;

Password- >Text. IsEmpty(

н  и  пл о р а

} ShowMessage("В" оне л пы )

ь  дн ж л о

ы  бт ы

ь  " ыне лопаз )

;

;

} В   о э т м   ч а улс е   п о ьл з е в т а ,  об чт н  сн чал а  п оп ыьста я   в ы п о лн и т о н  слеад л   н е  так . TAction  ваепляострд н и ю  дан о й  зачид :  з паи тре ь   в о з м ж н о тс п ок а  об а  п ол я  н е  бу д у т  з ап олн е ы .  Дл и те м  -   TActionr.OnUpdate.  Эт о  собы и т п р о агм ы , ли б о  п р и  обн овле и и  сп и кс в п о нл е  павоистрде ь  сжелн и е  з а  дп уност ь Ко д  очибраот к а  дочнат с о  п ртос .

ы   в ы сн я и ь т ь  дйевист т   в о з м ж н от с

,  чт о   о н   лае сд л   -о ч т т о   н еп р а в и л ь н о , м  пчи оулт ь  раз ъсян е и е  о  том , чт о ь  рлиае з овта ь  дог ру й  по х до д  к  рше е ь   в ы п он л и т ь  пн ук т  мне ю   и л и  н жат ь  кн поук , я  эог т о  ни мдо хбе о   в о пс ь л з с о в т а я  диг ру м   о с ыб е  зс ктпае у я  ли б о  в о  вмре я  "хог лтс о   а к од " (idle) а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK  TActionList. Очибраот к у   ог э т о  собы и т я  можн о ю   й е в ид с т я   в  кно текыр й  момне т  врмен и .

о лж д е

void {

е  и  зе та

.fastcall TForml::ExecActionUpdate(TObject *Sender) ((TAction*)Sender)- >Enabled = !Login- >Text.IsEmpty() && !Password- >Text.IsEmpty();

Д о в ба и

м  в  ко кт нур тс

р  ещ

е  он д

у   у кч о р т с

.

Action- >OnExecute = ExecActionUpdate; И  оп тя н п ук т  мне ц и ю  в  об в о с п ль з о с в т а

ь  зи тспа у ю  и  кн оп к а   п о ля , мне я  и м и

м   м п а р у ог т  нп уонстде ы м и а  бу д у ю  и  кн оп к .

.  П ко а  бу д у

а  хто т  тчаот

я   б ы   н до о  и з  пело . Н о  ка к  тькло о  п оьлез тва с   ж е   з р а о кл б и н в

й  ос тае

я  н зепа онл е н ы м ь   в н се ы  и  п оьлез тва

, т  и н мроаф

ь   мс о ж е

т

о ыр т к е Н е 46 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

 и з  ксало

в  VCLzyxwvutsrq

я  п о  пмаинрвог ю zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM  TAction бы л и  вы пнло е ы  пов тс деро м  н пиа П ко а  вс е  двийетс нас и я  ка до , хто я  вы ш е  бы л о  упо мнтя у , чт о  онелпдр ы е  мнцаяли п у и  мжон о  вы п нол и т ь и  в  дизйан - жиер м . С а м  TAction яс теявл я  днроче и м   о с а лк м  TComponent, н о  рчи ктозбар и VCL- к е итлоб и  рше и л и  н е  пиратвс ь  ем у  сеов й  и кон и , пмо эт у  в  прилат е  кмпон е т в в ы  ег о  н е  н еайт д . Р отба а  с  TAction в  диз йа н - жреи м е  ощ су влтея я  н е  н певнсотрд о , а  чер з  кмпон е т  TActionList. оЭт т  кмпон е т  пеявла тс дер т  соб й  кйное тр , щжареидос й пс и о к  дйе вист й , и  пн дрезан чае н  дл я  оанрг и з ац и и  работ ы  с  дейвист мя и  в  диз йа н - жреи м е и  дл я  она гир зц и  цилназрвео т г о  унпелвари я  дйвие мтся . Н паир ме , дл я  вы пнло е и я п ывоу р г х  оцпареи й  тип а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA for  (int i = ActionList- >ActionCount; i- - ; ) { TAction* Action = (TAction*) ActionList- >Actions[i]; if (Action- >Category == AnsiString("Categoryl")) Action- >Enabled = false; К мо п н е т   TActionList  рпса олже и  елс и  и м  восп льз осявта , т о  все ь   док н еж н у ы м . Дл я   огэт о   р аз и м с т е м   к ом п н е мн е ю   вы з ове м  Action  List Edtior и  оп тя э к з м е п ял р  TAction (ри с . 2.12).

йаФ

л

н   н а   к д а вл е   "Standard"  в   п алир т е   к ом п н е ов т , рспа олжне ы й  в  тле е  корактн у с , сна т овис т . Чер з   пв с ы л ю в а щ е т  TActionList  н а   офрм е ь  ж е   чре з   в с п лы в юа щ е е   м не ю   и с о дз а м  н овы

, я е й

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA irt_init)

'  Логи

н  ' * I ; Editing Forml- >Acli ! мгэ (TComponen

ActionListr  Categories: 

t

Actions:

new  T Act io n ( t li |  New Action New Standard Action... •   Move Up •   Movetw.r, Cut Copy Рс.и

  2.12.  Саине здо

а р эя пл к мзе

 T Action в  дизай-н е им же р

Ctrl+X Ctrl+C zyxwvutsrqponmlkjihgfedcb

и н оз ав с И ь п л

47zyxwvuts

е  TAction в  C++Builder

м е Зт а , ипьсзлоу я   Object Inspector, ое иуртка дер т м   в йо ст а  и  сыибо т я zyxwvutsrqponmlkjihgf  Action: зпанло и м м  сияы бто м zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH  OnExecute и  On Update сю щуви тс ев то е  ичк тобар . в й от с о  Caption и  иовпрс и  и н тпку а  мн е ю  зн липоа м  св йотс о  Action,  выарб в  и м я  и з жк аТ е  чер з  Object Inspector у  кнпко ю ы ав щ п д г е о   п с и ак . П лсо е  эго т о  мнжо о  уилта д ь  все ь  кдо , ннарб ы й  в  тле е  каро тк урно тс , п р и  эо т м  н игче о  н е  пяре то в  в  рпнсоб т а и  и  фн цкуиноьлтас и  пмарыго . н а ит в оО с м я  пнбор ед е  н а н а ихзме е  вивйзетсамдо я  Action и  эноме лт в  упнвреал и я . Вн ш е н е  лиогк а  дивйетс й  ви д яыл г т  дьнлов о  пой тср : кд го а  сыеатв бр т  энме л т  унпевлари я , вы об р  пн тку а  мне ю ) , выс зтеав я  мо т е д  TAction::Execute(),  кыро т й  вузбо (ни тжа е  кн поик е а жд т  сыибо т е  TAction::OnExecute, гд е  и  сыв тнплеоя я  пикьсле тьзавло й  кдо . В  бьшло и нв тс е я  дивйетс я   с а лк с   TAction и  онарги ч ав в че а у л с ,  д гок а  пмаригос т   е и п ь з с л оу т  дл я   на зди с т е я   ь ол к т о   о п н ле рд и е м   о с бы и т я   OnExecute, эт о е сву ст ео т   н ок ч е м у  у та ьл зеру . В  дьнлетсиов й и  ричк тобзар и  VCL и  CLX (пкьло с у  вс е  сзнак о е  осни то я  и  к  нмов у и   C+ + Builder)  лазосд и т пе к а у   н м р ео ф ж п т а л о й   к и з аро т б ,  ивпшясо муе я   в  6- й  висре е ло б е  гикб й  мна ихзем , па ждор я  н е  он до , а  цуле ю  цкпчое у  соыби тй . Кмор е  смгоа о  TAction в  н е й  муго т  п ри н тя ь  уи тсча е  спиос к  двийетс й   TActionList,  к  кмор то у  п иржнел да т   й е тс д ви е , пинржоел е  TApplication,   инвтка я  фмаро , гнвал я   мро ф а  пнижреол я  (есл и  аи внкт а я й  энмел т  упневлар и я . Рир мстоа , кика м  ж е  зароб м м ро ф а   н е  яс теялв я  гнвалйо ) и  инвткаы и  в  кок а м  пк дяро е  оспчитебав я   н т с м в оа е я  ртоба а  вес х  знавойетсдаы х   о в к бъ е т . Дл я н л ач а   зо н мик а с я  с  ныром тке и  онебосмя то и  рилаезц и и   TAction.   иИ храе я  ковсал , и л ю а ер з у щ и х   в ий е т яс д , пзнако а  н а  ри с . 2.13.

Рс.и

  2.13.  Ихаиряе

 кв,оса л

 ризующх але

 дтйевсия

 (Actions)

ы ро т к е Н е 48 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

в  VCLzyxwvutsrq

  TBasicAction, кыро т й  яс твеля я  бзаовы м   о с ак л м  дл я  вес х и  лжеи т zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB х   ей д в с ит я .  олБе е   п р о бн д о   с  н и м  можн о   о з н к ао м и ь с т я  п о  сп ра нч о в й  симе ст . Оимте м   ю у с дл е щ е . 1.  Довьлн о   п р о з ча н у ю   р а ел и з а ц и ю   ьл а н в и у ы рт х   о д тм е в zyxwvutsrqponmlkjihgfedcbaZY   ExecuteQ  и   Update(), ы ро ет к , ка к  и  ожиалосьд ,  п рост о   в ы з юв а т   ю в у щ тс е о и е   о с бы и т я  OnExecute и  OnUpdate,  есл и  он и  опнлерд ы . 2.  Н али ч е   о д п л н и е л ьт н ы х   в иа л ь у н р т ы х   о дм т е в   ExecuteTarget(TObject* Target), HandlesTarget(TObject*  Target)  и  UpdateTarget(TObject*  Target), ыро тк м  в  кв тсчае е м н е у т гр а а   с п тае р д я  н кие й  ц веол й  (сд у я  п о  нза вн и ю ) океъб т  и  кыро т е  пко а  н игче о н е  дюале т . В   в кчтсае е   ц в о ге л о   к о тъ б е а   с п т еа р д я   л е зк а т у ь   н а  аи ктвн ы й   э м е лн т л о р н кт я  и л и  н а н помте к . тЧ о  кн т еорк о е д бу т ясь  птав д ер , ос теял дпер я   и л зца е р й ь л а н в и у о г рт о   од мт е а   TComponent::ExecuteAction(TBasicAction* Action). ю щ у и д е Сл м  п о  ии хра е и  яс теялв я  ксал с  TContainedAction,  в ор кто м н делвабо ы  св йотс а (в и  чнтсо а , св тйосв о  ActionList)  и ы до  т ем , ныим д о х б о е е  дл я  рто б а ы  в ва тсо е  спкис а ив  дтйсе й TActionList, и , само е  главн ое , п реопл д н  мо те д  Execute. Тпер ь  эо т т  мо те д   з апс к е у т ц п к ч ое у  вы зво , каро т я  в  нца ито и  Object Pascal ви дяыл г т  сю щу деил м   з ар о б м . В   н ос в

о в к т ъ еб

 и з с алок

е  ии реах

,  лиаре юз у щ и

fu n c t io n  T C o n t ain ed Act io n .E xecu t e:  Boolean ; begin R esu lt  :=   ( Act io n List   n i l )  and Ac t io n L ist . E xec u t eAc t io n ( Self)  o r Ap p lic a t io n . E xe c u t e Ac t io n ( Se lf)  o r  i n h e r i t e d  E xecute  o r (SendAppMessage(CM_ACTIONEXECUTE,  0,  L o n gin t ( Se lf) )  =  1 ) ; en d; м  вн е д в а  пкжр е д о а  дл я  йовтс в  и о  мд т е в  пон тку в е т За м  иу д т  TCustomAction,  в о кр то н ем ю  и  эон емт л в  кялорн т , и  снев тсбо о  са м .посй ТА  Эт и в д а  кс ал а  н гиеч о  нгов о  в  рса ы м е аи в р т а м с й  мнаизх е м  н е  втнясо . Ии хра е ю  змыюак т  кс ал ы  та к  н змыае в х   н ыт р а д т с х н е лпо д р ы х   й е дв и с т й   (standart  pre- defined  actions  classes). Гвнал о е   и х  оли тч е  о т TAction в  тмо , чт о   в  н и х  пнел подер ы   нр а е е   н м ы е и п ьсз л о у е   д о т ем ы  ExecuteTarget, HandlesTarget и  UpdateTarget,  н а ыро т к е  и  пнерс н  онс во й  фн цкуинола . ExecuteTarget и  UpadateTarget пнюемя до т  соб й  мдо т е ы  Execute и  Update.  Мо т е д  HandlesAction реилзау т н а и з х ем м   к р е вп о и  тип а  и  н яои тс я  цгов ел о  отк еъб а  н а  ме дпр т  ршзеран и я  ил и  зщ пера н и я  вынлпеои я  ExecuteTarget и л и  UpdateTarget н а  н мео т  и з  ывазо . . П р и ныаивт б ар с и  эн етм л а с м е й дП о р я  тпре ь  п о  ве с й  цкчпо е е  воывз в о мд т е в  и ийы бтос п н в е р ла у и я   в ы з ы с в т ае я   ь л а н в и у ы рт й   о тм е д   TActionr.Execute, н о  п кьосл у  Execute л д я , рьлнае о   ыв с з т е ав я   о т ме д   к дп е р а   TContainedAction::Execute() TAction н е  пнел подре (см . р и с . 2.14). zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и н а о в з ь с И лп

49 zyxwvutsrq

е  TAction в  C++Builder

TApplication::ExeaiteAction

OnExecute!= N U LL

CM  ACTIONE

TConpanentxExecuteActiian

T Action: :ExecuteTaiget 

TAclian: :HandlesTarget

Puc. 2.14. Пко д яро

 ввзо ы

в о дтео м

 пир

 вине лпоы

тйевс ияд

 (Action)

I zyxwvutsrqpo

о ыр т к е Н е 50 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

 и з  ксало

в  VCLzyxwvutsr

оЭ т т   о тм е д   з апс к е у т   ю у п щ д ео л с у ю   ц п е чо к у   вы з ов , п рвеы м   и з  кыро т х  яс твеля я м о ет д zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ExecuteAction  сп и ск а   ед й с в т и й   TActionList,  корты й   ге н е р и ре у т   с о б ы ит е TActionList::OnExecute.  П р и  эо т м  соыби т ю  пс теа др я  дв а  п арм ет : указле т ь   н а  дйе ви тс е   TBasicAction*  Action,  негс ри оваш е е   со бы и т е ,  и   ыс кл а   н а   в ел уб о   з н ча е и е AHandled. Ворт й   п ра м т е р   т е я л оп д е р , бе д у т  л и   нжлеоп др а   ц п е оч к а  вы з ов в   а л ьд ш е . Дл я  пнжоле рди я  ц пеочк и  вы з ов в  ли б о  Handled дожле н  бы т ь  раве н  false,  ли б о  соыби т е п е Е Ш Ох с  н е  оп ленрд о . лЕс и  цкпчое а  ыб л а  пн ежало д р , сю щу ид ел м  всы тзеав я  мо т е д  ExecuteAction пн ежио лр я TApplication, кыро т й  гне ри у т  собы и т е  TApplication::OnActionExecute с  тме и  ж е  пар р ам и т е , чт о   и  у   щыпудрег о   ос б ы и т я , и  с  тме и   ж е   о лсв и м у я и   п ожл н е р д и я  ц пе очки . Ел с и   и   в   о э т м   ч а с лу е   ц п е чо к а   н е   п р е в ал с ь ,  вы зс отве я   о тм е д   TBasicAction::Execute и  снвеотбс о  собы и т е   TAction::OnExecute. с еЗ д ь  ц пе очка , ка к  п рваи ло , з акн чи сявате . П жолиьсрдт я  он а  може т  тьолк о  в  счеа лу , лсе и  собы и т е  OnExecute н е  занд о , а  и сп оьлз вна и е  TAction с  н зеанд ы м  OnExecute н е и ме т  смы алс . В р ен м с я  к  оавшст йе с я  чсат и  ц пе очки . Он а  пн дрезан чае а  дл я  и сп оьлз вна и я  в  п ре о н п ле д р ы х  сан тр ды х  дйевист я х  и  зкаюл с тче я  в  п оыс кл е  п ри олжне и ю  сощб не и я CM_ACTIONEXECUTE  с  п омщ ь ю  фн укц и и  SendAppMessage дл я   VCL  и л и  сощб не и я QEventTypejCMActionExecute с  п омщ ь ю  фн цку и и  QApplication_sendEvent дл я  вари н т а CLX.  В   качвест е   о вр т г о   п а р м ет а   п е рс а т д я   к а з у ел т ь   н а   е дй с в т и е .  П ри лож ен и е п ер а дс у т   с о б щ ен и е   н а   иа к т в н у ю   м ро у ф ,  оракт я   в ы з ы в ае т   в и а л ь у нр т ы й   о м те д ExecuteActionfTBasicAction* Action) аи ктвн ог о  эмлен т а  управлне и я . В  эо т м  сча ул е  ву тс п юа т  в  дйе вист е  вьланиу рты е   од т м е ы bool  T Act io n ::H an d lesT arget ( T O bject *  T a r ge t ) ;

T Ac t io n ::E xec u t eT arget ( T O bjec t *  T a r ge t ) ; П р в ые й  опелярд Target, вор т й   П о  унчамлои ю  в ExecuteAction бы гов о  оа тк еъб , с теял дпеор л с е и   т и а ь з п в ол с им т с а р г п о а  ос т ежак

т  воз мжн отс р ж е и со д

т   в ы п он л м е ы я  кв тсчеа е   говц е л л  вынзав . Окн а д я   н о т е кр ь   н а и з х ем м   ы в зо я  бело е  гикб

ь  вы п онл е и

я  дна ог о  дйе вист я  дл я  ц воелг й   док ,  соац и ровна ы й   с   ан д ы м   о   тк е ъ б о а  с теа дпре я  ле зкат у ь   н а  кмпно ет о  эт о  н е нь олое тзаяб . Чт о е  бд у т сь т пав д ер я  в  кв тс еча й  рилцзае й  мдо т е а  ExecuteAction. Тика а   д о т ем а   TComponent:.- ExecuteAction,  в  рнжеияпрсоа й  и  мщо н ы й до т ем , че м  пр и  ин аивзьолпс и  птсор

о  октъбе ей д в ис т ем , че й   о тме е  цел м  омзоарб

а . д ,

и о  TAction.

е  TAction в   C++Builder zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC 51 zyxwvutsrqp

и н а о в з ь с И лп

Ка

к  уж е  бы л о   к аз у н о   вы ш е , эо т т   на мхие з м   п ри м не с т я я  в  пноелпдр ы х   ан с т й   и рс в е и  C+ + Builder. х   йе в д и с т хя ,  н оба р  кыро т х   щ су в н е т о   р ас ш и р е н  в  ш о сте К  ран е е   щ в о у с аш т е и м   ж у е   п р уг а м   Edit  Actions,  Window  Actions,  Help  Actions и  DataSet Actions бы л и  добавнле ы   п ру г ы   Format actions, File actions, Search  actions, Tab (page control) actions, List actions, Dialog  actions, Internet actions, Tools actions. Взомжни тсо , п а в м е л оя с т ы р д е   н а рт с ы д м и   йе д в и с т м я ,  мжон о   п м е о р н д и ст р о в а ь   н а   п ри м е е п р о ма г ы ,  илареюз ущ е й   н о т с и леь нт о   ож л с н ы й   о ри г л а т м   м н а и л п н ор в а у и я   ан д ы м и ву д х   п с и к о в   (коп и ровна и е , п рмещ не и е ,  нлае д иу )е .  П р и  эо т м   все ь   оэт т   н уфкц и он а л е д уб т  саоз д н  тькло о  свма тс дре и  диз ай н а . Си даоз м  пкторе , н а  мроф е  рсап олжи м  дв а  мок  TListBox,  п тя ь  кн оп к  TSpeedButton и  сп и со к  дйевист й   TActionList.  В  ртаьлзеу е п он е т а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA у  фмро ы  долже н  пчиьсоутл я   п ри м н е о  ткоа й  ви д  (см . ри с . 2.15). н р ат д ы

ид О вД рТ ы р ет Ч

П ят Ш с те еьм В о с ем е в Дя т е сД ят

Рс.и

н а и е

ь ь ь ь ь ь

  2.15. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Фа м р о  с  дя вум  си,пксам ауяюищтрсн о ме д тси вон ж о змо  схтаынр д

тйевси д к р оО е т м  ро кат де р   пс и к а  дйевист й  (всп лы вюа щ е е  мне ю - >пн ук т   "Action List Editor") и  добави м   в  н ге о   (Ctrl- Insert) п тя ь  сан трд ы х   йе д в и с т й ,  вы рба в   и х  и з  окн а  "Standard Action  Classes".   В  дан н о м   чс л ау е   э т о  бу д у т   с а тн а д р н т ы е   едй с в т и я   и з  гпру ы   List: TListContolCopySelection  (2  э к з ем п ляра) ,   TListContolMoveSelection  (2  э кз ем п ляра ) и  TListContolDeleteSelection.  У  TListContolCopySelection и  TListContoMoveSelection исю емт в й от с а  ListControl и  D estination.   Эт и  в йотс а  ию ем т  ти п   TCustomListControl*   и  днжло ы к  и  н а  сп и оск- ц ле ь   в не ст о о . Дл я бы т ь   з п а он л е ы   ел к з а т у м   н а  сп и оск- иочнтс н од й   п ра ы   TListContolCopySelection и   TListContolMoveSelection  всой т о  ListContol з па о л н е я м  уелкза т м   н а  лвеы й  ListBox,  а  свой ст о   Destination -   елкза ту м   н а  пвыар й ListBox.  Аниголча у ю   ц а пр о и е ю  пеяро тв м  и  дл я  вор т й  пыра , пнмеоя в  мма тсе и  инчо итс к и  ц леь .  Д л я   TListContolDeleteSelection  свой т о   ListBox  авеляост м   н з е ап о л н е н ы м . п н З ал о е я м  св йотс а   Caption в ив стс ев то и   с  пн здаер ч и е м  кго джа о   ви й е т с д я  и  соп с я

ы ор т к е Н е 52 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

 и з  ксало

в  VCLzyxwvuts

е я лв а т м  двийетс я  кн поак м ов птс дерсо м  зпанло е и я  у  н и х  св йотс а zyxwvutsrqponmlkjihgfedcbaZYX  Action.  П кеор т  знкоа че . аво тГ я  пмраог а  смжое т  пмщре ь та , кпо итавр ь  вынел д ы е  дан ы е  и з  он дго о  сп и кс а в  дог ур й  и л и  утяла д ь  и х  п о  ни жта ю  сю вущтс ео й   кн оп ки , а  ткаж е  си длет ь  з а  сояст н и е м  эи т х  кн оп к  и  уптвряал ь  и х  п уонсдт ь ю , идо хс я  и з  контер й  сац иу т . в тсбо д У о   и п ьн с з л а о в я н стрыа д х  дивйетс й  ни дова т  н а  мы лс ь  о  сназоид и  сиов х  сбо н ев т сы х   н ат р ы с д х   вйи е т с д .  П мпсоеыа т я  эт о  пь тале дор .  В  кв тсчеа е   з а б гов о   с а лк а м с е п ь з ол в у я   TDataSetAction, кыро т й   с т е я вл я   з аб о в ы м   лд я  гп ур ы   DataSet Actions. В  оилч т е  о т  оыб чн ог о   TAction, у  н и х  п воия лс ь  свой ст о  DataSource.  Н зан че и е  ге о п но т я о  и з  н аз вн и я . Очме т у   ил ш ь  он д у   и н рсе т у ю   о с б ен о ь с т : есл и  явн о  н е  узкат ь DataSource, т о  дйе вист е  е д уб т  п рои зьвсдт я  н а д  аиктвн ы м  в  дан ы й  момне т   TDataSet. Км о р е  тог , аиомктсчаев и  ожслеит ва я  дп уонст ь  дйевист я  в  з ави с м ост и  о т  соя ст н и я   TDataSet. П е опубр м  уновтаделс ь   овс й  ксал с  дйевист й  о т  эогт о  ксла . Дл я   н лча а вы нс я и м , че м  н а с  н е  уриастве т   н а с тр д ы й  TDataSetAction. К  снелжоаи ю , в  дизйан - жиерм е  н ьлзе я  ннве тспдеро о  ипсьтзлоав ь  TDataSetAction. н ж озм В о  лиш ь  инавзьпоилс е н ел ы  пдпеор д ер х  див йтес й  TDataSetCancel, TDataSetDelete, TDataSetEdit, TDataSetFirst, TDataSetlnsert, TDataSetLast,  TDataSetNext, TDataSetPost, TDataSetPrior и  TDataSetRefresh. Э т о  ньклосе о  онар ги чеав т  уовилс я  п ир нме и я . К мор е ог т , елс и  н е  узкаы тв ь  DataSource, нзовжмне о  зта д ь  сво е  сыоби т е  Оп,еЕШхс  пьклос у е ув т с у с то т   зов м ж н т с ь   и л е т п до р ь   и н в тк а ы й   TDataSet, н а д ы кро т м   н да о  пиорзтдв ь й е в ди с т я .  Ньленжта о   кж а т е   и  вватляс ь   о п д л н и л ье н т ы й   о к д  в   OnUpdate. В  эо т м ча у л с е   н а и х зм е м   ж и н е а лв с т о я   н яо и т с я  TDataSet, онел пдры й  дл я  кго жда о   ы иб о с т я в  UpdateTarget,  наптсре т  рь та об . Цпкчое а  вы зов в  пс тевр я  н а   TBasicAction::Update, и  д о  вы зво а  UpdateTarget дле о  п ротс о  н е  дтойе д . В   з вя с и  с  эи тм и  онраг и чне и мя и  холсе т ь   б ы  и мте ь   н ик е й  рсша и нре ы й  ксал , н зао ве м  ег о  TExtDataSetAction, в  кор т м  в  диз йа н - жреи м е  можн о  бы л о  б ы  завтд ь  соя тс н и я  TDataSet, п р и  кыро т х  эт о  дйевист е  раз рше не о , а  ткжа е  п роп и сы вта ь  тмеы убр й  кдо , и п ьс з л о у я   о с бы и т я  ОпеЕШхс  и  OnUpdate. П р и  эом т , еевстн о , дожлн ы   нра осх и ь т я в с е   п ир е щ м у в с т е а   з аб о в г о   к сл а .  Оплиердм ,  каи м и   о п д лн и ье н т ы м и   вс о й м а т и ж ол е д н  ота длб ь   TextDataSetAction, чоб т ы  увторя елд ь   п м ъв е ял ы др м  трбеован и мя . П рв о е е  -   н оба р   н оя т с и й  DataSetStates, кыро т й  оеялп др т   т е  соняст и я  DataSet, п р и   ы ро т к х   е й д в си т е   р аз ш е н е о , и  кыро т й   и ме т   и т п  Set. ор В т е  -  н або р  сноя тси й  крос у а  CursorStates, имюе щ и й  ти п  TCursorStates typedef  enum  {  csBof,  csEof,  csEmpty  }  T Q u r so r St a t e; typedef  Set < T C u rsorSt at e, csBof,  csEmpty>  T c u r so r S t a t e s; и  оюялще дпир

й  сняо итс

вий е т с д

я  карос у

е  рзашер н о лс е

и  тилбац

, елс а  па тс у

.

и  коср у

, пр р  узакы ев

и  кыро т

х  дйвие тс т  в  нлач

е  тжка о  тилбац ы

е  рзашре н о , csEof-   в  кно е

. Зсе д ь   csBofц  и  csEmpty -

е  TAction в  C++Builder zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED 53 zyxwvutsrq

и н а о в з ь с И лп

е   св о й т о   - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   IsModify  -   п ри з н а к   ог т ,  ч т о  дан о е   й е в ид с т е   м жо е т   и з м не тя ь  bool. е  табли ц ы . И ем т  ти п zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ о вр т е Ч е   о п д лн и ь е н т о е   св о й т о  -   DataSetTarget тип а   TDataSet*,   в  кор т м  хар н ист я  указле т ь   н а  тщ кеу и й   и к вт н а ы й   TDataSet.  е д у Б м   и п с ьо л з т в а ь  эт о  свой ст , есл и в со й т о   TDataSetActionr.DataSource н е  занд о . и Дл я  тог о  чбо т ы  дат ь  воз м жн отс ь  п рмаог и ст у  зпащре та ь  дйевист е  вн е  з ави с мост о т  соняст и я   TDataSet,   пилоре д м   св о й т о  Enabled,  а  ткжа е   п и ло р е д м  соыб и т я  ОесШхЕ п   и  OnUpdate с  ц ель ю   п ер н о с а  и х  и з  мо дте в  Execute и  Update в  мод те ы ExecuteTarget и   UpdateTarget  внесто о .  В  собы и т е   OnUpdate двиоаб м   п ар м т е р bool & Allow,  с  пщмо ь ю  кгор т о  мжно о  отяле пдр ь  дпоньл еиыт е  уиволс я  дп ну отс и ы   п р ва и л ь н о  рлиае з овта ь   до т м е ы   ExecuteTarget и   UpdateTarget, е й д в ис т я . Дл я  тог о   об чт и м д о х б но е о  вынсьяи т , чт о  и м с  птеа дер я  в в ктс еча е  цговел о  оа ткеъб . Анила з  ин ыдо х с х  ко д в п,злако чт о  вс е  Data Controls кпмно ет ы  в  сиов х  а до тме х   ExecuteAction и   ExecuteUpdate ы в зю а т  мдо т е ы  ExecuteAction и  ExecuteUpdate отк еъб а  тип а  TDataLink,  кыро то й  в в ктс еча е ц в ое л г о  октъбе а  пеа др т   кл е за т у ь  н а  окъеб т   TDataSource.   ксТе т  оп и сан и я  и н йерф тс а и  раели з ац и и  мо д те в  п ери дв н  н и же .  •   \ ь Т тре

р ж е и ос д м

ExtDataSetAction.h:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

#ifndef ExtDataSetActionH #define ExtDataSetActionHzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM I/

#include  #include «Controls.hpp> ќinclude  #include  #include  #include  '  // typedef Set TDataSetStates; typedef enum {csBof, csEof, csEmpty} TCursorState; typedef Set TCursorStates; typedef void  fastcall (  closure *TUpdateActionEvent)(System::TObject* Sender, bool& Allow); class PACKAGE TExtDataSetAction : public TDataSetAction { private: TDataSetStates FDataSetStates; TCursorStates FCursorStates; bool FEnabled; TNotifyEvent FOnExecute;

оы р т к е Н е  и з  ксало 54 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

в  VCLzyxwvut

TUpdateActionEvent FOnUpdate; TDataSet* FTarget,bool FIsModify; void  fastcall SetDataSetStates(TDataSetStates  value); void  fastcall SetCursorStates(TCursorStates  value); void  fastcall SetEnabledfbool  value); void  fastcall SetTarget(TDataSet* value); void  fastcall SetlsModified(bool  value); void  fastcall SetIsModify(bool value); protected: virtual void  fastcall ExecuteTarget(TObject*  Target); void  fastcall UpdateTarget(TObject* Target); public: fastcall TExtDataSetAction(TComponent*  Owner); published: property TDataSetStates DataSetStates = { read=FDataSetStates, write=SetDataSetStates, default=OxOE}; property TCursorStates CursorStates = { read=FCursorStates, write=SetCursorStates, default=0 }; property bool IsModify = { read=FIsModify, write=SetIsModify, default=false }; property bool Enabled = { read=FEnabled, write=SetEnabled,  default=true }; property TNotifyEvent OnExecute  = { read=FOnExecute, write=FOnExecute }; property TUpdateActionEvent OnlJpdate  = { read=FOnUpdate, write=FOnUpdate }; property TDataSet* TargetDataSet  = { read=FTarget, write=SetTarget };zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM // # endif E xt D a t a S e t Ac t io n . c p p :

#include  #pragma hdrstop #include  "ExtDataSetAction.h" #pragma package(smart_init) // fastcall TExtDataSetAction::TExtDataSetAction(TComponent*  Owner) : TDataSetAction(Owner),

е  TAction в  C++Builder zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 55 zyxwvuts

и н о а зв с ь И п л

FEnabled(true), FOnExecute(NULL), FOnUpdate(NULL), FTarget(NULL), FIsModify(false) { FDataSetStates Active) bAllow =  (FIsModify?FTarget- >CanModify:true) && (FCursorStates.Contains(csBof)?true:!FTarget- >Bof) && (FCursorStates.Contains(csEof)?true:!FTarget- >Eof) && (FCursorStates.Contains(csEmpty)?true:!FTarget- >IsEmpty()); if  (FOnUpdate) FOnUpdate(this,bAllow);

TDataSetAction::Enabled = bAllow;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO Км о р к и от б

. Дл

е  тог я  эог т

, о  снавощи тсуе о  рчи ктозбар

и  эго т о  ксал а  н да и  C++  Builder пвиа лтос дер

о  кикам- т

о  озаорб и  фн цку и

м  иизтсве ю  рцаригтсе

ь  сдер и  дйвеи тс

у  рзар

.

f a s t c a l l  R e gist e r Ac t io n s( c o n st An siS t r in g e xt e r n  PACKAGE  vo id  CategoryN ame,  TM etaC lass*  *  AC lasses,  c o n st  i n t  AC lasses_ Size, TM etaC lass*  R eso u r c e) ; В   в к ч а ст е и н о рмф ца и П о сн л ед и

е   п р оа м т е ю  о  клас й   п а р м ет

в  е й  пюа дрсе т х  риег рст ем уы р   -   э т о   р ес н у ы

я   им х   е й д св т и й й   п а р м ет

я  кориге та , и н екд

и  дейвист я с  п оснлед г ,  в   оркт

, мсаи

в  указле т о  э лем н т

м   р ахн сят

й  н а а  м аси ва

я   з н а ч ен и

. я  п о

и н о а зв с ь И п л

57 zyxwvutsrq

е  TAction в   C++Builder

м о ул ч а н и з н а ч не и р еа л и з а ц и

ю  дл я  коажгд е  N ULL. Добавляе и  клас .

о  дей свти я м  вы з о

. В  н аш е м  счалу в  эо т й  фн укц и

е  о н  н е  нжнеу и  дл я  реиг рсатц и

, и  ем у  можн о  п ри свои т и  н аш ег о  клас а   в  фйа

ь л

namespace  E xt d a t a se t a c t i o n vo id 

f a s t c a l l  PACKAGE  R e gi st e r ( )

R egisterAction s("E xtD ataSet",  &  classid(TE xtD ataSetAction ),  0, NULL); }

а ь тл Р з е у т   н ша е й  рбаот ы   ва е л я с т м   в  п крое т  н овг о   п т к еа а  (package)  и л и  добавлея м в  уж е   щюсув тещ и й .  П осл е   к ом п и ц я л и  и   ил н ков и   и н е л а т рс у м   с о з на д ы й   п т ке а . В н ше н е  в  п алирт е  комп н ео т в  п осл е  и н алцяст и и  н и чге о  н е  и з мне ися т , н о  п р и  работ е с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  TActionList  п р и  вы обр е  пн укт а  NewzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH  Standard Action в о  впс ыл юва щ е м  мне ю  оскроте я и д ал о в г е   ок н о   с о   п с и ок м   ан с т р д ы х   йе д в и с т й ,  дрсе и   ы ор к т х   м ы   м жо е м   н йа т и zyxwvutsr и  TExtDataSetAction  (см . ри с . 2.16).

1M Uniti.cpF t1 -  Classeszyxwvutsrqponmlkjihg f»!Standard Actions Action

CategoryzyxwvutsrqponmlkjihgfedcbaZYXWV

TEditSelectAII TEditUndo

Edit Edit

Cancel

[TExtDataSetAcL  ExtDataSet THelpContents  THelpOnHelp  THelpTopicSea...  TWindovArange 

Щ

Рс.и

  ProjectGroup' i p   Piojectl Й- Ц )  Projei B - l  Unit1

  2.16.  Скпоис

 схтаынр д

 дтйевси

Help Help Help Window

Help J

ы ор т к е Н

58 р пе Т ь  о  тмо , ка к  эи т и лб ац т ы " , кор то е  н е  межо н /ия икв а тсв . В  иро нткпсе в  false,  чт о  бе д у т  оьзнтач на в ои р н  н а  пувр е ю  зпаиьс dsBrowse -  дивйетс е  ршзеран о ил е Оп д р м  собы и т е vo id 

е  и з  ксало

в  VCLzyxwvuts

м  пяьс тазвло . Пе убопр м  оилте дпр ь  дивйетс е  "По х ер д  в  нл ач о т  бы т ь  вьш нлое , елс и  тилбца а  нс итдо ха я  в  ржие м е авиор ртка д е е  дл я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED   CursorStates униеалв тс м   csEof в  true, a csBof и   csEmpty, , чт о  дивйетс е  зщпаерн о , елс и  тилбца а  птс у а   и  коср у р  пзиоц . Тжк а е  сысеаврб м  вс е  фг ал и  DataSetStates в  false, з а  инюиелчк с м , кд го а  тилбца а  нс итдо ха я  в  сняои тс и  пармост .  OnExecute.

f a s t c a l l  T F o rm l::E xt D at aSet F irst E xec u t e( T O bjec t  *Sen der)

( ( T E xt D a t a Se t Ac t io n *) Se n d e r ) - > T a r ge t D a t a Se t - > F ir st ( ) ; Во т  и  все . Сыбои т ш ь та , либ о  зпащер т Н а  ри с . 2.18 пзнако

е  бе д у ь  дивйетс а  рилазец и

т  ожиетлавс е  в  сив тс ев то я  двийетс

ь   на з д ы и  с  зна д ы м я  Post с  ннжеолиа

е  уиволс

я  аиксчетмоа в и  онарги че мя м  допнл ьеи тог

и  и  ли б о  рзаер и  (см . ри с . 2.17). о  уовилс я .

- " Unk.lcpp |E*tDataSe(Aao i n.cM>|  ExtDaa l Setcto i n.h|  ExtAclmcpp|

void  fastc&LL  TTorml::ExtDataSetFirstExecute(TObject *Sender) ( ((TExtDataSetAction*) Sender) - >Taro.etDatSet- >First (); 1

21: 46  M j odJeid

Al  shornzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Puc. 2.17.  Ризац яле

тйевс ияд

 "В  но алч

 т"ицы лаб

б о та Р

а  с  до та

й  и  врме н

м  в  VCL: TDateTime

j ExtDataSetPost:  TExtDataSetActk Properte i s |  Everts | ; Ст и н а р хо ь [  Capto in jExtbataSet "  Categoty Checked ] IcsB ol^csE (rf^csE nnpty] S CusorSa l tes И   DataSetStatej I  Enabled i  HelpConteyt  ' Hint Imaoetndex !  Name Shortcut Tag TargetDataSet Visible  '

j(dsETargetDatSet- >Po3C();

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO fastcall TForml::ExtDaCaSetPostUpdace(TCbject 3ender,   e

j
TargetDatSet - >rieldB^ame ("Name") - >AsString. IsEraptyO ;|

34: 51  {Modefid  [irwert  дтйевс ия

а  с  атдо Дл

у  / -  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK | void  fastcaU. TForml::ExtDataSetPo3tExecute(TObject *Sendec) zyxwvutsrqponm !( zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON

-   '  ExtDataSetPost ;(None]

  2.18. Ризац яле

т а о Рб

Unirt.cpp I ExtOataSelAclkxicpp |  ExtDalaSetftciion h |  ExtActrancpp | zyxwvutsrqponmlkjihgfedcbaZ

'void 

Л Я  shown J .,

.Рис

59

 "Сахинтроь"

й  и  ермв ен

 (Post)

м  в  VCL: TDateTime

я  ртоба

ы   с  дма т и   и  внмер м  C+ + Builder пеявла тос дре т   н ма , пмариог тс , ря д , пй улжоа , и з  смгоа о  бго та го о  п о  фн цку и но ьлатсо и  мл у до я  -   Sysutils.hpp,  а  ткжа е с  TDateTime, онелвяъб ы й  в л му до е  systdate.h. В о т  о  н е м  сйеча с  и  п ойе д т  речь . П ре в о , чт о  н да о   имтео ь  п р и   н лча е  рбаот ы  с  дна ы м  класом , -  эт о  о т , чт о  о н  н е н   о т  TObject,  п омэт у   с о рв ш е н е о  н ьлензоябта о  созватд ь   э к з ме п ля р  ксал а з  ооп ртае р  new. Во рт е : у  эог т о  ксал а  н е т  свойт в  и  собы и тй , а  ест ь  тькло о  мыодте . И  тьрет : у  TDateTime се увщ тсе т   ь шл о б е  кв тислеоч о н пеж уыр г е х  аиксрчтемф х . п ь рТ е , п олс е  эго т о  бгол е о  зав нтмсока , сзар у  пей др м  к  тмов тсе у  пу тк еор , и б о  ипьсло е  TDateTime сшревон о  нжнолсе о  и  чт о  ка к  реа тоб т  -  м ы  рмсерзаб я  п о  хдо у  длае . В н ше н и й  ви д  товсетг о  п арокет , знже урга о о  в  C+ + Builder, пваел тс др н  н а  ри с . 2.19. К а к   ви н д о  и з  рин су ка , н а ш  овесты й   п р о ке т   ы тв а е о х т   п оч т и   вс е  асп ект ы   р аб о т ы  TDateTime. Зи стпа у е  п роке т  н а  выпонл е и е  и  уисебдт ь   в  эо т м  сма и  (ри с . 2.20). . Н и ж е  п олн ьост ю  п рие вд н  ко д  товсетг о пТ е р ь  давй т е   р аз б и ь с р я ат , чо т , гд е  и  как . Л и с ти н

г  1. Ко

д  п рокет

а

//   #include  #pragma hdrstop #include "DateTimeUnit.h"

.

Н е к о то р ы 60 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ы   ра бот

,с * * О с н о в бщ О и

е  Фунцки

е Дн

ь   ле д н

"Ам ри фетчс ик

е   о п е р а от р ы

е  дат

а  и  врем

еу щ к Т а

я   дат

а

у ещ к Т е

е   врем

т  дат

Г "  атД

а  по лн сьт

И н рк е м е н

ю  

Г   В рем

 тгвтосе

я  по лн сьт

ы   ра бот

ю  

Фо р м а

т  дат

 в  се д р

е   о п е р а то р н и а В ы тч

е уТ к щ а

я   дат

а

I  уещкТ е

е   врем

 2.20. Зй аыпнеущ

и

ы

а  и  в р ем т  дат а  понл сь т

0:00:04 е

я И н рк е м е н

я

т

е ни о л ж С

я  Фйла

е

27.11.200312:58:23 27.11.200318:58:26

а

ы  и  врем ен

и   •ю  

[ •   В р ем

я  понл сь т

ра тС

.Рис

ы  и  врем ен

и а  и  врем

I7  атД

е  с   TDateTime

 рткоаибзр

[ р А м и ф е ти ч е с к и

е  дат

~Фо р м а

е н и ол С ж

ы   с  TDat e Time и

ущ е к Т и

а тД

т   TDateTime

,zyxwvutsrqponmlkjihgfedcbaZYXWVUTS

о с Вы х т

 пкетоар

е  Фунцки ь   е нл д

е

И н рк е м е н

и

ра тС

е Дн

ь   TDateTime

а

ы  и  врем ен

Я  L О с н о в

т

е н и о л жС

я  Фйла

 2.19. Фа м р о

а Рз н о с т е

я

я

а  и  в р е м

оФ р м а

"Об щ и

"

и и н а тВ ы ч

.Рис

в  VCL

ы   с  TDa t e Time и

Т  щуек и

а тД

е   и з  к л а с о

 пкето р

т

ю  

2Е  Нобя р

о хы В

д

ь   2003 г . 12:58:30

бт о а Р

а  с  до та

й  и  вмер н

м  в  VCL: TDateTimezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI 61

// #pragma  package(smart_init) #pragma resource  "*.dfm" TMainForm  *MainForm; //  ' fastcall TMainForm::TMainForm(TComponent*  Owner) :  TForm(Owner) DateFormat  =  "dd.mm.yy  "; TimeFormat  = "hh:nn"; // void 

fastcall TMainForm::OKButtonClick(TObject  *Sender) TDateTime DateTime = TDateTime::CurrentDateTime(); CurrenDatetTimeLabel- >Caption  = DateTime.DateTimeString(); CurrentDateLabel- >Caption  = DateTime.DateString(); CurrentTimeLabel- >Caption  = DateTime.TimeString(); int DayOfWeek  = DateTime.DayOfWeek(); switch(DayOfWeek) case 1: DayOfWeekLabel- >Caption  =  "сачйе AnsiString(DateTime); break;' case 2: DayOfWeekLabel- >Caption  = "сачйе AnsiString(DateTime); break; case 3: DayOfWeekLabel- >Caption  ="сейча AnsiString(DateTime); break; case 4: DayOfWeekLabel- >Caption  = "сачйе AnsiString(DateTime); break; case 5: DayOfWeekLabel- >Caption  =  "сачйе AnsiString(DateTime);

с   еьн с рк ов

,  " +

с  к и н ь л е д о п

,  " +

с  вкинрот

с   адерс

с   гревт ч

, " +

,  " +

,  " +

оы р т к е Н 62 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

е  и з  ксало

в  VCLzyxwvu

break; case б : DayOfWeekLabel- >Caption -   "са ч й е с  пацинтя , AnsiString(DateTime); break; case 7: DayOfWeekLabel- >Caption "са ч й е с  сатоб у ,zyxwvutsrqponmlkjihg AnsiString(DateTime); break;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA DateTime =  TD ateTime::F ileD ateToD ateTime(F ileAge(Application- > ExeN ame)); F i l e D a t e t T i m e L a b e l - > C a p t i o n  •   "д а т а   и   врем я   фай ла :  "  + D a t e T im e . D a t e T i m e S t r i n g  (,) ;

void 

fastcall TMainForm::ExitButtonClick(TObject  *Sender) Application- >Terminate();

void 

fastcall TMainForm::DateDifferenceButtonClick(TObject  *Sender) TCursor OldCursor  = Screen- >Cursor; Screen- >Cursor  = crHourGlass; TDateTime StartDateTime  = TDateTime::CurrentDateTime(); for(int  i = 0; i ProcessMessages();

TDateTime EndDateTime  = TDateTime::CurrentDateTime(); Screen- >Cursor  = OldCursor; DateDifferenceLabel- >Caption= (EndDateTime -   StartDateTime) .TimeStringO ; / /  void 

, fastcall TMainForm: : IncrementDateButtonClick (TObject  *Sender) static TDateTime DateTime = TDateTime::CurrentDateTime();

т об а Р

а  с  о тад

й  и  врме н

63 zyxwvutsrqp

м  в  VCL: TDateTime 

I n c r e m e n t D a t e L a b e l - > C a p t i o n  =   ( D a t e T i m e + + ) . D a t e T i m e S t r i n g ( ) ;

} zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

it zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  fastcall TMainForm::DateAdditionButtonClick(TObject  *Sender) { s t a t i c  T D ateT im e  D ateT iin e  =   T D a t e T i m e : : C u r r e n t D a t e T i m e ( ) ; D a t e Ad d i t i o n L a b e l - > C a p t i o n  =  (D ateTim e  +=  1.125)  . D a t e T i m e S t r i n g( )  ;

void 

fastcall TMainForm::TimerTimer(TObject  *Sender)

С FormatDateTimeLabel- >Caption=TDateTime::CurrentDateTime(). FormatString(DateFormat + TimeFormat); } /, /  void  {

, fastcall TMainForm::FullDateCheckBoxClick(TObject  *Sender) if(FullDateCheckBox- >Checked) DateFormat = "dddddd "; else DateFormat = "ddddd "; FormatDateTimeLabel- >Caption = TDateTime::CurrentDateTime(). FormatString(DateFormat + TimeFormat);

} //  void  {

;

fastcall TMainForm::FullTimeCheckBoxClick(TObject  *Sender) if(FullTimeCheckBox- >Checked) TimeFormat = "hh:nn:ss"; else TimeFormat = "hh:nn";

FormatDateTimeLabel- >Caption = TDateTime::CurrentDateTime(). FormatString(DateFormat + TimeFormat) ; }  . //

ы ор т к е Н е  и з 64 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Н нч а е ч и к то б а р с а лк

та д

у   вы з е ва е л аД ы  и  внмер и

ок р С т

м  октъеб , м ы  еипьсзлоу

в  VCLzyxwv

а  собы и т я  OnClick zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON  кнопк и  OKButton.  Првео й  сокр т й  в  эо т м м   щ ку е т ю  дта у   и  вмре я  с  п омщ ь ю   од мт е а   CurrentDateTime() д  CurrentDateTimeQ  велоъбя н  си атчске м  момд те .

м  м ы  с  очиобтрак е   м ы  пчеа оул а   TDateTime.  Мо те

s t a t i c  TD ateTime  мо п э т п и р ва с е

с алок

f a s t c a l l  C u rren t D at eT im e( ) ;

м   ге о  ка к  TDateTime::CurrentDateTime().   В оз вращ маео у  D ateTime. м  гп ур у  сижо х х  мо д те в  дл я н печи уло я  сговкр т , оьнле д т о  дта ы  и ь онле д т о  вмнер и .

An siSt r in g  An siS t r in g 

f a s t c a l l  D at eT im eSt rin g( )  c o n st ; f a s t c a l l  D a t e S t r in g( )  c o n st ;

An siSt r in g 

f a s t c a l l  D a t e S t r in g( )  c o n st ;

е   и м  з н чае и

е

о  пнелваитс дер

я

й i n t  DayOfWeek  =   D ateTime.D ayOfWeek();

м ы  пчеа уол

м  тщ кеу и

й  дне

ь  н леид

. Мо те

д  DayOfWeekQ оевлъяб

н  сю ущдел и

.zyxwvu

м   о з рб а м

int  fastcall DayOfWeek() const; д  воз вращ ае т  з н чае и е  тип а  int,  кор т е  и  оеялп др т  дне ь   н ли е д . Ткьло о  н да о п о м н ьи т , чт о  нле д я  н чаи нс теа я  н е  с  п онлье д и ка , а  с  воскрен ья , помэт у  воз вщра не н о й   о д тме м   DayOfWeekQ еи дн и ц е  е д уб т   в о та с е ь   в о ск р е н ь е , двойк е   -   п он е ьл е н д и к , и  т . д. , вп лот ь  д о  сы обт у , кор т й  бе д у т  свотас е ь   с ме р к а . о т а р п Ое р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  switch(DayOfW eek), "пю заущрбое и й " , та к ь  стзак , вщазровне о е  DayOfWeekQ ч и о лв с е  з н чае и е  в  н ьморлна ы й  сроквыт й  золвга к  мк те и  DayOfWeekLabel,  н е  бы л  б ы и н рс е т , елс и  б ы  н е  он д о  "н о " -  срокт а о Мт е

D a yO fWe e k L a b e l - > C a p t i o n = "с е й ч а

и  е й  пнбо ды е . В  дна ы и пс о т ь л е з у я  н е  ж у е  зн мокыа TDateTime.

х  сакор т й  н а

с   воскресен ье

,  "  + A n s i S t r i n g ( D a t e T i m e ) ;

х  дл я  пнеч и уло я  сговкр т о  пнелваи тс дер м  о тме д  DateTimeStringQ, а  ооптрае

я  дта ы  и  нме рв р  AnsiStringQ ксал

и а

f a s t c a l l  o p e r a t o r  An siS t r in g( )  c o n st ; Д ан ы й   о п ре а т TDateTime.   нзавоПриб е лог б а ь н о й   п ер м н о о п ре ат ы  п реоб аз ован и

р   п р ео б а з о в а н и

я   в о з р ащ ае т   р о с кт в е   п а р с в те д л н и е  ие пьзслоу т   ам р о ф т  дта ы   и  внмери , омыеял дпер . У  TDateTime  ест й  LongTimeFormat (о б  эо т м   н и ж е) я  ег о  в  чи слов е   п р а с е в дт л н и е .

fastcall operator int() const; fastcall operator doublet) const;

е   о б ъ ке т й  зн ечиа ь   а к тж

а м е  ещ

е

бт о а Р

а  с  до та

й  и  вмер н

65 zyxwvutsrq

м  в  VCL: TDateTime 

  int()  воз врща е т   ц ол ч е и н с о е   ва н л е п с т р д и е   т а д ы   о бк ъ е т а   TDateTimezyxwvutsrq  ~ р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA , п рош де и х  с  30.12.1899. о т а рпО е р  double()  вщарзево т  чов илс е  пнелива тс дер е  отк еъб а  TDateTime (вгес о  отк еъб а ц ил е к о м , а  н е  тьолк о   ы та д , ка к  в  сча ул е  с  оорптае м   int()). Ц але я   чт с а ь   в о з р ащ н е о г о doublet)   з н чае и я   е в а ял п ст д р т   об с й   ч и сл о   н д ей ,  п рош де и х   с  30.12.1899,  а   робдн а я я  сок т у , пвюаляст дрещ е е   о сб й  чста ь  о т  24 часов . Н о  м ы  овтлек и сь .. . ч ас т ь  -   врме В  срок т е

О о п тр а е

ч и сл

о  дн ей

DateTime =   TD ateTime::F ileD ateToD ateTime(F ileAge(Application- > ExeN ame)); м ы   п ч еа о лу м   м в ре я   и  дта у   и пс онл меяг н ц ку ф и и  FileAge, а  зе та м  пе заурбое о м те д   FileDateToDateTime.   иОтрба о д мт е м   к л ас . s t a t i c  TD ateTime  н О бр т а о

о   й а фл м  пнче уло е   в н и м ан и е

о   п кр о те а   с   п ом щ ь т  TDateTime,  и псьлозу д   с тв е я л я   и ат с ч е к и

ю я м

f a s t c a l l  F ileD at eT o D at eT im e( in t  fi l e D a t e ) ;

д  ксал

е  п оребза вн и е  октъеб а   TDateTime в  дта а   TDateTime, FileDate.

i n t 

f a s t c a l l  F ile D a t e ( )  c o n st ;

о мт е

оМ т е д  FileDate сиатчсеки м , в  оилч т В   ч о бир а т к е   о с бы и т я   Н С ск п О а   с   ор п та е м   в ы ч и ан т и я ,  жнепруг ы м , в  ксла е   TDateTime.   Кюловеч

р аб о т о п ре а т в

а   н ша г е о   о в гс т е е  зн чеа и е  в  океъб , чт о  дан ы й  мо те

  к н оп к

у  и  врме

я  фйал

а  вы п олн ея

т  дог ру

е  о т  мдо те а  FileDateToDateTime,  н е  явлсяет и   DateDifferenceButton  медон рсите у ,  ак к  и   ря д  иг руд х   а р и м ф те ч с к и й  ко д  в  дна о м  очбираот к е  -  эт о  срокт

й

. я х а

D ateD ifferenceLabel- > C aption=   (EndDateTime -  StartD ateTime)  .Tim eStrin gf) ,в   ор к т ор к т о п ле и р д т

й   и з  тщ кеу г о  тщ кеу и ь   ли д еь т н о ст о  дл я  опнле рд и . Н а  нме ьш и ы  дна ы е  бы л

ь ол к т и  вы ш е и н р ве л а т ч О и бр о а т м о ж н о ст

ь  оорптае

о   м н в ер м  н певнсторд

и   п о сл

е   ок н ч а и о  п ре у   оч х

я  длиьент ог о   ц и лк а   в ы ч ис а т е я   в р ме я , д  нолча м  ц и кла . Ткиа м  образ ом , м ы  сможе м ь   ц и к ла .  Сзар у   п и ь др уе т ,  чт о  дан ы й   о м те д   и с о дг т я я  дочатнс о   ь ло ш б и х   и н р в е ло а т в   в рм е н и  -   о т  н скеоьл и х   н к е су д х  иалврне т х  бе д у т  онче ь  н и зак я  точнь тс , а  сесво м  кик тор е  внмер ы е м  мо д те м  вощб е  н е с  ута д я   и з м ре и ь т . к   оы б с и т я   Н С ск п О  кнпо и  IncrementDateButton меодн риест у т   н а м   воз а   и н м к ре т а  в  TDateTime.

s t a t i c  TD ateTime  D ateTime  =  T D at eT im e::C u rren t D at eT im e( ) ; I n crem en tD ateLabel- > C aption  =  ( D at eT im e+ + ) .D at eT im eSt rin g( ) ; О п ц ра е и о п р е ац и я

я   и н м к ре т , дмнкре т

а   в л и е у ч в ае , умне ьш еа

т   та д

т   та д у  н а  еи нд и ц у

у   н а  еи дн и ц у .

.  П и ротвп жлн а

я   п о   мс ы л

3 - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  1534

у

оы р т к е Н 66 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Дале

, р а с м о тр и

в  оичк тобар

в  VCLzyxwvuts

е   и з   с а л ок

м  о п ер а от р  с л о ж е н и я . П р и м е р  ег о  и с п о л ь з о в а н и я  м ы  м о ж е м   н а б л ю ад т ь я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  OnClick кн пок и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML  DateAdditionButton.

е  сыбои т

s t a t i c  TD ateTime  D ateTime  =  T D at eT im e::C u rren t D at eT im e( ) ; D at eAddit ion Label- > C apt ion  = (D ateTime  +=   1. 125) . D a t e T im e St r in g( ) ; Пр

и   н ож л е с и я  чста

а  днбор а

и   ч и сл ь  -  к о  врмен

а   с  оо ткеъб

м   TDateTime ц але я   ч с та а  TDateTime.   киТа

и  экзмеп рял

ь   ч и сл м  обрза ом

а   п р и с б ав т е л я , ко

я   к  деат , д zyxwvutsrqponmlkj

DateTime +=  1.125 илв е ч у

т   з н ча е и е  дта ы   ктъеоб (0.125, он д а  восьма я  чста ь   окт)су В   з ав р е ш н е и е   р аз б о а   док с а кл а  TDateTime.  Мо те д  овелъбя An siS t r in g 

, а  з н чае и а   п и ров г

е  врмен м   о   од м т е

и  -   н а  тр

и  чса

а

е   FormatString

.

f a s t c a l l  F o r m a t St r in g( c o n st  An siSt r in gk  fo r m a t ) ;

В  скце и и  private  ксал ;  TimeFormat л д я  фтмроа

ы та д

а   DateTime н а  еи нд и ц у . а   о в гс т е о   п кр о те н  сю у щдле и м   о б р аз м

а   м ро ф

ы  оневлъяб а  врмен и

. К до

ы  дв :

е  п ремн ы е

: DateFormat дя л

 формта

а

p r i va t e : An siS t r in g  D ateF orm at; An siS t r in g  TimeF ormat; В  кор ктну с

е   о мр ф

ы  зюа дс т

я   н ч ь ал ы

е  з н чае и

я  эи т

х   п ре м н ы х

.

DateFormat = "dd.mm.yy "; TimeFormat =  "hh:nn"; и к Та

м  образ ом

.д м .г и  фмроа

м  ю у щ д е л с и

й   м ар о ф

т  вы дов

е   со бы и т а  и  врем

я   з аю д с т

а  дта

ы  дл

я  мод те

а  FormatString:

г т  врем н и

ч .м

, м ы  зеа д

:

.

П р и   з ап с к у е   п р и л о ж ен и н ы е  п о  занд ом у   о р мф т а FormatDateTimeLabel.

я   в  обрачоти к у   щ ек у т и

е   ат д

я   OnTimer  тай м ер я   в  качвест

а   соф р м и р о в а н е   з оа г л в к

а   к м те

и

FormatD ateTimeLabel- >Caption  =  TD ateTime::C urrentD ateTime().F ormatString (DateFormat +   Tim eF orm at);

т об а Р

а  с  до та

й  и  врме н

х   о с бы и т я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH   OnClick фжкоал в   (check- box)  м ы   п рост о   нм е я м   з н ч еа и я х  DateFormat и   TimeFormat дл я   и з мне и я   м ор т а ф а  дат ы   и   вм р е н и , воз вар м  FormatString.

В   ч о и бр а т к п рме н ы щ м е аы

х  мо д те С п и ос

67zyxwvutsrq

м  в  VCL: TDateTime

к  зн чеа и

.албТ

 2.2.   кпоисС

и ен ч а Зн

е

й  финавормт и

я  п рие дв

 зинейач и П ен с яо

.  2.2.zyxwvutsrqponmlkjihgfedcbaZY

н  в  тбал

ватоиняр м  фо

 зинейач

 аты д

zyxwvutsrqponmlkjihg

 и ин ве ме р

е

ж о р аб е О т

т  у та д , ипсьзлоу я   т ма р о ф , омеяплы др й  з н чае и е м  гьлнаоб й   п м н ре н о й  ShortDateFormat,   и   мврея , ю у щдсле е   з а   з н ча е и е м   ы та д ,  и пс ьолз у я   т м ар о ф , м е ы я л оп д р й   з н ч еа и м   ь л на о б г й   п р ме н о й  LongTimeFormat.   Вмер я   н е  оо т а   лну ю ся б р жа т е , есл и  дробн а я  чтса ь  з н чае и я  DateTime рван ж о р аб е О т

т   не д

ь  ка к  чи лс

о  бе з  лиюдру щ ге

dd

о б р ж а Ое т

т   ен д

ь  ка к  чи сл

о  с  ли юдру щ и

ddd 

е аж р б о т О нь л ао б г

т  дне й  пн ме р о

dddd 

ж о р аб е О т мл е я ы

т   не д е  з н чае и е

ь  ка к  сщанркеои

ь  ка к  п онл м  гьлнаоб

ж о р аб е О т т  у та д , и псьлозу н о й  ShortDateFormat

dddddd 

е ж а р б о От т  ду т а , изьуплос LongDateFormat



е аж р б о т О ор т

mm 

ж о р аб е О т о р т ак

т   м сея м   "mm" се у дел ми нт у

м  (01- 31)

е  им я  (В оскрне ь-е а)бСоту й   п р ме н о я   т ма р о ф

я  скиор т

, омые ял дпер

е  зн ечиа

,  и пс ьолз у й  LongDayNames

, омеыялп др

й  з н чае и е

, омыеял пдер

й  зн ечаи

ц  ка к  чилс т  со цтпиеакф

о  бе з  лю ищурдге о   лну р  "h" ил и  "hh", т о  втсме

ц  ка к  чи лс т  спце и офкта

о  с  ли юдру щ и р  "h"  и л

м

я  сротки

, оепдр

м  гольбан о

-

й   п м н ре

м  гьнлабо

й  пмнре о

-

я  (1- 12). Елс и  сзар о  мцясе а  оюсжа ртбо

й

у   з а  спцеи фак

я   м и тн у

м   е лн у м   (01- 12).  Елс и  сзра у   з а  сп це и ф и  "hh", т о   вмтсе о   ц м яс е а   о бр ж а ю т с

ы я

ы

о б р ж а Ое т з н ч ае и е

т   м сея м  гьлоабн

mmmm 

е ж а р б о От з н че а и

т   ясме м  гьнлабо

У У

о б р ж а Ое т

т   ог д  ка к  дз нву ча о

УУ

о б р ж а Ое т

т   о г д  ка к  чызтенхр ча о

hh

м   е лн у

я  фт амро

mmm 

У

я  (1- 31)

е  (В-кс С)б , изьулпос й  ShortDayNames

ddddd 

т   ясме м  "т " е у делс

о   лн у

ц   к а к   с о к р ащ н е и й   п м р не о ц  ка к  пнло й   нмепр о

е   (Ян в- Дке) ,  и пс ьолз у й  ShortMonthNames е  им

я  (Ян ьр-ав ьрб)каеД , иьпзлусо й  LongMonthNames е   ч и сл

о  (00- 99) е   ч и лс

ж о р аб е О т

т   ча с  ка к  чи лс

о  бе з  ли юдру щ ге

ж о р аб е О т

т   ча с  ка к  чи лс

о  с  ли юдру щ и

ж е ар о б О т

т   м и нт у

у   ак к  чи лс

я   р о с тк и

о  (0000- 9999) о   лн у м   елн у

о  бе з  лиюдру щ ге

я  (0- 23) м  (00- 23) о   лну

я  (0- 59)

я  срокит

,  оп лмеярды , омыеял дпер

е

е

в  VCLzyxwvut

е   и з  ксал о

о ыр т к е Н 68zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

 2.2. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   к п ои с С  зинейач ватоиняр м  фо  зинейач  даты  и  вине ме р  (П ин)е же л о д о р zyxwvu

.албТ и ен ч а З н

е

П и е н с оя

е

о б р О жа т е

т   ми нт у

у   ак к  чи лс

о б р ж а Ое т

т   н к се у д

у   ак к  чи лс

о  бе

SS

о Об р а ж т е

т   н к се у д

у   ка к  чи сл

о  с  ли юдру щ и



о б р О жа т е м не о

т   в мр е я ,  и псьлозу й  ShortTimeFormat

я   т ма р о ф

,  меояплы др

й   з н ча е и е

м   ь л оаб н г

й   п ре

tt 

о Об р а ж т е м не о

т   в мр е я ,  и пс ьолз у й  LongTimeFormat

я   т м ар о ф

, опмеляырд

й   з н ча е и е

м   о л ь ба г н о

й   п ре

am/pm 

Дл я  пшю древущтс ге о бр ж а н е т и ч са у   п о с л и л и   мс ш е н а ы

п п

/а р  

Дл

о   п с ц е и фо р к т а , добавля .  С п це и оф кта , раьлтзеу

я   в р ме н и е   н д я п у ло й  реги рст

я  пшю древущтс ге о бр ж а н е т и п о сл ш на ы

о   п с ц е и фо р к т а , добавля

я  вмрен и е  пн дя уло

.  С пце иофтка й  ригерст

о  с  люи дурщ и

, раьлтзеу

м   елн у з  лиюдру щ ге



о б р О жа т е т   р а з л ие д т н о й  TimeSeparator

ь   в мр е н и

,  меояплы др

'xx'/ ''хх " 

С и м волы ф о р м а ти р о в а н и

е   в  о ди н а р н ы х  н е   де й с тв еу

е  и л т

Е лс

и  срокта

, омпеляард я  фиормтавн и е

е у д еСл

т ь ои т ме т , н о  и  срокт

в  табли ц е "Снодге Пр

т   12- овсча я   и  "р т ь   н и жн и й о

,  опмеляырд

й   з н ча е и е

м   л о б га ь н о

й   п мр е н о м   о л ь ба г н о

е   к авы ч к и

, чт о  в  мо т е и  ви ад :

е  ткао

й  срокти

е  м ы  увид

м  сю у щдле е

т у й

, о то б р а ж а ю тс

т у й

й   п мр е н я   "к а к   е с ть "

,

м  п армте а  format  одмте а  FormatString, паст у , , ка к  елс и  б ы  в  FormatString ыб л а  пна дре а  срокт а  "с " . д  FormatString мнж о о т ав пд ер ь  н е кь тло о  сикор т , унза к ы е

с  hh:nn:ss". , н ап ри мре

, в  н и жпе нри две ы

й  вы з о

в

Application- > M essageBox(TD ateTim e::C urrentD ateTim e().F orm atString ( "С е г о д н я   d d . m m . yyyy. С ей ча с   h h : n n : s s " ) . c _ s t r ( ) ,  "Т е к у щ и е   дат а   и   в р ем я" ,  М В_О К   | M B_ICON IN F ORM ATION ); н а  экнра

-

т   12- овсча й   м ро а ф я  и  "р " к  лю бом у   сч а , вн рхеи й  и л и  сме

й   з н ч ае и е и  двой н ы

-

й   м ро а ф " к  лю бом , вн рхеи

я   з н ча н е и е

я  dd.mm.yyyy. С йе ча и   ч а п д ре

м  (00- 59)

а  "h" и л и  "hh" и псеьолз у я  "а " к  лю омб у   чса у  д о  пн д уло р  "а/ р " мжое т   и пс о ь л з в т а ь   н и жн и й т   с о б р жа т е я   в н е ст о о

ь   ы ат д

т о  вы п онлс тея

я   (0- 59)

а  "h" и л и  "hh" и псеьолз у у   чса у   д о  пн д уло я   "am" к  лю бом р  "am/ pm" мжое т   и пс о ь л з в т а т   о с б р аж т е я   в не с т о

о Об р а ж т е т   р а з л ие д т DateSeparator

е  н а  н и

о   лн у м   е лн у

/  , 

, з а к л ю ч е н н ы

м  (00- 59)

е   и з о ж рб а н е и

е  (ри с

. 2.21).

бт о а Р

а  с  до та

й  и  врме н

69zyxwvutsr

м  в  VCL: TDateTime

Т е и щу к

е  да т Ж  J 

а  и  вре м н до г е С

я

я  26.11.2003. Са ч й е

с  15:12:11zyxwvutsrqponmlkjihgfedcba

 Пре имр ватоиняр  фом  зинейач  даты  и  вине ме р  с  пьющ о м о  меа дто Рс.и   2.21. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA FormatStringzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA и  все .  Ко х  срван е и о т  н и х  и  ожсяитаед в д а  пзнеыло х  мдо т е ю у щ д с ле и м  обрза ом П оч т

о пр а т е

д  п рокет

а   м ы  раз обрли .  М ы , па врд ,  н е  упномля у и   о   ж н еп ру г ы х я   (, >= zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG  и  т . д.) , н о  сме ю  ва с  увериьт , чт о  раюбот т  он и  так , ка к , в  че м  в ы  можте е  уиьдсбет я   сам и . Тжка е  оалист ь  н реасмнот ы м и а  кс а л а  TDateTime: DecodeDate и  DecodeTime.  Дна ы е  мдо т е ы  он елв яъб ы :

vo id  f a s t c a l l  D ecodeD ate (un sign ed  sh o r t *  ye a r ,  u n sign ed  sh o r t * month, u n sign ed  sh o r t *  day)  c o n st ; vo id  f a s t c a l l  DecodeTime (un sign ed  sh o r t *  h ou r,  u n sign ed  sh o r t *  min, u n sign ed  sh o r t *  sec , u n sign ed  sh o r t *  msec)  c o n st ; и  раз би ваю

т  свнест о

о  дта

у  и  вмре

я  н а  савонст ы

е  чиаст

. Сю ущдел и

й  код

:

u n sign ed  sh o r t  Year; u n sign ed  sh o r t  Month; u n sign ed  sh o r t  Day; TD ateTim e::C urren tD ateTim e().D ecodeD ate(&Year,  &Month,  &Day); з а н се т  тщ куе е  зн чеаи е  гдо а  в  пнмер у ю  Year,  тщ куе Month,  тщ кеу е   з н ч ае и е  чи сл а  мсеця а  -   в  п мрен у ан л о иг ч н о . И  ннцокеа , пиров г м  о  гньлыабол х  пнме р ы х , уы тнпмяоу н е лв яъ бо ы  в  Sysutils.hpp сю щу ид ел м  озмоарб . e xt e r n  e xt e r n  e xt e r n  e xt e r n  e xt e r n 

е  зн чеа и ю  Day.  Дл

PACKAGE  c h a r  D a t e Se p a r a t o r ; PACKAGE  An siS t r in g  Sh ortD ateF orm at; PACKAGE  An siSt r in g  LongD ateF ormat; PACKAGE  ch ar  T im eSeparat o r; PACKAGE  An siSt r in g  TimeAMString;

е  мцясе

а  -  в  пмнре у ю а  DecodeTime вс е

я  мдо те х  рна е

. Дна ы

е  нме рп ы

е

е  и з  ксало

70 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA оыр т кеН extern extern extern extern extern extern extern

PACKAGE PACKAGE PACKAGE PACKAGE PACKAGE PACKAGE PACKAGE

Н ч ьа л н ы бо т Ч

е   з н ча е и ы  и з м не иь т

и з мн е и т

AnsiString AnsiString AnsiString AnsiString AnsiString AnsiString AnsiString я  эи т

, н ап ри м ре е  п мрен о

ь  з н ачне и

в  VCLzyxwvut

TimePMString; ShortTimeFormat; LongTimeFormat; ShortMonthNames[12] ; LongMonthNames[12]; ShortD.ayNames [zyxwvutsrqponmlkjihgfedcbaZYXWVUT  1 ] ; LongDayNames[7];zyxwvutsrqponmlkjihgfedcbaZYXWVUT

х   п м р не ы , н ройсат к

х   с т р у еб я   и з   н р о е ас т к   о п р е ац и о н о й   с и ме ы т . и  ообржанет и я  дта ы  в  кок тр м  феормта , м ы  должн ы  ShortDateFormat. й zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE

ShortDateFormat = "yyyy- mm- dd"; Ел с

и   о б ад в и т ь   ан д у ю   у кч о р т с ,  н па ри ме , т о  вс е  дыат ,  н а  ообржанет и е   ы ро тк е  "гп -т м - д "  (ри с . 2.22).

п а р ок е т в  фтмроа

Г I I I Ос нов

ы  р а б о т

г   щб О и

е  Фцинук с а йе ч

,  в   о кт нур с х   в ли е я

ы   н ша г е , бу д у

о   о в гс т е т   в ы и ь о дс т

ы   с  TDateTime

[  (МЕ

и

с  с реда

р   о мр ф т   эт а  п ремн ая

~—\   г  Ам иесрчтфк

е   о пр е т а

о я

З zyxwvutsr

ы  ~

, 2003- 11 - 2615:45:29 и н а т ычВ

аз Р н о с т е

ь  TDaSeTime

2003- 11- 2615:45:29 И н рк е м е н

2003- 11 - 26 15:45:29 т ад

а  и  врем

ине о ж л С я  Файл

и н е о жл С е

т   TDateTime

е  с  TDateTimezyxwvutsrqponmlk

: 2003- 11 - 2615:44:28 .

I  ' "Форм а

т  дат

Ш ?Г

ы  и  времен

и  

а

j —

W  Врем

я  поньлст

ра тС

.Рис

И н рк е м е н т

  2.22. Иине зм

ат м р о ф

 оинея ажр бто

ю

2Јi Нобяр

о хы В т

 даты

ь  2003 г . 15:45:47

д

 чзе р

унюе пме р

 ShortDateFormat

71 zyxwvutsr

TMouse 

и  пмнре ы м и  ан алоиг чн о С  оальснт ы м о Эт , ннревао , есв , чт о  мнжо о  бы л о  ртер моса й  и нмеруст т  дл о  эт о  н е  еи дн ве тс н ы й  иирнаме т урн тс й  етс ь  и  в л  му д о

н Одк а ю щ у в т си е в С т о

.

е  TDateTime zyxwvutsrqponmlkjihgfedcbaZYXWV  и  г е о  "о"нхятскеро . ы  с  дам т и  и  вмрен м  в  C + + Builder. е  Sysutils.hpp. Н о  о б  о тэ м  в о дг ур й  раз .zyxwvutsrqp ь  в  кс ал

я  рбаот

TM ouse С п и ос к  п озле н ы Sysutils.hpp. В с м н и ог м   п р о ма г и с т ы ро тк й  сржеиод сК о з л а ь  бы зн а ы е  с  мы ш ью в  тмо , чт о  дна Н п и ар ме , сиыбот

х  мел у до

й   в  C+ + Builder н е  орган и ч сявате , кно че о  ж е , он д и м  ли ш ь и   п о - мв со е у   п о лзе н ы , н о  н орыкет , к  сожнлеа и ю , малои знвсет ы м   н а  C+ + Builder. Он ди м   и з  таки х   е л у мдо й   с в я т ле я   Controls.hpp, т   р вб е о с т а н ы й  в  п новсде о й  работ е  ксал с  TMouse. , зеча м  неж у н zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  TMouse, лсе и  у  покм то в  TControl исю емт я  сов и  сыибоят , сяв , и  в  н и х с т пеялва тсо дер я  дчно та со о  ицманрио ф и  дл я  пял е тавзьол ? Н о  дле о я  иц аимрно ф я с теялва т со дпер я  в  ктск ено т е  кн гот ерк о  эн метл а  унпелвари я . е  OnMouseMove TControl,  онелв яъоб е  сю щу диел м  озмоарб .

е  мл у до

typedef  vo id  f a s t c a l l  (  c lo su r e  *TM ouseM oveEvent)(System::TObject* Sen der,  C l a sse s: :  T S h ift S t a t e  S h ift ,  i n t  X,  i n t  Y); е я п лз о в эт о  сыибо т н ме о

т  пичт уло

ь  тщ уик е

е  интдаро к , т . н аз . кикнсле т т  мы ш ь  нс ит до ха я  н а  энарк е Т к иа м  озрабом , мжон о  счиат з н ч ае н  дл я  пчне оули я   ь л оа б н г н и о д м е б х ст и  стваоз д ь  экз ме п ля а в ит л и  н а м  гьолабн у ю   п рм е н у TMouse" -   TMouse *. П рмен а

ы  мы ш е  кыинтдаро

е  пиорзш л

и  в  пале д р

х   н м е эл т , н гиеч

а  унелвипаяр о  н е щ бо са

я  о  мо т

, в  кор то , гд е  в  дна ы

м й

.

ь  (д а  та к  он о  и  ест ь  н а  смао м  дел) , чт о  TMouse нпдреа й   и н о р мф ц а и и  о  мы ш и . Дл я  ротба ы   с  TMouse н а м   н е т р  клас . В  Borland о б  эо т м  уж е  п оз иабтл с ь  и  посрде ю   Mouse, и мюе щ у ю   и т п  "указле т ь   н а  окъеб т   к л ас а я  онвбъеля а  в  мл у до е  Controls.hpp сю ущдел и м   о б р аз о м :zyxwvuts

extern PACKAGE TMouse* Mouse; Тп е р овад

н  н певнсторд

ь  пп риу ст

м  к  расмрнеот и ю  свой ст в  и  мо д те т   и д е н в тс н ы о  о т  TObject и  и ме ,  SettingChanged.

vo id 

f a s t c a l l  Se t t in gC h a n ge d ( in t  S e t t i n g) ;

и  доракт усе

в   к л ас й  мод те

. К сал , н е  счиа т

с   TMouse ун асле я   ро к т но у р т с

а

ы ор т к е Н е 72 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

В ы  нд гиок н и е зм ин ы и з мне и я

м   о з рб а м

. Дан ы

ы  вы з ы тва х  мы ш и й  мо те

ь  эо т , нале дыс д   о б н в е ля

т  мо те д  -  о н  аиомтачксве и  вы з ы свтае я  в  ове т т  н а е  чер з  П нал е ь н уелвипар я  Windows, ил и  кик-ма ибл о т   п мр е н у ю  Mouse  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR в   ве от т   н а  п рои нез дв ы е

. и до П х е р

• • • • •

а  н е  дожлн я  в  нйорак тс

в  VCLzyxwvutsr

 и з  ксал о

         

м  к  свой амст Capture CursorPos Draglmmediate DragThreshold MousePresent

. В  клас

е  TMouse онбвъеля

ы  сю у дщле и

е   с в о й сат

:

•   RegWheelMessage •   WheelPresent •   WheelScrollLines о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Capture

С вой тс

p r o p er t y  HWND  C apt u re=  {read= G etC apture, writ e= Set C ap t u re,  n o d e fa u lt }; е я лв а т с пд е р ва з х ок а б о тч

т   мы ш е  онк ы  пта дер С вой тс

т  соб й  дкирсеоп т р  окн а , пюча щулоге и   (mouse  capture).  Мнжо о   т п а чи о р о  в   щяон тсиа й  мнмое т  зи лтва х ь  зав х т  мы ш и  дмо г ур у  онк у о  CursorPos:

о   мы ш ь . Оыб чн

о  вов д  мы ш и , и ил , ка к г о в р я,т и юме щ ге ь   з н ч еа и е   г о тэ о   всо й а т ,  бо чт ы   з н уь т а , и  уна тсови ь   з н ч ае и е  эог т о   ав йо с т о  эог т о  н е яс тте убр , н о  мла о  л и .. . о

, ,

p r o p e r t y  Windows::TP oint  C ursorP os  =   {read= G etC ursorP os, wr it e= Set C u r so r P o s}; в т й со С в ым ш и н о  чер н и и   о н ме т л э к  ки-мк а ибл в  пнзиацов р С в о й тс

о е ялв па тс д ер

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

. В  пинр ц ип з  сов йтс

е  о т  энметл а  ун еилвпар я итн а кд р о ы и  API  GetCursorPos и  SetCursorPos, о  межо т  бы т ь  пзнело о  пр и  щзмеар о   ро с ук а   ым ш и ,  еб з   зпкиряв и . Дна я  внтжзомс ь  чтса о с ит е зьуплос я , щ нземаир и  вюыапщлвсг е о  нме ю .

p r o p e r t y  bo o l  M ouseP resen t  =   {read= F M ouseP resen t,  n o d e fa u lt }; p r o p e r t y  bool  WheelP resen t  =   {read= F WheelP resen t,  n o d e fa u lt }; п о з в ю ял

т  оплие рдт

ь  н ила ч

е  мы ш

и  в  симе ст

е  и  кисоел к

а  у  мы ш

и  свеснот о

.

73 zyxwvutsr

TMouse 

лД

я  чге

о  пн рде за н чае

о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH  RegW IieelMessage

о  свой тс

p r o p er t y  un sign ed  RegWheelMessage  =   {read= FWheelMessage,  м ы  джа н ап и с ал

е  рримсатв и  в  пнодсле

ь   н е  бме д у е   м е вр я  п ромаг

. Он

о  п ри мне и м , рсачин т ы

о  тьолк х   ь ол к т

n o d efa u lt };

о  дл я   Windows 95, а  мн ог о  н а  Windows  95?

о  л и  в ы

  WheelScrollLines о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

С в о й тс

p r o p e r t y  i n t  Wh eelScro llLin es  =   {r ea d = F Sc r o llL in es,  п о з в е ля т   з ну ь а т ,  ьклос ш га .  С вой тс о   о бр ж а е т в  ап тле е   "М ы ш ь " П на ле И  у  н а с  дл я  рсармнеот и

о   р о ст т   н ой р к т с а и  упнрваел и

к   п ч ис р о к у т ве а

я  оалист

n o d e fa u lt };

я   п р и  вщра не и и   и с е кло а   мы ш и  н а  ои д у   о п р ц ае и о н о й   с и ме ы т ,  уро тк ю   м ж он о   и з м не и т я  Windows. ь  свой ст а  Draglmmediate и  DragThreshold.

н ь

p ro p ert y  bool  Drag Immediate =  {read= FDrag Immediate, write= F D rag Immediate, zyxwvuts default»] . );zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

property int DragThreshold = {read=FDragThreshold, write=FDragThreshold, default=5}; н аД ы е  св йтос а  пзнело н чи а е т  л и  щ чоле к  лвое о гэ т о   св о й т а   ан с т о у в н л е ак к   о с р ук р  мы ш и  пси тмер DragThreshold. Т пе р ь   м жо н о   п ре й т п р и е вд н  н и ж е .

й  кн пок

ы  дл я  ртоба ы  с  Drag'n'Drop. Св йотс о  Draglmmediate от е ял д пер й  мы ш и  оцпареи ю  Drag'n'Drop  нел дм о . Елс и  зн чеаи о   в  false,  т о   оп рцае и я   Drag'n'Drop н чанс те я  тькло о   п о сл е   огт я  н а  кв тислоеч о  п иовлекс , омыеял пдер х   з н че а и м  свйотс и   к  расмроент и

ю   ео с т в г

о   п р о а ек т

.  Ко

// #include  #pragma  hdrstop #include  "TMouseUnit.h" //  -; #pragma package(smart_ini  t) #pragma  resource  "*.dfm" TMainForm  *MainForm; // fastcall TMainForm::TMainForm(TComponent*  Owner) :  TForm(Owner)

/  /

д  тоесвт г

о   п р о ке т

, е , а а

о ыр т к е Н 74 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

void  {

е  и з  ксал о

в  VCLzyxwvut

fastcall TMainForm::FormShow(TObject  *Sender) ScreenCursorPosLabel- >Caption  = "х- а т н и д р о к IntToStr(Mouse- >CursorPos.x)  + ", у- ат нидро к IntToStr(Mouse- >CursorPos.x); FormCursorPosLabel- >Caption  = "же д

:  " + :  " +

м  си т ы б о

if(Mouse- >DragImmediate) DragImmediateLabel- >Caption  = "д" а else те DragImmediateLabel- >Caption  = "н"

я  OnMouseMove";

; ;

DragThresholdLabel- >Caption  = IntToStr(Mouse- >DragThreshold); if(Mouse- >MousePresent) MpusePresentLabel- >Caption  = "д" а else MousePresentLabel- >Caption  = "н" те

; ;

if(Mouse- >WheelPresent) WheelPresentLabel- >Caption  = "д" а ; else ,  WheelPresentLabel- >Caption  = "н" те ; WheelScrollLinesLabel- >Caption=IntToStr(Mouse- >WheelScrollLines);

void  fastcall TMainForm::FormMouseMove(TObject *Sender, TShiftState Shift, int X,  int Y) ScreenCursorPosLabel- >Caption  = "х- а т н и д р о к IntToStr(Mouse- >CursorPos.x)  + ", у- ат нидро к IntToStr(Mouse- >CursorPos.x);

:  " + :  " +

FormCursorPosLabel- >Caption  = "х- ат нидро к :  " + IntToStr(X) + ", у- ат нидро к :  " + IntToStr(Y); /

/

ќ

TMouse 

75

void 

fastcall  TMainForm::ExitButtonClick(TObject  *Sender)

( Application- >Terminate(); }

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA '  „zyxwvutsrqponmlkj

/ / 

Вн ше н и

й  ви

д  п ир ожнле и

я  в ы  мтоже

е  п осмьрет

, зз риуаг

в  товытсе

й  п кроте

.

лГ а в Вс е

и  р е ал и з о в ат , чт о  в ы  хо ет л в   C++Builder, н о  н е  з н а л

иа в н о з л с п ь И

е  ст ил

а   3 zyxwvuts ь и  ка

к

я  csOwnerDrawVariable в  TListBoxzyxwvutsr

П л ос е   н е р и мт о с а р я   н е в т с бо й   к в ио р с т и   в zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP   TComboBox  с   инпьзаслво е м   и лтс я csOwnerDrawFixed пирш л о  вм ер я  пиртов г ь  о б  оквиорс т е  с о  сиелт м  csOwnerDrawVariable. лД я  нг еок о  рзнаирбо я  рерзаб м  снев тсубо ю  оквиорс т у  с  эи т м  сиелт м  н а  пирме е  пмо к н ет а   TListBox.  Инаьзвполси е  дна го о   и лтс я   е я п лз о в т   м о дж а к у   н м е эл т у   п си к а   и тм е ь з ан р у ю  ву тоы с . Ки та с , се у д ел т  оьи т ме , чт о  вес , чт о  го в р и ло сь  о  кмиоцзатс и  внш е г о и в д а   ьн л е и с то о   TComboBox, анюлостб о   а т к   ж е   п н и р ме о  и  к   TListBox.  ивл д евСпар о и  он етоарб : вес , чт о   йеачс с  бе д у т  рнер тмос а о   в  пинрме и  к  TListBox,  пьнло тс ю  анола и г нч о  межо т  бы т ь  инаьзвполс о  п р и  ротба е  с  TComboBox. и д а зСо м   п с и ко , в  о р ток м  бу д у т  н еилчс рпе ы   с в е   н а р кэ ы е  шы итрф , унаелвотсы е в  сме итс . Кы дж а й  энме л т  бе д у т  оежарбо т н  сиов м  снев тысбо м  ш мо иртф : эн емт л , ст ев то ю щув и т с й  ш тирф у  Arial, бе д у т  ве ыд в н  н а  дипсел й  шо тирф м  Anal; энмел т  спиакс , стс ев то ю щ у ви й  ш тирф у  Courier, — шо тифр м  Courier и  т . д . Кнчоые й а тьл  зуер т  н ша е й  ртоба ы  джело н е д уб т  вт е д яыл г ь  сю щу ид ел м   зоа р б м  (ри с . 3.1). Ariac Arial Ar ia l  B l a c k Comic  Sans  M S o u r ie r o u r i e r  New D efault ixedsys Georgia mpact Lu c i d a  Co n so le

.Рис т и в о е с у ющм

  .З 1.  Скпоис

 с и, этнеам е л

 и м ыне ажр бизо  ши там ифр

и н о а зв с ь И п л

е  сил т

Н а м  с  смаог о   н ч ла ге о  в  C+ + Builder. Вн ше н и ,*Г * TListBoH  и   с т и л

77zyxwvutsr

я  csOwnerDrawVariable в  TListBox

а   п о н б и ад с т й  ви

д  фомр

я   ыс ь т а л ы  товгсте

я   н а  товесты о   п р о ке т

й   п кт е о р а  п ери дв

, пом эт н  н а  ри с

у   з р аи гу т . 3.2.

е

ь   c s t l wn e r Dr awVan ab l e

т Э о  тыво сет й   с ке т т  дл я  диц ар мстено и  ртоб а ы  с м я и т ы б ос и   OnDrawItem. OnMeasureltem  и  се ли т м  csOwnerDrawVariable TListBox.»

З а кр ы т

Рс.и

ь

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM

  3.2. Винйше zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  вид  фоы м р  гвтосе  пкетоар

Н а  фмро е  MainForm товг тсе о   п ин р ж ое л я  рпжсоела н  кмпон е т  TListBox с  и мне м FontListBox.  В   н е м   м ы  бе д у м   т жа р бо т ь   пс и о к  энарк ы х   ш о в ри т ф . Зн чеа и е   в йо ст а Style  FontListBox на теслво у о   в   csOwnerDrawVariable. В   TestMemo  (TMemo)  е д у б т ьс н м е т я я  ш ирф т  ттске а  в ив т сс ев то и  с  вныарб ы м  эон емт л м zyxwvutsrqponmlkjihgfedcbaZYXWV  в  FontListBox.  Н у  и  п о  нкпо е CloseButton ос тещявл ус я   о ыв х д  и з  п ри ожлне и я . Н ч на е м   с   огт ,  чт о   н а м   ж у е   н ме ог о   з н ак о м , -   с   н па и нс и я   ч и о б тр а к а   о с бы и т я OnDrawItem дл я  FontListBox.  Н о  сн чла а  м ы  дожлн ы  зз риауг т ь   в  н ге о  сп и ос к  дп уност ы х э н к ар ы х  ш во иртф , уна тсеовл н ы х   в  симе тс . Эт о  енве тс о  стале д ь   п р и  иниц илазц и и н ша г е о  товсетг о   п и р о жн л е и я  -   в  очиброатк е   со б ы и т я  OnCreate формы . Дл я  пчнеолу и я пс и к а  ш ори тф в  и пс оьлз вна о  свой ст о  Fonts гьлоабн й   п мр е н о й  S creen. II zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  fastcall TMainForm::FormCreate(TObject  *Sender) FontListBox- >Items- >Assign(Screen- >Fonts);

и  ртоиазвле ь  в  C++Builder, н о  н е  злан Все , чт о  в ы  хле от 78 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  а к к zyxwvut

  OnDrawItem сп и ска . П очт и   в с е   п он л ь т с ю п р Те ь   р са м и о т м   ч и о б р ат к   о с бы и т я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM и н гч а о л о  рнер мсота у  рна е е  очи ктобар у  эог т о  ж е  сыбои т я  дл я  TComboBox. Снлач а м ы  дожлн ы   ч п и о ул т ь   л ек за т у ь   н а  кна в у   к ом п н е а т , зе та м   о лж д н ы   о ч и ст ь   н ак в у   лд я щ а рв н е то и дп е р я  пнелвяои я  ао тка фе тр в   пр и  пирквеос е  н ша ге о  сп и кса . Дела е   м ы  уна втс ил в е а м   л д я   о г кжа д о   э мле н т а   пс и к а  FontListBox  ю вустоще и й   ш ри ф т   и   вы и од м н за в и е  эог т о  ш ри тф а  н а  кнаув . И од х с я   и з   в ы ш ес к а з н о г ,  обрачти к   со бы ит я   OnDrawItem  желоД н   в ы те лд я г ь ю у с дл е щ и м   о бр аз о м .

//  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA '_ vo i d  f a s t c a l l  T M ain F o rm ::F o n t List Bo xD r5.wI t em ( T Win C o n t ro l *C o n t r o l , zyxwvuts i n t  I n d e x,  T R ect  &R ect,  T O wn erD rawSt at e  S t a t e ) TListBox *pListBox = static_cast   (Control); TCanvas *pCanvas = pListBox- >Canvas; pCanvas- >FillRect(Rect); pC an vas- > F o n t - > N am e  =   p L i s t B o x - > I t e m s - > S t r i n g s [ I n d e x ] ; pCanvas- >TextOut  ( R ect .Left ,  R ect.Top, pList Box- > I t em s- > St rin gs  [Index]

IIВ  дна ы

х   р со т к а х

:

TListBox  *pListBox  =   s t a t i c _ c a s t    ( C o n t r o l) ; TCanvas  *pCanvas  =   pListBox- > C an vas; м ы  пчеа оул

м   к а з ле у т ок р С т

ь  pCanvas н а  кна в

у  комп н е т

а   TListBox.

й pCanvas- >FillRect(Rect);

м ы   з ка р ш и в еа TListBox,  щ куе т в ы н ел д и и   э мле н т м ы  увид м  сю у щдел у

м   ь о л н г п м и яу р й   к и ь ст а   сп и к а

к   Rect, в  ор тк ю   л д я   в рщ а п о т д е н и . Елс и  эог т о   н е  сь лтае д ю  ки нтрау .

м  е д уб я   п н в о ел я и

т   вы иь с од т я  аокатфе р ,  т о   п р и  вынле д и

я   к о н т ре ы

й   э м ле н в   и з о бр жа н е и и   э м ел н т

т я  п р

а   мы ш ь

ю

и

и н о а зв с ь И п л

е  сил т

я  csOwnerDrawVariable  в  TListBoxzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM 79

Ar i x

Ar i a lzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

A r i a l  B l a c k C o m i c  S a n s  M S Courier C o u r i e r  N e w Def ault ixe d sys

mpact L u c i d a 

ок р С т

C o n s o l ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  пир  отусви  ск оитр  с  FillRect Рс.и   3.3. Аак ты фер zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF

й pCanvas- >F ont- >N ame  =   p L ist Bo x- > I t e m s- > St r in gs[ I n d e x] ;

м ы еиан улв тс сп и ск а в  свой тс

м  шт ифр . М ы  н е  уна тсвил еа е  Font кмпон е т И  н каон це , м ы  вы ивод

, ыро ток

м  н а  кна в е  кнпмоет м  рза ме р  ш ритф а  дл я  кго жда а  TListBox дл я  вес х  энмеол т м  н за вн и е  элмен т а  уан ст овнле ы

а у д  бу

т  всь итыдов о  эмелн а т в  сзуар

я  ннзав и , пьклос . м  н ма

и  ш орим тф

я  эонметл у  о н  зс теа д

в я

.

pC an vas- > TextOut(R ect.Left,  R ect.Top,  p List Bo x- > I t em s- > St rin gs[I n d ex]) ; п р Те ь  дйавт е и з мн е и в   з н ч ае и е м н е от и в  н зан че и М ы  и знме я м  си лт OnMeasureltem. Тперь ка к  и з ожрбане о  н а М к М М ftrial Black Comic Sans MS Courier C o u r i e r  Hew Default Fi x e d s y s G eorgia mpact Luc id a  Console LucidaSans Unicode п - Ч ГГ " Microsoft Sans Serif Modern

 приомст   св о й т е  очиброатк ь  спи кас  ри с

, чт о  у  н а с  пчи оульс . Зи тспау е а   Style  с   csOwnerDrawVariable  н а  собы и т я  OnMeasureltem,  чт о , чбо т ы  уьвите д , к  чме у  пи рдов т  оив тс ус т , елс и  в ы  зиапст у е   п к т о ре , в ы  уви дет . 3.4.

Рс.и   .З 4.  Винйше  вид  спкиса OnMeasureltem  (со  сме тил

 товы тсе й  пткеор , внмер а   csOwnerDrawFixed  ли б  в  п ри н ц и п е  экви ален т о е  ок тобар и  сыоби т , чт о  сп и ос к  выи дляг т  так

 зе б  откоаибр  стияы б о  csOwnerDrawFixed)

о о . я ,

Вс е

80

К з а ло с Н о  уилвечьт И  чт о  в ы  увие дт

ь   бы е   р аз м е

, чт о  в ы  хле от

,  вс е   в  п оркяде !  Зчеа м   ще р  ш иртф а  (чер з  свой ст , зи тс пау в  пниржеол ? Уитвд

и  ртиозавле

ь  в  C++Builder, н о  н е  злна

и  а к к

zyxwvuts

а   о с бы и т я zyxwvutsrqponmlkjihgfedc   OnMeasureltem? а  FontListBox)  с  8 пн оукт в  д о   14. ю  в  ощб м-е т о  ки нтра у  (ри с . 3.5).zyxwvuts

е   жн у а   к о бр а т о  Font  пс и к е  гн тсу р

М а .г

A rialzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Ar ie l

C o u rier o u r i e r  N ew lit Fixedsys Imnnrt L u c i d a  C o n s o l e n H eigh t  =   - F o n t - > Size  *  F o n t - > P ixe lsP e r I n c h  /   72; Н о   п р о мб л е а   в   ом т ,  чт о   с   пчнеолу ы ы  н е  бе д у т  -   у  вес х  эмлен о т ш рио в т ф ) п о  эо т й  фл мроу е   п ч и о сл у т в  сп и кс е  бе д у т  ои дн коавы м , опмеляырд В  квачсте е  дог ру о  вари н т а  мжон ш р и ам т ф , н о  у   н и х   чрзе вы чай н о п р о с йт ,  нже да ы й   и   о нб д ы у й  в з ун ь а т , ськол о  п и клосе в  з ай м е т  кы жда TCanvas ест ь   о тме д   TextHeight, кыро т л ас е х   р о к ст и  такест , панрде о й  ем об р а т

i n t 

м   н ма

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

м   з н ча е и е м  кноркет й , говр я  п-о моу г ур д ,  у   евс х к  ка к  рза ме р   в се х   ш р и о т ф в а  Size свой ст а  Font сп и ска . и  Win32 API дл я  рбаот ы  с о о   сет ь   и  тирет й   в ар и н т  ,  п о   т ус и   леад ,  и нодм хбе о е  комп н е а т . А  в  клас е а  оепля др т  вы сот у   в  п и к -

f a s t c a l l  T e xt H e igh t ( c o n st  An siS t r in g  T e xt ) ;

Т к иа

м  обрза ом , елс и  м ы  в  очиброатк е  собы и т я  уанст ови м  ш ир ф т  кна в ы  в  то т  ш иртф , м   о жл е д н   ыб т ь   и з о бр ж а е н   щ ке у т и й   э м е лн т   в   сп и к е , и   вопс мьелз у я   о д мт е м TextHeight, м ы  пчи оул м  и ню ресутщ у ю   н а с  вы отс у  эмлен т а  сп и кс а  в  п и кслеах . н   т е вы д я л г ь   ю у щ д с ле и м Идо х с я  и з  эогт , очбриаот к  собы и т я  OnMeasureltem дожле о б р аз о м .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о ры к т

//  



void 

; zyxwvutsrqponmlkjihgfedcbaZYXW

fastcall TMainForm: :FontListBoxMeasureItem(TWinControl *Control, int Index, int &Height)

{ TListBox *pListBox = static_cast   (Control) ; TCanvas *pCanvas = pListBox- >Canvas; pCanvas- >Font- >Size = pListBox- >Font- >Size;

Вс е , чт о  в ы  хле от и  ртоиазвл е ь  в  C++Builder, н о  н е  злан 82zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

zyxwvutsr

и  а к к

p C a n v a s - > F o n t - > N a m e  =   p L i s t B o x - > I t e m s - > S t r i n g s [ I n d e x ] ; H e i g h t  =   p C a n v a s - > T e x t H e i g h t ( p C a n v a s - > F o n t - > N a m e ) ;

П н с яо е и м као р С т

я  зжисалувю

т   ь ол к т

о  тр и  п нослде и

е  сротчки

.

и

pC arivas- > F ont- > Size  =   p List Bo x- > F o n t - > Size; pCanvas- >F ont- >N ame  =   p L ist Bo x- > I t e m s- > S t r in gs[ I n d e x] ; м ы  уан ст вли ае всо й т а  Size  ш ри тф с т ве а я  вы асот . ок р С т й

м   ш ри ф

т  дл

я   н ка в , а  и м

а  сп и кса

ы   TListBox.  Р заме я  ш ри тф а  -   кест т  тог

р   ш ри т ф о  элмен а т

а   ре б , дл

м   р ва н ы я  когр т

м  з н чае и о  вы чси т

ю -

H eigh t  =  pC an vas- > TextH eight(pC an vas- > F on t- > N am e); м ы  выеяичлс

м  вы тос

Т к иа

м  озрабом н за в и

е  кгока ь л ан О т с о

пс и к

а  и з мнес тя

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

м  е е  пр тмае а  сп и ск

у  Height очи актобр а  в  з ави с м ост

.  В   чобират к

е   со б ы и т о  с  вы брна ы

. ,

и  о т  тог я  ОН кпсС

м  эмлен о т

.

/ / zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  fastcall TMainForm::FontListBoxClick(TObject *Sender) TestMemo- >Font- >Name = FontListBox- >Items- >Strings[FontListBox>ltemlndex];

И  в  очбираот к /

е  ни жат

я  кн оп к



void  {

и  раели з ова

н  выо х

д  и з  п ри ложне и я

.



fastcall TMainForm::CloseButtonClick(TObject *Sender) Application- >Terminate();

Р с я м т за е у ьк ло т

о  расмрнеот ы м OnDrawItem вы иводт н и ка х  тн дйеоруст

,  нвесобт а и  н ма ь  биовыт , п омэт

я   ри о т с в к и  п ри меаи е  и з ожрбане и у  оасвлтея

а   в   TComboBox  и   TListBox  н е   оранг и ч свтае . В ы   еможт , н ап ри м ре , в  очбираот к я  дл я  когжад о   э л ме н а т . Э т о  н е  пваелястрд я  н а  самельотясн о е  упраж н е и е .

я е  собы и т

я т

ш ч у л ине У

е  ийес рфе тн

Я  ..TListBox н  слти

83zyxwvut

а  TListBox и  TComboBox

ь  csOwneiDiawVaiiable

тЭ ар т о б

о  т е ст ыов

й  т ес к

т  дл

я   е д м о н с т р а иц

и

ы  с

с о б ыт и ям и   On Dr awl t e m , OnM e a sure lt e m  и  с т и л е м omic  Sans  M SzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA C o u rier csOwne rDra wVa ria ble  TList Box. C o u r i e r  N ew

Default Fixedsys Georg ia Impact i d a  C o n s o l ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

  .З 6.  Винйше zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  вид  згаопнеущ  пинея ж о илр

Рс.и

еш и н чл у У

е  ие йтсн рф

а  TListBox и  TComboBox

TListBox, TComboBox.  VCL- к треоб и   ан с т р д ы х   м нэ е л о т в   п у р а в нл е и я   Windows. П р о ст ы   н о ь л к тс а , чот , ксяажте , п рощ е  н и х   може т   бы т ь  тькло о   TLabel и  TButton.  И  эт о в  ощб ме- т о   акт ,  н о  ва м   н дигок а   н е  пи одлр х о   в  гувол , чт о   эт и  дв а   комп н е т а  сп и ксо в м жо н о  слате д ь   об е л е   н бо д ы у м и   л д я   и с п о л ь з в на и я ? Елс и  н е  пи ордл х , т о  сйе ча с   я  ва м п жо к а у  то , н а  чт о  вы , вн ртоея , н е  обращ ал и  вн и м ан и я . А   и м не о : кйра н ю ю   о бн д у е с т ь и с п о л ь з в ан и я  сна тр ды х   п с и ко в  п р и  рбаот е   с  длин ы м и  сроктами , кыор т е  н е  п оме щ юа с т я   в  эменл т ы  управлне и я . Окрой т е   C+ + Builder, раз имсет е   н а  фмор е  комп н е т ы TListBox и  TComboBox  и  з ан сеи т е   в  И н псоркет е  оо ктъеб в   в   всо й т а  Items эи т х  комп н ео т в  сю у дщле и е  сротки :

ор к С т

а  н ормльан о

й  дли н

ор к С т

а  н ормьлан о

й  длин

р Со к т

а  н ормльан о

й  длин

ы ы ы

Э т о  онче ь- ноче ь- ноче ь   н п е р о ц и о н льа н П р и  зскпа у е  п рокет а  сп и ск и ьв а т П с д е р е  сбе я  н а  мсте е  пле тьзавло и   мас и   ч рле а в тс и   п рма о г ы  с В яр д  л и  у   ав с  нс тейа д я  хто ь  он д Н о  во ы х д  еь тс . Эн тем л у  ун еилвапр

 бу д у   ли д н ы м о  хшор е я  "спикос

о  дил н а ь   ю у щ д елс и

т  втеыдялг я  пмарго и   ро км а тс е   во л с " (оок т р е б

я  срокт

ы  с  ткиа м и   в   на д ы о   в  аер д с   чи ок т бз а р й г о р кт о

а  дл м   з а р об и  спмиакс х   э м ле н а т о с  ят е я лв

я  тисетрован и

я м  (ри с . 3.7  и  3.8). и  (д а  в ы  ннреквая а х   п уравлен и )я . в   ок а т й  пмарыог . я  кнпоме т  TListBox)

и  ртоиазвле ь  в  C++Builder, н о  н е  злан Вс е , чт о  в ы  хле от 84 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ро кт С ро к т С ро кт С

а  норм н ьла а  норм н ьла а  норм ноьла

й  длин й  длин й  дли н

тЭ о  о- ьне ч - ьне чо не чо

р о ткС р о ткС р о ткС ы

а  норм нольа а  норм ноьла а  норм ноьла

й  длин й  длин й  длин

тЭ о  о- ьне ч - ьне оч не оч ы

и  ка к

ы ы ы ь   пен

р zyxwvutsrqponmlkjihgfedcb

ы ь   пен

р

иа ющй п д ы  скпоис  с йион дл zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  3.7. В Рс.и   3.8. Скпоис  с  дйион л  скйотр  в  этнеах ме л в тнеах ме лэ zyxwvutsrqponmlkjihgfedcbaZYXWVUT

Рс.и

кйотрс жн м о м жо е м ж со е

о  оп твраи т  и мте т  пе т у Д ан о

ь  собщ не и ь  п олс м   к п т ро у е  собщ не и

у  пкитро у

е  LBSETHORIZON TALEXTEN T, кор т е  утжкае , чт о  сп и ос к , и , таки м  образ ом , в  счалу е  дли н о й  сротк и   п о ль з е в т а ь и  сп и кс а  увитед ь   е е  всю . е  оп тсравеля я  сю у щдле и м   о б р аз о м .zyxwvutsrqponmlkjihgfedcbaZYX

0); SendMessage(Handle, LB_SETHORIZONTALEXTENT, Length,  Handle -   секдри по т Length -  в тислеочк Е лс и  п ировст ь  эмо т м  ка к  ра з  то т  этк е ф

ич у п л о

и к Та н е Н ож д и х а •  • 

н О ел п д р и п в к Оа р т П р в ые

р  кмоп н е т

а  TListBox;

о  п иовлекс у  пр тмеа

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

я   пс и о и  в  спи кс .

i n t  Length  =   0; TCanvas *pCanvas = new TCanvasO; Canvas- >Handle = GetDC(ListBox- >Handle); for(int i = 0; i Items- >Count; AnsiString Text = pListBox- >Items- >Strings[i]; int  TempLength = pCanvas- >TextWidth(Text); if(TempLength > Length) Length = TempLength;

delete pCanvas;

к  п о  гиро знла т е  в  пхаилеск

. , т о  м ы

ш ч у л ине У

е  ийес рфе тн

р о к мС а т

85 zyxwvuts

а  TListBox и  TComboBox 

и TCanvas  *pCanvas  =   new  TC an vas(); pCanvas- > H andle  =  G etD C (ListBox- > H an dle);

м ы  сеа зод

м  кнав

с те зу

у  и  нзенач

я г о р и з о н атль н ая Д але

)ак т п урко е  м ы  пльеонватсд у  ко жда й  срокт

е  в  ц и кл м  дли н

о п е ля рд

у zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH  {ListBox -   нпмоке т  TListBox, дл я  кгор то о  рилае -

м  е е  спикс .

о   и до п х р

м  п о  вес

и  в  п и кслеа

м  сорка т ю  мдо те

х  с  п омщ ь

м  сп и ска . Врн т у а   TextWidth канвы

и  ц и кл .

а

i n t  TempLength  =   pC an vas- > TextWidth (Text); К  мн етмо

у  зшрн иев а й  Length. к  н е  зыба ев

в  пнмер о И  н ап ослде

я  цлик

а  рзмеа

р  в  па л е сик

х  нелоиба

м  о б  унела ид

и  кан вы

е  оп трваля

ь  со бщ не и е

е  динл о

й к сор т

и е  бд у

т сь нит до х а

я

.

d e l e t e  pC anvas; П о сл

е  эог т

о  м ы  мжео

м  уж

.

Sen dM essage(ListBox- > H an dle,  LB_SETHORIZONTALEXTENT,  Len gth ,  0 ) ; Тп е р

у  TComboBox. й  сп и сок " н е т  сщоб не и я , кор т е  б ы  у  спи кс а е  п оз в ь  сщбо не и е  CB_SETDROPPEDWIDTH, кор т т  дна ом у  энмел т у  унпевлар и я  ршса и р т ь  ег о  выюа пдщ у ю  чтса ь  д о  нжн ыу х  рза мроев . CBSETDROPPEDWIDTH  ос тпеявлар я  анигочла ы м  LBSETHORIZONTALEXTENT . Дл

ю л к в ач ел я з ар о б м

ь  п рей д я   нм е э л т о  п осл

м  к  кмоп н е т

а  унпевлар и у  пки т укор

я   "вы юапдщ и , н о  ест

SendM essage(H andle,  CB_SETDROPPEDWIDTH,  Len gth,  0 ) ; Handle -  дсекри по т Length -   ш и р н ча З д а  увлие чн и и  п р и  уна тсовк е  лин йек м ас о й   ли д н о й   ро к т с п о сл е  чге о  оп трваи

р  вы пюа д щ ге а  ег о  вы паю д щ е я  ш и р н и  пк т укор и   в   п и а лк е с ь  собщ не и

о  сп и ска й  чсат

; и  в  п и кслеах й  чсат

ы  вы юпа д щ е и  дл я  оыб чн го х   м ож н

. и  сп и кс о  сп и кас

а  длеис т . Пмо тэ

о   в о пс ь л з с о в т а

я  н а  т е  ж е  тр и  эапт , чт о у  дл я  вы нчиелс я  рзамре а я   п р и н е дв ы м   вы ш е   мо д к ,

е

SendMessage(ComboBox- >H andle,  CB_SETDROPPEDWIDTH,  Len gth,  0 ) ; П о сл з и т у р гЗ а

е  тореи

и  пи до хер м  к  п риакт е е  в  C+ + Builder товы тсе

. й  пткеор

. Ви

д  гнвал о

й  фмро

ы  ег о  пелва тс дер

н  н а  ри с

. 3.9.

и  ртоиазвле ь  в  C++Builder, н о  н е  злан Вс е , чт о  в ы  хле от 86 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

т и в ба о Д

ь zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Рс.и

н а   у ро т к пс и о п с и ко ю ма щ е п и о л ке с нч о в

и  ка к

 Фа м р о  тгвтосе  кетопар  во  вя ме р  рткоаибзр zyxwvuts   3.9. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML

К а к   в ы  ви едт , н а  форм е  рпса олже н  комп н е т  TEdit, кн оп к а  (TButton),  п о  ни жта и ю   ке с т т   и з   TEdit з ан оси т я   в  вы пюа д щ и й   пс и о к  (Т)хВо тЪС   и  в  оыб чн ы й к  (TListBox). П ь кл о с у  кдо , оюялеп дрщ и й  раз ме р  (в  п и кслеах ) смао й  дли н о й  срокти , дл я  ооби х в   п и р ка т ч с е и   и не д т чне ,  я   ормфи л   г е о   в   в и д е   н у к фц и и   GetTextLength,   п ри н и й  в  кв тчсае е  п рамте а  уклеза т ь   н а  экз меп ля р  комп н еа т , а  воз вращ аю щ е й  чи лс о в   с ма о й   г е о   ил д н о й   р о к ст и   (объвняле и е   на д о й   н у кц ф и и   ср м и о т е   в   зол г а м  фйа л е  формы ) .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

int  TMainForm::GetTextLength(TWinControl *AControl) { TComboBox *pComboBox = dynamic_cast  (AControl); zyxwvutsrqponmlkjihgf TListBox *pListBox = dynamic_cast   (AControl); int  Length = 0; if(pC om boBox) ,  { T C an vas  *p C an vas  =  new  T C a n va s( ) ; p C a n va s- > H a n d le  =   G etD C (pC om boBox- > H an dle); f o r f i n t  i  =   0;  i  I t em s- > C o u n t ;  i AnsiString Text = pCombcBox- >Items- >Strings[i];

ш ч у л ине У

е  ийес рфе тн

87 zyxwvutsr

а  TListBox и  TComboBox 

i n t  TempLength  =   pC an vas- > TextWidth (Text); if(Tem pLen gth  >  Length) Length  =   TempLength; } de1e t e  pCanva  s; r e t u r n ,  Len gth ; } e l se  if( p L ist B o x) '  ' { TCanvas  *pCanvas  =   new  T C an vas(); pC anvas- > H andle  =  G etD C (pListBox- > H an dle); f o r ( i n t  i  =   0;  i  I tem s- > C oun t;  i A n s i S t r i n g  T e x t  =   p L i s t B o x - > I t e m s - > S t r i n g s [ i ] ; i n t  T e m p L e n g t h  =  p C a n v a s - > T e x t W i d t h ( T e x t ) ; i f ( T e m p L e n g t h  >  L e n g t h ) L e n g t h  =   T e m p L e n g t h ; } d e l e t e  p C a n v a s ; r e t u r n  L e n g t h ; } else r e t u r n  0 ; } //

рп е Т п с им а к з арс

ь   й авт д

е   и ля м с е д п о р

. Кнпмоет

, гд е   м ы  джнло ы   т я л вп а р т о ь  ю щув итс ев то с е   щ бо сн е и я у  TListBox м zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ы  джнло ы  птаичсер ь  дилн у  сор т к  и  оивптар ь  сщбо не и е  OnClick  кн пиок . я  в  нг е о  ныво х  эвон емт л , т о  етс ь  в ичк т ооб ар е  сиыбот я zyxwvutsrqponmlkjihg

у  плсо е н еил дв або / / zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void _fastcall TMainForm::AddButtonClick(TObject *Sender) ComboBox- >Items- >Add(Edit- >Text); ListBox- >Iterns- >Add(Edit- >Text); SendMessage(ListBox- >Handle,  LB_SETHORIZONTALEXTENT, GetTextLength(ListBox) + 10,  0 ); } // ю а В ы щ дп м е

в  н ге и  ос тежарбо т

о  н ыво

у   п си к х  эноме лт я  ег о  вюыа щпд а

у  н е т  нтисмод хбо е в  -   эт о  ним до хбо е я  чь тса

и  отялвпар т о  дтале . Дл я  эи т

ь  сщбо не и ь   в  то т   н емто х  цел й  пи до х до

е  сзар , кд го т  сыибо т

у  плсо

а   пси о

е  днелвабои я к  рс ырткеав я е  OnDropDown.

Вс е , чт о  в ы  хле от и  ртоиазвл е ь  в  C++Builder, н 88 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о  н е  злан

void  fastcall TMainForm::ComboBoxDropDown(TObject *Sender) { SendMessage(ComboBox- >Handle,;CB_SETDROPPEDWIDTH, GetTextLength(ComboBox) + 10,  0 ) ; } //  ыВ

, ннревоа й  динл о й  скор т . Пйт убпор в Е не с т о м е рв я   р а з к б ои т п кв а р то у   со бщ н е и OnDropDown эт Н а   о эт м   п и р а к т ч с е нь к л о с е о  онче ь ыв ю а п д щ и й  сп и сок

ом а с а ивд

, ои лтарб

и  вн и ма е и  пн елвиарб е  н е  птялвиарб , чт о   сел и   в ы ,  в ы   олждн я  комп н е т о  н е  кри тчн о я    дли н ы х  сро т .

| о с б но с т

про с т

.Рис

а  

не ч О

о   с р то а к ь  дли н ая

, непро цнаиоьл

не ч О

ь  дли н ая

, нпрео циан

  3.10. Виающйп ды И  ои брта

о н  и з жорабе

и  кап

zyxwvu к

'zyxwvutsrq

 GetTextLength ррзмеа у , чт о  к  вщмаозрве у  н цкиуе ф й zyxwvutsrqponmlkjihgfedcba о  ещ е  10 пволиеск . Эт о  снал е д о  дл я  бело е  кгиосвар о  внш е г о ь  эт о  зн ечиа е  -  еивтду , чт о  бе з  нг е о  хеж у .  з па олн тея е   пс и к и  срокмат и  чре з   И н сп о к е т р  оо ктъеб в  в о ы  т е д у б е   в   о к т н ру с р   м ор ы ф ,  н ап ри ме , ткаж е   о б ад в и т ь у   TListBox. Дл я   TComboBox п р и  и сп ольз ван и и  собы и т я , а  во т  оыб чн ом у   пс и к у  п ротс о   и н о д м бх е . ч с та ь   з ка о н ч е а .  Зи апст у е   о в сые т й   п р о ке т   и   о б ав дь т е к  в  об а  сп и ска . П осл е  эог т о  п осмрите , ка к  са т л   тевыдялг ь

о бД ав и т

 скпоис е   в н и м ан и н  с  п олн ьост

и  ка

ь   I

я  сртоак

 во  вя ме р е  н а  сп и сок ю  пчнероку ы

 дл

я  про

в

*

 винея лпоы , пванлест рд ы

й   к ом п н е о т м   н п а вр

о  сржеиодмы

м   (ри с

м  TListBox. Н а  рни уск . 3.11).

е

иц а з л е Р

я  зкваст

(о с о б но с т

и  (splash screen) в  C++Builder

и  код

зер к

а

|   о б Д ав и т

и  рба ост п об н с т

ь  !

и  код

З а кр ы т

ь

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Рс.и   3.11.вьзаоине  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK л п ос И  пыс о л о  пкутор и  у  TListBox во  вя ме р  винея лпоы zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

, пле ьтзоав Н у  чо т ? М н е  кяс тжеа в  вша , ка к  рчи катозбр , асре д е мс о ж т , олисчатв ь  и х  таки м зы б а л  -  итпьзавсло ь  сщбо не и н м ае т и  TComboBox,   у   ыро тк о т  csSimple.

Ре а л и з а ц и

я  з а с т а в к И ^т к

б р ас ж т е п ро ц се ы жд а к р аз к б ио т

а

и  вша и

м  с  ткиа м и  спимакс и  вяр д  л и  сужак т , елс и  в ы  се тмжо , а  тпер ь  в ы  ннревакя а и  учш ул не ы м и  эмлен а т и  управлне и я . Ки та с , чт у ь  н е е  CB_SETDROPPEDWIDTH  в ы  мтжео е  тькло о  с  тме и  пмо к х   св о й т о  Style  анст уовлне о   в  лю бо е   з н ча е и е , оил тчн о е

, ншор ихе

х  пмарго

е  савол

и   (sp lash sc reen) в  C++Builder

, splash screen. О н  ж е  -  окн о- звакст , и л и  п рост о  завкст . Э т я  н а  экрна е  п р и  срат е  з щпа у не ог о  п ри олжне и я  и  дмеон ристе у с   и н и ц и ла з ц и и   и   з к р у га и   п р и ло ж не и я .  Нн дялгыа й   п р и м ер , вы иводм й  пмраоги тс , и псюьолзущ и й  C+ + Builder, -   эт о  окн о . Дл я  C+ + Builder оптя й  вирсе и  дан о е  окн о  выи дялг т  сщ у диел

о  окн о

, ор кт т   п о ь л е з вт а ,  ыро кт е  п р и  срта м  обрза ом

е  оо т

ю

й   ви д е  сдер .

т ы

Вс е , чт о  в ы  хле от и  ртоиазвл е ь  в  C++Builder, н 90 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Рс.и

о  н е  злан

и  ка

zyxwvut к

 3.12. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Splash screen пир  запкусе  C++Builder 5zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO

Р ал и е з ц и П вщ р а е н и е З з а рг у и т с о в ре ш не и  добавлен п р и в о д с ят з а вс тк о й н а С рт о д тч о  в  дна ы о т ак р  п роц асе пр е Т с  бщ уиге

х   ок н - во а з т с к   -   л е д о   е с я дт и   ми н у т   л д я   з н аю щ г е о   п р о га м и с т я   ак и т м  ва с  в  "з н юа щ и х  п рогам и овст "  м ы  сйе ча с  и  з ай м е ся . е   е ос т в ы й   п р о ек т   в   C+ + Builder.  В н ше н и й   в и д   е со т в г о   о  н е  и н ерт с н , та м  вс е  форм ы , з а  и склю чен и е м   о р мф ы  дл я  з асвтк и ы   в  п роек т  тоьлк о  дл я  дем он рстац и и  сам ог о  паод х , в  свзя и  с  че м  зесд .  А   во т   вн еш н и й   ви д   н о д й   и з   оф р м , той ,  ократ я   и  яв лясет я   с о б в ет н , соит т   п о с м р тье . : рн иоус к  н а  фмро е  (и псьлозав н  кмопн е т  TImage),  нп ида с , нпсяою щ и е й  мн емо т  гсзи тур я  (у  н а с  зн ема о  птсор о  мок т е й  с о зкв ло г а м  "Зз"каург ) . Зн чеаи е  свйо тс а  BorderStyle фмро ы  уна тсеовл о  в  bsNone. ь  зи тс пау е  тыво тсе й  пткеор . П р и  зкспау е  пткеор а  у  ва с  снлач а  псивяот я м  иор тинак д м  и  лиш ь  по т м  фмро ы  па ктеор .

. п р о ек т ,  ыпст у

а е ь  и  н е о ,

, и  инд  звка тс

а

-

ци аз л е Р

я  звкас т

и  (splash screen) в  C++Builder

.Рис

  3.13. Фа- м р о тзасв к

 во  вя ме р

 рткоаибзр

.Рис

  3.14. Фа- м р о тзасв к

 во  вя мер

 винея лпоы

91zyxwvutsrqp

Вс е , чт о  в ы  хле от и   т ои а з в л е р ь   в  C++Builder, н о  н е  злан 92zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Ка

, вс е  "п о- "взомлсру : п р и  зкс пау е  пнежиорл я  псзаыкотев я  онк -о акв тсза , я  о х д  и н и ц лза и и  п ри ложне и .я . . и  дл я  эго т о  н да о  бьнлавк у о  вгес о ь  нкьло с е о  срок т . Пдвар а  тма , кд у а  вы , внпло е  внзжмо , ещ е  н е  зылавдя га и  — нд ерпсо о  в  фйа л  па ктоер . Н о  п ре д  те м   ка к  смртео ь   ок д  фйал а  п арокет , н да о  упомнят у ь   о  сю улдещ ме .  Ф мро а и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  {SplashScreenForm) дожлн а  бы т ь  июклс нче а   и з  аосзвамтеыд х   ор ф м  п арокет ,  спиос к  фро м  товсетг о   п р ок е т а  виыдялг т  сю ущ дели м   о б р аз м .zyxwvutsrqponmlkjihgfedcba

в  кор то и лш н ев т с в а к з тс и

и  ка к

к  в ы  веи дт м  ос тежарбо т

Project Options Pascal  j  Linker  Advanced Linker  |   Directories/Condilionals Version Info  |   Packages  i  Tasm  CORBA  j  CodeGuatd Forms  I  Application  |   Compie l r  I  Advanced CompSer  I  C++ Main form:   J SplashFormi SplashFormi SplashForm2 SplashForm3

Г   JDefaSzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

  3.15.  Скпоис

Рс.и

п Т ре

ь  пи од хре

м р о  ф

 гвтосе м   н в е о с тб

 пкетоар о  к  кдо

у  фйа л

а  п рокет

а  -   SplashProject.cpp.

# in c lu d e  < vcl.h > # pragma  h d r st o p U SERES("SplashProj  e c t . r e s "  ) ; U SEF ORM ("SpalshU nitl.cpp",  Splash F o rm i) ; U SEF ORM ("SplashF ormU nit.cpp",  Splash Screen F orm ); U SEF ORM ("SpalshU nit2.cpp",  Splash F orm 2); U SEF 0RM ("SpalshU nit3.cpp",  Splash F orm 3); # i n c l u d e  " S p l a s h F o r m U n i t . h "

иц а з л е Р

я  зкваст

93 zyxwvutsrq

и  (splash screen) в  C++Builder 

/  / zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

WINAPI WinMainfHINSTANCE,  HINSTANCE,  LPSTR, int) { try { SplashScreenForm  = new TSplashScreenForm(Application) ; SplashScreenForm- >Show(); SplashScreenForm- >Update(); Application- >Initialize() ; Application- >CreateForm(  classid(TSplashForml), &SplashForml); SplashScreenForm- >SplashScreenProgressBar- >StepIt(); Application- >CreateForm(  classid(TSplashForm2), &SplashForm2); SplashScreenForm- >SplashScreenProgressBar- >StepIt(); Application- >CreateForm(  classid(TSplashForm3), &SplashForm3); SplashScreenForm- >SplashScreenProgressBar- >StepIt() ; Sleep(500); SplashScreenForm- >Hide(); SplashScreenForm- >Close(); ; Application- >Run()  } catch  (Exception  ^exception) { Application- >ShowException(&exception); } return 0; } //zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA , чт о  дожлн

П ре в о

о  п ри чвел

ь  вша

е  вн и м ан и е

: м ы  сеаоз д

м   м ор ф

у  звакст

и   ч нв р у ю

.

SplashScreen F orm  =   new  T Sp lash Sc reen F o rm ( Ap p lic at io n ) ; И н ем оВ р е т чов н ы

й  фйа

о  дл я  эго т о  м ы  улибар и  е е  и з  спикс а мыеав  азодс тв х  п р и  стра е  пн ежиорл я  фмро . :  лд я   наозс ди я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   SplashScreenForm  м ы   юкпл одчи л и   в   йа ф л   п р ок е т а   зол г а л  эо т й  формы .

#include  "SplashFormUnit.h" еБ

з  эо т

й  срокт

и  комп итял

р  бе д у

т  вы автд

ь  ош и кб

у

[C++  Error] SplashProject.cpp(16):  E2450 Undefined structure 'TSplashScreenForm' и  ря п кр о те

д  диг рух а  п ртос

. И е бд у о  н ие з нвсет

т  п рав

, и б .

о  бе з  золгавчн ог

о  фйа л

а  ти

п  TSplashScreenForm в  фйа л

е

Вс е , чт о  в ы  хле от и  ртаовизл е ь  в  C++Builder, н 94 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

е Дла

, п осл

е  соназ д и

я  фмро

ы  м ы  е е  ожроаеб т

о  н е  злан

zyxwvuts

и  а к к

.zyxwvutsrqponmlkjihgfedcb

м   н а  экран е

SplashScreenForm- >Show(); SplashScreenForm- >Update() ; тЧ

т  бе з  скор т и  с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB  ShowQ, я юма ду , ва м  янс о . А  скор т а  с zyxwvutsrqponmlkjihgfedcbaZYXW  Update()  ннж у а  дл я кво оиср т и я  в  SplashScreenlmage.  Бе з  Updatef)  нш а а  зква тс а  бе д у т  бе з и нтраки .

о е д бу

н е иж а р б з о ко р С т

а Sp la sh Sc r een F o r m - > Sp la sh Sc r een P r o gr essBa r - > St ep I t ( ) ;

в ли е у ч в е а ро ф

т   п оз и ц и м  п арокет

ю  и н оир дтка

а  п осл

, а  пльеовнастд о

ь   р о тс

е  снаоз ди к

я  и  и н и ц и ла з ц и

и  он до

й  и з   ьланост ы

х

Applicat io n - > C reat eF o rm (  c la ssid ( T S p la sh F o r m l) ,  &SplashF orm l); Sp la sh Sc r een F o r m - > Sp la sh Sc r een P r o gr essBa r - > St ep I t ( ) ; Application - > C reateF orm (_  c la ssid ( T Sp la sh F o r m 2) ,  &SplashF orm2); Sp la sh Sc r een F o r m - > Sp la sh Sc r een P r o gr essBa r - > St ep I t ( ) ; Ap p licat io n - > C reat eF o rm (  classid ( T Sp lasliF o rm 3) ,  &SplashF orm3); Sp la sh Sc r een F o r m - > Sp la sh Sc r een P r o gr essBa r - > St ep I t ( ) ; н ев т с бо о  и  деа т  вилазц у ю  п оцр се а  зз круга н а   м ро ф е   (SplashScreenProgressBar)  л д я   н гтокер з н че а и е  свйотс а  Min джнло о  бы т ь  уна теслво ткп е о р а  ми н у с  еи нд и ц а  (фмро у  звка тс и  н е  учыи тме)ва ыб т ь  уна елтвос о  в  1. И  н каон це , рокст и

и  пинржоел я

. Оуч ем т

, чт о  у  иро тниакд я   п ро ц с е а   з к ур г а а  М ах  -  в  чи лс о  фро а  Position джлно

о   н же а р иб о т о  в  0, зн чеа и

е  св йотс . Зн ечиа

е  свйо тс

а и м о

SplashScreenForm- >Hide(); SplashScreenForm- >Close(); п т со р

о  уибюар В ы  н рнвеа кя

т  зква тс а  ои бртал

у  с  энарк и  вн и мна и

а  и  зыркаюв

т  фумро е  н а  срокт

, в  кор то

й  уж

е  оплат

а  нь итмсод хбое

.

у

Sle e p ( 500) ; Эт н п еж и о р л я и к аТ

о  снале д . Бе е  ж е  скор т

о  дл я  то г , чбо т з  дна о й  скор т и  етс ь  и  в аро ктк ур нотс

ы  пл е тавзьол и  пн где лсо х  вес

ь  мо о  уинлечв х  оьнла ытс

г  утеивд

ь  онокачи я   р о т и ан к д х  фро м  па ткеор

е  псцоре а  пле таьзвол

а  ин иц зла

и

. .zyxwvutsrqponmlkjihgf

II.fastcall TSplashForml::TSplashForml(TComponent* Owner) : TForm(Owner) { Sleep(500);

ь   н е  уитвд

95 zyxwvutsrq

TEdit и  OnKeyPress 

л еД о  в  тмо , чт о  фмро ы  у  н а в ы  н а  мщо н о й  мша и н е  джа е  н н же а р иб о т я   вк а з т с и   нз а и м ро ф м  вне д в а   ж к р е дз а а   в  пны дукесло п т со р о  лиш н е е  -  на изодс е  сжнол ы чо н т о  догл е  вмяер . Н у  вто , свонебст о , и  все п й ер о б у т , творие т . А  рни уос к

с  пы тс у е  утпсе л   м н з о уа р

е  и  и х  сназоди е  пи до ихср т  бьнлавк у о  з а  мнг ево и я ы  пцорсе е   т е ив д у ь   splash screen. И  во т  дл я  тго о  чбо т е   м е рв я   и  бы л   щбов е   м е а ю л н бд ,  в  ро тк урноктс .  яс тем Рзуа ,  в  бьшло и х   з ьр е н с ы х   н п ж ие о р л я х   эт х  фро м  с о  мов тнсежо м  кмпон ет в  зна ием т  и  та к  да тсо

, чт о   мжон  вз я т  и з  погла тк д

о  рсказ т

ь   о  созна д и а   Images  огла тк

, с ы о -

и  завостк .  В мы у двайе т , а   Borland  Shared.zyxwvutsrqponm

TEdit и  OnKeyPress

, чт о   мкоп н е т zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE   TEdit ноьлктса о   п т со р , чт о   н и чге о   н ов г о   п р о  рбоат у   с  н и м е   н л ье з я . Н о  эт о   н е  так .  И  сйе ча с   м ы  рза рбе м   ы ро н тк е е   са п к е т ы   об р ат ы , кыор т е  довьлн о  чтса о  оюасждтуб я   в  раз ли чн ы х  эокн ерхфц и я х  о  C+ + Builder. н Од и м  и з  таки х   о пс а к т е в  яс тевял я   ор а н г и ч н е и е  п оьлез вта я   в  си мвохал ,  орыкт е  о н м ож е т  ввсет и  в  TEdit.  Рч е ь  н е  ие д т  о  мкаси мльн о й  дли н е  ткест а  -   лд я  эог т о  у  комп н е т а TEdit  ест ь   свой т о   MaxLength,   з н чае и е   г о р тк о   зка ы у т е в ,  ока е   м ак с и л ь н о е о  рдо а   в и л т ко с ч е о   ио с л м в в  пле ьтзаов ь   еж мо т  ви всте . Рче ь  ие д т  о б  онарги че и  дго ур н ап р и м е , п оьлез вта ю   и м до н х б е о   п а в о и ср т д е ь   в о з м ж н о ст ь   и т дов ь   ь ол к т о   ео п д р л не ы е   с и м в о лы ,  и л и   и мдо н хбе о   и к о р те в а ь   п о ь л з е кс и в т а й   в од .  жкТа е   м ож е т п о н б и ь да с т я   о с щб т а ь   п о ь л е з вт а ю   о  ни тсопмдеу м   л д я   в од а   си м в о ле . И мне о  таки е ч а у лс и   м ы  сйе ча с  расмриот . П й е ш т ос р и й  сча ул й  онарги че я  пгокьсле тьзалво о  ва дов : в  кмпно е т  TEdit пьзалво л е т ь   ж ел о д н   и тм е ь   з о в мж н т с ь   и т дов ь   ьк л о т о   ц и ыр ф . Та к   ак к zyxwvutsrqponmlkjihgfedcbaZYXWV   TEdit — тэ о   гесв о   ил ш ь к т р е бо а  бкеилтбо и  VCL  н а д  сн траы д м  эномелт м  унпевлари я   "скор т а  ва вод "  Windows, т о  рше не и е , кор то е   н п ш а рс т и е а в я   м ас о   осб й , -   ьсповзтла я   и елтс м  ES_NUMBER ю ущ д елс и м   з а р бо м : К с а яж т е

р ас к з т с  н и м

ь  жу

SetWindowLong(TestEdit- > H andle,  GWL_STYLE, G etWindowLong(TestEdit- > H andle,  GWL_STYLE)  |  ES_NUMBER); д г е  TestEdit -   и м я  вша г е о  кмпон е т а  TEdit.  (Зсе д ь  и  дела е  в  кдо е  TestEdit -  и м я  кмпон е т а TEdit,  рзщаме н го о  н а  фмро е  с  инме м  Main Form.) П о сл е  эог т о  п р и  н певнсторд о м   в од е   ис м в о л а  в  комп н е т  п ользевта ь   мс о ж е т в с ет и   ь ол к т о   ц и ры ф .  К   осжнела и ю ,  у   на д ог о   сп о б а   е с т ь   о нт а с д е к   -   и з   р е ф уб а мн о б е а   в   м окп н е т   п -о п ж н е р м у   м жо н о   в с ет и   ю л бо й   в аи н фл т о - ц и р о в ф й   ис м в о л . К  сожнлеа и ю , сна тр дог о   пс о б а  окбраот и   в а к тс и  и з  бреф у а   о мб н е а  н те , а  н и ж е  м ы р са м и о т м  пмеаыгл др й   мн о ю  сп ос б  окбраот и  дан о й  сациу т .

Вс е , чт о  в ы  хле от и  ртоиазвл е ь  в  C++Builder, н о  н е  злан 96zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

С по с

я   м о пк н а е т , к   нелжосаи ю ,  ием т   н ч ое ь  онар ги че н о е ь  кпмно е т  впсоир мч ыв м  тькло о  к  вдов у  ц ирф , и  н гиеч о е  онар ги че е  вдов а  дл я zyxwvutsrqponmlkjihgfedcbaZYXW  TEdit,  т о  ним до хбо е о  взоь лп с о  до г ур  OnKeyPress кмпон ае т . я  уньласирыев м  сопбс м  -  чер з  ок тобар у  сыибо т я zyxwvutsrqponmlkjihgfedcbaZYXWV TEditе у денлса т  сыибо т е  OnKeyPress о т  кмпно ет а  TWinControl.  Сыибо т е  OnKeyPress о  в  TWinControl сю щу диел м  озмаорб .

п ир н ме и е ьш л о б е сь т а в н е лв яъ бо

б   р еч з   и зн м е и . О н  пеялзов . Ел с и  ж е  ним до хбо е

и  а к к

typedef  void  ch ar  &Key); нО

о   и т д о их п с р ю  ои ндчо м

ю щув ип о р з ш л п о  сыс екл

о  сыбои ет , чт о  пезоялв ь  п осмрит м ю  очиброатк

п р Те с  пмщо ь

е  си лт

т  стале д

fa st c a ll  (  clo su re  *TKeyPressEvent)  (System:  :TObject*  Sender, ,  д гок у  сулиовм , а  зн ечиа

а   л е п ь з то а в . Зн чеаи е  пр тмеа т  ктиаворке , ка к  рше и т а  собы и т я

ь   н жи а е м е  пр тмае а  Key -  ну таж ь  вов д  пле ьтзоав ь   н ша у  зча д у  OnKeyPress.   п р ч е и тс л я ь  в т   н е  онче , бе д у й  лд я  ртоба ы  с й  пкюлодс тчеа у   VCL- у ткпеор х

т   н а   р у и в та лк а  Sender еял подер ю  кившалу я  в  очи ктобар  о  ввод е  тьолк

е   ивша лк у т  кпмно ет . П тмаре о   циф

,  тс ев тос , в ор кто м р  Key пс т еа д ер я е  сыбои ят . р  в  комп н е т  TEdit

яс Р м т е з а у , н певнсторд о  очиброатк е   со б ы и т я   в с е   ц и р ыф , чоб т ы ь  разм ну о . Дл я   побнд ы х   ц ел й  Win32 нра о г и ч т ь   и м и  вов д   п оьлязе вта API пеялва тсо дер т  н а м  ря д  фн цкуи о  смкоар т и  и  си мавол . Дна ы е н цкуиф и й  в  сво ю  одреч ь н е лв яъ бо ы  в  фйа л е  winuser.h, кыро т я  в  windows.h, кыро т и ко м с ч т а е в и   п кю л с о д т ч е а я   к   м о ж д ка ,  а т к   чт о   в ы   можте е   и п с ьо л з т в а ь на д ы е  фн цкуи и  бе з  к- иках илб о  допнл ьеи ты  дйевист . В  дна о м  сча ул е  н а м  пейод т н цу к ф и я  IsCharAlpha. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA BOOL TsCharAlpha(TCHAR ch) ; н аД

я  фн цкуи я  вщзоарв е т  true,  елс и  си млов , омыеял пдер й  зн чеа и м  пр тмеа а  ch, я  аваифнл т ы м  си мвол , к  false  - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM   в  пи ротвн м  счаелу . а  очиобрат к  сыбои т я  OnkeyPress комп н е т а  TEdit мжон о  н па и ста ь  сю ущ дели м .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

с т е в ял д г оТ о бр за м

// void  &Key)

fastcall TMainForm::TestEditKeyPress(TObject *Sender, c h ar' if(IsCharAlpha(Key)) Key = 0 ;

ор к С т

а Key  =   0;

в р ща п о т д е а

т   ов

д  авинафлтог

о  си мвола

.

97 zyxwvuts

TEdit и  OnKeyPress 

, корм е   ц иф р  бу д у К  сожнале и ю "?", "*" и  т . п . Чоб т ы  орнаг и ч т ь  вов ч и бо т к е  соыби т я  (н и ж е  м ы  рсармиот

т   иь с в од т д  эи т х  си мвол м  сп осб

я   и  диг ру

е  си мволы , н а м  псрите д

, п оз вюял щ и

, таки е я  п чреи тсля й  и зжтаеб

, как

, н ап ри ме ь  и х  в  оарб

ь  п ерчи слен и я)

, .

/ / zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  fastcall TMainForm: : TestEditKeyPress (TObject *Sender, char &Key) { if (IsCharAlpha(Key)  || Key =.= '*' || Key == '&') Key = 0;

, а  тькло о я с т ем Р з а у , зсе д ь  пнчиелрс ы  н е  вс е  сиымлов , кыро т е  ни мтс по уде ы  к  ву дов "*"  и   "&".  лаьОнст ы е   ис м в о л ы   ож л н д ы   бы т ь   п ч р ие н л с ы   в   ор п та е е zyxwvutsrqponmlkjihgfed   if  ан лиог чн ы м о з рб а м . Пчияелрс я  сиылмов , н е  сиьлн о  усейкавлт ь  -  пебор л  и  Backspace, н па ри ме , тжо е н с от я я   к  аниватфлы м   и с м а лов , та к   чт о   ав м  нимдо хбо е о   ыб т ь   н в ь л е и ы мт а и , чбо т ы йч а н у л с о  н е  зи патер ь  и х  ввод . А  чт о  ж е  у  н а с  с  боре ф у м   о бм н е а ? С  бореф у м   мн о б е а  т а   ж е  гн ст ару я   и о р тс я  -   чер з н ге о  вавист ь   м жо н о  лю бо й  си мвол . Н а м  ткаж е  ни мдо хбе о   ли б о  зпащре та ь  дл я  дна ог о мн э е л т а  унпевлар и я  ипсьзнлоав и е  бр е ф у а   н ме б о а  веовс , ли б о  оы тавбр ь   ж р и е о д см е р е ф уб а  обмне а  н а  пмерд т  н ила ч я  в  н е м  з па рще н ы х  си мвол . Н п аи ш е м   н цку ф и ю , каро т я  б ы   лярпево а   н тк с о е р ь   ж и р г ме о д с о   р е ф уб а   н м об е а . Ел с и   в   жи р м о е д с м   р е ф уб а   е ув т с п и р у с т   то х я   б ы   и до н   н и в а т фы л й   и с м лов , т о  фн цку и я е д уб т  взощарв т ь  false.  Елс и  ж е  жиремодс е  р е ф уб а   н м ебо а   ои т с т   и о ц лк е м  и з  ц и рф , т о н цу к ф и я  бе д у т  взщоарв т ь zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE  true. Н иж е  п рие вд н  тксе т  дна о й  фн укц и . // bo o l  {

f a s t c a l l  TM ain F orm ::C lipboardC h eck(void) if(Clipboard()- >HasFormat(CFJTEXT)) { bool ReturnFlag = true; int BufferSize = Clipboard()- >AsText.Length() + 1; char *Buffer = new char[BufferSize] ; ZeroMemory(Buffer, BufferSize); Clipboard()- >GetTextBuf(Buffer, BufferSize); for(int i = 0; i HasFormat(CF_TEXT))

return false;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC IIС нл а ч н ме б о на д ы

а  м ы  пмеярво а   н е  в  тов тске м   е т ма р о ф е  в  тов тске м  фе тмаро

, чт о  вщбо

е  ссжриетдо , т о   м ы  сзар у   и до ыв х , т о  снлач а  м ы  уна илвтсе

я  в  бре ф у е  онмбе а м   и з   н цку ф и м   ал ф г  взотарв

. Елс , взощарв

и  дна ы

е  в  бр е ф у е я zyxwvutsrqponmlkj  false.  лЕс и а  в  true.

bool ReturnFlag = true; е т За л д я  зшр еюва щ г е

м  узнеа

м  дил н о  нгов е л у

у  ттске

а  в  бр е ф у о  саиломв

е  онмеб

а  и  уилчева

м  е е  н а  еин д ц у

. Эт

о им ндо хбо е

о

.

i n t  Bu fferSize  =  C lip bo a r d ( ) - > AsT ext . L en gt h ( )  +   1; П олс о бм н е а

е   о сн а з д и

я  вмнре ог

о  бареф у

,  в  кор т

м  бе д у

т  ниьсодт ха

я   р е ж с о ид м

е   р е ф уб

а

: ch ar  *Buffer  =   new  c h a r [ Bu ffer Size]  ;

е я нл б о у

м  вмрне ы

й  бреф у

:

ZeroM emory(Buffer,  и  п омще а

м  сржеиодм

е  бре ф у

Bu ffe r Size ) ; а  омнбе

а  в  соназ д ы

C lip bo ard ( ) - > G et T ext Bu f( Bu ffer,  Д але п рм е н у

е   и оп д р х м   п о си м в о ль н ю  Buffer, з а  и ксюл чне и е

о   п о   в с ме м  з авреш аю щ ге

й  н ма

й  си мво

л  м ы  п ерояв

м  н а  свистое

if(IsCharAlpha(Buffer[i]))

:

Bu ffe r Size ) ; у   ре с жо д и м о о  нвоелг у

f o r ( i n t  i  =   0;  i  PasteFromClipboard(); }zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA II и з   р е ф уб вы ш е Я  пагл дре

Е лс ы в н п ел о я лн р е в у о г ру д н до г н р се м а о т и тс п у ю в я ла т с п д р е

м  ним до хбо е

о  вы з тав

а   в  кмоп н е т о   пс о б

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

а  пи до хр т  пкрево у  фн укц и е й  ClipboardCheck, т о  м ы м  PasteFromClipboard. Елс и  ж е н цкиу ф я  ClipboardCheck о  бре ф у а   н м б ео а  н е  пи тдо рхс . й   п о р ст й   ч а у лс й   с   ц и р ма ф .  пТер ь   р ас м ио т м о   ео и р т ч с к и й , н о  о н  нже у н   л д я  дмеон рцаст и и  ещ е о   р е ф уб а   мн о б е а  н а  кн кторес ь  си мвол . П осл е  кгел о  сп рависе т ь  с  рше не и е м  кно текр й  зачид . И ка т ,   в   TEdit  и водт ь   ю л ыб е   ис м в о ы л , кмор е  тхе , кыро т е о  аавлфи т , а  и нме о  кмор е  "а" , "е " , "i", "о " , "и " .

Все , чт о  в ы  хле от и  ртаовизл е ь  в  C++Builder, н о  н е  злан 100zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ч и то б а р О

к   оы б с и т у   вы ш е м  мн ог . П ом эт

н е р м с от и шл с о к

и  ка к

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

// zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA TestEditKeyPress  (TObject *Sender, char&Key) void  fastcall TMainForm: :  AnsiString ForbiddenChars = "aeiou"; if(ForbiddenChars.Pos(Key)) Key  = 0;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA II-

е дв лов щ п о ру е и т п ь з а вс л о н ар е и н д -о в д ом б н е а

B пнмер о н  зщпеарн ы а  в  скор т

й  ForbiddenChars м ы  пчеиярлс м  сиымлов , вов д  кыро т х  зпащре н . Елс т  п зои ц ю  дна го о  сим й  симлов , т о  мо те д  Pos  салк а  AnsiString  нрев е  ForbiddenChars. Эт о  зн чеа и е  бе д у т  оилчн т о  о т  нял у , и  ткоа й  симов л  бе д у н   п р и   е в од .  яс темРзау ,  ока т й   пс о б   к то б а р и   и мы дов х   и со лм в в   жн м о ь  и  дл я  ц ирф , и  вщбо е  дл я  чге о  ун до г о  -  о н н убое д , че м  тто , чт о  м ы  рлер мтсоа , и  я  чща е  вгес о   и ь п з л су о ю   и н ме о  эо т т  сп осб . Н о  елс и  мн е  н да о  зи патер ь   к  вдов а  сиалмов , я  иьпзлсуо ю  пне идрвы й  вы ш е  виран т  с  пчиенрлс ме . М нж о о  ан иолаг чн ы м   з ароб м   п р е и тс а ь   и  фн укц и ю  п рокве и  сржеиодмг о   р е ф уб . Втеыдялг ь   но а  бе д у т  сю ущдел и м   о б р аз м . //   , bool  fastcall TMainForm::ClipboardCheck(void) { if( C lip b o a r d ( ) - > H a sF o r m a t ( C F _ T E XT ) ) { An s i S t r i n g  F o r b i d d e n C h a r s  =   "a e i o u "; b o o l  R e t u r n F l a g  =   t r u e ; i n t  B u ffe r S i z e  =   C l i p b o a r d ( ) - > As T e xt . L e n gt h ( )  +   1; c h a r  *B u ffe r  =  new  c h a r [ B u f f e r S i z e ] ; Z ero M em o ry( Bu ffer,  B u f f e r S i z e ) ; C l i p b o a r d ( ) - > G e t T e xt B u f( B u ffe r , 

B u ffe r S iz e ) ;

f o r ( i n t  i  =   0;  i  HasFormat(CF_TEXT))

return false;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB

Д ал ь н й е ш и

е   ш га и   л д я   огт я  п р и  ввка тс е  и з  бреф у е   TEditPaste, в  очиобртак

п у р а в нл е и в и ст

//  void  {

,  обчт а   о мб н е а е  соыби т

ы   "н еп рави ль н ы е , т е  ж е я  ОпеЕШхс

: сеаоз д  кгор т

"  исмлов ы   н е   п о ла и   в   э м е лн т м   в  TActionList с zyxwvutsrqponmlkjihgfedcbaZYXWVU ан т р д о е  дйе о  п и ш ме :

, fastcall TMainForm::EditPastelExecute(TObject *Sender)

if(ClipboardCheck()) TestEdit- >PasteFromClipboard() ;zyxwvutsrqponmlkjihgfedcbaZYXWVU // е Зта

м  н а  фмро е  впсыл юав щ е е  (popup) мне ю , дна о е  мне ю  п иравес м  T estEdit о  РМирпео,   а  дл я   н год о   и з  пон тку в   н а д го о   нм е ю   н з еа ч м  сназод о е е  двийетс е  чре з  свйотс о  Action пн тку а  мне ю . П о  кимцоза тс и  вдов а  в  кнпмо е т  TEdit птчо и  вес . Н о  ткьло о  пи тчо . У  мни го х  пьзол е л т ав й  межо т  взон итк у ь  нпное и ма е  оьнлеисто о  тог , пм ечо у  он и  н е  муго т  втсве и  ря д о л и с вм в  в  эн ем л т  унелвипаря . Хш о ир м  тно м с стеаичт я  сщбоит ь л е пт авзоь л ю  о  пирчн а х н ж з т ом в с е и   а дов .  В ы   т ежом е   ти л а з в о е р ь   н а ви о м р н ф е  пл е т авзьол я   ер ч з   о т ме д MessageBox кс ал а  TApplication пнрием о  так : // void  fastcall TMainForm: : TestEditKeyPress (TObject  * Sender, char &Key) { if(Key == 'a') { Key = 0; Application- >MessageBox("Вов д  сл о в м и а  'а ' ! митсуподен " , "О! акбиш " , MB_OK  | MB_ICONERROR); р еч н ат р о с д

м  сеазод

з   в ой с т

//

Вс е , чт о  в ы  хле от и  ртаовизл е ь  в  C++Builder, н о  н е  злан 102zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

е Ч м   н бо д у е о   и  пльоез тва м  си нг олам Дл я  вы дов

нк о ы в ок з у

о   к оа т

а  зговк у

е   п н е жр у д и е ю   и м до н х б е а  н и ка , тд го о  си нг ла

?  мТе , чт о   н а  экра н  вы исводт о   г е о   з ак р ы ь в ат .  Н о   мжон о   п и др у е т х  доп лн иьент ы х  оок н  ем у  зкраы тв а  в  Win32 API сещ ву тсе т  фн цук и

и  а к к

я   о п д лн и ь е н т о

е ь   п л ьо е з т в а я ь  н е  п рсиятед . я zyxwvutsrqponmlkjihgfedcb  PlaySound. zyxwvutsrqpon

BOOL PlaySound( LPCSTR pszSound, HMODULE hmod, DWORD fdwSound нДа а т ь д у б за ыб т

я  фн укц и

я  онвбъеля ь  дна ы

е  пюлк ичдто ь  пюлк доче

н  п осл

й  фйа е  сротки

а  в  фйа л л  к  пу тк еор .

е  Mmsystem.h, та к  чт о  п ре . Ои т арб е  вн и нма и е

д  е е  и сп ольз вна и е , чт о  дна ы

й  фйа

л  джело

м  н е н

#include  а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  pszSound ое ял дпер т  пмы ериаовг й  зк ув , зн ечаи е  пр тмеар а  hmod о  NULL, елс и е бд у т  пьс ыртиоагв я  зк ув , н е  нщ я идйос ха я  в  раср у е х  илпос  fdwSoundюсин уалвт с я  фгал и  не пиосдрявз . , а  зн ечиа м  патер амр щ б оВ е  гяров , иназвьпоилс е  фн цкуи и  P laySound- ирае тма л  дл я  оьнлегод т о  рер тмос а н и я , и б о  чилс о  фо г а л в  и  уивйолс , пр и ыр ко т х е ву й тсд т  то т  и л и  и н о й г а фл , днчо та со о  виолк е . Д л я   и н о рм ф и н в а и я  п оьлез вта я   н а м   и од м н х б е о   в сп о м н и ь т , чт о   лд я   осщб не и я  о б шо и к а б х  оыб чн о  и пс отьлез у я   в о сп р и з не в д и е   н а р т с од г о   к з ву а   ч ер з   и дн ма и к  кмо п ь юр е т а  (н а  то т  счайлу , есл и  комп ьюе т р  н е  оова д уорб н   к ов з у й  коайрт ) . Дна ом у  зк ву у е в у тс е о т   в  смиен тс о м  ррест е   о п р ц ае и о н о й  смие тс ы   ос а ц и ц а и я  "В е р " . Пмоу эт , л д я  тго о   об чт ы   о с щб и т ь   п л ь ое з т в а ю   о  дощп у не о й   и м  ош и кб е  вавод , и пс оьлз вна и е н цк у фи и  PlaySound  ви ыдялг т  сю ущдел и м  образ ом . н еи З ч а

нж л о д г ом н е я

е  пр тмеар ь  рнва

о  бы т о  файл

PlaySound("В" ре д г оТ ак к  п окзан

а   и н о р м ф и вн а и

е  п льоез тва о  н и же

II void 

, NULL, SND_ALIAS); я   о б   о ш и кб

е  ввод

а   м ож е

т   бы т

ь   ли а р е з о в н а

о  так

,

.

fastcall TMainForm: :TestEditKeyPress (TObj е е   t * Sender, char&Key)

{

i f( K e y  = =   ' a ' ) Key = 0; PlaySound("Beep"

NULL, SND_ALIAS);

ц и яМ л н п у а

и  с  ммаод те

п Т ре сп о б в о ан и е

и М ц л а яу п н и ц кн фу

ь   п о ьл з е в т а а  сощб не и . Вы иребт

и  ксал ов

, ил

и  Ка

к  вт авзы

ь   п р и  вдов е   ис м в о л я  о б  ош и кба х   дов а  п оьлез вта е   и до н  и з  н и х  п о  вша ме

и   с   м а е дт о ю  п о  е е  смионльв

ь иц  фукн

ю  п о  е е  симон ьвл

а   "а "  слы у ш и

т   к ов з у я  диостпм у

у   с м р не о у т и ю

103 zyxwvuts

и  

е   п ун р е ж д и е ы   и  и юме

.  бО

,  ли

и   Ка

т  п вра

а

.zyxwvutsrqponmlkjihgfedcbaZYXWVUT

и   л а с в ко у  им ен

у  им ен

о  н а  сщ у тсе

к  ватвз ы

ь

и

В   в т с че а к е   ь н л и ре ц ы т о а х   ор т с н   к е и бл то и   VCL  тсча о   н сз аы т е в я   е е   и ь л ф е й д к ос е п н е р о иж д х с е ,  чт о   п ир вод т   к  тмуо ,  чт о   п о  ныро кте м   м о не а т м   п не о вд и е   о б ък е т в VCL- ос алк в   н е е ув тс сев то т  т р н а д с у   C+ + . К  ика т м  ммнаеот , в  чин тсоа , мнжо о  онтсе и з а р о б в ен с ы й   о пд я р к   ыв з о а   о р тк у рн о т с в   з а бы в о х   "дьлиеф й н ы х "  овсакл ,  неп дови е ь нл а о у и в т р й   н цк у и ф и  пр и  вы зво е  е е  в  тле е  каро тк урно тс , онарги че я , нымедавлк е  п р и и п с ь зн л о а в и и  мнев тгсоже о  ннаво иделса я  (д о  пнелвияо я  C+ + Builder 6 ровзаг р  всле я  н е п т со р о  о б  онарги че и , а  о  ни тмсо п уде и   п ир н ме и я  мнев тсгоже о  ннова деилс я  дл я VCL- ов)сакл . м Ко р е  тог , в  ко тпмяиол р  дл я  пкжр е д о и  VCL- к е итолб и   ы бл и  дн елвабо ы  ршса инер я , м  ршса ниер я м  он стио я  вев чт о  тжо е  н е с те  пув тс ирев я  нор миаткс и  что и с ы  C++. К  ткиа н е ди е  кгоювлеч о  свол а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC   closurezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  -  ул е тзак я  н а  мо т е д  кас л . В  оичл т е  о т  пнер тмогс у дер о о т р на д т с м  C++ л е  утзак я  н а  мо т е д  кас л ,   closure кмор е  сгмоа о  асер д а  ма до те , хнар и т  ещ е и  аер д с  эр япмлзек а  кс ал а  и  фикзсеч и е ялва птс д ер т  об с й у р у тк су р т , сщ яоу тсо ю   и з  дув х  уак й е л зт а : н а  эяпмлзек р  кс а л а  и  н а  мо т е д  кас л . Тик а м  омзоарб ,   closure пксиеч т ар и с  ятеялв я е л тз а к у м   н е  птсор о  н а  мо те д  кас л , а  н а  мо т е д  отк еъб а  (эармпзякел ) кас л . Н е   ио т с т  ьмта у д ,  чт о   п ри мне и е  улкезат я   н а  мо те д   к о тъ б е а   зк у о  орагн и чне о   ил ш ь ь о б сл а т ю   VCL- освкал .  П обнд ы е  указлие т , хот я   и  н е  чоаст , вчреюаст я   в  п роамг и к ос т й  пиркат е  и  окза ы вюа с т я  довьлн о  п олзе н ы . И юмес т я  рлиае з ц и и  таки х   к л азе у т й с  и сп ольз вна и е м  сан трд ог о   C+ + . (Аксеур каднс л  А.   С оврмен о е  п роикет ван и е  н а C+ + .  М . :  Иьлекси таз д й   о д м   "В и ль ям е" ,  2002.)  В   C+ + Builder п мраоги с т   п ч ае о л у т   эт и з жо н м в т с и  дмора , в  кв тсеча е  сзнарбоев й  кнцмпоеаис и  з а  "мьнлароы й  ущ рбе " в  та ьл зуер е пр е о т и  совимсет о и  с о  санотмрд . Д л я   и ю л р ц а ст и и   и э т х   в о з м ж н е о тс й   и с о дз а м   п ро ст й  пктеор , сощяст и й  и з  он д о й м ыр о ф . Н а  фмро у  пижо л м  птя ь  кнпо к  и е иур тка  од ер т м   и м   в йо т с о  Caption в  сив тс ев то и с  зчамди , рше не и е  кыро т х  п оп ымеаст я   п м е р о нд и ст ь р о в а . Во т  пмраог- ми н им у , куро т ю   м ы  джолн ы  вы п олн иь т : вы з о в  оыб чн о й  фн цку и и  ка к  мдо те а   в  квчасте е  очиброатк а   со бы и т я ; •   вы з о в  мдо те а   ак к  оыб чн о й  фн у кц и ; •   вы з о в  оилбпкновау ог о  (published)  до тме а   п о  ег о  си мвоьлн м у  и мне и ; •   п ч не о лу и е   и мн е и  оилбпконвау ог о   а од м т е . В  свист ео и   с  эи мт и  зчма д и   н ша а  фмро а  п ри ме т  сю ущдел и й   ви д .

Вс е , ч т о  в ы  хо те л и   р е али з о в ат ь   в  C++Builder, н 104zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и ц я л у пи н Ма

и  с  мм а до те ! Воыз

в  оки ч тбо ар

и  и м яиц кн у  ф а  си обыт

В ы зо В ы зт в а

й  Фиц кну

ь  мо те

д  ка

В ты з в а

к у он чыб

ь  мо те ти ч у ло П

 споб и  ка

к  мдо те

я  мдо те

к

м

а

ю иц Фкн у

ю

д  п о  имне ь  им

и  ка

и

я  сандтры м

в  оон чыб

о  н е  з н а л

и а

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

 3.16. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Зй апынеущ  тйвтыосе  пкето р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF

Рс.и

t Пр

и  ни жта м  сп осбм

н рт а ы д ю в у щ тс е о и

и  сам о , п р

й  вн рхе и  ни тжа

й  кн оп к и  оальнст ы м   з ач м д

е   п в а н ле о с т ы о  оилпе др

и  бе д у

т  вы з ва х   ы чт е р

н  мо те х   к н оп

д  ButtonlClick   обы чн ы к  бу д у т  вы п олн ьстя

м  сан т я  дейвист я

,

.

м  эксп реи мн и трьова . П ж д ер е   г ев с м  мо те д  и  фн укц и ю , с  кыро тм и  бе д у Д л я   о п н л е рд и я   од мт е а   п р о ст о   и з да м   о ч б р иа т к   OnClick  дл я   н врхе й   к н оп к и Button 1 и  в  снег ри овна о м  ш болан е  н рабе м  ко д  тле а   аодмте . / /   ,  , zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML void  fastcall TForml::ButtonlClick(TObject  *Sender) { S h o wM e ssa ge ( An siS t r in g( "М е то д:") + t h i s - > N a m e  +   " - > "  +   ( ( T C o m p o n e n t * ) S e n d e r ) - > N a m e ) ;

н аД ы и  сощб та п р Те

й  мо те д  п р и  вы з ов ь  и м я  кн оп ки , каро т ь  оплие др м  оыб чн у

11 void 

е  п рост я  бы л ю   н у фк ц и

о  бе д у а  н жат

т  вы ват д

ь   со бщ н е и е а   в  момне т  вы з ова ю  GlobalClick.

, чт о  вы з ва

н  мо те

.

fastcall GlobalClick(void* This, TObject «Sender)

ShowMessage(AnsiString("Ф: яицкну ") + ((TComponent*)This)- >Name + "- >" + ((TComponent*)Sender)- >Name);

д  касл

,

ци я л М н п у а

и  с  ммаод те

Ф н у кц и

и  ксал ов

я  бе д у

кн оп ки

, кора т

, ил

т  вы ват д я  бы л

и  Ка

ь  п ри з н а а  в  м омне

а  н жат

к  вт авзы

к  вы з ов т  вы з ова . У  фн цкуи

и т ме О

ь  фуиц кн

ю  л о  е е  симон ьвл

а  фн укц и

и  и  ан илоаг чн

у  им не

о  мдо те

105 zyxwvutsr

и  

у   со б щ т а

ь  и м

я

.

м  сю ущ дел ю   н о себ ь о т с , в  оилч т е  о т  ма до те , дивабосл я  ещ е  ои д н р  ти п а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  void*.  реЧ з  эо т т  п рамте р  бе д у т  пьсвта дре я  указле т ь   н а  объке т  клас . В  н ша е м  сча ул е  чре з  нг е о  бе д у т  пьс тав дер я  уле зтак ь  н а  Forml. рпе Т ь  псм епаоы т я  онтаивгзор ь  вы зо в  оыбнч о й  фнцки у и  в  кв тс еча е  оичк тобар а  сиыбот я кс И пС О  кн пок и  Button2. З ам еч ан и е . Сиыбот я  (events) рюсилзатуе я  в  C+ + Builder ов тс дерпсо м  уел тзак й  н а  мо те д тк е ъ б о а  (  closure), т о  ест ь  сыибо т я  яюсялвт я  п о  ст у и  умяле зтак и  н а  мо т е д  оа ткеъб . п а р м те

Эт

у   о п рц а е и

ю  вы п олн и

м  в  тле

е  кор ктну с

а  формы

.

// _ f a s t c a l l  TF orml::TF orml(TComponent*  Owner) :  TForm(Owner) {zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA TMethod Method; Method.Data = this; Method.Code= GlobalClick; Button2- >OnClick = *(TNotifyEvent*)&Method;zyxwvutsrqponmlkjihgfedcbaZY

// Пр п а р о ст

и  вы пнло е и , сжрие до

и  эо т т  вгес

й  опцареи о  лиш

и  знавойетсд ь  дв а  пло

а  ср у тк ур т я  -  Data и  Code, кыро т

а   TMethod. Ср у кт ур т а  довьлн е  и мюе т  ти п  void*:

о

s t r u c t  TMethod { vo id  *Code; vo id  *D ata; }; и  п о  рзарме вы ш е , ткжа п з ар о б н е в и ь л н е и р ва п т д Code -   ер да оы бс и т е  бе д у м ра г ы  мна и зхе в тс е  пор тмае иэт м  оо ткеъб

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

т   л е з к ат у ю   н а  мо те д  оа ткеъб , сщоя тсге , ка к  уж е   п омуи н олса ь  уйелкзат . ьнле отав дСел ,  ов тс дперо м   о эт й  ср у тк ур т ы   с  пмщо ь ю о  и н и ц илаз твор ь  улезкат ь  н а  мо те д  нжн уы м  зн чеа им . Дл я  эго т о е  Data зна оис т я  аре д с   тк е ъ б о а   (в  дна о м  сча ул е   эт о  фомр)а , в  пло е . П осл е  п ирнвоес я  сжриемгод о  Method сыбои т ю  Окс И пС  на д о е о  с  фн укц ийе , и  п р и  ни тжа и  н а  кн пок у  Button2  в  п орц се е  ртоба ы  п ор т  е й  в  кеча я  сыибо т й  вы зево т  фн цкуи ю  GlobalClick и  пса дер с   н а  Forml  и  аер д с  н а  отк еъб , зи швтспауи й  соыби те . В  н ша е м  сча ул е  кн пок а  Button2. Ра тьл зуе т  ртоба ы  пмарго ы  пзако н  н а  ри с . 3.17.

Вс е ,  ч т о  в ы  хо те л и  р е а л и з о в а т ь   в  C++Builder, н 106zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  с  мадоте

ицялуп наМ В ы оз

в  оки ч тбо ар

и  и  функциям

а  си обыт

о  н е  з н а л

и  ка

zyxwvuts к

и

м   Izyxwvutsrqponmlkjihgfedcb zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR *

я  сын ртад т

м  с пос б ш  

«тт^ п м ип^ ш гт а м ^

M e t h o d s p o in t ц ни у к я Ф

: Form I -  >Button2

1И Ю

OK -ю ч ц ло П

ь  им

я  дом те

а

  3.17. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Рьта зуел  ртыоаб  пмы гамор  пир  нати аж  на  вуюрто  кпону

Рс.и

Вы зо

в  мдо те

а  ка к  оыб чн о

й  фн укц и

и  вы п онл и

м  в  тле

е  очиброатк

а  кн оп к

и  п.ВЗоиП

/1 void 

fastcall TForml::Button3Click(TObject *Sender)

//вт а в з ы ь  моте д  ка к  оу н ч ы б ю   ицкнуф ю TNotifyEvent Click = &ButtonlClick; TMethod Method =  *(TMethod*)&Click; //че р з  пы в р е й  сы т р к й  темар п р  еад реп м  this typedef void (  fastcall *Func)(void*,TObject  * ) ; Func func; func = (Func)Method.Code; functthis, Sender);

н аД а

я  оцаприе

я  вы спнлотея я  в  он тоарб м  пке доря . Пнмер о й  Method  псиртаве м  к  ти п у : указле т ь : улекзат ь   н а  мод те . Зе та м  п ол е  Code п ри вод м   вы з о в   н у кф ц и , па дре в  е и   и тп а   void*, TObject*  и   вы п онл ея в  this и  Sender.  Ра ьтл зуе т   об р а т ы  п ромаг ы  мжон о  увите д ь   н а  ри с Дл я   в ы п н о л е и я  дву х   ал ь о н с т ы х   азд ч   с т е п рб у о я   й ве з о т а д с ь   о п д л н и л ье н т ы з нж ом т в с и  ршса инер го о  RTTI, кыро т е  дила ост ь  п о  нв тс делса у  о т  Delphi и в   ви д е   о д мт е в   к с ал а   TObject.   Евеснт о , э т а  доп лн илеьнт а я  и н орфмца и ьк л о т о  дл я  VCL- оксвал ,  т о  ест ь  тьолк о  те х   кслаов , кыро т е  яювял с т я  п ори нз вд ы м TObject. Н а м  пю сбруеот я   п ок а  тоьлк о  дв а   аодмте : р ж е и со д м е мп р а т е п р оа м т е

vo id  * 

f a s t c a l l  M eth odAddress(con st  S h o r t S t r i n g  &Name);

S h o r t S t r i n g 

f a s t c a l l  M ethodN ame(void  *Ad d ress) ;

я  н а  фн укц и й   в   в т с чк ае . 3.18.

ю е е

 ринлзавое

ы я  дп уонст

а и  о т

ци я л М н п у а

и  с  ммадо те

и  ксал ов

, ил и  Ка к  втавзы

ь  иц кн фу

и   с  моамедт

М н а иц ял п у Вызо

в  о б р

и   и   н у ф к ц и мя vi собсп

:

м

(x)

M et hod sp oinl 

:  1

«a д о т Ме

ыВ

107 и zyxwvutsrqponmlkjihg

у   и м не

и

а

ыБ

: Form I -  >Button3

з

1И Ю

i  о П и л чу т

Рс.и

ю  п о  е е  сиомн ьвл

OK  i ь   им

я  м еот д

а

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP

  3.18. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Рьта зуел  ртыоаб  пмы гамор  ипр  нати аж  ан  ттеьюр  кпкону

С  п ом щ ь ю   п вр о г е с  п ом щ ь ю   го р тв о вта ь  эт и   н укцф и и   м жо н р за м щ е н ы   в  скец и и Вы зо в  мод те а  п и м не и  мод те а  -   в  тел

о  и з  н и

х   жн м о о   ч и п уо т л ь  аред с  мод те а  п о  ег о  си мвоьлн м у   и м не и , ь  и мя , з н а я   раесд . П р и  эо т м   н да о   чиыуть ва , чт о   и сп ольз о   ь ол к т о  дл я   илбнопквау ы х   о в м д те , т о   тсе ь  мовдте ,  ыор кт е   published. о   и м не и   вы п нол и м   в  тле е  очиброатк а   кн оп к и  Button4,  а  пчне оули е е  очиброатк а  ButtonS. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON

 -   пчиолут

ii 

- zyxwvutsrqponmlkjihgfe

void  fastcall TForml::Button4Click(TObject  *Sender) { ShortString ProcName = "ButtonlClick"; TMethod Method = { MethodAddress(ProcName), this } ; if  (Method.Code) { TNotifyEvent Click = *(TNotifyEvent*)&Method; Click(Sender);

i I zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ____. void  fastcall TForml::Button5Click(TObject  *Sender) { TM ethod  M ethod  =   *( T M e t h o d *) & ( B u t t o n l - > O n C l i c k ) ; ShowM essage(  M et h o d N a m e( M et h o d . C o d e) ) ;

il К а к  в и нд о р т нд у о с е т

й  дл

, ко д  од сат ч н я  п о н и м ан и я

о  п р о с .

т  и  с  учеот

м  с дел а н н ы

х  в ы ш

е  р аз ъ яс н ен и

й  н е  п р есдатв ляе

т

Вс е

108

ие н ч л у о П

е   т ип ь нлов Д

о  чтса

и з   и дк со в ш бо и н р а

,  щоя тс и , и  о б  эо т и тп а  ди ска . Дл я   п ч о ен л у и GetDriveType. Дан н а

а  диск

а

о  пер д  пмо иатрсго х   в   к о м п ь ю ре т м  м ы   ще е  повриг я   ит п

а   и д ск

, чт о  в ы  хле от

и  ртаовизл е

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF , ио тс

т  зча д

.  И н ормфца и я

а  пчи туло , куро т , а  сйе ча

м   п о зн д е

UINT GetDriveType( LPCTSTR lpRootPathName // ка в е н р о и Е д н в е тс н ы и о р дк т е л д я  дикс щ а е р з в Во з н еч а и

 3.1.   кпоисС

и ен ч а З н

е

х ын  вж о змо

 зиней,ач

м   воп р

я  дироткери

о о я

ю   н уф к ц и ю , zyxwvutsr .zyxwvutsrqponmlk

я

х  вы змавещор

Ф н у кц и

DRIVE  NO ROOT DIR

Нер в еча у л с

е

я  н е  мжое н  пт у , кд го

т  оилпе дрт

С м не ы

й  ди с

DRIVE  F KE D

ки тс е Ж

й  дис

а . Тока

у  пт у

е  пи до ихрс

и  н е  смноиаврт

т  в  то м н  дис

к

к

DRIVE  REMOTE

Ди с

к  ясвтеля

я  унела д ы

CD- ROM- и сд

к

DRIVE  RAMDISK

RAM- и сд й   о в к и пт г д . Вн ше н и

й  диро кте

к

DRIVE  CDROM

е   о ге

ь  ти п  ди ск

ь  к  кнорве а  п о  нзак умо

DRIVE  REMOVABLE

,  п осл е   и о т ер ч ск й   п р ок е т  и  зиапст у н  н а  ри с .  3.19.

 GetDriveTypezyxwvutsrqponm

 фукн цийе

и П ен с яо

DRIVE  UNKNOWN

Т пе р ь

ю  о  к-мока илб ,  очнта сд с   н ч е п уо л и

о   п ч и о ьл у т

й  п арм ет , zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF  lpRootPathName,  же д т  о т  н а с  в  квчасте е  з н ачне и я  кнро уве ю ю   к аз у н о г о   и д кс а , т о   сет ь   л д я   и дкс а   "С " кнро ве й  диоркет й  е д у б т   "С :\ " , а  "D " конр ве й  диоркет й  бе д у т  "D :\ " и  т . д . т  фн цкиу я  н зеич а е  тип а  int,  кор то е  и е ял од епр т  ти п  диакс . Споис к  внжыомз х й  пе ирдв н  в  тбал . 3.1.

.албТ

о в ы тс е евл а т с

ь  и нцмроафи ю   м ж он с   р и мс а о т

а   Win32  API  п роеадсвтля т   н а м   с п ец и а л ь н у я  объвялне а   в  Winbase.h  ю усдлещ и м   о бр аз о м

я  фн укц и

и  а к к zyxwvuts

ь  в  O+Builder, н о  н е  ланз

м   (свые тм

) дикос

м

к

й  ви

,  мжон д  зщпа у не ог

о   п т а р иу с о  товгсте

ь   к   п ри а к т е о   п р и о лж н е и

.  зЗируга т

е я  пдер

-

По л уче н и

е   ти п

а   ди с к

а

109

и сД

.Рис

  3.19. Винйше оК

 вид

д   н а д го

я д о их п с р е я лв а т с дп е р

а   ьн л е д п р е  сыибо т

о   т к е по р т  в ичк отоб ар т  соб

 ртйеаоющ б

й  кнпмое

 пмы гамор

я  жесикт

м  ди с ок

м

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON

о  псор т   и   тп ч о и   н е  те убер я  OnChange ю ащывдгпе т   TDriveComboBox с о  снарицт

/  /  _  void 

к  с : [] яс теялв

т   ви р е а н м о к т

о  спикс

.  Вс е  ив йтес д а  DriveComboBox, кыро т ы   Win  3.1  р илтпа ы   в о нп м к е т



я й

.zyxwvut — —.zyxwvut

fastcall TDiskTypeForm::DriveComboBoxChange(TObject  *Sender) AnsiStringDiskName = DriveComboBox- >Text.  Substring (1, 2) +"\\"; int DriveType = GetDriveType(DiskName.c_str()); switch(DriveType) case DRIVE_UNKNOWN: DriveTypeLabel- >Caption = "Ны н т с е в з и е й  ти п  д" акси ; break; case DRIVE_NO_ROOT_DIR: DriveTypeLabel- >Caption = "П о м о н   ад у   туп и   сид к т е у в т с т  усто " ; break; case DRIVE_REMOVABLE: //DiskType = dtRemovable; DriveTypeLabel- >Caption= "Дс и к  "  +DriveComboBox- >Text +  " стеялв я  сы н е м м  д" мокси ; break; case DRIVE_FIXED: //DiskType = dtFixed; DriveTypeLabel- >Caption= "Дс и к  "  +DriveComboBox- >Text+ " стеялв я  жиктсе м  д" мокси ; break; case DRIVE_REMOTE: //DiskType = dtRemoted; DriveTypeLabel- >Caption= "Дкси " +DriveComboBox- >Text+ " стеялвя я ын   еладу м "   моксид ;

Вс е

110

, чт

о  в ы  хле от

и  ртаовизл е

ь  в  C++Builder, н о  н е  злан

и  а к к

zyxwvu

break; case DRIVE._CDROM: //DiskType = dtCdrom; DriveTypeLabel- >Caption="Дси к  "  +DriveComboBox- >Text+" стеялвя я  CD- ROM- " моксид ; break; case DRIVE_RAMDISK: //DiskType =  dtRamdisk; DriveTypeLabel- >Caption="Дси к  "  +DriveComboBox- >Text+ " стеялвя я  RAM- моксид " ; break; default: Application- >MessageBox ("Ошибк а р  п и н е л е д е р п  о и   пит а а к с  ид ! ", "В! еинамин " , М_ В О К  I MB_ICONWARNING);

ок ртС

й

AnsiString DiskName = DriveComboBox- >Text.Substring(1, 2) +  "\\";zyxwvutsrqp м ы  фе мироу

м  кнро уве В  срок т

ю  диоркет

ю  ("С :\ " ) дл

я  вы нрба ог

о  в  сп и кс

е  ди ска

. .

е

int DriveType = GetDriveType(DiskName.c_str()); н ев от с б н аи л но ыр бо д

, зниасо з  пнеч угло и  н е  оивляъб м  int.  Птсор В  п ри н ц и п

ю zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON  DriveType,  а е ла д е ор  от арпе м  switch пи доивз р м , н а  мо й  дялзвг , н да о  сзтак ь  списаб о  Microsoft, чт о ь  н ыво й  ти п  на д ы х , а  онарги ч л с ь  сыра т м

м  ти п  дкис а  в н пем ур е о  зн чеа и я . Вщбо е и  дл я  тип а  дикс а  кйо-к а д н уиб о  и н убо д . е  ещ е  име т  смы с л  з аорсит

ь  вн и ман и

е  н а  ву д

х  фмргане т

d e fa u l t : Application- >MessageBox("Окбиш а  пр и   инел дерпо "В! еинамин " , М_ В О К  | MB_ICONWARNING); break; с о К лз а и вл а п р о р Вт

ь  бы а  хшорг е й  фн емт г ар

, зеча м  эо т о  тно а  вд г е с , н а ы р о  т о к

т  кд о

, кд г о а  рю ун емдок й е  су д ел

а  в  нг е т  ои т арб

о  нд гоик т   п тиа с

х  ка од и  п и т

а  н е  джнло ь  сцкеи

а  д! акси "

. П ревы й

: ,

о  пйтер и  унелвпиар ? Вщбое , ю  default в  switchzyxwvutsrqponmlkjihgf  -   л ам о  л и  ч от.. .

ь  вн и ма е

:

case  DRIVE_NO_ROOT_DIR: DriveTypeLabel- >Caption = "П о   мон ад break;

у  т у п

и  дси

к " т е у в с т  уо

;

ине ч уо л П

е  с пис к

а  дисо к

в  в  смеист

111 zyxwvuts

е  

о Эт

т  ко д  мнжо о т иавзоь лпс ь  н е  сесво т  DRIVE_NO_ROOT_DIR н е  ткьло о ри т и  (втсме о  "С :\ " зак у н  "С :]" , н паир)ме г о тэ о  дикс а  в  см е итс е  нт е . Т о  етс ь  м ы  меж о лд я  онел и пдер я  тог , ест ь  л и  в  смеи тс нр ве

е  ссикп

е и нчл о у П Н е   с в я т ле

в  в  ссите м

е

м   и но д м т с х б е ь   ч п и о ул т ь   пс и о , VCL в  эо т м  дле е  н а м  н е  онче ь  хшор и й х  мо д те в  и  комп н ео т в  дл я  эо т й  ц лие , помэт ь   с а л м е ь о тн я , и пс ьолз у я  Windows API. е  дп уност ы х  в  смие тс е  диско в  онве тс В  Windows API з а  пчнеолу и GetLogicalDrives()  и  GetLogicalDriveStnngsQ.  To ест ь  пчи туло ь   пс и о м ув д я  сп моасби , и  я  в  дна о м  мирлеа т е  пьнле таво делс о  рр мстоа ю  об в  смие тс п оа рв с е д л т я й е в до с та

е  диковс

 пер йвы:

пС о с б Ф н у кц и ав п ел я с т р д в о з щ ра м е о г ж е а р бо т ви т с ве

си Д

ци в с ц па о р е и п н еч у п л о н ок

о   н оы б е ч н ы

к   е св  п омщ н и к

х   п оу н с д т ы . Он у  н а м  п рисетд

к  вес а  эи т

ы  дв е  фн у кц и х   и ко с д х  ма од те

х а  н е я

: в  мжон о .zyxwvutsrqpo

 GetLogicalDrivesQ

я  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA GetLogicalDrives()   воз рща е т  з н чае и е  тип а  DWORD  (он о  ж е  ini),  кор т е т   обс й  бувои т ю   к сма у  все х  диксо в  в  си емст . Т о  ест ь  мш дал и й , нвоел у й   иб т о  зн чеа и я  ожеароб т т  н ила ч е  ил и  ови тс ус т е  дикс а  "А" ,  иб т  п о д  н орме м  1 т  н ила ч е  и л и ви отс ус т е  дикс а  "В " , би т  п о д  норме м  2 -  дикс а  "С " и  т . д. , в  сто и  с  табл . 3.2.  3.2.   твоес иС

.албТ

иБ

я   м ч-е т . К  снелжаои ю т  н а м  н и ка

а  до иск

. Фнцкиу я  GetDriveType zyxwvutsrqponmlkjih м  п о  ег о  пмо яр у  нн езичюа о  в  то м  сеча ул , елс и  нерв н  пт у ь  к  кнорв е й  икедр , н о  и  в  то м  сеча ул , елс и  пт у ь  внер , а  физ ксче и м  ит авзоь лп с ь  пкр евор у  н а  DRIVE_NO_ROOT_DIR е  узнак ы й  дис к  ил и  н те .zyxwvutsrqponmlkjihgfedcbaZY

т   к   И з  тилбац ю  пн дзгоаяр

 бивто

 в  максе

к лгсеиомч

 дкисам

... 







... 

D:\  

:С \  

:В \  

ы  вин д о

, чт о  узнта ь о  "И " н а д  мйокса  нов е л у м   и б т е  г о р т о к о   с ж ри е т д о  еи нд и ц йе . Узнта ь  о  нилач и  в  смеитс ю  пн дгозяра о  "И " на д  мокса о  тмо у  ж е  пирн ц и пу . Чиолс , с  кыро т о  пе т у м  пн гдозяра о  сивг д е  межо т  бы т ь  бшьло е  26, п о  чилс у д  дл я  инеч излв я  вес х  ню увщ итлсаче

 о  н илач , взощарв не о я   и нд е и ц а

и  в  смеитс

О А Л

е  дикс а  "Д "  жнмо , п ирнме и в  опаре й  фн цкуие й  GetLogicalDrivesQ,  и  чи олмс , , а  в о   есв х   ьлан тосы х   аиб т х   -   и лн у , т о   сте ь е  дикс а  "В " мжно о  анигочла ы м  озармбо , п ир мне и в й  и  дйовк . Дикс а  "С " -   н а д  мокс а й  и  чокрев т й  и  т . д. , м  м ы  пнибот о  сы едавлк м  мкса у  дивокс , мжое т  бы т ь а  еинд ц ы  вовел . Уыавичт я  то т  фтк а , чт о  доикс в  в  сме итс е  бк у в  лигноктса о  аа ивт фл , м ы  межо м  нтпиас ь  сю щу диел й х   в  смеитс е  диковс .

Вс е

112

, чт о  в ы  хле от

и  ртоиазвл е

ь  в  C++Builder, н о  н е  злан

и  а к к

zyxwvutsrq

DWORD  D r i v e s  =  G e t L o g i c a l D r i v e s ( ) ; f o r ( i n t  i  =   0 ;  i  Bitmap- >Canvas- >Pixels[x][y] == ATransparentColor))

start = x; // нл а ч

о  рн о и г е

а  п о  глатнозиро

и

// Пе а к с у п о р м  нынчарзо пе е  тк ч о и while((х  Width) && (APicture- >Bitmap- >Canvas- >Pixels[x][у ]  != ATransparentColor)

end = x; // ке н о

ц  рноиге

а  п о  гл а т н о з и р о

и

if(!Result) Result = CreateRectRgn(start, у , end, у  + 1); else

нкО

а  нон ртад сет

й  фомр

135 zyxwvut

ы  

HRGN TempRgn  = CreateRectRgn(start,  у ,  end,  у  + 1 ) ; CombineRgn(Result,  Result,  TempRgn,  RGN_OR); DeleteObject(TempRgn); } // кено } // кено

ц   рота еп

а   if(!Result)

ц   рота еп

а   for(int у  = 0; у  Height;  y++)

return  Result; } //zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA К о д   п р о с то й Цик л

, п о э то м

у   да н

ы   ли ш

ь   к р а тк и

е  п о я с н е н и я

.

for(int у  = 0; у  Height;  y++) о бесп еч и в ае д о   п о с л е дн е В н ут р

т   и те р а ц и ю   п о   все м   ли н и я м  б и от в г о   и з о б р аж ен и я   о т  н луев о й   (с а м о й   в е р нх е й й   (с а м о й  н и ж н е й ) . и   ц и кл а  for  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA о п е р а то р ы

w h i l e ( ( х   W i d t h )  && ( AP ic t u r e - > B it m a p - > C a n va s- > P ixe ls[ х] [ у х+ + ; ищ у

т   п ер в у

ю   н еп р о з р ач н у

ю   то ч к

s t a r t  =   х ;  / /   н а ч а л з ап ом и н ае нА а л о г и ч н ы

т   е е   - х к о р ид н а у т м   образ о

у   в  б и то в о

о   реги он



!=   A T r a n s p a r e n t C o l o r ) )

м   и з о браж ен и и

, а   о п е р а то

а   п о   го р и з о н та л

. м   ф ун к ц и о н и р ую

с  то й  л и ш з рач н о й   то ч к п ерем ен н о З а те м о тл и ч н ы х

ь  р а з н и ц е й и   б и то в о г й   у.   с о з д а е тс   о т  п е р в о й

ц   реги он

, ч т о  и щ е тс о   и з о бр аж ен и

т   о п е р а то р

ы

я   област , с к л а ды в а е тс

а   п о   го ри з о н тал я  и  з а п о м и н а е тс я   в  да н н о

ь   н а   осн ов е   п о л уч е н н ы я   с  р а н е е   с о з да н н о

р

и

/ /   П р о п ус к а е м   н еп роз рачн ы е   то ч к и w h i l e ( ( x  Wi d t h )  && .  ( AP i c t u r e - > B i t m a p - > C a n va s- > P i xe l s[ x] [ у ] 

e n d  =   х ;  / /   к о н е

)

!=   AT r a n s p a r e n t C o l o r ) )

и я  к о р ид н ат й  л и н и

и  п и к с е л о в х   к о р ди н а й   о б л а с ть ю

а  н е  п ер в о й , о п р е д л я е м о

, а  п о с л е дн е

т   и   н а   с тр о к а .

й  н е п р о й   з н ач ен и е х   п и к село в

м ,

Вс е , чт о  в ы  хле от и  ртоиазвл е ь  в  C++Builder, н о  н е  злан 136zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

zyxwvut

и  а к к

if([Result) Result = CreateRectRgn(start, y, end, у  + 1); else HRGN TempRgn = CreateRectRgn(start, y, end, у  + 1) CombineRgn(Result, Result, TempRgn, RGN_OR); DeleteObject(TempRgn); Н а  чт о  се у дел

т  ои брта

ь  вн и мна и е

, та к  эт о  н а  ооп ртае

р

DeleteObject(TempRgn); н С а зо д а

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

В  пи нвтор ь н л а о т сО н ша ге н же и я

о  тгов тсе , ию ьзпщулсо ге

ч а д ре П

а  парм рето ч а П д ер

и н ср е т о г м и тс и й не рф о с т ро к у тс ок р т с ны п р ма т е ь с жта н и ме до рв П ом э т ч а п д ер

а   п а р мо т е о  в  эо т а   в   о бщ м е

м  дл ?  В де

м   п о ьл з е в т а ?  н кОда у   п р и о жл н е и м   п о ь я л е з вт а я  бе , сол т е  б ы у и

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

в  ком андо

п кр о те

и  в  перни ло ж

, п ир ожнле и е  дожлн е   вн а л г о й   г е о   о рм ф ы . П ом эт а  н а  C+ + Builder -   в  ко д  п арокет Во т  сан тр ды й  ко д  па ркоте

о  риаге ровт у   п с р и те д

ь  н а  пча дре я   оп т я ь   н з ял т г а у

у   п а р мо т е

в  д о  пневлоя и я   ы с вт я

ь   в   а свт я

. , кыро т

// #include  #pragma hdrstop USERES("Proj ectl.res");

й  созеа д

т  сдре

а  раз ркбоит

.

е -

е

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

Р с я м аз т е у эн к ар

й  с рт о к

.

х   г о жд а к

ь м ю ю е , . а я  н а о

ч а д ер П

а  пмора те

в   ом к нд а

й  срокт

и  в  пине орижл

137 zyxwvut

е  

USEFORM("Unitl.cpp",  Forml); // WINAPI WinMain(HINSTANCE,  HINSTANCE,  LPSTR, int) { try { Application- >Initialize() ; Application- >CreateForm(  classid(TForml), &Forml); Application- >Run(); }  | catch  (Exception  ^exception) { Application- >ShowException(&exception); } return 0;  , } //zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA М ы  долж н

ы  вавсти

ь  н а ш  ко

д  клиот

а  н а  п еранд ы

й  п ар м ет

р  коман д о

й  срток

и  д о  срток

и

Application- >Run(); Н о  ко д  дожле н  бы т ь  такж е  вавлест н   п о сл е  п роц ес а  снаоз ди я  вес х  форм , в  пи ротвн м е  в ы  н е  сможте е   и ь о б рс т а я   к  комп н еа т м  н а  фмроа х  в  эо т м  ке до , есл и  ва м  п он да ы  ещ е  н е  бу д у т  созна д ы . . П оп ы к т а  обрща не и я  к  н и м  вы з ове т  AccessViolation -   омрф пр е Т ь  дйавт е   п р и ом с т , чт о  Borland еявла тоспдер т   л д я  онче гилб я  н ша е й  нок гел й жи з н и   п р о ам г и в с т .  К а к  обы чн о ,  вы чеару т   л у мд о ь   Sysutls.hpp,  в   ор тк м   о бн в ъ е л я ы  ParamStr  и  ParamCount. в д е   н у фкц и , zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ч а с лу б и с ят

e xt e r n  PACKAGE  An siS t r in g  f a s t c a l l  P a r a m S t r ( in t  I n d e x) ; f a s t c a l l  P aram C oun t(void); e xt e r n  PACKAGE  i n t  Ф н у кц и ParamStr  п озеявл р тм е а  в  кн маод р т и  п армте в ын е л у м   и о н кс е д и д а С зо ор к т а д е р , кыро т н п ж ие о р л ю к ро й О т

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

Вс е

138

, чт о  в ы ле от х

р к ыт О

  3.29. Винйше н п ое м К

ок р т с

й  нкьлоис П йреи д т п о жл н е и й

ь  в  C++Builder, н о  н е  ланз

и  ка к

а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   а р пм е т о р в  кмон да й  строк и

г,* * ерПчад

.Рис

и  ртоиазвле

 вид

 фоы м р

т  TOpenDialog неж у о  н е  мше а т  отыракв т е  теп р ь   в  ко д  п кроте . Ко д  п рокет а  дожле

о ы Вх ь

 гвтосе

 кетопар н о тль к о

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

 во  вя ме р

ь  ка к цаир номт се д ы  оыбнч ы е  в  н ге ь   ю у щ д е лс и

м  озмоарб о  кдо м   о бр за м

zyxwvutsrqponmlkjihgfed

 рткоаибзр

иш л ь  фйла а  и  добваьт

н  втеыдялг

д

я  то г .

, чт о  ртоба

, идо хс

я   и з  вы сказ н ы

а  с  кн о дам

й х  вы ш

е

.

II  ttinclude  ttpragma hdrstop

; zyxwvutsrqponml

I #include  "CommandLineParametersUnit.h" USERES("CommandLineParametersProject.res") ; USEFORM("CommandLineParametersUnit.cpp",  MainForm); WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) try Application- >Initialize ( ) ,Application- >CreateForm(  classid(TMainForm), &MainForm)

ч а д ер П

а  пмора те

в  комнд а

й  срок т

и  в  пине ожирл

139 zyxwvutsr

е  

/ /   п роверяе м   к о л и ч е с тв i f( P a r a m C o u n t ( ) )

о   п е р е да н н ы

х   п а р а м е тр о

в   в  к о м а н д н о

й   с тр о к

е

i f  ( F i l e E x i s t s ( P a r a m S t r ( l )  ) ) / /   е с л и  п е р е да н н ы й  фай л  с ущ е с т в уе т M a in F o r m - > M a in M e m o - > L in e s- > L o a d F r o m F ile ( P a r a m St r ( 1) ) ; / /   кон е

ц   о п е р а то р

а   i f( P a r a m C o u n t О )

Ap p l i c a t i o n - > R u n ( ) ;

c a t c h  ( E xc e p t i o n  & e xc e p t io n ) {  izyxwvutsrqponmlkjihgfedcbaZYXWVUTSR Application- >ShowException(^exception); return 0; // Е сл о кт р е п а р м е тр о с та в и оХ ч

и  п р и л о ж е н и ю  п е р да т  ег о  и  оотбр аз и т  с о дер ж и м о й  п а р м е т а  и л и  данн ы в  MainMemo  п су ты м у  та к ж е  о б р аит ь  в а ш

н  п а р м е т

р  и  о н  п р е дс та в л я е

т  с о б й  и м я  фа й л а , т о  п р и л о ж е н и е е  ТzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI М т ео   фо р м ы . Е сл и  н е  перадн о  н и  онд о г о я  и м е н е м  фа й л а , п р и л о ж е н и е  п р о с т о  з а п су ти с я ,

е  в  к о м п о н ен т р  н е  яв л яетс . е  о с о б о

е  в н и м а н и

е  н а  в к л ю ч ен и

е  в  ко

д  фа й л

а  п р о ек т

ь  ощрба ьст е  п р а  кйо-к а ибл

о  н е

а  с тр о к

и

#include  "CommandLineParametersUnit.h" Эт

а  ткжа ме

а  срок т а  ни мдо хбе е  к  ма од те м  и  дна ы п р Те ь  зи тспау е  птк еор у  ои д н  и з  фйоал в  паркоет

а  дл я  тог м  ксал , па дер :

, чоб т ы  бы л а  воз м жн ост а  TMainForm. He з абы вай т в  ем у  в  кв тсчеа е  пр тмае

я  к  комп н е ма т

,

. о  фйа л

. Я  па дер

л

C om m an dLin eP aram etersP roject.exe  C om m andLineP aram etersU nit.h Во пТ е р

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

, з апщ у не о а   п р оа м т е . Уьс е ьтр ево тс д й  ко , зз риуаг

д  п рокет в   д рсе

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

м  (ри с з  кнмоа ду

е  чре а  пн ежиорл т   н и г ок а

. 3.30). ю  сокр т е  зс теакс п у о  и н ресат

у  я , и  в ы

и  ртоиазвл е ь  в  C++Builder, н о  н е  злна Вс е , чт о  в ы  хле от 140zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  а к к

1 й  ПzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е р ад ч а  па р м е т ро в  ком аонд й  с т р ок и

ttifndef  CommandLineParametersU nitH ((define CommandLineParametersU nitHzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ II  ((include  ((include  ((include  ((include  ((include 

Л class TMainForm: public TForm { published:  //  IDE- managed Components TMemo "MainMemo; TButton "OpenButton;

!  тыр к т О

т о аб Р

а  с  ре стор Р ан е

в Д ел и анд и м ож е ь ат д к мо н а д п ри е д в

о хыВ

д

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR

  3.30. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Вид  пинея ж о илр  с  пйеш деш о р  уонпшес  пйеач де р  патер амр

Рс.и

к ом на д о вь е

ь   :|  

е   бы л о   п о к аз н о й  сротк и  и  и х  окуобрат м  дан у ю   ем т у :  расм оит м  Windows. В ы  можте е  сп роси ьт о  в  том , чт о  в  реали з ац и  и сп ольсзет у я   о бра к т е   ас о ц и ац и и   е р б ту м   но д в р е м н о   со в ми ет , и  работ у   с  рерсот м В  кв тсчеа е  онс во ы  дл й   р о с тк и " и  ньклосе н  н а  ри с . 3.31).

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

е  фаолйв

, ка к  можн

й  аиасцо

ь   п а ч ер д я   п ч о е лн у ы м м   м ож н т   о бр ак т

у   в   п р и л о ж ен и и  ран е ь   а йф л о в у

о   с о з ат д а   п а р м еот

в  соз анд и

я  фай лов в  коман д о й   р аб о т

е  с   п олез н ы м

й  срток и ы   с   р е с то м : и   айф лову

  ткп е о р а  взоьме   ге о   (вн ше н и

м  пкоер й  ви д   мроф

и е   п а р м еот е  з н ан и ям

в и  и  раз о

ю   ас о ц и ац и

ю

в  коман д о й  ас оц и ац и

й  сротки ? и  ка к  ра з . Боле е  тог , соз ,  ат к   чт о   м ы ю   ас о ц и ац и ю  соз -

т  и з  гв ал ы  товгсте

ы  "Пр мтае

ы о   п кр о те

а

бт о а Р

а  с  рросе т

м  и  с ниоазд

е  фаойвл

й  ас оциа

и

141zyxwvutsrq

Ш  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Р е г и с т р а ци я  т и п а  файл а  в   с и с т е м е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML

Рс.и

  3.31. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Винйше  вид ы фом р  гвтосе  пкетоар  во  вя ме р  рткоаибзр zyxwvutsrqponmlkjihgfedcb

К а к   в и нд о ,  м ы   бруал и   кн оп к у   "О кт р ы ьт "  и   одбав и л и   кн оп к и   "Р еги с рт и р о в а ьт " (RegFileTypeButton) zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   и  "Омнет иь "  (UnregFileTypeButton).  П р и  ни таж и  кн пок и  "Рир гтес р о ьв а т " пи одр хс т   ир ге ац с т и я   й а ф ов л й  асоц и ца и и  в  симест , а  п р и  н ижат и  п ольз е л т ва м   кн оп к и  "Омт ен и ьт "  п рио д сх т   а лне д у и е   р ан е е   с о з ан д о й   а фй л о в й   ас о ц и а ц и и  и з  си семт ы . Н а  вкияс й  сча ул й  хчо у  п нсоя иь т , чт о  я  и ме ю  в  ви д у  п о д  сонза д и е м  фйа овл й  аосц и а ци .  П о д   рмеитн о м   "созанд и е "  я   мваезпруод ю   в ы п о нл е и е   к оа т й   п л ь е о нв а т с д и йе вд и с т , в  рта ьл зеу е  кор т й  фйал ы  онелп др ог о  н ма и  тип а  (с  укзан ы м  расш и рне и т   к ыр ь с о т в а я   н кие м   к но т е ы р м   п ри олж н е и е м   п о   вой д н ом у е м   и мн е и   йа ф л )  на тс у щ чк л е у  мы ш и  н а  фйа л е  дна ог о  тип а  в  П н оврди к е  Windows. To ест ь  н и гче о  н оебы чн ог . П р от с о  кок тар е  п нсоя е и е  дл я  п нол й  ясн оист . В  кв тс еча е  ршса ниер я  инме и  фйал а  дл я  сназоид я  ацоси а и  взоьме м  ршса ниер е  "rfte" р  ригерацст и  тип а  фай л") . В с е  фйа л ы (сокщра не и е  о т  "register file type example" -   "п ри м е в  смеитс е  с  ткиа м  ршса ниер м  джнло ы  бу д у т  ось ытркав я   нш а и м  тыво тсе м   н п и ж е ро л м . (М ы , кноче , н е  бе д у м  пмытавуирд ь   о в с й   ма р о ф т   й а во ф л . Э т о  бу д у т  оыб нч ы е   ы в о т ск е е йыал ф , птсор о  втсме о  ршса инер я  "txt" у  н и х  бе д у т  ршса ниер е  "rfte".) п Т ре ь   я   жк с а р у   о  то й   масо й   л пь е о н в т а д с и   й е в и д ст ,  вы п онл е и е  кор т й и м до н х б е о  дл я  соназ д и я  фйа олв й  асоц и ац и . П ыв р е м   шо га м   в   о э т й   л пь е о н в т а д с и   с в я т ле я   ос н а з д и е   л е з ар п д о а   с   и мн е м ".rfte"  (бе з  кваы чке , н о  оьлензябта о  с  точкй ) в  рлзае д е  ррест а   HKEY_CLASSES_ROOT.

и  ртаовизл е ь  в  C++Builder, н о  н е  злан Вс е , чт о  в ы  хле от 142zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  ка к

>й * zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Ре атдко р  ре с т р а . Ртс е

р   к в ар П

а   иВ

д   о н а рб з И

е   кв арп С

а

мИ я иТ п ине ч ан З е H a  - r28 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA \ ~Ш zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  '29 | *Я  (П о ю и  ун а ч мл о ) REG  SZ RegFileTypeApp - ф Й  - far i -

Ш

 

, RAS

Н Ш  .rat ф- fi l .reg

ф-

Ш  .res 1- Й  - rev H t i  - RGB 1- Й   RGBA

И ®   .RLE j- - {ll .rmf

HSl .ink ra- Fi .rpc

ф-

jМо

й  к^ре омтю ьп KEY_CLASSES_R00Т\

Оп т я

ь   и м д о х бн о е е  тмирен гол

п о ни а с к аи

.  rfte

 3.32.ле аздzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Пр о  ".rfte" в е  рле азд  HKEY_CLASSES_ROOT

Рс.и

т ск е

Н Й  .rqy Ш  .rsp -ф Ш  .ttf j- - ® .S3M S- C] .sam

о   тал е дс . Дле

я  рр тсе х   р ме и т н о

(бьнлавкы у й п о ни а с я  рлезад з о н б е ч аи я и  ием т  и м я е з а др л  рар тсе г о  рле зда а   р тс е во л с а   "разле д ри с . 3.32  ием

о  в  тмо х  и  схья та о   н е  всрячеат

ь   ь нш л о б е , чт о  рна ьш е , бшь

а  в  кн иа г в  тькло  повер д  агоикйнлс г о  свол а  рр)асте . Я  иьзпулсо  то й  чтса и  рар тсе , каро т  ".rfte".  В  пирн ц ип е  тмирен , н о  "плезадр о " я  иьпзлсуо а  дл я   шьлоеб й  бинчтсозувгал "  в  он од м  пнжеоил дер т  им я  "П о  унмчало и ю "

е   пн е л у и т с о .  Н чеса т   м о е и ь з п ул с о й   в   на д о м , ле т  та к  пь т я , нзда , тмриен ы , имые пьзслуо е  дл я и  внпло е  ушвяо тисмя . Онкад о  в  пн делсо е  вмер я :  рлзаые д ,  прлызаеод ,  юкл чи , вв те и   и  джа е   ьл у и а  "hive", пирнгмое я о  в  азыяончл г й р у т ареилт е  дл я ю  тмирен ы  "резад л  ррасте " и  "пезард о л  ррасте " дл я я с отежарбо т я  в  regedit ка к  оаырк т я  ппак а  н а  ри с . 3.2 ы  "рлезад " и  "плезардо " озонюбач т  он д о  и  т о  ж е   ю  дл я  озонбечаи я  днречго о  рлезад а  рокьслеи тдо , дл я   нижаезб я  чнзрме го о  унелби р пто я . И днго а  я  ещ е  иьпзлсуо ю  тмрие н  "ввьет" .  оТ , чт о  н а , я  н зыа в ю  пор тмеа м  ралезд .

бт о а Р

а  с  рросет

м  и  синаодз

е  фаойвл

й  ас оциа

и

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML 143

В  рлезад

е  ".rfte" се увщ тсе т  ои д н  пр тмае , птмеар р  п о  уначлмои ю , окрыт вюа щ е е   на д ы й  ти п  фай лов . Дна ы й  пмтрае а  з н аче и е  ег о  -   эт о  н за вн и е  тог о   лезрад а   р е сат ,  ыро тк й   оп и ы с е ва йа ф л ы  дан ог о  ти п а  п ри ложне и е . т   ос н а з д и е   ог э т о   р аз л е д а   р е са т .  П езрадо о ры В т м   ш о га м   е д уб ак ж т е  ссозатед я   в  вв те и  HKEY  CLASSES  ROOT. п р и ло ж н е и е

т с е Ре

р   кв ар П

а   Ди

;  i  •  ;  j  j  j  |  

д  о н а р б з И

е  к в а р п С

Ш - C l  latfile  Щ - Ј) RDS.DataControl Е Й   RDS.DataContml.Z50 В - Ш  RDS.DataSpace

, кыро т р   и ме

й  оеял дпер

т

т   р о к в ы тс т   ыо бр ат в ю щ е

й  тип

, е

л   "RegFileTypeApp"

а _l ] Им

я  

]Ьа (Пмоаиню чл

|   иТ ) 

п   :; 

j  ине ч ан З

REG_SZ 

е T еосват

я  ас оциа

я  Флй а

а

+  _|  RDS.DataSpace.2.50 !  Ш  (23 RDSServer.DataFactory i  Ш - Q  RDSServet.DataFactoiy.;  ;: .+  Ш   RECORDING.Recordingt j  51 Q  RelEdilCliI \   Щ - ЈИ   tegedit 1  ffliQ  tegfile

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

•   1  F-  r^azyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  iSWBlHIWffilffl i  i  j  j  | —91   Defaultlcon

M



ВС

З  shell 3

  Q  command :  |   |   t i  RegWizCtrLRegWizChl  —' !  :  !  E CJ Regw/i2Ct(I.RegWizCttl.1   ( . 

+' P i  RpmntpHRlnRt RRmntfiHFJl]

ExeN ame+  "\ "" +  " \ "%1\ "") ; p R egist ry- > C lo seK ey( ) ; и : pRegistry- > OpenKey  (" WR egF ileT ypeAppWD efaultlcon ",  t r u e ) ; p R e gist r y- > Wr it e St r in g( "",  "%SystemRoot%\ \ system32\ \ SH ELL32.dll,26"); p R egist ry- > C lo seK ey( ) ; Н а  чт о  в  эо т м  кдо е  н да о  ои траб зк а ы у ю в с т я  абсолю н т ы е , а  н ал е д м  ррсет а   м жо н о  п точраи ю   и  ва м  ркомне у д Я  са м  и пс оьлз у и нд го а  бы юав т  сбои , д а  и  в  н и оК д н ие л а  уд я  фов йла й  ацоиса UnregFileTypeButton (кн оп к и н елаи д у е   ос н а з д ы х  ран е е  ролезад

ь  вн и мна и е

, а т к  эт о  н а  от , чт о  пт у е  (пробнд е е  о б  эи т х  дву м  сп враочн и ке , п авомлеяст ю   и пс о ь л з вт а ь   б а с о лю н т ы е   ипт у е  зьастяп у . и с нитдо ха я  в ичк  отобар е  сиыбот м  "Омтен и ьт") . О н  павлеястрд в  и з  рресат .

е  он т осильент ы ь  в  он йал н ов х  п ощр  с  зкволга

и  к  ралзе д х  тип а

м  ррсет а х  пе т у й  к  раз м  с  C+ + Builder). ;  с  он т оьилсен ы м и

я  ОН кпсС т   о сб

 кн птоем й  оыб чн о

а е

pRegistry- >DeleteKey("\\.rfte"); Вс П о сл

е   ал ьо с т н ы е  вы з ов

е   л е з апр д о

и т с Зп а у н е  ртеа тоба

ы   и з   р л за е д а   "RegFileTypeApp"  юяласдт у я   а н л ои г ч н о а  DeleteKey о мте д  CloseKey, рсамзятеу , вы з ы тва ь  н е  ноад . у  и  йатзосд е  фуйвоал ю  аоцс и а ю . Чт о  в ы  вие дт ? Чт о  цос аи и  в ы тео рк е  ро тка де р  рра тсе , т о  в ы  ежинботура , чт о  в  рр тсе е  вс е л е задр я  и х  пор тмеар в  зпаинс ы . Та к  в  че м  ж е  оле д ? Дле о  в  тмо , чт о  м ы  н е  сбо й  симе ст е  о  том , чт о  бы л а  снаоз д а  н ова я  фйаовл я  асоц и ца и я  и  на д ы о   п ь чр е и т а .  С ощб и т ь  о б  эо т м  фкта е  симе ст е   м ож н о  с  п мощ ь я   он в б ъ е л я а   в   й а фл е   shlobj.h,  с о   ю ущделс и м и  SHChangeNotify,  аро тк

.

в  мдо те е  пмар го . Елс

н а з од с ы  и  зн ечиа щ ил и  оп рцае и он о и з  ррсет а   и м до н х б е ыв з о а   н у кц ф и п ар м т еи .

SHChangeNotify(SHCNE_ASSOCCHANGED,  SHCNF__PATH,  NULL,  NULL);

я ы е ю и

т об а Р

а  с  рросе т

н Да ы в  ю увщ тси ев тос вы з о в  том жол н д

м  и  синадоз

й  вы зо

е овйла  ф

в  нимдо хбо е х   ч и ак т о б р и  в  обрачоит к а   н бо ив л ь   оп и н ас и

в   н уф к ц и , чт о  ме итс о  вте дыял г

о   т ал е дс

а   ов с е  вн ов

щ б Ои

е  |  Ви

149zyxwvutsrq и

ь   п л со

е  сназоди я  фйовал й  ацос и а и  и  е е  нелаи д у я кс И пС О  кн оп к . П лсо е   го т о   а к к   в ы   в и а о б л д и й  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ е  асоц и ац и ю   и  созайд т е   е е  ещ е  ра з  -   и   биедуст ь к  фйаывол х   оц с а и й . Н а  ри с . 3.36  п зокан , ка к й  аосц и ца и .zyxwvutsrqponmlkjihgfedcbaZYXWVUT

х   ыи б о с т

а   па пк

Сво й с т в

й  ас оциа

, уалид т й  спиос ь  сназод о

и д  

ип Т

ы о л фай

ы н ри о а в с г е т З

е  тип с а шР и р ен я

]  ип Т

в   |  Аонмвт ын

е лй Фа

ы во Флй а

ы о лй  фа

ы  |

: в

айФ

л  рр сет а Т  о м  дл я  винеолвас т я  RAR о ав с е т Т я  асицоа я  Флй а а ACDSeeRGB Image ACDSee RGBA Image ACDSee RLE Image

R EV RGB 1 1

iRGBA I  RLE JRI./IF

ь,т а д з о С ине д в С

я  дл

я  рсшаинер



т и л а Уд

ь   I

я   " RFTE" —

Гг

з м И ь и не т . : zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   \ 1$ : RegisterFileTypePfoject L=ЈJ  •  1

е и н жо л и р П айФ л с а о ци лй фа

ы  с  рсша еинр я  Ф"алй

. Дл я  асицоа . 

ы  "Тесовта "Дон"ьлеоипнт

м  "RFTE"  с ютявл я  изм ени я  Ф"айл •

я м а  Флй

и  тип , вщ ю ия л

я  пмра овте , нм ит жа

а  "есоваТт

я м  н а  ес

е  кнопк

н ь л е итн о п Д

О К

Рс.и

  3.36.ине Оажр бто

 сйаон зд

 файв о йл

м нт е О

 ациоас

е

у

о

а

zyxwvutsrqponmlkjihgfedcbaZYXWVUT

 в  окен

 "Стйвсоа

 папк и"

150

Вс е

Н у   и   с ам а

я   глав н а

щ е л чк

у   н а  н е

ни е

м   " r f t e" .  Зает

о н   з агр уз и

я   в ы б р ан ы

е

е  в  б л о кн о т

ы   щ е л кн и т и

л й фа

а

й фа

ь   в  C++Builder,  н о  н е  з н а л

л  и  с о хр ан и т

ю   - -  з а п у с ти тс

у   м ыш ь

е  е г

я   на

|   Јй а Р

л  

Пр ав к

ш   те с то в ы

а  

Ви

д   И з б р ан о

е

е р Св и

с  

Сп р а в к

а

с   | p j C:\ Documents  and Settings\ tnsotoka\ Mon  д о ку

к ы\тне К

р  1и Т

а

л  



н еч о Т

ь 1й  р и с уно

и с он Р у

к JPEG

\ Щ  pic2.bmp

648 К Б

н че о Т

ь и   р и с ун о

Qp ic 2 . jp g

33 К Б

к о н у с Ри

:   цП Ц  pic3.bmp

784 К Б

о не ыч Т

Ё |  pic3.jpg

48 К Б

и с о н к Ру

5 К Б

о не ыч Т

2 К Б

и с Рн о у к

Qp ic 5 . b m p

1 031 К Б

н че о Т

И   pic5.jpg

67 К Б

к о н ус Ри

@J Рбаот ^Пр о в е р к

а  с  р е с рто

м  и  с о здани

а   ас о ц и а

и  Ф.а лй Л г

U

Ј 

/

)

о

(

а  Ч  TJ  ft   о х е р е П

и

22 К Б

к

14.04.200423:43 к

15.04.20040:22 15.04.2004 0:23

к

15.04.2004 0:30

. JPEG

15.04.2004 0:30

й  р и с уно

к

15.04.2004 0:38

. JPEG

о не ыч Т

46 К Б

иР с ун о

е  а.. .

134 К Б

о Д ку м е н

е  1

1К Б

е Т с от в а

н

14.04.2004  23:43

й  р и с уно

ь  |й  р и с уно

д  ]

08.04.2004 0:08

. JPEG

565 К Б

@p ic 6. jp g

 

1 Из м ен а  с йамлФ

448 К Б

 pic6.bmp

t

я  тпи

| Щ  pici.bmp

\  @  pic4.jpg

Q

п

Пап к

З  pic4.bmp

.

> \и ца гри тси г е Р

Щ   pici.jpg

*  ЦЩ

. Я В И



н

ме Раз

15.04.2004 0:38 к

21.04.2004 6:54

. JPEG

21.04.2004 6:54

й  ри с уно к

12.05.2004 0:27

к  JPEG

12.05.2004 0:28

т   Microsoft Word я   ас о ц и а

я   й ла Ф

15.04.2004 0:50 а

12.05.2004 0:34

I  И zyxwvut

*  1

.Рис

,

. 3.37 и  3.38)  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ п о  д в о й н о м у   щ е лчк у   н а  йл фа е

л  (ри с

J O  Project

|  Ооетвк б ъ

-

й   п р о е кт

[ p ' j  П а п к и   ;J Xy p д   -  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA "$'   -   fЈj  I  ^ П о и с к

4- 1 Нза

1 Адре

:  цШ

у

о  с  р ас ш и р е

\ 9В  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA C:\ Documents  a nd Se ttings\ tnsoioka4 M oH  д о ку м е н т ь Л Ю и ц а р ст и г е Р ш Ч а г я  тип а  Ф..

1

к

е   Win d o ws.

в   Пр о в о дн и к



и  ка

м   " r f t e"  п о   д в о й н о м

с  р а с ш и р е н и е а !ы й  фай

е   те кс т

е   п о   нем й   в ам

и  р е а л и з о в а т

о  в ы  хо те л

о   о ткр ы ти

. Со здай т

м   д в да ж

т  в   с еб

а  — э т

я   проверк

м  в  П р о в о д н и ке

,  ч т

: 15

 3.37. Файл

| 3,73М Б  

 с  ринмешрас

 "rfte" в  Пинк евд о р

[^51 Мо

й  ке тю мо ьп

р

бт о а Р

а  с  ресот

м  и  инсаодз

с от р П

е  фаовйл

, zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Ре ги с т ра ци я  т и п а  Фалй а  в  с и с т е м е о  пкрево а  сон а дзо й о в  Флй а й и ац а со .

т им н е О ь о хыВ д zyxwvutsrqponmlkjihgfedcbaZYX \zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

I Рь т авори стге

.Рис

  3.38. Отиекы р п Т ре

 фаа йл

ь  в ы  з н теа о  оцпареи но о й  ко д  апктоер

в йо с т п н ло ы З о л вг а ч н ы

и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED 151

й  ас оциа

 "Пквраео

е  дчон та со

 ациоас

й  смеи тс

о  о  фойвал ы  в  свои

л  форм ы

:

 фаа йл й  аоцс и а и

, чоб т . А  в  зшрева н и

х  пмархог

 "rfte"тмвтыосе

инме ж о иплр

ы  ипсьтзлоав е  дна го

ь  эт о  пзеолн о  мирела т

. й  фйа

// zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA #ifndef  RegisterFileTypeUnitH #define  RegisterFileTypeUnitH #include  ќinclude  «Controls.hpp> ќinclude  ќinclude  ќinclude  ќinclude  //  class TMainForm  : public TForm published: 

.

// IDE- managed  Components

е а  -

Вс е

152

, чт о  в ы  хле от

и  ртоиазвл е

ь  в  C++Builder, н о  н е  злан

и  ка к

zyxwvu

i nMemo; TMemo  * Ma  TButton  *ExitButton; TButton  *RegFileTypeButton; TButton  *UnregFileTypeButton; void  fastcall ExitButtonClick(TObject  *Sender); void  fastcall RegFileTypeButtonClick(TObject  *Sender); void  fastcall FormCreate(TObject  *Sender); void  fastcall FormDestroy(TObject  *Sender); void  fastcall UnregFileTypeButtonClick(TObject  *Sender); private:  // User  declarations TRegistry  *pRegistry; public:  // User declarations fastcall TMainForm(TComponent*  Owner);

extern PACKAGE TMainForm  *MainForm;

#endif

-р С лйаф //

:

#define NO_WIN32_LEAN_AND_MEAN #include  #include  #pragma hdrstop #include  "RegisterFileTypeUnit.h" #pragma package(smart_init) #pragma resource  "*.dfm" TMainForm  *MainForm; //  . fastcall TMainForm::TMainForm(TComponent*  Owner) : TForm(Owner)

void  fastcall TMainForm::ExitButtonClick(TObject  *Sender) { Application- >Terminate();zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML ) II

т об а Р

а  с  рросет

м  и  синаодз

v o i d  {

е  фаовйл

й  ас оциа

153 zyxwvutsrq

и  

f a s t c a l l  T M a i n F o r m : : R e g F i l e T y p e B u t t o n C l i c k ( T O b j e c t 

/ /   р е г и с тр и р уе / / о т   сло

м   в   с и с те м е   фа й л ы   с   расш и рен и е в   " r e g i s t e r  f i l e  t yp e  e xa m p le "

*S e n d e r )

м   r ft e

p R e gist r y- > O p e n K e y(  " W . r f t e " ,  t r u e )  ; / /   п ус та я   с тр о к а ,  т а к   к а к   п и ш е м   в   з н ачен и е   п о   му о л ч а н и p R e g i s t r y - > Wr i t e S t r i n g ( " " ,  "R e gF ile T yp e Ap p ") ; / /   з ап и сал и   с о де р ж и м о е   в   реест р p R e gi st r y- > C l o se K e y( ) ; p R e gist r y- > O p e n K e y( "WR e gF ile T yp e Ap p ",  t r u e ) ; p R e g i s t r y - > Wr i t e S t r i n g ( " " ,  "Т е с т о в а я   ассоц и ац и я   ф а й л а ") p R e gi st r y- > C l o se K e y( ) ;

ю

;

p R e gist r y- > O p e n K e y( "\ \ R e gF ile T yp e Ap p \ \ sh e ll\ \ o p e n \ \ c o in m a n d ",  t r u e ) ; p R e gist r y- > Wr it e S t r in g  ( "",  " \ ""  +  Application - > ExeN am e +  "\ "." +  "  \ "%1 \ "")  ; p R e gi st r y- > C l o se K e y( ) ; p R e gist r y- > O p e n K e y( "  WR e gF i le T yp e Ap p WD e fa u lt lc o n ",  t r u e )  ; p R e gi st r y- > Wr i t e S t r i n g( "",  "%System R oot%\ \ system 32\ \ SH E LL32.dll, 26"); p R e gi st r y- > C lo se K e y  () ; / /   ув е д о м л я е м   с и с те м у   о   см ен е   ас оц и ац и и   фай л а SHChangeNotify(SHCNE_ASSOCCHANGED,  SHCNF_PATH /   NULL, N U LL);zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA } //   , zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  fastcall TMainForm::FormCreate(TObject  *Sender) { pRegistry = new TRegistry(); // ссмеянидо я  с  роледза м  рртсе а  HKEY_CLASSES_ROOT pRegistry- >RootKey = HKEY_CLASSES_ROOT; pRegistry- >LazyWrite = false; } // void  fastcall TMainForm::FormDestroy(TObject  *Sender) { if(pRegistry  != NULL) delete pRegistry;

Вс е

154

, чт о  в ы  хле от

и  ртиозавле

ь  в  C++Builder, н о  н е  злан

zyxwvu

и  а к к

/ / zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

void  fastcall TMainForm: :UnregFileTypeButtonClick(TObject *Sender) { pRegistry- >DeleteKey("\\.rfte"); /  /е я л   аду м лач   нс а   с в е ледза  рдоп ы л  едзар а  RegFileTypeApp -   лд я   кйенил и NT/W2K/XP pRegistry- >DeleteKey("\\RegFileTypeApp\\shell\\open\\command"); pRegistry- >DeleteKey("  WRegFileTypeAppWshellWopen") ; pRegistry- >DeleteKey  (" WRegFileTypeAppWshell") ; pRegistry- >DeleteKey  (" WRegFileTypeAppWDefaultlcon") ; // уе я л а д м  са м  ре д з а л   RegFileTypeApp pRegistry- >DeleteKey("\\RegFileTypeApp"); // уе я л м о д е в м   метси у  о  сн е м е  аи ц а и ц о с и   лйаф а SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_PATH, NULL, NULL);zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ар м г о П

а  ртоаб и  рк тзобар

ы  с о  саенрок

и т мс о д х

е  пмарго

ь   о арн г и з а ц и й  взялг

• 

п а в о л срт я д е

•  • 

вы и од т п а в о лт я с р д е р н а со х т я Дл

и   дов

ь  воз м жн ост ь  ра ьлтзеу

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

х  с  оок т бар

о   о бр з а м  дан о

ь  скан и рован и т  скна и ровна и

ь   в о з м ж н о тс ь  и з ожрбане и

, сзняав ы а   и р фа г ч с к е о

м

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

я  и з ображне и я  в  окн е

ь  мсша би тровна и

,  зовн иеак

в   в о п ст д р е ы  ясвлетя , и   пю оуслдещ е

 сйе ча   п о ы м ае с т

я  с  вы бран ог

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

. е т я ь

;

; я  и з ображне и я

;

е  в  фйа л е  с  и сп оьлз вна и е м  JPEG- аормфт . я   п р и о лж н е и я   с о   кн с а р о е м   и с п о ль т е з у я   и н йре ф т с ,  и мюе щ и й р у ит в а е р б а у  TWAIN, — иньилраы тс ун д й  срна дт т  н а  пмнарыго й  ийесфрн т , пнзеадч р н ы й  дл я  робат ы  с о  снакю и ущр и м и  уройвматси . В  нщяо тсае е  вмер я  де вуй тс т  висре я   1.9.  www.twain.org. Тщ аук е я О  тщ уек м  сняои тс и  стрна д а  мнжо о  узнта ь  н а  оицфньлао м  сйат е zyxwvutsrqponmlkjihgfedcb и с р ев я  бы л а  выщ п уне а  в  2000 г . Сйеча с  вс те д я  пкво т г до а  к  выкс п у у  вирсе и   1.92. я   в з и а й е м о д ст

м р о а гП

а  рбоат

ы  с о  снерао к

м

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 155

Дл я  упорщ не и я  робат ы  с  ийеосфрн т м  TWAIN  рнза рбот о  дьнлов о  мн го о  бикелб от . н Од о й  и з  н и х  м ы  и  вмпосеьлзу я  дл я  пнрое тс и я  п ирнжоле я . Сов й  вы об р  она тсови м  н а EZTwain, та к  кка , в-о ывпрех , эт о  н иеалоб е  рпсанр от е н а я  и , в-о ыро хтв ,  ыкра то я  иб ик л а е о т . Тнчое , оырок т й  яс теявл я  упощр не а я  висре я  EZTwain  Classic, каро т я  ипсьзлоу с те я   ак к  D11 и  пс тевяал ос я   с   ы рк т о м   мо д к .  Озн ьмсокиат я   с  н йе , а  ткжа е   т ча к с ь  е е м ж он о  с  сйа т а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  www.dosadi.com. Пн деляос я  висре я  бкеилбто и  дс теи ура я   н ре б с я т м   1999 г . и  и ем т  н мое р  1.13. Д л я   н ч ла а   и д а зо с м   овк з т га у   п р и ол ж н е и я , сщоя тс у ю   и з  он до й  формы . Н а  форм у "н мкеиа д " кмпно ет ы zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB  TScrollBox, TToolBar, TActionList, TSavePictureDialogzyxwvutsrqponm  и  TImageList. Диад м   и м я  форм е  -   PreviewForm и  п ери м ен у м   йа ф л ы   о р мф ы   U nitl.cpp и  U nitl.h н а UPreviewForm.cpp и  UPreviewForm.h свнесто о . Н а  TScrollBox вы дакелв м  TImage и  н а  и мнерульаст о й   п на л е и  (TToolBar)   осеаз д м   птя ь  кн оп к . П осл е   ю в у щ тс е о и х ц я ни л ам п у й  с о ов  йтс м  Align у  кпмно ет в  TScrollBox, TToolBar  и  TImageList пеач уло м п р и м ен о  во т  кау т ю  ки ртна ку .

Рс.и

к е то па р

 3.39.  Винйше

 в ид

 тгвтосе

Вс е , чт о  в ы ле от х и  ртаовизл е ь  в  C++Builder, н о  н е  ланз 156zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ю лек П а ч д о н ие м  п ирмоев DLL с  онс во ы

м  бке илтбо , оп инас ы м  п ир ножле им"

у   EZTwain пов тс деро х  в  рлезад е  "П ир мне и . Дл я  го эт

о  в  фйа

м  дин маикосче й  пзк ург до е  ш нолба в  п р и  дин маикосче л  UPreviewForm.h девяолаб

и  с  ипьзасвло м  сзыявна и м  счкор т

и  ка

к

и у

# in c lu d e  "D ll. h " с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  TPreviewForm в  скце и ю  private добавлмея :

и  в  ксал

TD ll*  m_EzTwDll; -   л е з к ат у н е чл

ы  в  ксал

ь  н а  океъб т  "дин маи ксче е   TPreviewForm:

я  би"каелб от

. Тжка

е  н а

м  сп онтяб да

я  допнл ьеи ты

е

i n t  m _Scale; -   м шс а нб т ы

й  мн ожилье т

, кыро т

й  мжое

т  и з мне ьстя

е  о т  25 д о  800; zyxwvutsrqpo

я  в  дипа з он

int m_Width; int m_Height; -   и к ат с ч е ф

я  ш и р н В  фйал

а  и  вы отс

а  скна и ронва ог

о  и зжнорабе и

е  UPreviewForm.cpp зи да

м  пле др

я  (в  м м )

ы  и з мне и

. И х  ткжа

я  mJScale с  п мощ ь

е  ризамтсе

м

ю  кона тс

:

const int cMaxScale =  800; const int cMinScale =  25; В   р о т к у рн о т с " 100" чел п о  унчамло и

н  дна ы ю  дл

е   мро ф х  ксал я  снамгроеях

ы   ыв пн ло и м   з к у р зг а у   к и б е л то а  mJScale и  пировс м  зн чеа и о  фйал ) и  Filter  (ирфьлт

,  и н и ц илазе ур я  савйо тс ) кмпон е т

м  зн чеаи м  DefaultExt (ршса инер а  SaveDialog.

м е

f a s t c a U   TPreviewF orm::TPreviewF orm(TComponent*  Owner) :  TF orm (Owner),m _Scale(100),  m_EzTwPll(new  TD ll("EZ ITW32.dll")) { SaveDialog- >DefaultExt =GraphicExtension(  classid(TJPEGImage)); SaveDialog- >Filter = GraphicFilter(  classid(TJPEGImage)); е о р к тО н а  кнпмоет лД я  эи т

м  онк

х  дйвие тс 11 void 

о  дл я ниавор ртк де е  ActionList,  и и д са зо й  зи да м  очи ктобар

я  спикс м  дв а  див йтес и  сыибо т

, вы пнло и в  двойн о е  ни тжа е  мы ш ь ю я  {Action): ZoomlnAction и  ZoomOutAction. й zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP  OnExecute.

fastcall TPreviewForm::ZoomlnActionExecute(TObject *Sender) m_Scale *= 2; Image- >Height *= 2; Image- >Width  *ќ  2;

/  /

а  дйеви ст

м ар ог П

а  рбота

ы  с о  среноа к

157 zyxwvuts

м  

void  fastcall TPreviewForm::ZoomOutActionExecute(TObject  *Sender) { m_Scale /=  2; Image- >Height /=  2; Image- >Width  /=  2; } //zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е   ч и о бр а т к в   у д уб т   в ы п о нл ь с т я П р и   вы з ов Image- > Height и  Image- > Width бу д у т  ли б о  уилве ч ьсвта ли б о  умне ьш ста я  (дл я  ZoomOutAction). лД я  тог о  чбо т ы  з апирте ь  воз мжн отс ь  и пс оьлз вна и н а в к и о с рг о  озарб а  в  окня е , а  тжка е  пр и инжет со д и   м ак с и м аль н о г о  (дл я  ZoomlnAction)   з н ачне и со б ы и т й  OnUpdate.

я   о чн е

ь   п р оы с т я   в  дв я  эи т

е   е й д в ис т я а  (дл

а  раз х  дйеви ст

й  пр и  овист у т и о  (дл я  ZoomOutAction) м   о б р а ч ти к и  дл я

и  миньглоам я  м асш абт

:zyxwvutsrqponmlkji   m_Scale, zyxwvutsr я  ZoomlnAction),

а   о п е л ри д

II void  fastcall TPreviewForm::ZoomlnActionUpdate(TObject  *Sender) { ZoomInAction- >Enabled = !Image- >Picture- >Bitmap- >Empty && m_Scale Enabled = !Image- >Picture- >Bitmap- >Empty && m_Scale > cMinScale; } //  , п Т ре ь  пп иур тс м  н нвептс дор о  к  н па и нс и ю  пр уцо де ы  снка и новар и я  дмнеокау т . я  эог т о  н а м ю субпрето я  ю ущделс и е   н ц ку ф и и  и з  бикелбот и  EZTwain. Ф н у кц и я

Дл

int _stdcall TWAIN_ SelectlmageSource(HWND); н п д ер з а н ч е р о с йт в у

а  дл Ф н у кц и

а   оч и н т с к т  0, есл и  вы об

а  пчне оули р  бы

я  дан ы .

л  селанд

х  и з  сп и кс

а   TWAIN- и мытсево

х

я

HANDLE  н п д ер з а н ч е ю ву щ т с г е в е ял оп д р щ ав р е

я  вы обр

.  Воз вщра е

а  дл о   р о й в ст у т  ржеи т  улекзат

stdcall TWAIN_AcquireNative(HWND,  int); я  пнче уоли

я   и з ж нора б е и

я   в о п тс д р е

а   и  пю ущдоелс м  скна и ровна и ь   н а  отсалб

й   ч а п д ре я  и  пр

ь  пиматя

и  вы зов , сржещаод е

и  обрза е  вдгес а   ж ол е д й   н ч е п у ол ы

м   ыв з о а   и о в д л га а  в  пмаруог н  бы т ь  рвае е  дна ы

о   ок н а  сто . Вор т й  п мрате р н  0. Ф н уцк и я  воз е  в  DIB- е омртаф .

Вс е , чт о  в ы  хле от и  ртоиазвл е ь  в  C++Builder, н о  н е  злан 158zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  ка к

Ф н у кц и я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA HPALLETE  stdcall  TWAIN_ CreateDibPalette(HANDLE); че а п у о л щ не о

т  цуво те е   н у кц ф и е

ю  прилат у   о б р аз ц а . В   вкчасте е  п рамте а  пс теа рд я   з н ач е и е ,  воз ар й  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA TWAIN_AcquireNative.

Ф н у кц и я void _stdcall TWAIN_DrawDibToDC(HDC, int, int, int, int, HANDLE, int, int); еа п д р

т  дна ы е  в  фе омрта , сиовмтсе м  с  укза н ы м  ко тскне Ф н у кц и я void  stdcall TWAIN_FreeNative(HANDLE);

е а дж о б в с о

т  пь т яма Ф н у кц и я int void  п р о ве я

т  н ила ч т   и   в се

, вн е лу ы д

ю  по д  DIB- н а ыд е

,  с  пщомь

м  уростй ва

ю  фнцки у

.

и  TWAIN_AcquireNative.

stdcall TWAIN_IsAvailable(void);

е  н а  кмоп ьюре т е  TWAIN- аржнем д . ь   н бо а р   н ц ку ф и й   и з   и б к ел о т и   EZTwain,  ыро тк е  у д уб т   й в е о з н а тд с ы .  внеЕст о , сма а  би клбе от а  эи т м  н боар м  н е  орган и ч сявате . Си дазо м е   (ScanAction)  в   пс и к е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM   ActionList  и   и зда м   о ч б р иа т к   OnExecute дл я г  очиобтрак а  с  комнериа ят и   п р и вс о д т я  н и же .

Во в  п ри олжне и н ов е  дйевист н о ге . Литсн // void  fastcall TPreviewForm::ScanActionExecute(TObject  *Sender) { //  еадзос м   -ыткеъбоктребо и  л д я и ц а  зинагро и   инечулоп я  и и  не арх я  о с е р д а // иымеурит опм х  и ц к н у ф й  и  пгещюуделсо о  в о з ы в а  и х //  инелвяъбо е о  ткеъбо в  static  еавичепсебо т  "о ьтсов заронд "  иненлопыв я // прудецор ы  пи н е ч у л о я  с е р д а а static  TDllStdProcl SelectImageSource(*m_EzTwDll,"TWAIN_SelectImageSource"); static TDllStdProc2 AcquireNative(*m_EzTwDll,"TWAIN_AcquireNative"); static TDllStdProcKHPALETTE, HANDLE> CreateDibPalette(*m_EzTwDll,"TWAIN_CreateDibPalette");

static TDllStdProcV8 DrawDibToDC(*m_EzTwDll,"TWAIN_DrawDibToDC"); static  TDllStdProcVKHANDLE> FreeNative(*m_EzTwDll,"TWAIN_FreeNative"); // во з ы

в  фи ц к н у

и  дл

я  вр о б ы

а  кинчотси

а

в

м аргорП

а т о б а р

ы  с о о р е н а   кс

м  

159

// елс и   выбо р  н е  ыб л  аледс н   (нтаж а   кноп а   "Cancel") //  выполнеи е   обра тчик а   прек ащ тс я if  (!SelectlmageSource(Handle)) return; // вызо в  диалогв о   нко а   сканиров я // есл и  арбо з  н е   ыб л  возращен , выполнеи е  обратчик а  прекащ тс я if  (HANDLE BMHandle = AcquireNative(Handle,0)) { try { Graphics::TBitmap*  Bitmap =  Image- >Picture- >Bitmap; у   BITMAPINFOHEADER //получае м   ерда с  н а   струк PBITMAPINFOHEADER  Info = (PBITMAPINPOHEADER)GlobalLock(BMHandle); м ) //получае м  разме р   образ а   (в   m_Width  = 1000 * Info- >biWidth/Info~>biXPelsPerMeter; m_Height = 1000 * Info- >biHeight/Info- >biYPelsPerMeter; // заполняе м   палитр у  дл я  Bitmap Bitmap- >Palette =  CreateDibPalette(BMHandle); х // зеад м   разме ы   Bitmap в  пиксела Bitmap- >Width  = Info- >biWidth; Bitmap- >Height = Info- >biHeight; //копируе м   обра з  в  Bitmap DrawDibToDC(Bitmap- >Canvas- >Handle,0,0,Bitmap- >Width, Bitmap- >Height,BMHandle,0,0); } finally { //освобждае м   память , выделну ю  пр и  сканиров и FreeNative(BMHandle);zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML

Дл н цку ф и

// zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA я   п н е в л ар у и я  дп нуость ю  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE ScanAction и дазос м   ч и то б а р к   OnUpdate с  вы озв м , пюяревощ е й  н илач е  уна тсовел н ог о  н а  кмпроьюе т е   TWAIN- ар еж ндем . //   , void  fastcall TPreviewForm::ScanActionUpdate(TObject  *Sender) { s t a t i c  TD llStdP rocO< in t>  I sAvailable(*in _E zTwD ll,  "TWAIN _IsAvailable")  ; S c a n Ac t io n - > E n a b le d  =   I s A v a i l a b l e ( ) ; } //

Вс е

160

, чт

о  в ы ле от х

и  ртоиазвл е

ь  в  C++Builder, н о  н е  ланз

zyxwvu

и  а к к

ю  обрза а  в  фйа л е  фморта а  JPEG  и  вы дов а ь  рлиае з овта ь  фн цку и и  п о  нра осхе и а  н а  ь птчае . Дл я  эго т о  си да зо м  в  сп и кс е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO  ActionList ще е  дв а  йевдист я :zyxwvutsrqponmlkjihg  SavelmageAction  PrintAction и  н па и ш е м  очибраот к и  OnExecute дл я  н и х . Ко д  очиброатк а  дл я  S avelmageAction дочатнс о  п ротс . О н  сосит т  и з  вы з ов а  дилоа а   т п у и   и  и мне и   йа ф л ,  созна д и я   э к з м е п р ля а   с ка л а  TJPEGImage, о   нк о а  дл я  ввод я  в  нг е о г гоксиечфар о  озарб а  с ю щ пу ид елсо м  снареи хо м  озарб а  в  фйаел . оПвр е е е   (вы з о в   и д ало г в о   окн а ) вы п олн сяет я   п о с в р ет д м   вы з ов а   од м т е а   Execute а  TSavePictureDialog с  инме м  SaveDialog,  кн апвиор е  и нар сеи хо е  -  с  щомпь ю о  экзмеп рял а  ксал а  TJPEGImage. в  Assign и  SaveToFile соназ д ог о л са О т

з а р бо и гов н аи в о п р к йе д в и с т н п ом те к о д т ме

II zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  fastcall TPreviewForm: : SavelmageActionExecute (TObject  *Serider) { if(SaveDialog- >Execute()) { std::auto_ptr Jpeg(new TJPEGImage()); Jpeg- >Assign(Image- >Picture- >Bitmap); Jpeg- >SaveToFile(SaveDialog- >FileName);

// п Т ре - с а лк к т р е б о л е тз а к У

ь   з йа м е с

я   к о п с а р чт е й   и р фа г ч с к е о у   VCL вокур г   Windows- и йнерфаст ь  н а  гьолабн ы й  экз меп ля р  пчеа оул T P r in t e r *  P r i n t e r 

е З та с  пмщо ь

м  н а м  п онс тбяад ю  фн укц и

о   о б р аз ,  псобечи вюа щ ге м  с  п омщ ь

.  Дл

я  эог т

ю  фн укц и

о   и п с о еь л з у м  TPrinter, о   р боа т у   с  п ри н оем т . и  Printer.

-   P r in t e r s::P r in t e r ( ) ;

я  раз мре ы  уростй в и  GetDeviceCaps.

а   вы од

а   (в  м м )

. И х  м ы  мжое

м   ч п и о ул т

ь

i n t  PageWidth  =   G etD eviceC aps(P rin ter- > H an dle, H OR Z SI Z E ); i n t  P ageH eight  =  G etD eviceC aps(P rin ter- > H an dle, VE R TSI Z E ); лД я  тго о  чбо т ы  п р и  ыв до п с ч и е бо т ь  вы во д  н е  н а  вс ю н ав мо у  мокисфечар г у   и з нж а р о б е и ю ыб л  печ уло н  и з  DIB- н а ды х з ра м е ы  отсалб и  вы дов а  н е жме о т  бы т ь  лкге о  вы п олн е и  PageHeight, в  кыро т х  узак н иц ы   в   м и ар л т е х   и  пхиалекс н ж ом о  лк ге о  пчи туло ь  рзамре

е  н а  птаче  снар итц у  и  снаре хо  в  ми хлра мте , есл

ы

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

е  мшсаб т ю  п о  рзарме о  дл т  миорл тме

о   з а р бо а

, ни мдо хб е о у  онкас ит ор я  в  миарлтме х я  выдов а  ннж у о  утзак ь в  в  пилекс ы я  свой тс а  PageWidth . Зн а я  рзарме ы  сар т а   в   м их а р л т е ,   ыв а до .

м ра о г П

а  рбота

ы  с о  среноа к

161 zyxwvutsrq

м  

T R e c t  R e c t ( 0 , 0 ,  m _ Wid t h 

*  P r i n t e r - > P a g e W i d t h  /   P a g e Wi d t h ,

m _ H e i gh t  *  P r i n t e r - > P a g e H e i g h t  /   P a g e H e i g h t ) ;

Тп е р

ь  оалост

ь   щ о с у в и ет

ь   н п ев с т о р д н

о  са м  вы вод

.

P rin t er- > Begin D o c( ) ; P rin t er- > C an vas- > St ret ch D raw( R ect ,  I m age- > P icture- > Bitm ap) ; P rin ter- > E n dD oc() ; П н ол ы й  ли тсн г  очиобтрак а  п ери дв н  н и же . // zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA void  fastcall TPreviewForm::PrintActionExecute(TObject  *Sender) { TPrinter* Printer  =  Printers::Printer(); int PageWidth  = GetDeviceCaps(Printer- >Handle, HORZSIZE); int PageHeight  = GetDeviceCaps(Printer- >Handle,VERTSIZE); TRect Rect(0,0, m_Width  * Printer- >PageWidth  / PageWidth, m_Height  * Printer- >PageHeight  / PageHeight); Printer- >BeginDoc{); Printer- >Canvas- >StretchDraw(Rect,  Image- >Picture- >Bitmap); Printer- >EndDoc(); } //  . лД д гок и д а зо с

я  тго

о  чбо т я  гиксефчар м   л д я   и эт

а  ис тем ио б

х  дйевист

ы  онаригчт

ь  дп н утсо з  (н е т  сымлс

й  оарб х   ви й е т с д

й   ич т о б а р

ь   ы в н пл о е и а  снатря хо к   ы иб о с т

я  див йтес й  ткь ло о  тме и  ммианеот , ь  ил и  витыдов ь  н а  птач е ь  по тс у й  ли)ст , я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP   OnUpdate. Ко д  ег о  е д у б т   и н док а в  дл я

.

// void 

fastcall TPreviewForm::ActionUpdate(TObject  *Sender)

((TAction*)Sender)- >Enabled  =  !Image- >Picture- >Bitmap- >Empty; // п р Те ю в у щ тс е и п н а ил е

6- 1534

ь  оосла т

ь  втсев м   й е в и д ст м я

. И  пмар го

у  мнжо

и  в  TImageList знар е е  пнарбо ды , а  сма и  дйевист я  соп авист о  ктмпоаивлр ь  и  зь ткасп у

е  инок и ь   с  кн оп мка .

, свиаоптс и  н а  и нмерулаьст о

ь  и х  сто

й

Вс е , чт о  в ы  хле от и  ртиозавле ь  в  C++Builder, н о  н е  злна 162zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Drag'n'Drop  в н у т р - ум Пе ч о т

оч н т а с д н ы бо с П а дв р с мы ш ь пс и к и

и  э л е м е н т

о  дл я  мни го

а  упра в л е н и

и  ка

к

я

х  по митарс го

в  в  C+ + Builder. и  н е  ткьло о  дл я  ничнаю щ их , а  и  дл я о   оп ы н т ы х  рчзаиобрткв , drag'n'drop яс твеля я  "больн ы м  воп рос м " , н рсмеот я а  т о  чт о  в  Borland слае д и  дочнат с о  дл я  тог , чоб т ы  рлаие з ц и я  drag'n'drop н е  вы з лав а х  тйне дтсо ур . Те м  н е  мне е  тн тдсо ур и   ь ст е , а  ра з  тка , т о  н а м  пс тире д я  и х  пь тело д р . , н а   мо й   двзялг ,  п они тя е   "drag'n'drop"  очнат сд о   ш и ро к , и   я   ялрзеа д ю   о бт ра у  drag'n'drop н а  тр и  н ап рвнле и я . П ре в о :  drag'n'drop  рвнт у и   н до г о   э м ел н т а   п у р а в л не и я . Н ап ри ме , пскаитревн и е ю  энмоелт в  врнт у и  он гдо о  спи кс а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML  (TListBox),  узол в  двер а  в  пале др х  днивоердг о а  (TTreeView)  и  п орчи е  понб д ы е  дйевист я  я  он т ош у  к  првоме у  ви д у  drag'n'drop. К о  вмор т у   ви д у   drag'n'drop я  он тош у  паскриет вн и е  мы ш ь ю  эмлен о т в  упнверла и я  и х  че тса й  в  плае др х   н до й  фмро ы  (ри с . 3.40).

я  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH к  drag'n'cfcop в то р о г о  в и д а

,-С * Илюсрцати з ер Л аро тВ ь т ер Т а трев те Ч а тяП

я  сртоак я п о ср т я  скор т я  с г р о

U   aBoxi а  LtsiBoxi а  lisiBoxi я  скор т е  LislBoxl ы  Us Lin es- > LoadF rom F ile(F ileN am e); e l se  •   -  , M e ssa ge D lg( "К   сожален и ю ,  д а н н ы й   ти п   фай ло в   н е   п о ддер ж и в аетс я Хп п р и ло ж ен и ем ." ,  m t l n f o r m a t i o n ,  T M s g D l g B u t t o n s ( )  «  mbOK,  0 ) ;

ки К т ар

й  озб о

р  з авреш не

, н и ж

е  п ери дв

н  п онл ы

й  ин доы хс

й  ко

д о вгсте

о   п р а о ке т

.

ш е Вн и

173 zyxwvut

й   Drag'n'Drop 

й  фйа

о З вл ч гн а ы

л  формы

:

// zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   \ zyxwvutsrqponmlkjihgfedcbaZY #ifndef  DragDrop3UnitH #define  DragDrop3UnitH // ttinclude  #include  #include  #include  #include  , //  class TMainForm  : public TForm { published:  // IDE- managed  Components TRichEdit  *RichEdit; TButton  *ExitButton; void  fastcall FormCreate(TObject  *Sender); void  fastcall ExitButtonClick(TObject  *Sender); private:  // User  declarations TWndMethod  OldWindowProc; void  fastcall NewWindowProc(Messages::TMessage  ^Message); public:  // User  declarations fastcall TMainForm(TComponent*  Owner); }; /



ќ

extern  PACKAGE TMainForm  *MainForm; . //  #endif С р- й а ф

л  формы

:

// #include  #include  #pragma  hdrstop #include  "DragDrop3Unit.h" // tpragma  package(smart_init) #pragma resource  "*.dfm" TMainForm  *MainForm; / / fastcall TMainForm::TMainForm(TComponent*  Owner) :  TForm(Owner)

Вс е , чт о  в ы  хле от и  ртаовизл е ь  в  C++Builder, н о  н е  злан 174zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  ка к

zyxwvuts

// void  fastcall TMainForm::FormCreate(TObject  *Sender) { DragAcceptFiles(RichEdit- >Handle,  true); OldWindowProc  = RichEdit- >WindowProc; RichEdit- >WindowProc  = NewWindowProc; // 



,

void  fastcall TMainForm::NewWindowProc(Messages::TMessage  &Message) { if(Message.Msg == WM_DROPFILES) { HDROP hDrop; // срутк а   с  иеицамрофн й   о  фалй х int BufferSize; // ремза р  брефу а  дл я  инем и  флйа а char *FileName; // бефу р  дл я  инем и  флйа а int FilesCount; // квтсечило о  пынещмр х  фолйа в AnsiString FileExt; // ринершса е  инем и  флйа а hDrop = HANDLE(Message.WParam); // пеачуло м  квтсечило о  пынещмр х  фолйа в FilesCount = DragQueryFile(hDrop,  OxFFFFFFFF, NULL, 0) ; if(FilesCount Items- >Items[4])- >Action = (TContainedAction*)Action;

// н Да ы

к  бе д у т  пиратвс ь  DropDown- нк по е  нпделос е  вы знав о е  пьлзо е  и з  тхе , кыор т е  п чреи нсл ы  в  н и спюа д щ е м  м не ю . и д аД м   н ьшло б е й  кирнамое т й  к  тктсе у   ч и ка т о б р .  чи кРтозбар и  VCL  п о  кйок-а т о п он т я й  тькло о  и м  пир ч н е  онарги ч л и  ду отс п   к  свйотс у  Items, кор т е  хнар и т  ккело ц и ю   TActionClientltem,  израмтсе в   т э о   в йо с т о   в  protected- кесци .  Пмо тэ у   л д я   п у о ст д а к  н ме у  н а м  псибонт да я  пниорздвы й  пчно ты жумоер й  ксал , у  кгор то о  эт о  свйо тс о  бе д у т ыкр о т . Дела е  пи дорв м  ActionToolBar к  эмо т у  ксал у  и  пеач уло м  ду отс п  к  сув йтос . Н ша а нк п о а  ацос и навор а  с  ActionClientltem  с  иоскне д м  4;  лсе и  плеьозтав ь   ыв з а л  он д о  и з ю ущ д е и л с х   й е в и д ст :  RichEditAlignLeftl,  RichEditAlignRightl,  RichEditAlignCenterl, п и р ва с е м  улезкат ь  эт о  Дей вист е  свой ст у  Action.

е л т ав

й  очи тобар

м  Дей вист

Вс е , чт о  в ы  хле от и  ртиозавле ь  в  C++Builder, н о  н е  ланз 184zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

З



Рс.и

Г 

C e n t e r 

Г

zyxwvutsrq

и  а к к

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Ш .  Align Left  *

  Center

• s: Center Г

S  Align Left

S  Align Left

В   Align Left

Я   Align Right

Ш



  Align Right

Г  

C e n t e r

  Align Right zyxwvutsrqponm

  3.51. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Рьта ызуел  ртыоаб  оиткчоабр  ActionManagerlExecute

Дл я  тго о  чобт ы  п рита д ь  н ша ме у  п ри олжне и ю  з каон че н ы ю  и  и нмеруаслтьн о й   п а н леи н и ра т в с ь   вн ш е н и й  ви д  мне н и т ь  дм ву я   сп о б ам и . П рвые й  -   остаз д ь   п о р д е лн о е TCustomizeActionBars, вы арб в  ег о  и з  псик а  сн атрыд х  двйиетс т аво т с ь  кнпмо е т  TCustomizeDlg.  Дл я  го эт о  нжн у о  стазод ь л д я  н ге о  очиброат к  ти п а :

//  

й  ви д . Э т   ан с т р д о  ещ

, добави у  зча д

м  воз мжн отс у   м жо н о  вы п ло е  Дей вист е  тип . Вор т й  сп ос б  -  зйе да е  и до н  Action  и  оилте дпр

ь а ь

\ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC

void 

fastcall TForml::CustomizeDialogExecute(TObject *Sender)

CustomizeDlgl- >Show();zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK

IIB  таьлзеру и д з йа н - ж р е и м а оч н т а ос д е о п ц ар е и н м ар е ме о дн р и ст о в а

и  и и  тип

В  нщоя тса е ок м  п мраогн ог п р о с не т и я и  н а  ря д  оьлен д ыт п ы р о ст м . К а К   н и м  он тс оя п ри н а е т , окброат О нс о в е  ж

е   м ы  пчи луо и   о в ы к е ст й   о р ак т д е ,  и псьлозу я   в  осн овн о . Н о  довльн о  част о   и с п о л ь з в ан и е  тоьлк о  воз м жн еост о  дл я  вы п онл е и я  п авнлеост о й  зачид , и  тс те рбу я   в ы п о лн и т  в  ржеи м е  ран й тма . К  сожнале и ю , работ а  с  М нежрод м а  ActionMainMenuBar  и  ActionToolBar  н е  сол т ь   п р о з ча н а ь  е е  н а  н ьолбше о м  п ри м е . е  врме я  вви тс дел е   о лс ж н у е и я  зач д , кыор т е  сс автя о  оспбе чн и я , ш и кор е  расп росант е и е  пчи уол л  п ри ложне и й . В  эо т м  счалу е   п р и ло ж н е и е  раз би свате я  н а х   м ж е ы а у р гп о д х   й е л у м од .  Осн ов й  мл у до ь   в ы п о л н с те я к  правило , ег о  фн укц и он а л  оранг и ч свтае я   м и н и м ль а н ы м я   п й е р о ст ш и е   рс е в и н ы е   н у к фц и и   ощ б г е о   н з а н ч ае и а  и  рн жуила ровн и е  воз мжн ы х  ош и бок , п рокве е  н аз н ачне и е  гвнал ог о  мл у до я  -  пз кругод а  мел у до й  и  вы з о

м  воз мжн тос и й  диз йа н - жреи м а ь  ан иолгачн ы е й  и  с  конйе т . П оп ы маест я   п ро -

 дейвист

я  п ре

д  рзачирбот

  ь л н у ы м од  осн овн о

-

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

а  вреси он ост в  фн укц и

п ь о .

:  на тс овку

а

и  и  т . д . й  и з  ни х  п о

бт о а Р

а  с  ком апонет

и  Action M anager и  ActionMainMenuBar в  дйинза

е  и  рйма тн

185 zyxwvutsr

е  

р бе о т в а н и ю  п оьлзяе вта . П ринкдал о й  фн укц и он а л  рзамще юа т  свнесто о  в  пург до ж а ме ы х   х я л у м од .  окТа е  п орстен и е  п ри олжне и я  п оз веля т  дочнат с о  лкге о  н щра и вта ь н у ф к ц и он а л  п о  мре е  ни одмтсхбе , обсеп чи т ь   п о р ст й  мна хие з м  смне ы  врисе й  и  раз р г а н и ч ен и я  дп уост а  к  фн уцк и но ула , а  ткжа е  кн тромф о  онарг и з овта ь  разкрбот у  п ри олже н и я  п р и  работ е  в  комнае д . о е П у пб о р м  ста зод ь  пйеш тсор и й  пир ме р  пнбог д о  пнижерол я , щяо итс й  и з  онс во г и  он д ог о  пмжеога ур од о   ял у м од . Си даоз м  н овы й  п роке т  с  он до й  гвнал о й  форм й . В н ов ь н а оз с д ы й  пкоер т  пиернм у м  в zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF  AppConsole. Эт о е д  у б т  н ша е  гнвало е  п ирнжоле . Ф мро у п р еи м н е у м  в zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  MainForm,  а  фйа л  фмро ы  -  в  UmainForm.cpp. Свой тс у  фмро ы  FormStyle п и р во с м  зинеач  fsMDIForm,  а  н а  сма у   мро ф у  пи тсмое м  кмпон ет ы  ApplicationEvents, ActionManager  и  ActionMainMenuBar.   В  М нже д р  дйевист й   (ActionManager)   обдави м са н т д р н т о е   е й д в с ти е   TFileExit.  П чолену у ю   п р и  эо т м   огреикат ю   File  "п ер н ес м " ан  ActionMainMenuBar.  В   таьлзеру е   н а   ActionMainMenuBar   п воияс т я   м не ю   File с  он д и м   нп у о к т м   Exit.  Н а  эо т м   н або р   в с е х   е т х   о п р цае и й ,  орыкт е   м ож н о  вы п олн и ьт , и сп о ь л з у я  п ри н ц и п  "drag- and- drop", з акон чи лся . Длаьш е  тьолк о  рчн у о е  киодрвна и е .

П ж д ер е   в сг е о   п о з и ба т м с я  о б  окбраот е   о ш и бо к , кыор т е   м у ог т   о к ь за с т я  в  н аш е м п р и ло ж н е и . Дл я  эог т о  дочатнс о   з ат д ь   ч о и бр а т к  дл я  собы и т я   OnException комп нет а  ApplicationEvents1. В  боел е  сожлн м  счеа лу ,  и псьлозу я  эт о  собы и те , можн о  выа д тва ь  довльн о  п онл у ю  и н ормфца и ю  о б  ош и бке , з па и сы вта ь  е е  в  жрн уа л  и  ажде , н па ри ме , о п в щ е та ь   р з а ч и бо т к а  п о  эрокнлет о й  п очт е  о  п рои з ш де й  ош и бке . М ы  ж е  п рост о о р га н и ч м с я   вы о д м   и н о р мф ц а и ,  и пс ьолз у я   н у к цф и ю   ShowException.  В   таьлзреу е н а ш  очбриаот к  бе д у т  выте дляг ь   ю у щ д е лс и м   о б р за м .zyxwvutsrqponmlkjihgfedcbaZYXWVUT

// void 

fa st c a l l  TMainForm: :Application E ven tslE xception (T O bject  *Sender, E xcep t io n  *E)

Ap p licat io n - > Sh o wE xcep t io n ( E ) ;

// И н о р ф м ца и м ы  бе д у

м  држета

ю   о  фн укц ихя ь  в  фйа л

, кыор т е  должн е  Modules.ini в  сю у щдле

[Н ов е  Окн о ] М п е и = До п . фн укц и и Module= Module.dll Function= NewChildForm

ы   ь с з кт а п у

я   и з  пмжеыа руг од м   ви е д

.

х   й е л у м од

,

Вс е

186 д Г е   и м я   к це с и и  Function  юаз д к и бе л то и   и  и м п р Те ь   лиар е з у й алф а   и  форми вна и

, чт о  в ы  хле от

и  ртаовизл е

ь  в  C++Builder, н о  н е  злан

и  ка к

zyxwvuts

и   -   н и а м н е ова и я   нп у кт а   и р т в кеь л а н о г о   м не ю .  Кюл ч и   Menu,  Module т   н иа м н е о в а и е   о р г и з о н льа т о г о   м ен ю ,  н иа мне ова и е   и д н м а и к чс о е й я  фн укц и и   в не ст о о . м   н у кц ф и ю  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI LoadlniFile,   аро тк я   е д уб т   чс и ы т в а ь   и н ом р ц а ф и ю   и з я   м не ю .  Р шса и ровфк а   док а  дан а  в   ком не раи тхя .

// zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   t zyxwvutsrqponmlkjihgfedcbaZ void 

fastcall TMainForm::LoadlniFile(void)

//ои т ы р к т е  ini- л й а ф а std: :auto_ptr IniFile (newTIniFile (GetCurrentDir () + "\\" + clniFileName)) ; // синадзо е  ск с и п а  скорт , в  кор то м  буд т  хсьтинар я  ни н а в о н е м и а я //си ц к е й std::auto_ptr  SectionList(new TStringList()); //си н а в ы т и ч е  ие м н  си ц к е й IniFile- >ReadSections(SectionList.get()); for(int i = 0; i Count; i++ ) // си н а в ы т и ч е  нинавонемиа я  пткну а  гг о н в а л о  мне ю AnsiString Menu = IniFile- >ReadString(SectionList- >Strings[i], cMenu, EmptyStr); // финаворим о е  мне ю if  (!Menu.IsEmpty()) CreateMenu(Menu, SectionList- >Strings[i]);

в ст нм е вс т л ек за т у вн о п р и вс а е

Н вн е п ст о д р о   н п ук т   нм е ю   с о рмт ф е и у я  с  п омщ ь ю   н у кц ф и и   CreateMenu.   В  кеча е  п роамте в  фн укц и я   ч е па оу л т  дв е   рсотки :  н аи мне ован и е   {Caption)   орги з он льа т ог о ю   и  н иа мне ова и е   н п у кт а   м не ю .  Ф н укц и я   с о з ае д т  экзмеп ял р   Action,  зпа онл ея т   в о йс а  Caption, Categoryю свущтс еои м и  з н аче и мя ,  собы и т ю  OnExecute  п ри вса е т ь   н а   о мт е д  RunFunction.  Зе та м   с   п ом щ ь ю   н у кц ф и и   CreateMenuItetn  чеап уол т ь   он с а з д ы й   э к з м е п ля р   с ка л а   TActionClientltem  и  свой тс у  Action эог т о   э к з м еп р я л а т   кл е за т у ь zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  па  Action. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF I  I

void 

fastcall TMainForm::CreateMenu(const AnsiString& HMenuName, const AnsiString&r VMenuName)

{ TAction* Action = new TAction(this);

бт о а Р

а  с  кома птоне

и  ActionManager и  ActionMainMenuBar в  дйинза

е  и  рмй а тн а

е  

187 zyxwvut

Action- >Caption =VMenuName; Action- >Category =  HMenuName; Action- >OnExecute  =  RunFunction; TActionClientltem* Clientltem = CreateMenuItem(HMenuName); ClientItem- >Action = Action;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

I  I

с а лк

В  зч а д а у  фн цкиу и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  CreateClientltem, ка к  се у дел т  и з  н нзав и я , ви до х т  сн аи здо е  эрмпзякел а а  TActionClientltem. Тск е т  эо т й  фн цкуи и  рщзмеа н  н и же . /  / 

.

TActionClientltem* TMainPorm: :CreateClientItem(const AnsiString& Name) { class TProxyActionBar  : public TCustomActionBar { public: property Items; using TCustomActionBar::CreateControl; TProxyActionBar* MenuBar =  (TProxyActionBar*)ActionMainMenuBarl; TActionClientltem*  Item =  FindMenu(MenuBar- >Items,  Name); if  (Item) { Item = Item- >Items- >Add(); } else { Item = MenuBar- >Items- >Add()  ; Item- >Caption = Name; Item- >Items- >Add(); MenuBar- >CreateControl(Item); Item = (TActionClientltem*)Item- >Items- >Items[0]; } r e t u r n  I t ern ; }

Вс е , чт о  в ы  хле от и  ртоиазвл е ь  в  C++Builder, н о  н е  ланз 188zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

П дж е р

е  вгес

и т смо и  пмо тэ ог т пн у т

и  VCL, п о  есв й  ви д ь  мн е ю  в  рйнамет , и  н е ивла  птсо дер и  н ика х  стс дер в  доя  вынплоеи я  эо т й  зчиа д . Бело е о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Items кнпомте а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG  TActionMainMenuBar  рщ нзема о  в  сцкеи и  protected  и  сонд е  нн ев гтос д ерпсо о  инаьзвполси я . лД я  тго о  чбо т ы  пичт уло ь  ду отс п  к  нум е , а  ткжа е и  CreateControl,   м ы  вилсаьзвпо ь  нчоы т уж емопр м   о с а лк м   TProxyActionBar,  св йотс о  и  мо т е д  н елв яъбо ы   ак к  public.  П лсо е  пн еидрв я  ActionMainMenuBar у   м ы  пичл у о и   у т со д п   к  иым до х бно е м   л д я   ы в н пл о е и я   ч а дз и   м н а е эл т . у  эо т т  ксал с  не диг , кмор е  эо т й  фн цкуи , н е наво зйетс да , впнло е  лигочн ы м  ви д яыл г т е  ег о  в  тле е  фн цкиу . Дела е   с  пщом ь ю  фн цкуи и  FindMenu с и тподрзв я  пиос к а  TActionClientltem,  кы р о т о й е ув тс  сев то т  пн тку у  гньлиграоз т о  мне ю , в ор  кто е а  вакв тс . Ел с и  тока й  пн ку т  гьнирлозаг т о  мне ю т е  сув щтс еу , то к  ег о  кло в с дтеялвабо я  он доерч й  пн пку до т  с  пщмо ь ю  мдо т е а  Add()  и ле утзак ь  н а й  эмпзякел р  TActionClientltem  сщазтрове я  в в ктс еча е  ра т ьл зуе .

, н е  он еч у  пксиечт ар , св тйосв о  дл

я к   н ц ки у ф в  кор то м к  эмо т у   с а лк кь л о П с н еи л в я ъ б о р я пм л з е к э е д уб т  пн е диозвр цк е ли и  по н ткпу до н е л в аы б о д

о  ои тме ь  риылачвтс

м ю сщу ид ел

й  мн етмо

, чт о  к- ум о т

Н мн е г о о   ж он л с е е   ле д о   ио т с бо н т пк у а  гьнилроагз т о  мн е ю  ещ с  пщом ь ю  мдо т е а  Add  кцки е л о Captionс т еиапврс я  нниаемво н п у к до т  м не ю . Н о  дле о   и эт м TActionClientltem кмоп н е т TStandardMenuButton,  и  пкь ло с н еи з ч а е  св тйосв у  Caption и  ы б н и и  клорн т а  н иак к  н е яс тзяа р о н ь о л е ит д н у е  пн аи здос ер е л ко р н то с  ActionMainMenuBar  в  рйам-н т ижмер

. Ричк тобазр

и  а к к

о  пеирд

и  бке итлоб у   т а в и мо р ф

т  в  гвол

т   в   о т м  сеча ул ,  лсе и   мпзякэел р   TActionClientltem  л д я е  н е  бы л  сназод . В о тк а м  сча ул е  о н ьнл пеиратв дер о  сс т еа здо я и  I tems кнпмо ет а  ActionMainMenuBar,  зе та м  ег о в  тйосв у е  горизон атль н о г н мею , а  у ж  зе та м  к  н ме у  дс теялвабо я  н е  з акн чи свяате . Он д овмрен о  с  созан д и е м  экзмеп рял а   ActionMenuBar   созеа д т   м е у   ю в у ст щ е о и й   н ок р т л у  ег о  сна изод е  пил до ихср о  д о  тог ,  ка к  ыб л о  пн еоиврс о л  делвабо н  пнтк пу до , эт и  ин земи я  н а  нвш е н е м  вид е  и  пе д во . Он ид м  и з нж озмыв х  рш ен и й  эо т й  пмелбор ы с ятеялв я  пир а  с  пщомь ю д мо т е а  CreateContol. Во т  и  св е о тн к о сит тоб а р ы . Аингчола о  пи до хиоср т  ртоба а  с  ActionToolBar.

лЕс и  в  п орц се е  ртоба ы  взон иеак т  нитмсод хбе ь   ю л к вн е ч и я  сназод г о  дин мкасче и Дй е в и ст я  (TAction)  в  М нже д р  дйевист й  (ActionManager),  т о  эт а  оп реац и я  вы п олнс тея я п в о с т р де м   п р и с в о ен и я   к а з леу т я   н а  М не жд р   е й д в с ти й   (ActionManager)  свой ст у ActionList. zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Action- >ActionList = ActionManagerl; Дл о р и г з о н ьл а т о г и м еы п у р т о

я   п н ол т

ы  ки нтра о  мне х   н уфкц и й

ы  оалост ь   ат д ь   к с е т ю  FindMenu, и  фн укц и . Ко д  п рвое й  фн укц и

т   н у фкц и и  зз рагку и  п окза

, ощ сувюляте щ е и  ди н ам и чсеки н  н и же

й   п ои с х  би блеот

к  пн укт к  и  вы з ов

.

// TAction C lien tltem *  fastcallTM ain F orm :  :F inclM enu(TActionClients* I tem s, c o n st  An siStrin g&  Name)

а а

и не ч у ол П

е  списк

а  файол

в  в о кгла т

189 zyxwvut

е  

for(int i = 0; i Count; i++) { TAationClientltem* Item = (TActionClientltem*)Items- >Items[i] ; if  (Item- >Caption == Name) { return Item;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED

r e t u r n  NULL;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH

} // О н   о ч н ат с д

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

и м п е ы о рт у жу

е   о п и н са ы м и   ы ро т к

з о в на и

а я -

// void  fastcall TMainForm::RunFunction(TObject*  Sender) { TAction* Action = (TAction*)Sender,std::auto_jptrIniFile(new TIniFile(GetCurrentDir() + "\\" + clniFileName)); AnsiString ModuleName = IniFile- >ReadString(Action- >Caption, cModule, EmptyStr); AnsiString FunctionName = IniFile- >ReadString(Action- >Caption, cFunction, EmptyStr); Dll::TDll Dll(ModuleName.c_str(), false); Dll::TDllProcV0 Proc(Dll, FunctionName.c_str()); Proc(); } //   , Во

т  в  пирн ц и п

е  и  евс

е и н ч л оу П

е  сиспк нь л о в Д

й ав т Д н аз в н и м я р у кт р с

о  чтса

о  взноеиак

. П ниржоел

,  ор ток

а  файло т  т сиом д х бно е е  инме тур с

е   и н д м иа к с ч е

в  в  катлго

и   е м и ру о ф

т  сво

е  мне ю

, гов т

.

е

ь  пичт у ло ь  споис к  фойла в  в -м о кк а т о  и з во г кл а т а . е  рирмсота ,  ика ы  н а м  пеялва тсо дер т  VCL л д я  нша е й  зчиа д . А  и мнеру тс ы  пиркатчсе и   св е  т е  же , с о  вмер н   DOS ещ е , с  п нроев ы м и   м вн ре м :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   FindFirst, FindNext, FindClose.  И  в   оп днл е и е   к   н и м  впсьленомтаг я а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  TSearchRec.

Все , чт о  в ы  хле от и  ртаовизл е ь  в  C++Builder, н о  н е  злан 190zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Р ри м с а о т м  н зан че и FindFirst онвелъбя

е  эи т

.zyxwvutsrqponmlkjihgfedcbaZYXWVUT

х  фн цку и й  и  сры у кт р е   Sysutils.hpp  ак к

а  в  мл у до

e xt e r n  PACKAGE  i n t  TSearchRec  &F);

и  а к к

fa s t c a l l  F i n d F i r st (con st An siSt r in g  P at h ,  i n t At t r ,

Ф н ц к иу я  ищ е т  в  кгола т е  пывр е й  фйа л  с  унзак ы м  инме м  и ма т  аиурб т и  и а ть л рзу е т  взо щ а ре в т  в  п рамте е  F. В  сча ул е   пс ш е у н о г о  п ои кс а  воз врща с теа я  ньл у , в  счалу е  ча д ну е и  ок д  ош и кб и  Windows. П ра м т е р  Path зеа д т  кгола т , в  кор т м  пи одр хс т  п ои с к  фай л , и  н певнсторд о м ас о  и м я  фйа л . Т о  ест ь   зн чеа и е  прмате а  дожлн о   ыб т ь  п онл ы м , квила ф ц и ровна ы м и мн е м  фйа л , н па ри ме р  "С:\\М у  Documents\ \ Myfile.doc".  В  дна о м  счалу е   н у кц ф и я е  бд у т ти а к с ь   йа ф л   "Myfile.doc"  в   гола тк е   "C:\ My  Documents".  жкаТ е   в   з н ча е и и   р п м ат е а и тм с о п д у о   к з а ы у вт а ь  мкса и  фай лов : си млов ы  "?" и  "*". Т о  ест ь  вп онл е  допскатеу я  ткоа е нз е ч и а е  пр тмеа а  Path: C:\\My DocumentsWMyP.do?". И  инме о  эо т т  сча ул й  н а м  неилоаб е и н се р т , ка к  бе д у т  п озкан о  в  дальн йе ш ме . П ро м а т е м  Attr  заю дс т я   йа ф л ы , кыор т е   и но д м хб е о   ю к вл т ч а ь   в   п ои с к   нс а л ог о з н ч еа и я м  и х  аоврит бу . С п и ос к  з н чае и й  п армте а  Attr  п ери дв н  в  табли ц е . .Т лаб

 3.5.  кпоисС

З н а ч ен и

е

х ын вж о змо

 зинейач

 патер амр

 Attr

е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

П о яс н ен и

faReadOnly

Ф йа л

faHidden

С к ыр т

faSysFile

С и м е н тс ы

faVolumelD

И н е и д т фо р к а

faDirectory

Д и о р к ет

faArchive

и в нрх А ы

faAnyFile

ю Л ыб

Р а з м у е стя , у  кажодг , та к  ка к  в  п оадв ляю щ е а  н е  п о  знач ен и ям . Э т дл я  п о и с к а  с и с те м н ы

о   п а р м е рт м  б о л ь ш и н свт

т е су

и  з н ач ен и х   и  а рих в н ы

ы  тьолк

о  дл е  фйа л

я  нечт и

я

ы е  фйа л

ы ы  том

в

и е   йа ф л е  фйа л

ы ы

а   ест

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

(faSysFile | faArchive) К  ин аивзоь лп с а  сйе ча

с  повриг

ю  зн ечиа м  о  пн деолс

й р т меапр м  п армет

а  Attr м ы  ещ .

е  внрмсе

я  и ир т ромс а

м  и х  пнбеор пд

,

ине ч уо л П

е  с пис к

н П д ие л с о ак ж т

а  фаойл

в  в ог кла т

й  птмеар е  в  Sysutils.hpp ка

191 zyxwvuts

е  

р  пеялва тс дер т  соб й  сыскл у  н а р у тк ур тс у zyxwvutsrqponmlkjihgfedcbaZY  TSearchRec,  онелвяъб у ю к zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

struct TSearchRec { int Time; int Size; int Attr; AnsiString Name; int ExcludeAttr; int FindHandle; _WIN32_FIND_DATA FindData; }; В   ан д о й  ср у кт р е   н и а б о ле и м я  н айнед ог о  фйа л а  с  расш и рне и ме т ы   (т е  ж е  з н ачне и я , чт о  и  у   п рамте п а р м те р  п оз веля т  н а м  пчи оулт юв к л ч а я   вс е  Windows- т ируб а ы ры у т ,  врме я   н а о зс д и я  фйа л , вмре с ыО т л а е м  члеита я  к ю  сву щст еом Т к иа м  обрза ом , вес , чт о  сктае н за н ча е и е  фн укц и й  FindNext и FindNext онелвяъб а  в  мл у до e xt e r n  PACKAGE  i n t 

е   и н ср е т

ы  сю ущдел и е   п о ля : Name,  кор т е   р ж е и со д т ;  SizezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO  -  раз м е р  н айне д ог о  фай л ;  Attr  -  ег о  аир убт а  Attr   н цкуфи и  FindFirst)  и  FindData.  Пнослде и й ь  п ротс о  мор е  п озле н о й  и н омрцаф и и  о  н йнае д о м  фай ле ,   йа ф л , пчи оулт ь   ы ро т к е   н ьл е з я   ч ре з   п ло е  Attr   к ру тс я   п н о с дл е г о   п оу с д т а   к  н ме у   и  ря д иг руд х   о в р ит а б у . у   рл з а е д у  MSDN. я  фн укц и и  FindFirst,  м ы  разобли . Оалост ь  унся и т ь  FindClose -  и  можн о  п приуатс ь  к  н па и нс и ю  ка до . е  Sysutils.hpp ка к

f a s t c a l l  F in dN ext(TSearchR ec &F);

FindNext  жмео т   и п с оь л з т в а я   ь ол к т о   п о сл е   вы з ов а   н у к фц и и  FindFirst.  Ф н у кц и я и до н х а т  сю ущдел и й  фйа л  с  ме т и  ж е  пармтеи , чт о  бы л и  указн ы  п р и  вы з ов е  FindFirst, и  вzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  счалу е  успше н ог о  п иокс а  воз врща с теа я  ньл у , в  сча ул е  нча д у е и  -  ко д  ошикб и  Windows. Ф н уц к и я  FindClose онелвяъб а  та м  же , гд е  и щ  ыуидпер е  фн цку и , ю щу диелс м  озарбом :

e xt e r n  PACKAGE  vo id  и  е е  еи дн вест н о FindClose зыркаев тав ь  п осл е  вы з ов

f a s t c a l l  F in dC lose(TSearch R ec &F);

е  н зан чае и е  -   освнебжд и е   п и ма т я , вынле д о й  фн укц и е т  вс ю  цкпчое у  вы зов в  FindFirst/ FindNext,  и  е е  н да в  FindFirstlFindNext.

о  оьнле зтяаб

й  FindFirst. о  вы з -

и  ртоиазвл е ь  в  C++Builder, н о  н е  злан Вс е , чт о  в ы  хле от 192zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  ка к

п Т е рь ,  п осл е   ол т с ь   м ощ н о й  тиоертчск й   о в к и пт г д ,  мжон о   п и с та ь   док , кыро т й н йе а д т  н а м  вс е  фйал ы  в  кегола т . Сйазотд е  в  C+ + Builder н ыво й  пткеор , рзаимсте е  н а  фмро е zyxwvuts (MainForm) TLlstBox (FileListBox), TEdit  л д я   мска и   й а ф ол в zyxwvutsrqponmlkjihgfedcbaZYXWV   {MaskEdit),  л д я   вы орб а о р и к тд е и   р а з и м с ет е   к ом п н е т   TDirectoryListBox (DirectoryListBox)  и   вд е   кн оп ки : StartButton и  ExitButton.  Ещ е   и мдон хбе о   р а з м и ес т ь   TGroupBox  (AttributesGroupBox) с  фмажк л и  и  TLabel,  та к  чт о  бе д у т  лчшу е ,  сел и  в ы  восп ельтз у ь   ж у е   с о з на д ы м , рбао юа т щ и м   о п к тр е м  с  к-мопкта и касд , п ри олжне ог о  к  кн и ег . П ри о ж н л е и е  выи дялг т   ю у щ д елс и м   о б р аз м .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON i  Пр ос т о

й  п о и с

к  Файл о

в Documents and Settings > soroka 3  и чоб а Р й  со т л 5  описку Р ь и н к р ат К и  и  пирм е ы  код а  Фо лй а и н е ч у ло П е  с пис к

н е дй а Н р т иг А б у т

о  Фво лй а

а в  в го л а  кт а

е

:

ы  

• ра тС

Г "  олга т К

и  

Г   м е ы н с ти С

е  

Г   ы н ив хр А

е  

Г "  коьлТ

о и н че т

т

е

I !  Г "  сВ

Рс.и

  3.52.  Винйше

е  Флй а

ы   Г ~  ы тр к С

 вид

 дгатоцнирс ме

е  

Г "  ор та ик иф тнедИ

ы  том о

 пинея ж о илр

в

о хыВ

д

ни е ч у л П о

е  к сип с Во

т   д ок

а  фойла , кыро т

в  в г о л  ка т а

е  

й   "п овеш ен

193

"  н а  очиброат

к   со б ы и т

я zyxwvutsrqponmlkjihgfedcbaZYXWVUT   Н к п сС О  кн оп к и   StartButton.zyxwvutsr

TSearchRec sr; AnsiString PathForSearch; int iAttributes = 0; iAttributes  |= faDirectory * DirectoriesCheckBox- >Checked; iAttributes  |= faReadOnly * ReadOnlyCheckBox- >Checked( iAttributes  |= faHidden * HiddenCheckBox- >Checked; iAttributes  |= faVolumelD  * VolumeIDCheckBox- >Checked; iAttributes  |= faSysFile * SystemCheckBox- >Checked; iAttributes  |= faArchive * ArchiveCheckBox- >Checked; iAttributes  |= faAnyFile * AnyFilesCheckBox- >Checked; FileListBox- >Items- >Clear(); PathForSearch = DirectoryListBox- >Directory  + "\\" + MaskEdit- >Text; if(FindFirst(PathForSearch,  iAttributes, sr) == 0) { do  . if((sr.Attr & iAttributes) == sr.Attr) FileListBox- >Items- >Add(sr.Name); while(FindNext(sr) ==. 0) ; FindClose(sr);

F i l e C o u n t L a b e l - > C a p t i o n  =   A n s i S t r i n g ( " Н а й д е н о   ")  + I n t T o S t r ( F i l e L i s t B o x - > I t e m s - > C o u n t )  +   A n s i S t r i n g ( " 

Ка вы ш е

к  ви нд о ,  зраме .  Н о  те м   н е  мне р Со к т а

р  кдо е   н о ыр к т е

а  н а   масо

м   ле д

е   н е  се ву ст ео и   п о  кдо

е   к о м н е р иа т

у  н да

т  рзамре о  дьат

ф а й л о в ")

у  тоери

;

,  и зожлне о

й

.

P ath F orSearch  =  D ir e c t o r yL ist Bo x- > D ir e c t o r y  +   "\ \ "  +   M askE dit- > Text; з ае д

т  п онл ы

й   тп у

ь  к  имокыс

м   ай ф л м

.

Вс е , чт о  в ы  хле от и  ртаовизл е ь  в  C++Builder, н о  н е  злан 194zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ор к С т

и  а к к

а i At t r i b u t e s  |=   fa D ir e c t o r y  *  D irectoriesC h eckBox- > C h ecked;

и   е й   н бо п д ы ю ву щ тс ве и о т

е   о б ва ю л я д й   т ир у б т а

т   в   т ир у б а . Дна а

ы   йа ф л я  срокт

а  вюкл еча

,  н а   вист ео т   п ои с

е   ы ро к т

м   с т е дв .

к  в  диоркет и

я   п о и кс

,

а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ко р С т

if(FindFirst(PathForSearch, iAttributes, sr) == 0); н чи а н е а

т  снвеотбс В  ц и лк н С в е о т сб

о  п ои ск , елс и  ест ь  хто я  б ы  ои д н  фйа л , уюворя телщд и й   с ло в и у ю . е  do  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ...  while п ои с к  фйа ол в  п рои зсвдт я  с  п омщ ь ю  фн укц и и  FindNext. о  п ровке а  н а  совпне да и е   о в р и т а бу :

if((sr.Attr & iAttributes) == sr.Attr); И   и о бр т а е   в н и м ан и е а  FindNext(sr) воз вщра е Во т  и  все . Оалост ь   кс зр а т ик я с в й  сча ул й  дта ь  то т  ж е  ко п о д  Windows, и  п ольз свта И ка т ,  пнвод ы й   к ма н е "тькло о  дл я  чент и я " и  "аирхвн ы й " faArchive VifaReadOnly. Трпе н а т и в ос у в  фожал к  "Аи внрх ы "е н а тс о в и у в  фжоал к  "Тькло о в д а  фжакл , п мраог а  н йае д Вс е  дле о  в  срокт е

  н а   п в и стр у е   вы з ов а   FindClose(sr)  п о   з авреш не и и   п ои к с т  н е  ньл у , а  ко д  ош и бк ) . ь  о  ныро кте х  пн воды х   м ка н я х  дна ог о  пдо х до а   и  н д  пиокс а  фйаол в  п о  мкса е  н а  чоитс м  API (м ы  ж е  п и ш е м  в-ес ка т я  API н да о  умьет) . ь   н ом е р   ои д н :  воз ьм е м   а йф л ,  у   оркгт о   о яст т   р и т а бу . В  трмеи н а х  VCL эт о  оз н чае т  уанст овлне ы е   т ир у б т а ь  пй тпуобр е  птиаокс ь  эо т т  фйа л  н ша е й  тов тсе й  пмйоар г .  Ф йа л  н е  бе д у т  н йане д . П й потубр е  п иоткас ь  эо т т  ж е  фйа л  чент и е" . Оптя ь  ж е  фйа л  н йае д н  н е т бе д у . И  ли ш ь  уна тс ови в  эт т  дна ы й  фай л .

(кд го

а а и ы ы , , и

i f ( ( s r . A t t r  & i At t r i b u t e s)  ==   s r . A t t r ) ; аро т к р о к ст о ры т

я   еа з д т   о ч тн о е ,  рогст а   п р и  уанст овк е   т ри у б а х   м о кр е  faReadOnly е д у б о ч а нт Д с о  и з мне и т ь  уовилс

е   в и с т ео е   о т р и уа б а  faReadOnly  лд я   п ои ск т  уна ст овле н   ще е  кйок-а дн иуб е  вы обр а  н а

в   у   и м ыо к с а  н е  п оз вли ь  т ирубта

х   фа й л о в т  н ай т .

. И нме и   й а ф ыл

о  эт а , у  ко -

if(sr.Attr & iAttributes); и  бу д у и  лю ыб

т   в ы иь б с т р а е  диг ру

я   й а ф ыл е  аы три уб

, и мюе щ и .

е  в  чи сл

е   п ор ч и

х   кза н у ы

й  атируб

,  н о

, возмжн о

,

рс у ы и н в к е Р

й  поис

к  файол

195 zyxwvutsr

в  

о Вр т й  пн довы й  камне ь : в  дмнеокцау ти и   о т  Borland чтса о  упоми нс теа я  ткао е  п он я ы  укзан ы е  атируб ы   п о з ю в ял т  и кста ь ит е , ка к  "н ормьлан ы е  фай лы " (normal files). Ябко йа ф л ы   в   о п д лн е и е   к   "н орм аль н ы м " ,  оыб чн ы м   йа ф м л .  И   врыаз д й   см ы сл ,  и  MSDN о  тока м  п они тя и  учимлаюв т ,  д а  в ы  и  сма и  мтоже е  п оп рбвта ь  зи стпа у ь   н а ш  пктеор , н е к за у в   н и  он дго о  атри уб а   в  уолсви и   п о и кс а . Н и  ои д н  фйа л  н айе д н  н е  бт е д у . Та к  чт о  эо т т о с ук к  дмнеокуца ти и   о т  Borland  с теао я   н а  и х  совиест . Т п е рь , свнеобст о , ко д  п чот и  то й  ж е  фн укц и он льан ост и  н а  WinAPI:  на д ы й  ко д  и щ е т вс е   й а ф л ы   (с   оксма й   *.*)  в   нрок ве м   олга к т е   и д ск а   С , бе з   рнаог и чне и я   п о   а т ир у б а м (т о  еьст , п о  си т у , ка к  с  уна ст овле н ы м zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI   у м т а и об р  faAnyFile  в  вы ш пенри дв о м  к)е од .zyxwvut WIN32_FIND_DATA FileData; HANDLE hSearch; BOOL fFinished = FALSE; hSearch = FindFirstFile("C:\\*.*", &FileData); while(!fFinished) { FileListBox- >Items- >Add(FileData.cFileName); if(!FindNextFile(hSearch, &FileData)) if(GetLastErrorO  == ERROR_NO_MORE_FILES) fFinished = TRUE;

FindClose(hSearch); FileCountLabel- >Caption = FileListBox- >Items- >Count; оЭ т и ме

т  смы с

т  ко д  уж е  в  ком нериа тя л  оормфи т

й  псио

ы н с в ри у е Р к и нд го нр а е об ч т

х  н е  няс теажд у ь  в  ви д

М ы  уж а  нимдо хбо е е  рше не и ы  ран е

е   з н мко а

е  комп н еа т

к айло ф

.  с теаО я  ув тсоб д

. Дл

я  з иамьте а  бщ гуе д у

, чт о  ко д  п ои кс о  и сп оьлз вна и я

а  фйа ол в .zyxwvutsrqpon

в

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

е  и  ама рти бу , и  пнжоел д ро

,  н о е ,  лд .

я   го т

о

Вс е , чт о  в ы  хле от и  ртоиазвл е ь  в  C++Builder, н о  н е  зл ан 196zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  ка к

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

об т Ч н ыво й а о лф и о р д к ет

TSearchRec sr; AnsiString PathForSearch; int iAttributes = 0; iAttributes  |= faDirectory * DirectoriesCheckBox- >Checked; iAttributes  |= faReadOnly * ReadOnlyCheckBox- >Checked; iAttributes  |= faHidden * HiddenCheckBox- >Checked; iAttributes  |= faVolumelD * VolumeIDCheckBox- >Checked; iAttributes  |= faSysFile * SystemCheckBox- >Checked; iAttributes  |= faArchive * ArchiveCheckBox- >Checked; iAttributes  |= faAnyFile * AnyFilesCheckBox- >Checked; FileListBox- >Items- >Clear(); PathForSearch = DirectoryListBox- >Directory  + "\\" + MaskEdit- >Text; if(FindFirst(PathForSearch,  iAttributes, sr) == 0) do if((sr.Attr & iAttributes) == sr.Attr) FileListBox- >Items- >Add(sr.Name); while(FindNext(sr) == 0); FindClose(sr) ;

ь   п о и кс а   и   мкс а а   йа ф л а   о ли п я е др с ь   з н чае и е м zyxwvutsrqponmlkjihgfedcbaZYXWV   PathForSearch,  а   т ирубта ы а  -   з н чае и е м   iAttributes. Ра ьтл зуе т  п ои кс а   з ан о с и л я   в  ср у кт р у   sr Н йа д я  вс е   йафл ы  в  тщ куе й  диоркет и ,  ц и к л  do  ...  while з аверш ался .  Дл я  тог о  чбо т ы к  пи до рхс л  в  п па кх ,  жлеащ и х  уровнмя и   н и же , ни мдо хбе о  и з мне тя ь   т п у ь   п ио к а с , я   в   н г е о   н йа е д н у ю  диоркет ю ,  и   пторяв ь   п ои с к   ж у е   л д я   н е .  И  та к   п о  вес м м   н а  вес х  унвор я х  доирмктяе .  И нча е  гяров ,  ок д  пиокс а  нимдо хбо е о  вы з тав ь .

Пт у п ио к с п ио с о б в а ля д н еч р т ы с в р ис к е у в н о

с р ы ни у в к е Р

й  поис

об тЧ о ч и тс ь р д е ь ол к т ай ф л м ж кае у ю у щ д с ле и

ы  оормфи т

к  фаойл

197 zyxwvutsr

в  

ь  риср внкуе ы я   н а   н и а е о лб

й  вы з о

в  ка до

, дл я  н лча а  двай т е  уприост м  зуча д , чобт м   и   н е   ь с к т а ве л о я   н а   а л иет д .  е д у Б м   и кс т а о  фйа ыл , диоркет и  в  п ои с к  вюкл тча ь  н е  бме д у . П ио с к е  бд у м  ощ сувтляе ь   п о  все ,  вн е   з ави с м ост и   о т   и х   о в р и т а бу .  И н ча е  говря ,  в   вкчасте е   о р т и а бу в   п о и ск м zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  faAnyFile.  пщорУ не а я   о сн в а   д о к а   л д я   ир с к в н у е о г о   п о и кс а  бе д у т   т в ые д я л г м   о бр за м .

ы

е   щ су вн е т о

ь м а ь

TSearchRec  sr ; An siS t r in g  P at h F o rSearch ; F ileL ist Bo x- > I t em s- > C lea r ( )  ; PathF orSearch =  ExcludeTrailingBackslash(D irectoryListBox- > D irectory)  +  " \ \ " ;

i f( F i n d F i r st ( P a t h F o r S e a r c h  +   »*.*",  faAn yF ile,  sr )  ==   0) { do i f ( ( s r . A t t r  &  fa D ir ec t o r y)  !=   fa D ir e c t o r y) { if  ( ( ( sr.At t r  & faAnyFile)  = = sr.Attr) && (MatchesMask(sr.Name, zyxwvuts MaskEdit- >Text))) { F i l e L i st B o x- > I t e m s- > Ad d ( sr . N a m e ) ; } / /   кон е ц   о п е р а то р а  i f  (( ( sr . At t r  &AAttributes)  ==  sr . At t r ) && // MatchesMask(sr.Name, MaskEdit- >Text))) } else i

{ if(sr.Name  != "." && sr.Name!= "..") { ь  нм и д о х б е о   сьти суп я  н а  уневор // зс е д и   тив сещусо ь // с и о п к  а т м / /   кон е

ц   о п е р а то р

ь  нжи

е

а   i f  ( ( s r . A t t r  & f a D i r e c t o r y )  ! =   f a D i r e c t o r y )

Вс е , чт о  в ы  хле от и  ртоиазвл е ь  в  C++Builder, н о  н е  злан 198zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  ка

к

w h i l e ( F i n d N e x t ( s r )  = = 0 ) ; F in d C lo se ( sr ) ; / /  кон е

ц  о п е р а т о р

а   i f  ( F i n d F i r s t ( P a t h F o r S e a r c h + " * . * " ,  f a A n y F i l e ,  s r )  = = 0 )

- о В ы вх р п е

, оит арб е  вниам е , тч о  м ы  рил е зда и  пт у ь  пкисо а  и  мк с а у  (и мя ) фвйоал . к сМа а ь  зс теа д я   н в п е с т о рд н о  з н чае и е м zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML  MaskEdit- >Text. Та к  н а м  впвистолде и  бе д у т н м а го о  уобнд е .  Ворте , н а  чт о  н да о  ои брта ь   в н и м ан и е : в  фн укц и я х  FindFirst/ FindNext ищ е м  трпе ь  фйла ы  н е  п о н уза ко й  мекса , а  п о  мкса е  "*.*". Сив тс ев то е  мекса , оом е я л е д епр й т  фн укц и я  MatchesMask. Дна а я  фн укц и я  онелвяъб а з н ч еа и е м  MaskEdit- >Text, п ровея в  мл у до е  Masks.hpp ю ущделс и м   о б р аз м .

пер т

f a s t c a l l  MatchesMask  ( c o n st  An siS t r in g  F ilen am e, e xt e r n  PACKAGE  bool  c o n st  An siS t r in g  M ask); е ву т с ве от чт се т д о й а фо л

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

т  фйал ы

в й  н те . Ооптрае

ы  н а  свистое е   к за н у о й  м аске . Елс и  и м я  фйал а  со я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ  true,  и н ча е   - false.  н е  сзра у  п о  укза н о й  мкса е  (н па ри ме , "*.doc")? Дле о  в  том , : в  тщ кеу м   ол а г к т е   й а ф ло в  с  укза н о й  мкоса й  н те , н о  он и .  щ Осувляте я   п ои с к  н е  п о  "*.*", м ы  н е  сможе м   ь о с б р та д я   с   а фй л м и :  FindFirst  илеоптдр ,  чт о   в   щ кеут м   олга к т е , и  дальн йе ш и й  п ои с к  ощ суьвлтяе я   н е  бт е д у . р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI

if((sr.Attr & faDirectory) != faDirectory) if(((sr.Attr & faAnyFile) == sr.Attr) && (MatchesMask(sr.Name, MaskEdit- >Text))) FileListBox- >Items- >Add(sr.Name); // ке н о ц  ор о т а р е п а  if(((sr.Attr & AAttributes) == sr.Attr) && (MatchesMask(sr.Name, MaskEdit- >Text))) } else { i f ( s r . N a m e  !=

&&  sr . N a m e !=

р с у и ы нв к е Р

й  поис

к  файол

199 zyxwvutsr в

/ /  з де с / /  п ои с

/ /  кон е

ц   о п ерато р

ь   н е о б хо ди м к   та м

о  с п у с т и т ь с

я  н а  ур о в е н

ь  ниж

а   i f ( ( s r . A t t r  &  f a D i r e c t o r y ) 

е  и   о с у щ е с т в и т

ь

!=   f a D i r e c t o r y )

Е лс и  фйа л  н е  ясвлетя я  диоркет й , т о  м ы  з ан оси м  ег о  в  сп и сок . Е сл и  ж е   йаф л  явля с те я  диро ект й   и  н е  яс теявл я  снбжеы умл и   и р о м я тк е д и  с  и м ен ам и ". " и ".." , т о  н а м  н бое и м до х о  двиоаб т ь  и м я  эо т й  диро ткер и  к zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI  PathForSearch и  нтач ь  п ио с к  уж е  п о  н мов у   п ит у . . . Н о  в  дан о м  счалу е  н и чот , корм е  оопр тае а   goto, н е  врне т  н а с  к  н чал у   п о и ск а.. . Чт о  ж е ь л ае т д ? М жно о  (и  рмнзау о ) омроифт ь  п ио с к  в  тщ уке й  диор кте и  ка к  фн цку и ю  и  вы з тав ь е е  ррси кеувн о   ов т  в  эо т м   м ест :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE if(sr.Name  != "." && sr.Name!= "..") //  седз Т ак п р о ек т

, в и

я  фну к ц и д  к о тр г

ь м и д о  хбоен

о с ь т и с  упс

я  п р и в е д н о  п р и в е д

а  в  те с то в о н  н и ж е

я  н а н  евору м  п р о е к т

е  к  да н н о м

ь   жин

е  ит и в т  сещусо

у  м аетр и алу

. З а гр зу и т

ь  сиоп

к   ат м

е  те с то в ы

й

.

Ж Им

я

е д н и М с о н х т жа

е

Ј >  Documents and Settings Ј 3  tnsoroka Ј )  М о и  до укм ент ы | ^  нК и г а е у рк с и в н ы й  п о и с к  Фйоал

- не йд а Н

'. '.  '.   ра тС

I

.Рис

  3.53.  инВйше

 вид

 тгвтосе

 пкетоар

т

о  Фовйла

:

о ых В

в

zyxwvutsrqponmlkj д

200

Вс е

П ио с

к  фйа лов

void 

, оормнфел ы

й  в  фн укц и ю

, чт о  в ы  хле от

, ви ыдялг

и  ртоиазвл е

ь  в  C++Builder, н о  н е  злан

т  сю ущдел и

м  образ ом

и  а к к

zyxwvutsr

.zyxwvutsrqponml

fastcall TMainForm::FindFiles(AnsiString  APath,

const AnsiString AMask, int AAttributes) TSearchRec sr; if(FindFirst(APath  + "*.*", AAttributes, sr) == 0) do iff(sr.Attr & faDirectory)  != faDirectory) if(((sr.Attr  & AAttributes)  == sr.Attr) && (MatchesMask(sr.Name,  AMask))) TListltem  *NewItem; N ewltem  =  F i l e L i s t Vi e w- > I t e m s - > Ad d ( ) ; N e wI t e m - > C a p t io n  =   sr . N a m e ; N e wI t e m - > S u bI t e m s- > Ad d ( AP a t h ) ; F i l e C o u n t L a b e l - > C a p t i o n  =  An s i S t r i n g( "Н а й д е н о   ") + I n t T o S t r ( F i l e L i s t Vi e w - > I t e m s - > C o u n t ) +   A n s i S t r i n g ( "  ф а й л о в " ) ; / /   кон е

ц  о п е р а т о р а  i f  ( ( ( s r . A t t r & AAt t r i b u t e s )  ==  s r . A t t r ) && / /   ( M a t c h e s M a s k t s r . N a m e , AM a s k ) ) )

else if(sr.Name  !=  "."  &&  sr.Name!=  "..") FindFiles (APath + sr.Name + "\\", AMask, AAttributes) ; // енок

ц  ротаеп

а  if ((sr.Attr & faDirectory) ! = faDirectory)

рс у ы и н в к е Р

й  поис

к  файол

201 zyxwvutsr

в  

Ap p lic a t io n - > P r o c e ssM e ssa ge s( ) ; w h i l e ( F i n d N e x t ( s r )  = =   0 ) ; F in dC lose(sr);

Вт о

, свнеобст о

, т а  срочкта

, в  кор т

й  пи одр хс

т   ирс в к н у е ы

й   ыв з о

в  фн укц и

.

if( sr . N a m e  !=   ". "  &&  sr.N am e!=   " . . " ) F in d F iles( AP a t h  +   sr.N ame  +   "\ \ ",  AMask,  AAt t r ib u t e s) ; Е лс

и  м ы  в й  пт у ь   п ои кса в  н ей . И  та к  д о н ч ь ал о й  диоркте т о  дна ы й  ко д П о с к ьл у (TListBox)  м ы о бр ж а е т м   им

 тщ куе

м   ол а г к т

н овы

р Со к т

, п ри вбаял  те х  п ор  н йае д   п ои с   и п с о еь л з у я  фйа л

, п ок и  укзат т  вс е к   жу , а

е   н ша л и  диоркет ю   и  е е  и м я  н я  к  тщ куе м у   тп у и   и м я  эо т й  диоркет и а  м ы  н е  ообйе д м  вс е  н щжиаел е  доир кте ь  и м я  диск а  "С :\ " , н ап ри ме , и  зта д  фйа л ы  н а  диск е  "С :\ " . е   с т е вд я   н е   в   н од й   и до р к е т и ,  т о м   р ас ш и р н е ы й   сп и со к   (TListView),  в  в  дог ру й  -   пт у ь   к  н муе .

е  "." и  "..", т о   ормфеи у м , и  н чаи н еа м  п ои с к . Елс и  в  кв тсчеа е ь  дл я  п ои кс а  мкса у   "*.*",   в м тс е   н до

о   п р о гс т й   ко н л

о   сп и ск е   г о р тк

а zyxwvutsrq о

а Ap p licat io n - > P ro cessM essages( )  ;

нж у

м ыа р п г о го т н ави с а м л е ь о т ян о

а  дл я  тог т а ь лР з е у У  дна ог о  чбо т П юл ю  пяле ьзтоав

, чбо т ы   об р ат о  спбос , и  н гиеч ы  унар тис с  у  н ша ге о .

ы  в о  вмер ы  п рмаог а  пиокс о  дго ур ь  дна ы  кдо а  ест . Н о  та к

я  пиокс

а  пинржоел

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

о й ь  ка

Вс е

202

, чт о  в ы  хле от

и  ртоиазвл е

ь  в  C++Builder, н о  н е  злан

и  а к к

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA й   поис к   Фа йл о в

| j .   Р е ку р с и в н ы Им

я

|   е д н и М е с о хж н а т е CADocuments and Settings\ tnsoroka\ MoH до укм е ныт\ К . CADocuments and Settings\ tnsoroka\ MoHfloKyMembi\ K. CADocuments  and Settings\ tnsoroka\ MoHfloKi| MeHTbi\ K. CADocuments and SettingsVtnsorokaVMonflOKyMeKTbiSK. CADocuments and Settings\ tnsotoka\ MoH до укм е ныт\ К . CADocuments  and Settings\ tnsoroka\ MoHfloK4MeHTbi\ K. CADocuments and Settings\ tnsoroka\ MoH до укм е ныт\ К . CADocuments and Settings\ tnso(oka\ Mon доукм е ныт\ К . CADocuments and Settings\ tnsoroka\ MoHflOKyMeHTbi\ CADocuments and Settings\ tnsoroka\ Pa6o4Hfl с от л \ \ CADocuments and SettingsMnsoroka\ Pa6o4HU с от л CADocuments  and Settings\ tnsofoka\ Pa6o4nu с от л \ CADocuments and Settings\ tnsorokaSPa6o4Hu с от л \ CADocuments and SettingsMnsoroka\ Pa6o4Hu сотл\ CADocuments and Settings\ tnsoroka\ Pafio4Hfl с от л \ Х CADocuments and ЗеЙпвдМбаоНЧлгтнкы CADocuments and 5еЙпд8ип5ог\ак Ш ба лоны \ д \\ро тзм дсин А Ш ынобл а \ CADocuments and 5е111п5 CADocuments and 5еМ 5 пд *Амд ори\нтса Ш боалны \ CAProgram FilesVAQtime 2\ Getting Started with AQtim... CAProgram FilesVAQtime 2\ Knight Tour Tutoiial.doc C:\ ProgramFiles\ Borland\ CBuilder5\ FreereportS FR_ENG.DOC CAProgramFiles\ Borland\ CBuilder5\ ProjectsSWT  Re le a; _J CAProgram Files\ Microsoft  SDK\ Bin\ win64\ readme.doc

Q BackUp CD Brother

и н е ч у ол П е  с п и с к а  Ф.йла . . и н е ч у ол П е  с п и с к а  фай л и не ч у ол П е  ти п а  д и с ка , doc р По зн ча с т ь  в  W2K.doc ~$кур с и вны й  по и с к  Фйа.. . ~$лине чу е   с пис к а  Фй.ал . . и н е ч у ло П е  с п и с к а  фа.йл . . уе р к Р с и в н ы й  п о и с к  Фйа.. . ез юР м е , doc Ank.eta.doc CHOOSECOLOR Structut... CHOOSECOLOR.doc ~$новн е  ненизча е  С.. . к ьБ а т е  н а  в.укыичт do c с О но в е  ненизча е  С.. . winword.doc winword2.doc winword.doc winword2.doc

.Рис

 3.54. Скпоис

 вхес

Г~ |  Distributives CD  Documents and Settings CD  Downloads CDFido CD  Football Г 1  Games

И

й а е дН н

ра тС

т

о  1268 Фйоал

в

о Вы х

д

zyxwvutsrqponmlkjih

zyxwvutsrqponml

 *. doc- в о йл фа zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  на  дкисе  С

инажредоС аК Г ла в

к   у с от р е н а   1. О  вес ри

а  э т

а  книг

е

а  

и   о п р лш

3 й   з а ом лв и т

е  с ло в

4 zyxwvutsrqp

о  

м П р о з ч а н о тс ь  в  W2K/XP с  и сп ольз ван и е SetLayeredWindow  Attributes  Си т л ь  csOwnerDrawFixed  в  TComboBox  Г ла в

а   2. Н е ко т ыр

4 10

в  VCL 

е  и з  кла с о

19 19 21 22 22 23 35 38 43 59 71

С в нра е и е  сор т к  п о  маск е  и  и сп ольз ван и е  TMask  Screen и  ег о  использ ван и е   в т йс о в С а   д о т Ме ы   и ы т б оС я   Н ме н о г о  о  TMonitor  ;  Н и е н з тс в ы й  TLanguages  И пс о ь л з в н а и е  TAction в  C+ + Builder  Р аб о т а  с  доат й  и  врмен е м  в  VCL: TDateTime  TMouse 

Г лав а   3. В се , ч т о  в ы  хоетл н о  н е  зна л и  к а к  

zyxwvutsrq

и   р еали з о в ат

ь   в  C+ + Builder,

И с п о ль з в н а и е  си тл я  csOwnerDrawVariable  в  TListBox  ч ш ул н е У и е   и н йерф ст а  TListBox  и  TComboBox  Р ал и е з ц и я  звак тс и  (splash  screen) в  C+ + Builder  TEdit и  OnKeyPress  М н а и ц ял п у и  с  ммаод те и   к л ас о в , и л и  К а к  вы зтва ь  фн укц и п о  е е  си мвоьлн м у   и мн е и   П ч н е о ул и е  тип а  диск а   П чн е о у л и е  сп и ск а  ди ско в  в  си мест е   о с пС б  пывйр е : GetLogicalDrives()  о с пС б  вйо р т : GetLogicalDriveStringsQ 

76 76 83 89 95 ю 103 108 111 111 113

и н а ж р е од С

204

П ри м н е и е  ш балон в  п р и  дин маи чскео м  свзяы вна и и  DLL с  онс ов ы м  п ри олжне и е м   П н м е до а  окон о й  пр оцу де ы   к ом п н е т а  и  окброат а  собщ не и О кн а  н ан стер до й   м ро ф ы   ц и а з л а еР я  оо к н но т р а нда нт с е й  фм р о ы  в  Windows 2000/XP  ц и а з л а еР я  оо к н но т р а нд на т с е й  фм р о ы  в  Windows NT 4.0, Windows 95/98/ME  П ч а д ре а  п раомте в  комна д о й  срокт и  в  п ри олжне и е   Р б ао т а  с  рросет м   и  созна д и е  фйа овл й  аосц и ца и и   П р ома г а  работ ы  с о  скна рое м   Drag'n'Drop врн т у и  эмнел т а  упнвраел и я   В н ше н и й  Drag'n'Drop  П м р ещ н и е  эмнел т а  управнле и я  в о  вмре я  раз ркбот и   Р б ао т а  с  комп н ема т и  ActionManager  и  ActionMainMenuBar в  диз йа н е  и  ран йтм е   П н ч е уо л и е  сп и ск а  фйаол в  в  колга т е   р и с Р к еву н ы й  п ои с к  фйа ол в  

й  

е

zyxwvuts

118 124 130 130 134 136 140 154 162 169 175 181 189 195

ИЗДАТЕЛ ЬСТВ

О

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

«К1 И Д У 1- З АРБО

» .л Те

КН И Г

И   В   П Р О АД Ж

: (095) 333- 82- 11; [email protected], http:llwww.kudits.ru/publish

Е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB

ArchiCAD   8.O. С п р а в о ч н и 480 с . 2003 г . Отп

. цне

к  с  п р и м е р а м и а  209 р .

. Т и то

ArchiCAD   7.O. Т и то 400 с . 2003 г . Отп

в  С . . цне а  154 р .

ArchiCAD :  п о л е з н ы 272 с . 2003 г . Отп

е   р е ц е п ты . К о м п л е к т . цне а  171,6 р .

. Т и то

AutoCAD   2002/ 2002 LT/ 2000. С п р а в о ч н и 720 с . 2002 г . Отп . цне а  220 р .

1С : п ракит

а  н раостй к . цне

AES -   с та н да р т   к р и п то г р а ф и ч е с к о И ван о в   М .А . 176 с . 2002 г . Отп . цне

о  уачте й   з а щ и ты

D elphi 7. С а м о уч и те л ь 480 с . 2004 г . О.тп нец D elphi 7. С а м о уч и те л 432 с . 2002 г . О.тп нец D reamweaver  M X. Б а з о в ы

й  А .

. Р аж и ко

в  М.Ю

.

. К о н е ч н ы

е  п о л я

. З е н з и

н  О .С .

ь   п р о г р а м и с та

.  Б а ж е н о в

е  приложне и й

. Фрол

а   И .Ю

в  А. , Ф рол

. Соит 208 с . 2004 г . О.тп нец

.  К л и м о в а  Л . М а  124,3 р .

в  Г .

ь   п р о г р а м и с та а  110 р . й  к ру

. .  Б а ж е н о в

с   Бо ж к

о  А. Н

т  л и  ри сковат

а  И .Ю

.

.

ь  корп ац и йе

? Мак ар т

.

и  Л . П ер

. с  ан гл

.

а  110 р .

Jam agic:  п р о г р а м и р о в а н и 288 с . 2004 г . О.тп нец

е   и г р   и  с и м лу я то р о в а  132 р .

Java:  о с н о в ы  Web- сжлуб 464 с . 2004 г . О.тп нец

. Т о с т  Ан рд е а  143 р .

. П е р

х   ч а с тн ы

х   с ет

Linux:  с о з адн и е   в и р т уа л ь н ы Бр ай а н 464 с . 2004 г . О.тп нец

.

а  220 р .

Flash zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   &  XM L.  Р ку о в о дс тв о   р а з р а б о тч и к а . Д ж ек о б с о н   Д . П е р . с  а н г л 352 с . 2003 г . О.тп нец а  111 р .

Г - ь з н п о с е ба т

,

а  55 р .

е  п роикет ван и

512 с . 2003 г . О.тп нец

. Р о с о л о в с к и

а  121 р .

C+ +  & Visual  Studio. N ET. С а м о уч и те л 448 с , 2003 г . О.тп нец а  132 р .

С # . В и льазн у о

в  С .

к  к о м а н д

и  опиреатвн ог

256 с . 2003 г . Отп

в  С .

а  154 р .

.  П е р . с  а н г л

с  С е р их о

. П е р

. с  а н г л

.

.

й   (VPN ). К о л е с н и к о

в  О . , Хе т

ч

О zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ИЗДАТЕЛЬСТВ

«К-ИЦ Д У ЗОРБА

»zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .л Те

НК И Г

: (095) 333- 82- П ; [email protected], http://www.kudits.ru/publish

Е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

И   В   Ж А Д О РП

.Net  F ram ework:  Б и б л и о те к 672  с . 2003 г . О.тп нец

а  к л а с о в а  298,1 р .

Office  XP. Аф а н а с ь е 356  с . 2002 г . О.тп нец

. Т е м п л м а

н  Д ж .

в   Д . , Б а р и ч е в  С , П л о тн и к о а  84,7 р .

PageM aker  6.5/ 7.0. С а м о уч и те л ь 352  с . 2002 г . О.тп нец

а  121  р .

Pascal 7.O. О с н о в ы  п р а к ти ч е с к о г з адч . К л и м о в а  Л. М 528  с . 2000 г . О.тп нец

. а  105,6 р .

Photoshop C S: те нх о л о г и 624 с . 2004 г . О.тп нец

я   р а б о ты а  176 р .

Sendmail: н а с тр о й к 272  с . 2004 г . О.тп нец

а  и  о п ти м и з а ц и я а  110 р .

QuarkXP ress 5.0.  С а м о уч и те л ь 288  с . 2002 г . О.тп нец

.  В о в

, В и те

в  О .

к  Е . Т

.

о  п р о г р а м и р о в а н и я

. Р е ш е н и

. С к а н и р о в а н и е

е  ти п о в ы

, р е туш ь

. К р и с те н с о . В о в

р  Д .

.  Б о ж к

н  Н и к

к  Е . Т

. П е р

х

о  А. Н

. с  а н г л

.

.

.

а  88 р .

Visual Basic.N ET, Visual Basic 6.0, Visual Basic for  Applications  6.0. К о р о л 496  с . 2002 г . О.тп нец а  143 p. Web- ди з а й н :  Photoshop & D reamweaver.  3 к л ю ч е в ы с  а н г л . 264 с . 2004 г . О.тп нец а  99 р .

х   э та п а

. С м и

т  К о л и н

ь  В .И

.

. Пе р

.

Windows XP Professional.  П р о ф и т  Б . 416  с . 2002 г . О.тп нец а  112,2  р . д Ам и н и с т р и р о в а н и

е   б а з  да н н ы х . К р е й а  253 р .

752 с . 2003 г . О.тп нец

с Аем б л е

р   в  з а д ч а 320  с . 2002 г . О.тп нец

Б е з о п а с н о с ть

: те нх о л о ги 496  с . 2001 г . О.тп нец

Б р е н ди н

г  -   Д о р о г а   к  м и р о в о м у   ры н ку 272  с . 2004 г . О.тп нец а  99 р .

И н фо р м ац и о н н а

ы   и н фо р м ац и и а  96,8 р . , с р едс вт а а  99 р .

я  а р хи те к тур а 320 с . 2004 г . О.тп нец

И с к у с тв

х   з ащ и т

г  С М а л и н

с . И в а н о

, ус л гуи

в   М .А

. Б а р с ук о . Ано лх

.  Ч е р те ж

в   B.C. д  С и м о н

и  д л

.

я   с а й та

. П е р . Уо дтк

е  К . П е р

а  110 р .

о  ди з а й н а  с  к о м п ь ю те р о 208  с . 2004 г . О.тп нец а  88 р .

м   и  б е з ..

. П е р

. с  а н г л

. с  а н г л

.

. . с  а н г л

.

О zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

ИЗДАТЕЛЬСТВ

«К-ИЦ Д У ОЗБРА

»zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .л Те

КН И Г

И   В   П Р О АД Ж

: (095) 333- 82- 11; okikudits.ru, http://www.kudits.ru/publish

Е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

И с л е уд

м   M aya  4: 30 ур о к о в   в  3D. Ш о н ех 288  с . 2002 г . О.тп нец а  99 р .

Ка

к   п р е п о дн е с т и   с еб 224 с . 2003 г . О.тп нец

я   н а  р ы н к е  тр дау а  67,10 р .

. Ха н ге р л е н

Ка

к   су п е ш н о   р ук о в о д и т ь   п р о е к та м и а   121 р . 288  с ,  2003 г . О.п т цне К о м ут а о р ы   C ISC O. О од м   Ш . , Н о ти н г е 528  с , 2003г . О.тп нец а  231 р . К о м п ь ю те р н а я   ан и м ац и я . Р и к  П э р е н т 560 с , 2004г . О.тп нец а  242 р . К о м п ь ю те р н ы

е   и гр ы 416  с . 2004 г . О.тп нец

К о м п ь ю те р н ы

е   п р е з е н та ц и и П ер .  с  а н г л . 240  с . 2004 г . О.тп нец

а  77 р .

е   п сори аз а  -   е с те с тв е н н ы 288  с . 2001 г . О.тп нец

а  132 р .

Ле ч е н и

р  М . П е р

:  с е к р е т

. С е р б р я н н а

ы   б и з н ес а а  169,4 р .

. П е р

. с  а н г л

. П е р

. с  а н г л

: о т   р и то р и к

д   Баф

. П е р

я   п лу я

.  Ф е р гу

. с  а н г л

.

с   О 'К о н н ел

л

. .

и  д о  с л а й д- ш о у

й   п ту ь

.  Е л и з а в е ти н

о  Д ж

. Р деун к

о  П . , Tsunami  Computing.

Ми

р   InterBase. Ар их те к тру а , а дм и н и с тр и р о в а н и ба з  д а н н ы х   в  InterBase/ FireBird/ Yaffll.  И з -д В о с тр и к о в  С . 496  с . 2003 г . О.тп нец а  220 р . а   о тл а дк и .  Т э л е 560  с . 2003 г . О.тп нец

с  М . , Хси х  Ю а  187 р .

О б ъ е к тн о - о р и е н ти р о в а н н о 416  с . 2003 г . О.тп нец

е   п р о гр а м и р о в а н и а  125,4 р .

Осн ов

ы   п р о с тр а н с тв е н н ы 336  с . 2004 г . О.тп нец

х   ба з  да н н ы х а  121 р .

П ерсо н аль н а

я  з а щ и т 272 с . 2002 г . О.тп нец

П л а тф о р м

а  п р о гр а м и р о в а н и 352  с . 2003 г . О.тп нец

я  J2M E дл а  132 р .

П о п ул я р н ы

е  Web- п р и л о ж е н и 272  с . 2003 г . О.тп нец

я   н а  F lash  M X. Ч а н а  129,8 р .

. П е р

. с  а н г л

а   Т .М

.  П е г а н

ы   C ISC O дл я   IP- с етй 656  с . 2003 г . О.тп нец а  242 р .

а   о т  ха к е р о в а  92,4 р .

.

м   X.

М а р ш р ут и з а т о р

Н а ук

. с  а н г л

е   и  р а з р а б о тк е  2- е , до п о л н

.

.

а   п р и ло ж ен и . К о в я з и

й н  А. ,

. е   н а  ActionScript.  П е р .  Ш а ш . Р ку о в о дс тв

и  Ш .

, С а н ж е

о   дл

я   н ач и н аю щ и х

я  п о р та и в н ы г  Т и

й  Ч .  П е р

. с  а н г л . с  а н г л

.  Ф о р

х  усрт о й с вт

. П и р му я

м  К . , К л а р

к  Ш о

д   Дж

. . .

н

н  В .

ИЗДАТЕЛЬСТВ

О

«К-ЦИДУ ЗАРБО П Р И О Б Р ЕТ АЙ Т м та Ал

Е   КН И Г

ы

ь с е ул а р Б

д г ло В е нро В енц До а р т у еб к ни Е

т у с рк И а рл г ин К ие К - кс мьлос -аКо н р у Ам а д о нса Кр с н Ми

в к с Мо

сриб с о в Н

ин ж Н ни "Деф ь л

:  (095) 333- 82- 11; [email protected],

И   У   Н АШ И

Х   П АР Т Н ЕР О

В

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - в от с Р -а н До у

Ч П  Аме р в   а ло Б т  Асарк о ви ч "Ми р   нки г " . Вошр и свкл й  п-р т , 3 3; м из а г н  "КОМЬЮТЕРЫ П " (8632)62- 54- 61 (уо г л  лу . Фуа в о нм ар ) а во л Де я "а лр у т аре ти , (8632) 62- 36- 55 E- mail amreev@hotmaiLru Сет ь  кны ниж х  мониз а г в  "Мр истга " ,  г .  Гн дор о лу . Ча во х е , 3 1, ул . Б . Ся а во д а , 67 Ч П  он ар Б в  Дм рит й   с е кл в и А ч zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB [email protected] (10- 375- 1522)29- 6- 29 "Фкине с  21 зе"к , E- maiL  [email protected] E- mail:  logos- [email protected] мр а С а а в ст н е г А о  дов ле й  имироц а фн и РА  "ЭЖА - САМ " лу о -к. Анан вео сн в От , 44 "А  Опт о в - р о зни ч ая  т о р г,вля 000  "Влане " zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA (8462)78- 57- 58,78- 57- 59,79- 04- 25 ул . Чеюлсинкцв , д . 9  (8172)  75- 21- 43 т- к н а С р у б е т р П г ж ' Кны и ж й   м и р  с ем и "ь , пр- т . ицю лове Р , 58, "На в о я а кс е ч и н х е Т я  каигн " и к с в о л й м за И й т к пе псо р (0732) 51- 28- 90 , 29 к -о вн го ри цм раТо о ф н И е в  атс н е г о  "Б-с е н азси е р П " Ч П  Км ыор а в  Рм и т а р  чивол удбиа Г , лу я а н д з. Рае ъ з , д . 39 (10- 380- 62)381- 9232 Т Д  "Дит к е л а " г лу я а кс е . П чи н х е ти ло , .д 2 6 е р и тн б а с у г ко Е е   М н о и у ц ь лп а е   ро н а и т У е (812) 247- 14- 83, (812) 247- 93- 01 и т рп я д е П е   н ыКи ж й   м з иа г н  № 1 4 р П . о кс в о х уб О й  но р б ы  д.10 5 E- mail:  [email protected] к а н жи н К я к Ярм а а  мт с е о  91 1 'Про"лидат ,  (3952)  232- 862, 591- 380, 590- 990 (812)105- 3596; 8- 911- 2127857zyxwvutsrqponmlkjihgfedcbaZYXW E- mail:  [email protected] оа т С р в д "Кны ниж й  М ир" ; п-р т  Киаорв , 32, (8452) 32- 98- 14 000 "Кт к а тон " (0112) 35- 37- 66 с н е лм о С к в "т"Эи д у р , ул а в. Доо р у т х , д . 3, оф . 901 "М ирко н а" ,ул . М . Рсоавкй , 13, (044) 517- 73- 77 (0812) 32- 75- 21, (0812) 65- 62- 94 "Тнеохикг"а ,  (044)  268- 53- 46 л о п о р в ат С ь е ын ин ж К й  М ир" ,ул . Мари , 337, (8652) 35- 47- 90 У М П  "Па т е н а л " (42175) 0- 46- 36 о р на г Т г р , ул . Чаво хе , 31, "Канре тюмо ьп я  книга" "Б"нМоиабл ,  bibliomanl@maiLru (8634)37- 13- 12 к м ос Т к о с - к ь л е т а зд И о р в а г и н т к я  ком инпа я   "Та сек ичн хе я "Кны ниж й  М"ри ,  ул . Линеа , 141,  (3822) 51- 07- 16 н ки га " Уф а ьс у р а л е Б , а/ я   267, М инс-к 50,22005 0 000 ПК П  "А"изя , т.ле /с к фа :  (3472) 50- 39- 00 e- mail:  [email protected] п О т о ва я  т о р г вля  Ул . Завоцне , 70 а о Рз н и ч ая  т о р г вля и  Мз а г а н  "О"с и з а , ул . Чшвые н р е "Дашо к в  и  К° " о г ск , 88 (095) 182- 42- 01,183- 93- 01, [email protected] и з а г аМ н  "К"инк инж , пр . Оя рб я т к , 106 www.dashkov.ru - ты н а Х с й и М н а к 000 Т Ц  "Мо т фри " Лени с к й  п-р т , 62/ 1 и з а г аМ н  "Кни г " ,ул . Лени,а 3 9 137- 08- 33, [email protected] о к ь а Хр в к н Кы и ж й   р ы но к   "Рай с ик й  у г о л о к" , "Кны ниж й  п"жс а , ул . Линеа , 10а , (3832) 29- 50- 30 у л .  лКо чк в с акя , 28, (0572)  549- 116 и "Скс р и б й о  Д м   "игн К , ы нс а р К й  п- р т ,  153, (3832) 26- 62- 39 с ниб еляЧ к "Кны ниж й  м ир" , -рп т  К . Мса кр , 51 "Кны ниж й  М ир" ,ул . Кироав , 90, (3512) 33- 19- 58 й  Нор г в о д т ха Ш ы " (8312) 175- 157,(8312) 168- 125 000 "Ш итахнс к й  кн и го т р г" , Росватк я  об.л , [email protected] пр- т .  дебо П ы   е в о ю лц и Р , 130 "Б " м ре П ь E- mail:  [email protected] И П е г Ср е в  Аднса ке л р   м и вд о р а л В ч л вал с о р Я ь (3422)45- 96- 55 М з а иг н   "Наук" , у л .  В о л дар с ок г , 63, E- maiu  [email protected] (0852)  25- 95- 04

А КЗ А

З   ИН К в ь т сл И е а з д з ак З з акЗ

ь н л е и о р а тв

Те л .

http://books.kudits.ru »zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Г   Н ЫЛ Е А О Ж

М  ПО ЖЛТЕА

о  «КИД УЦ - З РОБА ы  пирн сюам т ы  и з  ригеон й  ое птал

я  п о  аусер д в  Рисо и  с  авакойитсд .

» ощ суевялт : 121354, Мавксо

М т  рысакл у  кн и г  п о  пеочт . , /а я  18; чер з  и- нтре т зиа г м , а  ткжа е  ззак ы  и з  сар т н  бил жн ге

н  http://books.kudits.ru. ил и  [email protected] о  и  дьлан ге о  зжеьб руа я  ожи уювласб т я  тьолк

о  п о  пд ер

-