245 43 49MB
Russian Pages 302 Year 2004
а С м о чу и т е л ь 14 п о о с в е ни ю Delphi8for.NETzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
е в с р е д
Пр о г а м м и р о в а н и
D e l p h i 8 П ри т о ч а в ыв
э т у
for
е
. N E Tzyxwvuts
ку,игн
наит уче с ь: • р о га П м м и р а о в т ь в серд е Pascal Delphi н а як ыз и Object Pascal ь в сиов х геичскра ф с а т ве о л з ь п
• ат в д з о С пр и ле ож н я е й т ин фр
х й я
• ри м П те я н ь о м к п о ен т Delphi и иатвоз льпс аиноыцл ьк фу е о з вм с н т о ж и стсием Windows • а т в о з л ь пс И т св е д р а седр Delphi п о отлакд • а р т Рв з б ы ба з
ы ь ы
ь ы е нс т о р в ы ра зр бот к
е и е прога м
ь прсот е йши ы даны
Ш К Еи Л Ц Д
е
м е
х zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
А
.Г В
. Гал и с е
в
р о гр а м м и р о ва ни
е в с р е д
D e l p h i 8 f o r
J E T
.Г В
к ту к Е п д у М о свк а • - т Скна рбуе т П 2004
д
е
. а Гл и с е
в
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA г • е и К
в
Б
К 32.973.26- 018.2.75 Г1 5 К 681.3.07
ДУ
н р о е ю п ьм К то
е ив тсьл е та зд вЗа
П о ощ б и
Г али се в
, Г . В
Г 1 5
П р о г ам и р о в ан и — М . : И з адетль ск и
м ва сопр
. рцкиае д е
о "Ди актел
"
й zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH А. В. пвецо л С
м ос ещ айртб ь в в итсьл е та зд о "Ди актел [email protected], http://www.dialektika.com
" п о ус аер д
. е в сред е Delphi 8 for .N ET. С ам чоуи елть й до м "В и л ь я м е " , 2004. — 304 с . : и л
ISBN 5- 8459- 0644- Х (рс.у
. : .
)
Кн иг а п р ес ад т в л я т со б й с а м чо у и е л т ь н ач ль н о г и н см р т у е н а т л ь н ы х с р е дт в п р о г ам и р о в ан и с Delphi, т о п о м и м о н ов г о м еар т и л а , в эот п о н и ят й и к о м п о н ен отв , а есл и ещ е н е з н ак о м ы н ач ль н ы е з н ан и я и с м о ж ет е п р о г ам и р о в ат р або т у с п л а ф от р м о й .NET, те м н е м ен е , в н е л д я с р ед ы п р о г ам и р о в ан и я Delphi би ли оект ехт , кт о ещ е н е з н ак о м с эот й н ов й тнех о л ги ей лг а в , п о св ящ ен н а я общ и м п ри н ц и п а м п осрт ен и Кн иг а р а с ч и ат н а н а ч и е ал т й , сов е м н ез н а к о м ы Delphi, н о , ет м н е м ен е , и м ею щ и х общ е п р о г ам и р о в ан и и и умею щ и х р або т ь в сред
о р оу в н я и п о с в ящ ен а н або р у я Delphi 8. Е сл и в ы ж у е з н ак о м ы й кн и г е в ы н а й етд е м н ог о п ри вы ч н ы х , т о п роч и ат в к н и уг , п очлуи т е ь в э от й с р ед . Delphi 8 р ас ч и атн а н а й м ож н о и сп о ль з о в ат ь ка к п ри в ы ч н ы е и VCL, ат к и би ли оект и .N ET. Дл я , в сам чоуи елт ь в к л ю ч ен а е о лд ьт н а я я п лфаотрм ы .N ET. х с яз ы к о м п р о г ам и р о в ан и я е п р с ае д вт л н и е о к о м п ь ю е тр а х , е Windows.zyxwvutsrqponmlkjihgfedcbaZ Б
Вс
е н аз в ан и
:
я п р о г ам н ы х п р к о ут д х фи р м . Н и ка я ч аст ь н а сот я щ е г о и з а нд и форм е и к ак и м и б ы т о н и бы л о ср есдвтам и фо т к о п и р о в а н и е и з ап и с ь н а м агн и нт ы "Д и а л ек ит к а " .
в я в л ю ст
я з а р е г и с рт и р о в а н н ы м
и от р г в ы м
К 32.973.26- 018.2.75
и м ар к
и
с о в т ес ю у щ и
я н и в каки , дбу й н о си етль
х ц ел я х н е м о ж е т бы т ь в о с п р о и з в е дн ь т о э лекрто н н ы е и л и м аенх и ч еск и е , есл и н а э т о н е т п и сь м ен н о г
а в како , вклю ча о раз реш ен и
Copyright © 2004 by Dialektika Computer Publishing. All rights reserved including the right of reproduction in whole or in part in any form.
й б ы т о н и бы л я я и з а е д лт ь с в
а
о
и н е лв а г О
е Введ ни
е
12
л а вГ
а 1. З н а к о м с тв
о с о с р е д о
л а Гв
а 2. З н а к о м с тв
о с п л оа тфр м о
л аГ в
а 3. Я з ы
л аГ в
а 4. Ра з р а б о тк
л аГ в
а 5. О бе къ т
ы в Delphi
л аГ в
а 6. Б а з о в ы
е кл а с с
л а Гв
а 7. П р о д оа ел ж
л а вГ
а 8. П р о г р а м м и р о в а н и
к п р о гр ам м и р о в ан и а п р о г р а м
а 9. Отл а д к
л аГ в
а Чт
л аГ в
а 1 1 . Спр а в о ч н ы
о е щ
я
38
я Delphi
55
ю я з ы к
а Delphi ь г р иа ф ч е с к и
о и н те рйф с
с
а п о л ьз о в а те л
я
П р и л ео н ж и е
. О тв е т
ы н а к о н т р о л ьн ы
П р е д м е тн ы
й у ка з те л
ь
188 215
. й р аз де
155
м
м о з н а тьЮ
97
138 й и н те р йф
е с и с п о л ьз о в а н и е
е н а д
а Delphi
123
м и з у ча т
а п р о гр ам
15
й .NET
м с п о м о щ ь
ы я з ы к
г р иа ф ч е с к о г л аГ в
й п р о г р а м м и р о в а н и
236
л
259 е в о п р о с
ы
295 299
и а н е жр д о С
е
и не де в В
е
12
ва Гл
а 1. Змо атксвн
о с о соерд
я
Р або ч и П ан ел Окн
й со т и м ен а р а б о ч ег
л ю о с от л
17 18 20
а
ы
т н е н о п м Ко
26
С а т н ад р н т ы а в П ре
е к о м п о н ен т я м м ра пг о р
26
а
С п рав о ч н а П о дс к а з к
32
я с и с ет м и р е ад к о т р ы м ра г по р
м Рю зе
а а код
м бе
з и н ас ни п а
3S 35 35
в я кдо
а
35
е
37
ы н ь ло р т но К
е всо р по
ва Гл
ы
а 2. Змо актсвн ле М д о
ь СО
37
о с мро плтаф М
й .NET
С рт о и ет л ь н ы Яз ы к Двои чн ы П р о м е ж т чу н ы Ти п О б щ еяз ы к о в а С а т н ад р н т а О сн ов
е блок
и .N ET и п р о гр а м и р о в а н и я .N ET е фа й л ы .N E T й яз ы к ы и п р о срт а н свт а и ме н .N ET я и с п о лн яю щ а я с р ед а я с и с те м а ти п о в CTS ы CLS
в тс н а р тс о П р
а ие м
В а ж н ей ш и П р о с рт а н с вт К а к п о чл у и т м Р ю зе
38 38
я .NET
и н е шРе
ы н ь л о р т н Ко
ы
и в Delphi
к з а кс П д о
ре м и Пр
15 zyxw
я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG 15
и н а в о ра ми м ра пг о р
де р С
й памр игон в ри
н е п р о с рт а н с вт а и ме ь и н фо р м ац и
е
а и ме н .N ET н в D elphi ю
40 40 41 41 42 44 45 45 49 49 50 51 53 54
е вс о р п о
ы
54
л аГ в
а 3. Язы
ы в че ю Кл
к прога м м ирова ни
е сво л
ы н ь л ос н о К
я D elphi
а
56
е и не ж о пл и р
ы в че ю л К
я
е сво л
п Ти
55 zyxwv
а як ы з
57
а Delphi
60
х zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 64
ы ы дн а
П р о с ыт л Б уе
е ти п ы п й ит п й ти й ит й ти п е ит п е ит п е ти п ы
в ти
С и м воль н ы П ер ч и сли м ы В е щ е с вт н н ы С тр о к о в ы С р тк у н ы П р о ц ер уд н ы В а р и а н нт ы
64 65 65 66 66 67 68 76 77
п п ы ы
ы
р о т а р е пО
П р о с ыт С ркт ун ы
е о п е р а от
ы е о п е р а от
ы
д ы и фа й л о в ы
- д о вВ ы в
Ф ай л Т и п и з и рован н ы Т е к с то в ы
77 77 82
е п ер м ен н ы й фа й ы
е фа й л
87 88 91 93
е л :
е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 'V, ',1 : .• "-• ;• '•- • - г: - • ;• - .• 95
м Р ею з ы н ь ло р т но К
е с во р п о
ва Гл
ы
а 4. тк Робарз
р у де ц о П р
а пмар г о
Д и р е к ти в П а р м е рт И сп оль з ован и
ы дл я п роц уед р и ф ун к ц и ы п роц уед р и фну к ц и е ти п и з и р о в а н н ы
м м ра г о П р
ы н ьол р т н К
а н и ое С р д ж
а Delphi
97 97 99 100 102
й й
х к о н с нд т
!
т :
103 103 105 106 107
ы и я в мл уод
е
ь ви д м ост
и ы
е м м ра пг о р
м Р ю зе
ю к ыз я
и
ы и мл у до
П ро г ам М лоуд О б ъ яв л ен и О бласт ы тс о П р
м с пь м ощ
и
ы и и ц к фун
,.
96
П р о фам
а п о лч у е н и
П р о фам
а ш и фр о в а н и
• i . я код
в к л а в и р ау т я
е
ы и ди н а м и ч е к и
е м ас и в
ы
109 109 116 122
е о с р вп
ы
122 zyxwv
л а Гв
а 5. О бе кът
О о св н
ы е о н бт к - ъ о н а г в е и р т
ас л К
ы
П ол О б ласт М о едт С в о й с вт
ы в Delphi
123zyxw
я zyxwvutsrqponmlkjihgfedcbaZYXW 123
о и на ов р и м а р ог р п
124
я и ви д м ост ы а
125 125 126 130
и
ы
т к е ъ бО
О б ъ яв л ен и
е и с о з ад н и
н У и ч от ж е н и
е о б ъ ек т
ы н е в тсе ж Дру
е о б ъ ек т
131 131
а
а
132
ы
е кс а л
132
ы
с й фе ре тИ н
О п р е дл н и Р еали з ац и Н а с л е од в а н и Д и р е к ит в И сп оль з ован и е
м юР з е ы н ь ол р т он К
е и н ет р ф й с а я и н ет р ф й с а е и н те р ф е й с о в а implements е и н те р ф е й с о в ы
е восрп
л а вГ
133 133 134 135 135 136 137
а 6. Б а з о в ы
137
е кл а с с
ы я з ы к
а Delphi
138
с System.Object
са л К
П ер о п р едл н и
138 е м ое т д
в к лас
а TObject
141
с TControl
144
К с ал
с TWinControl
150
К лас
с TForm
151
са л К
е
м юР з е ы н ь ол р т он К
154 е восрп
л а вГ
а 7. П р о д оа ел ж
ы н т ра д на тС
е т не н о кп м о
К о м п о н ен К о м п о н ен К о м п о н ен К о м п о н ен Ди ало г в ы К о м п о н ен К о м п о н ен К о м п о н ен К о м п о н ен 8
ы
154
м и з у чат
ь г р иа фч е с ки
й и н те р йф
с
ы
155
155 156 157 158 160 161 164 165 165 167zyxw
т TLabel т TButton т TEdit т ТМ ет о е к о м п о н ен т ы т TCheckBox т TRadioButton т TRadioG roup т TListBox а н и ое С р д ж
К о м п о н ен т TCheckListBox 172 К о м п о н ен т TComboBox 172 К о м п о н ен т TScrollBar 174 К о м п о н ен т TG roupBox 175 К о м п о н ен т TPanel 176 К о м п о н ен т TActionList 176 К о м п о н ен т TFrame 178 К о м п о н ен т TMainMenu 180 К о м п о н ен т TPopupMenu 180 К о м п о н ен т Tlmage 180 К о м п о н ен т TShape 182 К о м п о н ен т TScrollBox 182 К о м п о н ен т TStaticText 183 К о м п о н ен т Т Timer 183 К о м п о н ен т TPaintBox 184 К о м п о н ен т ы TDriveComboBox, TDirectoryListBox, TFilterComboBox и TFile List BoxzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB 185 Р е змю
186 е
ы н ьо л р т н К
е о с р вп
л аГ в
а 8. П р о г р а м м и р о в а н и г р и а фч е с к о г
ы н р у тк у р тС
й л и тс
186 zyxwvut ы
е с и с п о л ьз о в а н и е о и н те р йф с й л и тс
я п ри н ц и п о
и не ш ы Пв о
е стсо ро к
и ен л Р д з а
е о ксе ч и граф
в О и ртоб а
188 189
П в D elphi
191
ы й и о ксе лч и го
194 й и щ сю я л в а тсо
х м м ра г про
Чт
м м ра г о П р
я
а и н а в ро шф и е
м Рю зе ы н ь ол р т он К
й я
ы
195
202 203 203 204 205 205 207 207 208 210 211 211 214
е о с р вп
а н и ое С р д ж
188
ь
я о ат к о е с о б щ ен и е Ти п ы со бщ ен и й С и с ет м а со бщ ен и й D elphi С п ец и али з и р о в ан н ы е з ап и с и О б р а о кт а с о б щ ен и й С о б ы ит е OnMessage к лас а TApplication И сп оль з ован и е с о б с вт е н н ы х ти п о в со бщ ен и в У е од м л я ю щ и е со бщ ен и я И сп оль з ован и е со бщ ен и й в н рт у и п р и ло ж ен и Ш и р о к в е щ а ет л ь н ы е со бщ ен и я
и не щ б о С
я
я
и н а в о рь ми м ра пг о р
ы н а в о - р о и н т н к е и ъ б Ор о
Р еали з ац и
м а п о л ьз о в а т е л
ы
214zyxwvut
9
л а Гв
а 9. Отл а д к
н и ч и Пр
ы ооб и ш
а п р о гр ам
215 zyxw
к zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 215
С и н та к с и ч е с к и Ло г и ч е с к и т и щ аЗ
м
е ош и бк е ош и бк
и
216 216
и
к 218 а Assert 219 и и с к л ю ч ен и й 220 е олтакд а 225 е п о ш аг м 226 р з н ач ен и й 228 ; р и и з м е н е н и е з н ач ен и й г 230 р и а н а л и з к од а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH Forms..., в резльату окн о View Forms, гд е м о ж н о в ы бр ат ь нжу ю фо р м у . Т еп р ь м ощ ь к ром к д а лв Р а з м у е стя в ас т м н о ги п о сл п о р я кд е
рС а е д
, кдго а оф р м а нисодтха я ю и н с п о ке р т а о в бък е т . Та к е оф р м ы , т о и м ен н о он а и у Properties (С вой аст ) и п осмрит , в ес ь п ер ч ен ь н е п о м е щ а е ст м нжу о в о с п л ь з о вь а т с я п о лз ну к о м е и з н и х и н и ут в н о п о н янт е н еболь ш о й п р акит и в ы хор ш В с е с в о й св т а р а с п р е дл н ы п . О сатн о в и м с я от л ь к о н
прогам м и р о вани я
н а п нерд ка к в о вн ов е д уб т ь с о ж рб а т
м п лан е ь с о з ан д о
, з ай м е с
я е е риакедт рован и е м с п о м п р ок е т е н е т н и ка и х о бвъ к е т , я в и н с п ое к р т е о б ъ кев т . Выиретб е е н а о в д ль н о бо ьл ш о й п ер ч н ь ев с х с в о й т . я н а э к ран е , и дл я подуст а к о е д лт ь н ы м св о й . Н е оист т ь п а гт с у я а кт о г о к о л и ч ве с т а с в о й вс т , . П оэмт у ы и о н и п о в р т яю с т я о т о б ъ ек т а к объуект о о св и т е б о л ь ш и н вс т о св о й ст в и з эотг о сп и ск а . о грп у а м , в корты х о н и р а с п о л ж ен ы в а л ф в и нт о м а н ек о т р ы х и з н и х , н а п р и м е р Caption (З аго л в о к ) и з zyxwvu
25
пгр у ы Action (П о в е д н и е ) . П о умо лч ан и ю а т м е д бу т з ап и сан о F ormi, ч т о и о тбр аж сет я в з агол вк е окн а . П о п р о бйу т е и з м ен и т ь э т о с в о й с вт о , дл я чег о щ е л к н и т е н а п о ле , дг е з а п и с а н о F ormi, и в иед т е лю бо е п о хя д щ е е н аз ван и е , н а п р и м е р ср т о к у "М о е Окн о" . О дн о в р е м н н о с н або р м е тк с а е д бу т м е н я ьт с я н аз в ан и е окн а фо р м ы . И л и воз ь м е , к п р и м ер у , вд а свой вст а — Height (В ы соат ) и Width (Ш и р и н а ) , к о тр ы е оп р е лд я ю т н е п о с р е д вт н н ы е р а з м ер ы окн а . П о п р о бйу т е в ес т и рг и д у е з н ач ен и я лд я н и х и ср аз у ж е в иу д т е и з м ен ен и я н а э к ран е . О ч ен ь в аж н о е с в о й с вт о Enabled (Допсутн о сьт ) . О б ы ч н о о н о в с д ег а до л ж н о бы т ь в с о т ян и и True. П о п р о бйу т е и зме н и т ь ег о н а F a l se и з ап ситу е п р о ек т н а в ы п о лн ен и е (к лав и ш а и л и п и к от гр а м м а Run н а п а н ел и D ebug). Э ф ек т е д бу т з ам етн , ат к к а к в ы н е см о ж ет е о б р аит ь с я к окн у — о н о е д бу т з абло к и ро в ан о . Э т о одбун о и сп о ль з о в ат ь в п ро г ам е , кодг а не о и бд х м о н а в р ем я з абло к и ро в ат ь о е д тл ь н ы е э лем н т ы и н ет р ф й с а и з а п р е ит ь к ни м о д ус т п п о л ь з о в а ет л я . Д але , с п о м щ ь ю с в о й с вт а Icon (П и к от гр ам а ) м о ж н о и з м ен и т ь п и к о т гр а м у , к о тр а я е д уб т с в яз ан а с п р и ло ж ен и е м и е д уб т о тб р а ж ь т с я р я од м с з а го л в к о м окн а . П и к отгр ам у м ожн о н ари со в ат ь сам о у и л и с к о п и р о в а ьт . Д л я н а п о м и н ан и я ф ну к ц и й окн а м ожн о и сп о ль з о в ат ь с в о й с вт о Hint (П о дс к а з к а ) . В п о л е лд я т о тб р а ж ьт с я н а э к ран е к а к п о сд к а з к а с в о й вс т а Hint в оид ст я е тк с , к о т р ы й е д бу п р и н а в едн и и н а с о з ад н н о е окн о к у а з е тл я мы ш и . Н о дл я отг , чотб ы эт о п рои з ош л о , н жун о р аз р еш и т ь ек т с у о тб р а ж ьт с я н а э к ран е , лд я ч ег о щсу евт т с в о й с вт о ShowHint (П о к а з а т ь п о сдк аз к)у , к о тр е до л ж н о бы т ь с а ут н о в л е н о в с о т ян и е True. М ож н о и з м ен ят ь суат с о к н а и ви д р а м к и (св о й свт а BorderStyle и BorderWidth) и л и ц ве т о к н а (Color). М о ж н о и з м ен и т ь в и д рк с у о а (Cursor), к о т р ы й п о я в и ст я п р и н ав е ед н и и рк с у о а мы ш и н а с о з ад н н о е окн о . О бы ч н о вс е п е р ч и с л е н н ы е с в о й св т а п р и сю в т у т в лю бо м о б ъ ек т , и и м и ч ащ е в с ег о п р и о хд с т я п о л ь з о в а ьт с я . О сатль н ы е с в о й с вт а р а с м о рт и м , кодг а ещ е р а з в е р н ем с я к п р о е к ит р о в а н и ю фо р м ы .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK
м о К е н оп т
ы
К о м п о н ен п р о г ам ч е м и с п о л ь з е му о к о м п о н ен
т — э т о объек т , п р есдатв л яю щ и й соб й о е дл т ь н ы й с рт о и ет л ь н ы й бло к ы в о в р ем я п р о е к ит р о в а н и я . К о м п о н е н т я в л е ст я бо ле е ш и роки м п о н я ти е м , е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK тне ме лэ у.инея апврл К а к и э л ем н т пу р а в л е н и я , е в Windows п о н яит т сп ос бе н п ри н и м ат ь и о бр а ыт в ат ь с о б щ ен и я Windows.zyxwvutsrqponmlkjihg
ы н тр а д н т С
е ком тнпое
ч аст са в т л я ю гр а фи ч е с к о г в о ль н рг а м е дл ь н у
С а т н да р н т ы м о и с п о л ь з ю у ст т до в л ь н о слож н ы м и а е в су т о ю п рг у
ом К н е п
ы
и к о м п о н е н ат м я лд я с о з а д н и о сло ж н ы
и н а з ы в а ю ст я гр а фи ч е с к о г
я та к и о и н ет р ф й с
е к о м п о н е н ты
, к о тр ы
а п о л ь з о в а ет л я
е к ом би н ац и , к о т р ы е в ы е дл я ю с т о и н те р ф й с а . П о своем у в н р т уе н н е м у с о ед р ж а н и . Ф о р м у о жт е м ожн о р а с м а рт и в а т ь к а к к о м п о н ен т т в п али рт е к о м п о н е н от в . С атн адрнт ы е к о м п о н ен т у в о к н е Tool Palette. Р а с м о рт и м н ес к о ль к о с а тн а д р н т ы
е н аи бо ле . И з н и х с о я в о е дл т ь н ы е г рп у т бы т ь до ю о н и м оуг , отх я е е п и к то ы в ы ед л н ы в от х к о м п о н е н то в
е ы .
т TLabel
К о м п о н ен р че м э от т етк с з о в а ет л я , отх п и си . Р а с м о рт и
т TLabel .(Н а дп и с ь ) и сп о ль з есту т н ел ь з я и з м ен ят ь н е п о с р е д вт н н я в п ро г ам е п р и н е о б ихд м о с т м м о и е тд к у р або т ы с н а дп и с я м и
1. С о з адй т е н овы 2. П о м есит е н а дп и с Standard и вдаж
26
й п р о ек
т ит п ь в фо р м у ы щ ел к н и т
л ав Г
я лд
я о т б р а ж ен и о ч ер з гр а фи ч е с к и и м ожн о п с р м уе д о т . В ы п о лн и т
я е кт с е юс л у е д щ и
а в фо р м е й и н те р ф е й ь и з м ен ен и е д е й с тв и я
, п р и с п оль е н ад .
а VCL Forms Application. . Д л я э отг о в окн е Tool Palette н ай ид т е п рг у е кн оп ко й мы ш и н а к о м п о н ен т е TLabel. М о ж н
1. Зноакм с т во
с о
с р оедй
пр о г ам м и р о вани я
-
у о zyxw
щ ел к н ту ь о ид н р а з , а з ает м щ ел к н т у ь в н жун о м м ес т е фо р м ы . П р и э от м сраз м ожн о з а дт ь н е о б хид м ы е р аз м ер ы , н ав о д я к у а з е тл ь мы ш и н а о гр а н и ч и в а ю щ и е к в а рд т ы и п ер м еш а я и х п р и н аж от й л ев о й кн оп к е мы ш и н а н жун о р а с от я н и е . оЧтб ы а л ди у т ь н а дп и с ь и з фо р м ы , в ы едли т е е е (щ ел к н и т е н а не мы ш ью , п р и э от м о н а в ы едли ст я ч ер н ы м и к в а рд и т к а м и ) и н аж м и т е к лав и ш . алденУ и е м ожн о вы п олн и т ь а кт ж е с п ом ощ ь ю к о н ет к с нт о г о м ен ю ес л и щ ел к н ту ь п рав о й кн оп ко й мы ш и н а о б ъ ек т . Что б ы о мт е н и т ь в ы де л н и е щ елк н и т е кн оп ко й мы ш и в лю бо м м ес т е з а п р е дл а м и н а дп и с и . П о э к с п е р и м е н ит рй у т е с р а з м е щ е н и е м и уадлен и е м н а дп и с е й . 3. П ерм ист е н апд и с ь в догру е м ес т о фо р м ы ом д ет м п е р ат с к и в а н и я . Д л я эотг а сн т у о в и т е к ау з е л т ь мы ш и н а н а пд и с и , щ елк н и т е кн оп ко й м ы ш и и , ердж уи ва е е н а ж отй , п ервди н ь т е н ап д и с ь в ог ру д е м е ос т . К дог а н а пд и с ь з ай м е т н ж ун о п о л ж ен и е , опитс у е кн оп к у мы ш и . Обират е в н и м ан и е н а от , чт о п р и п ератс к и в ан и и о б ъ ке т а фан и ц ы н пад и с и бу д у т п р и в яз ан ы к раз м оетч н о й к с ет е фо р м ы 4. И з м ен и т е з н ач ен и е с в о й св т а н а пд и с и Name (И м я ) н а M yF irst L abel (п о м оулча н и ю о н а н аз ы в ал с ь L a bell) . Дл я эотг о в и н с п е к от р е о б ъ ек т в щ ел к н и т е с в о й вс т е N ame (И м я ) и виед т е р о с тк у "MyFirstLabel". ибедУсьт , ч т о в ы и з м е н яет е с в о й вс т о н а пд и с и , а н е форм ы (э т о ти п и ч н а я ош и бк а н ови чков) . Д л я эотг н апд и с ь в фо р м е од л ж н а бы т ь в ы ел н д а , а в раск ры в аю щ ем с я сп и ск е в в не р х ч ас т и и н с п еко тр а о б ъ ек т в одл ж е н бы т ь в ы бра н о б ъ ек т L a b e l l : TLabel (кдог т н ап и сан о M yF ir st L a be l: TLabel). П осл в ы и з м ен и т е и м я н а пд и с и , ат м е д уб в од а н ж у ог о и м ен и н апд и с и з афи к си рйу т е его , н аж в клави ш у .
у е й у , , о я е . н а о й а е
5. И з м е н и т е сам у н а пд и с ь . Д л я эотг о в ы б ер и т е в и н с п е к от р е о б ъ е к от в с в о й с вт о Caption (в да н н о м ч с ал у е м ожн о п ер в с т и к а к н а дп и с ь ) , виед т е н ову ю ср т о к у "М о я п ер в а я н а дп и с ь ! " и н аж м и т е к лав и ш у . В в едн н ы й е кт с т п о я в и ст я в фо р м е . О браит е вн и м ан и е , ка к и з м ен яю ст я фан и ц ы н а пд и с и . Э т о с в я з а н о с о с в о й св т о м AutoSize (П о дг н к а р аз м ер а) . Е сл и с аут н о в и т ь с в о й с вт о AutoSize в с о т ян и е F a l se , т о авотм аит ч еск о г о и з м ен ен и я гр а н и ц п р о и ос и х д т ь н е бу едт . Г р ан и ц ы можн о и з м ен ят ь чв р н у ю . Д л я э отг о в ы е дл и т е о б ъ ек т и н а в еид т е к р су о р мы ш и н а о нд у и з ч ер н ы х м е от к гр а н и ц ы . К одг а о н п ри м е т в и д дв н у а п р ав лен н о й с рт е л к и , н аж м и т е кн оп к у мы ш и и з адй т е н е о б и хд м ы е р аз м ер ы .
6. И з м ен и т е ц ве т фо н а н апд и с и . Д л я эотг о в ы б ер и т е с в о й св т о Color (Ц в е)т , щ е л к н и т е н а рс т е л к , вы бери т е в раск ры в ш ем с я сп и ск е ж еылт й ц ве т и щ елк н и т е н а н ем . 7. И з м е н и т е ш ри ф т и ц в е т етк с а н а дп и с и . Д л я э от г о в ы б е р и ет с в о й с вт о Font (Ш р и фт ) и щ ел к н и т е н а кн оп к е с ртем я от ч к а м и . В п ол е Font и з м е н и т е ш ри ф т н а Ar i a l , сит л ь н а Bold I t a l i c , а р а з м е р н а 32. В р а с к р ы в а ю щ ем с я сп и ск е в ы б ер и т е к расн ы й ц ве т и щ ел к н и т е н а кн оп к е ОК . 8. Д о бав ь т е к фо р м е е щ е онд у н а пд и с ь . Н а эот т р а з в о сп о ль з йу етс ь гр и д у м м ое т од м — щ е л к н и т е н а к о м п о н ен т е TLabel, п ер м есит е к у а з е лт ь мы ш и в п рои з в о ль н о е м ес т о фо р м ы и ещ е р а з щ елк н и т е кн оп ко й мы ш и . П р и э от м в фо р м е в то м м ест , дг е н оахид лс я к у а з е тл ь мы ш и , до лж н а п о я в и ьт с я н ова я н а пд и с ь . 9. И з м ен и т е з н ач ен и е с в о й свт а N ame н о в й н а дп и с и н а M ySecondLabel, а з н а ч е н и е с в о й свт а Caption — н а "М о я вотра я н а дп и с ь !" . е в фо р м е н а дп и с и , дл я ч его о б в и ед т е 10. С едлай т е ви д м о й п ан ел ь Align и вы елди т и х н а фо р м е к у а з е тл м мы ш и п р и н аж от й л ев о й кн оп ке . И сп о ль з йу т е раз ли ч н ы е сп ос б ы вы равн и ван и я и з п а н ел и Align и о ц е н и т е р ез л ь аут . 11. Т еп ер ь в ы е дл и т е фо р м у , дл я ч ег о щ ел к н и т е в лю бо м м ес т е фо р м ы з а п редлам и н а пд и с е й . 12. И з м ен и т е с в о й вс т а фо р м ы : свой свт у N ame з айд т е з н ач ен и е LabelE xam ple, а с в о й свт у Caption — з н а ч ен и е Н а дп и с ь .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO
о мК п о н е т ы
27
13. И атк , в ы соз адл и п ро ст е п р и ло ж ен и е , к о тр е , п равд , п о к а ч т о н и ч ег о по . В ы п о лн и т е его . Э т о м о ж н о ес л д а т ь о нд и м и з р те х с п о с б о в : л ез н о г о н е е дл а т щ ел к н у в н а п и к от г р а м е Run (В ы п о л н и ьт ) и з п а н ел и о л т а кд и , в ы б р а в в гл а в н о м м ен ю к о м ан д у Run => Run и л и н аж в к лав и ш у . П р и э то м н а э к р ан е од л ж н а п о я в и ьт с я фо р м а , к а к п о к а з а н о н а р и с . 1.7. 14. Щ ел к н и т е н а кн оп к е з а к р ы ит я окн а в в е нр х е м п р ав о м лг у у и з а в ер ш и т е п ри ло ж ен и е . Э т о ж е м о ж н о с е лд а т ь и в с р ед е D elphi, и с п о ль з у я к о м ан д у Run^Program Reset (В ы п о л н и ть ^ П е р су та н о в к а п р о гр а м ы ) и л и н аж в ком би н ац и ю к лав и ш .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Мо
я перва оМ
Ри с
. 1.7. Форм
Вс е сло в а и е тк с ы яз ы к е . Вс е и едн ит фи к аот р ы од л ж н ы и сп о ль з о в ат
ом н К е п
я ваор т
я нпд а и с я си п д а н
а с надпи с ям
, к о тр ы
ь от л ь к
ь
ь
и
е о тб р а ж ю с т , к о т р ы о а н гл и й с к и
я н а э к ран е
е п р и м е н я ю ст й алф в и т
, м о ж н
о в о ид т
я н е п о с р е д вт н н
ь н а с р ку о о в п р о г ам е
м
,
.
т TEdit
В к о м п о н ен т е T E dit (П о л е в оа д ) рхан и ст в ан н ы й к о м п о н ен т к а к в о в р ем я р а з р а б о кт и , ат ид м ы й в п о л е в оа д , яв л ест я з н ач ен и е м с в о й св т м аль н а я лд и н а ) о п р едля т м ак си м аль н о е к о л и ч е с вт з н ач ен и е с в о й вс т а MaxLength р а в н о 0, т о к о ли ч есвт С п ом щ ь ю с в о й св т а Font м о ж н о с а ут н а в л и в а т Readonly (Т о ль к о ч ет н и е ) саутн о в и т ь в True, п о л ь з о в а е тл ь н е см о ж е т и з м ен ят ь етк с т п ол я в оа д п о л я в од а вы п олн и т е юс л у е д щ е .
я е тк с , к о тр ы й м ожн о п о м ещ ат ь к и в о в р ем я в ы п о лн ен и я . Т ек с т , в и о MaxLength (М а к с и а Text. С в о й свт о си м вол в в п ол е в оа д . Е сл и о си м вол в н и че м н е о гр а н и ч е н о . ь ш ри ф т е тк с а . Е сл и с в о й св т о т о в о в р ем я в ы п о лн ен и я п р о г ам ы о п он и м ан и я р або т ы . Д л я члуш ег
1. С о з адй т е н овы й п р о ек т ти п а VCL Forms Application. 2. Р а з м ес ит е к о м п о н ен т T E d it в ф о р м е . К о м п о н е н т T E d it н аохид ст я в грп у е Standard, ка к и н пади сь . Р аз м ещ ен и е ткаж е м ож н о стале д ь н ес к о л ь к и м и сп осбам и . 3. И з м ен и т е раз м е р п ол я в оа д . Д л я э отг о ас н т у о в и т е к у а з е тл ь мы ш и н а о нд о м и з ч ер н ы х к в а рд и т к о в и , ерджуи ва я кн оп к у мы ш и н а ж от й , п ер м есит е ч ер н ы й к в а рд и т к (а с н и м и гр ан и ц у п ол я в оа д ) в н ж ун о м н ап р ав лен и . сантУ о в и в н е о б их д м ы й р аз м ер , оптсиу е кн оп к у мы ш и . 4. П ер м есит е п о л е в од а в н ж ун о е м ес т о м о ед т м п е р та с к и в а н и я , ат к ж е , к а к э т о дела о с ь с н а пд и с ь ю . 5. сатУн о в и т е з н ач ен и е с в о й св т а Name н а MyText. Д л я эотг о в и н с п е к от р е о б ъ ек е от в щ е л к н и т е н а с в о й св т е N ame и в иед т е р сот к у "M yText". К а к и в часлу с н а пд и с ь ю , биедусьт , чт о в ы и з м ен яет е с в о й св т о п ол я в оа д , а н е фо р м ы . Д л я э от г о в з а го л в к е п о л я в ы бо р а в в е нр х е й ч аст и и н с п е к от р а о б ъ е к от в од л ж н о бы т ь н ап и сан о E d i t l : T E d it .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC
28
л ав Г
1. Зноакм с т во
с о
с р оедй
пр о г ам м и р о вани я
6. В ы бери т Н аж в о в р ем 7. И з м ен и т щ елк н и т н я е тс ч с ал у с рт е л к ц в еот
е в и н с п е к от р е о б ъ екот в к лав и ш у , з афи к си рйу т я в од а и з м е н я е ст я е кт с е ц в е т е тк с а в п ол е в од е н а з н ач к е " + " р яод м я н а "—", и п о яв л ест я сп и со е с а м и с п о л ь з ес т у я к а к с в о й свт о , р а с п о л ж ен н о й в э от м . Н а й ид т е в н е м с и н и й ц ве
8. В ы лие дт е а з н ач ен и 9. Н аж в к лав и ш п о я в и ст я в п ол е в од Н о п о сл е п ол я в од ч ен и е с в о й свт ат к и м о браз о 10. З а в ер ш и т
фо р м у е с в о й с вт
с о п оле т
е з н ач ен и е св о й ст а Name фо р м ы н а EditBoxExample, а Caption — н а П ол е в о да . е р а з р а б о тн н у ю п ро г ам у . П р и эот м н а э к р а н е у , з ап ситу и з о б р аж ен и е , п о к а з а н н о е н а р и с . 1.8. В олти ч и е о т н а дп и с и , етк с т а м ожн о и з м е н я ть , з а п о м и н а т ь и и з в л ек ат ь и з фе р б у а о б м ен а . с а ут н о в к и з н ач ен и я True лд я св о й свт а Readonly и з м ен ят ь с о ед р ж и м о е а ч ер з гр а фи ч е с к и й и н ет р ф й с п о л ь з о в а е тл я ж у е е д уб т н ель з я . З н а а Readonly м о ж н о м ен ят ь и з п р о гр а м ы , з а п р ещ а я и л и р аз р еш а я м п о л ь з о в еа л т ю в о ид т ь да н н ы е .
.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED
ло П Ри с
т ТМ е т К ом п он е к такест
т в
о Text и в еид т е ег о н о в е з н ач ен и е . е в едн н ы й етк с . О браит е вн и м ан и е : п о л е в од а фо р м ы . а н а си н и й . Д л я э отг о в и н с п е к от р е о б ъ е к от в с в о й св т о м Font. П р и эот м з н а ч о к "+ " и з м е к свой ст в о б ъ ек т а F o n t , к о т р ы й в да н н о м . В ы бери т е с в о й с вт о Color и щ е л к н и т е н а . П р и э от м р аск р ы в аест я сп и со к од пс у т н ы х и щ ел к н и т е н а н е м .
. И з м ен и т
е п р и ло ж ен и е
ом К н е п
в с в о й с вт
. 1.8. оП л
е водв е ввод
а
а
о т т МеТ
о (Отсалб ь п р о см а т ) п рнед аз н аче н л д я ыв до а н а э к ра н н ес к о л ь и р о тс . С вой ст а MaxLength, Font и Readonly облсат и п р о см т а ан л о и г ч н ы в с от е ю в ус т щ и м с в о й с ат м Лп о я вавод . С вой ст о Text серожди т в е с ь ек тс т о б л са т и п р о с м р та он д а к о э т о с в о й вс т о п о д ус т н о отл ь к о в о в р ем я в ы п о л н ен и я . С вой вст о Lines соердж и ел ь д о н т ы е срт о к и текст а о бласт и п р о с м ат , о н о допсутн о к а к в о в р ем я р аз р абокти , ат и в о в р ем я в ы п о л н ен и я . С вой вст о Wordwrap оп релдят , у д уб т л и п ер н оси ьтс я с рт о к и в ы ящ о д х и е з а п релд ы о б лас т и п р о с м ат , и л и о н и оанст у я н ев и д м ы м и . Е сл и в м ес т о рс у к о г о е тк с а н а э к ран е п о яв и л и с ь п рои з воль н ы е си м волы , т о н ж у н о и з м ен и т ь з н ач ен и е с в о й св т а Charset (Н а б о р си м вол в ) о бъ ек т а F on t (Ш р и ф т) . Д л б о л ь ш и н с вт а ш р и ф от в п о хя д щ и м и з н ач ен и ям и с в о й с вт а Charset яв л яю тс D EF AU LT_CH ARSET И Л
Ч от б
ы лчуш
е и з ч уи т
х , т к , я я
И R U SSI AN _C H AR SE T.
ь о бласт
ь п р о с м о рт а
, в ы п о л н и т
е юс л у е д щ и
е де й с в т и я
.
1. С о з адй т е н овы й п р о ек т ит п а VCL Forms Application. 2. Р аз м есит е о бласт ь п р о с м рт а в фо р м е ат к ж е , к а к едла и р ан е е лд я н а дп и с и и л и п ол я в оа д . 3. сатнУ о в и т е п о ях д щ и й раз м е р о бласт и п р о с м о рт а и п е р м си т е о бласт ь п ро с м ор т а в о дб н у о е м е с от . 4. И з м ен и т е з н а ч ен и е в ойс т а Name тсаолб и п р о см т а н а MemSample, лд я чге о в и н сп оекрт е объоект в щ елкн и т е н а свой ст е Name и вивдет е ок р т с у "MemSample". К а к и в ч с ал у е н а пд и с и и л и п ол я в ао д , биеуд сть , чт о в ы и з м ен и л и с в о й с вт о zyxwv
о мК п о н е т ы
29
о бласт и н с п ек отр и м ен 5. В ы бери т окн З ак о н ч и
и п р о с м о рт а
, а н е фо р м ы . В р ас к р ы в аю щ ем с я сп и ск е в в е рн х е й ч аст и а о б ъ е к от в од л ж н о бы т ь н ап и сан о Memol: TMemo (п о с л е и з м ен ен и я и а т м е д уб т MemSample: TMemo). е с в о й с вт о Lines и щ ел к н и т е н а кн оп к е с рт е м я то ч к а м и — п о яв и ст я о р еа д к о т р а с рт о к String List Editor. Вивде т е етк с , п о к а з а н н ы й н а ри с . 1.9. в в о д ет к с ат , щ ел к н и т е н а кн оп к е ОК .zyxwvutsrqponmlkjihgfedcbaZYXWVUT
Ри с
6. В ы елди т и м ен и з н ач ен и тсалбО ь 7. З аписту н и е , п о к а з а н н о П о э к с п е р и м е н ит р й у т и з фе р б у
. 1.9. Теск т
, вво ди м ы
й в роетрдка
е срот
к
е фо р м у . Д л я э то г о щ елк н и т е лев о й кн оп ко й м ы ш и н а фо р м е ил и н фо р м ы в р аск р ы в аю щ ем с я сп и ск е и н с п е к то р а о б ъ е к то в . И з м е н и т е с в о й с вт а N ame н а MemoBoxExample, а с в о й с вт а Caption — н партомс . е п р о г ам у н а в ы п о лн ен и е . Н а э к р а н е до л ж н о п о я в и ьт с я и з о бр аж е е н а ри с . 1.10. П о п ройбу т е в оид т ь е тк с ы раз ли ч н о й дл и н ы е с р еж и м ам и в ы ед л н и я е тк с а , с о рха н ен и я и и з в л еч н и а о б м ен а . б О с ла т
Строк Строк Строк Строк Строк Строк
Ри с
ь п р о с м орт
а
а
е а zyxw . я
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML
а 1 а 2 а 3 а 4 а 5 а 6
. 1.10. Онк
о с ком по не т
8. З ав ер ш и т е р аб о т у п ро г ам ы . 9. В и н с п ек от р е о б ъ екот в и з м ен и т е з н ач ен и с м ор т а MemSample н а F a l se , а з н а ч ен и с в о й свт о о п р е дл я т н али ч и е и л и в с ти о у
м тм ше
о
е с в о й св т е с в о й вс т е п ол
а Wordwrap област и п ро а ScrollBars — н а ssBo t h (э т о с п р о к рту и ) .zyxwvutsrqponmlkjihg
л ав Г 1. Зноакм с т во с о сроедй пр о г ам м и р о вани я 30 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
10. Н аж п р о с м о рт до б а в л я т 11. З а в ер ш и т 12. Чот б ли чн ы м
о м К по не
в к лав и ш
у , з аписту е п ро г ам у ещ е р а з . В виод т е етк с т в о бласт и а д о ет х п о р , п о к а о н н е в ы й ед т з а п р ав у ю гр а н и ц у . П о п р о бйу т е ат к ж е т з а н и ж н ю ю гр а н и ц у . ь н овы е с рт о к и , п о к а о н и н е в ы й уд е р або т у п ро г ам ы . ы лч у ш е п о н ят ь р або т у о бласт и п р о с м о рт а , п о э к с п ер и м ен ит рйу т е с раз и с ау т н о в к а м и свой ст в Wordwrap и ScrollBars.zyxwvutsrqponmlkjihgfedcbaZYXW
т TButton О бы ч н
п о лн ен и щ ел к н ту д е й с вт и е н а ж ит н ит
о с п ом ощ ь ю к о м п о н ен т е к а ог - ли б о фр а гм е н т ь н а э лем н т е пу р ав л ен и . П р и э от м к н о п к а п р и н и м а е К н оп ка м можн о п ри св аи в ат е та к о й к ом би н ац и и к лав и е слюеуд щ и е д е й с тв и я .
1. С о з адй т е н овы й п р о ек 2. В и н с п е к то р е о б ъ е к от E xam ple, а св о й свт
а T Button (К н о п к а ) п о ль з о в аетл ь и н и ц и р еу т вы а код а и л и ц ело й п ро г ам ы . Д ргиу м и словам и , ес л я T Button , т о п р о г ам а в ы п о л н яе т о п р едлен н о т та к о й в и д , тд бу о о н а н аж т . ь ком би н ац и и б ы срты х к лав и ш . В о в р ем я в ы п о лн ен и ш э к в и в а л е н тн о щ ел ч к у мы ш и н а кн оп ке . В ы п о л
т ти п а VCL Forms Application. в и з м ен и т е з н ач ен и е с в о й с вт а фо р м а Caption — н а К н о п к а .
3. П о м есит 4. И з м е н и т
е кн оп к е з н а ч е н и
у в фо р м у е св о й свт
. а N ame к н о п к
5. И з м е н и т вн и м ан и е п о дч е р к н о т у й п р и св о ен
е з н ач ен и е с в о й вс т : в н апд и с и н а кн оп к . В да н н о м ч с ал у а к ом би н ац и я к л а в и
и е я -
ы N ame н а B u t t o n -
и н а M yButton.
а Caption к н о п к и н а &Щтакл е е кб у в а , п ер д к о тр й о с ти е э т о к бв у а Щ . Э т о о з н ач ет ш б ы с рт о г о вы з ов а .
е п р о г ам у 6. Н аж в к лав и ш у , з ап ситу и з о б р аж ен и е , п о к а з а н н о е н а р и с . 1.11. 7. Щ е л к н и т е н а кн оп ке . П р и э от м к н о п к а п ри н и м ае ат . Т а к к а к с к н о п к о й ещ е н е с в я з а н ка ой - ли б н а ж ит е кн оп к и н е п р о и осихд т . 8. З а в ер ш и т е р або т у п р о г ам ы .
. П р
и эо т
ь з де с ь . О б р аит т си м во л "&", ед бу , ч т о етп ер ь кн оп к
м н а э к ран
т ат к о й ви д о код , т о н и к а о
е п о я в л я е тс , тд бу
о он й р еак ц и
е т е я
а н аж
и н а
л сЕ и в ннзави и к н оп к и , кор то е с т е аж рбо т я н а энакр е , он д а и з бк у в нкречупдо а т , т о эт о зн ичат , чт о кн пок е пнеиоврс а кимбон цаи я бы р ты с х и в ша л к . Ни таж е а лк ишв и с о т нкру еч дпо й овк у б й е д и п вр т к и в ц з т ак и к н оп к и , аинчгола о кщч л е у ым ш и н а н йе . Н о пр и эо т м ним до хбо е о т ы а в и ч у ь ти с г е р р и рк д а лк с а у ы р у ит в а л к , т ч о н е вд г е с а ун бо д .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC
Щ т а к ле ' •
Ри с
од л ж н ни
о мК п о н е т ы
В да н н о а бы т й р е ги с т
м п р и м ер ь п ер к л ю ч ен р (дл я о п ер аит в н о г
е лд
•
ь зсед
ь j
• ',
. 1.11. При м е
я и сп оль з ован и а н а рс у к и о п ер к л ю ч ен и
р форм
й яз ы к
ы с кно п к
я ком би н ац и . К р о м е от г я н а в е рн х и
й
и б ы рс т ы , одлж е й р е ги с т
х к лав и н и с п о л ь з о в аьт с р н е о б их д м
ш к л а в и р уа т
а я в ер х о н аж т
ь
31
к лав и ш ни
у и л и к лав и ш у , п р и э от м п о с то я н н о бе д у т в к лю ч е н в ер х й р е ги ср т , о ч е м го в р и т п о сд в е ч н н а я л а м п о ч к а CapsLock). ь ес л и т Ч о е дл а ь т , есл и в н а з в а н и и кн оп к и долж е н о т б р а ж ьт с я си м в о л "&"? Вде п о м е си т ь ег о в н а з в а н и е , т о о н елсад т ю ус л е д щ у ю к бв у у п о чд е р к н о т у й , а са м в и ед н н е т е д уб . оЧтб ы р еш и т ь э т у п р о б л ем у , и сп о ль з есту я с ю л уе д щ е е п рави ло : си м в о л "&" о бт р а ж с е я в н аз ван и и кн оп ки , есл и в св о й свт е Caption з а п и с а н ы дв а сотящ и х п од ря д си м в о л а — "&&". Н а п р и м е р , чобт ы н аз в ан и е кн оп к и и м ел о в и д T h is & Th at, в свой вст о Caption н ео б хид м о з ап и сат ь р сот к у "This && That". П р и эот м н и к а я к о м би н ац и я к лав и ш б ы срт о г о вы з ов а кн оп к е н е п р и с в а и в а ест я . Н е б о й е ст ь э к с п е р и м е н ит р о в а т ь с э ит м и к о м п о н е н та м и . П о п р о бйу т е и з м ен ят ь иг р уд е и х с в о й свт а . шд уХе , ч т о м о ж н о се л д ь а т , — э т о н а ршу и т ь р або т у D elphi (чт о к р ай н е м а л о в е р нят о ) . Тодг а п р и с ет д я в с ег о ли ш ь п е р з а п ис т у ь п р о г ам у , а в к р а й н е м ч а с лу е — п ер саутн о в и ьт .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE
а вр е П
я про г ам м Т еп р п р о г ам у
и н а пд и с ь ю р ай се т р аз н о рош о г е о ч ей а с т фафи к и п о яс н яю щ и п р ое й с т ш и С ей ч а
а
ь в ы жу е . Э т о е д уб , к отру ь к а к м о ж н м ож н о с к аз ьт и гарм о н и ч н , вн ш у ае и в ы р аз и т ь е н а пд и с и х ч х я а с ул с п р и сп у т и
1. оСзйадт
е про ек
и м ет
е н е о б и хд м ы
е з н ан и
т п р о с ет н ь к а ю м ожн
о ка е оф рм и т , чт о п рогам о о фо р м л ен н ы т о дв ер и е к п р о г ам е в с е нф у к ц и о н а л ь н ы , и п о яв л ю щ и ес , к а к н ап р и м ер м к р аз р аб о кт
о лчшу
т ти п
2. Р аз м есит е н а не с п ан ел и Align и л п о я щд х и е р аз м ер ы 3. Н аз о в и т е п ер в у ю Caption). 4. Д л я н а дп и с и в ы б ер и т э т о с де л а ь т ) . 5. С о з адй т е о б р а б о чт и к 6. Дл я созанд и я обрчаоит к о к ет в в ы б р ат ь к д а вл (Щ елчок) . Рсямазтеу а к т ъ ое б . В н аш е м
я п р о г ам а к в ы в оид т ь оэ т у р ч е аю в с т й и н ертфй с
, п рева е п ер в о
я лд , и м е ю щ а ь н а э к ран
я от г
, чотб ы с о з адт ь с в о ю п ер в у ю я и н те р ф е й с с дмву я к н о п к ам и , ат к и буи р ат ь с э к ран а . П о сат т н е з а м ы с л о в ыа т й гр а фи ч е с к и й и н ерт ф й с . О б т п о ое ж д к , .т е . п о ви д у и н ертфй са . Хо , гд е и н иут в н о п о н я нт о н аз н ач ен и е вес х . П о н я тн о , чт о н ев о з м о ж н о о тл ь к о в а м с т р де и е особен ост и п р о г ам ы , п оэ мт у о дл ж н ы бы т ь я п о с дк а з к и , и фай л сп р ав к и . Т оль к о в м ас ы х я п р о фа м а , м о ж н о эотг о н е е л д ьа т . й п р о фам ы , э т о н е з ай м е т м н ог о в р ем н и .
а VCL Forms Application.
м вд и в ч р ну ю
е кн оп к
и и н а пд и с ь
. И сп о ль з у
, п о сатр й етс
я сп о с б ь и х с и м е рт и ч н о
ь расп о л ж и т
ы в ы рав н и в ан и
я , вы бра
в
. кн оп к
у В ы ов
д н а дп и с и
е п о хд я щ и
й раз м е
и со бы ит
сча ул
й лд я н а ж и т а со б ы и т я н и жа т у Events (С обы ит я) , и н сп оект р о к ъб т е е э т о бе д у т кн оп к
7. Щ е л к н и т е мы ш ь ю н а п о яв и в ш ем с и D elphi м о м е н та л ь н о п ер н ес лд я о б р а б о чт и к а с о б ы ти я и с уа т н о в и н е о б х ди м ы й код . ю в и ед т е с юл е у д щ и й код 8. чнВ ру Labell.Caption := 'Мо я па в р е
, а оврту
ю — О ч и с тк
р ш р и фт
а (в ы ш
я к н о п к и . я кн оп к и н иодебмх , д г е е у делс т в ы б р ат в о лд ж е н о бр ж а т а Bu t t o n l с н аз в н и е
а (св о й свт е го в р и л о с ь
о , к а
к
о в и н сп оекрт е объ ь ос бы и т е O n click ь н р а ос т й к и н ж у ог о м Выов д н а пд и с и .
я сп рав а о т с о б ы ти я O n c lic k б ел о м п оле т в а с в р е д а к от р к о ад , дг е седла т з а го т в к т к р ус о р н а от м м е с т , дг е н жу н о в ес т
, у и
. 'zyxwvutsrqponmlkjihgfedcbaZYXWVUTS я ' па м а р г о р ;
9. П роелдай т е т о ж е сам о е с о вотр й к н о п к о й , дл я к о т р о й в и ед т е ат к о й к од . L a b e l l . C a p t i o n := ' ' ; zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE
32
л ав Г
1. Зноакм с т во
с о
с р оедй
пр о г ам м и р о вани я
10. З ап суит ски 11. З а в ер ш и т
е п р о г ам
у и п о щ елк ай т
й и н ет р ф й е работ
с с о з да н н о у п ро г ам ы
й п р о гр а м ы
о я павре
ис Р
. 1.12. и кс е ч и ф а р Г
е н а к н оп к ах . Н а р и с . 1.12 п о к а з а н гр а фи ч е . .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG
я пм ар го
й й е фр ие т н
а
с по в р е
й м а р пг о р
ы
П о л н о с ьт ю л и с ти н г в аш е й п ер в о й п р о г ам ы п р и в ед н н и ж е .zyxwvutsrqponmlkji unit FirstProg; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls; type TForml = class(TForm) Buttonl: TButton; Button2: TButton; Label1: TLabel; procedure ButtonlClick(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Forml: TForml; implementation {$R *.nfm} procedure TForml.ButtonlClick(Sender: TObject); begin 1 Label1.Caption := 'Мо я па в р е я ам рго п ; end;
procedure TForml.Button2Click(Sender: TObject); begin Labell.Caption := ''; end; end. И з чу и в л и с ит н г , в ы н ай етд е и м ен а с о з ад н н ы х в ам и о б ъ е к от в и в ы в о ид м ы х н а дп и с ей . Бо ль ш е о б э о т м л и с ит н г е го в р и т ь н е ем д б у , п о к а н е п оз н ак ом и м с я с о с н о в а м и о б ъ е к нт о - о р и е н ит р о в а н н о г о яз ы к а D elphi. оч Х у от л ь к о о м т еи ь т , чт о н ес м о рт я н а ог ром н у ю р а б оу т , корту ю од л ж е н п р о едл а т ь к о м п ь ю ет р п о вы од у н а экра н с о з адн н о г о в ам и окн а , о бра окт е с о б ы ит й (дл я ч ег о н ео бихд м о в з а и м о ед й с в т и е с с и е тм о й Windows п о п ерадч е со б щ ен и й ) , с о з да н и ю к од а п о о б р а окт е к р и т ч ес к и х с и а уц т и й zyxwvu
еП р ва я
пр о г ам м а
33
и .т .д , п р о г ам а , с к о т р о й р аб оет т п о л ь з о в а е тл ь , о ч е н ь к о р кт а я . В н е й п о к а з а н ы от л ь к о т е ф р а г м е н ты , в к отры х н е о б и хд м о едл а т ь и з м ен ен и я . Вс я о сатль н а я ч аст ь о гр м н о й п ро г ам ы ск ры т а в н р а ед х D elphi, и ва м с н е й н а п ерво м э ат п е н е п р и ед т с я р а б о ьт . Э т о о нд о и з п р еи мщ у ес т в D elphi. В дигру х яз ы к а х п р о гр а м и р о в а н и я вы в ои д с т я го р а з д о боль ш е к о ад , с к о тр ы м н д р ут е е р а б о ть . Т еп ер ь н еск о ль к о сло в о б о ф р м л ен и и и н те р ф й с а . К одг а у в а с в с ег о р т и о б ъ ека т , т о н дре т у о и х расп о лаг т ь вч р н у ю , п ер м ещ а я э лем н т ы н а н ж ун ы е м ес т а и з а дв я н е о б и дх м ы е р аз м ер ы . Н о кодг а и н ет р ф й с од с а т ч н о з а гж р у е н , и п р и эот м саутн о в лен а од с а т ч н о м елк а я с ек т а н а фо р м е , т о одбун е е п о л ь з о в а ьт с я п а л и рт о й сп ос бо в в ы рав н и в ан и я . Р а з м ер ы с е кт и , к а к и м н о ги е рг и д у е н а с рт о й к и с р ед ы Delphi, м о ж н о з атд ь в окн е Options, к о тр е м ожн о о кт р ы ьт , в ы б р а в к о м ан д у м ен ю Tools^Options.... я н а с рт о й к а Grid Size, В окн е в ы б и р а е ст я в к лад а Windows Form Designer, дг е н оаихд ст с п ом щ ь ю котро й и усатн ав ли в аю ст я р аз м ер ы с е кт и лд я ф о р м ы . ь ск е т у ) В э от й ж е грп у е н о с яа т д х я ат к и е н а с тр о й к и , к а к Show grid (П о к а з а т и Snap to grid (П р и в я з к а к с е кт ) . П р и в яз к а к сект е о з н а ч ет , ч т о гр а н и ц ы в се х о б ъ е к т п р о их д т ь от л ь к о п о с е кт , ч т о одбну о лд я р а з р а б о к т и а к р уа нт о с м о рт я о т в у д уб щ исх я и н те р ф е й с о в (р и с . 1.13).zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE i
3 Envrionment Optoi ns j Obe j ct Inspector : Envrionment Vara i be ls Ei Dep l hi Opto i ns j Library !1• Explorer VCL Desg i ner. В Editor Options i Source Options i Color • Display Key Mappings Code Insight ECO General options E! • HTML Designer Options
" Grd i Optoi ns ;' |7 ShowgHd
grid
Grid Size: К Code Generation Bracing Style -
Displays braces on the same fine as a function declaration for newly generated code.
Ј Style
Displays braces on the line f oHowing a function declaration for nevrfy generated code. • : [
HTML Formatting Source Control Options ASP.NET В HTML Tidy Options
Cancel
j
Help
"
Ри с
О б о с а тл ь н ы
. 1.13. Онк
о нсароте
к Options
х н а с рт о й к а х п ог вори м в те х чслауях е ет м ы . оХт я м о ж ет е и п о э к с п е р и м е н ит р о в а ьт ы и н е р т ею б у т од п о л н и е т л ь н о г о п о ясн ен и я е д т в ер н т у ь в с е с ау т н о в к и в и о нс д х о е с о т ян и е , та р або т ы D elphi п р епд о лаг естя , чт о вс е саутн о в к и с ед л а н И н ак о н ец , р аз бер м ся , чт о ж е елатд ь с р а з р а б о тн о п р и го д ь т с я в ад л ь н е й ш е м , п оэмт у р с оа н х и м FileOSave Project as... и рсаонх и т е п р о ек т и и о н сд х ы (я п рпед олагю , чт о в ы з н ак о м ы с Windows и з н ает н с ят я фа й л п р о ек т а (расш и рен и е .dpr) , фай л фо р м фа й л (р асш и р ен и е .pas) и н еск оль к о и г ру д х нжу ы к а к в ы з а п ис т у е п р о ек т , в эот м калогт е п о яв с т я фа й л Э т о бу д у т в ы п о л н яем ы й фа й л и фай л , со з адн ы й к о м п и л яо т р м п о л н яем ы й фа й л оельдтн о и уибедьтся , чт о о н рабоет ю в с ту щ и п о н я тн
, кодг
а е д уб м аж т о д б с у ь с о в те , м н о ги е и з н и х и н и ут в н о . П о сл е э к с п е р и м е н от в н жу о бу к к а к в дал ь н ей ш е м п р и о п и с а н и и ы п о муо лч ан и ю . й п р о г ам о й . О н а н а м м ож е т е . Д л я эотг о в ы б ер и т е к о м ан д у е фа й л ы в ел ь д о н т м ак л о т г е , к а к эт о ьеласт)д . П р и эот м расох ы (расш и рен и е .dfm), и онсдх ы й х л д я п р о ек т а фа й л о в . П осл е о тг о ы с р асш и р ен и ям и . е х е и . dcu. . М ожте е з а п ис т у ь вы т ат к ж е , к а к и в сред е Delphi.zyxwvuts
л ав Г 1. Зноакм с т во с о с р оедй пр о г ам м и р о вани я 34zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
о П д с за к
и в DelphizyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
С п р ав о ч н а
я с и с ет м
а
С и с е мт а Delphi соердж и т иг п е р к т о с в у ю сп р ав о ч н у ю с и емт у , с п о м щ ь ю к о тр й е р аз р а п р о г ам и с т м ож е т л е гк о и бы рст о п ч ои л у т ь н и о д е мб х у ю и н фо р м а ц и ю о с р ед б ок т и Delphi и о бъ екнт о - о ри ен ит ро в ан о м яз ы к е Delphi. Д л я ак ит в и з ац и и сп р ав о ч н о й с и е мт ы в ы б ер и т е к о м ан д у Help^Delphi Help (С п р а в к а ^ С п р а в к а Delphi) и л и щ елк н и т е н а п и к о т гр а м е Help contents (С оердж ан и е сп р ав о ч н о й с и е мт ы ) н а о бы ч н о й п ан ел и и н м ср т у е н о т в . П р и эот м п ояви ст я о к н о сп равоч н о й с и ем т ы Delphi (см . р и с . 1.2). К с о ж ал ен и ю , п ер в о д а сп рав о ч н о й с и е тм ы Delphi н а рсу к и й яз ы к п ок а ч т о н ет . О нд а к о ч о тб ы п о л ь з о в аьт с я ею , со в е м н е о б я з а ет л ь н о в л е та д ь а н гл и й с к и м яз ы к о м в с о в е р ш е н с вт е . Даж е ес л и в ы с л аб о з н ает е а н гл и й с к и й яз ы к , вс е р а в н о сп рав о ч н а я х е д бу т ва м п о л е з н о й . с и е мт а в о м н о ги х ч с ал я у
з к о са д П
и рор т каде
а код
в
В о - п ер в ы х
, в ы едл н и е к л ю ч ев ы х сло в в раедкотр е к о д а ж у е я в л я е ст я о хр ш е й п од . Т а к ч т о есл и в ы н аби р ает е к л ю ч ев о е сло в , а о н о н е в ы едли о с ь ж и рн ы м , з н а ч и т , о н о н а б р а н о с ош и бкой . Н али ч и е п о су т в и в ы е дл н и е е ол д ь т н ы х в к о д а а кт ж е н е о б их д м о д л я ч л шу е г о в о с п р и я ит я п ро г ам ы . В о - ов рт ы х , н есм орт я н а н али ч и е ерд в а о б ъ екот в и и н с п е к от р а о б ъ е к от в , дг е е м ож н о п о ч л уи т ь п о рд б н у ю и н фо р м а ц и ю о б о б ъ е к а хт , в реадкотр е код в е с т ь о тж од с а т ч н о м н ог о с р в е дт , п о м гаю щ и х п о ч л иу т ь и н фо р м а ц и ю о б объекат х и л и н ай т и оп и сан и е н ек о т р о г о о б ъ ека т . Н а п р и м е р , лд я п очлуен и я сп рав к и о ти п е в ы е лд и т е и д е н ит ф и к а от р ит п а , щ ел к н и т е н а н е м п р ав о й кн оп ко й мы ш и и в ы б е р и ет к о м ан д у Topic Search. D elphi п р еод сатв и т сп р ав к у о да н н о м к о м п о н е н те . Ан ал о ги ч н ы й р е з л ьу ат т м о ж н о п о ч л уи ь т , есл и н аж т ь к лав и ш у . П о сд к а з к и м оуг т п о я в л я ьт с я и н е п о с р е д вт н н о в о в р ем я н ап и сан и я к оа д . Н а п р и м ер , кодг а в ы в о ид л и к о д лд я в а ш е й п ер в о й п ро г ам ы , то , н а в е р н о е , о бр аит л и вн и х м ое т д в и св о й ст в л д я ад н н о г о м ан и е н а п о яв ляю щ и й с я п ер ч ен ь е в с х п о д ус т н ы о б ъ ека т , кодг а п о с атв и л и о тч к у п о сл е и м ен и о б ъ ека т . Е сл и в ы н е о б р аи т л и н а эт о вн и м ан и е , т о п о в тр и т е в о д е щ е р а з и с е лд а й т е з е ра д ж к у п осл е от г , к а к н аб р л и п ер ч ен ь оп д су т н ы х св о й ст в и м ео т д в . рс то к у "Labell". П о яв и стя О б о с а тл ь н ы х п о сд к а з к а х п ог вори м в да л ь н е й ш е м , сей ч а с н е о б хид м о я ус н и ьт , ю п о ль з у . Е щ е р а з в ер н ем с я ч т о п о сд к а з о к досат ч н о м н ог о и о н и п р и н о с я т о щ и т ум к п р о с ет й ш и м п р о фам а м и со з аид м н ес к о л ь к о п о л ез н ы х п р и ло ж ен и й . ск аз к ой ш р и ф от м ф р а г м е н от
р иП м ер
ы п р о г ам С н ач л
а с о з аи д
1. С о з адй т 2. Р аз м иест (К а л ен да р ь ) 3. Р заимтсе щи 4. З ап ситу н ен т 5. З ав ер ш и т ж те
м б е м к а л е н ад р ь
з нпиасн
я код
, раз рабокт
а к о тр г
а
о з ай м е
т н е бо ле
е п р о ек т ит п а VCL Forms Application. е н а н е м к о м п о н ен т ти п а TM onthCalendar , к о т р ы й н ао х и д с т я в раз елд е Win32. е к а л не р д ь в оф р м е и н а тс о в и у ы форм ы (ри с . 1.14). е п р о г ам у и и с п ы ат й т а M on th C alen dar.
е я од п х
е р або т е е ю п о л ь з о в а ьт с я
у п р о гр а м ы
у ком п о
П и
-
1 8 15 22 29
-
S 2
, сроахн и т
е е е и мо
прогам м
.
без
напи с ани я
Рис
оакд
ср
Ч т
П т
С б
1 3 10 17 24 31
4 11 18 25
т
5 12 19 26
6 13 20 27
В т
9 16 23 0 е С я н о дг 3
7 : 14 \ 1 2 1 . :'• • . ':
zyxwvutsrq
2
8
•
•
•
>
» «
: 02.03.2004
м ар г
рП и м е р ы
.
• | ' , 1 i IzyxwvutsrqponmlkjihgfedcbaZ M ap г 2004 г .
е раз м ер
е р аб о т
е м и н ыт у
. 1.14. й е фрИе н т ы "Кьр ан едл а
с о рп "zyxwvutsrqponm
35
Т еп ер
ь с о з а дй т е п р о с ет й ш и й н а в и г а от р Windows (П р о с м о т р к а тл о г в ) , дл я ч ег о е к о м п о н ен т ы T F ile L ist Bo x, T D ir e c t o r yL ist Bo x, TD riveComboBox и TF ilterC om boBox, к о т р ы е н а о х яд с т я в р а з едл е win 31. С едл а й т е вс е т о ж е с ам о е , к а к и п р и с о з да н и и к а л е н да р я , з а о дн и м и ск лю ч ен и ем . В и н с п е к то р е о б ъ е к от в н жун о с у та н о в и т ь н е о б х ди м ы е св яз и . Н а п р и м е р , дл я с в о й свт а FileList к о м п о н е н т а D i r e c t o r yL i st B o xl н ео б хди м о с у та н о в и т ь з н ач ен и е F i l e L i st B o x. Е го п рост о н жу н о в ы брат ь и з р а с к р ы в а ю щ е го с я сп и ска , к о т р ы й е д бу т с о з да н лд я с в о й с в т а FileList. Э т о ж е н жу н о с ед л а т ь и с др г у и м и к о м п о н е н та м и . Д л я с в о й с вт а фо р м ы Caption в еид т е з н ач ен и е Н а в и г а то р и м о ж ет е н а с л ж ад ь т с я н а в и г а то р м п о фай ла м Windows (р и с . 1.15).zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB и сп о ль з йу т
b.bdsprpt. irsrLab,cfg irsrLab.dpr - ratab.res FirstLabel.nfm FrstLabel.pas nrstProg.~nfm FristProg.~pas FirstProg.dcuil FristProg.nfm FirstProg.pas Navg i .bdsproj Navig.cfg Navg i .dpr zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA = =
•
•
Ј
}
Ј
G
}
W
e
o
n
r
n
a
d
\
•
• •:
'
/
•
•
-
•
•
.
y
| В h: [data]
k
В Delphi |AH files (*.*)
О BookzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA (Р=) Programs | - Ч«.''- Д | CD ModelzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Ри с
. 1.15. Ией нртф
с про г ам м
В з ак л ю ч ен и е е щ е р а з оч х ид ь т с я , чт о с п о м щ ь ю н ес к о л ь к и п р и ло ж ен и е , атк о е к а к к а л е н а др н и я "с н ул я " й уед т од с а т ч н о од с а т ч н о м н ог о и н а вс е ч а с лу ад н н ы х и л и и сп о ль з о в ат ь жу вы х л м е у о д й п о з в о л яе т б ы ср т о бт у ц е л о г о п р е дп р и я и т я . В да л ь н е й ш е м м ы п оз н ак ом и м с в ат ь п р о г р а м ы , с к лаыд в а я б ы о б ъ е ди н и т ь р або т у о е д тл ь н ы в е ст в ю у щ и й код . Д л я отг о б а ыт в а т ь о де т л ь н ы е к о м п о н е н ты н а котро м н ап и сан а и в D elphi, ох р ш о и н ет г р и р ю у ст и з чу е н и е м яз ы к а п р о гр а м и р о в а н и
36
ы " воаНиртг
"
у п о чд е р к н т у
ь п р е и м щ у е св т а D elphi. В ы ж у е м огл и бе у х щ ел ч к о в мы ш ь ю м ож н о с о з адт ь од в л ь н о сло ж н о ь и л и н а в и г а от р . Н а раз бокт у п одбн ог о п ри лож е м н ог о в р ем н и . В Delphi атк и х з а го т в к щ с у е вс т и жи зн и . М о ж н о о ч ен ь б ы ср т о с о з адт ь о д ус т п к баз е го т в ы й л м уо д ь л д я п р л о гу к п о Internet. Н али ч и е го т о с о з адв т ь р а с п р едл н н ы е с и е тм ы и о б ес п еч и в а е т ра я с н е к о т р ы м и и з ат к и х м л ео у д и х и з о е д тл ь н ы х к о м п о н е н то в , к а к и з х к о м п о н е н то в , п р и охид ст я в ч р ун ч о тб ы э т о д е л а ть , а с а м о е гл а в н о е , чотб , н ео б х ди м о з н ат ь яз ы к п р о гр а м и р о в а н и сам а D elphi. П о э то м у вс е п р о гр а м ы я с о с р е од й D elphi. В слюеуд щ и х я D elphi.
л ав Г
1. Зноакм с т во
с о
с р оедй
й и ед бу к бу и к о в ю п и сат ы сам о м
е т м -
м с о з да . Н о ч то ь со т у раз ра я D elphi, , р а з р а б о та н н ы е гл а в х з ай м ем с я
пр о г ам м и р о вани я
ез ю м Р
е
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
В да н н о й лга в е в ы оз н ак ом и ли с ь с о с р ое д й п р о гр а м и р о в а н и боч и й сот л D elphi, в ы , в е р о я тн о , беуид л сь , ч т о со з адв т п о л ь з о в а е тл я с п ом щ ь ю D elphi — н е атк я у ж и слож н а б о т ы с р ед а п р о гр а м и р о в а н и я е лд а т з а в ас , н ео бхид м ей , ч т о н жун о с е дл а ь т . Без суло в н о , п о к а е щ е н е в с е п о н я тн о е д бу м в о з в р а щ а ьт с я н а п р о ят ж е н и и все й к н и г и .
ны р о ь л т К
е вопр с 1. 2. 3. 4. 5. 6. 7.
о н К т р о л ьн е ы
Чт
я D elphi. И з чуа ь гр а фи ч е с к и й и н те р ф е й я з а дч . Боль ш у ю ч аст о то л ь к о г р а м о нт о куа з ы в а т , н о к э ти м в о п р о с а
я ра с ь ра ь м м ы
ы
о так о
е с р ед а п р о гр а м и р о в а н и я ? т р асп о лаг ьт с я н а рабо ч е Н аз о в и т е п ан ел и м ен ю , к о тр ы е м уо г К ак и е о к н а р ас п о л аг ю ст я н а рабоч е м со т л е D elphi? Чт о а т к о е с в о й с вт о ? Ч т о н о а их д с т я н а в к лад х Code и Design? Ч т о а тк о е к о м п о н ен т ? К ак и е сант рд ы е к о м п о н ен т ы в ы уж е з н ает ? Н аз ови т е и х осн овн ы
во пр о с ы
м со т л
е D elphi.
е с в о й в с ат
.zyxwvut
37
в а Гл
а 2
З н оа к м с в т .NET
о с порм ф тало
й
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
В й т оэ
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
ав.ег л .. • М о е лд
ь СО
М
• Р еш ен и
я .N ET
• П р о с т а н с вт
а и ме
• Р ез ю м
н
е
• К о н рт о л ь н ы
е воп рос
ы
е р а с м о рт е н ы о сн о в п о лаг ю щ и е п о н я ти я .N ET, котры е й л а вг ь п р и п ро г ам и ро в ан и и л д я п л а ф то р м ы .N ET. В н ач л е л аг в ы п р е с да т в л н ы э л е м н ты , к о тр ы е л еж а т в о сн о в е п л а фт о р м ы .N ET, — сбо р к и (assemblies), п р о м ежотчу н ы й яз ы к (IL) и к о м п и л я ц и я в п р о ц ес е в ы п о лн ен и я (JIT). З еа т м у д уб т р а с м о рт е н ы с в р те д а в з аи м о с в яз и к о м п о н е н от в п л а фт о р м ы .N ET — об щ еяз ы к о в а я и с п о л н яю щ а я с р ед а (CLR), ну и в ер саль н а я с и с ет м а ти п о в (CTS) и ну и в ер с а л ь н а я с п ец и фи к а ц и я яз ы к а (CLS). Н ак о н ец , е д уб т с е дл а н общ и й обз о р в о з м о ж н о с етй , п р еодсатв ляем ы х б и б л и о е тк а м и баз о в ы х к лас о в .N ET и уит л т , к о тр ы е п о м уг т в рабо т е с э ти м и б и б л и о ет к а м и .zyxwv \ Г*\ \ э от а Уь Ь н е о б хид м
М е дол
й н еб о л ь ш о
о з н ат
ь СО М
К о м п о н е н тн ы е не т х о л г и и п р о гр а м и р о в а н и я о сн о в ан ы н а к о н рта к п рав и л , о п р едляю щ и х в з а и м о ед й с в т и е м жед у е о лд ть н ы м и к о м п о н е н та м н и я . М оелд ь к о м п о н е н нт ы х о б ъ е к от в (С О М ) бы л а п ер в о й п о п ы кт о Microsoft фо р м али з о в ат ь к о н рт а к ы в к а ч е св т е п а р и д гм ы п р о гр а м и р о в а н и я ли з ац и и к о н рт а к от в с о е дй с в т о а л о а кт ж е с о з адн и е п о ед р ж и в а ю щ е й и х П аи р д м г а п р о г ам и р о в ан и я С О М о сн о в ан а н а п р а с в е тд л н и и к о н рта к о п о н е н ат м и с п ом ощ ь ю о п р едл н и й ти п о в . Д о п о яв л ен и я С О М к о н рт а к т к о м п о н е н та м и бы л и п р ес а д т в л н ы в с ег о ли ш ь к а к от ч к и од вх а ф ун к ц и й н о ш ен и и м о е лд ь С О М бы л а з н а ч и ет л ь н ы м п р о г ес о м : ди н а м и ч е с к а я з а гр у к и с и ет м ти п о в в о ид с т я в н е й ес т в ен н ы м о браз о м . о тХ я о б ъ е к нт а я м о е лд ь С О М и с п о л ь з ес т у я о ч ен ь ш и роко , в н ртуен н е к о м п о н е н то в в ес ь м а слож н о . Чотб ы н ч а уи ь т с я р а з б и р аьт с я в н ем , п р и едст п о к рай н е й м ер е н ес к о л ь к о м ес яц ев . Н а п и с а н и е п р и л о ж ен и й с и сп о ль з о в ан и е п о н е н от в С О М м ожн о п у р о сит ь , и сп о ль з у я с а тн ад р н т ы е б и б л и о ет к и , н а п р и м е х к лас о в л и о етк у ш абло н н ы х к лас о в (ATL) с о св о и м н або р м о г тв ы и м ак ро с в . Я з ы к Delphi акт ж е п о з в о л яе т с к р ы ьт сло ж н о ст ь и н ф р а с тк у О нд а к о в се х п р о б л е м и з б еж а т ь вс е р а в н о н е са я д т у .
х — н абор и п ри лож е й к о м п ан и . Ф о р м а п л а фт о р м ы у к о м в м ж де ы м ж де . В эот м от а код е ср т о у й св т я п о р т аи т
х и . у в о ь
м ком р би б , ш абло н о ы С ОМ
в .
Н е с м о рт я н а слож н ост ь к о н с рт к у ц и й , м оедл ь п р о гр а м и р о в а н и я С О М в ы ерд ж а л а п рове к у в р ем н ем . О н а о бъ еид н и л а ж у е п о чл у и в ш и е р а с п р о с рт а н е н и е к о н ц еп ц и и (и н к а п с лу я ц и я , п о л и м о р фи з м , а акт ж е р а з ед л н и е и н ет р ф й с а и р еали з ац и ) в ну и фи ц и р о в а н н у ю ен т х о л г и ю . Н о С О М — э т о н е то л ь к о м о е лд ь п р о гр а м и р о в а н и я , н о и п о ед р ж и в а ю щ а я е е п л а ф то р м а . К с о ж ал ен и ю , п лафто р м а о к аз лас ь слабы м м е с от м С ОМ . Чотб ы м о е дл ь С О М ал с т а о б щ е п р и н я то й н е тх о л г и е й п р о гр а м и р о в а н и я , е й н е хваит л о и м ен н о усотй ч и в о й п л а фт о р м ы . Дл я оп и сан и я к о н рт а к о в С О М к ом п ан и я Microsoft оп релди а и п о ед р ж и в а е т н е о ди н , а ц елы х вд а ф о р м а т а о б м ен а : я з ы к о п р едл н и я и н ет р ф й с о в (ID L) и б и б л и о те к у ти п о в (TLB). К ажыд й и з н и х с а м п о с е б е н е с о з а ед т п р о б л ем , о нд ак о э т и дв а ф о р т к о н с рт к у ц и , к о тры е м у ог т бы т ь к о р е к тн ы м ат а н е и з о м о р ф н ы , .т е . щ су ювет в о нд о м фо р м а т е и в т о ж е в рем я н е и м ет ь см ы сл а в дргоум . М ожн о бы л о б ы о п р е дл и т ь р т еи й фо р м а т н а осн ов е о б ъ е ид н е н и я к о н с тр ку ц и й , п о е др ж и в а е м ы х об и м и фо р м а тм и . О нд ак о э т о н е с р ут а н я е т , к а к м и н и м у , вуд х иг р уд х к р и т ч ес к и х п р о б л ем , с в яз ан н ы х с о сп о с бам и оп и сан и я к о н рт а к от в в С О М . В о - п ер в ы х , м оедл ь С О М даж е н е п ы а с те я о п и сат ь в з аи м о з ав и си м о ст ь к о м п о н ен отв . Н е в о з м о ж н о в з ят ь к о м п о н ен т С О М и в ы я с н и ьт , к а и е дгиру е к о м п о н ен т ы н ео б о и дх м ы лд я е г о н о р м а л ь н о й р а б о ыт . И з - з а встиоу я и н фо р м а ц и и о в з а и м о з а в и с и м о о п о н я ть , к а и е D LL- б и б ли о етк и н е о би д х м ы лд я р а з в е р ты в а н и я я ст х к р а й н е н д р ту п р и ло ж ен и я С ОМ . И з - з а э отг о акт ж е н ев о з м о ж н о , н е з ап ситу в п р и ло ж ен и е , в ы яс н и ть , к а и е в ер с и и к о м п о н ен т а н е о б их д м ы . В о- вотры х , кажыд й фо р м а т оп и сан и я к о н тр а к то в н е о б л а де т хот ь к а о й - ли б о р а с ш и р я е м о с ьт ю . Н о ад ж е ес л и б ы п о яв и л с я и е ад л ь н ы й ну и ф и ц и р о в а н н ы й фо р м а т оп и сан и я , м о ед л ь С О М о с а т л ь б ы о ят г щ е н н о й е щ е о нд о й п р о б лем о й , с в яз а н н о й с ф ун к ц и о н и ро в ан и е м к о н рт а к от в . Э т а п роблем а н е и ме т о тн о ш е н и я к сп о с ба м оп и сан и я кон рт а к от в . О н а к росет я в сам и х к о н рт а к х . К о н тр а к т к о м п о н е н то в С О М осн ова н н а оп и сан и я х ти п о в . И с п о ль з еум а я в кон р та к х с и с ет м а ит п о в о сн о в ан а н а п о мд н о ж е с в т е яз ы к а C + + , гар н ит рюу щ е м п ер н оси м ост ь м же д у к о м п и л я от р а м и . П ер н о с и м о с т ь г а р н и т с ер у я н е от л ь к о лд я л е к с и к и яз ы к о в п р о гр а м и р о в а н и я , н о и дл я фо р м аот в п р е сд а т в л е н и я ад н н ы х . З дес ь и воз н и к ае т гл а в н а я п р о б л ем а . В м о едл и С О М к о н рт а к т к о м п о н ен т а я в л я е ст я фи з и ч ес к и м (т.е . дв о и ч н ы м ) к о н рт а к от м . С леод в аетль н о , к о м п о н ен т С О М п р е ъд я в л е т ж е с кт и е рт е б о в а н и я к м еж к о м п о н е н тн ы м в ы з о в ам . К о н ртак т С О М р те б у т от ч н о й ди с ц и п л и н ы с е тк а , и с п о л ь з ему о г о п р и вы з ов е м ое т д в , отч н о г о см ещ ен и я к ажо д й р укт с ы да н н ы х , п ер ад в а ем о й в к а ч е свт е ф а к ит ч е с к о г о п а р м ет а м о а е тд , то ч н о й и н фо р м а ц и и о м еа х н и з м е р аз м ещ ен и я п а м я ти , и сп оль земуо м в ы з ы в аем ы м м ео т д м , а актж е от ч н о г о фо р м а т а с ы лк и н а о б ъ ек т . Т а к и м о браз о м , к о н ртак т С О М — э т о всег о ли ш ь п ро тк о л фо р м и ро в ан и я к ард о в с е тк а , п олн осьт ю ли ш ен н ы й с е м а н ти к и п р и л о ж ен и я . т ет н х о л г и ю С О М рн д т у о й в и сп оль з о П ер ч и слен н ы е вы ш е тр е б о в а н и я ед л а ю ван и и да ж е дл я к л а с н ы х п р о г р а м и с то в . Ф и з и ч е с к а я п ри род а к о н тр а к то в комп о н е н то в С О М о со бен н о н о де у б н а , к огд а де л о од хи т д о в ер си й к о м п о н е н то в . пУ р а в л е н и е в ер си ям и — з адч а да л е к о н е п р о с та я , адж е к о дг а в ы п о л н я ю тс я то л ь к о с е м а н ти ч е с к и е и з м ен ен и я . Дл я р еш ен и я п р о б л ем , св яз ан н ы х с к о н рт а к т м и С О М и и х о п р едл н и ем , р а б о ат ю щ и е в Microsoft к о м ан д ы р а з р а б о чт и к о в С О М и MTS соз адл и н ову ю к о м п о н ен т н у ю п л а ф то р м у , н а з в а н н у ю COM 3. В скор е п осл е вы бор а и м ен и раз ли ч н ы е грп у ы внр т у и Microsoft о бн аржуи ли , чт о н а н ек о тр ы х п л аф о т р м а х Microsoft и м я COM 3 н ел ь з я и сп о ль з о в ат ь в к а ч ев с т е и м ен и к а тл о г , п о э тм у ег о и з м е н и л и н а COR. е и м ен а — С О М + , Runtime, Lightning, В п р о ц ес е р а з р а б о кт и и сп о ль з о в али с ь и ги р д у U RT. В и отг е п ер д п ер в ы м в ы п с ку о м б еа т - в е р с и и н е тх о л г и я бы л а п ер и м ен о в ан а в CLR (Common Language Runtime — о б щ еяз ы к о в а я и с п о л н яю щ а я с р е ад ) .zyxwvutsrqponmlkjih
М ое л д ь
СМО
39
Ре ш и н
я .NETzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
е расмроент ы х вы ш е п р о бле м в о з м ж н ио с т Н а фон п о з в ю ял т ир а д к л ь н о о ч б гл е и т ь жи з н ь п р о ам г и с т м ожн о в ы р аз и т ь атк : "И з м е н я й т е в се , чт о оитхе фо р м а .N ET — э т о с о в ер ш ен н о н ова я м ое л д ь лд (а в бщ уд ем , в и д м о , и дл я игрду х о п ер ац и о н н ы н овн ы е п о л ж ен и я .N ET.
, пмаелгырд . иОд , и сп о ль з у я с о з ад н и х с и с ет м а )
н и з в ал н г ы я лю бы я п р и ло ж ен и . П ер ч и с л и
е п о ф л р а тм х п ри н ц и п о е с р е дс в т а "
й .N ET, в .NET . П лат й лд я Windows м к р ато ос -
• Вс е в о з м о ж н о с т и в з а и м о ед й с в т и я с щ с у е ю св т у щ и м кодм . Д в о и ч н ы е ком п о н ен т ы С О М о лт и ч н о р а б о тю т в м ес т е с дв о и ч н ы м и фа й л а м и .N ET. • П о лн о е и а б с о л ю нт о е м еж ъ яз ы к о в е в з а и м о ед й с в т и е . В о лти ч и е о т к лас и ч е ск о г о С ОМ , в .N ET п оедрж и в аю ст я м еж ъ яз ы к о в е н а с л е до в а н и е , м еж ъ яз ы к о в а я о б р а о кт а и с к л ю ч ен и й и м еж ъ яз ы к о в а я о л та к д . х п р и л о ж ен и й .N ET в н е з ав и си м о сит о т • О бщ а я с р ед а в ы п о лн ен и я лд я л ю б ы в и с п о л ь от г , н а к а и х яз ы к а х он и бы л и с о з ад н ы . И чт о в а ж н о , дл я все х яз ы к о с те з у я о ид н и тот ж е н а б о р в срт о е н н ы х ит п о в да н н ы х . • Б и б л и о е тк а баз о в ы х к лас о в , к о тра я ск р ы в ае т в с е с л о ж н о с ит , с в яз а н н ы е с ис п о ль з о в ан и е м вы з ов в API, и п рлеадг т з ак о н ч ен н у ю о б ъ е к нт у ю м ое л д ь лд я все х я з ы к о в п р о гр а м и р о в а н и я , п оедрж и в аю щ и х .N ET. • О з а п тн у н ы х к о н с рт к у ц и я х С О М м ожн о з а б ы ьт ! И н етр ф й с ы i c l a ssF a c t o r y, т в п рогам х .N ET. iunknown, ко д ID L и в ари ан т ы е ти п ы дан ы х ю вуст уот е .N ET • Д е й с вт и ет л ь н о е пу р о щ е н и е п р о ц ес а р а з в е р ыт в а н и я п р и ло ж ен и я . В сред н е н а д о р е г и с тр и р о в а т ь ти п ы в с и с те м н о м р е с рт е . Бо л е е то г , .N ET п о з в о л я е т раз н ы м в ер си я м о дн о г о и от г о ж е м л о у д я DLL м и р н о с о щ у е с вт о а т ь н а о нд о м к о м п ь ю те р .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC
ы н ь л е о ит р С
е болк
и .NET
н Т ех о л иг
и CLR, CTS и CLS о ч ен ь в аж н ы лд я п о н и м а н и я см ы сл а п л ф оа т р м ы .N ET. С о ч тк и з р ен и я п р о гам и а с т , пофрмлат у .N ET вп олн е м ож н о р ас м и т в а ь п рт о с о ка к н ову ю д ерс у и с п о л н ен и я и н ову ю би л к е о т у з а б овы х к л са о в . С дре а и сп о лн е и я .N ET я в л ест я о б щ еяз ы к о в й и с п о л н яю щ е й с ор е д й (CLR). Г лавн а я рол ь CLR з аклю ч сает я в том , обчт ы о б н а рж у и в а т ь и з а ж гр у т ь ит п ы .N ET и п р о и з в о ди т ь п у р а в л ен и е им и в со втсеи и с в аш и м и к о м а н да м и . CLR бер т н а с еб я в с ю н и з к ро у в н ев у ю то б а р у — н а п р и м ер , оимавт чсеко е п у р а в л не и е п а м ь тяю , мжеъзя ы ков е в з а и м е ой д в с и т е , раз ывет в ан и е раз ли чн ы х двои чн ы х би л е о т к с ослжеит ван и е м в ер с и й . Е щ е оид н с рт о и ет л ь н ы й бло к п л а фт о р м ы .N ET — э т о ну и в ер с а л ь н а я с и е мт а ти п о в (CTS). С и сетм а CTS п о лн о сьт ю о п и сы в ае т в с е ти п ы да н н ы х , п оердж и ваем ы е с р ое д й и сп о лн ен и я , и о п р едля т , к а к онд и ит п ы ад н н ы х м о уг т в з а и м о е дй с в т о а т ь с дргиу м и и к а к о н и у д уб т п р е с да т в л н ы в фо р м а т е м еа т д н н ы х .N ET. Н е о б и хд м о о мт е и ьт , ч т о в яз ы к а х п р о гр а м и р о в а н и я .N ET н е о б яз аетль н о од л ж н ы п о едр ж и в аь т с я от л ь к о ит п ы ад н н ы х , к о тры е о п р едл н ы в CTS. Н о щсу ест е ву т н а б о р п р ав и л — ну и в ер саль н а я с п ец и фи к а ц и я яз ы к а (CLS). Э от т н або р о п р ед л я е т п о мд н о ж е с в т о о бщ и х ит п о в да н н ы х , в о нт о ш ен и и к о тры х г а р н и т рес уя , ч т о он и б ез о п ас н ы п р и и сп о ль з о в ан и и в о в се х я з ы к а х .N ET. Е сл и в ы с о з а де т е ит п ы .N ET с и сп о ль з о в ан и е м от л ь к о е т х в о з м о ж н о с ет й , к отры е р аз р еш ен ы в CLS, те м сам ы м в ы е с л да т е и х п р и г о нд ы м и лд я л ю б ы х яз ы к о в .N ET. П ом и м о с п ец и фи к а ц и й CLR, CTS и CLS п офлратм а .N ET п роеадсвтля т а к тж е би б л и о ет к у баз о в ы х к лас ов , до спут н у ю и з лю бог о яз ы к а п р о гр а м и р о в а н и я .N ET. Б и б л и о ет к а баз о в ы х к лас о в н е от л ь к о ск р ы в ае т с а т н ад р н т ы е н и з к о ру в н е в ы е о п ер а - zyx
40
л ав Г
2. Зноакм с т во
с полрат м ф о й
.NET
ци до в а н и е п о л ь з ему ы
, ат к и
е к а к фа й л о в ы м к о м п ь ю ет р а х в с о в р ем н н ы В к а ч в ес т е п р и м ер ных , работ ы с яз ы к о п р и л о ж ен и й дл я работ и с п о л н ен и я и би бли оект
й в о-д в ы в о д , о бр а окт а гр а фи к и и , н о и о бесп еч и в ае т п ео р д ж к у бо ль ш о г х п р и л о ж ен и ях . а м ож н о п р и в ес т и в ср т о е н ы е ит п ы лд м XML, о бесп еч н и я б ез о п ас н о й р аб о т ы в сет и и т.д . С к о н ц епалуть н о й точ к и и баз овы х к лас о в .N ET вы ялгд т так а бзоавы
ке и б Б о л т
б О щ о з е яы в к а а н ь л ас р е ви Ун
Ри с
кы з Я
. 2.1. Би б л оект
я м се тси
х ксало
я ис поюнялщ а а топи
а клса о
и промаг иронва
в (CTS)
в и о б щ еязыоква
я исполняю щ а
е с об ру а сж л уб , и с
я о б р а щ ен и ы п р и л о ж ен и я з р ен и я к о м п о н о в к , к а к п о к аз н
-
я к баз м да н , с о з да н и я а сред ы о н а р и с . 2.1.zyxwvut
в
я срде а н ь л ас р е ви Ун
в з а и м о ед й с в т и о к о л и ч е с вт
а (CLR) я и ц а ки ф си ц е п
я якы з
я сред
а (CLS)
а
я .NET
Н ав ер н о , дл я работ ы с .N ET бу д у т а дп и т р о в а н ы п оч т и в с е и з в е сн т ы е яз ы к и п ро гр а м и р о в а н и я . ж У е з ак н ч и ваю ст я р а з б ок т и бо ле е че м 30 яз ы к о в л д я п л а ф от р м ы .N ET. П о м и м о ы тч е р х яз ы к о в , п оасвтляем ы х с Visual Studio .N ET (C# , Visual Basic.N ET, Managed C + + и JScript.N ET), и ж у е в ы п щу ен о г о яз ы к а Delphi, ож и аюд ст я в ер с и и Smalltalk, COBOL, Pascal, Python, Perl и дигрух . Н иодебхм о о м т ие ь , ч т о вдо и чн ы е фа й л ы .N ET, дл я корты х и с п о л ь зю у с т я п ри вы ч н ы е р а с ш и р ен и я . d l l и .е х е , п о с в о ем у в н р е т у н ем у с ое р д ж а н и ю н е и м ею т абсо лю нт о н и ч ег о о б щ ег о с обы ч н ы м и и с п о л н яем ы м и фа й л а м и . Н ап р и м ер , DLL- фай л ы н е п а о в р с л ед т ю я т с в о и м о де т ы в рас п о р яж ен и е п р и л о ж ен и й н а к о м п ь ю е рт . В олит ч и е о т к о м п о н е н от в С О М вд о и ч н ы е фа й л ы .N ET н е оп и сы ваю ст я с п ом щ ь ю код а ID L и н е реиг ст юру ст я в с и с е тм н о м р ест . Н о сам о е в аж н о е ло и т ч е з а к л ю ч с а ет я в том , чт о двои ч н ы е фа й л ы .N ET н е с о ер дж а т з ав и сящ и х о т п лфоатрм ы к о м ан д . С оердж и м о е двои чн ы х фа й л о в .N ET — э т о н е з ав и си м ы й о т п л ф о а тр м ы п р о м че т ж н у ы й яз ы к , котры й о фи ц и а л ь н о н а з ы в а се т я п ро м о ч те ж н у ы м яз ы к о м Microsoft (Microsoft Intermediate Language — MSIL), и л и п р о ст о IL.
ы н ов и ч Д
е фалй
ы .NET
К о дг
с ет
а с п омощ ь ю к о м п и л я то р а лд я п л а т ф о р м ы .N ET с о з адест я м ол у д ь с расш и м . d l l и л и . е х е , с о дер ж и м о е э от г о м ло у д я п р е сд а т в л я е т сборк у н а п р о м еж у м яз ы к е (IL). Н аз н ач ен и е IL ан ал о ги ч н о бай -т к о д у Java — о н к о м п и л и ресут я в с п е ц и ф и ч н ы е дл я ы к о м ан д ы от л ь к о п р и н е о б хи д м о с и т , .т е . кодг а к блок у к о м ан д IL о б р ащ а я с р ед а и сп о лн ен и я .N ET.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC
е Рш е н и я
. NETzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 41
р ен и е то ч н о п л а фт о р м
П ом и м
о к о м ан д IL, дв о и ч н ы е л м уод и .N ET соедрж а т а тк ж е м е ат д н н ы е , к о тры е о о п и сы в аю т в с е ит п ы , и сп оль з ован ы е в ле м у о д . Н ап р и м ер , есл и у ва с внр т у и и ест ь н ек о тры й к лас , т о в мандет ы х эот й сбо р к и бе д у т соерджьатс я и н фо р м а я о баз ов м к лас е дл я эотг о к л ас , дан н ы е о том , к а и е и н е тр ф й с ы п с м р у е од т н ы л д я н е го , а так ж е п о лн о е оп и сан и е в се х м о е т д в , с в о й с т в и с о б ы ит й э от г о к лас . В о м н о ги х о тн о ш е н и я х м еа т д н н ы е .N ET яв л яю ст я з н а ч и те л ь н ы м с оу в е р ш е н с в т о в ан и е м п о ср ав н ен и ю с к л а с и ч ес к о й и н фо р м а ц и е й о ит п а х в С ОМ . К лас и ч еск и е вд о и ч н ы е фа й л ы С О М обы ч н о о п и с ы в а ю ст я с п ом ощ ь ю ас оц и рован н о й б и б л и о ет к и ит п о в . П р о б л ем а с и н фо р м а ц и е й о ит п а х в С О М з а к л ю ч а ес т я в от м , чт о н и к т о н е м ож е т га р н ит р о в а т ь в ам , чт о эт а и н фо р м а ц и я о к а ж ес т я п олн ой , ат к к а к з а со з адн и е и э т х ад н н ы х овтеч а т п р о фам и с т . В олти ч и е о т С ОМ , м еатдн н ы е в с р ед е .N ET а в о т м аи ч е с к и г е н е р и р ю у ст я к о м п и л я от р м , со з адю щ и м п р и ло ж ен и е , и п оэ тм у яв л я ю ст я и с ч ер п ы в аю щ е п олн ы м и . В м аетдн ы х .N ET соедр ж и ст я и н фо р м а ц и я абсо лю т н о о б о в се х и т п а х , к о тры е и сп о ль з ю у ст я в сбо рк е (клас х , рахуктс , п ер ч и с л ен и я х и т..д ) , а такж е о к аж од м с в о й свт е , модет е и л и с о б ы ит и к а ж одг о ит п а . Е щ е о нд о о лт и ч и е м а е тд н ы х .N ET о т и н фо р м а ц и и С О М з а к л ю ч а се т я в от м , чт о в м а е тд н ы х .N ET п ер ч и с л ен ы вс е с ы л к и н а в н еш н и е м л оу д и и сборк и , к отры е п ро ю е т б у с я лд я н о р м а л ь н о г о в ы п о лн ен и я сбо рк и .N ET. З а сче т э отг о м ож н о с ч и ат ь сбо рк и .N ET п о лн о сьт ю с а м о д к м у е н и т р е му ы м и . В резльуат , н а п р и м ер , потаед т н е о б и хд м о с т ь р е г и с рт и р о в а т ь вд о и ч н ы е фа й л ы .N ET в с и с те м н о м рест . М еа т д н ы е о п и сы в аю т н е от л ь к о ти п ы , и сп о ль з ему ы е в сборке , н о и сма у сборк у . .мтосе аинф м В м ан и фес т е с о е др ж и с т я и н фо р м а ц и я Э т а ч аст ь м еа т д н н ы х н а з ы в а ест я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG о е кщ т у е й в ер с и и сборки , о б и с п о ль з о в ан н ы х о гр а н и ч е н и я х п о б е з о п а с н о с ит , о п о д едр ж и в а е м о м яз ы к е (а н гл и й с к о м , рсук о м и .т .д ) , а актж е сп и со к в се х в н е ш н и х сбо р о к , к о тры е п о р т еюб у с т я лд я н о р м а л ь н о г о в ы п о лн ен и я п р о фам ы . в дво и ч н ы й фа й л .N ET и сборк а — э т о онд о и т о В п оавдляю щ е м б о л ь ш и н св т е ч е а у лс ж е . И есл и го в р и ст я о D LL- би бли оетк е лд я .N ET, т о п о н я ти я "дв о и ч н ы й фай л " и "с б о р к а " яв л ю ст я си н он и м ам и . Н о сбо рк а м ож е т со тя ь к а к и з о нд о г , ат к и и з н ес к о л ь к и х вд о и ч н ы х фа й л о в . В сборк е и з о нд о г о фа й л а с о е др ж а с т я и м а н и фес т , и м е ат д н н ы е , и к о м а н д ы IL. В сборк е и з н ес к о л ь к и х вд о и ч н ы х фа й л о в к ажы д й вд о и чн ы й фа й л н а з ы в а е ст я м л е оу д . П р и с о з адн и и ат к и х м н о г фа й л о в ы х сбо р к о ид н и з вд о и ч н ы х фа й л о в од л ж е н с оерд ж а т ь м а н и фес т сборк и (в н е м м оуг т а кт ж е н о аи д х ь т с я и иг р ду е да н н ы е , в от м ч и сл е к о м ан д ы IL). Вс е о сатль н ы е л м уо д и м у ог т с оерд ж а т ь от л ь к о м еат д н н ы е ти п о в и к о м ан д ы IL. Е и д н св т е н а я п ри чи н а дл я соз адн и я м н о г фа й л о в й сбо рк и — э т о боль ш а я иг б к о с т ь п р и р а з в е ры т в а н и и п р и л о ж ен и я . Н ап р и м ер , есл и п оль з овеалт ь о б р а щ са ет я к а л не д у о й сбо рк е , котра я долж н а бы т ь з а фж у е н а н а ег о ло к аль н ы й к о м п ь ю е тр , дрсе а и с п о л н ен и я з а ф зу и т ли ш ь т е л ум од и сбо рк и , корты е е й д св т и е л ь н о н е о иб д х м ы . Т ако е р еш ен и е п о з в ли т и з б еж а т ь н ен ж у о г о в е о г ст о р та фи к а и увели ч т ск о р ст ь работ ы п р о фам ы .zyx п ро д б н сбо р к ци
П р о м у о т ч не ы ж
й яз ы
к
Р а с м о рт и м п р о м е ж о т уч н ы й яз ы к (IL) боле е п о рд б н о . К о д IL н е з ав и с фо р м ы , н а к о тр й е д уб т п р о и з в о ид ь т с я в ы п о лн ен и е . П р и эот м к о м п и л яот п л ф оа т р м ы .N ET сегн ри е у т ко д IL вн е з ави с м ост и о т тог , к а о й яз ы к п р о ф а м и р о в ан и я (Delphi, C # , Visual Basic.NET, Eiffel и .т .д ) и сп оль з овалс я л д я с о з а дн и м ы . В качвест е п р и м ер а м ы с о и з ад м п р о фа м у с л о ж ен и я ву д х ч и с е л . Е ид н свтен ое ч т о о н а у н а с е д уб т м те у ь е л дьа т , — скылад вт ь ч и сл а 2 и 3. Н и ж е п р и ве д с код м эо т й п р о ф а м ы н а яз ы к е Delphi. Даж е н е з н а я яз ы к а Delphi, м о ж н см ы с л эо т й п р о ф а м ы , а н а си н атк си ч еск и е к о н с рк т у ц и и п ок а н е обращ ай т е program Sum; {$APPTYPE CONSOLE} useszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
42
л ав Г
2. Зноакм с т во
с полрат м ф о й
т о т п лат р лд
я -
я п р о фам
,
н ли ст н о п о н ят в н и м а н и я
г ь
.zyx
.NET
S ysU t i l s; va r X,Y,SumXY: I n t e ge r ; b e gin X := 2; Y := 3 ; SumXY := X + Y; Write(SumXY); R e a d ln ; en d . П осл е к о м п и ляц и и э то й п р о г р а м ы е д бу т п о лчу е н и сп о лн яем ы й фай л Sum .exe. Э от т фа й л н е я в л я е тс я обы ч н ы м и сп о лн яем ы м фа й л о м , а п р едс атв л яе т сборку , к о от р у ю можн о вы п олн и т ь то л ь к о н а п л а тф о р м е .N ET. В н рт у и э то г о фай л а н а о х д я тс я м а н и фес т , н ео б хид м ы е б и б л и о те к и , к о м а н д ы IL и м е та д н н ы е , о п и с ы в а ю щ и е ь с п омощ ь ю п р о гр а м ы i l d a sm . e xe (р и с . 2.2 п р о гр а м у Sum, к о т р ы е л егк о в у и ед т и 2.3). О б э от м ед бу т ск аз ан о да л е .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ
MANIFESTzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH :• zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB &- 9 $compiler_internal$ * 9 Borland.Delphi.System i 9 Borland.Vcl. Math it- 9 Borland.Vcl.StrUtils Щ - 9 Borland. Vcl.SysConst »- 9 Borland.Vcl.SysUtils Ґ 9 Borland.Vcl.Types s II Borland.Vcl.Windovvs a9 Sum в В Unit \ Л .class public auto ansi Ш .cctor: voidO Ш Sum : voidQ
Ы
.assembly Sum Ри с . 2.2. оКм п о н е т ild a sm . e xe
ы п р о г р ам м
ы Sum в онк
е п р о гр ам м
ы
Н а п ер в о м э ат п е в а м н е п р и ед с т я р а з б и р а ьт с я с код м IL, п о э тм у н е с а т р й е тс ь п о н я ть , ч т о ат м н а п и с а н о . Ли ш ь о м т ье е дл я с е б я , к а к п р о с т о п о лч у и т ь од с у т п к лю бо й сбо р к е и з у н аь т в се , чт о н ео бихд м о лд я п о н и м а н и я р або т ы э л е м н от в сборк и . П р и э о т м м о ж ет е н а г л я нд о б уе и д ь т с я , чт о к о м п и л ято р D elphi ген ер и реу т н е з ав и си м ы й о т п л а фт о р м ы н або р к о м ан д , а к о д IL. Н о п о ч ем у Microsoft п о ш л а п о п т у и с о з ад н и я IL и к а и е п р е и м щ у е с вт а IL п ер д обы ч н ы м н або р м з ав и си м ы х о т п л а фт о р м ы к о м ан д ? О дн о и з п р е и м щ у е с вт , о к о т р о м ж у е пу о м и н а л о с ь , — э т о в о з м о ж н о с т ь п о лн о г о м еж ъ яз ы к о в г о в з а и м о ед й с в т и я . П о ск о ль к у лю бо й к о д н а лю бо м яз ы к е п р о гр а м и р о в а н и я .N ET к о м п и л и реуст я в с а тн ад р н т ы й н або р и н с рт к у ц и й IL, п р о бле м с в з а и м о ед й с в т и е м м же д у бло к ам и к од а IL н е те д бу . П р и эот м в з аи м оедй свти е е д бу т п р о и з в о ид ь т с я н а дв о и ч н о м р уо в н е , чт о я в л е ст я з ало г м вы сок г о б ы с р т о ед й с в т и я . Е щ е о нд о воз м ож н о е п р е и м щ у е с вт о — н ез ав и с и м о с т ь о т а п а р нт о й п л а фт о р м ы . т р а с п р о с рт а н е н а н а сам ы е М ожн о п р е пд о л ж и ь т , ч т о сред а в ы п о лн ен и я .N ET е д бу раз н ы е к о м п ь ю ет р н ы е п л а ф то р м ы и о п ер ац и о н н ы е с и е тм ы (олти ч н ы е о т Windows), чт о ж у е п рои з ош л о с яз ы к о м Java.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG
Р е ш ия н
. NETzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 43
J
method public static void Sum() cil managed
entrypoint // Code size 52 (0x34) zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA maxstack 3 locals init([0]int32X. [1]int32Y. [2] int32 SumXY ) IL_0000: Idc.i4.1 IL_0001: stsfld bool Boriand.Deiphi.System.UnitJsConsole IL_0006: ldc.i-4.2 IL_0007: stloc.O IL_0008: Idc.i4.3 IL_0009: sfloc.1 IL_000a: Idloc.O L I_OOOb: ldloc.1 L IJDOOc: add L I_OOOd: stloc.2 IL_000e. Idsfld class Borland.Delphi .System.Text Borland.Delphi System.TextOutput::Output IL_0013: ldloc.2 IL_0014: ldc.i4.0 IL_0015: call instance class Boriand.Delphi.System.TextBorland.Delphi.System.Text::VVritelnteger(int32, int32) IL_001a: call instancevoidBoriand.Delphi.System.TextflushO IL_001f: call voidBorland.Delphi.System.Unit::@_IOTest() IL_0024: Idsfld classBorland.Delphi.Svstem.TextBor1and.Delphi.Systein.Textlnput:lnput IL_0029: call instancevoidBorland.Delphi.System.Text:ReadLn() IL_002e: call voidBorland.Delphi.System.Unit::@_IOTest() IL_0033: ret } // end of method Unit:: Sum
Ри с
. 2.3. Ко
П о ск ль к ю ст я в к о н еч н о т о долж е н в з ят Э ит м з а н и м а е тс в с о ат в с р ед о с б е н н о с ят о с б ен н о с т и О кт о м п и л и р о в а н н ы м ещ а е т в кэш п ер в о м вы з ов IL в п лафот рм ен н о - з ав и с м ы н е бе д у т з ан и м аьт с
пи Т
ы и пвснроат
д п р о г ам м
у в сбо рк а м и отг ь н а с еб я к о м п и л я от ы и сп о лн ен и х а ир х е кт у у д уб т учент п а м я ит е к а о г - ли б я к о м п и л яц и ей
ы sum н а язы к
х с о е рд ж и с т е к о м а н ыд я р аб о т ы ы е и , чт
е IL
я н ез ав и с и м ы й о т п л а ф то р м ы ко д IL, а в ы п о л н я , р а с ч и атн н ы е н а о п р е дл н н у ю п л а ф то р м у , т о к от у п о к о м п и ляц и и IL в к о м ан д ы лд я н ж у н о й п л а фт о р м ы р в р ем н и и сп о лн ен и я (ЛТ ) . К о м п и л яот р Л Т ио дв х я .N ET. И сп о ль з у я к о д IL, р аз р аб очт и к и м оуг т н е дм уат ь о ц е н рт а л ь н о г о п р о ц ес о р а о п р едл н н о г о к о м п ь ю е тр а — э т ЛТ . з IL п лафот рм ен н о - з ав и с м ы е к о м ан д ы к о м п и л яо т р Л Т р аз о з н а ч и е лт ь н о с к у о р яе т р аб о т у п р и л о ж ен и я . Н ап р и м ер , п р у ко о о дм те а Л Т ок т м п и л ер у т о нт о с я щ и й с я к оэ м т у од м т е е к о м ан ыд . П р и п овтрн ы х вы з ова х э о тг о о дм те а Л Т жу , а п рост о воз ь м е т о в г ты й ко д и з к э ш - п а м яит .
а им е
. т б и и д е
н .NET
С борк а м ож е т с оерд ж а т ь лю бо е к о л и ч е с вт о сам ы х р аз н ы ит п — э т о ну и в ер с ал ь н ы й те р м и н , к о тры й м ож е т о нт о с и ьт с и н те р ф е й с а м , п ер ч и с л ен и я м и .т д . П р и с о з адн и и п р и ло ж ен и га н и з о в ы в а т ь в з а и м о ед й с в т и е э и т х ти п о в . Н а п р и м е р , сбо р к а с н еск о ль к и м и и н ет р ф й с а м и , кажыд й и н ет р ф й с м ож е т п ри н и м ат м ер т о в з н ач ен и я то л ь к о о п р едл н н о г о ит п а . Дл я з адн и я о п р едл н н о г о ит п а н е о б хид м о и сп о ль з о в ат м ти п а м . И з есд ь н бы т ь ну и к а л ь н ы м п о о нт о ш е н и ю к дгриу в ст а и м е н , к о тр ы е п гр у и ю р у т с а т н ад р н т ы е ти п ы и к о тры е с о з ад н и и с о б с вт е н н ы х ит п о в . П р о стан свт о и ме н — э т о ло ги ч еск а га н и з а ц и и и м ен , и сп оль земуы х в п р и ло ж ен и и .N ET. О с н о в н о с рт а н с т в и ме н — и ск лю ч и т ь к о н фл и к т ы мжед у и м ен ам и в раз н ы
х ти п о в . В м и р я к к лас м , ракусмт я .N ET н ео бхид м м ож е т о п р е дл я т ь в к а ч е св т
е .N ET , о ор ь к лас с е п ар -
ь и мя , к о тр е од л ж н о е о б й ит с ь б е з п р о с рт а н м ожн о и сп о ль з о в ат ь пр и я р ук т с а лд я о р е н аз н ач ен и е п ро х сбо р к ах .zyxwvutsrqponmlk
44zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA л ав Г 2. Зноакм с т во с полрат м ф о й
. NET
Н ап р и м ер , со з адест к дву м в н еш н и м сбо рк ам л ю нт о раз ли ч н ы е ти п вь а т . П р и н а п и с а н и и сборк и в ы о б р а щ а е тс п р о с т а н с вт а и ме н (э т
я п р и ло ж ен и . В кажод ы п о фну к ц и о н а л ь н ы код а м о ж н ь — одсат ч н о м ож е т бы т
е ит п й сбо рк
а VCL Forms Application, к о тр е о б р а щ а ес т я е ес т ь ит п с и м е н е м М р еТ у . Н о э т о абсо м в о з м о ж н о с ят м и и х н и ка к н ел ь з я см еш и о от ч н о к уа з ьт , к к а о м у и м ен н о ит п у и и з ка о й о к и м ен и ит п а од б а в и т ь и м я с о в т ею у щ е г о ь и м я с б о р к и ) .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP
я ищюянсолп а
б ща о в О кы з я е П о сл
я с рде
а
е з н а к о м св т
а с ит п а м и , сборк ам и , м аедтн ы м и и IL м о ж н о бо ле е фо р м а л и з о в а н о р а с м р ит в а т ь д рсе у и с п о л н ен и я .N ET. О бщ еяз ы к о в а я и с п о л н яю щ а я д рс е а (CLR) — э т о н або р ж б с лу , н иодебхм ы х лд я в ы п о л н ен и я п р о г ам н о г о код а IL. К ат к и м ж б а сул м м ож н о он т е с т и и е рм б т уы е б и л и о е тк и . Н ап р и м ер , есл и соз адн о п ри ло ж ен и е M F C, т о в в тсчека е к о м п о н ен т а сдер ы в ы п о л н ен и я пс те буро я ьс в е м а о бъ ме и а ст я ы б и л ке о т а в р ем н и в ы п о лн ен и я — m fc42.d ll. П рогам ы н а Visual Basic п ри вяз ан к ткаом у ком п он е т у сдре ы в ы п о л н ен и я , ка к би блкеот а msvbvm60 . d l l , а п роагм м н а Java ниод ебх м б о ль ш о й н аб о р фай лов , вщя дои х х в саост в ьл а н в и у р т о й м аш и н ы Java. С во я с р ед а в ы п о лн ен и я р т есб у я и п р и ло ж ен и я м .N ET. Г лавн о е о л ти ч и е эо т й с р ед ы в ы п о лн ен и я о т все х ехт , к отры е бы л и п ер ч и с л ен ы вы ш е , з ак лю ч асет я в от м , ч т о е ди н а я с р ед а в ы п о лн ен и я .N ET и сп о ль зсету я п р и ло ж ен и ям и , н а п и с а н н ы м и н а лю бы х яз ы к а х п р о гр а м и р о в а н и я .N ET. х гл а в н ы х к о м п о н е н от в . П ерв ы й к о м п о н ен т — э т о ряд о С ам а CLR со ти т и з ву д с р ед ы в ы п о лн ен и я , к отр е р еал и з о в ан о в в и д е б и б л и о ет к и m sc o r e e . d l l . П р и обра щ ен и и к п р и ло ж ен и ю .N ET би бли оетк а m sc o r e e . d l l авотм аит ч еск и з а ж гр у с е т я в п а м я ьт , и з еат м о н а п у р а в л яе т п р о ц ес о м з а гр у к и в п ам ят ь сбо рк и да н н о г о п ри ло ж ен и я . рЯд о с р ед ы в ы п о лн ен и я о в т ес н н о з а м н о ж е с вт о з а дч : о н о з а н и м а ест я по и ск о м фи з и ч ес к о г о м е с о т н оа хж е д н и я сборк и , о бн аржуен и е м вн рт у и сбо рк и з ап ро ш ен н о г о ит п а (к лас , и н етр ф й с а , р уктс ы и .т п . ) н а о с н о в е и н фо р м а ц и и м еа т д н ных , к о м п и л и реу т IL в п л а фто р м ен н о - з а в и с и м ы е к о м а н ыд , в ы п о лн яе т п р о в ер к и , с в яз ан н ы е с о б ес п еч н и е м б е з о п а с н о с ит , и дела т еш е м н о г о дгору й р а б о ыт . В о тр й гл а в н ы й к о м п о н ен т CLR — э т о би бли оетк а баз о в ы х к лас о в . С ам а би бли о ек т а р а з б и т а н а м н о ж ве с т о л еь н д о т ы х сбо р к , онд ак о лга в н а я сбо р к а б и л и о е кт и баз о ыв х к л а с о в п а в с р тл е д н а фа й л о м m sc o r l i b . d l l . В би ли оект е б аз о в ы х к л ас о в с о е рд ж и ст я о гр м н о е к о л и ч ве с т о ит п о в л д я р еш ен и я р а с п р о с та н е н ы х аз д ч п р и с о з а дн и и п р и л о ж ен и я . П ри ло ж ен и е .N ET е д уб т о б я з еа л т ь н о и сп о ль з о в ат ь сбо р к у m sc o r lib . d ll и п о мре е н е ои д б х м о с т и — дигру е сборк и (к а к в срто ен ы е , та к и созавдем ы е в ам и ) . Н а р и с . 2.4 п ресдатв л н пь т у , к о тры й п р ои д х т п ер в и ч н ы й ко д п р и л о ж ен и я , п р е жд е ч е м в ы п о л н и т ь к а и е- ли б о дей с вт и я н а к о м п ь ю етр .
а н тр а д н т С
я с иесм т Ка
а типо
в CTS
ь р ан е , аснт рд а я с и ем т а ит п о в (CTS) — э т о всеобъм лю щ а с п ец и фи к а ц и я , котра я о п р елдя т , к а и м о б р аз о м к а о й - ли б о ит п (клас , ра укт р с и н етр ф й с , в срто ен н ы й ит п а д н ы х и .т .д ) олдж е н бы т ь с фо р м и р о в а н л д я ег о п р а в и л ь н о г о в о с п р и ят я о с р де й в ы п о л н ен и я .N ET. С и емст а CTS оп и сы вае т с и н а тк с и ч е с к и т п еродж и вьатся , а муог к о н к р с ц ут и и (н ап р и м ер , п зергук а о п е р оа т в ) , корты е у м ог и н е п е р ж д о и вь а т с я к о н к р ен т ы м яз ы к о м п р о г ам и р о в ан и я .N ET. Е сл и н е ои д б х м с о з ав т д ь сбо рк и , корты е о дл ж н ы и с п о л ь з о в ьа т с я в с ме и яз ы к а м и п р о г ам и р о в ан и .N ET, т о п р и соз анд и и ит п о в п р и с ет д я о с л в ед а т ь п р ав и ла м са н т д р н т о й с и ем т ы ит п о в Н иж е рас м орти м о с б ен о с т и те х ит п о в , корты е ю в у ст ое т с п ец и фи к а ц и и CTS.
сал К
е Рш е н и я
е мо т е ч а л с
я , е т о я .
ы CTS К о н ц еп ц и
ргам и р о в ан и я
к жу
я к сл а о . Он
. NET
в — ольгнкруае ы а рж е си п д т в а о
й к а м ен я м в ес
ь лю бог и яз ы к а м
о о б ъ н ек т о - о р и ен и т р о в а н о г и п р о г ам и р о в ан и
о п ро я .N ET. К лас
с —zyxwv
45
э т о н е о гр а н и ч е н н ы ц ел о . В CTS псмруоентд п р и м ен ен и я п о л и м о р фи з м в CTS з ап р ещ ен о п р о г ам и р о в ан и и н е тр ф й с ы , а такж
й н або . К лас я и м ож е е м ож е
р п о л ей , свой вст ы а б рс т к н ы а в п р о и з в он д ы с е в у с т ое т бы т ь а б ср т к н ы м т бы т ь з ак р ы т
, о дмте
в и с о б ы ит й , соавтляю щ и х и ед н о е , чт о обесп ч и вае т в о з м о ж н о ст ь . М н о ж есвт н о е н ао с л в ед н и е м о б ъ ек нт о - о р и ен ит р о в а н о г о ь о б л ас т ь в и д м о си т , и сп оль з оват ь я п рои з вонд ы х к л ас о в .zyxwvutsrqpon
е ч л ен
ы к лас о в х к л ас х т в се м р т е б о в а н и я , и м ет м л д я с о з а дн и
р .NETzyxwvutsrqponmlkjihgfedcba
о м К о п и т ял сИ о н х д а
я
п р о г ма м
•
а
•
• •
1
"1 а zyxwvutsrqponmlkjihgfedcbaZYXWV Ш
б Со рк
тш т ш ж рд Я
о
и с п о л н яю щ е
й
' иБ б ле к о т
е фд
ы
и б з оа в ы
х с ла к о
и рз г ч у а З
к ксал о
в
в о м К п о и т ял
р в р ем ен
и
в ы п о нл е и
я |
о р м ф те а л н П о
-
зв аи с м ы
е ком над
ы
'ш zyxwvutsrqponmlkjihgfedcba
1
• В ы п о нл е и е н и п р ол ж
иР с
р у т к ур т С
. 2.4. Понстьле оавсдл
ь винеыпол
е я
я пмарог
1 1
м в с ред
е CRL
ы CTS П оми м
о к лас о в в CTS атк ж ы м ожн о р а с м арт и в а т т и м ет ь лю бо е к о л и ч е с вт CTS муог п а р м ерт о в з ар ез р в и р о в ан ) . С ви т ь з н ач ен и е лю бог о п ол я р ук т с ит п а , со втюеу щ ег о р ук т с В с е р ку т с ы CTS п р о и з в едн Эот т баз о в ы й к л ас с о п р е дл я н и ям и , н о н е с о с ы л к а м и . В
р ку т с
46
е п р е сда т в л е н ы и р ы ку ст . В п ер в о м п р и бли ж ен и и ь к а к пу р о щ е н н ы е р а з н о в и нд о с т и к лас о в . р Сукт ы о к о н с р тк у о в с п а р м ер т а м и (к о н срткуо р бе з п ом щ ь ю к о н с р тк у о в с п а р м е рт а м и можн о с а ут н о ы в м о ен т с о з ад н и я э отг о о б ъ екат . В Delphi н е т е п л а фт о р м ы .N ET. ы о т е ид н о г о баз о в г о к лас а System .ValueT ype. т р ук т с у к а к ти п адн н ы х лд я р а б о т ы от л ь к о с о з н ач е р ук т с е м ож е т бы т ь лю бо е к о л и ч е с вт о и н ет р ф й с о в .
л ав Г
2. Зноакм с т во
с полрат м ф о й
.NET
О нд а к в д сге з овы
о р ку т с а я в л ю ст х с ц ел ь
ы н е м оуг я з а к р ы ыт м ю и х н а с л е до в а н и я
т бы т ь н у а с л е од в а н ы о т о с а лт ь н ы х ит п о в да н н ы х и он и и — и н ы м и сло в ам и , о н и н е м оуг т в ы п су т а ь в к а ч е с вт е ба .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF
ы CTS
Ие н й т р с ф
И н те р ф е й с ы — э т о п рост о н або р ы ы би й т . В оилчт е о т о к и с еч а л й инголхе т н вод ы м и о т и де н о г о ощ б г е о и н й ер ф тса В и йнерфаст х м аи с х п о сбе е смы лс а н е е зу т онел пдры й ийенфрс т , м ы мжео м в ив тс ев то с и с м з о яв ж н т с и эго т о ийеасфрн т м ож н о утаво нделса ь о эт т и нйерф т с сзар ел н Ч
ы ти п о
а б срт к н ы
х м ео т д в , св о й ст в и о п л ен р д и й со , ийефнср т ы .NET н е ювял с т я п рои з , ка и м в ми р е С О М бы л и н йр е ф т с iunknown. очне ь мн ог . Он дка о елс и ин тсозев , чт о ксал с рилае отажид ь о т эго т о кс ал а фн укц и но ьла го о пне диов я . П р и созанд и и с о б в те н о г о и н е рт ф й с а у о т н скеоьл и х бзаовы х и н рйефтсов . и С ОМ
в CTS
ы м о уг т и м ет ь лю бо е к о л и ч е с вт о ч ле Р ан е е бы л о о мт е ч н о , чт о клас ы и р ку с т н о в . Чле н — э т о л и б о м о е тд , л и б о с в о й с вт о , л и б о п оле , л и б о с о б ы ит е . Д л я к аж одг о т н або р а рх к е т р и с т к . Н а п р и м е р , л ю б о й ч л е н в .N ET ахр к ч л ен а в .N ET сщ у евст е тр и з ес ту я св о е й о б л а сь т ю ви д м ост и ( p u b lic , p r i va t e , p r o t e c t e d и .т .д ). Чл е н м ожн о о б ъ яв и т ь к а к а б с рт а к нт ы й , чобт ы в о с п о л ь з о в а ьт с я в о з м о ж н о с ят м и п оли м ор фи з м а п р и р або т е с п р о и з в о нд ы м и к лас м и . Чл ен ы м оуг т бы т ь с ати ч е с к и м и (та к и е ч л ен ы м оуг т со в м еснт о и сп оль з овьатс я в с ем и о б ъ е к а тм и да н н о г о к л ас ) и о б ы ч н ы м и — п р и н а дл е ж а щ и м и от л ь к о о нд о м у о б ъ ек т у да н н о г о к лас . и н е сл ч е р П
я CTS П ер ч и с л ен и е — э т о уонб д а я п р о ам г н а я к о н к р с ц ут и я , корта я п о з в ел я т о б ъи ед н ят п ра ы "и м я - з н а ч е н и е " в гп ру ы , к корыт м зе та м м ож н о оибрьатс я п о и м ен и гпру ы . П р е пд о л ж и м , ч т о в п р о г ам е н е о б их д м о в ы би рат ь о ид н и з р е т х ти п о в о чт е от в — сатн адр нт ы й (Standard), р а с ш и р е н н ы й (Enhanced) и л и с ек р ент ы й (Secure). Д л э от г о в Delphi м о ж н о с о з а дт ь с ю л уе д щ и й ти п : t yp ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Report = (Standard, Enhanced, Secure); и в ы би рат ь очт е , п ро ст о в од я о с м ы с л ен н ы е фр а з ы , н а п р и м е р : M yReport := S e c u r e ; В CTS вс е п е р ч и с л е н и я я в л я ю ст я п р о и з в о дн ы м и о т е д и н с вт е н н о г о баз о в г о к лас с а System.Enum. Э от т баз о в ы й к лас с с о е рд ж и т м н о ж е с вт о п о л ез н ы х ч л ен о в , к о тр ы п о м уг т в работ е с п ар м и "и м я - з н а ч е н и е " .
т агел Де
ы CTS Д е л га т ы в ми р е .N ET — э т о б е з о п а с н ы Н о в о лт и ч и е о т рг и д у х яз ы к о в п р о гр а м и р о в а н и я ар д е с в о п е р а ти в н о й п а м я ти , а к лас , п р о и з в о дн ы D e le ga t e . Д ел га т ы о ч ен ь п о лез н ы в е т х с и а ту ц и я х й с щ у н о с ти . Д ел га т н ост ь п е р ад л а вы з о в р г до у н о л ги и о б р а б о тк и с о б ы ти й в с р ед е .N ET. ы н е о р с тВ
н аб о в раз ли чн ы од н и м ы з овы
е Рш е н и я
ы дын а х CTS е ип т е .N ET псмруоетд н ы б оатг й я в с ме и яз ы к а м и п р о г ам и р о в ан и х зя ы к а х .N ET му го т втеыдялг дл я врсотен ы х с и ем т н ы х ит п о х ит п о в . П ер ч н ь врсотен ы х ит п о
В срде р и с п о л ь зс е т у
.NET
н або ь п о - р аз н о м у в дан ы в дан ы
е дл
я ти п о в к у а з ет л и н , едл га т .N ET э т о ж у й о т баз о в г о к лас а , когд а н жу н о , чотб ы ы — э т о к р а егуо л ь н ы й к ам ен
ь я
е
а ф ун к ц и и . е н е п рост о M u lt ic a st о нд а сщу ь в е тх -
р в р с то е н ы
х ит п о в а дн ы х , п ри ч е м эот т я .N ET. Н аз в ан и я ит п о в ад н н ы х , н о эт и н аз вн и я вгес о ли ш ь п с ев х .N ET, оп релдн ы х в би бли оект е ба х .N ET п арвстелд н в табл . 2.1.zyxwvutsrqponm
47
ц ил б а Т
а 2.1. Вы н е о рт с иТ
п ын ад
е тпи иТ
х .NET
ы ы н да
х CTSzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ иТ
п в Delphi .NET
п в V B .NET
иТ
п в С #
byte Byte Byte System.Byte sbyte System.Sbyte Shortint short Smallint System.Intl6 Short Longint Integer int System.Int32 Long System.Int64 long Int64 System.UIntl6 ushort Word uint LongWord System.UInt32 ulong System.UInt64 Single float System.Single Single double Double System.Double Double Object Object object System.Object System. Char WideChar Char Char System.String WideString String string Currency System.Decimal Decimal decimal System.BooleanzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Boolean Boolean boolzyxwvutsrqponmlkjihgf К а к ви нд о и з таб л и ц ы , н е вс м и и т п ма и дна ы х CTS. П ом эт у н ы х к о н с т р ку ц и й ) , с к о т р ы м гр а м и р о в а н и я в сред е .N ET. Т ак о в ен д о боле е п олн о е совсите ц ил б а Т
а 2.2.и твес Со ирогетаК
Ти е пит
ывоканЗ
е пит
ывоканз еБ
ы ы
е пит
Вещ ств н ы
и .N ET муог ь важн о оилептдр й н або
е пит
ы
ы
р еь с т
е п ри м и т в н ы
е ы н в пмит р
я
ывоп урГ
е яз ы к очен г а р н ти р о в а н н
ь с н ек о тр ы м и в рс т о е н ы ь тако й н аб о р ти п о в (и п роагм о с м о гу т р а б о ат ь л ю б ы е яз ы к и п ро , и о н н аз ы васет я CLS. В табл . 2.2 п ри х ти п о в Delphi 8 и п лфаотрм ы .N ET.
х о п ит
п Delphi
в Delphi 8 и м р о пфтал Ти
Integer Cardinal Shortlnt Smallint Integer Int64 Byte Word LongWord Single Double Extended Comp (св т о . Int64, е швератсу ) Currency Decimal Real(св т о
т работ
. Double)
-
ы .NET
п CLR System.Int32 System.UInt32 System.SByte System.Intl6 System.Int32 System.Int64 System. Byte System.UIntl6 System.UInt32 System.Single System.Double Borland.Delphi.System.Extended System.Int64
Borland.Delphi.System. Currency (зс и п а ь н а в о н с о е Decimal) System.Decimal System.DoublezyxwvutsrqponmlkjihgfedcbaZYX
л ав Г 2. Зноакм с т во с полрат м ф о й 48zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
.NET
Окончаие ирогетаК
я
ыньловмиС
е тип
велуБ
ы п ит
иТ ы
п Delphi
иТ
табл.
2.2.
п CLR
Char _ System. Char WideChar (св т о . Char) System.Char Boolean System.Boolean ByteBool Borland.Delphi.System.ByteBool WordBool Borland.Delphi.System.WordBool LongBool Borland.Delphi.System.LongBoolzyxwvuts
ы
ы CLSzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Ос н о в
и од к а з ы в а ь т , ч т о о нд и и т е ж е п р о г ам н ы е к о н с тр к у ц и и в раз Н е т н е о б хи д м о с т х яз ы к а х в ы гл я д т а б с о л ю нт о п о - раз н о м у . Н а п р и м е р , в С # и D elphi о б ъ е ди н е н и е к (к о н к а те н а ц и я ) п р о и з в о ид ст я с п ом ощ ь ю о п е р ао т а п лю с " + " , а в Visual Basic л д я э от й ц е л и и с п о л ь з се т у я ам п ер с ан т "&". Д л я сред ы в ы п о лн ен и я .N ET та к я раз н и ц а в с и н та к с и с е а б с о л ю нт о б ез р аз л и ч н а : вс е р а в н о с о в ют е у щ и е к о м п и л я то р ы с о зу а д т о ди н а к о в ы й ко д IL. О нд ак о яз ы к и п р о гр а м и р о в а н и я о л ти ч а ю с т я н е то л ь к о с и н та к с и с о м , н о и в о з м о ж н о сятм и . Н а п р и м е р , в онд и х яз ы к а х п р о гр а м и р о в а н и я р а з р еш ен а п е зр г у к а о п ер оа т в , а в иг руд х — н ет . О нд и яз ы к и м у ог т и сп о ль з о в ат ь х а тк и е ит п ы адн н ы х н е п с м р у е од тн ы . П о э тм у б ез н а к о в ы е ит п ы адн н ы х , в иг руд нжу ы н ек и е е ид н ы е п р ав и л а л д я в се х я з ы к о в .N ET. Елс и и м ос л ьв ед а т , т о п р о г ам н ы е ли м у о д , н ап и с ан н ы е н а р аз н ы х яз ы к а х , у д уб т н о р м аль н о в з а и м о е й д вс т о а ь р уд г с догмру . Т а к о й н або р п рави л оп релд н в ун и в ерсаль н о й с п ец и фи к а ц и и яз ы к а (CLS). Н або р п р ав и л CLS н е отль к о агр н и т е р у т н о р м аль н о е в з а и м о е й д в с ит е бло к в к ао д , с о з ад н н ы х н а раз н ы х яз ы к а х , н о и о п р едля т м и н и м аль н ы е рт е б о в а н и я , к о т р ы е п р е ъд я в л ю с т я к лю бо м у к о м п и л я от р у .N ET. Н ео б хид м о п о м н и ьт , ч т о CLS — э т о ли ш ь ч аст ь е т х в о з м о ж н о с етй , к о тр ы е о п р едл н ы в CTS. П рав и ла м CLS од л ж н ы о д в ул е т р я ь и и н с р тм у е н а т л ь н ы е с р в е тд а с р ед ы раз ра б о кт и — есл и м ы иотх м о б ес п еч и т ь м еж ъ яз ы к о в е в з а и м о ед й с в т и е , о н и до л ж н ы ге н е р и р о в ат ь то л ь к о ат к о й код , к о тр ы й с о е в ту т рт е б о в а н и я м CLS. У к аж одг о п ра ви л а CLS ест ь н а з в а н и е (н а п р и м е р , CLS Rule 6). Во т п р и м е р онд о г о и з сам ы х в аж н ы х п р ав и л — п р а в и л о н ом е р 1. П рав и л о 1. П рав и л а CLS о нт о с ят я от л ь к о к ч а сят м ит п а , п р е дн а з н а ч е н н ы м дл я в з а и м о де й с в т и я з а п р е лд а м и сборки , в к о т р о й о н и о п р е дл н ы . И з э от г о п рав и л а т е у дсл , ч т о п р и р еа л и з а ц и и к а ог - ли б о ит п а можн о ск оль к о г о ну д о н а ршу а т ь п р ав и л а CLS — э т о н и н а ч т о н е п о в л и яет . Н а п р и м е р , м о ж н о с о з ад т ь х к лас п р и ло ж ен и е .N ET, к отр е в з а и м о е дй с в т у т с в н еш н и м м и ро м с п ом ощ ь ю р ет сов , и в к аж од м и з эи т х к л а с о в от л ь к о онд а ф ну к ц и я . П р ав и ла м CLS в э от м чслау е од л ж н ы од в ул ето р я ь от л ь к о рт и э и т х ф ну к ц и и (област ь в и д м о с ит , с о гл а ш ен и я о б и м ен о в ан и , ти п ы п а р м ер т о в и т. .д ) . В о в н ртуен н е й р еал и з ац и и эит х ф ну к ц и й , к л а с со в и л и п р и л о ж е н и я в ц ело м м ож е т бы т ь сколь к о угонд о о пс т у л е н и й о т п рав и л CLS.zyxwvu ны ср т о
а им е
р о Пс т а с н т в П о сл б е н н о с ят Н ап р и м ер ло г в ы з а н и м а ьт с
рП о с т р а н с т ва
е з н а к о м с вт м б и б л и о ет к , б и б ли оетк х окон , м ен ю я с о з ад н и е
н
а с о б щ еяз ы к о в й и с п о лн яю щ е й с р ое д й .N ET о б р аит м с я к ос и баз о в ы х к лас о в .N ET. В аж н ост ь б и б л и о ет к код а о ч е в и нд а . а M F C о п р едля т н або р к лас о в C + + дл я с о з адн и я фо р м , ид а е п ро г ам и ст ы м оуг т н е , п а н ел й пу р а в л е н и я и .т д . В резльату м от г , ч т о ж у е да в н о с ед л а н о , а со редотч и ьт с я н а ну и к а л ь н ы х zyxwv
и м ен
49
а с п ека т х р а з р а б ыт в а е м о г о и м и п р и ло ж ен и я в Delphi, Visual Basic, Java и в о евс х осалть н ы О нд а к о в о лт и ч и е о т э ит х я з ы к о в п р о гр а м и р о в а н и я щ есу в т т б и б л и о етк и баз о в ы х к лас о в от л ь к б оч т и к и и сп о ль з юу т б и б л и о е тк у б аз о в ы х ит п о ц и и ти п о в вн рт у и э то й б и б л и о е т к и и с п о л ь з се т у
е пврнсоат
шй е н и ж а В оЬ г т
а им е
. н А ал о ги ч н ы е с р ве д т а щ су ю в ет т х яз ы к а х п р о гр а м и р о в а н и я . , в яз ы к а х л д я с р ед ы .N ET н е о д л я о нд о г о яз ы к а . В м ест о э от г о р аз р а в л д я в с е й с р ед ы .N ET, а лд я о р ган и з а я к о н ц еп ц и я п р о с рт а н с т в и м ен .zyxwvutsrqpo
н .NET
Э ф е к ит в н о с т , н а с к о л ь к
ь р або т ы п р о г а м и с ат , и сп о ль з юу щ ег о .N ET, н ап р ям у ю з ав и с т о т о о хр ш о о н з н ак о м с е т м м н о ж е с вт о м ти п о в , к о тр ы е о п р е дл н ы в пнарв тос х и ме н б и л ке о т и з аб о в ы х к л са о в . С ам о е в жа н о е п р оа н с т в о и ме н на з ы с в т ае я System. В н е м оп релдн ы к лас ы , корты е о б ес п ч и в а ю т в а ж н ей ш и е н фу к ци , и н и онд о п р и л о ж ен и е н е оиосдбтх я бе з и с п о л ь з о в а н и я э о тг о п р о с а тн в с т а и м ен . П р на о с т в о и ме н — эт о сп о б о р агн и з а ц и и ит п о в (класов , п ерчи слен и й , и н ерт в и ср у кт ур т ) в еи дн у ю п ур г . В онд о м п р на о с т в е и ме н обы ч н о объе йе ф с о в , до тагле д и н я ю тс я в з аи м о св яз ан н ы е ти п ы . Н а п р и м е р , в п р о с рт а н с вт е и ме н System .D rawin g с ое р д ж и с т я н або р ти п о в , к о тр ы е п ри з в ан ы п ом ч ь в о р га н и з а ц и и вы вод а и з о бр аж е н и й н а гр а фи ч е с к о е с р ту о й с в т о . В .N ET п рсемуд ортен ы п р о с т а н с вт а и ме н л д я о р га н и з ац и и ит п о в , р ас ч и атн н ы х н а р аб о т у с баз м и ад н н ы х , с еьт ю , м н о г п о тч н о сьт ю , з ащ и от й ад н н ы х и м н о ж е св т а иг р уд х з а чд . В атбл . 2.3 п р и в едн ы н ек о т р ы е п ро ср т а н св т а и ме н .N ET.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA а 2.3. Прос т ра нс т в
аТ б л и ц П р о с тр а н с тв
о и м е
а им е н .NET
System
н .NET Н а з н а че н и
е
в е с т М но ж в ы п о лн е и
о нориузквнеы я м е ам т и а т е ч с к
х ксал о
в дл
System.Collections
сла К ы дл я рба от ы с коентй рны м A r r a y L i s t , Q u eu e, S o r t e d L i s t
System. Data System. Data.Common System. Data. OleDb System.Data.SqICIient
л ас К
В эот и с п о з у ле ь м ы п р о г ма м н о г
System.Diagnostics
System. Drawing System. Drawing. Drawing2D System. Drawing. Printing
ы дл
и Тп
В э от о п е р ац и
System.Net
тЭ п е р д ач л аК с ы п о з л ь с е в и ат к
System. Runtime. Remoting
рС е д с в т М ОС- с ер в ы
System.Security
ак
50
ы с б азм
и дан ы
е и м е
н ссато дер ж и .NET д л
м про с тан в
е и м е и вво-ад вы од
в во
я в з аи м о д е й с в ти ) и ти п ы
л ав Г
и и оладтк , р ас рто вы
и ипмта и
, .
к
е тип ы и
,
х и зеониб йраж
, е б уф
ы ти п ы р и т. д
а о б ес п ечни е и м е , кри поетгр аф
2 . Зноакм с т во
, овтеачю щ и
я удален о г
е з а е пр
и
я и вызо в
м код е д л
ы
.
, с о здани я
я в ы п о лн е и я с о р и г налыь
, и с позлуьем ы
е л ас к
, и с позлуьем ы
я о б е н иа р я у ж врем
,
и и с п ециналыь
т ти п ы е дл
х и тп о
В с ред е .NET с редвт к с о с редо й и с п о лне и я В э от м про с ртан в с разреш ени ям и
и ка
я м но г ичс лен ы
и пеатч й
н ое дибнеъ а в файл
, предназ еч ны
а дл
, тиакм
и оеатмк б ъ и
я трас и р о в к
о и м е н с ои дер ж х п о с ет и
е дан ы
а и т. д
х
о иейнстр фа , пко держ х и зоенби р аж
о про с нат в
ы с проысмт и м су ор
а
я и е ч с г ро к аф , пиоткграм м а н ы с ло ж
я вы о д
System. 10
System. Reflection System. Reflection. Em it System. Runtime. InteropServices
е яз ы акм о код
ш о тв р и ф дл
я р аб о т
м про с ант в
ы дл
я рбаот , с б о р к
х о п ер ац и й
а
м (Win32 DLL, о до с упт а
я б езо пас но сит и енгтри о ван ы , та к и с б и б л оетк й б азо вы х тип о в . н ноахсдят я клас ы д л я р аб о т ы й и т. д . zyxwvutsrqponmlkjihgfedcbaZ
с полрат м ф о й
.NET
а ин е к ч о О о им е
рП о с т р а нс т в
н .NET
а Н з н еч н и тЭ р аб о т
System.Threading System.Web
л аК с ы е п н ри я х л о ж
System.Windows.Forms
л ас К э л е м е на м т
System.XML
в с н р ат о П
еМ с в н то ж
а им е
е
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ
о пр о с ртан в
о име и
е с поматк , котры
е предназ ч
н дл
я типо в
, корты
ы дл я ASP.NET
, влюкач ы д л
2.3.zyxwv
т.лаб
я р аб о т и уп р авлени
ы с э лем еамнт и
о клас о
в д л
я и с позль вани ией снртф и типам
я и про ич м я раб о т
е и с п озлуьюст
ы с дан ы м
я пр
и
я в Webа Windows — о нк ам и
,
и и в форм ат
е XML
н в DelphizyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG
В Delphi 8 фай л ы п кр о те а (п рогам ы , би л кеот и и л и п ы а к те ) н еяв н о я од вх т в п ро не им пкетоар по аиню.ч ло ум Мл у од ь м ож е т р а нс т в о и м ен , н аз ы вамео е т а мс в н р о п б ы т ь и л и ч н ле о м п нр а в о тс а и ме н п о м оу л ч а н и ю , и л и лд я н ег о м ож н о яв н о о б ъ вя и т ь п р оа н с т в о и м ен . В о вор т м сча ул е п р о а нс т в о и ме н осбъвтеял я в з оаглвк е я л у м од .zyxwvu uni t MyCompany.MyWidgets.MyUni t; О б р а ит е вн и м ан и е , ч т о о детл ь н ы е п р о с рт а н с вт а и ме н р а з де л я ю с т я то ч к а м и . Н о в да н н о м с лч у а е то ч к и н е я в л я ю тс я р а з д е л и те л я м и м еж д у и м ен ам и , а я в л я ю т с я ч а с ть ю и м ен и м о л уд я . И м я и с ох дн о г о фа й л а дл я д а н н о г о м ол уд я до л ж н о бы т ь о фа й л а , с о з да н н о г о к о м п и л я то MyCompany .MyWidgets .M yU nit . p a s, а и м я вы ондх ог ром , е д бу т M yC ompany.M yWidgets.M yU nit.dcuil. Т оч к и в да н н о м ч с ал у е п о к аз ы в а ю т в л о ж ен н о с т ь п р о с та н с т в и м ен , а мл оуд ь MyUnit яв л ест я ч л ен о м п р о с т а н с вт а и ме н M yWidgets, к о тр е сам о в к л ю ч ен о в п р о с т а н свт о и ме н MyCompany. П о муо лч ан и ю д в г се а с о з а юд с т я п р о с т а н с вт а и ме н дл я евс х лемуод й п р о е к ат . Р а с с м орти м ю с лу е д щ и е о б ъ яв л ен и я . Program MyCompany.Programs.MyProgram; Library MyCompany.Libs.MyLibrary; Package MyCompany.Packages.MyPackage; Т ак и м о бр аз о м с о з а д се т я п р о с т а н с вт о и ме н п о м уо лч ан и ю л д я п р о е к ат . И м я п р о срт а н свт а и ме н п оч л с а у е т я п р и а лд е н у и и и м ен и л ум о д я (п р ав я ч аьс т ) вм ест е с о тч кой . М льуод , в котр м н е т я в н о г о о б ъ яв л ен и я п р о с т а н св т а и м ен , н аз ы в аест я гуп-ро мв ы ,ме ул до м о н авотм аи ч еск и с ат н о в и ст я ч л ен о м п р о с т а н св т а и ме н (ч лен о м п гр у п ы ) п р о екат . Н а п р и м ер , есл и со з адт ь л м уо д ь ка к u n i t M yU nit; т о к о м п и л яо т р аовмтиа ческ и в к лю ч и т ег о в п росатн вст о и ме н MyCompany. P rogram s. П р и о э т м п р на о с т в о и ме н п о м о ул ч а н и ю н е в ли е я т н а и м не а н о и д ы сх х фа й л о в п ру г о в ы х й е л у м до . В пщыудре м п р и м ер е и м я афй л а м ож е т бы т ь M yU n it.pas, н о п р и с о з ан д и и ай ф л а с р а с ш и р ен и е м . d c u i l ком п и олят р е д уб т и с п о л ь з в ат ь п р о а нс т в о и ме н п о умолчан и ю и бе д у т соза д н фай л с и м ен м M yCompany.Programs.M yU nit.dcuil. Вс е и м ен а н е вч с у т и е л ь н ы к р е ги ср т у к л а в и р ы уа т , н о к о м п и л яот р с о р ха н и т им я в ег о о р и ги н а л ь н о м в и д е и е д бу т и сп о ль з о в ат ь э т о и м я п р и с о з ад н и и в ы о н дх ы х фай л о в , с о б щ е н и й о б ош и бк а х и п р и п р е од с а т в л е н и и и н фо р м а ц и и о ит п а х в р ем н и ис п о лн ен и я . В и н фо р м а ц и ю о ит п а х в р ем н и и с п о лн ен и я у д уб т в к л ю ч ен ы п олн ы е оп р е дл н и я п р о с т а н свт а и м ен .
сио П
к пв снтаро В мл уод
з ав и си т фи ц и р о в а т
рП о с т р а н с т ва
. К а
а им е т о б ъ яв л ьт с е у м ог к и дл я п лафотрм ь э т и ил у м од
и м ен
н я (п окдлю ч аьтся ) игрду е млиоуд , о т котры х эо т т л муод ы Win32, к о м п и л яот р Delphi 8 дл я .N ET долж е н и ед н и т . В часлу е с яв н ы м о б ъ яв л ен и е м и ме н п т у ь д г вес а и з в е с нт
ь
, н о zyxw
51
с ел и э т о п рг у о в й ль м у о д , т о к о м п и ляот р долж е н о п р е дл и т ь о б лас т ь п ои ск а п ок д л ю ч ен ы х йл е м у о д . Р асм роит м ю у с л ед щ и й п ри м е р л му о д я с яв н ы м о б ъ яв л ен и е м п ро р ан с т в а и ме н и п окдлю ч ен ы м и лмя у о д и (дл я ч его и с п о л ь зсет у я ид р е к и т в а u ses) .zyxwvut unit MyCompany.Programs.Units.MyUnitl; uses MyCompany.Libs.Unit2, Unit3, Unit4; сеЗ д ь мл у до ь M yU nitl явсляет я член о м пнравотс а и м е н MyCompany. Programs .U n its. Мл уод ь M yU nitl з а в и с и т о т р е т х иг р ду х м л о е йу д : млоуд я U n it 2 в п р о стан свт е и ме н х л ме у о д й U n it 3 и U n it 4. MyCompany.Libs и дву х пгру овы К о м п и л я от р м ож е т л е гк о с а т ну о в и т ь п олн о е и м я л м уо д я U n it 2, н о лд я н оажхед н и я п о лн ы х и ме н м л е оу д й U n it 3 и U n it 4 к о м п и л я то р од л ж е н п р о и з в ес т и п ои с к сре д и с о в т юе у щ и х п р о с рт а н с т в и м ен . Д л я п о и с к а и с п о л ь з ю у ст я и с то ч н и к и : о п ц и и к о м п и л я от р а , о б ъ яв л ен н ы е в фай л е п р о ек т а п р о с т а н с вт а и м ен , п ро стан свт а и ме н п о м уо л ч а н и ю и , н а к о н е ц , текщу е е п р о с т а н с вт о и ме н дл я да н н о г о м л я оу д . В фа й л е п р о ек т а м ожн о до п о л н и е т л ь н о о п р едл и т ь сп и со к п р о с т а н с вт а и ме н по и с к а л д я г пр у о в ы х м л е йо у д . О б ъ яв лен и е п р о с т а н с вт а и ме н до л ж н о п р о и с хд т ь ср аз у п о сл е о б ъ яв лен и я п ро г ам ы , б и б л и о етк и и л и п а к ет а и п ер д в с ем и рдг и у м и к о н с рт к у ц и я м и и л и бло к ам и . П р о стан свт а и ме н в сп и ск е р а з едл я ю с т я з а п я ыт м и и сп и со к до л ж е н з а к н ч и в а ьт с я от ч к о й с з а п я то й . К о м п и л я от р бе д у т п р о и з в о ид т ь п ои с к в сюлуед щ е м п о р я кд е : • • • •
е кщ т у е п р о с т а н с вт сп и со п р о с т а н с вт
е п р о с т а н с вт о и ме к п р о с тан свт а и м ен
о и ме н м л я оу д ; н п о муо лч ан и ю ; а и ме н п р о е к ат ; , указ н н ы е в о п ц и я
х к о м п и л я от р а
.
Н иж е п р и в ед н п ри м е р фа й л а п р о ек т а и м л оу д я с о б ъ яв л ен и е м сп и ск с рт а н с т в и ме н дл я п о и с к а фа й л а . л па т к е о р . // Фй а program MyCompany.Programs.MyProgram; namespaces MyCompany.Libs.UlWidgets, MyCompany.Libs.Network; // Фй а л мя л у д о . unit MyCompany.Programs.Units.MyUnitl; И сп оль з у я э т и о бъ яв лен и я , к о м п и л я то р е д бу п о р я дк е : ќ ќ ќ ќ • Е лс т о п ои с п р о и з в о ид т п рг у о в г
MyCompany.Programs.Units; MyCompany.Programs; MyCompany.Libs.Network; MyCompany.Libs.UlWidgets; П р о с рт а н с вт о и м ен , указ н н о е в оп ц и я
х к о м п и л я от р а
ь п ои с
к в с ю л еу д щ е
-
м
.
я гп ру овы м (т.е . н е и ме т яв н о объявлен ог о п р на о с т в а и м ен ) , я с п р на о с т в а и ме н п о м оу л ч а н и ю . П клюод чне и е е л у мдо й м ож н о ь к а к с п олн оьст ю к уа з н ы м п р о с т а н св т о м и м ен , та к и с куаз н и е м отл ь к о о и м ен и , п р и эот м уодсвтери вш и сь , ч т о к о м п и ляот р см оже т н ай т и ль м у о д . В п р и м ер е н иж е п ок аз ан о , к а к м о ж н о п о кд л ю ч и т ь м л ои у д . unit MyCompany.Libs.MyUni11 uses MyCompany.Libs.Unit2, // Пь т с о н л о ю уо н а з а к е ия м . UnitX; // Го в о п у р е ия м . П р и э от м в п р о г а м е м ож н о о б р а щ а ьт с я к э л е м н ат м л м уо д я к а к п о п о лн о м у и м ен и , та к н еп о с р едс вт ен н о п о и м ен и э л е м н ат .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP
52
и мл у од к н а ч и н с а ет
т п р о и з в о ди т
а п ро
ь я в лс е т
л ав Г
2. Зноакм с т во
с полрат м ф о й
. NET
uses MyCompany.Libs.Unit2; begin writeln(MyCompany.Libs.Unit2.SomeString); writeln(SomeString); end.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA П р и и сп о ль з о в ан и и п о л н о г о и м ен и н ео бихд м о в к лю ч ат writeln(Unit2.SomeString); // Ошибка ! writeln(Libs.Unit2.SomeString); // Ошибка ! writeln(MyCompany.Libs.Unit2.SomeString); writeln(SomeString); С сы лк а от л ь к о н а ч аст ь п р о с т а н с вт ош и бкой . uses MyCompany; // Ошибка
а и ме
н пр
и п о дк л ю ч ен и
ь им
я цели к о м
// Правильно // Правильно
.
. . и л ме уо д
й а тк ж
е е д уб
т
!
Чо т б
ы н е н а б и р а т ь о ч ен ь дл и н н ы е и м ен а , м о ж н о о б ъ яв л т ь п с е в до н и м ы и и с п о л ь з о в ат ь и х л о к а л ь н о в млеоуд . С едлат ь э т о м о ж н о так . u ses MyCompany.AVeryLongN amespaceD esignation.VeryD escriptiveU nitN ame as aU n it; П о сл е чег о н а и м я м о ж н о с ы л аьт с я с п о м о щ ь ю п с е в до н и м а . Н и ж е п р и в е дн ы дв а э к в и в а л е н нт ы х в т е ур ж д н и я . wr i t e l n ( a U n i t . S o m e S t r i n g) ; writeln(MyCoirpany.AVeryLongN amespaceDesignation.VeryDescriptiveUnitN ame.SomeString); zyxwvu
к пти ч у ло
аК
ь иомр ица фн
ю
М ы р ас м ио т м р аз ли ч н ы е в о з м ж н о ст и п о ф р м л ат ы .N ET с и сп оль з ован и е м п ро н ар в т с а и ме н и сржещаод си х я в н и х ти п ов , н о в он д о й кн и г е н ев о з м о ж н о о п и сат ь вс е п р н а о ст в а и м ен . Ниодмебх о умте ь ни одт ха ь и н фо р м а ц и ю о нжн уы х итп а х и п роаснт ва тс х и ме н с а м о с е т ял ь н о . обнд еУ е в с ег о и сп о ль з о в ат ь дл я эотг о и тл у у ild a sm . e xe , о ко рт й ж у е уп о м и н ало с ь вы ш е , от х я ест ь и диг ру е в с т р де а п о ч л уе н и я н ио е д б х м ы х с в енд и й . Н ап р и м ер , с .N ET SD K поасвтляю ст я уит л т ы ildasm , c la ssvi e w И wincv.
с и аз м е Д б л
р ildasm.exe О фи ц и а л ь н о
е н аз в ан и е i l d a sm . e xe м о ж н о п ер в с т и к а к "уит л и т а ди з а с е м б л и ро в ан и я п р о м ежтчу н о г о яз ы к а" . В адл ь н ей ш е м е д бу м е е н аз ы в ат ь п рост о а п о з в о л яе т п р о с м о рт е ь с о ед р ж и м о е лю бо й сборк и "ди з а с е м б л е р о м " . Э т а ит ул т .N ET (фай л а с р ас ш и р ен и е м . d l l и л и .е х е ) . М о ж н о и з ч уи т ь м а н и фес т , м еатдн н ы е и IL. П р и э от м вс е о п ер а ц и и п р о и з в о яд с т я с и сп о ль з о в ан и е м дру ит п о в и и н с ртку ц и ж е с вт н н о г о гр а фи ч е с к о г о и н ет р ф й с а . П р о ст о з а п си т у е i l d a sm . e xe и с п о м о щ ь ю к о м ан д ы м ен ю F ile^Open октр й т е н жу ю сбо р к у . Р ан е е э т а уит л т а ж у е и с п о л ь з о а сборк и Sum ( с м . рис . 2.2 и 2.3). в ал с ь дл я п ро см орт К а к в и дн о , р укт с а сборк и п р ес а д т в л н а в сам о м обы ч н о м фо р м а т е с е др в о м и зу лам и . К ажыд й м еот д , св о й свто , в л о ж ен н ы й к лас , к а к и в с е о сатль н ы е ти п ы , м ад м п е ид з а с е м б л е р а э т и з н а ч к и п р с е а д тв л н ы сп ец и аль н ы м и з н ач к ам и (в тексотв у д уб т з ам ен ен ы н а аб р ев и рауыт , с о т ящ и е и з тре х с и м в о л в ) . П ом и м о п р о с м орт а и н фо р м а ц и и о ти п а х и и х ч лен ах , ild a sm п о з в о л яе т п о ч л ау т ь с в е дн и я о к о м ан ад х IL, о нт о с ящ и сх я к в ы бр ан н о м у ит п у . Д и з ас ем б л е р ild a sm обаелд т з а м е ч а тл ь н о й в о з м о ж н о с ьт ю в ы ж р г ау т ь и ер аи х ю и е см лу о д й сбо рк и в ет к с о в ы й фа й л , п о сл е ч ег о п о л ч у е н н ы й да м п м ожн о и з ч ау т ь в уодбн о й о б с ат н о в к е . оЧтб ы с о з адт ь е тк с о в ы й да м п , октр о й т е н ж ун у ю сбо рк у , в м е н ю File в ы бери т е к о м ан д у zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI Dump TreeView и укаж и т е и м я дл я со з адв ем о г о е кт с о в г о zyxwv
рП о с т р а н с т ва
и м ен
53
фа й л а
. О бриат е вн и м ан и е , ч т о гр а фи ч ес к и е з н ач к м и тек сот в ы м и а б р е в и раут м и . В фа й л можн о в ы г рж у а т ь н е то л ь к о ти п ы сборки , н о и о тн о с я щ и й с я к о б ъ е к ат м сборк и ко з н ач ен а р д г ау я к о м а н да : F ileoD ump. П о му о л ч а н и и с п о л ь з е у ст я р асш и р ен и е * . h. В ид з а с е м б л е р е ild a sm ест ь ещ е онд а о д б ун а м ожн о п р о с м а рт и в а т ь м е ат д н н ы е ти п о в , .т е . т у ру ю ге н е р и е у т к о м п и л я от р дл я сред ы и сп о лн ен и ит п о в до сат ч н о з а гр у и т ь сбо рк у в ild a sm и н аж т
ез ю м Р
и бу д у
т з ам ен ен
ы с о в т ею у щ и
и ч лен ы ти п о д IL. Д л я э от г ю лд я д а м п о я в о з м о ж н о с ьт и н фо р м а ц и я .N ET. Д л ь к лав и ш
-
в и с л е ду м о й в ам и о в ild a sm п р е дн а в с и н с т р ук ц и я м и IL
. С п о м щ ь ю ild a sm ю о ит п а х сборки , к о т я п р о с м о рт а м еа т д н н ы х и .zyxwvutsrqponmlk
е В э от я п он и м ан и
лд
й л а вг
с м ар т и в аь т с п ри вы чн ы н ч а уи е с т с а тв л е н и с о з ад н и
я е лд ь с о з адв т е о от м я и в ы п о л н ен и
е п р с е а д тв л н ы н ач ль н ы е с в едн и я о п л а ф то р м е .N ET, н еоибдх м ы я тог , к а к работе т Delphi в э от й сред . В о с н о в н о м в кн и г е е д уб т рас с о з ад н и е п р о ек т в ит п а VCL Form Application, .т е . у д уб т и с п о л ь з о в а ьт с я Delphi б и б л и о етк и , п роц р уед ы и ф ну к ц и , н о в к о н еч н о м и о тг е в т в ы п о л н я ьт с я от л ь к о в с р ед е .N ET. П р ед ь сборк и , к о тр ы е м оуг , к а у ю рол ь и гр а ю т сборки , н ео бихд м о лд я п о н и м а н и я в сег о ц и кл я п р о г ам ы .
н ы р о ь лт К
е вопр с 1. 2. 3. 4. 5. 6. 7. 8.
54
Н аз о в и т К ак и К ак и Чт Чт Чт Ка К ак и
е н еодсакт е о с н о в н ы е тнех о л ги о так о о так о о так о к о бъ яв л ест
е сборк а е п р о м е ж т чу н ы е ну и в ер с ал ь н а е срсведт
я п р о с т а н с вт а и с п о л ь з ю у ст
я ы а
ы и м о е лд
е з ачд и л еж а ? К а к и
е
и С ОМ . и с ат в и л и с ь п р и р а з р а б о кт е .N ET? т в о с н о в е .N ET? т и м ет ь фа й л ы сборк и е р а с ш и р е н и я м оуг й яз ы к Microsoft? я с п ец и фи к а ц и я яз ы к а ? о и ме н в Delphi? я лд я п о ч л у е н и я и н фо р м а ц и и о сборк ах
л ав Г
2. Зноакм с т во
с полрат м ф о й
?
?zyxwvutsrqponm
.NET
в а Гл
а 3
з Яы
к п р о гр ам м и р о в ан и Delphi
я
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
В эйто
гав.е л ..
•
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
К л ю ч ев ы
е сло в
К он соль н ы
а е п р и ло ж ен и
К л ю ч ев ы
е сло в
Ти п
ы ад н н ы
О п е р а от
я а яз ы к
а Delphi
х ы
В в о- д в ы в о
•
Р ез ю м
•
К о н рт о л ь н ы
д е е воп рос
осн ов
ы
е яз ы к а Delphi леж и т яз ы к п р о гр а м и р о в а н и я Pascal, к о тры й п о к аз . ! я к а к н аи бо ле е ну и в ер с ал ь н ы й и л егк о и з ч уа ем ы й яз ы к . П р и эот м ег о обд у н о и сп о ль з о в ат ь д л я с о з да н и я сло ж н ы х п р и ло ж ен и й , в к лю ч а я р або т у с Internet, баз м и да н н ы х , п р и л о ж ен и я м а с ш а бт а п р е д п р и я ит я . З а в р ем я с в о ег о раз в и т я яз ы к Pascal п о с т ян н о с о в е р ш е н с вт о а л с я , и н а ег о о с н о в е с о з ад н Object Pascal — э т о н аи б о ле е р а ид к а л ь н о е и а чд н у о е р ас ш и р ен и е в о з м о ж н о с ет й яз ы к а . Н ач и н а я с в ер с и и Delphi 7 яз ы к Object Pascal н аз ы в аест я яз ы к Delphi. В эот й лгав е п о з н ак о м и м с я с о сн о в ам и яз ы к а п р о гр а м и р о в а н и я Delphi, ег о алф в и от м и с и н ат к с и с о м . Яз ы к и п р о г ам и р о в ан и я р а з ыб т в а ю с т я л д я от г , обчт ы п ом ч ь п р о г ам и ст у о чт н е е и п о н ян т е е п а р с в ет д и ь л о иг к у а ло г р и м т а с п ом щ ь ю н ес к о л ь к и х з а р ез р в и р о в на ы х слов , ин од ыхс х з н а ч ен и й (оп рена овд ) и дейвист й на д н им и (оп ореатв) . П о н янт о , чт о л д я о бт р а ж е н и я л о ги к и о р и мг л а т а и сп о ьл ю з с у т я р аз ли ч н ы е сп о с бы , н ап р и м ер , м ож н о вс е о п и с а т ь обы ч н ы м и сло в ам и и л и и сп о ль з о в ат ь ж у е ш и рок о п р и м ен яем ы е м а ет и ч е с к и е з н ак и и си м в о лы . А м о ж н о и сп о ль з о в ат ь к о н с ртк у ц и и и с и н та к с и с яз ы к а п р о гр а м и р о в а н и я , н аи бо ле е п о я щдх е г о лд я э от г о а л го р и м т а , благо др я ко отр ы м л о ги к а а л го р и м т а е д уб т бо ле е п о н я нт о й , а р еш ен и е з а дч и — о п ит м ал ь н ы м . М н о г бр аз и е яз ы к о в п р о г ам и р о в ан и я с в яз а н о к а к с о с п ец и ф к о й яз ы к а (н ап р и м ер , н а Lisp и л и Prolog онб д еу е в ы п о л н ят ь л о ги ч е с к и е о п ер а ц и , а н а Fortran — м ает и ч е с к и е р а с ч е ыт ) , ат к и с р аз р абокт й н овы х яз ы к о в , овтеч аю щ и х с о в р ем н н ы м п о рт е б н о с ят м и с о з а дв е м ы х н а о сн о в е н ч ау ы х и с л е од в а н и й . С р ед и яз ы к о в п р о гр а м и р о в а н и я н аи бо ле е ш и рок е раз в и т е п о ч л иу и ну и в е р саль н ы е яз ы к и , с п о м щ ь ю к о рт ы х о дб н у о р еш а т ь к а к л о ги ч е с к и е з а дч и , ат к и в ы н ч и с л и е тл ь н ы е . П р и эот м ну и в ер саль н ы й яз ы к п р о гр а м и р о в а н и я одл ж е н бы т ь о б де у л д я о б р а ок т и ет к с о в , и з о б р а ж ен и й , фа й л о в , а со атв лен н а я п р о г ам а одл ж н а ох с еб
рош о ч и ьа т с ш е м м ож н п о рт е б н о с ят м
я и п о н и м а ть с о бы л о м о д и ф и ц и р о в а ть , и ег о и з чуен и
ыев ч ю Кл
е слво
я о дн о з н а ч н е н ач н е
о в с ем и п р о г р а м и с ат м и . Delphi н аи лчуш и м с клю ч евы х слов
, чотб ы е е в дал ь н ей м о браз о м овтеч а т в се м э и т м .zyxwvutsrqponmlkjihgfedcbaZYXW
а
е сло в а — э т о к а к к о м ан д ы дл я к о м п и л яот р а , н а , и л и з а р ез ер в и р о в а н н ы е к о тр ы х о н го тв и ст я к в ы п о л н е н и ю о п р едл н н ы х д е й с тв и й . Н а п р и м ер , к л ю е сло в а u n i t (мльуод ) и л и programm (п р о г а м а ) , р а с п о л ж ен н ы е в н ач л е к аж о д г о л м я оу д , п руед жаю т к о м п и л я то р о н ач л е п ро г ам ы . З а сло в м u n i t и л и program о б яз аетль н о од л ж н о р а с п о л а г ьт с я и м я мляоуд . Д ей с вт и е к л ю ч ев о г о сло в а , п о к а н е всрите я ог р уд е к л ю ч ев о е слов . Р ас м орти м р а с п р о с т а н я ес т я д о те х п о р к л ю ч ев ы е сло в а лд я к о н с о л ь н о г о п р и ло ж ен и я , со з адв ем о г о п о ум о лч ан и ю п р и в ы бо м м ы бе д у м р аб о т ь в э от й главе .zyxwvutsrq р е п р о ек т а ти п а Console Application, с к о тр ы program P r o j e c t l ; {$APPTYPE CONSOLE} us e s S ysU t i l s; be gin { TODO - oU ser - c C o n so le M ain : I n s e r t code h e r e } end. К л ю ч ев ы е
о сн о в ч ев ы
З ес д
х сло в а в ы е дл н ы ж и рн ы м ш р и ф то м . Т а к о е в ы ед л н и е к лю о в р еадкотр е код в D elphi, отх я лд я дигру х р е ад к о т р в э т о н и в ы бте д у е п и сат ь п р о г ам у в догру м р е ад к о т р е , т о так о г о в ы е лд н и я , в еронят е е в с е го , н е бте д у . П ре в о е в ы ел дн о е к л ю ч ве о е сло в о — programm, корт е ог в р и т о н ач л е п р о г ам м ы и з а корты м о б я з а е лт ь н о до лж н о р а с п о ль а г т с я и м я п рог ам ы . Зеат м и е д т к лю ч е во е с л о в о u se s (и сп о ль з о в аьт) , котр е ожт е о б я з еа л т ь н о в р с ечт а я в лю бо м ел у м од З а э и т м сло в м р ас п о л агю с т я и м ен а е т х доп лн и елть н ы х л ей м у о д , корты е у д уб т и с п о л ь з о в а тс я в п р о г ам е . В н аш е м ч а у лс е к а зу н о тл ь к о оид н л му о д ь S ysU t ils. Э т с и ем т н ы й ьл у м о д , в к о тр ы й , в ч аснт о сит , яод вх т п о д р г ам ы дл я о бщ ен и я с оп ера ц и он н о й с и емт о й , бе з н и х н и онд а р а з бы а т в а ем я п р о гам а р або т ь н е бте д у . Е с л и н е указ т ь э о т т л мь у о д , т о в рабо т е п р о г ам ы п рост о н е бе д у т см ы сла , ат к ка н ел ь з я е д уб т р а с п р едл ят ь п а м я ьт , октр ы в ат ь фа й л ы и л и делат ь н е о б и хд м ы е п р ео б раз о в ан и я , т.е . н ель з я бе д у т и сп о ль з о в ат ь в о з м о ж н о ст и о п ер ац и о н н о й си сетм ы . З еа т м и е д т к л ю ч ев о е сло в о b e gi n (н ач ло ) . Э т о сло в о го в р и т к о м п и л яот р у о н а ч ал е б л о к а в ы п о л н яем ы х к о дв . П о сл е э от г о сло в а од л ж е н р а с п о л а г ьт с я ект с т в аш е п р о г ам ы . К лю ч ево е сло в о e n d . (к о н е ц ) гов ри т о б ок он ч ан и и бло к а и о нд о в р е м ен н о о б о к о н ч а н и и все й п р о г а м ы , та к к а к п о сл е н ег о сот и т си м во л от ч к и ( . ) . М ы н е бе д у м о ж аб т с д у ь вс е к лю ч ев ы е сло в а , отх я и х н е та к у ж и м н о г , обдн у е и з ч а ут ь к л ю ч ев ы е сло в а н е п о с р е дс в т е н н о в п р о ц ес е р або т ы с н и ми . Е сл и е с т ь ж ел а н и е и н ебо ль ш и е з н ан и я а н гл и й с к о г о я з ы к а , т о м о ж н о о з н а к о м и ть с я с о в сем и к лю ч е вы м и сло в ам и в с п р ав о ч н о й с и с ет м , овящдх е й с со сат в Delphi 8. Д л я э отг о щ ел к н и т н а п и к от гр а м е с и з о б р аж ен и е м сп рав о ч н и к а н а п о л ь з о в а ет л ь с к о й п ан ел и ли б о в ы п о лн и т е юс л у е д щ и е к о м ан д ы м ен ю : Help1^Delphi Help (и л и н аж м и т е к ом би н ац и ю кла в и ш и , п ер м ещ а я п о сд в е ч н н о е п о ле , вы бери т е пну к т Delphi Help, п осл ч е го н аж м и т е к лав и ш у ). П р и э от м октр се я окн о сп рав о ч н о й с и с ет м ы , гд н е о б и хд м о в ы бр ат ь в к л ад у Index и н абр т ь р сот к у "reserved words". Н аж м и т е к ла ви ш у и п очлиу т е сп и со к в с е х р а з е дл о в , соердж ащ и х о п р едл н и я к л ю ч ев ы слов . Щ ел ч о к н а лю бо м р а з е лд е п р и в ед т к ад л ь н е й ш е м у о т б р аж ен и ю сп рав о ч н о и н фо р м а ц и и о з ар ез р в и р о в ан н ы х сло в ах . О б р иа т е в н и м ан и е н а ди р ек ит в у {$АР Р Т У Р Е CON SOLE}. Э Т О ид р ек ит в а к ом п и ля отр а , куаз ы в аю щ а я н а то , ч т о к о м п и л яот р од л ж е н с о з а дт ь к он соль н о е п р и ло ж ен и е
ч ве ы р с е тя б у
ь ч ы ет р
х сло
56
е к л ю ч ев ы
-
в о б я з а ет л ь н , и есл
л ав Г
3. зкЯы
пр о г ам м и р о вани я
е . о к й е е е е х й -
.zyxwv
Delphi
О бы ч н о в ф и гр у н ы е ск обк и з а к л ю ч а ю ст я к о м е н та р и и — э т о от т етк с , н а к о т р ы й к о м п и л я то р н е о бр ащ ае т в н и м ан и я и в к о тр м м ожн о о п и сы в ат ь вс е с п ец и фи ч ес к и е о с б ен н о ст и п р о гр а м ы . Н о ес л и н еп о с р едс вт ен н о з а п ер в о й о кт р ы в а ю щ е й с я ф и гр у н о й ск обк о й и ед т с и м в о л "$ ", т о э т а к о н с ртку ц и я е д бу т п р е с да т в л я ь соб й ид р е к и т в у к о м п и л я то р а . Т е п е р ь п ог вори м о к о н с о л ь н о м п р и ло ж ен и .zyxwvutsrqponmlkjihgfedcbaZY
ы н лсо ь К
е преил нож я
В п ер в о й гл а в е , п р и о з н а к о м л е н и и с гр а фи ч е с к и м и н ет р ф й с о м п о л ь з о в а ет л я , лд я д е м о н с рт а ц и и п р и м ер о в и сп о ль з о в али с ь п р и ло ж ен и я ти п а VCL Form Application. О дн а к о дл я и з ч у е н и я яз ы к а Delphi з н а ч и етл ь н о о д б ну е е и сп о ль з о в ат ь п р и ло ж ен и я ит п а Console Application (к о н с о л ь н о е п р и ло ж ен и е) . З едс ь н е н ад о дм уат ь о гр а фи ч е с к о м ин те р ф е й с е , а в о д и вы во д н а экра н и н фо р м ац и и п р о и с хд т з н а ч и ет л ь н о п рощ е . П о э о тм у н е н а д о о вт л е к аьт с я н а п острон н и е в ещ и , мудай т е от л ь к о о б о с б е н н о с ят х яз ы к а . К гр афи ч ес к о м у и н ет р ф й с у и п р и ло ж ен и я м ти п а VCL Form Application м ы о б я з а ет л ь н о в ер н ем с я в ю у с л ед щ и х лг а в х , ат к к а к о н и и сп о ль з юу ст я в п о ад в л я ю щ е м б о л ь ш и н с вт е п ро г ам , н ап и с ан н ы х н а D elphi. И та к , соз аид м к о н со ль н о е п р и ло ж ен и е , ч т о деласт я та к ж е , к а к и дл я все х ргиду х п р и ло ж ен и й , к о тр ы е м ож н о с о з ад т ь н еск о ль к и м и сп о с бам и . М о ж н о щ ел к н ту ь н а 1 п и к от г р а м е New Items н а п а н е л и Standard, м о ж н о и сп о ль з о в ат ь к о м ан д ы м ен ю File * New=>Other и л и льепновтадс о н аж т ь к лав и ш и N i= >0>. Зе та м в к о тр ы в ш е м с я окн е New Item н иодебмх о в ы т р аб ь пак у Delphi for .NET, чоб т ы дждав ы щ л ке н т у ь н а п и к т созад н н овы й п роке т с онд о й вколда й а к р де о р аг м т е Console Application. П р и эот м бе д у о р т а ок д в с о ан с т р д ы м ок д м п о м о ул ч а н и ю (см . щыпудреи й разел)д . кВдал и с форм й созьавстд я н е бте д у , та к к а к вы во д бе д у т п риодтсх ь в о к н о DOS. Д л я от г о ч о тб ы чл у ш е п о н ят ь работ у к он соль н ог о п р и ло ж ен и я , со з ади м п р о с ет й ш у ю п р о г ам у . Д л я эотг о од п о л н и т е с а т н ад р н т ы й код , с о з адн н ы й п о му о л ч а н и ю , н ес к о ль к и м и в ы р аж ен и ям и , к а к п о к а з а н о в п р и в едн н о м н иж е л и с ти н ге . program P r o je c t 2 ; {$АР Р Т У Р Е C ON SOLE} u s e s S y s U t i l s ; va r a : C a r d i n a l ;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA b : Cardinal; begin { TODO - oUser - cConsole Main : Insert code here } a := 3; b := 4; W r i t e d n t T o S t r ( a ) + ' + ' + I n t T o S t r ( b ) + ' = ' ) ; Write(a+b); Readln; end.
З едс
ь к л ю ч ев о е сло в о var, з ает м иуд т о б ъ яв л ен и я п ер м ен н ы ы к а к ц ел о ч и с л ен н ы е з н ач ен и я бе з з н ак а (н раутль н ы о ч е м го в р и т сло в о C a r d i n a l, к отр е о п р едл я т ит п п е р м е н н о й . Т и р ем н н о й в д сге а о б ъ я в л ес т я от л ь к о та к и м о браз о м , т. е . п о с л е и м ен и п ер м ен н о в и ст я вд о е т ч и е , а з еат м и е д т ти п , к о т р ы й м ож е т бы т ь к а к с а тн ад р н т ы м и с о з да н н ы м сам и м п о л ь з о в а е тл м . к о тры
ь од б а в и л о с е о б ъ яв л ен
д г Ко н е ли в я ъ б о т ям с т е ы а св н ем р о
о н К с о л ьн е ы
а с и тр о в г
я о б н еилв яъбо
и н м пе р й о
я н м е пр й о
, о мпктиял
и в ив т сс ев то
и с пн еоиврсы я о в е л н у й ниом д х бо е
преин лояж
е з н еч а и
, н о лшч у е зн чеа и
р е а здос м е й тип ом е д г есв
, т о с т еим т т э у н ю е м р уп . В о ми нго а мо ас у и по в т р с
я в у ид в х ся ач у л
х а и Ь е ч и сла) п лю бо й пе й ас т ти п о м , ат
, о тч , и т ер тсв , я л е ывд я т с ем х н а эт о мтс е ь нв о ь сна зод
в ок о в па о зпа и й пе
, , к д -
.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ
57
П о дб н ы м о бр аз о м е ус л д т о п и сат ь вс е п е р м е н н ы е и н ач е к о м п и л я от р н е см о ж е т р а з о б р аь т с я в п р о г ам е к е . Дале е э ит м п е р м е н н ы м п р и с в а и в а ю ст я з н ач ен и я b e gi n . . . e n d , дг е р аз м еш аест я р а з р а б ыт в а ем я п ро г ам а wr i t e (З ап и с аьт ) . В да н н о м ч аслу е н е о б и дх м о в ы в ес т ув д х ч и с е л , к о т р ы м ж у е п р и с в о ен ы з н ач ен и я . П роц уед в ае т п р о г а м у п о л ь з о в а ет л я . Он а н еоибдх м а лд я о т г н о DOS, в к о тр м е д уб т о тб р а ж ь т с я р ез л ь а ут т с л о ж ен и R eadln о к н о DOS п осл е вы од а р ез л ь а т у а м о е н ат л ь н е д уб т з ав ер ш ен а , а н ал и ч и е э от й п р о ц уед ы р те б у т в од н е п о з в о ли т з ак он ч и т ь п р о г ам у . Н аж ит я лю бо й к лав и ш го , обчт ы п р о г ам а з ав ер ш и л ас ь . •
Ри с
Д "' - '
1
' ii - . . Г Г ^ к . -
. 3. 1. нкО
, и сп о ль з ему ы е в п ро г ам е и в ы а сд т с о б щ ен и е о б ош и б . Э т о едла ст я в н ач л е бло к . З ает м и е д т п р о ц у ед и (з а п и с аьт ) н а э к р а н м су а R eadln (С ч и аьт ) з ак н ч и , чотб ы о с ат в и т ь ок т р ы т м ок я (р и с . 3.1). Бе з п роц уед о з а к р о е ст я , та к к а к п ро г ам а к а ог - ли б о з н ач ен и я , чт и е д уб т од с а т ч н о л д я то
, а а у ы а о -
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH
^ i
о DOS с роатезуль
м сени ло ж
я дву
х чи с е
Т еп р ь н ап и ш е м а кт у ю ж е п р о г ам у с л о ж ен и я ув д х ч и с е л м ож н о в ои д т ь в п р о ц ес е работ ы п р о г ам ы . В ы етлгяд ь о н а бе д у program Projectl; {$APPTYPE CONSOLE} uses SysUtils; var a: Cardinal; b: Cardinal; begin { TODO - oUser - cConsole Main : Insert code here } Write('Input a: ' ) ; Read(a); Write('Input b: ' ) ; Read(b); Write('Result: ' ) ; Writeln(a+b); Write('Press any key 1 ); Readln; Readln; end. Е сл и п о с м о рт е ь в н и м а ет л ь н е , т о р укт с а п ро г ам ы в м ес т о п ри св аи в ан и я п ер м ен н ы м з н ач ен и й п о яв и ли с ь вы з ов и Read. Т а к и м о бр аз о м м ожн о в оид т ь н е о б и дх м ы е з н ач ен и я лен и я н а пд и с и i n p u t а : н ео бихд м о в ес т и н ж ун о е ч и сл . Т о ж е с ам о е е с л да й т е в овет т н а з ап р о с i n p u t b : . П о сл е н а ж ит я к лав и ш и п о яв и ст я р ез л ь аут . В н ек о тр ы сло в а wr i t e и сп о ль з есту я сло в о Wr it e ln . С фуи к с I n н ео б хид м
л
, в к отр т так
й с л а г ем ы е .zyxwvutsrqponm
н е и з м ен и лас ь ы п р о ц уед с э к ран а о и н аж т
, отль к о р Writ e . П осл е п о яв ь к лав и ш у
х ч ася л у , есл
л ав Г 3. зкЯы пр о г ам м и р о вани я 58zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
и п о сл
х в м ес т е в од
о
а zyxw
Delphi
и л и вы вод а з н ач ен и я до л ж е н бы т ь с ед л а н п оер х д н а н ову ю с рт о к у . С а н а л о ги ч н о й ц ел ь ю и с п о л ь з ес т у я и п ро ц реуд а R eadln , к о тр а я сч и ыт в ае т н ео т б р аж ем ы е си м вол ы п е ор д х а н а н ову ю ср т о к у и усатн о в к и р к с уо а в н ач л о с рт о к и . С едл а м е щ е о нд о и з м ен ен и е , чотб ы н аш а п р о г ам а н ап ом и н ал а п р о с те й ш и й к а л ь к уя о т р .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA program Projectl; {$APPTYPE CONSOLE} uses SysUtils; var a, b, sign: Cardinal; begin { TODO - oUser - cConsole Main : Insert code here } while a0 do begin Write('Input a: '); Read(a) ; Write('Input b: ' ) ; Read(b); Write('Operation: ') ; Read(sign); if sign=l then begin Write(' **Result: ' ) ; Writeln(a+b); end else begin Write(' **Result: ' ) ; Writeln(a- b); end end; end. Е сл
и з а п с иут ь э т у п р о г ам у н а в ы п о лн ен и е , т о м о ж н о п о ст ян н о в о ид т ь вд а а и п о ч л уа т ь р ез л ь а т у , н е вы одх я и з п ро г ам ы , к а к э т о бы л о ран ь ш е . Д л я э от г о ы в од а и вы од а з н ач ен и й п о м ещ ен ы в к о н с рт к у ц и ю , о бесп еч и в аю щ у ю е п о в т р ен и е п р о гр а м ы , э т о к лю ч ев ы е сло в а wh i l e . . .do (п о к а...дел аьт ) . е н и х и е д т бло к п о в т р яю щ и с х я кодв , р ас п о л ж ен н ы х м жед у к л ю ч ев ы м и сло и b e gi n . . . e n d ; . П о сл е сло в а en d сот и т от ч к а с з а п я то й , ч т о го в р и т о з ав ер ш е блок а , н о н е о з а в ер ш ен и и п ро г ам ы . К а к в и д м , слуови е вы од х а и з ц и кл а оп т в ы р аж ен и е а < >0 , т.е . п о к а а н е рав н о 0, ц и к л е д уб т п о с т ян н о п о в т р яь с я . то л ь к о а сатн е т равн ы м н л ую , пу р ав л ен и е м о е н ат л ь н о е д бу т п е р да н о с рт о к е , я з а кон ц о м ц и к л а , т.е . e n d . . Э т о к о н е ц п р о г ам ы . З де с ь е щ е в ен д а р тье я п ер м ен н а я sign . Э т о е д уб т к о н с рт к у ц и я вы бор а ари ф м е ит ч е с к о й о п ер ац и . Е сл и в ов те т н а з ап ро с "O p e r a t i o n : " в ест и 1, т о э т о е д уб т о з н ач т ь сму и р о в а н и е , а л ю б о е ог р уд е ч и сл о в оид ст я п р и в ы ч и ат н и и — лд я э отг о . оЧтб ы можн о бы л о с о з ад н а к о н с рт к у ц и я i f. . . t h e n . . . e l s e (если ...тогад...и н ач е) и сп о ль з о в ат ь о рт и ц а ет л ь н ы е з н ач ен и я , я п о м ен я л ит п п е р м е н н ы х — и з C a r d i n a l (н раутль н ы е ) н а i n t e ge r (ц е л о ч и с л е н н ы е , одп сук аю щ и е о рт и ц а ет л ь н ы е з н ач ен и я) . Р а з р а б о чт и к и Delphi р ек о м ен юуд т и сп о ль з о в ат ь г пр у о в ы е ти п ы C ard in al и I n t e ge r , ат к к а к лд я н и х о п ит м и з и р о в а н ы м ает и ч е с к и е в ы ч и слен и я , .т е . м ает м а ит ч е с к и е о п ер ац и и с ним и в ы п о л н я ю ст я б ы с рт е , ч е м с дргуи м и ти п а м и . Э т и ти п ы н а з ы в а ю ст я гп р у о в ы м и п о тм у , ч т о о н и отХ я ч аст о п р и о хд с т я и сп о ль з о в ат ь и дгиру е ти п ы , н а п р и м ер , с ц ель ю экон оми и п а м ят и и л и е с л и н е о б хи д м ы в ещ ес т в ен н ы е ч и с л а (ч и сл а с п лав ю щ е й з а п я то й ) .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML
ч и сл фр а гм е н т ц и к ли ч еск о П о сл в ам ни и р е дл я Ка к н а о х дя щ е й с
о н К с о л ьн е ы
преин лояж
59
З а п си т у
е э т у п р о г ам у и б и е ду с ть , ч т о м о ж н о с к л ыа д в а т ь и в ы ч и ат ь вд а ч и сл а . В ыо х д и з п р о г а м ы п р о и з о й ед т , ес л и п ер в о м у ч и сл у п ри свои т ь з н ач ен и е 0. К а к в и д ет , и с п о л ь з о в а н и е а жд е сам ы х п р о с ет й ш и х с р е дт в п о з в о ли л о с о з а дт ь ра б а ою т щ у ю и п о л ез н у ю п р о г ам у . П о сатр й етс ь п о н ят ь вс ю п р о г ам у . Боль ш и е и сло ж н ы е п р и ло ж ен и я п р о е к и т рю у с т я ат к и м ж е о браз о м , н о , р аз му е стя , в н и х и с п о л ь зсет у я боль ш е с п ец и фи ч ес к и х к о н с рт к у ц и й , клю ч евы х с л о в и о п е р а от в , и зч уе н и е м к о тр ы х с ей ч а с и з а й м е с я .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ в ц и к ле
е св ол
ы ве ч ю Кл
а як ы з
а Delphi
П р же д е ч е м п е р й ед м к адл ь н е й ш е м у оп и сан и ю яз ы к а D elphi, фо р м ал ь н о м н ес к о л ь к о те р м и н о в . В о- п ервы х , э т о сло в о "и де н ти ф и к а то р " . И едн ит фи к аот э т о ср т о к а си м вол в , и сп о ль з ему а я лд я и м е н о в а н и я н ек о т р о г о э л ем н т а п ро г ам ы Э т о м ож е т бы т ь п ер м ен н ая , з а п и с ь , ф ун к ц и я , п роц р уед а и л и к о н с рт к у ц и я бо ле со к г о руо в н я , н а п р и м е р сам а п р о г ам а . ю лд и н у , о дн а к о в яз ы к е D elphi от л ь к о И д е н ти ф и к а то р м ож е т и м ет ь лю бу ег о 255 с и м в о л в я в л я ю ст я з н ач и м ы м и (ч т о бо ле е ч е м од сат ч н о !) . И едн ит фи к аот од л ж е н н а ч и н а ть с я с к бву ы и л и си м в о л а п о дч е р к и в а н и я (_) и н е м ож е т с о е др ж а т п р о б ел о в . П о с л е п ер в о г о си м в о л а и ед н и т ф и к а о т р а м ожн о и сп о ль з о в ат ь бк у в ы , и си м вол ы п о дч е р к и в а н и я . К а к и в з а р ез р в и р о в а н н ы х сло в ах , в и едн ит ф к аотр м ож н о и сп о ль з о в ат ь к а к срт о ч н ы е , ат к и п р о п и с н ы е к вб у ы (к о м п и л яот р и х н ч ае)т . П р и в едн н ы е н иж е и ед н и т ф и к а о т р ы о з н ач ю т о нд о и т о ж е . C a lc u la t e Va lu e c a l c u l a t e Va l u e c a l c u l a t e va l u e CALCULATEVALUE
о п р ед
р — . е вы -
ли
е сло в а н е м уо г т бы т ь и д е н ит ф и к а от р а м и . е р а с м о рт и м лек с ем ы . Э т о м и н и м а л ь н ы е з н ач и м ы е е ид н и ц гр а м е . О н и п р есдатв лен ы ат к и м и к а ет г о р и я м и , к а к с п ец и а л ь н ы ф и к а от р ы , м е тк и , ч и с л а и срто к в ы е к о н с ат н ыт . П ро г ам а , н а п и с а н н а я н а яз ы к е D elphi, со ти т и з л ек с е м и ч е м р а з ед л и е т л ь п р е сд а т в л я е т со б й п робе л и л и к о м е н та р и й . Д в е с л и о н и п р е сд а т в л я ю т со б й з ар ез р в и р о в ан н о е сло в , и ден ит фи к а от р г о т дгру а о дн и м и л и н ес к о ль к и м ч и сло , до л ж н ы бы т ь е ло д нт ы р уд В Delphi и сп о ль з юу ст я ю с лу е д щ и е п о мд н о ж е с в т а н або р а си м вол
п ер в ы
е р ь
ц и фр
ы х
е раз ли
-
К л ю ч ев ы
Д але
ы е кт с е си м волы р а з е д л и е тл й , е с о не д и и р а з е д л и е тл я м и в код
а в п ро , и ден ит
-
п ри х лек с ем ы , кмте
,
у ил
и .
а ASCII.
• к Б ув ы а н гл и й с к о г о алф в и т а о т А д о Z и о т а д о z. • Ц и фр ы — а р б с к и е ц и фр ы о т 0 д о 9. • Ш е с н т а цд а е т р и ч н ы е ц и фр ы — ар аб с к и е ц и фр ы о т 0 д о 9, кбув ы о т А д о F и бу к в ы о т а д о f. • П р о лб е ы — си мво л п л р о еб а ($32) и вс е управлюя щ и е си м в о л ы дко а ASCII ($0- $31), в к лю ч а я си м во л кон ц а ср т о к и и л и си м во л в о з в р ат а к а р ет и ($13). Э т о ш еснт а дц а е т р и ч н ы е ч и сла , ат к к а к п ер д ним и соти т си м во л одл а р а "$ ". Т еп ер ния
, п р есдатв л яю щ и И н ак о н ец О п ер ан
ь о п р едл и
, о п р едли д — ч ас т в в ы р аж ен и , п р и с в аи в аю щ е да м и , а н а д з н а ч е н и я м и о п ер ац и я с му и р о в а н и я
60
м см ы с й сп о с
л сло в а "в ы р а ж е н и е " . Э т о фр а гм ен т яз ы к а п ро г ам и ро в а б в ы ч и с л ен и я н ек о т р о г о з н ач ен и я . м см ы с л сло в "о п е р а н д " и "о п е р а то р " . ь в ы р аж ен и я , н а д к о тр ы м п р о и з в о яд с т я о п ер ац и . Н а п р и м ер , м А см у у в и с (А := В + С ; ) , А , в , с яв л ю ст я о п ер ан , п р есдатв лен н ы м и и де н и т ф и к а о т р а м и Ай в , п р о и з в о ид ст я .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
л ав Г
3. зкЯы
пр о г ам м и р о вани я
Delphi
о т и н а кИ ф е д н ем т л э м е ск Л н и е ж аы В р н е и л чс н а р пеО о т а р п еО м и н а рп о д е
р — тэ а пмыар го ы — эт о мин ьлмаы е — эт о фн ем гар я нгор тке о д — чт с а ь н е ы ж ив а я р р — дивейтс .
о кор т с
а в о л и см
, ам е зуьлпиос
я л д я и н м е аво и
я г о р тн о к е
о
. е зничыма т з яы к зн чае и я
е еин д ц
ы ттск е
а в пмеар го , ю ящлваи тс д епр
.
я оцпареи о н а д н ид о
. м ил и ниьклмосе
а н ам и в о р я г п
й опс
б ыв
-
. , н а д кыро т е еж ом
, ор тк
м пс т я идозрв ь ы в нп л о е
т ы тб
О п е р а от р — дей с вт и е , к о тр е м ож е т бы т ь в ы п о лн ен о п е р а н ад м и . Е сл и о б р аит ь с я к в ы ш е п р и в е дн н о м з н а к п лю с (+ ). Хот я в н ек о тр ы х ч ас я л у х о п е р ао т з ак н ч и в аю щ е с я от ч к о й с з а п я то й . Бо ле е п рав и ль н с р кт у и р о в а н н ы м и о п е р а от р а м и . Н а п р и м е р , в ы р аж ен и wh i le i : = 0 t o 10 do x := i ;
у п р и м ер у м м ожн о ат к и
и
о н а д о дн и м и л и н еск о ль к и м , т о о п ер аот м я в л е ст о н аз в ат ь ц ел о е в ы р аж ен и е е о п е р а от ы н ад о н аз ы в ат е
и я , ь
можн
о н аз в ат ь о п е р а от р м , ат к к а к з едс ь в ы п о л н я е ст я о п ер ац и я ц и кл а н а д п ер й X. Т еп ер ь м ожн о п е р о хи д т ь н е п о с р е д вт н н о к к л ю ч ев ы м сло в ам . О б ы ч н о к л ю ч ев ы е а п и ш ст у я с рт о ч н ы м и бк у в а м и , н о Delphi без р аз ли ч е н к р еги срт у к л а в и р а уы т , п о у можн о и сп о ль з о в ат ь в свое й п р о г ам е к а к с рт о ч н ы е (н и ж н и й р е г и с рт ) , ат к п роп и сн ы е (в ернх и й р е ги с рт ) бкув ы . Я рек о м ен уд ю и сп о ль з о в ат ь ка ой - т о о ид н ь н ап и сан и я , н а п р и м е р , то т , к к о тр м у в ы ж у е п ри вы к ли . Н о ес л и в ы от л ь к о на е и сп о ль з о в ат ь о б щ е п р и н я ыт е п рав и л а и п и сат ь е п р о г а м и р о в а ьт , т о лчуш е сло в а с рт о ч н ы м и бк у в а м и . В атбл . 3.1 п р и в ед н п ер ч ен ь в се х к л ю ч ев ы х в с к р акт и м к о м е н ат р и е м .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE
м ен н о сло в э о тм и с ит л ч и н а ет к л ю ч ев ы сло Та бл и ц
а 3 . 1 . Кл ю ч е в ы
л е ч ю Кв о
е с л ов
е с л о в о
а
о м К м е нт а р и
й
and
Б луе
в о п ероат в
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC р И
a r r a y
М са и
as
Ис з пе у т о ь л
я пр
и провек
asm
И с п о з с у ле ь т
я д л
я вы дел ни
b e g i n
На ч л
c ase
п О е р о ат
c l a s s
пО р е д л я
c o n s t
пО р е д л я и мр еж
c o n s t r u c t o r
о б ло к
С п е ц и ан л ь ы пО р е д л я
d i v
Ц е л о ич с л е н о
do
пО р е д л я
. Ис позсулеьт т ти
л ю чК е вы
пО р е д л я
e l s e
с И ез т у п о ь л про ве к
слова
т ко н с атны
, т. е й и зм ен и
й м еот й м оет т ти
и вы б о р
е и з м ноиг
. неи зм еня м ы
д клас а п ией снртф
т как
оперна
д
х варионт
в
т напр влени я в оопреат и и с лкю ечни
Delphi
. Однак е прогам м
, нео б х ди м ы )
й д л
я с о здани
, нео б х ди м ы
й д л
я р аз р уш ени
о в Delphi ес т
ь
ы я и и ни ц али з ци я оетк б ъ
и а
а
е де л н и т налч
е перм ен ы е т в тел
е окнсат
д клас а а (оа тек б ъ
а клас
азкыя
т оек б ъ а
"
е о и с по лни м о
й асч т
t r y . . . e xc e p t и в о пероат d ownto
, опредял о код
я пр
п "ксал
, до п ус акю щ и
Сп е ц и н а л ы ь э з к е м п ляр
d i s p i n t e r f a c e
я тип о в я ас ем б лерно г
а р вы б о р а
d e s t r u c t o r
е с освеит
и в о п ероат
х цилак
, окнсрцтуи
и
е w i t h е иертаци
и в о пероат
е f o r
х выбор а case, ус ло вн м оорпета е i f и в ортпеа е й t r y . . . e xc e p t zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ
61
ин е ж л о д о р П ов е ю ч л К
е с ло в
й zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC
о о м К ир а т н е
en d e xc e p t
б О ын ч б ло а к
о и с позуельт . Тжак
я с о вм ес нт я в конц
е с ав и т
И с п з о еу т ль
я в о пероат
e xp o r t s
п О р е д ля
file
с ан Ут в л и ае
fin alizat io n
п О р е д ля п о с ле дн и
fin a lly
И с п о з с у ле ь т
я в о пероат
fo r
И с п о з уе л ь т
я в о пероат
fu n c t io n
И с п о з уе л ь т
я пр
go t o
еП р о х
if
И с п з о еу т ль
im plem en tation in inherited initialization
in lin e in t er fa c e
м b e g i n и омт еач р клас а ил
и и с люкечни
й ка
о р аздел
, фунцки
к файл
, котры
т о кн е
ц
и запи с
и
й t r y . . . e xc e p t
х про цеду
п п ер м ен о
т ла н ч
м с ло в , напри м е
я тип а
к э ск по рит уем ы т ти
й и п ер м ен ы
. Ис позсулеьт
я пр
й в про гма м
е вс егд
х и рба о т
е с фай лам
и
а в ы п о л н я се т
я
м е про верк х ц ил к
оП с л
е э о тг е и с п о з уе л ь т
о клюечво г я пр
о сДл вн с клас ам и пО р е д ля р за д е л о и н ц ла и з по с л и с п о з уе л ь т
о мн о ж
а i f . . . t h e n и i f . . . t h e n . . . e l s e , в котр
о с ол в и р аб о т
о пер вес т
а ме о ж
и ка я во зм но с тж
я пр и раб о т ю н е реокм ендуст т ит
я о п и с ан и ы
т уазкысвьт
я п ту
е с м есвматно ж
я про цедур
,
ь к нео б хди м о м
у м о д ул ю
.
и
к "унса леодвный"
. Ис позлуьест и по лим змо рф
т р аз д е л и ни ц али з ц и м f i n a l i z a t i o n . с лЕ и ноахдист я п ер е зпсау к а п р о г ам м ы , пер я дл я и н ци ал з ци
п О р е д ля е й ис нрт ф
м носхадят й п р о г ам м
ы разр быатв ем о
, пиовдаерж
И с п о з уе л ь т к при м ен и
й
х вы б о р л р е ал и з ц и в и код
, м одет
ж ак Т
а f o r . . . t o и f o r . . . d o wnt o
у
т р з а ед
у н цк и ф й
й t r y . . . f i n a l l y
и нцки фу
я в о пероат
п О р е д ля
и и с люкечни
и ояв лебниъ
д н а м кет
, котры
я пр
и рба о т
е
а
й вс едг а р ас п о лагест я пер а f i n a l i z a t i o n нет , т о разде л м п р о г ам м ы . Вы по лнясет и други м и о п ер оат м и . Об ынч о х
и рзадел д завер ш ени д вс ем и п ер м ен ы
м ок д м
е с ас ем б лер ны
. Усартевш е
д
е люк еч в о
с р аз
у
е с ло в
о
я
п иейнстр фа
. Ис позсулеьт
я пр
и о паюещр ж е
м яв л е н ои б ъ
м с ло в
м g o t o . е М ож м о т 0 д о 9999
и
а
И с п о з уе л ь т
label
М а ке т е н в ы р жа
я пр
и про ве к
е тип о
. Ис позуельт
я с о вм ес нт а лю б ы
и р ет в Д к а - н а п о м и н а н ра в о с б ен о с я т в ы з еа
м ил
х с ан тд р ы т п о яв л е н и
о ста О
nil
п С е ц ни а л ь по с л
к о т де л ни
я ц еы л
е чег
not
ел уБ
в о пероат
o b je c t
И с п з о еу т ль с о в м е с и тм о с т
я а к к аертинльав и с о с арты м
of
И с п о з уе л ь т
я в о м но ги
or
ел уБ
out
И с п о з л ьу е с т Пр е д а у п р е ж в ы д ач
я ко нс ат
и з н а че и
и чис ло
т б ыт
е ил и реокм ендалть я д и р е тк в а . Ис позуельт и p l a t f o r m и d e p r e c a t e d дл я напо м и на х ит п о в , м оетд в ил и м о дулей . В о врем е п р д еа ю у щ ж е г о с о б щ ени я
е с ди ретквам
в опоерта
в о с клюечвы
м и о а тд к е р н ф
mod
62
о с клюечвы е о пи с ани е про верк
т с пи с о
is
library
3.1.z
т.лаб
х ич с е , котра , чт о уакзетл
о с чиаетс я р о р т и ц ан
р ЛИ
ь я
я о б я ком пи ляц и
л я ме о ж
т б ыт ь н е с с ы лаест
ь при с во ен
а лю б о м я н и н а чт о
у а уз к е т л ю
,
я а с ло в
у c l a s s . оСрхане . Н е роекм енсдут
и вер с и ям и х о пероат
х ак
к с вязующ е
о в язык я к и с позль вани е люк еч в о
е дл
я ю
е с ло в
о
И
я пр и ояв бле ън и и п ар м ерт о в п р о ц е дур ы , фунцк и и и л и м е от д а . т о то м , чт о д ан ы й п ар м е т р и с п о лз ь у е ст я от л к ь о дл я й zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG
л ав Г
3. зкЯы
пр о г ам м и р о вани я
Delphi
а ин е к ч о О л е ч ю Кв о
е с л ов
о
packed
о м К м е нт а р и
й
И с п о з л ьу е с т ит п а
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
я дл х (м ас и в ы
я б о ле , м есвнат,о ж
procedure
И с п о з л ьу е с т
p r o gr a m
пО р е д л я и од а е т к н р ф
property
И с п о з л ьу е с т
я пр
и оявлениб ъ
raise
И с п о з л у ь ес т
я пр
и генрцаи
record
пО р е д л я
repeat
И с п о з л у ь ес т
reso u rcest rin g
пО р е д л я
я пр т им
е п лн о т г
о р азм ещ ени , файлы
з ап и с и
и оявленби ъ
я дан ы
х
)
р
, котр
е дн о лж
и с во й с т
о б ы т
ь е н в ы р жа
о
в
и и с люкечни
п запи с
х в с ур т ик о в а н ы
, ласк ы
и п р о ц е ду
я про гма м ы м
т ит
й
и
я в о пероат
е цилк
т р аз д е
а r e p e a t . . . u n t i l
л оявлебниъ
я р е с ур с о
в
s e a l e d zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA И с п о з л ьу е с т я п р и оявлениб ъ и лк а с а , з ап р ещ а я нас ледо вани е дан о г set
л ю К еч в о
sh l
Л о г и ч е с ик
й о пероат
sh r
Л о г и еч с и к
й о пероат
st rin g
И с п о з л у ь ес т
я пр
then
И с п о з л у ь ес т
я в о пероат
е с ло в
о д л
я я в л ео н б и ъ а в ле
р с дви г
а вправ
и оявлениб ъ
И с п о з л ьу е с т
я пр я в о п ероат
try
И с п о з л ьу е с т я в о пеорат t r y . . . e xc e p t и в о пеорат
М о д ул ь с о рх а н я е м ы
until
и разрб окт
пО р е д л я
т р аз д е
л полюдкаечм ы
va r
пО р е д л я
т р аз д е
л п ер м ен ы
wh i le
И с п о з л у ь ес т
wit h
И с п о з л ьу е с т с др уги м
я в о пероат
ел уБ
Е тс
ь ещ
е н ес к о л ь к
й
и и с люкечни а c ase я ит п о
й t r y . . . f i n a l l y ,
в о з о а к н еч ы
м ж е и м ен
й фр агм ен
т п р о г ам м ы
,
м
х м о д ул е
й
х е w h i l e . . . do
я о п р ед л ни
я ииодатекрн ф . о К д по луачест
р Ислюакчщ е
л ю чК е вы
х сло в
е ЛИ
, октры я б о ле
й вс егд е о к м н пы т ак
а з ап и с ы в аес т м и п о няты
я м
И
х м ы п о гв ри м п р и и чз н е у и и о б ъ н ек т о т и с п о л ь з о в а ьт с я к а к ди р е к и т в ы . е м уо г И м ен н о э т и к л ю ч ев ы е сло в а в ы е лд я ю с т я ж и рн ы м ш р и ф от м в р ае д к о т е к о ад , отх я к о е- ч т о м ож е т в ы з в ат ь н е од м у н и е : п оч ем у , н а п р и м е р , сло в о Break, к о тр е в дгиру х яз ы к а х п р о гр а м и р о в а н и я я в л я е ст я к л ю ч ев ы м , в реадкотр е код в н е п о сд в е ч и в а е с т я ? В Delphi э т о н е к лю ч ев о е слов , а п роц рауед , и дл я н е е щсу евсту т о е дл т ь н о е оп и са а в б и б ли оетк ах , ат к к а к е е к о д врсто н и е в б и б л и о етк . А п роц р уед а w r i t e н е о п и с ан е н в к о м п и л я то р . С ей ч а с м ы н е е д бу м р а з б и р а ьт с я в э и т х от н к о с ят х , а от л ь к о о мт е ти м , ч т о вс е к лю ч ев ы е сло в а обы ч н о п и ш ст у я с рт о ч н ы м и бк у в а м и , а п роц уед ы обы ч н о н а ч и н а ю ст я с п роп и сн о й кб ув ы . Н ап и сан и е и енд ит ф корат в к жа т е м ож н о т ал е дс ь н а л г яд е , сел и и сп ольз вта ь о лс в а , жр а ю о т щ и е н а з н а ч ен и е и е н д т и ф ко р а т , и н ач и н ат ь о ж д ак е сло в о с п р о п и сн о й к в ыбу . Н а п р и м ер , и енд ит ф коат р л д я ч и тс е к а си м в о л в м ож н о н ап и с ат ь акт : SymbolCounter.zyxwvuts
о р и е н ит р о в а н н о г
о ю к л вы ч е
х п р е ни л о ж
е вы б о р
и иоиаткрдемн ф и в о п ероат
в
е r e p e a t . . . u n t i l
uses
xo r
х тип о
е про верк
л оявленби ъ
я в о пеорат
я д л
о
е м но г по тнчы
о э т о фунцки о наль й в фай л е с таик
И с п о з л ьу е с т
о
е f o r . . . t o
т р аз д е . бО ы нч
а
х i f . . . t h e n и i f . . . t h e n . . . e l s e
И с п о з л ьу е с т
un it
о клас
а
и с р то к в ы
t h r e a d va r
пО р е д л я е
я м е с н в от ж
р с вдиг
to
t yp e
3.1.zyxwv
т.лаб
о п ро г ам и ро в ан и
слова
азкыя
Delphi
, о ыор кт я и к о тр ы
63
З ес д сло в в ан
ь о лс в о н а ч и н а се т ы п о бд н ы
а и сп о ль з о в ан
ы п о л н о сь т ю й к бв у ы
е о и сд т а г е , кт о бе д у т , см ож е т п о н ят ь е е бе т п о н янт е , и ваш и п р о г ам ы ан с т у ы од л ж н ы п и с аь т я отл ь к о е в р ем я э т о я з ы к о бщ ен и
я с бо ль ш о е и е дн и т ф к а о т р ы е э т о п рав и ло , вс е и едн ит ф к аотр е ан гли й с к и й , в н асотящ е
И с п о л ь зй у т л ен и ю чи ут
пи Т
ы дына
п ро ст с рт о к в ы р ск н у т ы к у а з ет л ь н ы п р о ц р е у дн ы в а р и а н нт ы
й ти п
е тип
ы ос р т П
Ти
, чт о орвт е , дг е и сп о ль з о х к о м е н а тр и е в . е и дл я ва с сам и х . (К сож а и к б ув а м и , п оэмт у ) zyxwvutsrqponml
а н гл и й с к и м я п р о г а м и со т в .
т отг
й е ус л д а з н ач ен и й
т к уа з т
ь е е ти п . З н а н и е ти п , к о тры е он а м ож е т п р и н и м а ть . Д л я о б з н а ч ен и я ит п а и сп о ль з юу ь с та к и м и ти п а м и , к а к н раутль н ы и C a r d i n a l и I n t e ge r . ь н а ш е сьт осн овн ы х п о р д а з е дл о в :
а п ер м ен н о
й н ео б
т и д е н ит ф и к а от е и ц ел ы
е ти п ы
т п у о р я до ч е н н ы х ч и се л (ти х дл я р а б о т , п ер ч и с л ен н ы е т и п
п
и а Дп з о
е м н о ж е св т а з н ач ен и й п C a r d in a l) , и л и м н о ж есвт ы с 32- р аз р янд ы м и п р и ло ж ен и ям и е в табл . 3.2.
. Э т о ц ел ы
н
Ф орм а
,
о т - 2147483648 д о 2147483647
З н оак в ы
о т 0 д о 4294967295
Б е з н оа к в ы
s h o r t i n t
о т- 1 2
З н оак в ы
й 8 б и
З н ао к в ы
й 16 б и
З н оак в ы
й 32 б ит
З н оак в ы
й 64 б и т
8 д о 127
S m a l l i n t
о т - 3276
Lo n g i n t
о т - 2147483648 д о 2147483647
I n t 6 4
о т- 2
63
о м ож е х ч и се
8 д о 32767 63
д о 2 - 1
й 32 б ит
а
т а а
о т 0 д о 255
Б е з н оа к в ы
й 8 б и
о т 0 д о 65535
Б е з н оак в ы
й 16 б и
Long word
о т 0 д о 4294967295
Б е з н оак в ы
й 32 б и т
е ит п й п о м д н о ж евс т , являю ст
ы м ожн
е з н ач ен и е м н о ж е с вт о
е
т
B y t e
т со б х ит п о в
ь п
а
й 32 б ит
wo r d
Ц ел о ч и с л ен ы
т бы т л (ти , а акт ж
т
I n t e g e r
64
е ч и сла
ы
C a r d i n a l
1. Вс е в о з м о ж н ы до ч е н н о
, -
ы
а 3 . 2 . Ц е л о ч и с л е н ы
п а в с р т л е дя ю щ ве с т н ы
-
, и едй свт и й
; й ти п ; й (срткуи р о в ан н ы й ) ти п ; й ти п ; й ти п ; й ти п .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
П р о сыт е ти п ы о п р едл яю и л и м н о ж е св т о н р а у тл ь н ы i n t e ge r ) , о п ти м и з и р о в а н н ы баз о в ы е ц ел о ч и с л ен н ы Та бл и ц
я з а сч е ь п р о г ам у
чи ат з о д п л н и е лт ь н ы
х
П р и оп и сан и и п ер м ен н о ои дх м о лд я о п р е д л н и я н або р к о тр ы е н а д н е й м ожн о в ы п о л н я ть р ы . Р ан е е м ы жу е п о з н ак о м и ли с о б з н а ч ем ы е и д е н ит ф и к а от р а м В с е ит п ы м ожн о р а з ед л и т • • • • • •
, а раз елдн и
. К ажыд й
о онт ес т о п рыо ст я п о р як д в ы м я да н н о г , и к ажод
и и к п о р к яд в ы х ит п о в . Вс е п роыст и и и м ею т ю у с л де щ и о п о р я кд о в г е воз м ожн о
л ав Г
о ит п
м ит п а м е ит п ы е ч ы ет р
е з н ач ен и
а п р е с ад т в л я ю е св яз ан
3. зкЯы
пр о г ам м и р о вани я
т
. П о рякд в ы , олит ч н ы е а р х ке т и с к и
а
е ит п ы е о т ве . т соб
о с п о р я дк о в ы
т
й пу о р я
м но
- zyx
Delphi
м ер о м , к о т р ы й п р се а д тв л я т соб й ц ело ч и с лен н о з н ач ен и й ц ел о ч и с л ен н о г о ит п а , п ерв о е з н ач ен и е т п о р я дк о в ы й н ом е р 0, юслуед щ е е з н ач ен и П о р я дк о в ы м н о м ер о м з н ач ен и я ц ело ч и с лен н о г н и е . В л ю б о м п о р я кд о в м ит п е к а ж о мд у з н ач ен и ю е з н ач ен и е , и п осл е к а ж о дг о з н ач ен и я е т рг до у ог е з н а ч е н и е в с о в те и и с п у о р я д ч е н н о с ьт 2. К л ю б о м у з н ач ен и ц и ю Ord, в о з в ращ аю щ у 3. К л ю б о м у з н ач ен и ц и ю P red, в о з в ращ аю щ у л и э т а ф ну к ц и я п р и м е н я е ст в ы ад е с т я с о б щ ен и 4. К л ю б о м у з н ач ен и ц и ю Succ, в о з в ращ аю щ у э т а ф ну к ц и я п р и м е н я е ст в ы ад е с т я с о б щ ен и Н ап р и м ер
ю п о р я кд о в г
о ит п
е ю е
е и ме
а можн й н ом е р э отг п о р якд о в г о ит п а можн ю п о р я кд о в ы й н ом е р я к п ер в о м у з н ач ен и о б о ш и б к е . п о р я кд о в г о ит п а можн ю п о р я кд о в ы й н ом е я к п о с л е нд е м у з н ач ен и о б о ш и б к е . ю п о р я кд о в ы
ю
е з н ач ен и е е лю бо г
. З а и с к л ю ч ен и е
м а и ме й н ом е р 1 и .т д . я сам о э т о з н ач е , п р ешд есвту , еслуд т рд у -
о п о р я кд о в г
о ит п
т п о р я кд о в ы а я в л е ст , к ро м е п ер в о г , к ром е п о с л е нд е г о ю ит п а . о ит п
о п р и м ен и т о з н а ч е н и я о п р и м ен и т п р ш е д е ю св т у щ е г ю в э от о п р и м ен и т р п о ю с лу ед щ ег ю в э от
ь с а тн а д р н т у . ь с а тн а д р н т у
ю ф ну к
-
ю ф ну к
. Е с , т о
о з н ач ен и я м п о р я кд о в
м ти п е
ь с а тн ад р н т у о з н ач ен и я м п о р я кд о в
ю ф ну к . Е сл и м ти п е , т о
, ес л
и н ап и сат ь с юл е у д щ и й о п е р а от р : Wr i t e ( P r e d ( 3 ) ) ; , т о н а э к р а н е о 2, а о п ер аот р Wr it e (Succ (3)), - о тбр аз и т ч и сл о 4. В н ебо ль ш о й п р о гр а м е , п р и в е д н н о й н и же , о б ъ я в л е н а п о р я дк о в а я п ерем ен н а я х , к о т р а я м оже т п ри н и м ат ь з н ач ен и я о т 1 д о 5 (дв е то ч к и , и с п о л ь з о в а н н ы е пр и о бъ яв лен и и , го в р я т о то м , ч т о п е р м е н н а я м оже т п ри н и м ат ь л ю б о е з н ач ен и е то л ь к о и з э то г о ди а п а з о н а ) .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC program Projectl; {$APPTYPE CONSOLE} var x: 1..5; { x ме ж о т пт а м и н и р ь зи н е ч а н я 1,2,3,4,5. } begin x := 3; Writeln(x); Writeln(Pred(x)); Readln; end. В ат к о м ви д е п р о г ам а е д уб т р а б о ьт о хр ш о , и н а э к р а н у д уб т в ы в едн ы вд а ч и сла : 3 и 2. Н о есл и еластд ь п р и св аи в ан и е х : = 6 , т о к о м п и ляот р з афи к си реу т ош и бк у .zyxwvuts о т б р а з и ст
елуБ
я ч и сл
в ти
п
З н ач ен и я л ев б у F a l se и True. П о ск ль к ст о слюеуд щ и е о тн о ш е н и я F a l se " п р и м ен и м Д л я б о л ь ш и н с вт а п р и м ер , з н а ч е н и е в ы р а ж ен и о ди н а к о в ы е з н ач ен и я
ы (о п ераот ы о тн о ш е н и я ) и сп о ль з юу ст я лд я с р а в н е н и я дву х ы = , , = так ж е и с п о л ь з ю у ст я с о м н о ж е с вт а м и . О п ер аот ы ы к указ етлям . Вс е о п ер аот ы п р и в е дн ы в таб л и ц е . п р о ыс т х ит п о в ср ав н ен и е п р о и з в о ид с т я н е п о с р е дс в т е н н о . Н а я I = J е д бу т T rue отль к о в о т м ч с л а еу , ес л и I и j и м ею т . Н ео бидх м о п р и ед р ж и в а ь т с я ю с ул ед щ и х п р а в и л .
Ш
О п ер ан д ы од л ж н ы бы т ь с о в м е с ит м ы х ти п о в , з а и с к л ю ч ен и е м от г , ч т о м о ж н о сравн и ват ь в ещ есвт н н ы е и ц ел ы е ч и сла . • С р отк и сравн и ваю с т я в свист ео и с п о к р яд в ы м и з н ач ен и ям и си м вол , саовст л яю щ и х срокут . С и м вольн ы е ти п ы сравн и ваю с т я ка к срокт и с еид н и ч н о й дли н о й . • п У ак о в ан н ы е срток и долж н ы и м ет ь оид н ак ов е ч и сл о к о м п о н ен т п р и с р а в н ен и . • И сп о ль з йу т е о п е р оа т ы , = дл я с р а в н ен и я о п е р а н до в ти п а pchar (и PWideChar) отль к о в то м чслауе , есл и куаз етл и к уа з ы в а ю т н а о ид н и от т ж е си м воль н ы й м ас и в . В атб л Та б л и ц
. 3.13 п ри венд
ы вс е р е л я ц и о н н ы
а 3.13. Ре лицяоны
о т а ре п О
я
р Ои ца ер п =
Р а в е н с вт
Н е р а в н свт
=
М не ь ш Бо л ь ш М н е ьш Бо л ь ш
о т ар еп О
е опе р а т ор пи Т
о о е е е ил и равн е ил и равн
ы о д онаер п
е о п ер аот ы
.zyxwvutsrqponmlkjihgfedcbaZYXWVU
ы в
иТ
п та ьл уезр
а м и Пе р
sim ple, c la ss, c l a ss r efer en c e, Boolean i n t e r fa c e , s t r i n g, packed s t r i n g sim ple, c l a ss, c l a ss r efer en c e, Boolean i n t e r fa c e , s t r i n g , packed s t r i n g sim ple, st r i n g, packed st r i n g, P char Boolean sim ple, st r i n g, packed st r i n g, P char Boolean о sim ple, st r i n g, packed st r i n g, P char Boolean о sim ple, st r i n g, packed st r i n g, P char Boolean
р 1 = Max X У X 0 Cnt = 1
р @ О п е р а от м ен н о й з а е тл
, ф ну к ц и и ь н а о п ер ан д • Е сл е д бу ат н о в л е н е д бу з а ьт с
п Ое р ат о р ы
р "@" и сп оль зсету , п роц уед . Н ео бидх м
я лд я п о л ч у е н и ы и л и м о еа т д о п р и ед р ж и в а ь т с
я р ае с д , ч т о о з н ач е,т я ю у с л ед щ и
а (р асп о л ж ен и ч т о о п е р аот х р ав и л
е в п а м я ти р "@" со з аде
) п ер т к уа
-
.
и х — п е р м е н н а я , т о в ы р а ж ен и е @х в о з в ращ ае т ар д е с п ер м ен н о й . Т и п @х т к у а з е лт м , есл и и сп о ль з есту я ид р е к и т в а к о м п и л я от р а {$Т - } , к о т р а я су а п о муо лч ан и ю . Е сл и с уа т н о в и т ь ид р е к и т в у {$т+ } , т о в ы р аж ен и е @х т в о з в р ащ ат ь ит п л т , д г е т соевту т ит п у х . (Э т о р аз л и ч и е м ож е т ока я сщ у е с в т н н ы м в п р о ц ес е п р и с в а и в а н и я . ) zyxwvutsrqponmlkjihgfedcbaZYXWV
81
• Е сл и F — п р о ц реуд а и л и ф ну к ц и я , т о @F вседг а в о з в ращ ае т к у а з е тл ь н а о вх д в F. Т и п @F в сегд а я в л ест я к уа з е лт м . • К о дг а о п е р а от р @ и сп о ль зсету я с м о е тд м к лас , т о м еот д од л ж е н бы т ь к уа з н о дн о в р е м н н о с и м ен е м к лас . Н а п р и м ер : @TM yClass.D oSomething, дг е м оет д D oSomething п р и н алдеж и т к лас у TM yClass.zyxwvutsrqponmlkjihgfedcbaZYXWVUTS
р goto
о т ар еп О
О п е р аот р п е р о дх а go t o вдсге а з а п и с ы в а е ст я о дн о в р е м н н о с м е кт о й , н а котру ю н е о б и дх м о п е р й ит . go t o l a b e l l ; М кет а с ат в и ст я п ер д в т е р у ж нд и е м , н а к о тр е н е о б их д м о с е лд а т ь п ео р д х . L a b e l l : st a t e m e n t ; И он а до л ж н а бы т ь п р е вд а р и е тл ь н о о б ъ яв л ен а . l a b e l l a b e l l ; М кет а м ож е т бы т ь лю бы м од п с иут м ы м и де н и т ф и к а о т р м и л и ц ел ы м ч и сло м в ди ап аз о н е 0—9999. О б ъ яв л ен и е м е тк и , о мт еч н н о е в т е р уж н д и е и о п е р а от р go t o од л ж н ы н о а и хд ь т с я в онд о м и то м ж е б л о к е . Н ап р и м ер , фр а гм ен т п ро г ам ы , п р и в едн н ы й н и же , соз аед т б ес к о н еч н ы й цик л п о в т р ен и я п р о ц р еу д ы Ве р (С и гн а л ) .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP label StartHere; StartHere: Ве р ; goto StartHere; С а т р й е ст ь н е и сп о ль з о в ат ь э о т т о п е р аот м и go t o соз аед т п ло х о ч и а те м ы е п ро г ам ы ф и ц и р о в а ьт . отХ я и н о гд а б е з эи т х о п е р а о т в л о ж ен н ы х ц и к л о в ) . Пр и о р и е т
ы о п е р а то р о
, ат к к а к и з л и ш н е , и п о э тм у и х п очт в н е о б й ит с ь (н а п р и м е р
е в ул е ч н и и н ев о з м о ж н
е п е ор а д х
о м о ди
, п р
и вы од х
е и з
в
Ка
к и в м аетм и к е , в яз ы к е Delphi оп еорат ы обы ч н о в ы п о лн яю ст я н е в то м п оряд к е , в ка о м о н и рвечстаю т я в в ы р а ж ен и . Н ап р и м ер , в в ы раж ен и и x+ Y*z сн ач л а вы п о л н ся е т я му н о ж ен и е , а п от м с л о ж ен и е . В да н н о м ч а с лу е бы л о и сп о ль з о в ан о п рав и л п р и о р и ет а о п е р оа т в . К а к и в м еати ке , ег о м о ж н о и з м ен и т ь с п ом щ ь ю ы л г к ру ск о б . Н ап р и м ер , в вы раж ен и и (x+Y) *z е д уб т п чолеу н догру й а т рл ь з е у , че м р ан е . П о р я од к п р и о р и ет а с ю л еу д щ и й . • нУ ар н ы
е п лю
• м У н о ж ен и • С му и р о в а н и Е сл п о л н я ю ст
с " + " и м и н у е и дел н и е и в ы ч и атн и
и п о с л е од в а е т л ь н я с л ев
ы нр у т к ур т С
е оор тпеа р н у к Ст ы
в ы п о л н ен и п е ар ч д
82
е (и л я к о р ты й п у р а в л ен и
о х
с "- ".
е *, / , d iv, mod. е +, - .
о в р с ет ч а ю с т , т.е . в п о р якд
а н ап раво
-
я о п е р аот е и х с л еод в а н и я
ы о ид н а к о в г
о п р и о р и е та
, т о о н
и вы
-
.
ы и р и ук т с о в а н ы е х о лд ж е я (условн ы
н бы т
ь ли б е о п е р ао т ы )
) оп ероат о п о с л е д в а ть н ы м
ы ср т о я , л и б , л и б
л ав Г
о п о в трья с
3. зкЯы
пр о г ам м и р о вани я
я и з в ер т ж н уд и й о о п ь ре л я т д с я (оп ероат
, п оряд я с л оу в н о ы ц и к ла)
к й
.zyxwvutsrq
Delphi
С о с а вт н ы
я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
е у вт д е р н ж и
С о с ат в н ы е в т е ур ж дн и э л е м н ат м и . втерУж нд и С о с ат в н ы е в т е р уж н д и з н ач ен и е ат м , дг е с и н та к с и в е р ж дн и я . втерУж нд и о т дгру а то ч к о й с з а п я от й be gin Z := X;
я з а юд я од л ж н я о б р а ыт в а ю ст с яз ы к я з а к л ю ч а ю ст . Н а п р и м е р
т п о р я до ы в ы п о л н я ьт с
ы п о з в о л яю ь н и о нд о г
т в ы бр ат .
к в ы п о лн ен и
я увтер ж дн и й , яв л яю щ и сх я в о т м п о р я кд е , в к о т р о м з ап и сан ы я к а к о нд о в т е р у ж нд и е , ч т о и м е т р еш аю щ е а Delphi одп скуае т и сп о ль з о в ан и е от л ь к о о нд о г я в о г р а н и ч и етл и be gin и en d и оедлтяю ст :
я и х . е о ту я р ду г
X : = У ; У := Z ; end;
с Уло в н ы
е о п е р а от р
с лУ о в н ы р а от в
ы
е о п е р а от , и л и н е вы брат
ь лд я в ы п о л н е н и
я о ид
н и з н ес к о ль к и
х оп е
-
о т ар еп О
р if С и н та к с и с о п е р ао т а i f м о ж н о п р е с ад т в и т ь ю с лу е д щ и м о браз о м .zyxwvutsrqponmlkjih е then у _ еинеджревт 1 else у _ еинеджревт 2 if ви н е ж а р ы В р ез л ь а т у е в ы ч и с л ен и я в ы р аж ен и я од л ж е н п о ч л уи ь т с я р е з л ь ау т , и м е ю щ и й с ат н ад р н т ы й ле б у в ти п . Е сл и р е з л ь у оа т м в ы р аж ен и я я в л ес т я з н ач ен и е True (И с ти н а ) , т о в ы п о л н я е ст я в т е р у ж дн и е , слюеуд щ и й з а к л ю ч ев ы м слов м th en . Е сл и р ез ло ь а т у м в ы р аж ен и я я в л е ст я з н ач ен и е F a l se (Лож ь ) и п ри есвту т к лю ч ев о е сло в о e l se , т о в ы п о л н яест я в т е р у ж нд и е , ю сулед щ е е з а к л ю ч ев ы м сло в м e l se . Е сл и к л ю ч ев о е слов о e l s e етвсуо , т о н и к а о е увтерж нд и е н е в ы п о л н я е тс я . я с бли ж ай ш и м к л ю ч ев ы м сло в м В общ е м ч аслу е к л ю ч ев о е сло в о e l s e св яз ы в аест if, к о т р о е ещ е н е с в я з а н о с к лю ч ев ы м сло в м e lse . П р и в ед м дв а п р и м ер а о п е р а от а if. if X= 0) an d ( I 0 do begin if Odd(I) then Z := Z * X; I := I div 2; X := Sqr(X); end; while not Eof(InFile) do begin Readln(InFile,Line); Process(Line); end; с еЗ д ь н и о д ме бх о и м т ое ь о ш и бк у , уор кт wh ile з ак н чи всяает , сел и олвсн у е в ы р жа н е и з а к н ч и с в я а ет , елс и условн о е вы ражне и е п ри м е лД
Ци к
я д о ы хв а дл я вд о ых
а и з ц и лк а и з ц илк
а while нзечиа а repeat нзечиа
ю ч тс а е п ри м е т з н ач ен и е н в ог л с у е унвголс
а wh i l e я м ц и к ла
, й
) н оах с лу о в н о о н ач л
е а
о о п сд к а ю у т п р о га м и ы с т . Ц и к л т з н а ч ен и е F a lse, а ц и к л repeat е True. Срайсет ь и х н е пь та у . о н е ж иы в а р о вн иеж аы р
я нж л о д я н ж л до
о ы бт о быт
ь F alse, ь True.
л for
О п е р ао т п о в тр яю щ е с л яю щ е ат к с и
р ц и кл
а с п а р м ер т о я в ы п о лн ен и
й п ер м ен н о й п р и с в а и в а е ст с о п е р оа т а м ож е т бы т fo r с ч е т ч и к : = н а ч а л ь н о е _ з н а ч е н и и л и та к и м : for с ч е тч и к : н а ч а л ь н о е _ з н а ч е н и
п Ое р ат о р ы
м ( fo r) н ач и н аест я с к лю ч ев о г я и л и с о ат в н о г я в о з р а с тю щ а я п о с л е д в а тл ь н о с т ь та к и м : е t o к о н е ч н о е _ з н а ч е н и
е в т е р у ж нд и
е downto к о н е ч н о е _ з н а ч е н и
о сло в о в т е ур ж дн и я
а fo r и вы з ы вае , п о к а пу р а в ь з н ач ен и й . С и н е do утв е р ж де н и е do втуер ж дн и
т е
е zyxwvut
85
В квачсте е п у р а в л яю щ е й п ер м ен н о й (счети ка ) долж е н и с п о л ь з о в ьа т с я и едн ит ф к а от р п ер м ен н о й , корты й обоз н ач е т п ер м ен н ю у , объявлен у ю ло к аль н о й в бло к е , со е р дж а щ е м о п е р оа т р for. п Уравляю щ а я п ер м ен н а я долж н а и м ет ь п ер ч и сли м ы й ти п . К од г а н ач и н ае т в ы п о л н я ьт с я о п е р а от р fo r, н ач ль н о е и к о н еч н о е з н ач ен и я о п р е ед л я ю с т я оид н р а з , и э т и з н а ч е н и я сорхан яю ст я в п р о ц ес е в ы п о лн ен и я о п ер аот . в т е р У ж нд и е , котр е с о едр ж и с т я в тел е о п ераот а fo r, в ы п о л н яест я о ид н р а з лд к а ж о дг о з н ач ен и я в ди а п а з о н е м же д у н ач ль н ы м и к о н еч н ы м з н ач ен и ем . пУ рав ляю щ а я п ер м ен н а я в с д ег а и н и ц и а л и з и р е у ст я н ач ль н ы м з н ач ен и ем . К одг а р а б о те т оп е р ао т р fo r, з н а ч ен и е с ч ет и к а в у е л и ч и в а ес т я п р и к ажо д м п о в т р ен и и н а е ид н и ц у . Е с л и н ач ль н о е з н ач ен и е п р ев ы ш а е т к о н еч н о е з н а ч ен и е , т о с о едр ж ащ и й с я в тел е о п ер а отр а fo r о п ер аот р н е в ы п о л н я е ст . К одг а в о п е р ао т е ц и кл а и с п о л ь з е с ут я к л ю ч ев о сло в о downto, з н а ч ен и е пу р а в л яю щ е й п ер м ен н о й ум ен ь ш аест я п р и к ажо д м п о в тр е н и и н а е ид н и ц у . Е сл и н ач ль н о е з н ач ен и е в ат к о м о п е р ао т е м ен ь ш е , ч е м к о н еч н о з н ач ен и е , т о соедр ж ащ е ся в тел е о п ер аот а ц и кл а уветржнд и е н е в ы п о л н яест . Е сл и в т е ур ж дн и е , соедр ж ащ е ся в е лт е о п е р а о т а fo r, и з м е н яе т з н ач ен и е пу р ав л яю щ е й п ер м ен н о й , т о э т о яв л яест я с ер ь ез н о й о ш и б к о й . П о сл е в ы п о лн ен и я о п е р ао т а fo r з н а ч ен и е пу р а в л яю щ е й п ер м ен н о й с а тн о в и с т н ео п р едл н н ы м , есл и отль к о в ы п о лн ен и е о п е р ао т а fo r н е бы л о п ре в ан о с п ом щ ь ю о п е р ао т а п е о ра д х . Е сл и п р и н ят ь э т о в о в н и м а н и е , т о о п ер аот р fo r V:= E xprl t o Expr2 do Body; э к в и в а л е н ет н с о а тв н о м у в те р у ж нд и ю b e gin zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Tempi := Exprl; Temp2 := Expr2; if Tempi = Temp2 then begin V := Tempi; Body ; while V Temp2 do begin V := Pred(V); Body ; end; end; end; дг е Tempi и Temp2 — в сп о м гаетль н ы н ы м ит п о м п ер м ен н о й v и к о тр ы
86
е п ер м ен н ы е е н е всртеч аю ст
л ав Г
, ти п к отры я в догру м м ес т
3. зкЯы
пр о г ам м и р о вани я
х с о в п а де е п р о гр а м ы
я е е я -
т с осн ов .zyxwvutsrq
Delphi
П р и м ер ы о п е р а от р а ц и кл fo r I := 2 t o 63 do i f D at a[I ]> M ax t h e n Max := D a t a t I ] ;
а с п а р м ер т о м
.
fo r I : = l t o 10 do zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA for J:=l to 10 do begin X := 0; for К := 1 to 10 do X := X + Matl[I,K]*Mat2[K,J]; Mat[I,J] := X; end; for С := red to blue do Check(C);zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
о т ар еп О
р with
В о п ер ац и я х н а д з ап и с ям и о п е р аот р wit h одбну о и сп о ль з о в ат ь л д я к р а кт о г о обра щ ен и я к п оля м з ап и си . В оп ераот е wit h к п о ля м о нд о й и л и н ес к о л ь к и х з ап и се й м ож н о о б р а щ а ьт с я , и сп о ль з у я от л ь к о и д е н ит ф и к а от р ы п о л ей . Н а п р и м ер : wit h D at e do if month=12 then begin month := 1; year := year + 1; end else month := month + 1; Э т о э к в и в а л е н тн о ю с лу е д щ е м у . i f D a t e. m o n t h = 12 t h e n be gin D at e.m o n t h := 1; D a t e . ye a r := D a t e . ye a r + 1; end e l s e D at e.m o n t h := D at e.m o n t h + 1; B о п ер аот е wi t h сн ач л а п р о в е р я ст я к аж д я с ы лк а н а п ер м ен н у ю с ц ель ю ин ет р п р е ит р о в а т ь е е к а к п ол е з а п и с и . Е сл и э т о та к , т о о н а двгсе а в о с п р и н и м а е ст я и м ен н о та к и м образ ом , даж е е с л и и м е ст я досут п к п ер м ен н о й с те м ж е и м ен ем .zyxwvutsrqponm
- до в В о в ы
д
Р ан ь ш е ж у е бы л а воз м ож н ост ь п о з н а к о м и ьт с р а н . Э т о п р о ц реуд ы w r i t e и Read. Н о э т о ед л а с т я и ес т ь л и о бщ и е п р ав и л а р о й с вт а , в к л ю ч а я ди с к о в ы е н а к о п и ет л и н ап ри м е р U SB. Р аз муестя , щсу евт р або т ы н е о б х ид м о с о з а дв т ь с п ец и аль н ы п о сл е и з чуен и я осн о в о б ъ е к нт о - о р и е н ит р о в а н н о г и сп о ль з о в ат ь то л ь к о п о н я ти е "ф а й л " . Ф ай л п р е с да т в л я е т со б й п у о р яд ч ен у н о с и е тл е и с о з ад е с т я л д я од л г в р е м н н о г т ж с л иу т ь раз н о г о н е г о н о с и ет л я м оуг ски е , к о м п а к т- ди с к и , Zip, Jaz и т..д ) , а К ром е отг , ч т о и н фо р м а ц и я в фа й л и м ест я е щ е о нд а о лт и ч и ет л ь н а я о с б е н н о с ьт н али ч и я с в о б нд о г о м ес т а н а в н еш н е м ри ро в ан н ы х ти п о в в д сге а от ч н о о п р едл н о
В в о- д в о ы д
я в в од м и вы вод м да н н ы х н а эк , п о к а в ы е щ е н е з ма уд ы в а л и с ь , к а к в од а и вы вод а и н фо р м а ц и и в раз ли ч н ы е ст у , п р и н те р ы , к о м ну и к а ц и о н н ы е п орт ы и ли , т ну и в е р с а л ь н а я с и е мт а в о а д- в ы в о а д , и дл я е е е о б ъ ек т ы — п о т к и . О б э от м п о г в о р и м м о п р о гр а м и р о в а н и я , а сей ч а с е д бу , н а в е р н о
ю п о с л е д в а тл ь н о с т о рх а н е н и я и н фо р м а ц и р о д а ди с к и (ж ес кт и е так ж е м а г н и нт ы е л ен т е м ож е т р х а н и ьт с я : и х объе м (и л и н о с и ет л . Е сл и дл я кажодг , с к о л ь к о э л е м н от
ь ад н н ы . В к ач есвт , м а гн и от п ит ч е
х н а в н еш н е е в н еш
, ги б к и е ы и м агн и нт ы о дл г е в р ем я дл и н а ) з а в и с и о и з диг ру в с о е рд ж и т т
м -
е к а р ыт . , у фа й л о т от л ь к о о х ук р т с о ил и ин о в
т -
е zyxwvu
87
з н ач ен и е з ы в а ес т я н я е ст
, т о к о ли ч есвт о э л е м н от в в фа й л е п р и о б ъ яв л ен и . отХ я п осл е з а к р ы ти я фа й л а то ч н о е ч и сл о о в я щд х и я в сп ец и аль н ы х атб л и ц а х . И м ен н о в фа й л з а п и с ы в а ю ст я да н н ы е п р и вы з ов е ф ну к ц и и п ер ч ен ь п ар м ерто в ) к о т р о й в ы г л яи д т юс л уе д щ и м о браз о м w r i t e ( [ v a r l : f i l e ; ] P I , [ . . . , Pn] ) ; в о Сл руд
Ка чт о эт м ен н ы х скобки Эт фа й л п ао с в т д и р в и у ат в п р о ц а у ед р о й свт о
йл а Ф
к ви нд о о н оебзяльатн ы , к о тр . Н о хот о ат к , и есл и т н а у и э кра х , о п р едл н н о
о "сраингу та ы ил и фн укц и
, срде
" ыбноч , кд у
и п армоте
о с т е зьулпиос а вя до х
в може
и фа й л о в г х в н ег
и Wr it e , си гн р уат .
я л д я з н о бе ч и а р и пнеч р
т ио тианкфе д
о ит п о э л е м н от
я т с ач ь пвор тмеар
а н е к ау в р ас о х а (и м
и н е ли в я ъ б о
я
я пцоре
-
.
ь п ер м н а я va r l ит п а f i l e (о том , т н рт а к в д ы е ск о б и ) и снчте о е к о ли в ч с т е о п ер е н е о б их д м о з ап и сат ь в эот т ф а й л , так ж е з ак л ю ч ен н ы х в к в ар д н т ы е я б ы о нд а п ер м ен н а я дл я з а п и с и до лж н а п р и ств у о а т ь о б я з а е тл ь н о . в ы г л яи д т лд я п р о г а м и с а т , н о к о м п и л яот р в с д ег а од л ж е н п о а с в тд и ь п ро г ам и с т н е о п р е дл и л п ер в ы й п а р м ет р ит п а f i l e , т о к о м п и л яот р э т о м ес т о и де н и т ф и к а о т р ы i n p u t и л и O u t p u t , к о тр ы е о п р е лд я ю т к ла н с о вт е с н н о . П о э тм у , к а и е б ы п а р м ер т ы в ы н е и сп о ль з о в ал и w r i t e и Read, вы во д и в о д д в г се а у д уб т п р о и з в о ид ь т с я в фа й л и л и ст у е п р о г а м и с от м .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK й п а р м ет
ы и ы фаво лй
Д л я р або т ы с фа й л а м ит п ы и фа й л о в ы е п ер м ен н ы е в ьа т с я в п о с л е дв т и , м о ж н фа й л о в г о ти п а (и л и фай л о в F = file of A; F = Text; F = file;
т пвотас ри у
, говря
е пмер ын
е
и в D elphi п срмуедотн а воз м ож н ост ь о п р едл ят ь фа й л о в ы е . П о сл е э отг о и н фо р м а ц и ю , к о т р а я м ож е т п о рт е б о о с о р ха н и т ь в фа й л е . Сщ у евст т рт и с п о с б а о б ъ яв л ен и я й п е р м е н н о й ) .zyxwvutsrqponmlkjihgfedcbaZYXWVUT
Э т и рт и сп о с б а с о вю те у т рт е м ви ад м фа й л о в , к о т р ы м и п о з в о л яе т о п ер и р о ь D elphi. Р еч ь и ед т о ти п и з и р о в а н н ы х , ектосвы х и н е ит п и з и р о в а н н ы х фа й л а х е и сп о ль з о в ан ы к л ю ч ев ы е сло в а f i l e и of, дг е п ер в о е сло в о ог в р и В п ерво м ч а с лу о от м , чт о п е р м е н н а я F бе д у т и м ет ь ти п f i l e , а оврт е сло в о of отч ну яе т ит п э л е м ен от в фа й л а . Е сл и во тр г о сло в а н ет , т о ит п э л ем н от в фа й л а с ч и а т се я н ео п р ед лен н ы м , и , с о втес н н о , фай л н а з ы в а ест я н е ти п и з и р о в а н н ы м . Е сл и п р и о б ъ яв л ен и и и сп о ль з о в ан о сло в о T ext, т о э т о го в р и т о от м , ч т о соз аедт с я с п ец и ал ь н ы й ет к с о в ы й фа й л . T ext — э т о н е з а р ез р в и р о в а н н о е сло в , а и едн ит ф и к а от р с а тн ад р н т о г о ит п а да н н ы х , к а , н а п р и м ер , I n t e ge r и л и R ea l. т п р е д с та в л я т ь соб й з н ач ен и я л ю б о г о ти п а з а и ск лю ч ен и Э л ем н т ы фа й л а м о уг е м фа й л о в г о ли б о с тр к у и р о в а н н о г о ти п а , э л е м е н та м и котрог о я в л я ю тс я фай л ы , .т е . сщу ес вт о а н и е "ф а й л а фай ло в " н е до п су к а е тс я . Во т п р и м е р ы о б ъ яв л ен и фа й л о в ы х п ер м ен н ы х . t yp e TArrayl: array of Integer; TDate=record Day:l..31; {Чолси } Month:1..12; {Мцясе } Year:1900..2010 {Гд о } end; var Fl: file; F2: Text;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
-
в ат
88
л ав Г
З. Язкы
пр о г ам м и р о вани я
. т й
Delphi
F 3: f i l e of I n t e ge r ; F 4: f i l e of T Ar r a yl; F 5: f i l e of T D ate; З ед с ь о б ъ яв л ен ы п я т ь фа й л о в ы х п ер м ен н ы х . Э т о F 1 — н е ти п и з и р о в а н н ы й фа й л , F2 — етк со в ы й фа й л , a F 3, F4 и F5 — ти п и з и р о в а н н ы е фа й л ы . П р и ч е м ес л и с р ед и ти п и з и р о в а н н ы х фа й л о в э л ем н т ы фа й л а F3 о нт о с ят я к с а тн ад р н т о м у ит п у i n t e ge r , т о э лем н т ы фа й л о в F4 и F5 — к ти п а м , о б ъ яв л ен н ы м п о л ь з о в а е тл м (ти п T a r r a yl п р е сд а т в л я е т соб й м ас и в ц ел ы х ч и с ел , а ти п TD ate — з а п и с ь ) . т и н еч т о общ е . оХ т я раз н ы е ит п ы фа й л о в и м ею т с в о и о с б е н н о с ит , щ суевт Т ак , в фа й л е в к ажы д й м о ен т м ож е т бы т ь до спут е н от л ь к о о ид н э лем н т . Н а п р и м е р , ес л и в е р н ь т у с я к о б ъ яв л ен н ы м вы ш е фа й л о в ы м п ер м ен н ы м , т о в фа й л е F3 о дн о в р е м ен н о можн о и м ет ь о д ус т п от л ь к о к о нд о м у и з ц ел ы х ч и с ел , к о тры е с о ат в л я ю т фа й л ; в фа й л е F4 — к еид н свтен н о м у м ас и в у ; н а к о н е ц , в фай л е F5 — к оедтль н о вз я от й з а п и с и . К р о м е от г , фай л ы в се х в и о д в з а в е р ш а ю ст я м арк е о м кон ц а фа й л а EoF (о т а н гл и й с к и х сло в ""End of F ile"). х Т ак ж е н е о б их д м о о м т еи ь т , чт о п о ск о ль к у фа й л ы , в олит ч и е о т да н н ы х ги р д у ти п о в , р а з м ещ а ю ст я н е в о п е р а ит в н о й п а м я ти , а н а к о н к р ент о м фи з и ч ес к о м н о с и те л е , т о лд я подуст а к фа й л а м н е од с а т ч н о от л ь к о о б ъ яв и т ь фа й л о в у ю п е р м е н н юу . Н е о б х ид м о ещ е с в яз а т ь к о н к р е нт о е м ес т о н а фи з и ч ес к о м н о си етл е с фа й л о в о й п ер м ен н о й , лд я ч его и сп о ль з ю у ст я п р о ц р еу д ы Assi gn F i l e , R eset , R e wr it e и н ек о т р ы е р г ид у е . О б э от м е д бу т с к а з а н о в да л ь н е й ш е м , а н а ч н е м с н еит п и з и р о в а н н ы х фа й л о в .zyxwvutsrq е йл фа
Н е ит п з и р о в а н ы
ы
Н иет п и з и р о в а н ы е йа ф л ы ил о т ч ю а с я ем т , чт о дл я н и х п р и объвялне и и н е о п р е л яд я ти п элем н овт . Э т о п оз в лея т птча уол ь у о ст д п к фай л м с лю бо й рой укт р с . П р и от и фа й л а (с п ом щ ь ю п р о ц у ед р R eset и л и R ewrit e) н еоибдх м о от л ь к о к ауз т ь р ел ь д о н т ы х э л е м н о тв , с п ом щ ь ю к о рт ы х е д уб т п р о в и д ь тс я обм е н с фа й л о м . и э от м фа й л тсетруак я к а к п оследваьт н ост ь иэ т х э л е м н о т в п р о и з в о ль н о г о ит п а . я Во т к а к м ож е т в ы г л е ят д ь о б р ащ ен и е к п р о ц р е уад м R eset и R e wr it e дл я о кт р ы ит н е ти п и з и р о в а н н о г о фай ла . R e se t ( F , 5 1 2 ) ; R e wr i t e ( F , 2 5 6 ) ; З де с ь F — фа й л о в а я п ер м ен н ая , и м е ю щ а я ти п f i l e . А в к ач есвт е в от р г о п ар ы р аз м ер ы бло к в (в бай )тх , с п о м о щ ь ю ко м ер т а п р о ц еуд р R eset и R e wr it e куаз н о тр ы х е д бу т п р о и с хд т ь с ч и ыт в а н и е и з фа й л а и л и з ап и с ь в фа й л да н н ы х . П о с к о л ь к у эо т т п а р м е т р и ме т ит п Word, ег о м а к с и м а л ь н а я в ел и ч и н а р ав н а 65 535 б а й т . Е сл и вотр й п ар м ет р п р о ц уед р R e se t и R e wr it e н е з адн , т о п о ум о лч ан и ю дл и н а з ап и с и с ч и ат е с я рав н о й 128 бай т . П р и о п р едл н и и лд и н ы з ап и с и е с ул д т п р и н ят ь в о вн и м ан и е , чт о в о б щ е м ч с ал у е дл и н а фа й л а м ож е т о к а з ьт с я н е к р а нт а э то й в е л и ч и н е — одгт а п о с л е дн я я з ап и с ь о к а ж е ст я н еп о лн о й , и н ес к о л ь к о п о с л е нд и х б а й от в фа й л а н е у д уб т с ч и та н ы . оЧтб ы э от г о н е с лч у и л о с ь , и сп оль зй у т е в а тк и х ч с ал я у х дли н у з ап и си , рав н у ю е ди н и ц е . Д л я р аб о т ы с н и ет п и з и р о в а н ы м и фай лам и и сп о ьл ю з с у т я т е ж е п р о ыц у д е , чт о и лд я а дан н ы м и с н еит п и з и р о в а н ит п и з и р о в ан ы х , з а и склю чне и е м Read и Write. Д л я обм ен ным и фа й л а м и п р и м е н я ю ст я с п ец и ал ь н ы е п р о ц р е у ыд : BlockRead и Blo ckWrit e. с те к ры ит р аз м е Пр
р у д е оц П
а BlockRead я п р о ц у ед а сч и ы т в ае т и з фа й л а ку а з а н н о е ч и сло бло к в . П р и э от м к о л и ч е о счиы т вмаеы х йаб т равн о чи лс у сч и ы т м в е а х з а п и с ей , умн ожне ом у н а раз м е р блока . Ф ай л , и з к о тр г о п р о и с дх т с ч и ты в а н и е , п р евд ар и етль н о до л ж е н бы т ь о кт р ы т . т к а к в ы гляид т с и нг р у а т а п р о ц уед ы BlockRead. BlockRead (Var F : F i l e ; Var Buf; C o u n t : I n t e ge r [; Var R e s u l t : I n t e g e r ] ) zyxwvuts
Дан н а
в ст Во
В в о- д в о ы д
89
б о ч ег бы т р ы е у д сл атн н ы з н ач ен и ле е д уб р ек ит в п е р м е щ а се т
З е сд ь F — н е ти п и з и р о в а н н а я фай ло в а я п ер м ен н ая . Buf — п е р м е н н а я , р а н е е о б ъ яв л ен н а я в п ро г ам е и и с п о л ь з е ум а я в к а ч е св т е ра о ф еб р у а . Р аз м е р э от г о ф бе р у а , к о тр ы й п р е дн а з н а ч е н лд я о б м е н о в , н е одлж е н ь м ен ь ш е дл и н ы з ап и си , о п р едл н н о й п р и о кт р ы ит и фа й л а с п ом щ ь ю п р о ц еу д R eset и л и R e wr it e . Count — в ы р а ж ен и е и л и з н ач ен и е , со втюеу щ е е к о л и ч е свт у з ап и сей , к о тры е т сч и ат ь и з ф а й л а . R e su lt — з н а ч е н и е , в о з в р ащ аем о е п р о ц р ое у д й и с о в т ею у щ е е к о л и ч е вс т у сч и х з ап и се й (н ео б яз а етл ь н ы й п а р м е рт ) . К о л и ч е св т о с ч и ат н н ы х блок в (п ар м ет р R e su lt ) м о ж е т бы т ь м ен ь ш е и л и рав н о ю п а р м е рт а C oun t. Е сл и п р и вы з ов е п р о ц р еу д ы п ар м ет р R e su lt н е о п р ед н и к о л и ч е с вт о с ч и ат н н ы х бло к в о к а ж се т я н е равн о з н ач ен и ю п а р м ет а count, т з а фи к с и р о в а н а ош и бк а в о а -д в ы в о а д . П р и э от м од л ж н а бы т ь с а тн у о в л е н а ди а к о м п и л я от р а {$1+ }, ч т о о б ы ч н о дела ст я п о му о л ч а н и ю . П о з ав ер ш ен и и д е й с тв и я п р о ц уе д ы BlockR ead куаз етл ь ет к ш у е й п оз и ц и и фа й л а я н а к о л и ч е с вт о блок в , со вютеу щ е е з н ач ен и ю п а р м ет а R e su lt .zyxwvu
а BlockWrite я п р о ц р уе д а од б а в л я е т в фа й л о ид н и л и н еск о ль к о блок в . П р и э от м , к а к и дл я п роц уед ы BlockR ead, к оли ч есвт о з ап и с ы в аем ы х бай т р а в н о ч и сл у од б а в л я е м ы х з ап и с ей , му н о ж ен н о м у н а раз м е р бло к а . Ф а й л , в к о т р ы й п р о в ид с т я з ап и сь , п рведа р и е лт ь н о од л ж е н бы т ь о кт р ы т . Во т к а к вы глияд т с и г н р ау т а п р о ц р еу д ы BlockWrite. BlockWrite (Var F : F i l e ; Var Buf; C o u n t :I n t e ge r [; Var R e s u l t : I n t e ge r ] ) ; З е сд ь F — н е ти п и з и р о в а н н а я фай л о в а я п ер м ен н ая . Buf — п е р м е н н а я , р а н е е о б ъ яв л ен н а я в п ро г ам е и и с п о л ь з е ум а я в к а ч е св т е ра б о ч ег о ф еб р у а . C ount — в ы р а ж ен и е и л и з н ач ен и е , со втюеу щ е е к о л и ч е св т у з ап и с ей , к о тр ы е е у д сл т добав и т ь в ф а й л . R e su lt — з н а ч е н и е , в о з в р ащ аем о е п р о ц р ое у д й и с о в т юе у щ е е к о л и ч вес т у до б а в л ен ы х блок в (н ео б яз аетл ь н ы й п а р м ерт ) . К о л и ч е св т о од б а в л е н н ы х з ап и се й (п ар м ет р R e su lt ) м о ж е т бы т ь м ен ь ш е и л и рав н о з н ач ен и ю п а р м е рт а C oun t. Е сл и п р и вы з ов е п р о ц р еу д ы п ар м ет р R e su lt н е о п р е дл н и к о л и ч е с вт о од б а в л е н н ы х з ап и се й о к а ж е ст я н е равн о з н ач ен и ю п а р м ет а C ount, е д уб т з а фи к с и р о в а н а о ш и б к а в о а д- в ы в о а д .
р у д е цо р П
Дан н а
оК п и р о в ан и
е й лофа в
Р а с м орти м н еб о л ь ш у ю п р о г ам у , к о п и рюу щ у ю о ид н фа й л в ог р уд й и и сп оль зю у щ и й н ек о т р ы е и з те х к о н срткуц и й яз ы к а D elphi, о к о тры х го в р и л о с ь вы ш е .zyxwvut var FromF, ToF: file; NumRead, NumWritten: Integer; Buf: array[l..2048] of Char; inFileName: String; outFileName: String; begin Write('inFileName = ' ) ; Readln(inFileName); AssignFile(FromF, inFileName); { тырктО ь во н д о х й фл й а . } Reset(FromF, 1); { Ре м з а р бк о л а = 1. } Write('outFileName = ' ) ; Readln(outFileName);zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB
90
л ав Г
З. Язкы
пр о г ам м и р о вани я
Delphi
begin AssignFile(ToF, outFileName); { От ы р к т ь во н д о х ы й фл й а . } Rewrite(ToF, 1); { Ре м з а р бк о л а = 1. } repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten NumRead); CloseFile(FromF); { Зт ы р к а ь во н д о х й фл й а . } CloseFile(ToF); { Зт ы р к а ь во н д о х ы й фл й а . } end; end.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA В р а з е лд е va r э от й п р о г ам ы о б ъ я в л ю ст я вд е п ер м ен н ы е ит п а f i l e , с ч ет и к и NumRead и N umWritten, бфеу р Buf, п р есдатв ляю щ и й м ас и в си м вол в и и м ен а о дв х н о г о и в ы о нхд о г о фа й л о в in F ileN am e и outF ileN am e. З ает м в блок е , дг е р а з м ещ а ет с я п ро г ам а , октры в асет я ов н дх о й фа й л , дл я ч ег о и м я фай ла , п р есдатв ляю щ е е соб й п олн ы й п ту ь к ф а й л у , с в я з ы в а е тс я с п ерем ен н о й FromF ти п а f i l e в п р о ц е дру е Assi gn F i l e . П ер д э и т м п р о и с о х ид т в о д и м ен и фа й л а с п омощ ь ю п р о ц еуд р Wr it e (' in F ileN am e= ' ) и R eadln ( in F ileN a m e) , дг е сн ач л а в ы в о ид с т я з ап ро с н а в о д и м ен и фа й л а , н а к о т р ы й н жу н о в ес т и п олн ы й п ту ь фа й л а . Т е ж е с а м ы е де й с тв и я н е о б х ди м ы д л я о тк р ы ти я в ы о х дн о г о фа й л а . К о гд а фа й л ы о тк р ы ты , в ц и к л е r e p e a t п ер з ап и с ы в аю ст я да н н ы е и з о дн о г о фа й л а в дргоуй . П р и э то м вы о х д и з цик л а м ож е т п рои з ой т и п о в уд м п р и ч и н а м : и л и сч и ат н п о с л е нд и й си м во л и з о вн д х о г о фа й л а (N umRead= 0), и л и н е т м ест а дл я з а п и с и н а ди с к е (N um Written oN um R ead). О б р иа т е в н и м ан и е н а п о сленд и е п р о ц у ед ы C lo se F i le (FromF) и C l o se F i l e (ToF ). О н и н е о б х ид м ы л д я з а к р ы ит я фа й л о в , чобт ы о п ер ац и о н н а я с и с е тм а с м о гл а з ап ол н и т ь ат б л и ц у р аз м еш ен и я фа й л о в и р аз р еш и т ь п о л ь з о в аь т с я э ит м и фа й л а м и гр и д у м п о л ь з о в а ет л я м . В да н н о м ч аслу е о н и н е о б я з а ет л ь н ы , ат к к а к п о о к о н ч а н и и п ро г ам т с ед л а н о а в от м а ит ч е с к и , н о лчуш е в с е гд а ед л а т ь э т о сам о у , в н е м ы з а к р ы ит е е д уб к о тр ы х ч с ал я у х э т о п о з в о ли т и з б еж ат ь н е п р и я тн о с те й .zyxwvutsrqponmlkjihgfedcbaZYXWVUTS
и п зТ р о н ы в а
й фай л
И ат к
, ти п и з и р о в а н н ы й фа й л с о е др ж и т с о в кп у н о с т ь э л е м н от в , п р и н алд еж ащ и х , к о т р ы й о п р е дл н в о б ъ яв л ен и и фа й л о в й п ер м ен н о й . Д о сут п к э л е м н ат м , к а к п р ав и л о , п р о и осхд т п о с л е од в а е т л ь н о . М о ж н о а кт ж е п е р м е с ит ь к уа з у э л ем н т у фа й л а . ь е тк щ у е й п оз и ц и и (с п о м щ ь ю п р о ц р еу д ы seek) к лю бом Д л я то г о ч о т б ы окт р ы т ь фа й л к а к ти п и з и р о в а н н ы й , ег о н ео бхид м о ас оц и роват ь с фа й л о в й п ер м ен н о й , и м ею щ е й с о в т ею у щ и й ти п . Э т о м о ж е т бы т ь лю бо й и з п р о сыт х и л и р кс и у т о в а н ы х ти п о в , к а к сатн адрнт ы х , ат к и с о з адн н ы х п о л ь з о в а ет лем , з а и с к л ю ч ен и е м фа й л о в г о ти п а . Д л я пу р а в л е н и я ти п и з и р о в а н н ы м и фа й л а м и п оя д х т в с е п р о ц ре уд ы , к о т р ы е п р и в едн ы в табл . 3.14.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
ит п у фа й л а ет л
Та бл и ц
а 3 . 1 4 . П р о ц е д у р
р П о ец у р д
а и л
и фицунк
ы и фу н к ц и я О п и с а ни
Append
р к тО ы в а е
A s s i g n F i l e
Пр и с в а и е
B lo c k Read
Си ч ы т в а е
B l o c k w r i t e
З ап и с ы в ае
В в о- д в о ы д
и д л
я работ
ы с фа й л а м
и
е т с ущ ес втую щ и т и м т о ди т о ди
й фай я внеш нег н и л н ил
л д л
о фай л и нес окль и нес окль
я до б ав лени
я
а а й л о фв о б ло к о б лок
й п ер м ен о
й
в и з неитп зи ро ван о г
о файл
в в неитп зи р о ван ы
й фай
а л
zyxwvutsrqpon
91
а ин е к ч о О р П ое ц у д
а ил
и фунцик
я О п и с а ни
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF е
c h D i r
Из м е н я
C l o s e Fi l e
р З ка ы в е
т теукщ и
й калто
т й фа
г
л
EoF
В о з в р ща еа
т сута
с конц
EoLn
В о з в р ща еа
т сута
с срто к
Erase
и рт С е а
Fi l e Po s
т внеш ни
В о з щв р а е а
ю по зи ц
т тщуек и
й рзам е
Fl u s h
е П р з па и с ы в еа В о з в р ща еа
т теущк и
l ORe s u l t
В о з в р ща еа
т целоичс лен о
M k Dir
оС з д а е
Read
и ы ч С т в ае н е с ко л ь To же
, чт
ср о тк
у в тескотвы
еП р и м е н о в ы ае
Reset
р кы в т е а О
Re w r i t e
о С з д еа
я п о с ле дн
й ай ф
о
с
а в онд
у ил
т по рхе
и
д н а сюуещдл у
ю
л
й ай ф т но вы
л
й ай ф
л
г ь в типзронваы
х ил
. Н е и с п озльуест
й ком по не т т суат
с конц
а теск отв г
SeekEoln
В о з в р ща еа
т суат
с конц
а с рто к
s e t Te xt B u f
рП и с в а е
т бе уф
и тескотв г
е и л
х йал фа и й лам фа
о фай л
и
а у й л фа
у
и неитп зи ро ван ы
я уакз етл
х
а
а е ст к о в м
т тип зи ро ван ы о ил
и нипетзроныва
я с теск отвы м о фай л
р вво да- вы о д
о пеноил ж т одн
й и з й фа л
й ай ф
т уел тзак
, чт
е у с та
о произвд
В о з в р ща еа
To же в тескотвы
а
х
й поалтдк
рем П щ е а
Wr i t e l n
в
а
о знаеч и
х й ла фа
т п ус о т
З па и с ы в еа
о том и в о д- а в ы о д
т с у щ е с в утю щ и
w r i t e
х файол
л , о пред ляю щ е
й фунцки
т внеш ни
бО р еза
я соеквты
г
н а задн ы
р у д е цо р П
и н еи т п з и р о в а н о г а дл
г о пр ед л н о г
т о дн о и л и несок ль о пер м ены х о и Read, н о доп нлеиьт
еущ к т е г
. Неприм еним
е з н а че и е
т и оркытвае
д ла я е У
Tr u n c at e
о и л
р в выохдн й калот
т поалтдк
Rename
SeekEof
а
ю тип зи ро ван о г р фай ла
т бе уф
в ы п о лн е и
seek
о фай л
л
т теущк у
Ge t D i r
RmDir
а
и теск отв г
а
F i l e S i z e
Read ln
а ай л ф
й й фа
В о з в р ащ ае йл фа
3.14.zyxw
т.лаб
е файл
ы по с л
е
я
и несокль
о знаеч и
о и w r i t e , н о з ает е йл фа ы
й в фай
м запи с ы вае
л
т м арек
р конц
а сротк
и
а Read zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
в ан и с о в т ею у щ и
ы е п р о ц р уе д и н еск о ль к и х м п ер м ен н ы м Во т к а к в ы гляид т с и нг р у а т R ead[F , VI [, V2 , . . . , И сп о ль з о в ан и и о нд о г
о ил
З е сд ь F — фай ло в а я п ер м ен н ая VI - Vn — о нд а и л и н ес к о л ь к ч ен и ем фа й л о в го .
Read дл к о м п о н е н от . а п р о ц уед Vn] ) ;
я ти п и з и р о в а н н ы
х фа й л о в фа й л
а и п р и с в о ен и
ы Read дл , с о з адн н а
в з а к л ю ч а се т и с ч и а тн н ы
я ти п и з и р о в а н н ы
х фа й л о в
. и f i l e of. , з а и с к л ю -
92zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA л ав Г 3. Язкы пр о г ам м и р о вани я
Delphi
, п р и н алд еж а щ и
ю к о н с рт к у ц и х лю бо м
й
у ти п у
о п ер м ен н ы х
я с п ом ощ ь
я в с ч и ыт х з н ач ен и
р у д е цо р П
а WritezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA З ап и с ь в фа й л о щс у е с в т л я т п р о ц уе д а wr i t e . И с п о л ь з о в а н и е да н н о й п р о ц уе д ы л д я ти п и з и р о в а н н ы х фа й л о в з а к л ю ч а ест я в п р и св о ен и и з н ач ен и й н ек о т р ы х п ер м ен н ы х к о м п о н е н ат м фа й л а . С и гн р ау т а п р о ц р еу д ы w r i t e дл я ит п и з и р о в а н н о г о фа й л а в ы гляид т ат к . Wr it e [ F , VI [, V2 , . . . , Vn] ) ; З е сд ь F — фай ло в а я п ер м ен н ая , с о з адн н а я с п ом щ ь ю к о н с тр к у ц и и f i l e of. VI - vn — он д а и л и н ес к о л ь к о п ерм н ы х , п ри н лжеадщ и х лю бо м у ит п у , з а и склю ч ен и е м фай лов г о (эт и п ерм н ы е должн ы бы т ь тог о ж е ти п а , чт о и ком п он е т ы фай л) . П о сл е з ап и с и о ж д ка й п ер м н о й (он дчреом у э л ме н т у афй л а п р и эот м п ри сва ет с я з н а ч ен и е п ер м н о й , .т е . арост е з н а ч ен и е э л ме н т а з а м ен с я т я н овы м ) казлеут ь ет щ ку е й п оз и ц и и фай л а п е р м щ асе т я к ю у дщс ле м у э л ем н у т . Е сл и к а уз е л т ь н и о д са х т я в кон ц е фай ла , т о п р и з ап и с и оч ернд ог о э л ем н т а оэ т т э л е м н т доп о лн яе т фай л . Во т к а к м о ж н о ск оп и роват ь фа й л ы с п омощ ь ю ти п и з и р о в а н н ы х фа й л о в ы х п ер м ен н ы х .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA var Fl, F2: file of Char; Ch: Char; inFileName: String; outFileName: String; begin Write('inFileName = ' ) ; Readln(inFileName); AssignFile(Fl, inFilename); Reset(Fl); Write('outFileName = ' ) ; Readln(outFileName); AssignFile(F2, outFilename); Rewrite(F2); while not Eof(Fl) do begin Read(Fl, Ch) ; Write(F2, Ch); end; CloseFile(F2); CloseFile(Fl); end. З едс ь в с е с е дл а н о от ч н о ат к ж е , к а к и в п рыедщ у е м л и с ти н г е , отль к о в ц и кл е лд я вы одх а и с п о л ь з ес ту я в ы р аж ен и е n o t Eof ( F l ) , .т е . ц и к л п о в т р я е ст , п о к а н е е д уб т о д с и т гн у т кон е ц он в д х г о фа й л а . В от й в ер с и к о м п и л я то р м р ав н е с дгиру м к и , в чанст ост и сп о ль з о в ат
е Т ск о т в ы
е й л фа
и Delphi, с к о тр й я р а б о ют , клю чево е сло в о f i l e н е р асп о з н аест , отх я в сп рав о ч н о й с и ем т е п р и в е дн о п олн о е о п и сан и е фа й л о в н а и к о н с тр к у ц и я м и . В дан о й с и а цу т и и н е о б хи д м о и сп о ль з о в ат ь п от и ит п T F ileStream , е т м боле е чт о р а з б о чт и к и Delphi реком ен юуд ь эот т ти п к а к н аи бо ле е п о лн о овтеч аю щ и й в с е м п о рт е б н о с ят м .
я т
ы
Т е к сот в ы е фа й л ы п р е с да т в л я ю т со б й п о с л е д в а тл ь н о с т ь с рт о к раз н о й дл и н ы , с о с от я щ и х и з си м вол в . К аж д я срт о к а е тк с о в г о фа й л а о к а н ч и в а е ст я м ар к ер о м кон ц а с рт о к и EoLn (о т а н гл и й с к о г о "End of Line"), а з ав ер ш ае т ет к с о в ы й фа й л , к а к и л ю б о й дгоруй , м ар к е р кон ц а фа й л а EoF. К э лем н ат м е тк с о в г о фа й л а воз м ож е н от л ь к о п о с л е д в а тл ь н ы й п о д су т .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
В в о- д в о ы д
93
Дл
я отг
п ер м ен н о й Н е о б и хд м фа й л а м п р и м ен и м с тек сот в ы м р а с м о рт и
о ч о бт ы фа й , и м ею щ е о з а м е ит ь и и ме т сво и ы п р о ц уе д и фа й л а м м с а тн ад р н т ы
л о кт р ы т ь к а к ет к с от в ы й , ег о н ео бихд м о с в яз а т ь с фа й л о в й п T ext. , ч т о и с п о л ь з о в а н и е п р о ц еу д р Read и Wr it e с етк со в ы м и о с б е н н о с ит . К ром е от г , к етк со в ы м фа й л а м (и от л ь к о к н им ) ы ReadLn и WriteLn . Т ак ж е с п ец и ал ь н о дл я и с п о л ь з о в а н и я и п р е нд а з н а ч е н ы п р о ц р еу д а Append и фну к ц и я EoLn. С н ач л а е е тк с о в ы е фа й л ы .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP й ит
а н Ст д р ы
е те кс от в ы е файл ы В п р ыед щ у и х л аг в х и сп о ль з о в али с ь о п е р а от ы в о а д- в ы в о а д , к о т р ы 1 атк : Read (А , В , С ) ,• ил и Wr it e (X,Y, 'В ы в о д н а экран ) . П ер в ы й о п е р а от т п р и с в о ен ы п ер м ен н ы м в ес т и с к л а в и р уа т ы з н ач ен и я , к о тры е у д уб р о й о п е р аот р в ы в о ид т н а э к р а н з н а ч е н и я п ер м ен н ы х X и Y, а так ж е ср т о к К а к ж у е пу о м и н а л о с ь , в я з ы к е D elphi щсу есвту т в д а с а т н да р н т ы от р а , и гр а ю щ и х рол ь ет к с о в ы х фа й л о в ы х п ер м ен н ы х , с в яз ы в а ем ы х с к о н к р е нт ы м и фи з и ч ес к и м и с р ту о й с в т а м и к о м п ь ю етр а . Э т о и ден ит фи к а от р и Output, котры е с в яз а н ы с к л а в ри о у т й и э к ран о м к о м п ь ю ер т а с о в те н о з ан н ы е фа й л ы с ч и а тю с т я п о с т ян н о о кт р ы т м и (дл я н и х н е н жун о и сп о ль з о в ат ы м ожн о и сп о ль з о в ат ц р уед ы R e wr it e и R e se t ) , и э т и и ден ит фи к а от р Т ак , о п ер аот ы в о а д- в ы в о а д , о к отры х ш л а р еч ь в ы ш е , м о ж н о з ап и сат R e a d ( I n p u t , А, В , С ) ; Wr i t e ( O u t p u t , X, Y, ' В ы в о
д н а экран
1
е в ы г л яе д и р п о з в о л яе т А , В и с . Вот у е тк с а . х и д е н ти ф и к а в м ес т о фа й л о в ы in pu t . к Уа ь п ро ь в п р о г ам ах . ь и и н ач е .
);
Н о к уа з ы в а т ь п а р м ер т ы I n p u t и л и O u t p u t н ео б яз аетл ь н о , о н и п ордазм уеваю ст п о му о л ч ан и ю . п У о м ян ыт у е с а тн ад р н т ы е фа й л ы м ожн о п е р н а п р а в и ьт . Д л я э от г о од с а т ч н п о л ь з о в аьт с я п р о ц уе д й Assign , н а п р и м е р : Assign ( O u t pu t , • T e xt . t xt ' ). Е сл сл е э о т г о в п р о г ам е в ы з в ат ь п р о ц у ед у Wr it e бе з куаз н и я фа й л а , со втюеу щ а и н фо р м а ц и я е д бу т з ап и сан а в фай л T e xt . t xt .
я о вос и по
я
р у д е цо р П
а Read а Read лд я ектосвы х фа й л о в и с п о л ь з ес т у я лд я с ч и ыт в а н и я о нд о г о ил и н ес к о л ь к и х з н ач ен и й фа й л а и п р и с в о ен и я с ч и ат н н ы х з н ач ен и й п ер м ен н ы м , куа з н н ы м в п р о ц р еуд . З н а ч е н и я муог т п р и н а лд е ж а т ь ит п а м C har, s t r i n g , а акт ж е лю бы м ц ел о ч и с л ен н ы м и л и в е щ е с вт н н ы м ит п а м . С и нг р у а т а п р о ц уед ы Read лд я етк со в г о фа й л а в ы гл ия д т ат к . R ead([Var F :T e xt ; ] VI [, V2 , . . . , Vn ] ) ; П р и с ч и ыт в а н и и п ер м ен н ы х ит п а c h a r и з фай ла с ч и ы т в а се т я си м во л и п ри св аи в са ет я п ер м ен н о й , з еат м с ч и ы т в а се т я с юл е у д щ и й си м в о л и п р и с в а и в а ест я ю с лу е д щ е й п ер м ен н о й — и ат к д о е т х п о р , п о к а в се м п е р м е н н ы м ит п а C har, куаз н н ы м пр и т п р и с в о ен ы с ч и ат н н ы е и з фай л а з н ач ен и я . (П р и в в о вы з ов е п р о ц уе д ы Read, н е бу д у у в о ид м ы м и з н ач ен и ям и тсретбу я в оид т ь н ек о т р ы й р а з ед л и д е с к л а в и р уа т ы м жед е лт ь : п р о бел , си м в о л а тлб я у ц и и — к лав и ш а и л и к о н е ц с рт о к и — к лав и ш а .) Е сл и о ч е р нд о й с ч и ат н н ы й си м во л о к а ж ес т я м ар к е о м кон ц а срт о к и EoLn (п р и в од е с к лав ир у т ы лд я э о т г о од с а т ч н о н аж т ь к лав и ш у ), с ч и ыт в ан и е е д уб т п р о д л ж ен о и з н ов й с рт о к и . Е сл и о ч е р нд о й с ч и ат н н ы й си м в о л о к а ж ес т я м ар к ер о м кон ц а фа й л а EoF (п р и в од е с к л а в и р уа т ы лд я э о т г о од с а т ч н о в о с п о л ь з о в а ьт с я к ом би н ац и е й к лав и ш ), в ы п о л н е н и е п р о ц уед ы Read е д уб т п р ек р ащ ен о , и п ро г ам а п ер й ед т к сю уледщ ем у о п е р ао т у . П р и с ч и ты в а н и и с рт о к в ы х п ер м ен н ы х s t r i n g и з фа й л а уд б т с ч и та н ы вс е си м вол ы д о бли ж ай ш ег о м арк е а кон ц а с тр о к и . Е сл и дл и н а с ч и та н н о й с тр о к и п ре ю лд я з н а ч е н и й ти п а s t r i n g в ел и ч и н у (255 с и м в о л о в ) , вс е о с - zyx в з о й ед т д о п с у ит м у
П р о ц у ед
94
л ав Г
3. зкЯы
пр о г ам м и р о вани я
Delphi
та в ш и е с я д о кон ц а с тр о к и бай т ы о бт р а с ы в а ю ст я н и и к п р о ц е р ду е Read ед бу т с ч и ыт в а ьт с дл и н ы . И н ы м и словам и , с п о м о щ ь ю с тр о к п о др я . Д л я то г о чотб ы с ч и ат ти ь с я к п р о ц е р ду е ReadLn. П р и с ч и ыт в а н и и ч и сло в ы х з н ач ен и п р о п с ук а т ь лю бы е п р о б ел ы , си м в о л ы ю св т у щ и е ч и сло в й с рт о к е . К одг а е д уб р у д а Read н а ч н е т фо р м и р о в а т ь ч и сло в ч и с л ен н ы х си м вол в (п р о б ел , си м в о н а я ат к и м о бр аз о м п о с л е д в а тл ь н о с т п р е сд а т в л е н и е с о в т ес ю у щ е г о ч и сла вю с е т у щ е й п ер м ен н о й . Е сл и ч и сло в а у т , т о п р о и з о й ед т ош и бк а в о а д- в ы в о а д
я м арк е п р о ц е р ду ь н еск о ль к
. З а ет м п р и к а ж од м н ов м обращ е р кон ц а с тр о к и , .т е . срто к а н л уе в о я с ч и ат ь н еск о ль к ы R ead н е адсут о с рт о к в ы х з н ач ен и й , селуд т обра
й о -
й ти п а i n t e ge r и л и R eal п роц уед а Read е д бу т а л тб я у ц и и и л и м ар к ер ы кон ц а с рт о к и , п р едш е т о б н а жр у е н а п ер в а я з н ач щ а я ц и фр а , п р о ц е е з н ач ен и е , п о к а н е в с р т ие я о ид н и з п ер л а т б л уя ц и и и л и м арк е р кон ц а с тр о к и ) . С ч и та н ь циф р р а с м а рт и в а е ст я к а к си м воль н о е , и п о лчуен н о е з н ач ен и е п р и с в а и в а ес т я со т я ср т о к а н е с о в ет у т о ж и а де м о у фо р м а .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK
р у д е цо р П
а Write И сп о ль з о в ан и е п р о ц у ед ы Writ e лд я екотсвы х фа й л о в с в оид ст я к з а п и с и з н ач ен и й но д й и л и н ес к о л ь к и х п ер м ен ы х , кауз н ы х п р и вы з ов е п р о ц ы у ед , в фай л . З н ач е н и я , о корты х и ед т р еч ь , м уо г т п р и н л а е жд т ь ит п а м C har, S t r i n g, Boolean , а актж е т бы т ь з н а ч ен и я лю бы м ц ел о ч и с л ен н ы м и л и в е щ ев с т н ы м ит п а м . К ром е тог , э т о муог п ер ч и с л м ы х ит п о в , соз адн ы х н а осн ов е c h a r и л и онд ог о и з ц елоч и слен ы х ит п о в . Е сл и к у а з е тл ь е кщ т у е й п оз и ц и и расп о л ж е н в н ач л е фа й л а , н о в а я и н фо р м ац и я з а п и с ы в а ест я п о в ер х сатр о й . Е сл и ж е к уа з е л т ь н о а и хд с т я в кон ц е фа й л а , т о н о в а я и н фо р м а ц и я до п о л н я е т с о ед р ж и м о е фа й л а . С и гн р уат а п р о ц уе д ы Wr it e лд я етк со в г о фа й л а с юл е у д щ а я .zyxwvutsrqponmlkjihgf Write([var FrText;] VI [, V2,..., Vn] ) ; К аж д я и з п ер м ен н ы х и л и в ы р аж ен и й VI - Vn и м е т с лю еуд щ и й фо р м а т : V[ : a [ : b ] ] З е сд ь V — п ер м ен н а я (и л и в ы р аж ен и е) , з н ач ен и е котро й з а п и с ы в а ест я в фа й л . А — с п е ц и ф и к а то р ш и ри н ы п о л я (н ео б яз аетл ь н ы й п а р м е тр ) . Е сл и з ап и с ы в аем о е з н ач ен и е н е з ап о лн и т вс ю ш и р и н у п оля , о н о е д уб т с л ев а до п о л н е н о п р о б ел ам и . Е сл и ш и ри н ы п ол я дл я з ап и с ы в аем о г о з н ач ен и я н е виатх , да н н ы й п а р м ет р и г н о р и р е с ут я . в — с п е ц и фи к а то р к о л и ч е свт а з н ак о в п о сл е д е с я ти ч н о й от ч к и . Д а н н ы й п ар м ет р и с п о л ь з е с ту я от л ь к о в п а р е с п а р м ето м А и от л ь к о в о т м ч с л а еу , есл и з н а ч е н и е v п р и н а лд е ж и т о нд о м у и з в е щ е свт н н ы х ти п о в . Э т и воз м ож н ост и ф о р м а ит р о в а н и я м ожн о и сп о ль з о в ат ь л д я п о чл у е н и я пу о р яд ч ен н о г о вы вод а н а э к р а н .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Ре м зю
е
В да н н о й гл а в е оп и сан ы вс е о и сп оль з оват ь и дл я з н а к о м с тв н о п олн ы й сп равоч н и к . Д л я ехт и л о х о п о н и м а е т п ри н ц и п ы о р га н и з а ц и воз можн о , ед бу т п о н я те н н е в ес ь к ост и и з ло ж ен и я . О дн а к о ес лу д к о н с тр к у ц и я х яз ы к а D elphi в да л ь н е й ш е с м о тр е н и и ф р а г м е н то в рабо ч и х п р о гр а м можн
е Рз ю м е
р к су т
ы яз ы к а п р о гр а м и р о в а н и я D elphi. Г лав у а с яз ы к о м D elphi, и к а к к р а тк и й , н о до с ат о ч , к т о со в е м н е и ме т оп ы т а п р о гр а м и р о в а н и я и фа й л о в о й с и с те м ы о п ер ац и о н н ы х с и с те м , м а ет р и а л , п р и в е д н н ы й в э то й г л а в е , в и д у к рат т о тм е и ть , ч т о о н а и б о л е е ч аст о и с п о л ь з е ум ы х м е д бу т рас каз ан о п о др б н е , п р и р а с .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK
95
ынлтоьр Ко
е всорп 1. К ак и б ит п н и я си м в о л в 2. Че м олти ч асет 3. К ак о е ч и с л
ы да н н ы
ы х п р е нд а з н а ч е н
? я о п е р аот о е д уб
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI ы лд
р п ри св аи в ан и т в ы в е дн
я р ха н е н и
я ч и с ел
я о т о п ер аот н с п о м щ ь
о н а экра
т з а фи к с и р о в а н 4. К а к я о ш и б к а бе д у var х : 1..5; begin х : = 6 ; Writeln(x); Writeln(Pred(x)); Readln; end.
а к о м п и л яот р
а р а в е н с вт а
Чт 12. Че 13. К ак и 14. Д л
96
о е д уб м о л т и ч а ес т
т в ы в е нд
о н а э к р а я фа й л о т м ас и в а е ти п ы фа й л о в ы х п ер м ен н ы я ч е го и с п о л ь з ю у ст я п р о ц р е уд
н в п ер в о
м в сюлуед щ е
? м ло ги ч еск о г
-
?zyxwvu
м м ас и в ам и
? й к у а з ет л ь
"
о в ы р а ж ен и я
я л о ги ч е с к а и е е .
м ч с а ях л у
я р ха н е
м ф р а гм е н е т
я "я в н ы
о и к о н еч н о г е wh ile в ы р а ж ен и . С р а в н и т е п р и в едн н ы ы о н и и л и н ет
м и вотр
е — лд
? а w r i t e ( P red ( 3) ) , - ?
ю о п е р ао т
5. В ч е м з ак лю ч асет я раз н и ц а мжед у с а ит ч е с к и м и ди н а м и ч е с к и 6. В че м р а з н и ц а мжед у ти п а м и a r r a y и se t ? 7. Чт о атк о е к уа з е л т ь ? К а к в ы п о н и м а ет е с л о в с о ч е ат н и и "н е я в н ы й к у а з а ет л ь " ? 8. К а к м о ж н о и з м е н и т ь п р а в и л о п р и о р и ет а о п е р аот в 9. В че м р аз н и ц а мжде у н еп о л н ы м и п о лн ы м вы ч и слен и е 10. В п р и в едн н о м н иж е фр а гм е н т е п ро г ам ы ес т ь с е р ь е з н а к о тр у ю к о м п и л я от р н е о бн ажруи т . П о сатр й етс ь н ай т X := 0; wh ile X _ P . R Q V a r i b e l >JMt(j dV ernan beP lo _ _ t A c a p i t f x S o rc Tgea tdAnio f Type aM Description
W h e n y o u c r e a t e f o r m s in t h e F o r m d e s i g n e r a t d e s i g n t i m e , t h e y a r e i m p l e m e n t e d a s d e s c e n d a n t s o f T F o r m . F o r m s c a n r e p r e s e n t t h e a p p l i c a t i o n ' s m a i n w i n d o w , o r d i a l o g b o x e s , o r M D I c h i l d r e n . A f o r m c a n c o n t a i n o t h e r o b j e c t s , s u c h a s T B u t t o n , T C h e c k B o x , a n d T C o m b o B o x o b j e c t s .
rgerbnstbysridrPi« Тур * [getNHtbynarwProc I vt- ;
E x a m p l e s o f f o r m s i n c l u d e T L o g i n D i a l o g a n d T P a s s w o r d D i a l o g o b j e c t s . ] H i e r a r c h y
System.Object *>ч System- Marshal BvRefObiect - . System.CprnponentMpdel,Component *i* Borland.ycl.Cpntrols.TCpntrp! Borland Vcl.Controis.TWmControl Borland.Vcl. Forms.TScrollingWinContrpI Borland.yc| .Forms,TCustomForm
G e p [9et*e'vbyrHneftK Type r t b n P c Type Type
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM
n
ис Р
о Пл
. 5.1. Ии х р а р е
я и н а во д е нлс а
t
E
S : Oet*< fw «ET ДР
я дл
я тпи
1
а TForm
я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
П ол а дн ы в олит ч е ув т з ащ и т и од х с итмы х п р и оэ т о гр а н и ч е н
о ка ж т е о п ли е рд т ь к а к п ер м н у ю э к з ем п л яр а , ювяал тспщдре у ю со б й е м ож н е к о н к н р ет о г о а к т ъ ое б . П ол е в о б ък е т е п о бдн о п ол ю в з ап и с и яз ы к а Delphi, н о е о т з ап и с , к п оля м в объкет е обы ч н о н е раз реш е н п рям о й дп уост . Э т о сп ос бт е п ео л й о т ч й а у нл с о г о и л и м п ы у р де ш л не о г о и с к а ж ен и я . Ду отс п к п о ля м п р о т ч ер з св о й а т , окрыт е у гм о т п в ы та у с ь к а к и ф лр ь т ы и н е п р о с к ат у ь н о е пд с у з н а ч ен и й . Объвялне и я п о ле й п р яо и д с х т к а к о б ъ в я нл е и я о бы ч н ы х п ер м н ы х , м п ол я чща е г е св о р за м щ е юа с т я в з акры от м и н ре й ф т с е ксал , дуост п к кортм у . В и м ен а х п оле й п р и н ят о савти ь п ре в у ю кв уб у F (о т слов а Field), н ап р и м ер :
F Q u a n t i t y: I n t e ge r ; .
Об л а с т
и вид м ос т
Яз ы к Delphi п аоврслеятд со в (п о ля м и а м о д те и a u t o m a t ed , октры ваю щ и г о в р и ьт , — и н етр ф й с о и дх м о е к о л и ч е св т с юл е у д щ и й р оу в ен
и т о д п о л н и е тл ь н ы ) с п ом щ ь
ю ид р е к и т х с о в т юе у щ и
ы к лас о о б ъ яв л ен и ь п о уд с т а
. З а кажод й п оле й ил
.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
ш P r i va t e (з акры т й ) . Объвялне ы н ы о ль т к о л д я о г т о а к од , орыкт Д и р е к ит в а p r i v a t e ск ры в ае и з ащ и щ ае т чнле ы эогт о октъбе
л ас К ы
й к о н р то л ь уровн я п у о с тд а к ч лен а м к лас в p r o t e c t e d , p r i va t e , p u b l i c , p u b li sh e d е р а з е лд ы о б ъ яв л ен и й , и л и , к а к п р и н я т о й и з ди р ек ит в м ож е т с л ое д в а т ь лю бо е н ео б и м о е тд в . К ажыд й и н ет р ф й с о б ес п еч и в ае т
е в дан н о й ин с о д т ха т о с б ен н о с т а о т н пе вонстрд ог
м рлеза д я в б ло к и р еа л и з а ц и
е п ер м н ы е р еа л и з а ц и и объект о дп у отс
е и мод те и с ам о г а о т п о л ь з о в а е тл а и и з м ен ен и
ы п у о ст д о а о б ък е т я и з вн е
. й .
125
• P r o t e c t e d (з а щ и щ ен н ы й ) . Член о б ъ а м ек т , п ро и з в онд ы м о т дан о г р о й в ст о объкет а о т п ольз еват а а кт ж е э ф е к ти в н о с т ь дпоуст • P u b lic (о кт р ы ыт й ) . О бъ яв лен н ы в лю бо м м ес т е п ро г ам ы . о б ъ яв л ен ы ка к p u b l i c . • P u b lish e d (э к с п о р ит реум ы й ) едл , в п р о ц ес е к о м п и ляц и п о лн ен и я (RTTI). Э т о п о з в о ли фо р м а ц и ю о б э л е м н ат х о б ъ ека т п одбн а я и н фо р м а ц и я и с п о л ь з се т у сп и ско в свой ст в о б ъ е к от в . • Autom ated (а в от м а ит з и р о в а н н ы й ) н и я с о в м е с ит м о с т и с р а н н и м
до тМ е
ы к л ас , о бъ яв лен ы о к л ас . Э т я и в т о ж е врем а к п о ля м и моаетд е в э от м К о н к ср о т у ы . Д л и бе д у
я ч л ен о т с о з а дн
о п о з в о л яе я обесп чи т р а з е лд и е д с рк т о у
в о б ъ ек ат а и н фо р м а ц и м э л е м н ат
т и г р уд , о б ъ яв л ен н ы я и н с п е к от р . Э от и в ер с и ям
е в э о т м р а з ел д , п уонсдт т ск ры т ь в н р ет у н е е ст у ь ниодмубхе ю и г ьб к о ст м о б ъ ек т а дл я ег о п отм к ов . е ч л ен ы о б ъ ек т а опд су т н ы в д сге а од л ж н ы бы т , о б ъ яв л ен н ы
х в да н н о х в р ем н м п р и ло ж ен и я п ч о ал т у х к а к p u b lish e d . В ч аснт о сит м о б ъ е к от в п р и п о с рт е н и
ы , ы ь
м раз и вы ь ин
я о ит п а
, и
т р аз ед л с о р ха н е н от л ь к о лд я о б ес п еч и D elphi.zyxwvutsrqponmlkjihgfedcbaZYXWVU
ы
М о д те ы п р е с ад т в л я ю т со б й п р о ц уед н о с к а з ьт , чт о м еотд ы о п р е дл я ю т п о в е дн и в с то а ь вд а в аж н ей ш и х м оа е д т : к о н срктоу с а м ож н о с о з а дт ь п рои з воль н о е к о л и ч е св т р еш ен и я к о н к р е нт ы х з а дч . С о з ад н и е м о е дт а — п р о ц ес , со тящ и м о ет д в о б ъ яв л ен и и к лас , а з еат м с о з а тд ю с ул е д щ е . • С о з а дй т • О кт р о й т (С о б ы ит я) • Дв а р аз
е н овы е и н с п е к то . а щ елк н и т
й п р о ек
т ти п р о б ъ ек от е н а п ол
ы и ф ну к ц и е к лас р и десрктоу о лю бы
, п р и н алдеж ащ и . В клас
е к л ас у
е в с д ег а од л ж н . П р и п р о ек ит р о в а н и х м ео т д в , н еоибдх м ы
х иг р уд
й и з в у д х э ат п о в ь ко д ег о р еа л и з а ц и
. С н ач л
а е у сдл . Н а п р и м ер
а VCL Form Application. в (к лави ш а ) и щ ел к н и т е о б р а очт и к
а O n c lic k в раз елд
е н а в к л ад
. М о ж ы п р и тс у и к лас х лд т о б ъ яв и т , в ы п о лн и т
я ь е
е Events
е Input.
В р е ад к о т р е код в п о чл уи т е юс л у е д щ у ю п ро г ам у (с м . л и с ти н г н и ж е) , дг е в к лас е TF orml п о я в и тс я п р о ц р еу д а F orm C lick, а в р а з едл е р еали з ац и и — о п и с а н и е э от й п р о ц е р ду ы . u n i t U n i t l ; in t e r fa c e u se s Windows, M essages, SysU t ils, Va r ia n t s, C la sse s, G raph ics, C o n t ro ls, Forms, D i a lo gs; t yp e TForml = c lass( T F o rm ) p r o c e d u r e F o r m C lic k( Sen d er : T O bje c t ) ; p r i va t ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA { Private declarations } public { Public declarations } end; var Forml: TForml; implementation {$R *.nfm} procedure TForml.FormClick(Sender: TObject); beginzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
126
л ав Г
5. Обеткъ ы
в Delphi
{ З д е с end; end.
ь ко
д о б р а б о тк
и щ елч к
Т ак и м о бр аз о м в ы с о з а дл и пу с т з ап олн и т ь с о в т ес ю у щ и м и к о ад м и з м ен и т ь ц ве т фо н а окн а н а ч ер н ы й T F orm l.F orm C lick (мжед у к л ю ч ев ы м Forml.Color := clBlack; и з а п ис т у е п р о г ам у (к лав и ш н а н е м мы ш ь ю и н а б л ю а дй т е р ез л ь аут ы м е от д
иТ п
а мы ш и
. }
ю п р о ц у ед и и п о ч л иу т , лд и сло в ам
у о б р а о кт и щ ел ч к а мы ш и ь н жун ы й э ф ек т . Н а п р и м е р я ч ег о п о м е с ит е в оп и сан и и b e gi n . . .en d) юслуед щ у
. М ож ет
е е е , м ож ет
е п р о ц р еу д ю ср т о к у
е ы :zyxwvut
а ). П о сл е о т г о к а к п о я в и тс я окн о , щ ел к н и т е .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM
в
М о е тд ы о б ъ ек т ( vi r t u a l ) , ди н а м и ч ес к и лд я чег о к н и м добав ляю ст
а м оуг
т бы т ь оп и сан е (dynamic) и л я с о в т ею у щ и
е м е от д ы С ат и ч е с к и е м о е тд ы р а б о тю ит п м о е т д в с а ту н а в л и в а е с т ди и к о м п и л я ц и , и к о м п и л ято о тд а к а к с а т и ч е с к и е . Т а к и п е р жг у н ы в ц еля х п о л и м о р фи з м
ы к а к с а ти ч е с к и и к а к модте ы о б р а окт е ди р е к и т в ы
е ( s t a t i c ) , в и арулть н ы е и со б щ ен и я (m essage), .
С ат и ч е с ки
т п одбн о обы ч н ы м п р о ц р е ау д я п о муо лч ан и ю . ре д А с ат к о г о м о е дт р в к од е п р о г ам ы о ф р м л яе е м о е тд ы р а б о ют т б ы р с ет е ги р д у х а о бъ екотв .
м и л и ф ну к ц и я м . Э от а и з в ес т н ж у е н а ас т т вс е вы з ов ы да н н о г о ме , о дн а к о н е м о гу т бы т
е м е от д ы Вы зо в в и а л ь у р нт ы х м ое т д в и з - з а в о з м о ж н о ст и и х п ер гзу к че м в ы з о в с аит ч е с к и х , ат к к а к в о врем я к о м п и ляц и и аред с к о н к р е нт о г м о д ет а н е и з в е с тн . Д л я р еш ен и я э от й з а чд и к о м п и л я от р ср т о и н ы х м о е тд в (VMT), о бесп еч и в аю щ у ю о п р е дл н и е р ае с д а м о д ет н ен и я п ро г ам ы . VMT соедр ж и т в с е в и а л р ьу т н ы е м о е тд ы п р ек д о дт ы с а м о г о о б ъ ека т , п о э тм у в и а лр уь т н ы е м о де т ы и сп о ль з юу о бъ е м п а м я ит , че м модет ы ди н а м и ч е с к и е , о нд ак о и х в ы з о в п р о и ос х д
т ь
В и р у ант л ьы
и Д н а м и ч е с ки
е м е от д
Д и н ам и ч еск и
и н ем н о г
о слож н е , о в ы з ы в аем о г о т ат б л и ц у в и а лр у ь т а в п р о ц ес е вы п ол а и в и а р лу т ь н ы е ме т н еск о ль к о боль ш и й т б ы срт е .
ы
е м о е тд
ы в ц ел о м п о дбн ы в и а л руь т н ы м м ео т а д , н о о бсжлуи в аю ст я й с и с ет м о й . К ажомд у ид н а м и ч е с к о м у м о д ет у к о м п и л я то р н аз н а е ч и сло и и сп о ль зе у т е г о в м ес т е с ардесо м м о е дт а д л я п о с тр о е н и я атб х м о е тд в (D M T— Dynamic Method Table). В о лти ч и е о т VMT, т м о де т ы ли ш ь да н н о г о о б ъ ека т , благорд я ч ме у о б е с п е ч и в а ест я экон о й п а м я ит , н о з ам елдяст я вы з о в м ое т а д , п о ск о ль к у лд я п о и с к а ег о т п ер с м о рт ен а н е онд а D MT в и ер а их и о б ъ е к от в . е в с е го , бе д у
го р д у
й ид с п е ч т р с к о ч ае т ну и к а л ь н о ли ц ы ди н а м и ч е с к и D M T соедрж и м и я и с п о л ь з е му о ар д е с , ск о р е М е от д
ы о б р а б о тк и с о б щ ени я М од т е ы ко б р а т и с о б щ ен и й п нрде аз н ачне ы дл я обрак т и п р щ ия о д х и х со бщ ен и й , с п ом щ ь ю ы ор к т х п и ро д хс т о бм е н и н оф р м а ц и е й в о п ер а ц и о н о й си емст е Windows. З н а ч ен и е п ол с е к юл ч в о е г о о лс в а m essage еяолп др т с о б щ ен и е , в овет т н а о кр т е вы з ы с в а ет я а дн ы й м о д ет . Т ак и е м о д те ы с о з аю д с т я л д я р еак ц и и н а т е ил и ин ы е со бщ е н и я Windows. О н и н и кодг а н е вы з ы ваю ст я н е п о с р в е дт н о и з п рог ам ы . Н а п р и м ер : t yp e TTextBox = class(TCustomControl) private procedure WMChar(var Message: TWMChar); message WM_CHAR;
end;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Класы
127
гд е WM_CH AR — к о н с т а н т а
Message) го в ря ч а с лу е э т о с в яз ан М ео т д
, о п р е д е л я ю щ а
т о то м , ч т о э т о с о б щ ен и о с н аж ит е м к лав и
я да н н о
е о п е р а ц и о н н о ш к л а в и р а уы т
е сообщ ен и е
. Д в
е б ук в
ы WM (Win dows
й си сетм ы Windows. В да н н о м .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ
а ы кл а с я и сп оль з ован и я кажодг о м о е дт а н е о б хид м о сн ач л а с о з ад т ь о б ъ ек т (э к з е м п л я ) и от л ь к о п от м е дл а т ь вы з о в м о е дт а в п ро г ам е , дл я ч ег о и сп о ль з юу ст я им а и и м я м оетад , н а п и с а н н ы е ч ер з о тч к у . Н а п р и м е р , в ран е е п р и в едн н о м к лас TF orml в ы з о в м о д ет а F orm C lick п ро и схд т к а к TF orml .F orm C lick, н о есл и п е д м ож е т бы т д о б ъ яв л ен и е м м о е дт а п о с ат в и т ь к л ю ч ев о е сло в о c l a s s , т о эот т м оет н к а к обы ч н а я п р о ц уе д а и л и ф ну к ц и я бе з с о з ад н и я э к з ем п л яр а к лас , ч лен о о я в л я е ст я да н н ы й м о ед т . Н ео бихд м о и м ет ь в ви уд , чт о п р и с о з адн и и п одб х м о е тд в н ел ь з я и сп о ль з о в ат ь н и к ак о й и н фо р м а ц и и э к з е м п л я р а к лас , п о ск ль к у о п р и вед т к о ш и б к е к о м п и л я ц и , та к к а к о бъ ек т н е щ с у етв с у .
Дл
к лас о б ъ ек т с е ре вы з ва к о тр г ны эт Пе р о п р е д л е н и
р я ь м -
е м е от д
в е м о е тд в в яз ы к е Delphi реали зеу т к о н ц еп ц и ю п о л и м о р фи з м а , п о з в о ля я и з м ен ят ь п о в е дн и е м о е дт а о т н а с л е нд и к а к н а с л е нд и к у . П ер о п р едл н и е о м д те а воз м ожн о от л ь к о в то м чслауе , есл и п ер в о н ач л ь н о о н бы л о б ъ я в л е н с ди р е к ит в о й v i r t u a l и л и dynam ic. Д л я п ер о п р едл н и я о м д те а п р и ег о о б ъ яв л ен и и в м ес т о к л ю ч ве ы х сло в v i r t u a l и л и dynamic е услд т к уа з т ь к л ю ч ев о е сло в о o ve r r i d e . Н и ж е п р и в ед н п ри м е р п ер о п р едл н и я м ое т д в , дг е моет д Draw п ер о п р едл н в дву х н у а с л ео д в а н н ы х к лас х T R ect an gle и T E l l i p se . t yp ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA TFigure = class procedure Draw; virtual; end; TRectangle = class(TFigure) procedure Draw,- override; end; TEllipse = class{TFigure) procedure Draw; override; end; с еЗ д ь п ер в ы м о б ъ вя л е н с ак л с TF igure, окрыт й е з та м ю у н д елс а т к лс а ы TR ectan gle и T E lli p se , ч т о в и нд о и з о б ъ яв л ен и й к лас о в , гд е з а к лю ч евы м сло в м c l a s s в кгру лы х с к о б а х п о м е щ а е ст я и м я р оид етль ск о г о к лас . Д и р е к ит в а o ve r r i d e п ри в оид т к з ам ещ ен и ю с рт о к и оп и сан и я и о с н дх о г о м о е дт а в табли ц е VMT срто к й оп и сан и я н ов г о м о ае тд . Е сл и о б ъ яв и т ь н овы е ф ну к ц и и с к л ю ч ев ы м сло в м v i r t u a l и л и dyn am ic, а н е o ve r r i d e , т о в м ест о з ам ещ ен и я са т р ы х у д уб т с о з ад н ы н овы е м о еы т д . В чсалу е п ер о п р едл н и я с ати ч е с к о г о м ое тд а но вы й в ар и ан т п ро ст о п о л н о с ьт ю з ам ен и т с а ти ч е с к и й м о ет д р о ид е т л я . Е сл и и сп о ль з о в ат ь ко д va r Figure: TFigure; begin Figure := TRectangle.Create; Figure.Draw; // Веавыз т TRectangle.Draw. Figure.Destroy; Figure := TEllipse.Create; Figure.Draw; // Веавыз т TEllipse.Draw. Figure.Destroy; end;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
П ер о п р едл н и
128
л ав Г
5. Обеткъ ы
в Delphi
т о в з ав и си м о ст и о т от г , к а я ф и р гу а с о з ад е с т я , п р ям огу л ь н и к ( T R ect an gle) и л и эл и п с ( T E llip se ) , в ы з ы в а ю ст я раз н ы е м оетд ы лд я и х п р о р и с о в к и , хот я с п о с б в ы з о в а оид н и то т ж е : F i gu r e . D raw;.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE к з ур г е П
а мо д те о обы ч н ы , чотб
в
П одбн м п р о ц р е уад м и ф ну к ц и я м , моетд ы м оуг т бы т ь п е р гж у н ы ат ки м о браз о м ы к лас с с оерд ж а л н ес к о л ь к о м еотд в с о нд и м и м ен ем , н о с р а з л и ч ным и сп и ск ам и п а р м е рт о в (р аз ли ч н ы е с и г н р а у ыт ) . П ер гжуен н ы е м о е тд ы до л ж н бы т ь о б ъ яв л ен ы с ку а з н и е м ид р е к и т в ы o ve r lo a d . Во т п р и м е р о б ъ яв л ен и я к лас с п е р гж у е н ы м и м е о т ад м и . t yp ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA TSomeClass = class procedure AMethod(I: Integer); overload; procedure AMethod(S: string); overload; procedure AMethod(D: Double); overload; end; Е сл и н е и с п о л ь з о в ат ь к л ю ч ев о е сло в о o ve r lo a d , т о к о м п и л яот р н е см ож е т п о н я ть ка о й м ое т д в ы ои тх е в ы з в а ьт , ат к к а к о н р аз ли ч ае т м ое т д ы от л ь к о п о и м ен ам . О д н а к о ес л и и с п о л ь з о в а т ь o ve r lo a d , т о к о м п и л яот р бе д у т п р о и з в о ид т ь обт р н е от л ь к п о и м ен и , н о и ч уи ыт ват ь п а р м е рт ы , к отры е до л ж н ы бы т ь раз ли ч н ы м и дл я м еотд с о ди н а к о в ы м и и м е н а м и . ин аворбл Ду
е им е н о дм т е в а м ож е т п о н а од б и ь т с я к он д м у и з к лас о в од б а в и т ь м ео т д , з а м е щ а ю щ и м о ет д с те м ж е и м е н е м , н о п р и н алдеж ащ и й п р к ед у э от г о к лас . В да н н о м ч аслу е тр е с ет б у я н е п ер о п р едл и т ь и ос н хд ы й м о е тд , а п о лн о сьт ю е г о з а м е н и ть . Е сл и п рост од б а в и т ь ат к о й м ое т д в н овы й к лас , т о к о м п и л яот р в ы асд т п р еу д ж е дн и е о от м чт о н о в ы й м ое т д ск ры в ае т м ео т д баз о в г о к лас а с те м ж е и м е н е м . Д л я сутр а н е н и э от й о ш и б к и в н о в м м о е тд е к ау ж и т е ид р е к и т в у rein troduce. t yp e Tl = c l a s s procedure Test(I: Integer); overload; virtual; end,T2 = class(Tl) procedure Test(S: string); reintroduce; overload; end; т в ы з ы в аь т с я р аз л и ч н ы е м ео т ы д . В ю с ул е д щ е м к од е у д уб
И н о гд
S o m e O b je c t : = Т 2 . C r e a t e ; S o m e O b j e c t . T e s t ( ' H e l l o ! ' ) ; S o m e O b j e c t . T e s t ( 7 ) ;
ле т аз Ук
/ / в ы з ы в а е тс / / в ы з ы в а е тс
ы а
, о в
й о , я
я T 2. T e st я T l. T est
ь Self х м ао д ет х к лас а о дп с у т н а н еяв н а я п ер м ен н а я se lf, п р есдатв ляю щ а я соб й к у а з е лт ь н а от э к з е м п л я р о б ъ ека т , к отры й бы л и с п о л ь з о в а н п р и да н н о м вы з ов е э от г о м о е ат д . П е р м е н н а я s e l f п ерадст я о м д те у к о м п и л я от р м в к ач есвт е с к р ы от г о п а р м ета , н а п р и м е р : function TCollection.Add: TCollectionltem; begin Result := FItemClass.Create(Self); end; дг е ф ун к ц и я Add с о з да е т о бъ ек т ти п а T C o l l e c t i o n l t e m дл я к л а с а , н а к о т р ы й п р о и с о х ди т с ы лк а в п ол е F I t e m C la ss и к о т р ы й в с е гд а я в л я е тс я н а с л е дн и к о м T C o l l e c t i o n l t e m . Н а п р и м е р , в к о ад х zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ
В о в се
л ас К ы
129
va r M yC o lle c t io n : T C o llect io n , M yC o llect io n .Ad d п ер м ен н а я M yC o llec t io n п ерадст я в м о ет
в о йс Ст
д T C o l l e c t i o n l t e m . C r e a t e .zyxwvutsrqponm
а В о сн о в и к уо д
а е лт д
е св о й ст
, соердж ащ емс у й р еал и з ац и
э л е м н ат м и , св едн и свт о Val лд я з ак р ы от н е о б и хд м о вы п олн и т
в л еж а
т п р о м е ж о т чу н ы е м о е ыт д , о б ес п еч и в аю щ и я в к лас е , та к и м о бр аз о м и з бав ля я к о н еч н о г и к лас . П о о тн о ш е н и ю к к о м п о н е н ат м с в о й свт я о к о тр ы х о тб р а ж ю с т я в и н с п е к от р е о б ъ е к от в й п ер м ен н о й FVal в со з адн н ы й р ан е е к лас ь ю с лу е д щ и е д е й с вт и я .
е о д су т п к да н н ы м о п о л ь з о в а е тл я о т а я в л ю ст я етм и . Д о б ав и м свой с TF orml, лд я чег о
• о Ст з а д ь п р и елноиж е ит п а VCLForm.Application. • Д л я к лас а TFormq в з ак р ы от м и н ет р ф й с е ( p r i va t e ) од б ав и т ь ю с лу е д щ е е объ яв л ен и е : F Val: I n t e ge r ; . • В о тк р ы то м и н те р ф е й с е ( p u b l i c ) в ес т и с л е дю у щ и е к о ды : p r o p e r t y Va l : I n t e ge r ; . • Щ ел к н ту ь п рав о й к н о п к о й м ы ш и н а оп и сан и и к лас а и в п о яв и в ш ем с я к о н те к сн т о м м ен ю в ы бр ат ь п ну к т Complete class at cursor (З а к о н ч и т ь р еал и з ац и ю к лас ) и л и н аж т ь к о м би н ац и ю к лав и ш . • Delphi авотм аи ч еск и з ак о н ч и т з а ва с н а п и с а н и е к о дв . В резльату е е д уб т по ч л еу н п р е сд а т в л е н н ы й н иж е л и с ит н г . t yp ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA TForml = class(TForm) private { Private declarations } FVal: Integer; procedure SetVal(const Value: Integer); public { Public declarations } property Val: Integer read FVal write SetVal; end; var Forml: TForml; implementation {$R *.dfm} procedure TForml.SetVal(const Value: Integer); begin FVal := Value; end; т з ак о н ч ен о с о з ад н и е с в о й св т а va l, ч т о вы раж сет я в со з ад В э о т м л и с ит н г е е д уб н и и од п о л н и е т л ь н о й п р о ц у ед ы Set Val и до бав лен и и к свой вст у к л ю ч ев ы х сло в r e a d и wr i t e , з а к о тр ы м и м оуг т с л ое д в а т ь и м ен а ф ну к ц и й и л и п о лей . В н а ш е м п р о с ет й ш е м ч аслу е с п ом щ ь ю с в о й св т а Val м о ж н о н а п р ям у ю с ч и ат ь з н ач ен и е з а к р ы от г о п о л я FVal и л и з ап и сат ь в н ег о з н а ч е н и е ч ер з п р о ц у ед у Set Val. Co св о й свто м м ож н о о б р а щ аь т с я к а к с обы ч н о й п ер м ен н о й , и п р и п о п ы кт е п ри свои т ь с в о й вс т у Val н ек о т р о е з н ач ен и е в ы з ы в а се т я п р о ц уе д а SetVal, п р едн а з н а ч ен н а я лд я и з м е н е н и я з н ач ен и я п ол я F Val. Дл я с ч и ыт в ан и я а кт ж е м ож н о с о з а тд ь ф ну к ц и ю . Тодг а о б ъ яв л е н и е с в о й св т а м ож е т в ы г л е ят д ь ат к : property Val: Integer read GetVal write SetVal;zyxwvutsrqponmlkjihgfedcbaZY
130
л ав Г
5. Обеткъ ы
в Delphi
и п о сл е а в от м а ит ч е с к о г о з ав ер ш ен и фн у к ц и и и з а го т в к а лд я н е е в р а з е л д л д я п о лч у е н и я з н ач ен и я п о л я н а ч и н а е ст з н ач ен и я в п о л е н а ч и н а е ст я с п р ефи к с с в о й с вт а , т о о б яз аетл ь н о п р и ед р ж и в а й е т с Ф н цк у и а пр у дцоер
я дл я н ечи улпо а дл я зпиас
Вс
я э т а ет н х о л г и я о п о л ь з о в а е тл ек т а и о б е с п е ч и в а ю щ и ги я п о з в о л я е т з ам ещ ат фи з м п о в едн и я о б ъ ек отв П р и о б ъ е к нт о - о р и е н ит р о в а н н о п л ио х м си т л е м п ро г ам и ро в ан и я в р ем н е м и з м е н и ть с я соб й с а т н ад р н т ы й и н ет р ф й к о н еч н о г
т ек б ъ О
я з н еч а и и знечиа
я р еал и з ац и е р еали з ац и
и д о п о л н и ет л ь н
о п о я в ст я о б ъ яв л ен и е е вн и м ан и е , ч т о ф ну к ц и я я с п р ефи к с а G et, а п роц уед а дл я з а п и с и а Set . Е сл и т е д уб е ч вн р у ю п и сат ь к о д дл я ь э от г о п р ав и ла . . О бриат
я пло я в пло
я ер ч з в йо т с е — с писфкер
и ме т дв а о сн о в н ы х п р е и м щ у е с вт а я н ек и й и н те р ф й с , п о л н о сьт й к о н рт о л ь з а п о д ус т м к о б ъ еку т ь м о де т ы в п р о и з в о нд ы х к лас х . м по д х е п р ям о й , п о ск ль к у а ел т д . П репд о чит ель н е е р або т ь с о б ъ ека т , ск р ы в аю щ и й
о с н и ч та е а Set.
я с и п ф кс е р
. В о- п ервы х ю ск р ы в аю щ и . В о- оврты х , ч т о о бесп еч и в ае доуст
п к п о ля и р еал и з ац и с о с в о й с вт а м и е г о к о н к р ен т у
, о н й р еали з ац и , да н н а
а Get,
а с о з ад е
т дл ю объ
я -
я ет н х о л т п оли м ор
м о б ъ ек т и о б ъ ек т , п р есдатв л яю щ и м ю р еали з ац и ю
а с ч и а т ес а м о уг
-
я т с о и .zyxwvutsrqp
ы Ка н о с ит гр а м и с т ния
к жу , к о т р ы , та к и
е го в р и л о с е м оуг у вс е о с н о в н ы е к а к н а с л е од в а н и е
и н е л в я бъ О
е и синоазд
ь ран е т с оерд ж а т
, объект ь да н н ы е в о з м о ж н о ст , и н к а п слуяц и
е от ке бъ
ы (э к з ем п л яр ы к лас е и код . О бъек т и о б ъ е к нт о - о р и е н ит р о в а н н о г я и п о л и м о р ф и з м
) п рсаедвтляю ы Delphi п реодсатв ляю
б е тО к ъ ы
й щс у т п ро
-
о п ро г ам и ро в а
-
.
а
т о б ъ яв и т ь к лас д е т м к а к с о з а дт ь о б ъ ек т , есулд т е д бу т с о з ад н . В Delphi э т о деласт я с п ом щ ь ю к л ю ч ев о г я к лас о в п о м е щ а ю ст я в разед л о б ъ яв л ен и я ти п о в л м уо д type TFooObject = class; Т оль к о п осл е о б ъ яв л ен и я к лас а можн о дел а т ь о б ъ яв л ен и в раз едл е va r . va r F o o O bjec t : TF ooObject; П о л н о с ьт ю о б ъ ек т с о з а ед т я с п ом щ ь ю вы з ов а о нд о г ю вс т у щ е г о к лас . К о н скртоу р в о е чт а т з а с о з ад н и е о б ъ ека т п ам ят и и н е о б их д м у ю и н и ц и али з ац и ю п о л е й . К о н срткуо н о и п р и в о ид т э о т т о б ъ ек т в с о т ян и е , н ео бихд м о е лд я ван и я . К ажыд й к лас с с ое р д ж и т п о к рай н е й м ер о ид н к о н с р к т уо м ож е т и м ет ь р аз ли ч н о е к о л и ч в ес т о п а р м еот в р аз н о г о ит п о б ъ а ек т . Н и ж е расмрит всае я о лт ь к о п р о с е йт ш и й к о н к р ст у х яз ы к о Н е о б и хд м о з а п о м н и ть , чот , в олти ч и е о т иг р ду п ри м е р C + + , к о н срктоу ы в яз ы к е D elphi н е в ы з ы в аю ст к а ж о гд о о б ъ ек т а с п ом щ ь ю вы з ов а е г о к о н с рк т о у а иод вх м и са т . С и н та к с и с вы з ов а к о н с рк т о у а с л ю е уд щ и й . FooObject := TFooObject.Create; О б р аи т е вн и м ан и е н а о с б ен н о с т ь вы з ов а к о н с р к т уо м ощ ь ю с ы лк и н а к лас , а н е н а э к з е м п л я р к лас а (в олти ч и П ер
о б ъ ек лен и
т соб
, н а о с н о в е к отрог о э от т о сло в а c l a s s . О б ъ яв я и л и п ро г ам ы .zyxwvutsrqp е п ер м ен н ы
х э от г
о ит п
а
о и з к о н с р тк у о , а актж р н е то л ь к е г о ад л ь н е й ш е г
в с о вт е е з а в ы ед л н и е о с о з а де т о б ъ ек т , о и сп оль з о р C r e a t e , к о тр ы й а — в з ави с м ост и о т ит п а р C r e a t e бе з п ар м етов . в п р о гр а м и р о в а н и я , н а я а в от м а и ч е с к и . С о з адн и е т в о б яз ан н о с т и п р о г ам -
а — о н в ы з ы в аест е о т иг р уд
х м ео т д в
я с по , к о
-
- zyxwvu
131
от р ы
е в ы з ы в а ю ст я с п ом ощ ь ю с ы лк и н а о бъ ек)т . И н а ч е п рост р о б ъ ек т а F ooO bject в м о ен т вы з ов а к о н с рк т о у а ещ е н е окр т у а к лас а TF ooObject саит ч е н и н о иа д х с т я в п а м я ти . О а н е к ег о э к з е м п л я р у , п о э тм у ат к о й вы з о в в п о лн е к о р ек тн лд я с о з а д н и я э к з ем п ляр а к лас а ч аст о н аз ы в аю т с о з ад н и е м о б ъ е к ат П р и с о з ад н и и о б ъ ек т а с п ом щ ь ю к о н с к р от у а к о м п и л я то п о л я о б ъ ек т а у д уб т и н и ц и али з и рован ы . Вс е ч и сло в ы е п о л я у д уб п ри м у т з н а ч ен и е n i l , а срт о к и у д уб т п ыс т у . п ля
П р и н а и з од с е пл о й а тк еъ бо а скор т и бду у
и н е о ж т ич н У
и тк еъ бо . ыволисЧ т пы тс у
е от ке бъ
о н ел ь з с о з да н н о нт о с и ст . В ы з о
я — вед ь э к з е м . Н о ко д к о н с т я к к лас у в к о н к ср о т у
, а
. р г а р н и т ре у т о б н л уе н ы
, ч т о вс е , кауз елт и
а с щ омп ь ю ро тк ур ноткс а с и т п о д рз в я и н ц и л за я ве с х е лпо я ду у б т н е ыл б о у , ле тзак у и и у пм р т нз е ч и а е n il, .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED
а
П о ок н ч ан и и и сп оль з ован и я э к з ем п л яр а о б ъ ек т а е с ул д т о с в о б ид т ь в ы е лд н у ю лд я н е г о п а м я т ь с п омощ ь ю м ео т д а F r e e . Э от т м ео т д сн ач л а п р о в ер яет , н е р ав е н л и э к з ем п ля р о б ъ ек т а з н ач ен и ю n i l , и з ает м в ы з ы в ае т д е с тр к у о р о б ъ ек т а — м оет д D est ro y. Д ей свт и е е с дк р о т у а о б р а нт о ед й с в т и ю к о н с ртк у о а , .т е . о н осв б жаед т е ед й с в т и я п о о с в о б ж ед н и ю з ва х ч е н ы х в с ю в ы е лд н у ю п ам ят ь и в ы п о л н яе т иг р ду к о н с кр т о у м о б ъ ек т а р ес у о в . С и н ат к с и с вы з ов а м о е дт а F r e e п р о ст .zyxwvutsrqponm FooObject.Free; О б ри а т е вн и м ан и е , ч от , в олти ч и е о т вы з ов а к о н с р тк у о а , в ы з о в е к ср о д т у а вы п о л н я ес т я с п ом щ ь ю с ы лк и н а э к з ем п ляр , а н е н а ти п . К р о м е э от г , сатр й етс ь н е и сп о ль з о в ат ь н е п о с р е дс в т е н н ы й вы з о в м о д ет а D est ro y. Бо ле е б ез о п асн о и к о р е к нт о в ы з в ат ь м о ет д F r e e , к о тр ы й от л ь к о п о сл е п р о в ер к и н али ч и я о б ъ ек т а в ы з ы в ае т м о ет д D est r o y лд я р а з ршу ен и я о б ъ ека т . В ы з о в м о д ет а D e st r o y дл я н ещсу есвюту щ ег о о бъ ек т а м о ж е т и м ет ь н е п р е с д к а з е му ы е п о с л е дв т и я . Н ап р и м ер , в я з ы к е C + + дексроту р э к з ем п л яр а с а ти ч е с к и с о з да н н о г о о б ъ ек т а вы з ы в а се т я а в от м а ит ч е с к и , кодг а эот т э к з е м п л я р п о к и ад е т о бласт ь в и д м о с ит . В часлу е ид н а м и ч е с к о г о с о з да н и я э к з ем п л яр а (с п о м щ ь ю о п е р ао т а new) о бъ ек т н е о иб д х м о н у и ч отж и т ь с а м о с т яе л ь н о , и сп о ль з у я о п е р ао т р d e l e t e . О дн а к о в Delphi вс е э к з е м п л я р ы о б ъ ек т а — ди н а м и ч е с к и е , и п р о г ам и с т од л ж е н а лд я т у ь и х сам . Н еоибдх м о н у и ч о тж а ь в се , ч т о бы л о с о з ад н о в п ро г ам е . И с к л ю ч ен и е и з э от г о п р ав и л а с о а тв л яю т о б ъ ек ыт , п р и н алд еж ащ и е ги р д у м о б ъ е к а тм . Э от т ит п о б ъ е к о т в н у и ч о т ж а се я ав от м аи ч е с к и . Е щ е о нд и м и с к л ю ч ен и е м я в л ю ст я о б ъ ек т ы с пу р а в л яем ы м в р ем н е м жи зн и , и м ею щ и е с о б с вт е н н ы й с ч ет и к с ы ло к (н а п р и м е р , п р о и з в о дн ы е о т к лас о в T i n t e r fa c e d o b je c t и л и TComObject), к о тры е а в от м а ит ч е с к и а лд я ю у с т я п о сл е ли к в и ад ц и и п о с л ен д е й с ы лк и н а н их . Т ак ж е з а м еь т , ч т о н е т н ео бихд м о ст и в с д ег а о б ъ яв л т ь и о п и сы в ат ь к о н с р тк у о ь в с е к лас ы яз ы к а Delphi н е я в н о н а с ю л уе д т фн у к ц и о н а л ь н ы е р ы и е кс д р о т у ы . Вде в о з м о ж н о ст и баз о в г о к лас а TObject, п ри ч е м н ез ав и с и м о о т от г , куаз н о л и эт о н а с л е од в а н и е яв н о и л и н ет . Н а п р и м ер , о б ъ яв л ен и е type TFoo = class; п о л н о сь т ю э к в и в а л е н тн о о б ъ яв л ен и ю к лас а type TFoo = class(TObject);zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK
е клас
е жуст евДр ын ры
В яз ы к м р а з р еш е
132
е C + + р еали з о в ан н о д су т п к з ак р ы т
ы а к о н ц еп ц и м да н н ы
я ж р д у е св т н ы м и ф ну к ц и я
х к лас о в м г ор д у
л ав Г
о к лас
, .т е . к лас о в . В яз ы к
5. Обеткъ ы
, к о т е C + + zyxw
в Delphi
э от
т м еа х н и з D elphi н е т н э ф ек т а м ожн н о м л м уо д е аг , благо др я
м р еа л и зсет у и ат к о г о од б и ь т с я о б ъ ек т ч ем
о к л ю ч ев о г
ы и м ею у и о б е с п е ч и в а ес т
е й с р Инф т
я с п ом щ ь ю к л ю ч ев о г о сло в а , н и атк о г , п ро ст о оп и са в о б ъ ек т т п р ав о допсут а к з ак р ы т я "држу ес вт ен н о с ьт
о сло в а fr ie n d . О дн а к о п о н я ти я , ет м н е м ен е ы в о нд о м л ем у о д . О п и с а н н ы м ад н н ы м и ф ун к ц и я " в п релад х м ло яу д
о в яз ы к е е п одбн ог о е в од м дру г рд у .zyxwvutsrqponml
ы
В оз можн о те р ф е й с о в котры р ед лен и в а ет л ю н и я э то г В р ез луь ат сво е о с б о И н ет р ф й с к л и ен т ли з ац и
и н е л д рп О
, н аи б о л е , в едн н а е м о гу т бы т е к о н к р е тн о г , о н о в о с п р и н и м а е тс о и н те р ф е й с а е о б ъ ек е ли ц о . ы о п р е дл я ю т . К л а с , п оедрж и в аю щ и ю в се х е г о ф н у к ц и
е ийсе фре тн
е в аж н ы м до п о л н е н и е м к яз ы к я в D elphi 3. И н те р ф е й с о п р едл яе ь и сп оль з ован ы л д я в з а и м о д е й с тв и о и н те р ф е й с а и з в е с тн о н е от л ь к я к а к с о гл а ш е н и е о п рав и ла . В к лас е м оже т бы т ь р еали з о в ан т с ат н о в и ст я "м н о г о л и к и м " , я в л я , к а и
м о бр аз о й н ек о т р ы
й и п р о ц реуд
м м у ог й и н те р ф й с
у D elphi сатл а п о де р ж к а ин т н або р ф ун к ц и й и п р о ц е др у я п р о гр а м ы с о б ъ е к то м . О п о р а з р а б о чт и к у , н о и п о л ь з о х о б ъ яв лен и я и и сп оль з ова о н еск о ль к о и н те р ф е й с о в я к ли ен т у к а ж од г о и н те р ф е й с
т о б щ аьт с
я м ж де , такж
у соб е о б яз а
й о б ъ ек н о б ес п еч и т
, . а
т и ег о ь р еа -
.
а
П одбн о том у , к а к вс е клас ы яз ы к а D elphi п ро и сяхд т о т к лас а TObject, в с е и н те р ф й с ы (яв н о и л и н еяв н о ) — э т о п о т м к и и н ет р ф й с а iunknown. О б ъ яв и т ь и н те р фей с м ожн о ю с у л ед щ и м о браз о м : t yp ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA иксьлетидо й с й ие ф р е т н ) interfaceName = interface (р ['{GUID}'] { Со с и п к чо н е л в } end; дг е (р о д и т е л ь с к и й и н те р ф е й с ) и [' {GUID} ' ] яв л ю ст я н е о б я з а ет л ь н ы м и . К а к в и дн о , с и н атк с и с о п р едл н и я и н ет р ф й с а о ч ен ь пох ж н а с и н та к с и с о п р ед лен и я к лас . О сн о в н о е р аз ли ч и е з а к л ю ч а ест я в от м , ч т о и н те р фе й с , в олти ч и е к лас , м о ж е т бы т ь с в яз а н с гл о б а ь н ы м ну и к ал ь н ы м и ед н и т ф и к а о т р м (G U I D ), к о то р ы й с о з а д ес т я п р и н аж ит и к лав и ш и п о м ещ аест я н а м ес т о н ао х ж де н и я кр с у о а . С а м и ден ит фи к аот р з а к л ю ч а се т я в к в ар д н т ы е скобки . Э т о с в я з а н с тем , ч т о о бъ яв лен и я и н ет р ф й с о в п р о и ос я х д т в с о в те и и с о с п ец и фи к ац и е й м о е л д и к о м п о н е н тн ы х о б ъ ек т в (COM ) Microsoft. Т акж е п р и н я то , чобт ы и д е н ти ф и к а то р ы л д я и н те р ф е й с о в н ач и н али с ь с бкув ы I. Е сл и в ы п о н яли , к а к соз авд т ь к лас ы , т о о бъ яв лен и е с о б с вт е н н о г о и н те р ф й с в Delphi н е п раседвтля т о с бы х с л о ж н о с ет й . Н и ж е п р и в ед н п ри м е р о б ъ яв лен и я ин те р ф й с а , к о тр ы й р еа л и з е у т н ес к о ль к о м ое т д в . t yp e IMalloc = interface(Ilnterfае с ) [ ' {00000002- 0000- 0000- C000- 000000000046}'] function Alloc(Size: Integer): Pointer; stdcall; function Realloc(P: Pointer; Size: Integer): Pointer; stdcall; procedure Free(P: Pointer); stdcall; function GetSize(P: Pointer): Integer; stdcall; function DidAlloc(P: Pointer): Integer; stdcall; procedure HeapMinimize; stdcall; end; ќzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Ин т е й рс ф ы
-
-
о т о а -
133
И н те г р и р о в а н н а би н ац и
иц аз л ае Р
ю к лав и
я ийес рфе тн
я с р ед а р а з б окт и Delphi созаед т н овы й G U ID , есл и н аж т ь к о м ш .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK
а
П р и в е де н н ы й ниж е фр агм ен т к о д а д е м о н с т р и р уе т реали з ац и ю и н те р ф е й с о в iM allo c в клас е T F ooBar. Т у р е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA TFooBar = class(TInterfacedObject, IMalloc) ... { со м и ж р е д о е кс а л а } end; В п ер в о й р сот к е о б ъ яв л ен и я к л ас , п осл е к уа з н и я баз о в г о к лас , може т бы т ь пе р еч и с л ен о н ес к о л ь к о и н е рт ф й с о в (эт о важн о дл я реали з ац и и м н о ж е св т н о г о н а с л ое д в а н и я) . С в яз ы в ан и е нф у к ц и и и н ертфй с а с о п редл н о й фн у к ц и е й к л ас а щ о с у в е л тя с ет я к о м п и л о я т р м о а д гт , кдог а о н о б н ж а ри у в е т о м те д к лас , си нгр уат а к о рт г о сов пе а д т с с и г н р о уа т й од м т е а и н е рт ф й с а . К лас с о дл ж е н с ер о ж д а т ь с о б в те н ы е о б ъ яв л ен и я и р еали з ац и и е с в х о дм т е в и н е тр ф й с а , в п роит в н о м ч а у лс е к о м п и л оя т р вы т окто м п и л ро в ан а . а с д т ю в су о т е щ е е с о б щ ен и е о б о ш и бк е , и п рогам а н е бе д у Е сл и к лас с р еа л и з е у т н ес к о л ь к о и н ет р ф й с о в , к о тр ы е и м ею т м о е тд ы с о ди н а к о вы м и с и г н ра у т м и , т о и з беж ат ь н е о нд о з н а ч н о с т и п о з в о л яе т н аз н ач ен и е м о ае т д м п с ев до н и м о в , к а к п о к а з а н о в сю уледщ е м п р и м ер . t yp e IFoo = interface [ ''{2137BF60- AA33- 11DO- A9BF- 9A4537A42701} ' ] function Fl: Integer; end; IBar = interface ['{2137BF61- AA33- 11DO- A9BF- 9A4537A42701} ' ] function Fl: Integer; end; TFooBar = class(TInterfacedObject, IFoo, IBar) // Ни н е ч а н з а е ма д о т е м о м и пн о д в е с в function IFoo.Fl = FooFl; function IBar.Fl = BarFl; // Мд о т е ы с ий е ф р е т н а function FooFl: Integer; function BarFl: Integer; end; function TFooBar.FooFl: Integer; begin Result := 0; end; function TFooBar.BarFl: Integer; begin Result := 0; end; З е сд ь н е о б хид м о п о чд е р к н ь т у , чт о п р и о б ъ яв л ен и и к лас а м ожн о и сп о ль з о в ат ь н ес к о л ь к о и н те р ф е й с о в , дог т а к а к н а с л еод в а н и е м ож е т п р о и ос х д т ь от л ь к о о т о нд о г о и сло в ам и , и сп оль з у я от л ь к о н а с л е од в а н и е к лас о в , н ел ь з я р еа л и з о в а т ь к лас . И н ы м м н о ж е с вт н н о е н а с л е од в а н и е , и л и н аслеодв ан и е о т н ес к о л ь к и х к лас о в , ч т о в н ек о т р ы х ч ася л у х п о з в о л яе т е лс а д т ь п р о г ам у бо ле е к о м п а к тн о й и л о ги ч н о й . Н о нетх о л о ги я м н о ж е с вт е н н о г о н а с л е од в а н и я од в л ь н о слож н о в о с п р и н и м а е ст я р а з р а б о чт и к а м и и обы ч н о р е кд о р е а л и з се т у я в п р о г ам ах , отх я ест ь и ачдну ы е п р и м ер ы . П о э тм у в Delphi н е р еали з о в ан а н е хт о л г и я м н о ж е с вт н н о г о н а с л е од в а н и я в ч и ос т м в и ед , н о е е м ож н о и м и т ро в ат ь с п ом щ ь ю и н ет р ф й с о в .
734zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA л ав Г 5. Обеткъ ы
в Delphi
и н а во д е с л а Н
е ийесо рфе тн
в
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE
, н аюслуед т вс е модте ы св о и х п р е д ш е с тв е н н и к о в . О дн а И н те р ф е й с ы , к а к и к л а с ы к о в о л ит ч и е о т к лас о в , и н те р фе й с ы н е реали зю у т м е о т ыд , .т е . н е соедрж а т н ео б х ди м ы й код , о п р едляю щ и й ф ну к ц и о н и р о в а н и е ма о д е т . К одг а и н те р ф й с н ае с л у д т , ч т о э т и модет ы у д уб т п е р ад н ы в клас с лд я и х н ек о т р ы е м о ые т д , т о о н гар н ит реу р еали з ац и . Е сл и р о ид е т л ь с к и й и н ет р ф й с н е указ н , т о р о ди етл ь с к и м и н ет р ф й с о м е д бу т и н ет р ф й с I l n t e r f a c e , к о тр ы й оп и са н в л м уо д е System. Д л я п лафто р м ы Win32 в эот м л умод е о б ъ яв л ен о рт и моаедт : Q uery- I n terface, _AddRef и _ R elea se. О дн а к о в п лафто р м е .N ET эит х м еотд в н ет , и и х н е н ад о р еали з о в ы в аьт . й е ф Ир н т с I ln t e r fa c e ен лтиавкэ м р о ф т а пл ы н п иж е о р л й ы б о нч lUnknown пс тниремя я пр и к тоб азр
н й се ф р и н т о с т е зуьлпиос
я й е ифр н т е пм ар го
у lUnknown. лД я нивымсзае х о т с iln t e r fa c e , а ийефрн т с , зиымсв а х о т м про ф тал ы Win32.
Дл
я и д е н ти ф и к а ц и и и н те р ф е й с о в и с п о л ь з се т у я гл о б а ь н ы й ну и к а л ь н ы й и д е н ит р (G U ID ), п р есдатв ляю щ и й рс т о к у , о гр ан и ч ен н у ю ф и гр у н ы м и ск о бк ам и . О бъ е G U I D одлж н о и м ет ь в и д [' {хх } ' ] , дг е х — ш еснт ацд аетр и ч н ы е ц и фр ы . сп ец и аль н ы е ти п ы TG U ID И P G U ID В млоуд е syst em , к о т Д л я G U I D о бъ яв лен ы ры е м о ж н о и сп о ль з о в ат ь дл я уп р ав л ен и я G U I D и к о тр ы е и м ею т с юл е у д щ и й в и д . t yp ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA PGUID = - ^TGUID; TGUID = packed record Dl: Longword; D2: Word; D3: Word; D4: array[0..7] of Byte; end; ф и к а от яв л ен и
и в тр е к Д
-
-
а implements Д и р е к ит в а im plem en ts в п ерв ы е бы л а в ен д а в Delphi 4. О н ь р еал и з ац и ю м о е дт в и н ет р ф й с а и г р уд м к л ас м и л и и н ет р ф й с а м я ид р е к и т в а в о б ъ яв л ен и im plem en ts двгсе а к у а з ы в а ес т я к а к п о с л енд я с а и л и и н етр ф й са . t yp e TSomeClass = class(TInterfacedObject, IFoo)
а п о з в о л яе
т де л г и р о . Д и р ек ит в
в ат
и с в о й свт
а а к лас
-
function GetFoo: TFoo; property Foo: TFoo read GetFoo implements IFoo;
м ео т ы д ил сп и со к лас зю у щ и ци п о лн ен и
Ин т е й рс ф ы
end; В п р и в едн н о м п р и м ер е и сп о ль з о в ан и е ид р е к и т в ы im plem en ts го в р и т о то м , чт о , реали зюу щ и е и н ет р ф й с I F OO, е услд т и ск ат ь в св о й свт е F oo. Т и п с в о й св т а одл ж е н бы т ь к лас о м , соедрж ащ и м м ое т д ы I F oo, и н етр ф й с IF oo и ег о п о т м к о в . В ди р ек ит в е im plem en ts м о ж н о и сп о ль з о в ат ь н е о ди н , а ц елы й к и н етр ф й с о в (э лем н т ы сп и ск а од л ж н ы е ло ь д я т с я з а п я ты м и ) . В так о м ч а с лу е , и сп о ль зему ы й дл я п р есдатв л ен и я с в о й с вт а , одлж е н с о е др ж а т ь м ео т ы д , р еал и е вс е п ри в едн ы е в с п и с к е и н ет р ф й с ы . Д и р е к ит в а im plem en ts п о з в о ляе т в ы п о л н ят ь б е с к о н ф л и к нт у ю а гр е а ц и ю . раге А я — э т о к о н ц еп ц и я С ОМ , овтеч аю щ а я з а к о м б и н ац и ю н ес к о л ь к и х к лас о в лд я вы я он д о й з а чд и . Догру е н ем а л о в а ж н о е п р е и м щ у е с вт о п р и м ен ен и я ид р е к и т в ы zyxwvu
135
im plem en ts з ак лю ч асет я в том , чт о он м ы х лд я р е а л и з а ц и и и н е тр ф й с а р ес у о аль н о . П р едп о л ж и м , чт о в р еа л и з а ц и м ят и лд я р х а н е н и я р а с то в г о и з о б р аж ен и я то ч н о р е дк о . В ря д л и м ожн о с ч и ат ь 1 М Б п а м я ти , к о т р ы й е д бу т и с п о л ь з о в а ть с im plem en ts п о з в о л яе т р еа л и з о в а т ь и н ет р ф й р о г о е д бу т с о з адв ьт с я от л ь к о п о п р ям о
и н о за в с И ь п л
е йс иео фре тн
а п о з в о л яе в д о отг и н ек о т р о г , н э ф е к ти в н ы я с у з ап р о с
т о лт ж и т ь и сп о ль з о в ан и о м о е н ат , кодг о и н ет р ф й с о э о т т и н ет р ф й м р еш ен и ли ш ь в р ем я о в о е дл т ь н о м к лас е у п о л ь з о в а етл я
е н е о б ихд а о н и п о р т е юб у с т я ре а н е о б и дх м 1 М Б п а с п р и м е н я е тс я од с а т е п о с то я н н о в ы ед л я т ь т в р ем ен и . Д и р е к ти в а , э к з е м п л я р кот .zyxwvutsrqponmlkjihgfedcb
в
П р и и сп о ль з о в ан и и п ер м ен н ы х ит п а и н те р ф е й с , в п р и л о ж ен и я х е ус л д т п ом н и т ь о н ес к о л ь к и х в аж н ы х п р ав и лах . В о- п ервы х , н е з аб ы в ай ет , ч т о и н те р ф й с — э т о ит п ад н н ы х с уп р а в л яем ы м в р ем н е м жи зн и . А э т о о з н ач ет , чт о о н вседг а и н и ц и али з и ру с ет я з н а ч е н и е м n i l , обаелд т с ч ет и к о м с ы ло к и а в от м аи ч е с к и н у и ч о т ж а ес т я пр и вы од х е з а п р е дл ы о бласт и в и д м о с ит . Во т н еб о л ь ш о й п р и м ер , и л ю срти рюу щ и й п у р а в л ен и е в р ем н е м жи зн и э к з ем п л яр а и н ет р ф й с а . va rzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA I: ISomelnterface; beginzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA стеуризилаицини я зе и н е ч а н м nil 111 I := FunctionReturningAnlnterface; // Си ч т е ч к со л ы с к // у стеавичилев я н а 1. I.SomeFunc; // Си ч т е ч к со л ы с к с у теашьнем я н а 1. // Кд г о а зи н е ч а н е ск и ч т е ч а се н а т т ры н в а м О , // ок е ъ б т I бе д у т к с е а читамотв и ун е ж о т ч и н , end; К о мт у ж е в с д ег а н жу о п о м н и ть , чт о п ер м ен н ы е ит п а и н те р ф й с с о в м е с ит м ы п о п р и с в о ен и ю с к лас м и , р еали з юу щ и м и и н те р ф й с ы . В п р и в едн н о м н иж е п р и м ер е к о р е к нт о и с п о л ь з ес т у я о б ъ яв л ен н ы й ран е е к лас с TFooBar. procedure Test(FB: TFooBar) var F: IFoo; begin F := FB; // К онткер о , пк ь л о к с о у FB п еавижред о т IFoo. Т ак ж е м ожн о о мт е и ьт , чт о дл я п е р м е н н о й ти п а и н ет р ф й с м ож е т бы т ь и сп оль з о в а н о п е р аот р п р ео б р аз о в ан и я ит п о в a s к а к в ы з о в о м д те а Q u e r yln t e r fa c e , в о з в р а щ а ю щ ег о ра д е с го р д у й п ер м ен н о й ит п а и н те р ф й с . кУаз н н о е п рав и л о м ожн о п ро и л ю с рт и р о в а ьт . va r FB: TFooBar; F: IFoo; В : IBar; begin FB := TFooBar.Create F := FB; // До м и т с у п о , та к ка к FB п еавижред о т IFoo. В := F as IBar; // Во з ы в фи ц к н у и F.Querylnterface дл я IBar. т с ген ер и р о в а н о с о вте Е сл и з ап р о ш ен н ы й и н ет р ф й с н е п о ед р ж и в а е с т я , т о е д уб ю в с ту щ е е и с к лю ч ен и е .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
136
л ав Г
5. Обеткъ ы
в Delphi
Ре м зю
е
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
В да н н о й лга в е к р а кт о п ро г ам и ро в ан и я и сп ос б а к лас а и с м ортен ы р ук т с де н а и н фо р м а ц и я о б и н ет р ф й с а л о ги к и п р о г ам ы . В да л ь н ей ш е э л е м н от в к лас а и п о к а з а н ы
ынтлоьр Ко
е всорп 1. Н аз о в и т В 2. Д ай т 3. Чт 4. Чт 5. Д л 6. К а к и 7. Чт 8. К аку 9. Чт 10. К а
о н К т р о л ьн е ы
х п ри н ц и п я п р е и м щ у е св т е п о н я ти я м "к л а с е п о ле ? К а к п о л е с в яз ан е м о е тд ? н ж ун ы п е р гз у к а и п ер о п редл н и и ви д м ост и дл я п о л е е к о н с ртк у о р и дескртоу ь ви д м ост и од л ж н е и н ет р ф й с ? К а к в ы п о н и м ает ю и н ет р ф й с о в с о з адт
во пр о с ы
е п о н я ти и с п ом ощ ь : п о л я , м оетд
я о б ъ е к тн о - о р и е н ти р о в а н н о г ю к лас о в и о б ъ е к от в . Р а с ы и св о й свта . Т ак ж е п ри ве и дл я б о л е е ги б к о г о п о с тр о е н и ы с щ у е с вт н н ы е еа д т л и р еали з ац и ы и х и сп о ль з о в ан и я .
о я и
ы
е тр и о с н о в н ы ч е м з ак лю ч аю ст е о п р е дл н и о так о о ат к о я ч ег о е о б л ас т о так о ю о бласт о так о к с п о м щ ь
о п и сан ы осн овн ы ы и х р еал и з ац и э л ем н т ы к лас х и и х и сп о ль з о в ан и м у д уб т р аск р ы т к о н к р е нт ы е п р и м ер
а о б ъ ек нт о - о р и ен ит р о в а н н о г а и сп о ль з о в ан и " и "о б ъ е к т" о с о св о й свто м
о п р о е к ит р о в а н и я я эит . ?
е м ое т д в й и м оетд в р аз р еш ен ? ы и м ет ь к о н с рт к у о е ег о о с н о в н о ь м н о ж е с вт н н о
х п ри н ц и п ов
. ?
?zyxwvutsrqponmlkjihgfedcbaZYXW ы в к лас е ? р и дескртоу е н аз н ач ен и е е н а с л е од в а н и е
? ? ?zyxwvutsrqponmlk
137
в а Гл
а 6
з оа Б в ы е с ла к Delphi
ы язы к
а
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
В эйто
гав.е л ..
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
•
К лас
с System.Object
•
К лас
с TControl
•
К лас
с TWinControl
• •
К лас
с TF orm
Р ез ю м
•
К о н рт о л ь н ы
е е воп рос
ы
ж ре д с и е мт
э от м и ро в ан и н а н о с яа т д х м ож е с о з а дв ь т с
л Ка с
е ч е м п е р й ит к р а с м о рт е н и ю о ас л т ь н ы х к о м п о н е н то в и в о з м о ж н о сет ы Delphi 8, н еобидх м о п о з н а к о м и ьт с я с баз о в й и ер аи х е й с и с ет м ы , и х н аи б о ле е в аж н ы м и с в о й свт а м и и м е о т ад м и . Т а к к а к сред я Delphi соз аед т п ро г ам ы , рабо тю щ и е н а п л а ф то р м е .N ET, т и сп о ль з о в ат ь осн овн ы е к лас ы п л а ф то р м ы .N ET. Би бли оетк и с э ит м я в к а лто г е ...\ WrN DOWS\ Microsoft.N ET\ Framework\ vl.1.4322 (н о м е т бы т ь рдг о у й ) . И к о р н ев ы м к лас о м , н а о сн о в е к о тр г о с о з ад н ы и я к лас ы , яв л ест я к лас с Syst em .O bject .
й й а п ро г ам о он и к лас м р у д у б
к лас о
в -
а од л ж
и
верси т в ам
и и
с System.Object
В Delphi 8 вс е ти п ы ад н н ы х я в л я ю ст я п р о и з в о нд ы м и о т е ид н о г о о б щ ег о к лас а System .object, орыкт й оеял пдер т щ бо е е н е п д и ов е дл я вес х и тп о в дна ы х в сдер е .NET. Н е т н е о б и хд м о с т и яв н о к уа з ы в а т ь к лас с Syst em .O bject в к ач есвт е баз о в г о — эт о п о рд а з м у ев а с т я сам о соб й . О дн а к о н и чт о н е м еш а е т е лс а д т ь э то , я в н о к уа з в баз о в ы й к лас с Syst em .O bject .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH TClassl = class(TObject) private protected public end; З де с ь в ы в и д и те , ч т о в к а ч е с тв е баз овог о к лас а ку а з а н к лас с T O bjec t , а н е S yst e m . o b je c t . Н о э т о онд о и т о ж е . И чобт ы би е д у ь т с я в э от м , п о см орти т е л м уо д ь Bo r la n d . Syst em .D elp h i . p a s — в ы виу д т е а т м ю с лу е д щ и е о б ъ яв л ен и я ти п о в : t yp e TObject = System.Object;
T C u st o m At t r ibu t e = S yst e m . At t r i b u t e ; E xc e p t io n = S yst e m . E xc e p t io n ; TGUID = Syst em . G u id; З едс
ь и к .
п T O bject в ед н л д я с орха н е н и я с о в м е с ит м о с т и с п ро г ам ам и , н а п и я D elphi 7 и боле е ран н и х в ер с и й . Ка и в лю бо м г ор д у м к лас е , в к лас е Syst e m . O bje c t щсу евт т св о й н а б о р ч л ен о в О б р аи т е вн и м ан и е , ч т о н ек о тр ы е ч л ен ы о п р е дл н ы к а к в и р а у тл ь н ы е и до л ж н ы бы т ь з ам ещ ен ы в о п р едл н и и п р о и з в о дн о г о к лас :zyxwvutsrqponmlkjihgfed // Сыма й винхре й ксал с в иихрае и косал в .NET: System.Object namespace System { public class Object { public Object(); public virtual Boolean Equals (Object obj); public virtual Int32 GetHashCode(): public Type GetTypeO: public virtual String ToString(); protected virtual void Finalize(): protected Object MemberwiseClone();
сан н ы м
ит лд
Н аз н ач ен и ц и б ла Т
е к а ж о гд а 6.1. Гы нва л
о т Ме
о и з моедт е меот д
GetHashCode(; GetType()
ToStringf)
Finalize() MemberwiseClone()
о в табл
.zyxwvutsrqponmlkjihgfedcba
. 6.1 н и ж е
а S ystem.ObjectzyxwvutsrqponmlkjihgfedcbaZYXWVUTSR
ы ас л к
ине ч анз Н д
E q u a lsQ
л ас К
в оп и сан
е
П о ум о ланчи с р ав н и ае м ы в о периатвно п р е д н аз ч ру с н т ы к х м о ет д нео б хдим э отг о м оетда В о з в р ща еа э з ке м п ля М ое т и з котр г в ы п о лн е и
ю эот т м оет д во звращ ае е с ущ н о с т и уакзы в аю й пам ият . По э тм у дан ы н токль о д л я с р авне и . Дл я но рм ноаль й р аб о т о пер о пред лиьт , т о нео б хди м о п е р о п р е д ли т т ц е ло и ч с ле н о р отек б ъ
д во звращ ае
т е тк о б ъ о м о ет д б ы л в ы з в ан я (RTTI), котры
В о з в р ащ ае т с и м в о н ль и м я _п р о с т р а н с т в а _и м е н . и м я _к л а с с о пр ед л н о е им "я ) и м ен , во зврща сеат я п ер о п едл н дл я а ет к о б ъ (в фо рм та е сО н о в о ет к б ъ о Эт т м оет з ан и м ае м у н е ме ож с о з д ан и р е ла и з о в та
е з н а че и о тип
а дан о г
е н за е ч и м дан о г
т б ыт я по лн
ь пер о пред л н й копи ь в клса
, п о лн с ьт о м оет
и оаетк б ъ е п ок дер ж
й р еали з ц и
и
, н о н е х ит п о в э от
суртнкы
т
т п ер о п р ед л ни е д GetHashCode () е о к н р е ты й то
д ииацк дентф н в о вс е
й п р едус м орте
н д л м дан о г
а ь
х ит п о в
ю о п и с ы ваю щ и . Эт
о м оетд , пер
, когд
, ии цдентрфую щ е
и ти п опредл . Есл токль о и м я клас а пр едс автлени я о р и м н ф ац и "им -я еничз"а ) е э от г
о тогда е о б лса т о и с охдн
й
а
е п р е д с авт л е н и
о клас а
д предназ ч ю ооетк б ъ
т Tr u e октль т н а о дн у и т у ж й м оет д в ег я ооетк б ъ в с с ы лонч ы с оаметк б ъ и . с лЕ и про и с хди ь и м оет
т оетк б ъ и вр ем ен
х а те к о б ъ
а — о с во б ди т я с о здани я ещ о ти п а в о п ериатвно . Есл и нео б хди м в о периатвно у ией снртф
м э отг е о дно
ь вс о оаетк б ъ
и х
е оетк б ъ а в фо р м ат а (э т о назывсет н вн е когка- илб . Эот т м оет д м е о ж и о врнеут
д удале н и е
,
е я "по лн сьт о про с тан в т быт
е р е с ур с ы
ю а ь м с о с тяни , з аняыт
и е
й с с ылк й п ам ият о реали зо ват
и н а о б лас ьт , . Эот т м еот д ь к п о де р ж у й пам ият , т о над о а i c i o n e a b l ezyxwvutsrqponmlkjih
System.Object zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 139
В Delphi вс е э т и моетд ы п е р о п р е дл н ы и н ап и сан ы в с о в т ес и и с с и н ат к с и со м Delphi. В даль н ей ш е м е д бу м с ч и аьт , ч т о вс е клас ы яз ы к а D elphi яв л ю ст я п ро и з в о нд ы м и о т баз о в г о к лас а TObject, а слеодв атль н о , ав от м аит ч ес к и н ю а у с л ед т в с е е г о м о еы т д . В резльаут е лю бо й о б ъ ек т с п о с б ен , н а п р и м е р , с о б щ и т ь св о е и м я , ит п и даж е к уа з ьт , яв л ест я л и о н п р о и з в о нд ы м о т отг о и л и и н о г о к лас . П одбн о е п о с рт е н и е и с п о л ь з ес ту я в о м н о ги х с о в р ем н н ы х яз ы к а х п р о гр а м и р о в а н и я , ат к и м о бр аз о м п р о г ам и ст у н е н жун о б е с п о к и ьт с я о р еал и з ац и и с а тн ад р н т ы х фн у к ц и й — в с е э т и фн у к ц и и м ожн о н е п о с р е д вт н н о и сп о ль з о в ат ь п о с в о ем у п р ям о у н аз н ач е нию . Д а н н ы й к лас с л еж и т в осн ов е в с е й и ер аи х и к лас о в D elphi. О н облаед т сам ы м и общ и м и м еотадм и , п р и сщу и м и лю бом у о б ъ ек т у яз ы к а D elphi: К лас с TObject о п и сы в ае т осн овн ы е п ри н ц и п ы п о в едн и я о б ъ ек от в в о в р ем я р або т ы п р о г ам ы (со з адн и е , ну и ч от ж ен и е , о бра окт а с о б ы ит й и .т .д ). О п р едл н и е к лас а р а с п о л ж ен о в л ум о д е System и всдег а о д сп у т н о к о м п и л яот р у . К о р н ев о й к лас с D elphi вы глияд т ю с лу е д щ и м о бр аз о м :zyxwvutsrqponmlkjihgfedcb _TClass = class strict protected FInstanceTypeHandle: System.RuntimeTypeHandle; FInstanceType: System.Type; FClassParent: _TClass; protected procedure SetlnstanceType(ATypeHandle: System.RuntimeTypeHandle); procedure SetDelegator(ATypeDelegator: System.Type); public constructor Create; overload; constructor Create(ATypeHandle: System.RuntimeTypeHandle); overload; constructor Create(AType: System.Type); overload; function ClassParent: TClass; function InstanceTypeHandle: System.RuntimeTypeHandle; function InstanceType: System.Type,function Equals(AObj: TObject): Boolean; override; function GetHashCode: Integer; override; end; П ок а н е с а т р й е тс ь п о н ят ь в с е к о н с рт к у ц и и D elphi. К одг а чл у ш е п о з н а к о м и ет с ь с э ит м я з ы к о м п р о гр а м и р о в а н и я , т о вс е е д уб т п о н я тн о , те м бо ле е ч т о р а з р а б о чт и к и Delphi п оасвтляю т и ос н хд ы е ет к с ы , к о тр ы е м о ж н о н ай т и в к атло г е . . . \ so u r se . Дл я дме он рацст и и и сп о ль з о в ан и я мовдте , орыкт е уновадсле ы о т Syst em . o bjec t , е с л да й т е ю с ул е д щ е .
1. С оз адй т е п р о ек т ти п а Console Application. 2. С оз айд т е н овы й к лас , дл я ч его п о м е си т е рк с у о р в н ж ун о е м ес т о р а кео д т а к о о д в и з ае т м в да ж ы щ елк н и т е мы ш ь ю н а к о н с рт к у ц и и T C la ssl в о к н е Categories (р и с . 6.1). отХ я м ожн о вс е н а п и с а т ь и в ч р ун ю , н о обдн у е е и сп оль з о в ат ь уж е готвы е к о н с тр к у ц и , к о тры е н д р е ту о с о з ад т ь сам о у . 3. О бъяви т е п ер м ен н у ю m yc la ss ит п а T C la ssl и п р и с о з да н и и э к з ем п л яр а к лас с а м о ж ет е в ы бр ат ь н е о б их д м ы й м о ет д и з к о н ет к с нт о г о м ен ю , к отр е п о яв л я т от л ь к о с ет я п р и в о д е от ч к и п осл е и м ен и (р и с . 6.2). В да н н о м ч аслу е е д уб оид н пну к т Create, к о т р ы й р аз р еш е н в да н н о й с и аутц и . 4. П осм рти е вс е в о з м о ж н ы е м о де т ы и с в о й св т а , одпсут н ы е дл я в н о в ь с о з ад н н о г о к лас а m yc lass, лд я ч его н а б ер и т е и м я m yc la ss и п осатвь е п о сл е н ег о о чт к у (р и с . 6.3). 5. З ак он ч и т е п рогам у в совсите и с ли ст н го м , п ри в едн н ы м н и ж е , и з аписту т е п рогам у н а и с п о лн ен и е . Раьлзтеу т р аб о т ы п р о г ам ы п о к аз н н а р и с . 6.4.zyxwvut
140
л ав Г
6. Б азоевы
лакс ы
яазкы
Delphi
program Projectl; {$APPTYPE CONSOLE} uses SysUtils; type TClassl = class(TObject) private protected public end; var myClass: TClassl; begin { TODO - oUser - cConsole Main : Insert code here } myClass := TClassl.Create;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE Wr it eln l'M i^ i = ' + m yC la ss. T o st r in g) ; Writeln('Х- ш э о к д = '+IntToStr(myClass.GetHashCode) Readln; end.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA flun Cofrponent Team Toosl Wndow Weclome fage | • Protect! j
н «^-
«
3 й 4
1
да ж Дв
ы е щ т лун к м шь ы
ис Р
. 6.1. Си н а д зо
и н е л д ор п П
л ас К
ю е с дз
ь
а
е мод те ы до М т е
ю пм у я р с и т дпо р х н е лв а б но о
е с ка л
ь
Code Snpipets U try except end; try except end; Fn i eyl end; try finely end; J TCa l ssl - class() private protected pubcil end; j for :•• to do begni end; zyxwvutsrqpo
в сал к
а TObject
, ыро тк е с а лк ы ю у д не л с а т о т и тп а TObject, ыбо чн о и п с ю ь ол з у т я на . Н о и нд го а п р и н а оз с д и и н ве т с об ы х и тп о в ы ро н тк е е д о т ме ы TObject я ь т я л еп о р д . лД я п ри ме а ри м с а о т м с а кл с P erson, в оыр кт й доы п м нре ы е дл я нар ех и я на д ы х о б и мне и к а ове л ч , ге о инеди тф кац и м н роме е и ве озтсар .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC System.Object
141
g P r o j e c t l - em- lend Delphi 8.0f or t h e M t o f f lio f t Л Е :
Т Framework - Pr ot eM l J xb e t o )
zyxwvutsrqponmlkjihgfedcbaZYXWVUTS '"[ • • , * » | , , - »,
FSe Edit Search View Preset Run Component Team Tools Window Help ! JDerauit Layout
| propc«ties|
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
ProtectGroupl zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
uses SysUtils;
o fe c t l^Ke i References
ќj TClassl - class (TOtojecC) private protected public
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
VAX rnyC 1 a s s : TC l e s s 1 ; =begin
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED Mana. • . 1 %f Model View j «ftjpata Exptorer 1
nt y C l a s s : - T C l a s a l . | C re a t e ; « r i t e I n ( i n y C l a ? s . T o s Д^Я 7 Ду Я | R e n d I n; e n d.
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
end; finely end:
) private protected publk end;
20: 22 : Insert
иР с
. 6.2. Косенкт
е м ен
ю
*: P rojec t ! - Borland Detpfct 8.0 tor t h e M icrosoft Л И H&tnr.work - Pratectt&4s&r0i
Search Ve i » Project Run Component TeamToob Ш j 3 program Projectl; J Properties 1_ : №
Eds
!
Window Heip ; jDefault Layout
r
jprojectl.exe • F|6S
ti ;
uses ! SysUtils;
Щ \ - jj —'Neil
?S Remove
. .
- I gS Proiett&oml 4 © P r o | e c t l ^ w Cfe References
I
! type
•
10 .! J li ! : 14
!
П I ! i L
T C l a s s l - c l a s s ( T O b j e c t ) p r ivat e protected public: end;
!
: :*, 1 1 -
1 v a r \ m y C l a s s :
.'. 0. .. 1
\ I
•
TClassl; —J ISaPttJertMan*:.,. 1 ^ Model View! «^Data Explorer
"'• •
myC l a s s : • TC l a s s 1 . C r e a t e ; m y C l a s s j
i
B e a d l n ;
- '• '* i e n d . ?,«,
. Г
4 i i
Search Toob>
furicton ClassType: TCtofSj
FleldAddress(const AName: string): TObject; function • • &K# ijK Disp at c her Message); ' Create; • '• •functionToString: string; Equal«(obj: TOb| ect): Boolean; function := function GetHashCodc: Integer; :: function Get Type: Type; Free; 'function Class Type: T Class; • "% ' ' „ V , • %' • "'• - " ifunctton FieldAddress(const AName; string); TObject; № spatch(va r Message);
Code Snippets
:
,"} try except end; J j try try except end; finally end; i try finely end; J TClassl - class() private protected public end; _ ifor : «t o do begin end;
—
иР с
. 6.З . М оетд
142
ы клса
f
а
л ав Г
6 . Б азоевы
лакс ы
а зкыя
DelDh
е л F:\ Documents and Settings\ GaHseyev\ My Docuniients\Bt»rland 5zyxwvutsrqponmlkjihgfed м И я - Projectl.TClassl zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA -шэХ ок д - 1zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA zyxwvutsrqponm
в
. 6.4. Р ез льу ат
Р си
Вс
е клас
работ
ы п роамг
ы в Delphi яв л ю ст
ы я п р о и з в о нд ы м
и о т к лас
а TObject.
program ToStr; {$APPTYPE CONSOLE} uses SysUtils; type TClassl = class private protected public firstName, lastName, Ident: string; function ToString: string; override; // Перопдля end; function TClassl.ToString: string; // Оеавысип м функцию begin Result := firstName + ' ' + lastName + + Ident; end; var Ivanov: TClassl; // Оеялвъб м юун ем р п begin { TODO - ollser - cConsole Main Insert code here } Ivanov := TClassl.Create; // Сеадзо м объек Ivanov.firstName := 'И' нав ; Ivanov.lastName := 'И' вона ; Ivanov.Ident := '233454345220011 Writeln (Ivanov. ToString) ,Readln; end. К а к в и нд о и з л и с ит н г а э о т т м о ет д е д уб т в о з в р ащ ат о в н рт уе н н е м с о т ян и и н фо р м а ц и ю , к о тру
л ас К
, в да н н о ь н е им и о б ъ екат ю в ы сам
и з ап р о г ам и р о в ал
е п е р о п р е дл м ч ас лу я ит п а , к а к в п рыедщ у е . З ап сиут е п р о г ам
м функцию
. .
, т Ivanov.
н м ое т д T o S t r in g. Т еп ер ь м п р и м ер , а и н фо р м а ц и ю у н а и сп о лн ен и е и в иу д т е т у и (р и с . 6.5).zyxwvutsrqponmlkjihgfedcbaZY
System.Object zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 143
• H:\ Gennady\ Work \Deb>hi'i D elpb!8\ Book\ Programs\ awp№ \ J.XH И в а н о
в : > 3 3 4 Ь4 3 4 Ь2 2 0 О1
i
Ри с
с ал К
. 6.5. Выво
д дл
1
1
я м о е тд
zyxwvutsrqponmlkjihgfedcbaZYXWVUT
а ToString
с TControlzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Эт
в р ем п о л ь з о в а е тл в ои д т с в о й св т а п о в едн и я д ы К лас з о в ьа т с и н ет р ф й с
о баз о в ы я в ы п о лн ен и
й к лас с л д я е в с х к о м п о н е н то в я п р о г ам ы . В и з а л ьу н ы е к о м п о н ен т ы я в л ю ст я э л е м н ат м т в и е тд ь так и е к о м п о н ен т ы ь м ож е ь и н ет р а к ит в н о е в з а и м о е дй с в т и е с п р о гр а м о й ы и с о б ы ит я , с п о м щ ь ю к о тр ы , моетд , атк и е к а к п о л ж ен и е э л ем н т а пу р а в л е н и я п ро и совк и и л и п ер м ещ ен и я , р еа к ц и я н а с T C o n t ro l и м е т м н ог о з ащ и щ ен н ы х свой ст я и л и э к с п о р ит р о в а ьт с я п р о и з в о нд ы м и ы и с в о й свт а к лас а T C o n t ro l.
аТ б л и ц
а 6.2. Ис пол зьеу м ы И н те р й ф
е инт е йрсф
с
I D isposable
Та б л и ц Св о й с т в
м предназ ч о управлят
В ы п о л н яе п е р ус ан о т в к
т з а д чи
Action (Дейсвит
е с яте я лв я позвюял
я оын ь ле д т . Кдог
я с ознади и с п о з уй л ь т в рм фо де й с вти й н а с о всетюущ и п о яв с л е т д е й с в ти
)
я р аз б о и ч т к
в ком по не тв
, котры
м
и
е с о с водебни жм
, с о рхане и
м ил
и
а TControl
е й с в Ди т
лД
. Э т о о з н ач е,т чт о е и п р и н е о б и хд м о с т и п рои з . Вс е э лем н т ы пу р а в л ен и я и м ею т х м ожн о о п р е дл и т ь вс е а с п е к т ы и х , ви д рксуо а , п о дс к а з к и , м еот . к о м ан д ы п о л ь з о в а е тл я и м н ог е го р д е у в и м ое т д в , к о тр ы е м оуг т и сп оль . 6.2 и 6.3 п р и в едн ы к лас м и . В абтл
в
е
м оспрюяетлд
и пу р а в л е н и я
и во змно сямтж
, с вязан ы
е опис а ни
зе я лп о в т ь а в не (нприам ер
ActionLink (Сзяв ь с дейсвитм
н дл
р а тК о к ив сйт Де )
е в о
а TControl
ь б аз о в ы м й рес ур о
а л ка с
о
я н а ид с п л е
е
В о с но в н е о б х ди м
а 6.3. Свой с т в
е о тб р а ж ю ст
н а э к ран
ы кла с
е опис а ни
рК а т к о
IControl
, к о тр ы
м ом от ке бъ т цилрзаоетнв а дл я вс
, кыро т ь в пени риолж
й саз яв и вс
я э емл ент е с войс т ь э елм ент
н с эометлн е рци кеа
а упрвелани я с осзеадт я с пис о а и с обиыт я дл я днаог о э елм ент , доспунт а упрвелани я ил и рцикеа я н я цернтали зо ван о г о с пи с к а дей с вти й в о врем е ком по не т T A c t i o n L i s t , октры й нео б хди м е и дд важ ы щ е н л у кт ь н а не м дл я еноитб раж я онк а . Дл я до б авлени я о д ен т лы ь х де й с в ти й мн ож о про и зво ди т х н ок п а х , ил и и с п озль ват ь коенскт я по с л е щ келч а п р ва о й кно пк й м ыш и в онк е р еодтакр я б уде т осьоатб р аж я в и нс поеткр е оотек б ъ в
тЭ о с во йс т о и с позлусеьт я д л я уп р ав лени уп р ав л е н и я и де й с вти е м , уакз н ы л и в с юа т я д м еж у с во й сватм и и с о б ыитям щ им и с во й сватм и и с о б ыитям и э лем ент еп н р и л о ж й э т о с во й свт о н е и с п о зльуест я и зм ени т ь э т о с во й свт о в про и зво дны
м я уинелв арп и н а ком нда к дей свитй а п е в р н у ил а а щ очле я проиетк вани о р азм ес ит роетдрак е м еню
и мд еж у э лем енот е Ac t i o n . вСяз и ус антв и де й с вти я , а тжак е с о втес ую а уп р ав л е н и я . В б о шль и нс вт . Рзарбиочкт и ко м п о не т х о т TC o n t r o l лсак х .
. ы , т о я к м ыш и)
я ь а ь щ еклч , котр . Оек б ъ
я с вязм
и е т м
м в с во й свт
лакс ы азкыя л ав Г 6. Базоевы 7 4 4 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
.
е в м о гу
т
Delphi
ин е ж л о д о р П С в о й с тв
о
Кр а т к о
Align (Вырвани е
И с п о з л у ь се т уп р ав л е н и п р о с т ан в ок т р ы им е и э лем ен
)
Anchors (Приавзяк )
AutoSize (Аовтрзам ер
й влкю аче т значе и т уп р ав л е н и
т а во т м и а т е ч с о к и сиомдерж о г н ( False)
И с п о з л ьу е с т у ич ы т в а е с в о ди с т
я д л я л о аки з ц я с п р ав
И с п о з л у ь се т уп р ав л е н и я ам п е р с ан о б р ащ е н и б ы с р ты я оотебнир аж ам п е р с ан д о З а м е ча н и е
е р азм ер о
а н ел а в
)
)
е м вл юк ач щ е г
о
а ком по нет
м а
я и р азм ер ы
я пр
а уп р ав л е н и ю в с е гд
я нап р влени
и
а
я н ап и с ан и я х яз ы а к
, в неоктр ы
. Напри м ер
, о
м уг л а
в э лем ент . П о ум о лчани
о и зм ен и я п р о г ам м ы
о
к
я к угла у к проитв нпыо л ж и разм ер о и зм есньят
а уп р ав л е н и я
я авотм иатечс окг
е р аз м е щ е н и л р аз б о и ч т
а уп р ав л е н и ь п р и в яз к и и зм ен и
е и зм ен и о э лем ент
а о онто с иентлоь г и ил и окм по неат ю э т о с во й с вт
, панел
, кодг х теск
а т
о в э лем ент
а уп р ав л е н и
я в писк еля
. девтниУр ж
е
я дл я хране и я поедчрикван . Дл д (&). Тоак й с им во я к дан о м у э ле м е н т х лк а в и ш , с о с тящ у я ам перс анд в (&&). .
я с рто ик
, котра я одетнлыь
х
zyxwvutsrqponmlkjih
л назывсет у уп р ав л е н и ю и з лкави ш а и с позлуьй т
я являест я заго л вок х с и м во л в по с авть я "ус окриелтм " и дл я мн о ж о и с позль ват и и по дечрнкутг е по с ледо внатль с т
Эле м е н т ы уп р ав л е н и я о аю т б р аж т теск т , и с позлуь я ил т о т э лем ент а уп р ав л е н и я и л и с во й с вт о Text. Эт о завис с л у ча е в с во й свт о Caption с ио держ т теск т , оотаебм р аж ы и л и надп и с . Свойс т о Text влюкаеч т е т ск , являю щ и й с э ле м е н т а уп р ав л е н и я иСо д е р ж т выс о т у ли к ес н то г о про с нат в а в писк елях о р мф ы л и к е сн т о е про с нат в о м ш ень е вы с о т ы рм фо
)
ClientRect (Грнаиц ы ил а к е н т
л ас К
я дл
я э ле м е н т
т R.Left := Control.Left; R.Top := Control.Top; R. Right := Control. Left + Control.Width; R.Bottom := Control.Top + Control.Height;
лД
ClientWidth (Ш ирн а ил а к е н т
я а во т м и а т е ч с о к г о разм ещ ени е ил и пнаел и и с о рхане и я зани м аем о г е пр и и зм ен и и разм еро в форм ы т э от т э лем ен т уп р ав лени я . П о ум о лчани е alNone, чт о запрещ ае т а во т м и а т е ч с о к я о с ае т я там , гд е его по м ес ит
аз Р р е ш ае и зм ен и в ы л юк еч
)
ClientHeight (Выс от а ил а к е н т ClientOrigin (Привязк а ил а к е н т
я задни
И с п о з л у ь се т я дл я рсаенипол ж я гл о у о н т с и е тн л ь о вл юк ач щ е г о ег о ком по неат R := Control.BoundsRect;
соответствуе
Caption (Зогалв к
я д л я в форм а даж
я при вязк и угло в э лем ент . Пр и э от м ес л и с делат р [ akLef t , ak Rig h t ] ) , т о пр й ос и б уд т п р о р ц и о н ал ь а уп р ав л е н и я
)
BoundsRect (Грнаицы )
е
И с п о з л ьу е с т и х ко м п о не ат (напри м е п о с о втсе ую щ е э ле м е н т )
BiDiMode (Нпарвелни
е о п и с ан и
6.3.zyxwv
т.лаб
иСо д е р ж о н т с и е т нл ь а у — веритналкуь
т ко рди нат о э рк ан
ы х и Y вернхг , х о п р ед ля ю в пискеял х
о лево г т го р и зо налтуь
о угл
иСо д е р ж
т ш ир н
у клиеснтокг
о про с тан в
а
ь о к м б и н ац о с и м в о ла ь и з дв у
и ю .
х
о Caption, е е онк а м
. Напри м ер ы н а выс о т
а э лем ент
а д ни м о
я б ы с рто г
и с во й с вт . В б ошль и нс вт й в заго л вк я с и о м де р ж ы
, дл я у з аг о л в к
а уп р ав л е н и ю о к р д и у н ат
иСо д е р ж т р аз м е р ы клиеснтокг о про с тан в а э лем ент З а м е ач н и . аз Р м е р ы о пред л н ы дл я зиечсфи окг о клиеснтокг л о г и че с о к г , т. е . ес л и э лем ен т упр авлени я п и о в аде р ж чт о н е винд о н а э ркане , н е вохди т в э т и разм ер ы
м э лем ент е пер
а я
, а уп р ав л е н и я
о п р о с ртанс вт т п р у ок т
. , а н е дл я , п о вс е ,
zyxwvutsrqponmlkjihgfedcbaZYXWVU
)
TControlzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
145
ин е ж л о д о р П
6.3.zyxw
т.лаб
р а Кт о к е опис а ние zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
С в о й ст Color (Цвте )
Constraints (Огрнаиечлт
ControlState (Сос нятие )
ControlStyle (Сиьлт )
)
и оС д е р ж ус ан о т в л е а во т м и а т еч с к с в о й с вто
т фонвы
й цве т э лем ент а уп р ав л е н и я е с войс т о (True), т о и зм ен и и и зм еня т значе и е э отг , т о с во й с вт о ParentColor прим е
и оС де р ж уп р ав л е н и я и з м с е ь н ят р Пд е н и у п ж Н е до пус айкт и уиычтвйа
т м и н м налыь
. с лЕ а р о д и е с тл ь о к г о с в о й с вта т знеачи
и с во й с вт о ком по нет . Н о ес л и и зм ениьт е Fa l s e
е и м сак и м налыь е до пус итм ы е р аз м е р и э т и значе и я ус анто в лены , т о э лем ен т упр авлени о в эит х грнаицх . . е клниытко ф х с и у а цт й пр и усанотвк е э от г о с во й свт е з н а еч и я с во й с т в Align и Anchors
о ParentColor а э т о ы э ле м е н т
а
. с лЕ я токль
я ме о ж
т
а
с т е у з ь с о И лп я дл я хинера я рын ичлза х о т скепа в синояст я эмел тн а и н е л в ар п у (нпарим ер , б ы л л и про и звед н щ еолч к м ыш ь ю ил и ес т ь нео б хди м о с т в ы р а н и в а я) . вСо й свт о C o n t r o l S t a t e с о ти т и з м есвтно ж а л аг о в ф н щ елоч к лево й кно пк й м ы ш и , н о дейсвти c sLBut t onDown — пр о и звед ещ е н е вы по лне ; , чт о и c sLButtonDown, з а и с люкечни м тог c s C l i c k e d — т о ж е с ам о е у с а н от в л е н а фл г c s C l i c k Eve n t s дл я с войс т а ControlStyle, о значю щ и й ; тч о с об иыт е при нят о к и с по лне и ю c s P a l e t t e — и зм ен а с и с етм на я прлиат а и э лем ен т уп р авлени я и л п р о и з в дн ы е о т нег о э лем ент ы ещ е н е зоакничл и ортаб окт у эотг о с о б ы ит я т упрвелани я ы е вс а и т ч т с во е с осняит е и c sRead ing St at e •— э лем ен т уинелвпра я де ожл н отабро ь и н ев ы а р csAlignmentNeeded — эмел н c sFo c u sin g — пенри ло ж е ортабыве т с о б щ ени е о нео б х ди м о с т , чт о фоук п е р д ат ь фоук с э лем ент у уп р ав л е н и я , хо т я э т о н е гар нит уе т реуркс и вны е вы зо вы ; б уд е т пер дан , н о запрещ ае т упр авлени я ил и с вязнаы е с ни м э лем ент ы c s C r e a t i n g — э лем ен с о з д аю с т я . Когд а с о здани е б уде т зоакнеч о , э от т фла г с б р ас ы в аест я c sPain t Co p y — э лем ен т упр авлени я б ы л дублирован , т. е . копи я э лем ент . Фла г c s Re p l i c a t a b l e с во й с вт уп р ав л е н и я оотаебс р ж я н а э ркане ControlStyle б уде т ус анто вле н по с л е оокначи я д уб л и р о в ан и я ; т управлени я п о е а члу т с о б щ ени я о выпо лне и c sCust o m Paint — э лем ен ; п о з л ь ве ат м и з о е нб и р а ж й н а эркане c s D e s t r o yi n g Han d l e — онко , сащ о держ е э лем ен т уп р авлени я , раз уш ено c sDo c k in g — э лем ен т управлени я с о ы тк в а н
я ь : е , чт
о ,
и ; з паокт
; ;
и с
; а а и ;
и разли нчы х р ати б о у в э лем ент а уп р ав л е н и я , я д л я ус атно в к х ка к во змн с отж ь ортаб окт и щ оеклч в м ыш и ил и фиск р о ван ы е р аз м е р ы . В с во й с вт е и с позлуьюст я с ледующ и е л аги ф : т управлени я с а н то в и с я р о д и с е л ть к м дл я c s Ac c e p t s C o n t r o l s — э лем ен вс е х э лем еонтв , разм ещ ен ы х в не м в о врем я пр о иеткр о вани я ; т упр авлени я р е аг и у т н а щ елчк и м ы ш и ; c sCap tureM ouse — э лем ен c s D e s i g n i n t e r a c t i v e — э лем ен т упрвалени я в о врем я п р о и е т к в ан и я и лево й нк о п и ; п р е о б за еу т щ еклч и п р ав о й кно пк и м ыш и в щ кечл c sClic k Eve n t s — эемл н т уинелвпра я пминр еа т и еавчот т н а щ кчле и м ыш и ; т упр авлени я им е т оем б ъны й вид ; csFramed — э лем ен c s Se t Ca p t i o n — заго л во к э лем ент а (с войс т о Caption) упр авлени я е до лж н с о в т ес о в а т ь с в о й с вт у Name, ес л и о н о н е б ы л о ус анто влен о яв н о ; т уп р ав л е н и я з ап о л н я е т вс е клиеснток е п р о с ртанс вто ; csOpaque — э лем ен т упрвелани я при н м е а т и овеатч т н а дво й ны е c s Do u b l e Cl ic k s — э лем ен м сачул е довйын е щк чле и пс ютузобера я в орыниеад ; zyxwvu щк ч л е и м ыш и . В пионврт
И с п о з уе л ь т и ак т
7 4 6 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA л ав Г 6. Базоевы лакс ы яазкы
Delphi
ин е ж л о д о р П С в о й с тв
о
Кр а т к о
ControlStyle (Сиьлт )
е о п и с а н и
е
c s Fi x e d w i d t h — ш ир н а э лем ент а уп р ав л е н и я н е м е о ж т и зм есньят ; c s Fi xe d H e i g h t — выс от а э ле м е н т а уп р авлени я н е ме ож т и зм сеньят ; c sN o De sig n visib le — эмел н т уиневлпра я нидве м в о мерв я иняроавтпке ; c s R e p l i c a t a b l e — э лем ен т уп р авлени я ме о ж т копи рос вьат я с по м о щ ь ю м о е тд а Pain t To ; c sNo St d Event s — и гно ри уюст я с антдры е с о б ыитя о т м ыш и и л ак в и у р т ы , поэ мт у пенри ло ж е м е о ж т рба от ь зниачелть о б ы с р те ; c sDisp layDr ag lm ag e — ес л и э лем ен т управлени я с в зя а н с о с пи с ок м е н и зй о б р ж а , т о сс ютоазд я ус олви я дл я уодбнг о перм ещ еин я иенизйоб ржа ; c sRef l e c t o r — э лем ен т уп р авлени я овтеча т н а ди ало г вы е с о б щ ени я Windows, с о б щ ени я о фоуск и ро вк е и л и измени и р азм ер о в . с н а в тл и У е я , сел и э емл ен т упрваелни я ис етзупоьл я ка к э елм ен т ActiveX; c s A c t i o n C l i e n t — ус антвли аест я , ес л и э лем ен т уп р ав л е н и я и с п о з л у ь ес т я ка к оек б ъ т дей с вти я ли б о ес л и ус анто влен о с во й с вт о Action, и с б р ас ы в аест я , ес л и э т о с во й с вт о с б ро ш ено ; т упрваелни я овеатч т н а ком нда ы с иесм т ног о м ен ю csM enuEvents — э емл ен
Cursor (Крус о )
аз Р р е ш ае
т и з м е н ят . Ви
е ин в п л я р а у
ь ви д ксро у е к оэмт
В доп нлеи DesktopFont (Ш т риф ы раб о ечг с о ал т )
о
DockOrientation (Оица тнре я си ков ы т
с Уа н т в л и а е с т и с п о з л ь в ат
ь ш т ри ф я дл
И с п о з л у ь ес т ИГ
Х
е е м ож
И с п о з л у ь ес т
, когд
я изм ен и
я дл
я рзареш ени
р разм ещ сает м он гьлоба
я на
т ис зпьовтла
я с онызад
ы поитгкрам
у уп р авлени я с войс т
я пенио л ж
а уп р ав л е н и
я э лем ент х с о дн и ь с верх я вид
м ро диселтьк у вни
а курс о р
е пелзотваь
з ил
а пр
И с п о з л у ь ес т )
DragMode (Ри еж м п е р м е щ е н и я) (
и
с о ы ут й к
я р азр еш аест а Font я о н т с и е н тл ь
о
м ок м п о не тм а н ап р в
и с елв
и пер м ещ ени
. о и курс о р
я о пераци
< 1п М а П1
^
-
1а : 1
е н а пер м ещ ени и л и о ва т м и е та ч с к - )
и и оптус и
е э лем ент а уп р ав лени я й (dmAutomatic ) ри м еж
Из м е н я т ри еж м до с уптно с т ( False) , т о э лем ен т управлени и з о е нб и р аж я н а э ркан е б уде
)
й "перщат
а
" ил
пО р е д л я с о ы т к в ан о г
т с о т ян и
и э лем ент я б уд е т у м е шн ь е н
е э лем ент
. Мн ож
)
п р У ав л я е
Height (Высаот )
В е р и т н а лк ы ь
р
TControl
И с п о з л ьу е с т З н а че и д м же
и "перщат
и
. Есл м и яроксьт
а уп р ав лени я т неитаквны а
а уп р ав л е н и
о выб рта
ь р у чн о
й
ы и фла
г с б р о ш е
н
его
я а к к "пюващл е"
, в олти ч
е о т
о
я клас а , с ащо держ г о э лем ен т управлени я FloatingDockSiteClass Ис позльуест я дл я уазкни э ле м е н т управлени я явлсяет я п л ав ю щ и м . Сащ о держи й ксал (Док ) п р о и з в о дн ы м о т ксал а TWin Co n t r o l . П о ум о лачни ю э т о б уде TCustomDockForm. одгК а э лем ен т уп р ав ле ни я при с ытокв аест я и с во й свт о при н м ае т знечаи вр ем ен ы й ксал с усаетяниочж
л ас К
я
"
аз Р р е ш е н и
)
HelpContext (Иоиатк денф с и п рв ка )
м й sc r een. м крус о ы
)
DragKind (Ти п пер м ещ ения
Font (Ш т риф
д элем енот
й пмер он
е Tr ue, окгд а э лем ент м Windows дл
т про и с охди т
я дл
а курс о я исокедн
у м уог
я задни , с о сыткван ы
э лем енотв
В ы р ав н и а
Floating (Плвающ ий
д курс о ра а ос теялдрп
я з н аеч и
) ДРУ
DragCursor (Крус о р пер м ещ ения
Enabled (Досупнт ь
6.3.zyxwv
.лтаб
т аритбаму й рзам е я дл е О го в ри у с войсмат
я уазкни
и ш от ри ф
в
р э лем ент
а уп р ав л е н и
, когд н б ыт
с де о лж т клса
с , т о э от е n i l
а ь т
я
я цро ви фг о иоитарк денф и с пр аво нч й с и с етм ы т о б ост у ви и HelpContext и HelpKeyword ис езтупоьл
а с право нч . Дл
й с и с етм ы
я пер люкчни я с войс т
. я о HelpTypezyxwvut
147
ин е ж л о д о р П
6.3.zyxw
т.лаб
р а Кт о к е опи с а ни е о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
воС й с т
HelpKeyword (Клюевчо е с ло в с и п рв ка )
я дл
И с п о з с у ле ь т с ло в а с и е мт о
я пко держ е л юк еч в о г
. Остуви ы
и с прваонч о с олв
HelpType (Ти п с пирвак ) Hint (Поасдзк )
пО р е д л я о и ат р к д е н ф
HostDockSite (Хост )
и оС д е р ж с во й с вт
IsControl (Вид )
с т е у з с И ь оп л я дл я синаодз я комгн авирб с оп б и сне ар хо я фомр ы . Есл дл я о р мф ы с во й свт а н е с орханяюст с в о й с вта . Эт о позвляе т с орханьят
т н ал и ч у ил
и оС д е р ж м ыш
т тескотву и н а э лем ен
Left (Левый ) LRDockWidth (Ш ир н а соиывкт
пО р е д ля о н т с и е н тл ь )
MouseCapture (Мыш ь ) Name (Им я )
Parent (Роеьлидт
и оС д е р ж с о с ы т ок в а н от г
й с и с етм ы у с ло в
т ш ир н , когд
, вы з ваем о , котра
лД
я от г п р о и з в о дн ы в о врем р о д и е стл ь о к г и з е о н б р аж р о д и е с тл ь к З а м е ач н и
вС о й с в т .т е . о н и с к ь л е и т ор д н а э ркан о Р д и се л т ь к в по т ок тр ы о в ет а ч ParentBiDiMode (Напрвлени е р о е ди л я т )
т им т уп р авлени я , чотб
м рсае по л ж
ы э ле м е н м о т тип
я вы по лне и о э лем ент е э лем ент й ком по не
у
т пр
н э лем ен
и нваедни
т уп р ав ле ни я т э ле м е н
и о с т ы к в ае
и име
и
э лем ент у лево г а я в то
а уп р ав л е н и т п о м ни т я б ы
ь ш ир н л остыоква
а уп р ав л е н и
я э лем ент
. снаотвУк
а
т уп р ав л е н и
я
о уиневлпра я рм фо ой . Оеял дрп е True, т о ыро т кен е ы сн чи фицеп м с луча е с орханяюст ы уп р ав л е н и я ак к форм
т зине ч ан . В проитвн
ю э лем ент
я р о диетл
й п о цро ви фм я во зни аке
о угл
а э лем ент
т е я вс
е
у
а уп р ав л е н и
т м о м ент , когд у в м о м ен т с ыток в н и ег о р азм ер
я н а во здей с вти
и о С ед р ж т им я э елм ент а п у р в е л на и я . П о му онаичлю и м ен а с о с тя т и з имен и тип а и по с ледонватьг B u t t o n l , B u t t o n 2 и т. д . Об ынч о про г ам м и с т п о л уе ч н и я б о ле е чиабтнеыль х про г ам м . Пр д е н у п и ж . т проиетк вани Им е н а мн о ж о м енят ь о кт л ь о в м ом ен иСо д е р ж э ле м е н
е й
у
ю кориднта о ком понет
т р е ц ак и
й л ю е к чв ы и с п р а в о нч
я
у э лем ент о позвляе т уп р авлени
. Эт а э лем ен
, р еали зую щ е т о б ост у ви
у по дс азки
ю срто к т уп р ав л е н и
т г о р и з о н а лу ь т о р о д и е с тл ь о к г
азР р е ш ае
)
ParentColor (Цве т р о е ди л я т
е с п р ав о нч и клюечво м
т им я о нка , в котр а HostDockSite оавтм иеатчс к онк а
о т ро диселтькго
й с и с етм ы а го в р и
а о н б ы и даж ы и зм ен я м ыш
, в м ом ен о но м ер а ы п р и с в аи ю
я л е по с л
е ы
и
т пиротнваяек . Нпарим ер т с во
, : и им ен
а д л
я
я
а уп р ав л е н и я
. оРдиетсль к м с ич ае т я , октры й влюеакч т в с еб я дан ы й э ле м е н т у п р ав л е н и я . т управлени я м о г б ыт ь р о диетсль ик м , о н е до лж н быт ь а TWinControl. рП и с о зднаи и но в г о э лем ент а п у р в а ле н и я я п р о г ам м ы , с во й свт у Parent при с ваи ест я им я а уп р ав л е н и я . Изм ен и е э от г о с во й с вт а з ас в тл я е т а уп р ав л е н и я п е р м е с иь т я в о вно в ь за н ку ы й и ко м п о не амт и . т вм ес т е с до ечрни м
. о Parent тип о оеадс воб ж й эемл н е и в ко тр й э лем ен к п р и с о рхане и й пер даст т з а с о рхане и
а TC o n t r o l подбн о с во й с вт у Owner тип а TComponent, т э елм ен т уенивплра я по дб н о ком -упонет оизяхну . Оканд о , кор т е с те оа жобар т я т уинелварп я вдсге а яс теялв я но к м м ссато держ я до ечр ни е э лем ент ы уп р ав л е н и я . т управлени я о в ет а ч т з а запи с ь э лем енот в уп р ав л е н и я и форм ы . Ком по не-т охзяи н яв ляест я ко м п о не отм , я ак к аргум ен т в консртук р и ес л и о н с ущ ес вту , т о е вс е х оотек б ъ в пр и с о рхане и и о р мф ы
а з Рр е ш а е
т и с п о з л ь в ан и
е BiDiMode ро диселтькго
а з Рр е ш а е
т и с п о з л ь в ан и
е цовет
в р о дс и е л ь т к г
ком по не т
о ком по не т
а
а
zyxwvutsrqponmlkjih
)
6. Б азоевы лакс ы яазкы л ав Г 148 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
Delphi
а ин е к ч о О Св о й с т в
о
р а тК о к
ParentFont (Ш риф т р о д ие л я т ParentShowHint (Пкз а ск до а ря ле ти до PopupMenu (Коенскт е м еню
TBDockHeight (Выс о т а с ы то к в и Text (Тсект )
т и с п о з л ь в ан и
е ш отр и ф
а з Рр е ш а е
т и с п о з л ь в ан и
е п о дс акз
И с п о з уе л ь т н е и с позуельт
ком по не т
а
и ро диселтькго
ком по не т
а
я пр
и м ас ш абт и ро вани я б е з с ерзьны
и унас ледо ван ы х н а т о при ч
х о р мф
. В перни ло ж
и
н
) за р Р е ш еа
т и с п о з л ь в ан и
пО р е д л я
т вы с о т
е по дс азк
у э лем ент
и
а уп р ав л е н и
я пр
и венироальтк
й с ы ток в
е
) И с п о з уе л ь т я дл я хране и я тескотв й ио рмнф аци . П о ум о лчани ю з де с ь с о р х на яе т я им я э лем ент а уп р ав л е н и я . З а м е а нч и . Эл е м е н т ы уп р ав л е н и я о ат ю б р а ж т теск т , и с позуль я с во й свт о Caption и л и с во й свт о Text, тч о зави с т о т э лем ент а уп р ав л е н и я . В о с но в м с в о й с вт о Caption и с позуельт я дл я хр ан е и я заго л вк а э лем ент а уп р ав л е н и я , я с ио мдер ж о е э лем ент а а в с войс т е Text хранист п О р е д ля т о к р д и н ат у вернх г о ле в о г о угл а (Y) э лем ент а уп р ав л е н и я о н т с ие л ь о р о дс и е л ь т к г о ком по не т а
р )
UndockWidth (Ш ир н а д о сыоткви
и оС де р ж
)
т выс от
у э ле м е н т
пО р е д ля
т ш ир н
п О р е д ля п р и с в аи е при с ва е уп р ав л е н и
т ви д м о с т т с во й с вт т с во й свт я
WheelAccumulator (Ролик )
и оС де р ж
т знеач и
Width (Ш ир на
п О р е д ля в п и с к е ял
Visible (Ви д м о сьт
в р о д и се л т ь к г о
и оС де р ж т им я ком по нет а Тр о р и р м е п и (косенкт е м еню) , котр ы й п о яв сл е т я пр и щ келч е п р ва о й кно пк й м ыш и н а пол е э лем ент а уп р ав л е н и я . с лЕ и с войс т о AutoPopup окм по не т а TPopupMenu им е т значе и е Tr u e , т о о к ес н т е м ен ю по явлсет я с р аз у по с л е щ келч а м ыш и , в п р оитвно м с л ау ч е не о б и д м х о псруедм рето ь вызо в м ен ю в обриачкот е с обиыт я OnContext Popup
)
UndockHeight (Высот а д о си ков ы т
)
)
С в о й с вт а п р и в е дн в о нд ы м и к о м п о н е н ат м н о й р або т ы в с р ед T c o n t r o l н е п р и в о ядст с р ое д й п р о гр а м и р о в а н и к лас а с атл к и в аьт с оп и сан и и е ол д ь т н ы
л ас К
а з Рр е ш а е
)
ShowHint (Разреш ени е п о дс и з а к )
(Верх
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE е
)
ScalingFlags (Фал г м ас ш аб т и р о в ан и я
оТ
е описа н
6.3.zyxwvu
т.лаб
TControl
)
у э лем ент
я д о м ом ент а уп р ав л е н и
ь э лем ент у Visible знаеч и у Visible знеачи , с о втес ую щ е
т г о р и з о н а ыл ь т х
а уп р ав л е н и
й разм ер
а сыоткв
я д о м ом ент а уп р ав л е н и
и а сыоткв
и
я н а э ркане е Tr u e . Вызо в м о ед т е Fal s e , .т е . с ркывае
. Вызо
е в р ащ е н и
а м ыш
э лем ент
ю роилк а уп р ав л е н и
в м о е тд а Hi d e т э ле м е н
я ил
а show т
и и о р мф
ы
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB
ы до в л ь н о п о др б н о , та к к а к о н и н асюлеуд ст я в с ем и п рои з и и о п р е дл я ю т п о в едн и е э л е м н от в пу р а в л е н и я . Д л я су п е ш е Delphi э т и св о й свт а н е о б х ид м о о рх ш о з н а ьт . М оетд ы к лас а , ат к к а к о н и в о с н о в н о м з ащ и щ ен ы и и с п о л ь з ю у ст я сам о й я Delphi. Н а н а ч л ь н о м э ат п е и з чуен и я Delphi с м еотадм и я н е п р и ес д т я . П о м ер е н е о б и хд м о с т и о н и у д уб т п р и в о ид ь т с я пр и х к о м п о н е н от в .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED
149
С о бы ит
я к о м п о н ен т а 6.4. Собиыт
ц и лб а Т то С б ы и
а п р и в едн
а TControlzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP
я ком понет
е
. 6.4.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR
ы в табл
о гд К
а пр ои с хд
т
O n C a n R esize
рП и по пыкт е и зм ен и я разм еро в э лем ент а уп р ав л е н и я O n C l i c kzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA рП и щ еклч е м ыш и н а э лем ент е уп р ав л е н и я
OnConstrainedResize
рП
и выохд
е з а пред лы
, ус анто влен ы
OnContextPopup
рП
и вызов
е о с е кн т г
о м ен
OnDblClick OnDragDrop OnDragOver
рП
и дв о й н о рП
е н а э лем ент
и перастиквн рП
и перастиквн
OnEndDock
рП
OnEndDrag OnMouseDown
м щ еклч
и рас ыоткв
уп р ав л е н и
е уп р ав ле н и х э ле м е н т
а уп р ав л е н и
и а ет к о б ъ
з а пр ед л
ы э ле м е н т
а пу р в а л е н и
я я
н я
и л ва ки ш
и м ыш
и и п ер м ещ ени
и е е вни
з на
д э л е м е но т
м
я
OnMouseMove
рП
и пер м ещ ени
OnMouseUp
рП
и ниат аж
э л е м е но т
и крус о
а м ыш
и л авк и ш м пу р в а л е н и
и м ыш я
рП
и прокут
е роилк
а м ыш
и
OnMouseWheelDown
рП
и прокут
е роилк
а м ыш
и в ни
OnMouseWheelUp
рП
и прокут
е ро лик
а м ы ш
и в ер
OnResize
рП
и и зм ен и
OnStartD ock
рП с во й с вт
и пер м ещ ени
OnStartD rag
В налч
и рзам еро
в э лем ент
и э лем ент а DragKind е п е р ас т и к в н
и на
д э ле м е нот
м уп р ав л е н и
и и п ер м ещ ени
OnMouseWheel
сал К
я
в пред ла
и п е р ас т и к в н
и ниат аж
х
и оаетк б ъ
е оок
П о оокначи рП
е в о г р а н и ч е тл я ю
и е е в ер
д
з х а уп р ав л е н и
а уп р ав л е н и
я х на
я я в ри м еж
е dcDock дл
я
я
с TWinControl оЭ т
с о б ес п ч и в а е т о бщ и е н фу к ц и о н а л ь н ы е в о з м о ж н о ст и л д я е св х э л е м н о т в п у р а в л ен и я , к отры е и с п о ль зю у т э к ран н ы е объкет ы Microsoft Windows. Т аки е э л ем н т ы т и сп о ль з о в ат ь п у р а в л ен и я ол и т ч а ю с т я р я од м с п ец и ф ч ес к и х в о з м о ж н о с е йт . О н и муог , есл и октры т е к о тс в ы й ра к е д н фу к ц и о н а л ь н ы е в о з м о ж н о ст и ок н Windows. Н ап р и м ер отр , т о э лем н т п у р а в л ен и я м ож е т и сп о ль з о в ат ь в о з м о ж н о ст и е к т ос в г о о р ка т д е а лд я о б р т а ж ен и я е к т ос в г о ер ф а б у . Т ак и е э л ем н т ы п у р а в л ен и я м уо г т п р и н и м ат ь офк у с п о ж ел а н и ю п о л ь з о в е ла тя . Э лем н т п у р а в л ен и я , котры й и ме т ф о кс у , можте , н ап ри м ер , о ыб р а т в ь н аж ит я к лав и ш к л ав ри ы у т . Н екотры е э л ем н т ы п у р а в л ен и я и з м ен яю т в н еш н и й и в д п р и п о ч л еу н и и с о кф у а (н ап ри м ер , к н о п к а п р и п о ч л уе н и и с о кф у а одп л н и е л ть н о з а к л ю ч с а ет я в п р я м ог у л ь н и к ) . Э лем н т ы п у р а в л ен и я у м ог т ж и с лу т ь к о н етй х э л е м н от в п у р а в л ен и я , с ы лаяс ь н а н и х к а к н а од ч ер н и е э л ем н ы т . н ер а м и л д я и г ру д К о н е йт н е р н ы е э л ем н т ы п у р а в л ен и я п аю л г р д е т о д п о л н и е тл ь н ы й с ер в и с о дч ер н и м э ле м е н а тм , вклю ча я в о з м о ж н о ст и п ро и со в к и дл я е т х к о м п о н ен от в , котры е н е и м ею т ат к и х в о з м о ж н о е йс т . В качвест е п р и м ер а к о н е йт н е р н ы х э л ем н от в п у р а в л ен и я м ож н о п р и в ес т и фо р м ы и л и п а н ел и . Э лем н т ы н а осн ов е TWinControl муог т ообртаж ь с а тн е о б ъ ек ыт , раз работн ы е п ро а рн д т ы е э к ран н ы е о б ъ ек т ы лд я Windows и л и э к р ан н ы рг а м и а с м т и л д я б и л и о е кт и VCL. П рои з вонд ы е о т к л ас а TWinControl э лем н т ы п у р а в л ен и я в к лю ч аю т а б рс т кн ы е к л ас ы л д я п е ро д ж к и б о л ь ш и н св т а ит п о в и н ет р фе й с н ы х о б ъ е к тв . Оид н и з н аи боле е в жа н ы х п р о и з в он д ы х к лас о в — TC ustom C ontrol, к о рт ы й р еа л и з у т к о д л д я с о з адн и я и з о б р а ж ен и я и о б р а ок т и с о б щ ен и й лд я п р о и - zyxw
150
т к л ас
л ав Г
6. Б азоевы
лакс ы
азкыя
Delphi
совк и . Н е м ен е е в аж н ы м и п р о и з в онд ы м и к лас м и яв л ю с т я T Sc r o llin gWin C o n t r o l, T Bu t t o n C o n t r o l, TCustomComboBox, TC ustomEdit, TCustomListBox и рд . П ер д ет м к а к с о з а вд т ь с о б в те н ы й э л ем н т п у р а в л ен и я , расм оит е в о з м о ж н о ст ь н а с л еод в а н и я о т эит х к л ас о в , а н е созавйд т е н е п о с р е вд т н н о о т TWinControl. К ажыд й о б ъ ек т ит п а TWinControl и м е т св о й ст о Handle (Деск ри п отр) , котры й и с п о л ь зсет у я лд я в з а и м о а VCL е дй с в т и я с и г рму д и э к ран н ы м и о б ъ е к а тм и . И сп оль зй ут е э т о св о й ст о л д я о д бх API и н еп осрведтн ог о о б р а щ ен и я к э к р а н н ы м о б ъ а е км т .zyxwvutsrqponmlkjihgfedcbaZYXWV
с TForm
с ал К
Ф орм а — э т о в аж н ей ш и й к о м п о н ен т D elphi, н а к о тр м о сн о в ан а вс я р аб о т а э от й с и с е тм ы п о п р о е к ит р о в а н и ю и р а з р а б о кт е п р и ло ж ен и й . Ф о р м а (к лас с TForm) соед р жи т обш и рн ы й н або р св о й ст в мо д ет в и со б ы ит й , п оз в ляю щ и х л е гк о н а ср т и в а т ь и о р га н и з о в ы в а т ь с ам ы е сло ж н ы е а л ог р и м т ы е е нф у к ц и о н и р о в а н и я . П оск ль к у ч ащ е в с ег о п р и о дхс т я ат р б о ь и м ен н о с фо р м о й , .т о м н оиг е э л ем н т ы о п и сан ы о д са т ч н о п о лн о . О нд ак о п о ск ль у фо р м а н е у ас лд т в с е с в о й с ат , п орд бн о о п и сан н ы е р а н е е лд я э л ем н т а п у р а в л ен и я T C on t rol, лд я м н о ги х св о й ст в да н о о лт ь к о к р а от е оп и сан и е . Вс е с в о й с ат , корты е о б рт аж ю с т я в и н с п екотр е о б ъ е к вт , о п и сан ы в а б лт . 6.5. Е сл и ох т рош о и з ч уи т ь э т и с в о й св т а , т о работ а с о с атл ь н ы м и э л е м н ат м и пу р а в л е н и я н е е д бу п р е сда т в л я ь о с бы х н р д т у о с е йт , ат к к а к м н о ги е с в о й св т а п о в т р я ю ст я . С о б ы ит я к лас а TForm п ри в едн ы в табл . 6.6.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH Та б л и ц
а 6.5. Свойст в Св о й с т в
о
а кла с
а TForm
а Н зн еч и
Active
пО р е д ля
ActiveControl
аз к ы в е У
е т нали ч
е фоуск
т э лем ен
Align
Из м е н я
AlphaBlend, AlphaBlendValue
п О р е д л яю т про з нач с т З ам е ан ч и . тЭ и с во й с вт а раб оют и выш е н а ком юперть
т разм ер
т октль е с про цес о р
AutoScroll
слЕ
и Tr u e, т о по л с
AutoSize
слЕ с и ом де р ж о г
и Tr u e, т о грани ц о
BiDiMode
п О р е д ля
т ри еж
Borderlcons
пО р е д ля
т поиткграм м
BorderStyle
Ви д грнаи ц форм ы : b s D i a l o g — неи зм еням ы b s s i n g l e — неи зм еня м ы е bsNone — неи зм еня м ы е b s s i z e a b l e — с антдр b s To o l wi n d o w— по д б н b sSize To o lWin — по д б н
л ас К
Caption
з а вН н и
TForm
я дл я при вязк о и х ком по не т
а рам к е форм ы
с
ы .
о с о пераци о н
й с и семт о и б о ле
м Р9 0 и л и угло а
в э елм ент
ы прокут
о пр
я аовтм иеатчс к я с иычтван
у в заго л вк
е онк
й Windows 2000 м
я к угла
я октль
т и зм сеьнят
я напр влени
е м о щ ны
а управлени
и по явлсют
ы м о гу м дл
й фоук
е фо рм ь фо р м ы
И с п о з с у ле ь т вл ю к а ч щ е г
Ш ир н
, им еющ и
ы и пенио л ж
Anchors
BorderWidth
а
т уп р авлени я
м
и не о б х ди м о с т и пр
и и и зм ен и
и
я а
е грнаи ц ы сандтро г о ди ало г в о г , о ди но ча я линя ; , не т видм о й грани цы ; я изм еням а я гр н а и ц ; о b s S i n g l e , н о с ум ешнь ен ы о b s s i ze a b l e , н о с ум ешнь ен ы
о о нка
м з аго л вок м
;
; м заго л вок
м
и , по м ещ аем о
е в заго л вк
е
zyxwvutsrqponmlkjihgfedcbaZYXW
151
ин е ж л о д о р П С в о й с тв
о
Canvas
На з н а че н и
е
бО л ас т
ь рис овнаи
ClientHeight, ClienlWidth азРм ер
ы клиеснток
Color
Цв е
Constraints
г Ор а н и ч е тл р аз м е р о
т н фо
я фо рм а рм фо
Cursor
пО р е д л я
т ви
DefaultMonitor
пО р е д л я
т м о н и тр
DockSite
иСо д е р ж др уги
й (3D) ил д крус о
а пр
т знечаи
пО р е д л я
FormStyle
и Ст л
) ы авотм иатечс окг
и не
о и зм ен и
т
и навед ни
и уазкетл
, в котр
м ооаестб раж
е Tr ue, ес л
и к форм
я
я м ыш я рм фо
и н а форм
у
а
е р азр еш ен
о "при сыоткв ьяа
"
м
пО р е д ляю э л е м е но т с аУ н т о в к
з заго л вк
е пред л
ы — оем б нъы
м онка
Font
ы (бе
, ус антвли аю щ и ы
Ви
Enabled
и форм
ы
в форм д фо рм
ы
й час т
Ctl3D
DropKind, DragMode
6.5.zyxw
.лтаб
т в о з м н с то ж
и форм
ы пр
и о пераци я
х перастиквн
я
в т р ц еика
ю форм
а ш о т ри ф
в дл
ы н а с о б ыит я о р мф
ь форм ы . Сво йсвт о м е о ж f sNorm al — фо рм а н е являест f s M D i c h i l d — рм фо а являсет f sMDiForm — фо рм а являест f sStayOnTop — рм фо а вс егд
о р м ф ам
и проатек
, ес л
я м ы ш и
, клавиурт
ы и тайм еро
в
ы т при н м ат я р о д и е с тл ь к я до че р ни я р о д и е с тл ь к а о с ает
и у др уги
ь с ледую щ и
е знаеч и я м ил и до чер ни м онко м MDI; м о нко м MDI; я вверх у р аб о е ч г о онк
х о ок
н н е ус анто вле
н и р еж
: м онко
м MDI;
а на
д др уги м
и
м f sStayOnTop
Heigth
Выс от
HelpContex
И с п о з с у ле ь т
HelpFile
Им
HelpKeyword
л ю еК ч в о
е с ол в
HelpType Hint
И с п о з с у ле ь т иСо д е р ж ау зк е т л
т теск я м ыш
HorzScrollBar
вС о й с в т
а г о р и з н ла ь т
Icon
о и П т г р к ам м а
KeyPreview
ь ио рм нф цаи ю о и оС д е р ж т знеачи е Tr ue, ес л и форм а дн о лж а п о л а ту ч ы ат н аж х квалиш а х р ш ан ь е , че м рас епно ыл ж е в не й оыетк б ъ . рП и зенчаи и Fal s e о римнф аци я о ныат аж х клави ш а х п р и н м с ае т я токль о и та к в н ы м э лем енот м уп р авлени я . Нави гц о н ы е клави ш и ( Ьа , < BackTat», клваиш и с о сртеамлк и и т..д ) в э от м ри м еж е н е учиытваюс я , ат к ка к о н и н е ген ри ую т с о б ыитя . П о ум оналчи ю знеачи е рван о Fa l s e
Left
о К р д и н ат
MDIChildCount
и оС д е р ж
MDIChildren
о сД у т
п к до ечрни
Menu
с С ы лк
а н а гвлано
ModalResult
З н еа ч и д и ал о г в о
, во зврща еам о е онк
Monitor
о П ел у ч н и
е о р м и н ф ца и
Name
и о а тИ к д е н ф
152
а форм
ы с заго л вок я дл
я фай л
м и р ам ок
я о ргани зц
а с првак
и с право нчи к
и дл о дл я дл
й
я о р мф
а
ы
я с правончи к
а
я о ргани зц
и с право нчи к
т по дс азки и
а я пр
, по явлю щ ей с й по л с
, о б о знаючщ а
ы про кут
ы лево г
о угл
а при вязк
р оркыот
и н а форм
у
и
я форм у
т ном е
и наведни
, когд
а он
а с вернут
а
и й до чер н
й MDI- рм фо
м онка
м п о и ндеск
е м ен
ю форм
ы (тм е п и
е форм о й
ы
у )
, ес л
и он
а раб оет
т ка к м ондаль
е
о и о м о ни тре р (им я
) фо рм
, в котр ы дл
л ав Г
я о б р ащ е н и
6. Б азоевы
м оасеотб раж я к не
я фо рм й в про г ам м
лакс ы
а е
азкыя
zyxwvutsrqponm
Delphi
а ин е к ч о О Св о й с т в
о
а Н з н е ч ни
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB е
ParentBiDiMode
И с п о з л ь в ан и
е н ап р в л е н и я
ParentFont
И с п о з л ь в ан и
е ш о т рв и ф
, усанотвле ны
PixelsPerlnch
Чи с л о писк ел в зави с м о с т
й н а д ю й м и о т э ркан о г
. При м енсят
Position
PrintScale
л ас К
, ус анто влен о г
о в б азо в
м л ка с
х в б азо в я д л я
о разреш ени
м клас
я нас рто й к
е е
и разм ер
а о р мф
ы
е в м ом ен т е е о ркты и я . В о зм н о ж ы с л е д ую щ и е е н и оП л ж е о р мф ы н а э ркан з н а еч и я : p o De sig n e d — форм а оасеотб раж я н а э ркан е с те м и р аз м ер ам и и по зи ц ей , котры е задн ы в м о м ент пр о иеткр о вани я ; а осаето б раж я н а э ркан е с р азм ер ам и и п о зи ц ей , poDef a u l t — форм о п р е д ля м ы м и о пераци о н й с и с етм о й ; poDef a u l t Po s On l y — форм а ооаестб раж я н а э ркан е с р азм ер ам и , , о п р ед ля м о й о п ер ац и о н й з ад н ы м и пр и проиетк вани , и по зи ц ей с и е тм о й ; poDef a u l t S i z e O n l y — фо рм а ооаестб раж я н а э ркан е с по зи ц ей , з ад н о й п р и проиетк вани , и р азм ер ам и , о пр ед ля м ы м и о п е р ац и о н й с и с етм о й ; p o Sc r eenCent er — форм а осаето б раж я н а э ркан е с р аз м ер ам и , з ад н ы м и п р и проиетк вани , в цернт е э ркан . В прени лоя ж х дл я р аб о т ы с нес оиклмь и м о ни трам и ме ож т про и с охди т ь нас рто й к а в с о в т ес и и с о свойсвто м DefaultMonitor; а оасеотб раж я н а э ркан е с р азм ер ам и , p o Desk t o p Cen t er — форм з ад н ы м и п р и проиетк вани , и в цернт е э кр ан . Ниак х д о п л н и е т ыь х нас рто е к в рим еж е р аб о т ы с нес окильм и м о ни от р ам и ; p oM ainForm Cent er — форм а о а ес т б р а ж я н а э ркан е с р азм ер ам и , з ад н ы м и пр и проиетк вани , и в цернт е главно й форм ы п р е ни л о я ж , бе з нас рто е к в ри м еж е рбаот ы с нес иокмль и м о ни трам и ; а о а се т б р а ж я н а э ркан е с р азм ер ам и , poOwnerFormCenter — фо рм з ад н ы м и п р и проиетк вани , и в цернт е о р мф ы , уазкн о й в с во й свт е Owner. Есл и э т о с войс т о н е опренлд , т о аолнаигч о poM ainFormCenter М ас ш аб т и р о в ан и е о р м ф ы пр и вывод е н а пеатч ь
Scaled
и оС де р ж в с о в т ес и
ScreenSnap
а з Рр е ш е н и р ас о т я н и е
т значе и
е Tr ue, ес л и р з ам е м с войс т и с о знаеч и е н а с ыоткв , уазкн о
у с грнаице е в с во й свт
е н а ооетнби р аж
ShowHints
аз Р р е ш е н и
SnapBuffer
с а н о тУ в к
Tag
в С яз ы е а
Top
о К р д и н ат
ы угл
TransparentColor
за р Р е ш еа
т п р о з нач с т
TransparentColorValue
пО р е д л я
т цвет
UseDockManager
а з Рр е ш е н и
е и м р еж
VertScrollBar
вС о й с в т
а в е р и н т а л ок ь
Visible
и о С де р ж п р о г ам м
т значе и ы
Width
Ш ир н
WindowState
оС с т я н и
TForm
6.5.zyxwvu
т.лаб
зо н
х дл
т чи с ло в
е з н е ач и
а н а
и с грани це
й э ркан
а
й
и ь ондеолтьг
, котр ы
о цвет
й б уде а сыоткв
е Tr ue, ес л
ы (с вернаут
а
т про з анчы и пр
й по л с
ы с рам ок е форм
и онк
и я с ы от к в
е с фо рм о
а при вязк
я
й э ркан а пр и приенб л ж е SnapBuffer е по дс азк
ы в писк еля
а форм
р форм ы б уд е т п о д г с н ья т а PixelsPerlnch
м
и перастиквн
и
ы пркоту и фо рм
и а б уде
т ви д м
а в о врем
я р аб о т
ы
й , развернаут
, но рм налыь
й р зам е р
) zyxwvutsrqponmlkj
153
Мл уод ь с фо р м о й с оер д ж и т вд е в к л а д и : онд а к а к гр а ф и ч е с к о е о т б р аж ен и е , руд у в к лад м и щ елк н и т е н а со т аг я к а к е т к с о в ы й р е ад к о т р . Д л я п ер к лю ч ен и я м жед ю в су т е щ и х к о р еш к а х и л и и сп о ль зй у т е к лав и ш у . О с а ет я до б а в и ь т , ч т о п оч т и н ев о з м о ж н о к р а кт о , н о п о н янт о о п и с а т ь в с е с в о й св т а фо р м ы . Н ео бхид м о сам о у п о п р о б в ат ь в с е о д пс у т н ы е з н ач ен и я и п о н ят ь и х ед й с т в и е . Н е бо й етс ь э к с п е р и м е н ит р о в а ьт , п о ск о ль к у ч и ат я отл ь к о сп р ав о ч н у ю и н фо р м а цию , н ев о з м о ж н о и з ч уи т ь гр а ф и ч е с к и й и н ет р ф й с Delphi.zyxwvutsrqponmlkjihgfedcbaZY ц ил ба Т
а 6.6. Ся ит ы б о Со бт ы и
е
,меа ыв и ж ре пд о
е ос ал к
с л У о ви
я ге н р а и ц
рП
и аитвк зцаи
OnClose
рП
и зркиаыт
и фо рм
OnCloseQuery
рП
и запро с
е н а зракыит
OnCreate
рП
и с озндаи
On De ac t ivat e
рП
и пеорт
OnDest r o y
рП
и уени отжч
OnDockDrop
рП рП
и рас ыоткв
O n Ge t S i t e i n f o
рП
и сыоткв
OnHelp
о р Фм
OnHide
о рФ м
ез ю м Р
и фо рм
OnKeyPressed
В м ом ен рП
и опуст анки и пер ис о вк
OnPaint
рП зо П л ь е в т а
OnShow
о р Фм рП
а
и фо рм е с др уги
ы м онк
м
е с др уги е оок
м онк
м
н а з ап р о
с н а вы дач
у с п р ав о нч
й (с во й с вт
о v i s i b l e и м е
а неви д м о я клави ш
т ни та жа
и клавиурт
я клави ш
е э лем ент
а
ю ком б и нац ю
, котра
е с во й с вт а уп р ав лени я
а Visible с алт , полюдкечн о г
я по к
а н е о б ра онт
а
о Tr ue) о с р едс втам
и онк
а
е
В эот й н ебо ль ш о й в ал г е бы л и п ер ч и с л ен ы осн овн ы е клас т о сн о в ан и е и е р аи х . И зчену и е иэ т х к л а с о в н е ои д б х м р у т ы с р де ы Delphi и чшлу ге о в о с п р и ят я ад л ь н е й ш е г о м е р аи т л и м о д те ы эи т х к л а с о в н еон д к р на т о у д уб т е л ьд а т с я в адл ь н е й ш е м ч ас т о и с п о л ь з ем уы е э л ем н т ы о сн о в н ы х к лас о в Delphi бу д у л яю
ны р о ь л т К
е False )
и фоуск
ы й (знеачи
и рас ыоткв
т знаеч и
и нали ч
ы
л л ка в и у р т н
а ви д м о
и
ы
и л ка в и у р т
е фо рм ь а жн а
й ио рмнф аци ы пр
и клав и урт
и клваиш
а сла т
ы
ы а ввод
т ни та жа
OnKeyUp On sh o r t Cu t
е форм
е фосук
а сла т
в м о м ен
ы ы
а пиочлу
onKeyDown
OnUpDock
и фо рм
и сыоткв
OnDropOver
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ и
On Ac t i va t e
м TForm
е вопрс
ы Delphi, корты е с о а вт о лд я п о н и м а н и я и а р хе к т . С сы лк и н а св о й ст , п оэмт у н аи бо ле т раскры т ы бо ле е п ор д б н о
а е .
ы
1. Е сл и п р и оп и сан и и к лас а яв н о н е к уа з ы в а т ь баз о в ы й к лас , т о к а о й к лас с бу е д т и с п о л ь з о в а ьт с я в к а ч ев с т е баз о в г ? 2. О т к а о г о к лас а н у а с л ое д в н к лас с TForm? 3. К а к и е св о й свт а фо р м ы в ы м о ж ет е в с п о м н и ьт ? 4. М о ж н о л и п ер о п р едлят ь м о е тд ы к лас а TObject? 5. К а к о й клас с я в л е ст я баз о в ы м л д я э л е м н от в пу р а в л ен и я ? 6. Д л я ч его и с п о л ь з се т у я к лас с TWinC ontrol?zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ
154 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA л ав Г 6. Б азоевы лакс ы яазкы
Delphi
в ал Г
а 7
П р о а ед л ж г и р ча е ф с к и
м и зуачт й и ен йтр ф
В т йэ о
ь с
zyxwvutsrqponmlkjih
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
га ве.л ..
• zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA С а т н ад р н т ы е к о м п о н ен т ы
• Р ез ю м
е
• К о н рт о л ь н ы
Т
еп ер ь
е воп рос
, кодг
а в ы уж , вс е в о п р о с о р и е н ит р о в а н н о г о п р о гр а м и р о в а н и я л м я уо д и и к лас ам и , н ти п , в к о тр м р еал и з о в ан фи з м а . К о н е ч н о , н а н ач л ь н о м ы й ко д п р я м о в л м е уо д Н о н ад о п р и в ы к а т ь о ф р м л ят и сп о ль з о в ат ь лд я да л ь н ей ш е с е л д аь т , т о п ер в о н ач л ь н ы в да л ь н ей ш ем . Н а п р и м е р н о в е к о тр ы х м ожн о с о з ад в т вод а и н ф о р м а ц и . В да н н о к о м п о н е н ты . Н ад о п о сатр ь с р е е и з ч уи т ь о с а тл ь н ы е с а т н ад р н т ы
ы
е з н ак о м
о к лас х
ны р т а д С
е ком понет
ы с яз ы к о т р а с м арт и в аьт с . М о ж н о ч ек т
ы у д уб о н ео бихд м ы воз м ож н ост м э ат п , а н е соз авд т ь ф р а гм е н т й р або т й в ы и гр ы , гр афи ч ес к и ь в се о з м о ж н ы й лга в е я о хр ш е
м D elphi и и м е т е общ е е п р е сд а т в л е н и я от л ь к о с п оз и ц и й о б ъ е к тн о о п р о в ес т и н ек о т р ы е а н а л о ги и м еж д о я ус н и ьт , ч т о к лас с в яз ы к е Delphi — э т и и н к а п с лу я ц и , н а с л едо в а н и я и п оли м ор е о чб у е н и я м ож е т бы т ь о дб н у е е п и сат ь н е о б х ид ь к лас ы , ч т о бе д у т б ы р с ет е и э ф е к ти в н е ы п ро г ам ы к а к к лас ы , ч т о п о з в о л и т и ы и р ас ш и р ят ь и х в о з м о ж н о с ит . Е сл и э от г о н ш в о в р ем н и о б е р н ест я з н а ч и ет л ь н ы м и п о ет р я м й и н ет р ф й с Delphi — э т о н аб о р к лас о в , н а о с е к ом би н ац и и дл я уодбн ог о в од а и в ы у д уб т п р е сда т в л е н ы н аи бо ле е ч аст о и с п о л ь з е му ы о п о н ят ь и х рабоут , чотб ы в дал ь н ей ш е м бы ст к о м п о н е н ты .
е у о . х е и е -
ы
В лг а в е 1 уж е ш е л р а з го в р о к о м п о н е н ат х и б ы л и п р и в едн ы сам ы е общ и е с в ед н и я . Н а п о м н ю , ч т о к о м п о н е н т ы — э т о к лас ы , к о тр ы е можн о м н о г к р а нт о и сп оль з о в аь т . О н и в к лю ч ен ы в с р ед у п р о гр а м и р о в а н и я Delphi и и х п и к от гр ам ы о тбр а ж а ю ст я в о к н е Tool Palette (П а л и рт а к о м п о н е н т) . В о лти ч и е о т э л ем н от в пу р а в л е н и я , к о тр ы е о б я з а ет л ь н о о тб р а ж ю с т я н а э к р ан е в о в р ем я р або т ы и л и п р о ек ит р о в а н и я , . Н аи бо ле е ч аст о и с п о л ь з е ум ы е к о м п о н ен т ы р а с л д я к о м п о н е н то в э т о н е о б яз аетл ь н о п о л ж ен ы в р а з е лд х Standard, Additional, Win32, System и Dialogs. С и х п о м о щ ь ю м ожн о с о з а вд т ь гр а фи ч е с к и е и н е тр ф й с ы п о л ь з о в а етл я , п о ч т и н е п р и бега я к ч р ну о м у к о ид р о в а н и ю . Н о лд я эотг о н жун о н е то л ь к о з н ат ь с в о й св т а и модет ы к о м п о н е н та , н о и о рх ш о п он и м ат ь п ри н ц и п ы п о с рт е н и я гр а фи ч е с к о г о и н ет р ф й с а . Че м с бо ль ш и м , е т м легч е е д уб т р аз р або т ь и н те р ф й с , к о л и ч е св т о м к о м п о н е н от в в ы о з н а к о м и етс ь овтеч а ю щ и й з адн н ы м рт е б о в а н и я м . В к н и г е р а с м о рт е н а от л ь к о ч аст ь са н т д р н т ы х к о м п о н е н от в . Н ач н е м с к о м п о н ен т а TLabel.
оК м п о н е
т TLabelzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA К о м п о н ен
О бы ч н п о ль зю у п о н ен т
) жслиу т TLabel (Н апд и сь о н а пд и с и и сп о ль з юу т к а к з аго л в к т и к а к атбл о лд я оотб р аж ен и а TLabel в ы п о л н и т е с ю л уе д щ и
1. С о з адй т 2. Р аск р о й т 3. Щ ел к н и т от ч н ы м 4. Е сл щ ел к н и т
т лд я и н фо р м а ц и е д е й с вт и я
я п о лчуен и и к дгиру
я к о р кти м к о м п о н е н та м . Д л я р а з м е щ е н и
х н а дп и с е
й в фо р м е . о и х ис е ком -
, н о ч аст я в фо р м
.
е н овы й п р о ек т VCL Form Application. е раз ед л Standard и щ е л к н и т е н а к о м п о н ен т е TLabel (р и с . 7.1). е н а фо р м е в то м м ест , дг е долж н а р а з м е щ аьт с я н а дп и с ь . О с о б ен н о , к о м п о н е н т в д сге а м ожн о п ер м ещ ат ь п о фо р м е . и бы т ь н е сатр й етсь и с чл у а й н о п о м е с ит л и в фо р м у н е то т к о м п о н ен т , т о в ы едли т е его , дл я ч ег о е к лав и ш у . е мы ш ь ю н а н е м и н аж м и т
В А «• f i
ll й ) Documents and Settings rJJInetpub | eSProO'am Files Ј3 second 3 WINDOWS
fie name:
Files of Jype:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG
.... Ри с
Бо л ь ш о
. 7.6. Вызо
п р ео д с а т в л я фа й л о в
е ч и сл о з н ач ен и я в о з м о ж н о с ьт . В табл . 7.2 п ер ч и слен
аТ б л и ц
а 7.2. Ва ри нт З на еч ни
в ди ало г во г
ы вборы
рП
o f O ve r wr i t e P r o m t
о дл
е н р и Г еу й ла фа
я свойст в
и ди ало г во г я е нт ч и я
а е о т Об р а ж
ы и л
ы в ы бо ра и пгр у
, ы
.
о онк
а п о ум о лачни
е щ ке л ч й б ы
е с о б щ ени г дл
е и с п о з л у ь ес т я у с а н то в к
а н а кно пк л д о оркыти т н ок п
ю у с а н т в л и а се т
я и р еж
м
" й уж
т фла оПс л о к тр ы
ь р еж и м е фа й л
а Option
т п р де а ю у щ ж е , октры
д ал я е У
т н а с рт о и т о о ид н о ч н ы ы вы бора
е и оркыит
"тк оьл
o fSh o wH e lp
а дл
О п и с а ни
o fR e a d O n ly
o fH i d e R e a d O n l y
а
й дл я свой вст а Option п о з в о ляе , н а п р и м е р , в ы би р ат ь от л ь к ы вс е допсут н ы е в ар и ан т
е
o fN o C h a n ge D ir
о онк
, ес л
и п р о и с о х ди
т вы б о
р
я и и м р еж е О К пер ус антвли ае я ди ало г в о г
а "ткоьл
о дл
я е нт ч и я т е у щ тк и
о онк
" й ал о т к
г н а от
,
а
у Help zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON
162 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA изчуат ь и чгерсафикй л ав Г 7. аерПмо длж
и нт е й рс ф
а ин е к ч о О З н а че н и
е
o f N o Va l i d a t e o f A l l o w M u l t i S e l e c t
Оп и с а н и
е
м тО е н я с недо пуситм ым
т про верк
за р Р е ш еа
o f Ext e n s i o n D i f f e r e n t оЭт о л и т а ч ес и с п о зл ь у е с т я o f Pat h M u s t Exi s t o f Fi l e M u s t Ex i s t o f Cr eat ePr o m p t o f shareAware
т вы б о т фла
o f N o Te s t Fi l e C r e a t e o f N o N et wo r k B u t t o n
o f NoLongNaroes
т с о б щ ени
е н рГ и у е н е с ущ е с в тую щ е г
т с о б щ ени
е н рГ и у е н е с ущ е с в тую щ е г
т с о б щ ени
И г н о р и уе
т зап р е
. азРр еш ае
т во
д и м ен
и
в
, окгд
а р ас ш и р ени о п о ум о лчани ю е е г о п е р ус ан т в л и ат
о ол а г т к
е о б о ш и б ек а
о фай л
е о б о ш и б ек а (тколь
о файл
е о б о ш и бек а с запро с
е выб ран о г . с Ел и э от ь
, ес л
и пр о и с ох ди
, ес л о дл , ес л
т н а с о вм ес нот
и п р о и с ох ди я ди ало г в о г
о онк
и пр о и с ох ди м н а с о здани
е но в г
о фай л т фла
т вы б о
р файл
т выб о
р а Open)
т выб о
е и с п о зль вани
а г а и з
р о фай л
а
е и р аз р еш ени
е вы б о р
а
а е н Г р и уе в и мр еж
т с о б щ ени е "ткоьл
З ап р е щ ае с И ез т у п о ь л
е о б о ш и б ек я е н ти ч я "
о дл
т про верк
у с евто о пр и синераох
я ткоьл
, ес л
т о кт л ь
o f o i d s t y l e D i a l o g
о С з д еа
т с ар т ы
й ситл
э л е м е но т
о э лем ент в ал о т к г
(Windows 98 и б о ле м ыш и ил и клавиурты н е з ав и с м о о т усанот в и с п о з л ь в ан и и п р о ц е ду
o f DontAddToRecent
З ап р е щ ае
o f Forc eShowHidden
ар и н т Г уе
т ви д м о с т
л . й кола т г
) и з ди ало г во г
о м л аг ф
а файлов
а вы б о р
. Ис позлуьест
а й ло фа
е с о р к ащ е н и е срша т ие.
) Пос еыал
и о ткр ы ти
и катало га
а ал о т к г
. Мн ож
zyxwvutsr е
я пр
и
в
й Windows т в у е од м л е н и е
. У в е д о м л е н и
е п о с ы лаетс
о и с позль ват
ь дл
я
я о к рн т л
я
а е ср а ш т и е . ) азРреш ае . П о ум о ланчи к эот й о п ц и ы п е р в т ах ь ай ф
т до б авлят
ь ди с ко в й севот
х ди с ок в до в о п р и ус анто влен о
е и м ен
ь ди ало г
C D N I N C L U D E I T E M п р
я д о г а жк
т й фа
е o f o l d s t y l e D i a l o g
ofNoDef e r e n c e Li n k s Запрещ ае т р аз ы м е н о в а и of En ab l e in c l u d e N o t if y (Windows 2000 и боел дл
ь в ы б и р ае а и до с утп но с т в в с овм есныт
е с евты я токль
о 8.3- с им нывоьл м л аг ф
и позль веат
ы файл и файол
й защ и т
б иУ р а е т н ко п у Network (ориыкт он к а вы б о р а ай л о в ф . Ис позуельт ofOldStyleDialog ус ан то в л е н о
л в с пис о
ь с ркыт
ы п у р а в л ен и я п р о е д са в т л я ю Д и ало г в ы е э л ем н т Windows, с п о м о щ ь ю к о тр ы х п о л ь з о в а е тл н и й о п ер а ц и и — октры ит е фа й л а , вы бо м ер , к о м п о н ен т TOpenD ialog с тевял п н р де аз н ач не ы м дл я вы обр а фай л .
мо н е К п
и файл
х й ло фа
г ус ант вли аест я я о т усанто влен о г , н е заб ывй т
оа е т О б р а ж
o f En a b l e S i zi n g
в в и м ен и
р ин е с к о ьл
е н рГ и у е н е с ущ е с в тую щ е г
й л фа o f No Read o nlyRet ur n
у с им во л и с и м в о л ам
1.2.zyxwvut
. лтаб
т и з м е н ят ю и зм ен и . Он а ртеб уст
ь р за м е р я о кт л ь
ю о
а к недавн
х й ло фа
о оркты в
т общ и , н асрто й к
х ай л о ф
в
zyxwvutsrqponmlkjihgfedcbaZYXWV
т с а т н ад р и т з и р о в а н н ы ь в ы п о л н яе р ш р и фат я ан и с т р з д р о в ан ы
ы с по м о щ ь в разреш ен о пр и
е разм еро
е и н ет р ф й с е л д я м н о иг х п р и ло ж е а ц в те а и гр и д у е . Н а п р и м мэ н е л о т м п р у ав н л е и я
ы ,
т TSaveDialog
К ом п он ен т T S a ve D i a l o g ( С о х р а н и т T O p e n D ia lo g и о т л и ч а е т с я то л ь к о н а дп и с я м
т С а р н д т не ы
ком по не т ы
ь фай л и дл
) п о л н о с т ь я о тде л ь н ы
ю и де н ти ч е х э л е м е н то в
н ком п он ен т у .zyxwvutsrqponmlkjih
163
о м К п о ен
т TCheckBoxzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB
) п р еодсатв ляе т вд а в ар и ан т а в ы бо р а — ег о м о ж н о т TCheckBox (Ф лаж о к с а ту н о в и т ь и л и с б р о с и ьт . саУтн о в лен н ы й фл а ж о к ом т еч н к р е с ит к о м , у с б р о ш ен н о г о фл а ж к а к в а рд и т к п со т й у . П о ль з о в аетл ь м ож е т п ер к л ю ч и т ь фл а ж о к с п ом ощ ь ю мы ш и и л и к лав и ш и п р о б ел а . Д л я п ер к лю ч ен и я с п ом щ ь ю к лав и ш и п р о б ел а фл а ж о к од л ж е н и м ет ь фо к у с в ао д . П о сл е р а з м ещ ен и я к о м п о н ен т а фл а ж о к в фо р м е , з аогл в к к э о тм у э л ем н т у п у р ав лен и я м ож н о з атд ь в свой ст е Caption. Р асп ол ж ен и е з аог л в к а о п р е л д ся т я св о й ст м Alignment: з н ач ен и е t a R i gh t J u st i fy оз н ач е т р а с п о л ж ен и е п од и с и сп р ав , а з н ач е н и е t aLef t J u s t i f y — вслеа . Г лавн о е с в о й вс т о фл а ж к а н а з ы в са е т я Checked. О н о од с п ут н о лд я и з м е н е н и я и н а э а пт е п р о е к ит р о в а н и я , и н а эапт е р аб о т ы п р о г ам ы . Э т о с в о й вс т о п р и н и м ае т з н ач ен и е True, есл и флаж о к в к л ю ч ен , и F a lse , есл и о н сбр о ш ен . т н о а их д ь т с я в рт еь м , "ч а с ти ч н о су та н о в л е н н о м " с о Н ек о т р ы е фл а ж к и м у ог с то я н и , кодг а п ри з н а к усатн овк и фл а ж к а о т б р а ж ес т я п р и г лш у е н н ы м ц в ео т м . Т ак о е с о т ян и е п о з в о л яе т со бщ и т ь п о л ь з о в а е тл ю о н еп о лн о м с о в т ес и и куа з н н о м у с у ат с у (н а п р и м е р , в ход е усатн о в к и п р о г ам м ат к и м о бр аз о м с о б щ а е ст я , чт о лд я су ат н о в к и в ы бр ан ы н е вс е допсутн ы е с р е д вт а ) . о з н ач ен и е True, т о фл аж о к п р и п о с л ед в а Е сл и лд я с в о й с в т а AllowGrayed з адн т п о ч е р нд о п ри н и м ат ь с о т ян и я "с б р о ш е н " , "усат е л ть н ы х щ ел ч к а х н а н е м е д уб н о в ле н ч а с ти ч н о " и "ус та н о в л е н " . О п р едли т ь е тк щ у е е с о т ян и е и л и з а дт ь н ов е и з ч и сл а о дп с у т н ы х м ожн о , п р о в ер и в и л и и з м ен и в с в о й свт о State, з н а ч е н и я к о тр г о п р и в е дн ы в а тб л . 7.3. обтЧ ы р е а ги р о в а т ь н а и з м ен ен и е с о т ян и я фл а ж к а , н ад о с о з адт ь о бр а очт и к с о б ы ит я O n c lic k (П р и щ ел ч к е) .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR К о м п о н ен
Та б л и ц
а 7.3. З на еч ни
и не ч а н З
е
я свойст в
а State и н я от с С
е к жал ф
c b Unc hec ked
бС р о ш е
c b Grayed
с а нУ т о в л е
н ач с и т н
c b c hec ked
с а нУ т о в л е
н
а
н о
Р ас м р и о т м н б о еь л ш у ю п р м ао г у , жраюот щ у ю и з м ен ен и я сосятн и я л фа ж к а и вы дов а щ к е у т г о с о ят н и я в н пад и с ь Label 1. Дл я оэгт о н и о д м еб х о р а з м и ес т ь в оф р м н п ад и с ь и лф а ж о к , уан ст ови т ь з н а ч ен и е св о й т а AllowG rayed равн ы м True, с фо р м и р о в ат ь о б р а о чт и к с о б ы ит я O n c lic k лд я флаж к а (вклад а Events в и н с п ек от р е о б ъ е к тв и з ап и сат ь в н е м о п е р а от р в ы бо р а е тк щ у е г о с о т ян и я фл аж к а , к а к п о к а з а н о н и ж е . p r o c e d u r e TM yF orm .C h eckBoxlC lick(Sen der: T O bje c t ) ; b e gin zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA case CheckBoxl.State of 1 cbUnchecked: Label1.Caption := 'во н е ч ю л к ы ; cbGrayed: Labell.Caption := 'з ' оненмета ; 1 cbChecked: Labell.Caption := 'во н е ч ю л к ; end end; Р е з л ь а ут т п р о г ам ы п о к аз н н а р и с . 7.7.
иР с
164
л ав Г
. 7.7. Просм от
7. аерПмо длж
р синояст
й к жа фл
изчуат ь
а
и чгерсафикй
е )
zyxwvutsrqponmlkjihgfedcbaZY
и нт е й рс ф
о м К по н е
т TRadioButtonzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED В л ои т ч
в ы бо р п гр у а м и ле ч а т
е о т фл а ж к а , к о м п о н ен т TR adioButton (П ер клю чеалть ) п р енд аз н ач е н дл я о п ер к л ю ч ела т я и з р дя а в о з м о ж н ы х . П ерклю чеалт и д г вес а и сп о ль зю у ст я . К одг а п о л ь з о в е ла т ь в ы б и р ае т оид н и з н и х , т о вы елдн и е с тщеку г о п ер к л ю я сн и м аестя . Т ак и м образ ом , в гп ру е в ы ел д н д г вес а отл ь к о оид н п е р к л ю ч е л аь т . и с о з да н и и грп у ы п е р к л ю ч ае л т й н а фо р м е н ад о р асп о л ж и т ь н еск о ль к о в T R adioButton . П ро г ам а п о й м ет , ч т о в ы едл н н ы м од л ж е н бы т ь от л ь н и з н и х . а п е р к л ю ч а етл я а н а л о ги ч н ы с в о й св т а м фл а ж к а . С в о й свт о Alignment о п р е т п о л ж ен и е п о дп и с и сп р ав а и л и с лве а о т п е р к л ю ч а етл я , а свой свт о Checked — е о б ъ екат . ы G etC hecked и SetC hecked, п о з в о л яю щ и е о б р а щ а ьт с я к свой свт у Checked ь ег о з н а ч е н и е , в текст е п р о г ам ы яв н о н е и с п о л ь з ю у стя . О н и п р е дн а з н а дл я и с п о л ь з о в а н и я в п р о и з в онд ы х о т к лас а T R adioBu t t on класх . я о тс л е ж и в а н и я с о т ян и я к о н к р е нт о г о п е р к л ю ч а е тл я н е о б и хд м о обра от ь е O n c lic k. а он д г
Пр к о м п о н е н от к о о ди С в о й с вт е дл я с о т ян и М о е тд и и з м ен ят ч ен ы Дл с о б ы ит
С п мо щ ь С щ оп м ь ле т
ю фжокал ю пе л тю алчк ер ь и з гп ы ур
в л е тп ь з а лв о
ь е ж ом й л е т а в зь о п л
т на ивотс у ь еж ом
ь и до т ю л и ч кт в
н и л и н к ь со л е ь ьк л о т о ои д
о и з н и х
.
н ю л к а че р п
-
.
В фо р м е од с а т ч н о р а з м е с ит ь н ес к о л ь к о п е р к л ю ч а етл й , н о и з а п с ку а п ро г ам ы е д бу т в ы ел д н в д сге а от л ь к о о ид н и з н и х . В в ан и я о ид н и з п е р к л ю ч а е лт й ж ел а т ь н о в к л ю ч и ьт , а в с е о с а тл ь н ы оа в с и т ь в ы к л ю ч ен н ы м и . Елс и с те р б у я с о л е жт и в а т ь с о тян и е п ер к л ю ч е а т м и ч ес к и , соз айд т е о б р а ч ти к со бы ит я O n click лд я кажодг о и з н и х ле т я м о ж н о оотбраз и т ь с п ом щ ь ю н пад и с и L a be ll, к а к и в п ри м ер procedure TMyForm.RadioButtonlClick(Sender: TObject); begin if RadioButtonl.Checked then Labell.Caption := 'Ва р б ы н л е т а пч ю л к е р е ь 1' end;
п о сл о в р ем
е к о м п и л я ц и я п р о е к ти р о е п о му о л ч а н и
и ю й ди н а
. у таС с п ер к л ю ч а е дл я фл а ж к о в
-
.zyxwvutsr
procedure TMyForm.RadioButton2Click(Sender: TObject); begin if RadioButton2.Checked then Labell.Caption := 'Ва р б ы н л е т п ачюлкере ь 2' end;
о м К по н е
т TRadioGroup
Е сл и в п ро г ам е р тс е б у я и сп о ль з о в ат (н а п р и м е р , онд у лд я ку а з н и я п р е дп р и я и т я оид н и з в у д х п о д вх . П ер в ы й с о ит т н о г о к о н ет й н е р н о г о о б ъ ек т а (п а н ел и ) , чобт д и н я ю тс я п е р к л ю ч а те л и . В отр й по х д TRadioG roup (Гпру а п е р к л ю ч а е тл й ) о б ес п еч и в а ю щ и е п о е др ж к у р аб о т ы пгр у П о сл е р аз м ещ ен и я в фо р м е к о м п о н ен т ле т и з а ю д с т я п ер ч и с л ен и е м и х н аз ван и й и м ею щ е е ит п T S t r in g. Т а к к а к тсретбу в од а п рс м еу д о т н с п ец и аль н ы й р еа д к о т
т С а р н д т не ы
ком по не т ы
ь н ес к о ль к о п р гу п п е р к л ю ч а е тл , а угрд ю лд я в ы б о р а ) , м о ж н в в ы ед л н и и лд я к а ж о д й пгр у ы с и с ет м а Delphi молг а п о н я ть д со ти т в и сп оль з ован и и , к о тры й о б ъ е ид н я е т с в о й вс т ы п е р к л ю ч а е тл й . а TRadioG roup воящдх и е в н ег . Э т и н а з в а н и я в о с я тд я в с в о й свт я в ес т и н е онд у ср т о к у , а н ес к о л ь к о р (р и с . 7.8), к о т р ы й в ы з ы в а се т
й о п р и м ен и т ы сп ец и аль , к а к о б ъ е к о м п о н ен т а и м о ые т д
ь а ,
о п ер к л ю ч а
о Items, , дл я и х я щ ел ч к о м zyxwv
165
н а кн оп к е с м н о г т ч и ем , р а с п о л ж ен н о й в ласт ь окн а р а е кд о т а п р е дн а з н а ч е н а лд я в од в кажод й ср т о к е . Н е з абы вай т е о в о з м о ж н о ст и в и р ы уа т , п о э тм у п ер д н ек о т р ы м и к б ув а м и ч о бт ы с е лд а т ь э т и к бву ы п о дч е р к н ы т у м и . З ает ви д о б ъ е к т а R adioG roupl п р и м е т в и д , п о дбн ы
Ри с
. 7.8. Реодтак
р срто
арб ы В
к
п ол е лд а н аз в ан и п у р а в л ен и в н аз в ан и я м щ ел к н и т й и з о б р аж ен н о м
я с в о й свт а Items. Т ек сот в а я об й п е р к л ю ч а ет л й , п о нод м у я п р о г ам о й с п ом щ ь ю к ла х м ожн о к уа з т ь си м в о л "&", е н а кн оп к е КО , и в н еш н и й у н а р и с . 7.9.zyxwvutsrqpon
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON
н теырвЧ
й
•
Ри с
П о ск ль к к л ю ч а е тл я м и Т ак , св о й свт пгр у ы (и осндх Items (С п и с о с о з а вд е м ы х р е к л ю ч ае л т я
. 7.9. Ком по не
т TRad ioGroup
у к о м п о н ен т TRadioG roup п раседвтля т е ид н о е ц ел о е с о свои м и п ер , т о и суатн о в к и ег о с в о й с т в о л ит ч а ю с т я о т к о м п о н ен т а TR adioButton . о Caption о п р едля т н е н а пд и с ь к а ж о гд о п е р к л ю ч а ет л я , а з аго л в о к о о н а н а з ы в а ест я RadioG roupl). Н апд и с и ет п р ь з а дю ст я в с в о й св т е т ч и сло со т л б ц о в (п ер в о н а ч л ь н о о ид н ) , к с рт о к ) . С в о й свт о Columns з аед п е р к л ю ч а е тл я м и . С в о й свт о Itemlndex соердж и т н ом е р в ы ед л н н о г о пе (ч и сл о - 1 п о к аз ы в ает , ч т о н и оид н п е р к л ю ч а е тл ь н е в ы бран ) . П р и в ы - zyxw
166 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA л ав Г 7. аерПмо длж изчуат ь ги черсафикй и нт е й рс ф
п о лн ен и з о в а е тл гр а м н о в ы бран н ы
и п ро г ам ы з н а ч ен и е э от г о с в о й свт а и з м е н я е тс я а в от м а ит ч е с к и , к огд а п оль ь в ы би рае т о ид н и з п е р к л ю ч а е тл й г р пу ы . Р аз р еш аест я м ен ят ь ег о и п р о : п р и з а н е с н и и н ов г о з н ач ен и я в с в о й с вт о Itemlndex и з м е н и тс я и ет к щ у и й й п е р к л ю ч а е тл ь фо р м ы . Д и н ам и ч еск и р е а ги р о в а т ь н а вы бо р н ов г о п е р к л ю ч а е тл я в п гр у е можн о с по м ощ ь ю о б р а о чт и к а с о б ы ит я O n c lic k. Н а п р и м е р , чотб ы о тб р а ж т ь с п ом ощ ь ю н ад п и с и L abel 1 н а з в а н и е е тк щ у е г о п е р к л ю ч а ет л я , н ад о о браит ь с я к с в о й св т у Items и в ы ед л и т ь от т э л ем н т , н о м е р к о тр г о з ап и са н в свой свт е Itemlndex. П р евд а р и етл ь н о е у с лд т п р о в е р и ьт , ест ь л и в ы едл н н ы й п е р к л ю ч а ет л ь (з н ач ен и е с в о й свт а Itemlndex н е до л ж н о бы т ь рав н о - 1), и л и вы брат ь о ид н и з п е р к л ю ч а е лт й н а э ат п е п р о е к ти р о ван и я (н а п р и м е р , п р и с в о и в с в о й вс т у Itemlndex з н а ч е н и е 0). p r o c e d u r e T M yF orm .R adioG rouplC lickfSen der: T O b je c t ) ; b e gin i f R a d io G r o u p l. I t e m ln d e x> - 1 t h e n L a b e l l . C a p t i o n := 'В ы б р а н ' + R a d io G r o u p l. I t e m s[ R a d io G r o u p l. I t e m ln d e x] ; e n d ;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
оК м п о н е
т TListBox С п ом щ ь
ю к о м п о н ен т а T ListBox (С п и с о к ) п о ль з о в аетл ь м ож е т в ы бр ат ь о ди н ил и о е г о э л е м н от в . Елс и э л е м н от в м н ог о и о н и н е м уещ а ю с т я в о вт е д н н о й л д я н и х о б л а с ит , т о авотм аи ч еск и од б а в л я е с т я в е р ит к а л ь н а я п ол с а п р о к р ту и . П е р й в фо р м е , и з о браж сет я в ви д е п су в о н ач ль н о к о м п о н ен т TListBox, р а з м е щ е н н ы о тг о к в а р д т , и ег о раз м ер ы м ожн о и з м е н я ть . Э л ем н т ы сп и ск а м ожн о до б а в л ят ь ил и а л ятд у ь ди н а м и ч е с к и . т сп и со к ср т о к , в ы в оид м ы х н а эк С в о й с вт о Items и м е т ит п T S t r i n gs и соедр ж и ран . В о в р ем я р а з р а б о кт и п р о г ам и с т м ож е т р еад к и т р о в а т ь с в о й свт о Items с п о м о щ ь ю р еа д к о т р а сп и ск а ср т о к . В о в р ем я в ы п о лн ен и я э л ем н т ы сп и ск а м ожн о од б а в ь — с п о м щ ь ю м о е дт а D elet e л ят ь с п о м о щ ь ю о м д те а Add клас а T S t r i n gs, а алтяд у э от г о ж е к лас . С в о й свт о Itemlndex соедрж и т п о р я кд о в ы й н ом е р в ы ед л н н о г о э ле м е н ат , дл я п ер в о г о э л ем н т а з н ач ен и е Itemlndex р ав н о 0. Е сл и н и о ид н э лем н т н е в ы едл н , т о з н а ч е н и е Itemlndex р а в н о - 1 . С в о й свт о MultiSelect п о з в о ляе т в ы ед л и т ь не ск оль к о э л е м н от в (срто к и ) с п и с к а . С в о й св т о SelCount режсоид т к о л и ч ве с т о в ы е л дн ы х э л е м н о тв , а свой вст о Selected т л и э л е о п р елдя т , вы елд н л и к о н к р не т ы й э лем н т . С вой вст о Sorted оп релядт , у д уб м ен т ы в ы в е нд ы в алфв и н т о м п о р я кд е . С в о й свт о Style и з разлед а Miscellaneous з аед т в н еш н и й ви д э л ем н отв . П о м уолч ан и ю э л ем н т ы в ы с ят о д я в в и д е р с от к , о дн а к о , и з м ен и в свой вст о Style, и х м ож н о вы всет и в графи ч еско м ви д е и л и с раз н о й в ы со тй . С п и со к м ож е т и м ет ь н ес к о л ь к о с от л б ц о в . Э т о н е о з н ач ет , чт о к аж ыд й с от л б е ц п р ес ад т в л я т соб й е о лд т ь н ы й сп и сок , п р о ст о п р и з ап о лн ен и и ви д м о й ч аст и сп и ск а с рт о к а м и с в ер х у вн и з , о ч ернд а я р с то к а о т б р а ж ес т я в ю с ул е д щ е м с от л б ц е . В о с т рабо т ь ат к ж е , к а к и о б ы ч н ы й . а тл ь н о м та к о й сп и со к бе д у Чи с л о сот л б ц о в з ас ед т я с п ом щ ь ю с в о й с вт а Columns. Е сл и о н о боль ш е 0, т о н а к ау ж д ю кол н к у ов т и д с я ч аст ь о б щ ей ш и ри н ы сп и ск а (з н ач ен и е с в о й св т а Width, де лен н о е н а ч и сл о с от л б ц о в ) . С п и с о к м ож е т п р и н а лд е ж а т ь он д о м у и з п ят и воз м ож н ы х ти п о в дл я св о й свт а Style, п ер ч и с л ен н ы х в таб л . 7.4. о i b st a n d a r d , п р о г ам и с т до л ж е н с фо р м и Е сл и з н ач ен и е с в о й вс т а Style н е р ав н р о в ат ь лд я с п и с к а о б р а о чт и к с о б ы ит я OnD rawltem и сам о стяель н о о р га н и з о в а т ь п ро и со в к у с о е др ж и м о г . Т а к о й сп и со к м ож е т с о е др ж а т ь н е отл ь к о етк с , н о и дргиу е о б ъ ек ыт , н а п р и м е р р и сну к и . з Ун ат ь в ы со т у э л ем н т а в п и к с ел я х м ожн о , о б р аит в ш и с ь к с в о й вс т у ItemHeight.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC н ес к о ль к
т С а р н д т не ы
ком по не т ы
167
ц ил б а Т
а 7.4. Зи ен ча н З на е ч и
е
я дл
я свтс й о в
Ст и л
i b s t a n d a r d
а н тд С р ы
ib Owner Dr awFixed
д ы аж К о е н т би р а ж
ь с пис к
а
zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF
й с пи о
к (силт т с пис к
й э лем ен е с по с б р кдо г жа
а р и с о вани я о э лем ент и рзаны
ь п о ум оналчию а им е
я о предлсят
ib Owner Dr awVar iab le рКо м р аз м е с э лем енамт i b v i r t u a l
а Style
)
т фиск р о ван у
ю в ы с оут
я прогам м и с от , в теск т а с пис к х рзам еров
, н о с по с
б ег о
м е п р о г ам м а (чт о п о зв ляе )
ы нео б х ди м т с о здав т
о явн ь с пис к
о задвт и
пС и с о к являсет я в и н р у аыл ь т м , н о вс е э лем ент ы — э т о срто к и одинакво в ы с о ыт . Чи с л о э лем еонтв с пис к а с о рханяест я в с во й с вт е Count. а с п о м о щ ь ю о б ра оичтк а с о б ыит еН о б х д и м о усанот виь э лем ент ы с пи с к OnData. Есл и э елм ент ы с взяна ы с оматек иб ъ , т о необидхм о изсотвапьл и ч б о т ар к си обыт й OnDataob jec t. И нцоен ка , нн жу о уоинвтас ь сив ст ев от мд е ж у с ртоамк и и инсдекма и дл я о б р а оичтк а с о б ыит й OnDat aFind
ь
й й ь е
i b vi r t u a l O w n e r D r a w пСис о к являсет я в и н р у аыл ь т м , н о вс е э лем ент ы — э т о сротк и одинкаво й в ы с о ыт . Ка к и дл я ib Owner Dr awFixed , вы с о т а с и м во л в о предслят я с во й т м i t e m He i g h t , а с войс т а с им вол в мн ож о унсоавит ь с пом ощ ь ю о б р а о ич т к а с о б ыитя OnDrawItem. Ка к и дл я i b v i r t u a l , колиечсвт о э л е м е но т в с орханясет я в с во й свт е Count. Тжак е нео б х ди м о усанотви ь э ле м е н т ы с пи с к а с пом ощ ь ю о б ра оичтк а с о б ыит й OnData. Есл и э лем ент ы с в я з ан ы с оаемтк б ъи , с леду т и с позль ват ь о б р а очит к с обиыт й OnDat aOb jec t . И ноакнец , нео б хди м о ус анто в и т ь с о всет и е мд еж у с р т о ам к и и индсекма и дл я о б ра оичтк в с о б ыит й OnData и OnDat aFind zyxwvu
Е л с и в ы ос т а э л ем н о т в сп и ск а р аз ли ч н а , т о п ре д о бр ак т й со бы и т я OnD rawItem о о бра о т ь с о б ы ит е OnM easureltem. В з аго л в к е с о в т ею у щ е г о о б р а очт и к а я п а р м е рт , о п и с а н н ы й та к :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ var Height: Integer; В эо т т п а р м е рт , п ер адв ем ы й п о с ы лк е , н ад о з а п и с а т ь раз м е р о ч ер н д о г о э ле м ен т а (ег о н о м е р к у а з ы в а ес т я в п а р м ет е in d ex) , а з еат м ж у е о бра от ь со бы ит е м текщу е й в ы со т ы э л е м н ат . OnD rawItem с учоет В ы б и р ат ь э лем н т ы в сп и ск е м ожн о п о онд ом у , а м о ж н о и н ес к о л ь к о о нд о в р е м н н о . С в о й свт о MultiSelect (ти п Boolean ) п о з в о ляе т в ы би рат ь н еск о ль к о э л е м н от в , есл и ег о з н а ч е н и е рав н о True. В ы елди т ь п рг у у э л е м н от в м ожн о , есл и п р и п оердх е к о ч ер н д о м у э л ем н т у е рд ж у и в а т ь н аж от й к лав и ш у . Т а к я в о з м о ж н о ст ь по я в л ест я , есл и в св о й свт е ExtendedSelect саутн о в лен о з н ач ен и е T rue. С в о й ст о SelCount (о н о дпоуснт о толь к о дл я чент и я и н е м оже т бы т ь и з м ен о в текст е п рм а о г ы ) ржеисод т ч и сл о в ы н ле д ы х р о ст к сп и ск а . обтЧ ы о п л ие ь р д т , выел д н л и к о н к р те ы й э л ем н т , н оад , и сп ольз у я ге о н о м ер , иоьбратс я к в со й т у Selected, п ред а в лю яс т щ ме у со б й м ас и в ит п а Boolean. З н ач ен и е в ы р а ж ен и я L ist B o x. S e le c t e d [ 4] е д уб т True, есл и п я ты й э л ем н т (осчте т с ве т д я с н л яу ) в с п и с к е в ы е дл н . Е сл и в ы е лд н и е н ес к о л ь к и х э л е м н от в н е р а з р е ш е н о , т о зу н аьт , к а о й э лем н т вы де л н , м о ж н о , о б р а ти в ш и с ь к с в о й св т у it eraln d ex, рха н ящ ем у н ом е р е ид н с в т е н н о г о в ы е дл н о г о э л е м н ат . С о е др ж и м о е сп и ск а р ха н и ст я в ж у е пу о м и н а в ш е м с я ран е е с в о й св т е Items (с п и с о к ср т о к , клас с T S t r in gs) . С рто к и м ожн о с о а тв л я ь н а э ат п е п р о е к ит р о в а н и я в сп ец и аль н о м р еад к о т р е , а н а л о ги ч н о з а дн и ю с о едр ж и м о г о г рп у ы п е р к л ю ч а е тл й , а м о ж н о и в о в р ем я р або т ы п р о г ам ы с п ом щ ь ю м о е дт а Add к лас а T S t r in gs. Н ап р и м ер , есл и н ео бхид м о з а н ес т и в сп и со к з н ач ен и я , оотбраж ем ы е н а н а пд и с и L a b e ll, т о в фо р м у м ожн о до б ав и т ь од п о л н и е т л ь н у ю кн оп ку , а в о бра очти к е щ ел ч к а н а эот й к н о п к е (со бы ит е O n c lic k) вы з ват ь м о ет д Add.zyxwvutsrqponmlkjihgfedcbaZYXWVU н ад и м се т
168
л ав Г
7. Паермо длж
и зчуат ь
и чгерсафикй
и нт е й рс ф
procedure TMyForm.Button2Click(Sender: TObject); begin ListBoxl.Items.Add(Labell.Caption); end;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Э л ем н т ы сп и ск а м ожн о пу о р яд ч и т ь в а л ф в и нт о м п о р я дк е , суатн о в и в в с в о й свт о т с о р ит Sorted з н а ч ен и е True. П о сл е э от г о п р и до б а в л ен и и н овы х э л е м н от в о н и у д у б р о в аьт с я а в от м а ит ч е с к и . Д л я о ч и с тк и в с ег о с о е др ж и м о г о сп и ск а и с п о л ь з ес т у я м о ет д clear. Д л я ад л уе н и я к о н к р е нт о г о э л ем н т а ж с ли у т м о ет д D e l e t e S t r i n g. Н а п р и м е р : ListBoxl.DeleteString(4); Е щ е о ид н п о лез н ы й м ео т д , к о т р ы й ч аст о и с п о л ь з се т у я лд я в ы з о в а к о н ет к с нт о г о м ен ю к о н к р е нт о г о э л ем н т а сп и ска , н аз ы в аест я item AtP os. О н п ер в оид т к о р ид н а т у от ч к и в н рт у и сп и ск а в н ом е р э л е м н ат , в р ам к а х к о тр г о леж и т э т а от ч к а . Е г о обд у н е е в с ег о и сп о ль з о в ат ь в о б р а о чт и к е щ ел ч к а мы ш и дл я о б ъ е к т а ит п а TListBox. В сюлеуд щ е й п р о г ам е р а з м е с ит е в фо р м е р т и к о м п о н е н ат : к н о п к у , с п и с о к и с рт о к у с о т ян и я (к о м п о н ен т T St a t u sBa r в раз елд е Win32). Д л я срто к и со т ян и я свой свт о SimplePanel сатну ови т е в с о т ян и е True, и лд я со вютеу щ и х о б р а о чт и к о в кн оп к и и с п и с к а со бы ит й н а б ер и т е к о д ы и з п р и в едн н о г о н иж е л и с ти н г а . p r o c e d u r e T F o r m l. B u t t o n lC lic k fS e n d e r : T O bje c t ) ; va r I: Integer; begin for I:= 0 to Forml.ComponentCount- 1 do ListBoxl.Items.InsertObject(0,Forml.Components[I].Name, Forml.Components[I] as TObject); end; procedure TForml.ListBoxlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer); var APoint: TPoint; Index: Integer; TheObject: TControl; begin if Button=mbRight then begin APoint.X := X; APoint.Y := Y; Index := ListBoxl.ItemAtPos(APoint, True); if (ListBoxl.Items.Objects[Index] is TControl) then begin TheObject := (ListBoxl.Items.Objects[Index] as TControl); StatusBarl.SimpleText := TheObject.Name + 1 танидро к ы (' + IntToStr(TheObject.Left) + ', ' + IntToStr (TheObject .Top) + ') 'ќ; end else Beep ; end ; end; С о в т юс е у щ е Н аж
е да н н о м у л и с ит н г у окн о п о к аз ан о н а р и с . 7.10. в кн оп к у и з е ат м щ ел к а я п рав о й кн оп ко й м ы ш и н а е ол д ь т н ы х э л е м н ат х , в ы в иу д т е и м я э л ем н т а и е г о к о р ид н а т ы в ср т о к е с о т ян и я . У фну к ц и и I tem AtP os в д а п а р м ер т а . П ервы й — о бъ ек т ти п а T P o in t , соедрж ащ и й к о р ид н а т ы от ч к и . оВ т т в о з в р ащ ен о , есл и щ елч о к в ы п о лн е н р о й п а р м ет р о п р е дл я т , к а о е з н ач ен и е е д уб в н е гр а н и ц р еа л ь н о п р и юсв т у щ и х в сп и ск е ср т о к (э т о м ож е т бы т ь от л ь к о в о бласт и zyxwv
т С а р н д т не ы
ком по не т ы
169
з а п о с л ен д е й с тр о к й ) з н ач ен и е T ru e, фну к ц и н ом е р п о с л е нд е г о э л ем н т
. Е сл и в а тк о й с и а уц т и и в к а ч е свт е во тр г о п а р м ет а ку а з а н о я в ерн е т з н ач ен и е - 1 , есл и F a l se — вуел и ч ен н ы й н а е ид н и ц у а с п и с к а .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ X. • •
Button! StatusBarl UstSoxl
J - _ . _ _ _ ^1 Buttonl кт ани дро
ис Р . 7.10. и н е ж а рб о т О о т в скс и п а
ы (
е и н яо тсо
я м ен эл
-
Р а с м орти м е ш е он д у п р о г ам у , к о тр а я п о з в о ли т ч л уш е п о н ят ь осн овн ы е воз е к аж д я срт о к а и з сп и ск а с рт о к м о ж н о ст и к о м п о н ен т а TListBox. В эот й п р о г ам (св о й свт о Items) м о ж е т бы т ь с в яз а н а с о п р едл н н ы м о б ъ е к от м , к о тр ы й а кт ж е с ро а х н я е ст я в о б ъ ек т е ит п а TListBox. В л и сит н г е н иж е лд я э о т г о и сп о ль з о в а н о б ъ ек т ит п а TF ont, .т е . с к ажод й срт о к й е д уб т с в яз а н о п р едл н н ы й ш ри ф т и п о э тм у к аж д я р с то к а е д уб т в ы г л яе д т ь п о - с в о ем у , от х я эот т объек т м ож е т бы т ь ч е м ог н д у , н а п р и м е р и з о б р а ж ен и е м и тек сот в ы м и з а м е кт а м и . u n i t F L ist Bo x; in t e r fa c e u se s Windows, M essages, SysU t ils, Va r ia n t s, C la sse s, G raph ics, C o n t r o ls, Forms, D i a lo gs, B o r l a n d . Vc l . S t d C t r l s, B o r l a n d . Vc l . E xt C t r l s, System .C om pon en tM odel; t yp e TForml = c la ss( T F o r m ) R a d io G r o u p l: TR adioG roup; R adioG roup2: TR adioG roup; L a b e l e d E d i t l : T L a be le d E d it ; B u t t o n l : T Bu t t o n ; L i st B o xl : T L ist Bo x; R adioG rou p3: TR adioG roup; p r o c e d u r e B u t t o n l C l i c k ( S e n d e r : T O b je c t ) ; p r o c e d u r e L ist Bo xlD r a wI t e m ( C o n t r o l: T Win C on trol; I n d e x: I n t e ge r ; R e c t : T R ect ; S t a t e : TOwn erD rawState); p r o c e d u r e L ist Bo xlM e a su r e lt e m ( C o n t r o l: TWin C on trol; I n d ex: I n t e ge r ; va r H e i gh t : I n t e g e r ) ; p r i va t e { P r i va t e d e c l a r a t i o n s } p u blic { P u b li c d e c l a r a t i o n s } en d ; va r F o rm l: TF orm l;
770zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 7. аерПмо длж изчуат ь и чгерсафикй и нт е й рс ф л ав Г
implementation {$R *.nfm} var str: string; MyFont: TFont; procedure TForml.ButtonlClick(Sender: TObject); begin str := LabeledEditl.Text; MyFont := TFont.Create; case RadioGroupl.Itemlndex of 0: myFont.Color := clRed; 1: myFont.Color := clBlue; 2: myFont.Color := clGreen; end; case RadioGroup2.Itemlndex of 1: myFont.Style := [fsltalic]; 2: myFont.Style := [fsBold]; end; case RadioGroup3.Itemlndex of 0: myFont.Size := 8; 1: myFont.Size := 10; 2: myFont.Size := 12; end; ListBoxl.Items.AddObject(str,myFont); end; procedure TForml.ListBoxlDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin str := ListBoxl. Items [Index] ,ListBoxl.Canvas.Font := ListBoxl.Items.Objects[Index] as TFont; ListBoxl.Canvas.TextRect(Rect,str); end; procedure TForml.ListBoxlMeasureltem(Control: TWinControl; Index: Integer; var Height: Integer); begin Height := 24; end; end.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
П о ск ль к у з е дс ь и с п о л ь з ю у ст я о б р а о чт и к и п ре ы ван и й List Bo xlD rawI t em и List Bo xlM easu relt em (о корты х ж у е п у о м и н ало с ь в ы ш е) , дл я свой вст а Style в ы бра н о з н ач ен и е ibOwn erD rawVariable, .т е . п оль з оваелт ь с а м од л ж е н з а дт ь н е о б хи д м ы е п а р м ер т ы лд я п р о и с о в к и и з о б р аж ен и я , в адн н о м ч аслу е э т о е д бу т срт о к а с за да н н ы м ш р и ф от м . И з о б р а ж ен и е р и с ет у я н а холст е (св о й свто Canvas), а н ео бихд м ы е р а з м ер ы э от г о о л сх т а п е р ад ю с т я ч ер з п а р м ет р R ect ит п а TRect (П р ям о гу л ь н и к ) . Р аб о т а п р о и с дх т п р и б л и з и ет л ь н о атк . П р и щ елч к е н а кн оп к е В во д в сп и со к бу у д т з ан ес н ы о ч е р нд а я срт о к а и с в яз а н н ы й с н е й объек т в с о в т ес и и с м ео т д м : ListBoxl.Items.AddObject(str,myFont);. И з м ен ен и я в сп и ск е должн ы о б р за т и ь с я н а э к ран е , т.е . аовмита ческ и у д у б т вы з ван ы о ч б р аи т к и со бы и т й OnM easureltem и OnDrawltem. Э т и обрчаит к и у д уб т в ы з ы ь с в та я п р и п ро и с вк е о ж д ка й р о с тк и н ач и н а я с о р о к ст и с и н ек дс о м 0 д о рокст и с м ак си м аль н ы м и н ед к с о м . П р и п р о и с о в к е к ажо д й срт о к и е д уб т и с п о л ь з о в а ьт с я св о й ш р и фт , з а п и сан н ы й в с в яз а н н о м с о срт о к й о б ъ ек т е ит п а TF ont, к а к п о к а з а н о н а р и с . 7.11. Ещ е н есколь о сло в о свой ст е TabOrder и з рлезад а Layout. О н о аиомвтачске и ан с т у в л и с в т ае я п р и раз м ещ ен и и к о м п о н ен о т в в форм е и зеа д т п о р к дя , в окрт м ком п он е т ы у д уб т птча уло ь о кф у с п р и н аж и т и к л ав и ш и . Дл я ком п он е т а LabeledEditi ге о з н а - zyxwv
т С а р н д т не ы
ком по не т ы
171
ч ен и е од л ж н о бы т ь рав н ку с и в н ег о м о ж н о ср аз Е сл и э т о с в о й свт о и ме оэт м ан алоги ч н ы е св о й ст
о о , .т е . п р и окт р ы ит у в ои д т ь да н н ы е т ог р уд е з н ач ен и е а ал ь о н с т ы х к о м п о н е н от
и окн а эот т к о м п о н е н , н е едла я од п о л н и е т л ь н ы , т о ег о н еобидх м о с а ту н о в и т т авотмиа ческ в бу д у
т е д уб т и м ет ь фо х щ ел ч к о в мы ш и . ь в ч р ну ю , п р и и п е р с ч и а тн ы .zyxwvu
iwettyuicpO qvvertyuiopf] zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA gwerfytMCpf] qwertyuiop[] qwertyuiop[] l*vertyuiop[] zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
qwertyuiop[] qwertyuiop[] фирШ
Г ы нс а р К