272 121 24MB
Russian Pages 209 Year 2006
С Л В Я Ч ЕА
В ЕВ РМЕ ЛОА
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
m
е аж р б о т О ор т
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
о Об р а ж т е
т н к се у д
у ка к чи сл
о с ли юдру щ и
t
о б р О жа т е м не о
т в мр е я , и псьлозу й 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
т к И з тилбац ю пн дзгоаяр
бивто
в максе
к лгсеиомч
дкисам
...
3
2
1
...
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
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] о и дьлан ге о зжеьб руа я ожи уювласб т я тьолк
о п о пд ер
-