Your SlideShare is downloading. ×
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Delphi
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Delphi

4,191

Published on

Published in: Education
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,191
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Windows үйлдлийн системийн ерөнхий зохион байгуулалтын талаартовчхонWindows-н өмнөх хувилбарууд MS-DOS үйлдлийн системтэй сайн зохицонажилладаг боловч үйлдлийн систем гэсэн утгандаа бүрэн хүрч чадахгүй байсанбол өнөөгийн Windows95 өөрөө 1 цогц үйлдлийн системийг илэрхийлж чадахболжээ.Windows95 үйлдлийн систем нь ерөнхийдөө 3 дэд системд хуваагддаг.1. Win KERNEL2. Win GDI3. Win USERWindows95 нь 16 болон 32 битийн программуудыг ажиллуулахдаа системийнвиртуаль машин болон дээрхи 3 дэд системийн тусламжтайгаар зохионбайгуулдаг. Системийн виртуаль машин гэдэг нь Windows-н бүх ажлыг дэмжижбайдаг Windows95-н бүрэлдхүүнд ордог үйлдлийн орчин юм. Мөн дээрхи 3 дэдсистемийн ажлыг дэмжиж байдаг.32 битийн win гэдэг нь санах ойн 32 битийн моделийг ашиглаж байдаг windows-ншинэ хэрэглээ юм. Харин 16 битийн win гэдэг нь бидний урьд өмнө хэрэглэжбайсан windows-н хуучин хувилбарууд юм. Тэдгээр нь санах ойн сегментийнхаяглалтийг буюу чухамдаа 80286 процессорын санах ойн моделийг ашигладаг.Тэдгээр нь Windows 3.x –нх шиг ажиллахдаа Windows95 нх шиг нэгдмэл нэгорон зайг хуваан эзэмшдэг бөгөөд олон бодлогын зарчимтай зохицодоггүй.Windows95-н хэрэглээний программийн төвшинд Windows 3.x –н API бүрэнтохирч ажилладаг.Win32 API нь Microsoft –н WinNT, Win32S, Win3.1-н өргөтгөл win32 битийнинтерфейс юм. Windows95 үйлдлийн систем нь олон бодлогын аргад үндэслэндээрх application-уудыг жолооддог. Бүрхүүл гэдэг нь хэрэглэгчийг системтэйхарилцах үйлдлийг хангаж байдаг 32 битийн Windows application юм.Windows95-н бүрхүүл нь windows3.x-н программ менежер, файл менежерзэргийг нэгтгэсэн application юм.KERNELKERNEL нь windows-н доод түвшиний динамик санах ойн функцүүдээр хангажөгч байдаг үйлдлийн системийн цөм юм. Энэ нь 16 ба 32 битийн windows-нүйлдлүүд тохирохүйлчилгээг хангадаг.GDIGDI нь graphic device interface гэсэн товчилсон үг. Энэ нь Windows95-н графикболомж болон дэлгэцэнд харуулах өнгө, хэлбэр дүрс, resolution-г хангаж байдаг.Win32 –т байдаг бүх шинэ боломжуудыг агуулна.USERUSER нь дэлгэцийн диспетчер юм. Windows-н интерфейсийг үүсгэх, удирдахфункцүүдийн цргц юм. Жишээ нь Хэрэглэгч хэд хэдэн MS-DOS –н Prompt гарганашиглаж болно.Хэрэглэгч арай илүү виртуалчилах боломжийг хангадаг хэд хэдэн давуу тал гарчирлээ.Системийн виртуаль машинWindows-н API функцийн төвшинДээр харлуулсан орон зайг хамтарч эзэмшинэ. Энэдээс Windows95 нь 16 битийнпрограммуудад тусад нь орон зай гарган өгч орчинийг нь бүрдүүлж өгдөг ньхарагдаж байна.Windows32 bitWindows32 bit16 bit16 bitБүрхүүл
  • 2. Windows-н дэд системWin KERNELKERNELWin USER Win GDIФайл удирдах дэд системСүлжээ удирдах дэд системҮйлдлийн системийн үйлчилгээВиртуал машин удирдах дэдсистемХөтлөгч хэрэгслүүдБүрхүүлЭнэ нь хэд хэдэн системийн удирдлагыг хэрэглэх нөөцүүдийн боломжуудаархангах программ юм. Windows95-үйлдлийн системийн бүрхүүл нь дэлгэцсистемийн нөөцүүдтэй харилцан ажиллахыг удирдан зохион байгуулдаг.APIХэд хэдэн зуун API функцүүд windows-н бүх системийн хийх үйлдчилгээг хангажөгдөг. Windows-н орчин бол интерфейс баазын дуудалтаар ханддаг. Үүнийг APIгэдэг.Системийн виртуаль машинWindows-н бүх application ситемийн виртуаль машины тухайн хил хязгаартүйлдлээ гүйцэтгэдэг. 16 битын application –ууд өөрийн нэгдмэл хаяглалын оронзайд ажилладаг.Энэ нь application бүрийн өөрийн орон зайн хаяглалтыг 32 битын хаяглалтаархангаж дэмжиж өгдөг.MS-DOS-н виртуаль машинWindows95 олон тооны MS-DOS-н программыг хамгаалалтын горим эсвэл 8086виртуаль үйл ажиллагаа ажиллуулж дэмжиж байдаг. MS-DOS-н виртуаль машинхэд хэдийг үүсгэж болно.Виртуаль машины диспетчерВиртуаль машины диспетчер нь үнэндээ үйлдлийн системийн зүрх юм. Энэ ньдоод түвшиний санах ойн удирдлага болон драйверуудын виртуаль зохионбайгуулалтын үйлчилгээг хянаж ажилллаж байдаг.| Windows95 –н диспетчерүүдWindows95 –н виртуаль машины диспетчер дотор хоёр диспетчер ажиллажбайдаг.Үүнд: Үндсэн диспетчер. (primary scheduler)Энэ нь thread-дын приоретитүүдийг тооцоолж хариу өгнө.Квантын диспетчер (timeslice scheduler)Энэ нь хугацааны квантуудад хувааж хэсэгчлэн ажилуулана.Үнэн хэрэгтээ квантын диспитчер аль thread-н ямар хувийг нь ямар хугацаандпроцессороор үйлчлүүлэхийг тооцоолно.Процесс 0-31 хүртэл приоритеттой байдаг ба үүнийг үндсэн диспетчер бодоодквантын диспетчер лүү гаргана. Хэрвээ процессийн хугацааны квант 100 хувьболсон бол VMStat_Background эсвэл VMStat_High_Pri_Background гэдэгтөлвийг үлдээдэг.DELPHI ДЭЭР АНХНЫ АЛХАМ ХИЙЦГЭЭЕТа мэдэж байгаа Delphi бол Borland пүүсийн Windows-ийн орчны програмыгбичдэг дээд түвшний програм юм. Delphi -ээр та Windows -ийн орчныпрограммыг урьд байгаагүйгээр хялбар бөгөөд хурдан бичих боломжтой.Win32 эсвэл Win32 graphical user interface (GUI) -ийг та нээж ажиллуулжболно. Win32 GUI -ийг ажиллуулснаар та дээд түвшний програмчлалынхэлний үнэн хүч чадлыг мэдрэх болно. Мөн та Web browsers –ийг минутийндотор үүсгэдэг шигээ form дээрх ActiveX control -оор тусгай програмуудыгүүсгэж болно. Энэ мэт олон зүйлийн давуу талууд Delphi -д байдаг баDelphi нь өөрөө кодоо үүсгэдэг тул програмын биелэлт хурдан байдаг.Танд л гэж хэлэхэд Pascal -ын программчлалыг жаахан судлах хэрэгтэй.Delphi нь Windows програмчлалын доод түвшний нарийн зүйлүүдийг нуудагба энэ нь танд чухал биш. Эцэст нь та програмист л болохыг хүсч байгаа
  • 3. бол энэ нь бүгдийг судлах хэрэгтэй. Delphi нь танд урьд байгаагүй хөгжилтаашаалыг авчрах болно. Ингээд ханцуйгаа шамлан бүх ажилдаа орогтун.Delphi сэтгэлийн таашаалыг авчрах агуу программ юм.Delphi IDE -ийг өнгөц харъяЭнэ хэсэг нь Delphi integrated development environment (IDE) -ийг агуулна.Windows програмчлалыг судлах бүхэнд энэ нь хэрэгтэй юм. Та одоо Delphi-ийг эхлэх урам зоригтой байгаа гэж бодож байна. Программыг эхлүүлэхэдта хоосон form ба IDE -ийг харах болно.Delphi IDE нь 3 хэсэгт хуваагдана. Дээд хэсгийг нь үндсэн цонх гэдэг. Энэнь toolbars болон Component palette -ийг агуулдаг. Delphi toolbars ньcompiling project, хадгалах, нээх үйлдлүүдийг нэг товшилтоор гүйцэтгэхболомжийг танд олгоно.Component palette нь wide array of components агуулдаг ба түүнийг formдээр чирч тавьж болно. Component -ууд нь text labels, edit controls, listboxes, buttons ба бусад болно. . Componentууд нь бүлгүүдэд хуваагдсанбайна. Component palette -ийн дээд талын tab -ыг харав уу?Дээр нь очоод click хийвэл өөр өөр component гарч ирнэ. Form дээрээcomponent -оо байрлуулахын тулд Component palette -ийн компонентынbutton дээр click хийж component -оо харагдах хэсэгт нь очоод click хийххэрэгтэй. Яаж хэрэглэх үр дүнд юу болох бол гэж санаа зовох хэрэггүй.Эдгээр нь хормын дотор болно.Шинэ нэр томъёо: Component гэдэг бол software -ийн 2 хэсгийг агуулсанба тусгай урьдчилан тодорхойлогдсон функц үйлдлийг нь гүйцэтгэжбайдаг. Жишээ нь: text label, edit control, list box.Обьектийн инспекторҮндсэн цонхны доор дэлгэцийн зүүн талд Object Inspector байна. Энэ ньcomponent -ийн properties ба events -үүдийг өөрчлөхөд ашиглагддаг. Delphi-тэй ажиллах явцдаа үргэлж Object Inspector -ийг та хэрэглэх болно. ObjectInspector нь 2 хэсэгтэй. Properties tab ба Events. Component -ийн propertiesнь component -ийг яаж ажиллуулахыг удирдана. Жишээ нь : Color property -ийг өөрчлөхөд background color -нь өөрчлөгддөг.Шинэ нэр томъёо: property –нь component -ийн үйл ажиллагаагтодорхойлдог.Events хэсэг нь component -ын event -уудын жагсаалтуудаас бүрдэнэ.Component дотор үйлдэл хийхэд event -ийг ашигладаг. Жишээ ньcomponent дарагдахад event нь component дарагдсан байна шүү гэж тандхэлнэ.Та component -д хамаарах код бичиж болох ба тусгай үйлдлийггүйцэтгэхэд хэрэглэж болно.Шинэ нэр томъёо: event бол цонх ба хэрэглэгчтэй ажиллах component -
  • 4. ийн харилцан ажиллагааны үр дүн юм.Delphi –ийн ажлын талбарDelphi IDE -ийн үндсэн хэсэг нь ажлын талбар юм. Ажлын талбар нь FormDesigner -ийг үүсгэнэ. Энэ нь гайхмаар юм биш Form Designer нь өөрөөform үүсгэдэг. Delphi -д form гэдэг нь программын цонхыг хэлнэ. Form ньпрограммын үндсэн цонх байж болно, dialog box эсвэл цонхны янз бүрийнхэлбэртэй байж болно.Form Designer -ийг, form -ийг үүсгэх процессийн хэсэгт component -уудыгнь байрлуулах, зөөх зэргээр ашиглаж болно. Form Designer -ийн ард CodeEditor байдаг. Программын кодыг Code Editor дээр бичдэг. Application -ийгүүсгэн ажиллах явцад Object Inspector, Form Designer, Code Editor, баComponent palette -ууд нь харилцан уялдаатай байдаг. Та Delphi IDE-ийгмэддэг боллоо одоо ямар нэг зүйлийг хийж үзье.Таны эхний програм: Hello WorldДэлгэцэнд Hello World гэж хэвлэх нь бүх програмчлалын хэлний сурахбичигт байдаг уламжлалт програм юм. Заавал ийм байх албагүй гэж бибоддог. Pascal хэлийг өмнө нь судалсан бол сайн юм. Та гайхаж магадгүйюм, Delphi танд одоогийн Windows program -ийн Hello World -д хүрэххамгийн хялбар замыг зааж өгнө.Програм бичихТа яг одоо Delphi -ийг ажиллуулж байгаа бол blank form -ийг харсан байхёстой. Form нь Form1 гэж нэрлэгдсэн байдаг. Form -ийн зүүн хэсэгт ObjectInspector form -ийн properties -үүдийг харуулна. Object Inspector -ийн title barдээр товш. Caption property нь идэвхжих ба cursor нь тэнд юу хийхийгхүлээнэ. Hello World! гэж бичин form -ийн caption -ийг өөрчил.Санамж: Properties -ийг өөрчлөх бол Delphi шууд өөрчлөлтийг нь гаргадаг.Caption -ийг өөрчлөх үед form -ийн window caption нь өөрчлөгдөж байгаагажигла.Toolbar дахь Run товчийг товш. Form нь гарахдаа caption нь Hello World!. -ийг гаргана. Энэ тохиолдолд ажиллаж байгаа программ нь бараг л blankform шиг харагдана.Програмыг өөрчлөхОдоо программаа жаахан өөрчилье. Hello World чинь байгаа бол Closebutton дээр товшин хаах хэрэгтэй. Form Designer дахин гарч ирэх ба form-ийг өөрчлөх боломжтой. Программыг илүү сайжруулахын тулд цонхны төвдтекст нэмэх хэрэгтэй. Үүнийг хийснээр form -доо text label -ийг та нэмж өгнө.1. Эхлээд Component palette -ийн Standard хэсэгт товш.2. Label button -ийг товшоод form -ийн хаа нэгтээ товш. Labelcomponent нь form -ийн дотор байна.3. Object Inspector дээр буцаад оч. Label1 -ийн properties -ууд гарчирсэн байгаа. Caption property нь бас идэвхжсэн байгаа.4. Object Inspector эсвэл Caption property -ийн titlebar дээр товштэгээд Hello World! гэж бич. Form -дээрх label нь Hello World!. гэжгаргана.5. Үүнийг хийсэн бол label -ийн text -ийн хэмжээг өөрчилж чадна.Font property дээр 2 товш. Property нэмэлт font attribute -ийгхаруулахын тулд өргөн болно.6. Font -ийн Size property -ийг 24 болгоод form -дээрээ товш. Labelшинэ хэмжээтэй болно.
  • 5. Програмаа хаахDelphi -д жаахан дурласан бол энэ нь бүхнээс илүү таны сонирхлыг татна.Дараа нь юу хийх вэ гэвэл одоогийн прожектийг хаах хэрэгтэй. File цэснийClose All -ыг сонго. Project1 -ийн өөрчлөлтийг хадгалах бол No -ийг сонго.Таны 2 дахь программ: Hello World, II хэсэгPascal -ийг судлахаасаа өмнө Delphi хэрхэн ажиллдаг талаар мэдэххэрэгтэй. Танд Pascal –ийн олон төрөл дээр ажиллахад энэ нь хэрэг болно.Энэ хэсэг нь Delphi -ийн үнэн хүчийг хальт агуулна.Санамж: Компонентийн properties -ийг өөрчилсөн бол design-time өөрчлөлтхийсэн гэсэн үг. Харин кодоор property -ийг нь өөрчилсөн бол runtimeөөрчлөлт гэж нэрлэгддэг.Ажиллах үед нь Caption property -ийг өөрчлөхийн тулд:1. Form дээрх button –ийг 2 товш. Ингэхэд Delphi нь event handler -ийг
  • 6. button -ийн OnClick event дээр үүсгэнэ. Үүсгэсэн код нь дараахбайдалтай байнаprocedure TForm1.Button1Click(Sender: TObject);beginend;2. Засварлагч курсор нь begin ба end гэсэн зарлагааны хоорондбайдаг ба таныг код бичихийг хүлээж байдаг.procedure TForm1.Button1Click(Sender: TObject);beginLabel1.Caption := `Hello World, Part II;end;Энэ код маш энгийн юм. Энэ нь Hello World, Part II гэсэн өгүүлбэрийгCaption property -руу шилжүүлдэг.3. Одоо toolbar -т байгаа Run товчин дээр дарж программыг ажиллуул.Программыг ажиллуулахад label -ийн caption нь Label1 гэж хэвээрбайгааг анхаарна уу. Form -ийн button дээр дарж label -ийн гарчгийгөөрчил. Гайхамшигтай байгаа биз. Зүгээр л Delphi ажиллаж байгааюм. Иймэрхүүгээр олон дасгалыг ойрын хэд хоногт хийж form -ийнбусад компонент labels, button –уудын талаар их туршлагатай болно.Би үйл явдлын ард нь юу болдгийг бүхэлд нь тайлбарлах гээгүйхарин дараа нь бүх тайлбар хийхийг л хүсэхггүй байна.Object Pascal хэлийг нягтлан харах ньDelphi -ийн RAD онцлогийг суралцахаасаа өмнө обьект Паскал хэлнийүндсийг судлах хэрэгтэй. Энэ ном магадгүй хамгийн сайн нь биш юм шигтанд санагдаж болох юм гэхдээ та юуны өмнө обьект Паскалийг судал.Обьект Паскалийг дараалаар нь судалбал сайн хэрэг. III бүлгийнхичээлийн дараа та обьект Паскалийн бүрэн дүр зурагтай болсон байна.Хоромхон зуурын ухвар ойлголтонд бүү хуурт.Зарим нь обьект Паскалийг бүрэн ойлгохыг шаарддаг ба энэ нь бодиттуршлага юм. Ойрын хэдэн өдрийн турш та зарим кодын хэсгийг харах баэнэ нь обьект Паскалийн зарим онцлогийг дүрслэн үзүүлдэг. Та заримдасгал хийх ба таны олсон шинэ мэдлэгийг бататгана .Эхний хэдэн өдөр тазөвхөн Delphi application -ийг жаахан хэсэгт харна.Юун түрүүнд би Delphi IDE болон Visual Component Library (VCL) -ийгсудалмааргүй байна. Та бүрэн ойлголттой болсныхоо дараа эхлэх хүртлээбага багаар ахих хэрэгтэй.Түүхийн шар хуудас1994 онд Borland пүүс нь RAD хэрэгсэл дээр ажиллаж эхэлсэн ба энэ коднь Delphi гэж нэрлэгдсэн байна. RAD -ийг хэрэгжүүлэх хамгийн шилдэг замнь компонентийн загвар архитектур байна гэж шийдэгдсэн байсан. Энэ ньсистемийн гол цөм байх програмын хэлний асуудлыг шийдсэн байв.Тэр үед Borland пүүс нь Pascal –ийн зах зээл дэх ганц борлуулагч байв.Borland нь Pascal -ийн хэрэгсэлийг үйлдвэрлэдэг хамгийн сайн компанибайв. Та Pascal -ийн програмист байсан бол Borland -ийн TurboPascal -ийгхэрэглэн амтанд нь орох байсан биз. Borland пүүс Pascal хэлийг хуулийнхүрээнд бүрэн эзэмшдэггүй боловч Pascal -ийн ертөнцөд том байр эзэлдэггэдэгт эргэлзээ байдаггүй.Энэ нь Pascal хэлний онцлогийг нэмэгдүүлэх тал дээр том байр эзэлдэг.Энд хэлэхэд Pascal -ийн стандарт хороо байдаггүй ба Pascal хэлийгтодорхойлон бичигдсэн стандарт байдаггүй. Borland пүүс Delphi -ийг Pascal-ийн үндсэн дээр бичсэн юм. (Borland -ийн нэр нь програмын хэлний нэрболсон) Delphi хэрэглээнд гарахаас өмнө Borland пүүс Pascal хэлийгөөрчилсөн. Жишээлбэл : Pascal -ийг обьект Pascal болгон өөрчилсөн байв.Энэ нь обьект Pascal нь Pascal -ийн хувьд C++ нь C -ээс ямар ялгаатайбайдаг шиг обьект Pascal нь классийг Pascal -д нэмсэн ба үүгээр обьектхандлагат програмчлалд Pascal орж ирсэн. Delphi хөгжихийн хирээр шинэхэлний онцлог ба түлхүүр үг нэмэгдэн орж ирэн компонент загвартайзохицож эхэлсэн. Түлхүүр үгүүд ба property өөр бусад нэмэгдэн орж ирсэн.
  • 7. Энэ нь Borland -д компонент загварын бүрэн хүчийг хэрэгжүүлэх боломжийголгосон.Компонентод тохируулан Паскал хэлийг өөрчилснөөрөө Borland нь RAD -ийг хэрэгжүүлэх боломжтой болсон. Гол нь обьект Паскал хэл ньөөрчлөгдсөнөөрөө Delphi -ийн боломжуудыг нээж өгсөн. Үр дүнд нькомпонент загвар ажиллаж эхэлсэн. Хэдийгээр Паскалийг өөрчилсөнөөрөөBorland нь том алхам хийсэн боловч урьдах зүйлтэй холбоотой. Microsoftкомпани BASIC хэлийг авч өөрчлөн Visual Basic хэлийг гаргасан байдаг.Энэ шинэ хэл нь баазад ажилладаг эх Basic хэлнээсээ ялгагдахгүй шахамбайсан. Borland пүүс Паскал өөрчилснөөрөө эрсдэлтэй алхам хийсэн. Бүхюмны дараа хэрэглэгчид таатай бус хүлээн авсан. Одоог хүртэл Borland ньПаскалийн зах зээл дээр хатуу байр суурьтай байгаа ба энэ хэвээрээбайгаа билээ. Үүнд алдаа хийхгүй бол обьект Паскал хүчирхэг хэл ба бизарлалтыг нь тэгж хөнгөн хийхгүй байхсан.Обьект Паскал нь сургалтанд бол хамгийн хүчирхэг байгаа билээ. БиОбьект Паскалийг бүх онцлогийг агуулсан гэж хэлэхгүй. Паскал болпрограмчлалд түгээмэл хэрэглэгддэг.Санамж: Юу хийхийг тодорхойлохдоо Delphi нь хэд хэдэн нэр томъёогхуулан авсан. Delphi -ийн үндсэн хэл бол мэдээж обьект Паскал ба заримхүмүүс үүнийг Паскал гэж хэлдэг. Зарим Паскал дээр хийж байна хэлдэг.Эцэст нь юу гэж хэлэхээ та шийд. Обьект Паскал нь обьект хандлагатпрограмчлалд бүрэн зохицсон болно.Шинэ нэр томъёо: Обьект - урьд нь компонентыг тодорхойлж байсан шигтусгай програмчлалын хоёр тал юм. (Компонент бол обьект юм, харин бүхобьект нь компонент биш)Pascal Unit -уудПрограмчлал бол код бичихээс илүү ажил юм. Эцсийн эцэст энэ болпрограмын цогц бөгөөд код бичих нь програмчлах зорилгыг нь биелүүлжбайгаа болно. Таны бичсэн код бол зөвхөн текст файл руу ордог.Компьютер тэр текст файлыг аван машины кодод хөрвүүлэлт хийнойлгодог. Delphi -ийн код агуулдаг текст файлыг unit гэдэг.Шинэ нэр томъёо: unit бол кодын модульд хөрвүүлэгдэх боломжтой текстфайл юм.Unit -ийн төрлүүдDelphi GUI application нь багадаа хоёр unit -ийг агуулдаг. Project source unitнь project source кодыг агуулдаг. Project source код нь DPR өргөтгөл байдаг.Та project source unit -ийг Project | View Source -ийг үндсэн цэсээс сонгонүзэж болно. Project source unit -ийг өөрчлөх хэрэгцээ нэг их байдаггүй.Үнэндээ project source unit -ийг юу хийхээ мэдэхгүйгээр хийх хэрэггүй. Тахэрэв project source unit -ийг санамсаргүй өөрчилсөн бол application таньажиллахгүй болно.Delphi GUI application -ийн хоёр дахь төрөл нь үндсэн form -ийн unit байдаг.Form unit гэдэг бол тухайн form -тай хамтардаг source code unit байдаг. Unit-ийн энэ төрөл нь PAS өргөтгөлтэй файл байдаг. Delphi -д та энэ төрлийгнь голлон хэрэглэнэ. Delphi GUI application нь голдуу нэг form unit -тэйбайдаг. (Үндсэн form -ийн хувьд) Харин энэ нь нэгээс илүү form unit -тэйбайж болно. Жишээ нь: About box -ийг гаргадаг application нь үндсэн formunit -тэй байх ба About box -ийн unit байна.Тэмдэглэл: "Delphi GUI application." нь console mode application -ийн GUIapplication -ээс ялгаатай байдаг. Console mode application бол consolewindow (DOS box) -ийг ажиллуулдаг 32-bit Windows application юм.Console application -д үндсэн form байдаггүй ба өөр form -уудыг агуулж чболно, агуулахгүй ч байж болно. Хэдий ийм боловч console application ньнэг эсвэл түүнээс илүү unit -тэй байж болно.Delphi application -д та 3 дахь unit -ийг хэрэглэж болно. Энэ төрлийн unit ньsource кодыг агуулдаг. Зөвхөн unit -ийг агуулдаг код нь project -ийн бусадunit гэж дуудагддаг.Delphi Unit –ийн бүтэц
  • 8. Delphi unit нь урьд тодорхойлогдсон форматыг дагах ёстой. Unit урьдтодорхойлогдсон форматанд байх ба энэ нь хөрвүүлэгч unit -ийг уншижчадах ба unit -ийн кодыг компиляц хийж чадна. Delphi project unit нь unit -ийн нэртэй програмын түлхүүр үгийг агуулдаг ба кодын хэсэг нь begin баend гэсэн түлхүүр үгээр тэмдэглэгддэг. Та үндсэн unit -ийг Delphi -ийнүндсэн цэсээс View | Project Source -ийг сонгон харж болох ба default Delphiproject -ийн project source unit -нь дараах байдалтай байна.Тэмдэглэгээ: Доорх мөрийн дугаарууд нь unit -ийн өөрийнх нь хэсэг бишболно. Үүнийг зөвхөн дарааллыг заахад ашигласан. Заримд нь ийм дугаарбайгаа ба заримд нь байхгүй болно. Аль алинд нь Паскал хэл нь бусадхэлүүд шиг мөрийн дугаар авдаггүй гэдгийг ойлгох хэрэгтэй. (онцолбол,BASIC).Cтандарт DELPHI PROJECT –ийн PROJECT SOURCE01: program Project1;02:03: uses04: Forms,05: Unit1 in ‘Unit1.pas’ {Form1};06:07: {$R *.RES}08:09: begin10: Application.Initialize;11: Application.CreateForm(TForm1, Form1);12: Application.Run;13: end./1 мөрөнд програмын түлхүүр үг програмын үндсэн source unit -ээр энэ unit-ийг тодорхойлсон. Үүнийг та unit -ийн нэр Project1 нь програмын түлхүүрүгээ даган яваагаас харж болно. (Delphi таныг нэр өгөх хүртэл өөрөөнэрийг нь автоматаар өгдөг)3 мөрөөс эхлэн түлхүүр үгээр тодорхойлогдсон хэсгийг харж байна. Ямар чunit -ийн нэр нь цэгтэй таслалтай түлхүүр үгийг дагадаг ба компиляци энэдарааллаар хийгдэнэ.7 мөрөнд компиляцийн директив нь Delphi нь project -ийн resource file -ийгагуулдгийг харна. Resource файлууд нь VIII бүлгээр яригдана. “CreatingApplications in Delphi."9 мөрөнд begin түлхүүр үг ба 13 мөрөнд end түлхүүр үгийг агуулсан.Сүүлийн түлхүүр үг цэгээр төгссөн байгааг ажигла. (unit нь олон түлхүүрүгтэй байж болох ба харин ганц төгсгөлийн end –тэй байна.)10, 11, 12 -р мөрүүдэд код нь application -ийг үүсгэж байгаа ба application -ийн үндсэн form -ийг үүсгэх ба application -ийн биелэлтийг эхлүүлнэ. Та энэкодын нарийн хэсэгт анхаарах хэрэггүй.Тэмдэглэгээ: begin ба end нь кодыг блоклоно. Кодын блок нь кодын хэдэнмөрийг агуулж болох ба мөн хэдэн зуун мөрийн кодыг ч агуулж болно.Номонд ч бас ийм байгааг та харж болно. Та ном хэрэглэдэг бол яаж, хэзээхэрэглэхийг мэдэх болно.Паскал unit -ийн өөр хэсэгт харцгаая. Үндсэн цэсээс File | New -ийг сонгоно.New Items гарч ирэхэд icon -ийг байрлуулан 2 товшилт хий. Delphi шинэ unit-ийг нээх ба харуулахдаа Code Editor -д unit код нь үүснэ.Хоосон UNIT01: unit Unit2;02:03: interface04:05: implementation06:07: end.
  • 9. Цөөн байгаа биз? Энэ unit нь 2 зүйлтэй. Эхнийх нь unit нь нэр нь түлхүүрүгтэйгээ байгаа. Түлхүүр үгтэй программ эхэлж байгаа ба код нь unitтүлхүүр үгтэй ба харин хэдхэн ерөнхий элементтэй байна. Pascal unit ньunit нэртэйгээ байгаа түлхүүр үгээр эхлэх ба end нь хоёулангийнх нь сүүлдбайдаг. Энд end түлхүүр үг нь бас сүүлдээ цэгтэй байгаа.Програмын main source unit -ийнх биш unit нь interface ба implementation -уудыг агуулдаг. Энэ хоёр түлхүүр үг нь The interface Section" and"Implementation Section," зэрэг хэсгүүдэд нарийн тодорхойлогдсон байгааболно. Программын үндсэн unit нь begin and end -ийг хоёуланг нь авч явахба харин source unit -нь төгсгөлдөө л end -тэй байна. Дараагийн хэсэг ньPascal unit дотор хэрэглэгддэг түлхүүр үгийг тодорхойлно.Uses жагсаалтШинэ нэр томъёо: uses жагсаалт бол гаднах unit -уудын жагсаалт.3 мөрөнд uses түлхүүр үгийг хэрэглэсэн байгаа. Uses нь бусад unit -уудынжагсаалтыг агуулсан хэсгийн эхлэлтийг тодорхойлж байгаа бөгөөд энэ unitнь түлхүүр үгээсээ хамаарна.Application.CreateForm(TForm1, Form1);Кодын энэ мөр нь бусад unit -уудад байрлах мэдээллийг агуулах ба энэunit -д олдохгүй. Application.CreateForm гэж тодорхойлогдсон процедур ньForms.pas гэгдэх Delphi unit -д байх ба TForm1 ба Form1 идентификаторууднь прожектийн main form unit-д байрлах ба Unit1.pas гэж хэлэгдэнэ. Тахолболтыг нь харав уу? Uses жагсаалт нь unit -ийг компиляци хийхэдхэрэгтэй нэмэлт мэдээллийг агуулдаг гэж үзнэ. Энд uses жагсаалтийгхаруулав.usesForms,Unit1 in ‘Unit1.pas’ {Form1};Uses жасгаалт нь 2 unit нэртэй байна. Forms ба Unit1. Заримдаа энэ ньсайн жишээ биш байдаг. Яагаад гэвэл 2 -р unit жагсаалт нь нэмэлт текстийгагуулсан байдаг. (Unit1 in ‘Unit1.pas {Form1}).Энэ текст нь form -ийг онцлоход хэрэглэгдэх ба unit -дээ байдаг бөгөөдпрожектийн main source unit -ээр л хэрэглэгддэг. (Угалзан хаалтанд байхтекст нь кодын бусад хэсэгт байх тайлбар)Uses жагсаалтыг байгуулахад мэдвэл зохих 2 зарчим байдаг:• Эхлээд жагсаалт дахь unit бүр дараах unit -ээсээ таслалаартусгаарлагдах ёстой.• Дараа нь сүүлийн unit-ийн жагсаалт нь цэг таслалтай байх. Цэг таслалнь uses жагсаалтыг төгссөнийг заана.Ерөнхийдөө жагсаалт нь идэвхтэй unit -ийн нэрсийг агуулах ёстой. Usesжагсаалт нь uses түлхүүр үг, цэг таслалтай end -ээр тодорхойлогдох ёстой.Тэрнээс гадна uses жагсаалт нь яаж зохион байгуулагдсанаасаахамаарахгүй. Жишээ: Дараах 2 uses жагсаалтууд ижил:usesWindows, Messages, SysUtils, Classes, Graphics,Controls, Forms, Dialogs, StdCtrls;usesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;Unit нь uses жагсаалт нь ямар ч тоотой байж болно.Тэмдэглэгээ: Зарим тохиолдолд Delphi нь танд uses жагсаалтанд unit -ийгнэмж өгдөг. Энэ нь File | Use Unit цэсээр хийгддэг. Энэ онцлог нь IV бүлгээрнарийвчлан яригдана.Интерфейс хэсэг
  • 10. Өмнөх кодонд интерфейс түлхүүр үг байгааг анзаарсан болов уу.Интерфейс хэсэг бол идентификатор нь unit -ээсээ авч ирэн зарлагдсанunit –ийн хэсэг юм. Ихэнх unit -ууд нь өөр unit –уудад хэрэглэгдэх кодыгагуулсан байдаг. Энэ код нь класс, процедур, функц, хувьсагчаархангагдсан байж болно.Аль ч обьект нь интерфейс хэсгээрээ нэг unit -ээс нөгөө unit -руу зарлагдахболомжтой. Та интерфейс хэсэг нь жагсаалтыг агуулдаг гэдгийг хэлжчадна. Интерфейс хэсэг нь интерфейс түлхүүр үгээр эхэлдэг баimplementation түлхүүр үгээр дуусдаг.Implementation хэсэгШинэ нэр томъёо: implementation хэсэг бол тухайн unit -ийн кодыгагуулдаг хэсэг юм.Implementation хэсэг implementation түлхүүр үгээр эхэлдэг ба дараагийн unit-ийн түлхүүр үгээр дуусдаг. Дараагийн unit -ийн түлхүүр үг нь голдуу unit -ийн төгсгөл end түлхүүр үг байдаг. Паскалийн тал байгаа учир илүү юмярих боломжгүй байна. Хэдий ийм боловч интерфейс ба implementation -ийн жишээ нь танд ойлголтыг жаахан төрүүлэх болно.DoSomething гэж нэрлэгдэх процедур нь unit -ийг үүсгэнэ. Та бусад unit -уудад DoSomething –ийг дуудагдахыг хүсч байна уу? Энэ тохиолдолдDoSomething процедурыг интерфейс хэсэгт зарлах ба implementation хэсэгттодорхойлох хэрэгтэй. Доорх хэлбэртэй байна.PUBLIC функцтэй unitunit Unit2;interfaceprocedure DoSomething;implementationprocedure DoSomething;begin{ Code for DoSomething goes here. }end;end.DoSomething процедур нь interface section -д зарлагдсан байгааг анзаар.Тэгээд implementation section -д тодорхойлогдсон байгаа.Initialization ба finalization хэсэгInitialization ба finalization хэсэг нь unit -ийн шаардлагатай кодыг цэвэрлэх,эхлэл хийх, гүйцэтгэх боломжтой. Initialization section -д ямар ч код unitсанах ойд ачаалагдах үед биелэгддэг. Finalization section -д unit санахойгоос ачаалагдаагүй байхаас өмнө биелэгддэг. Initialization section -гүйгээр та finalization section -тай байх боломжгүй. Энэ хоёр нь хоёулсонголт юм.Unit –д хэрэглэгддэг түлхүүр үгүүдPascal unit бусдыг агуулж болдог ба сонголтын түлхүүр үг нь өөр өөрзорилгоор нь хэсгүүдийг ангилдаг. Эдгээр түлхүүр үгүүдийн зарим нь олонхэрэглээтэй. Дараах хэсэг нь unit –д хамаарагдах түлхүүр үгийг лтодорхойлсон байгаа.Const түлхүүр үгЕр нь unit нь нэг түүнээс илүү const хэсгийн сонголттой байх боломжтой.Const хэсэг бол түлхүүр үгээр тодорхойлогдсон байдаг. Тогтмолоорзарлагдсан хувьсагчаар const хэсэг нь тодорхойлогдоно.Constant бол өөрчилж болохгүй идентификатор юм. Жишээ нь таныпрограмд олон хэмжигдэхүүн байдаг гэе. Үүндээ та тогтмол хувьсагчийгашиглах боломжтой. Const section -ийг доорх програмд нэмье гээдтөсөөлөөд үзье. Та const хэсэгт нэг тогтмолыг нэмэх ба өөр const хэсэг нь 2тогтмолыг нэмсэн.unit Unit2;interfaceconstAppCaption = ‘My Cool Program 1.0’;procedure DoSomething;implementation
  • 11. constBaseX = 20;BaseY = 200;procedure DoSomething;begin{ Code for DoSomething goes here. }end;end.AppCaption Тогтмол нь interface section -д зарлагдсан учир unit -ийн аль чхэсэгт энэ нь хэрэглэгдэж болох ба uses жагсаалтанд байгаа аль ч unit -ийн хувьд мөн адил байна. BaseX and BaseY хувьсагчууд нь unit дотрооболомжтой яагаад гэвэл тэд implementation section -д зарлагдсан.Тогтмол түлхүүр үг нь нэгээс илүү хэрэглээтэй байж болно.Type түлхүүр үгШинэ нэр томъёо: Type түлхүүр үг нь таны програм хэрэглэх шинэтөрлийг зарлахад хэрэглэгддэг. Шинэ төрлийг зарлах нь esotericпрограмчлалын технологи бөгөөд энд тайлбарлах нь хэцүү болно. Доор 20байтын массив таны application -д хэрэгтэй байгаа ба энэ төрөл нь дахиндахин хэрэглэгдэнэ. Та доорх шиг зарлаж болно.TypeTMyArray = array [0..19] of Byte;Та одоо array [0..19] гэж бичихийн оронд TMyArray гэсэн төрлийг ашиглахболомжтой.“Var “Түлхүүр үгШинэ нэр томъёо: Энэ түлхүүр үг нь хувьсагчууд байдаг кодын хэсгийнзарлалтын үед хэрэглэгддэг.Энэ түлхүүр үгийг та элдэв хувьсагчуудыг зарлахад хэрэглэж болно. Var -ийг зарлах хэдэн байрлал байдаг. Unit -ийн түвшинд var -ийг та зарлажболно. Мөн процедур, функцийн түвшинд var -ийн хэсэг байж болно.unit Unit2;http://www.csms.edu.mn/cheri/interfacetypeTMyArray = array [0..19] of Byte;constAppCaption = ‘My Cool Program 1.0’;varX : Integer;MyArray : TMyArray;procedure DoSomething;implementationconstBaseX = 20;BaseY = 200;procedure DoSomething;begin{ Code for DoSomething goes here. }end;end.Const түлхүүр үг шиг, var -т бас олон хэрэглээ байдаг. Энэ нь бас функц,процедурын параметр, хувьсагч параметруудыг зарлахад хэрэглэгддэг.Тэмдэглэгээ: var -аар тодорхойлогдсон хэсэг нь түлхүүр үгээр эхэлж,дараагийн unit -ийн түлхүүр үгээр дуусна.Кодын тайлбарПаскал хэл рүү нарийвлан орохын өмнө кодын тайлбарын тухай товчтанилцуулъя. Тайлбар нь таны source кодод текст хэлбэрийн тайлбар өгөхзорилготой байна. Тайлбар нь код юу хийхийг тодорхойлоход хэрэглэгдэхба зохиогчийн эрхийн мэдээллийг хангах, өөртөө эсвэл бусдад тэмдэглэлхийхэд л ашиглагддаг.Тайлбар нь ялгаатай 3 аргаар тодорхойлогддог. Дараах зүйлүүд нь бүгд
  • 12. шугмын хувьд хүчинтэй байна.{ Dont forget to free this memory! }{ADTAPI.PAS 2.50Copyright (c) TurboPower Software 1996-98}(* Оюутнуудаа энэ кодыг засах хэрэгтэй *)// Энэ үнэн зэрлэг код{ Энэ код дээр дараа тухтай ажиллана }Магадгүй Delphi –д ихэнх тайлбарын төрөл нь угалзан хаалтыг хэрэглэдэг.“{“ нь эхлэх үед тайлбарыг, ”}” –нь тайлбарын төгсгөлд хэрэглэгдэнэ.Тайлбарын өөр нэг нь (*тайлбар эхлэх,ба *) байдаг. Энд бас нэг тайлбарынтэмдэг байдаг: (*/*) тайлбарын тэмдэглэгээ нь том хэмжээний тайлбарыгхийхэд болно. Эдгээр тайлбарын төрлүүд нь нэг эсвэл олон мөрттайлбарыг хийхэд ашиглагдана.Тэмдэглэгээ: Угалзан хаалт нь Паскалд өөр хэрэглээтэй байдаг. $ -ийгхэрэглэх үед хаалт нь компиляторын директорыг заадаг. Компилятортcompiler hints үүсгэхгүй гэж зааж өгөн source коддоо {$HINTS OFF} гэжбичих хэрэгтэй. Компилятор энэ мөрийг хараад unit -д дохио өгөхөө{$HINTS ON} –тэй тулаад зогсооно.Тайлбарын 3 дахь хэлбэр нь давхар зураас байдаг. Энэ нь голдуу С -хэлбэрийн тайлбар гэгддэг яагаад гэвэл С ба С++ үүнийн хэрэглэдэг. Энэхэлбэр нь нэг мөрөнд хэрэглэгддэг. Delphi -д энэ хэлбэр ажилладаггүйгэдгийг хэлье.Тэмдэглэгээ: Энд угалзан хаалт хэрэглэсэн байгаа. ”//” -ийг богинотайлбарт болон тестийн зорилгоор ашигласан .Аль ч тайлбарлагдсан текст нь компиляторт хамааралгүй байдаг. Хэрэв таdefault Delphi IDE settings -ийг ашиглаж байгаа бол бүх тайлбар мөр ньбичмэл хөх текст байгаа. Энэ нь тайлбарыг хурдан ялгахад дөхөм байдаг.Тэмдэглэгээ: Хэрэв та багийн бүрэлдэхүүнтэй програмчлалын ажилхийдэг бол та хамтран ажиллагчдынхаа код, бичлэгийг уншдаг байх.Кодонд товч тайлбар хийх нь аль ч програмистад цагийг нь хэмнэнэ. Таганцаараа ажилладаг гэсэн ч тайлбар бичих нь чухал. Та бичсэн кодооямар амархан мартаж байгаагаа хараад л гайхна. Сайн кодын тайлбар ньтаны хамтрагчийн цагийг хэмнээд зогсохгүй таныг ч бас аварна. Кодынтайлбар бичихээ бүү март!ХувьсагчидХувьсагчид нь хэрэглэгдэхээсээ өмнө зарлагдсан байдаг. Та хувьсагчдыгкодын тусгай хэсэгт зарлах ба var түлхүүр үгээр тодорхойлох хэрэгтэй.Жишээ нь:varX : Integer; { X хувьсагч нь integer төрөлтэй }Y : Integer; { Байршлын y утга }Өмнө нь “var” түлхүүр үгийн тухай Паскалийн unit -ийн нэр томъёонддурдсан билээ. Тэр хэсэгт unit -д хувьсагчуудыг хэрэглэдэг ба unit -ийн varхэсэгт зарладаг гэж үзсэн билээ. Тэр нь үнэн ч та бас функц,процедуруудыг энэ хэсэгт зарлаж болно. Функц, процедурт хувьсагчуудыгзарлах боломжийг энэ нь танд олгож байгаа болно. Доорх жишээ ньпроцедурт var хэсэг байна.procedure TForm1.Test;varS : string;beginS := ‘Hello World!’;Label1.Caption := S;end;Та хувьсагчаа зарласны дараа үүнийгээ санах ойд өгөгдлийг зохицуулахадхэрэглэж болно. Энэ мэдээж танд нэг их сэтгэгдэл төрүүлэхгүй байх гэхдээхэдэн жишээг танд танилцуулъя. Дараах кодын хэсэг нь X, Y гэжзарлагдсан хувьсагчуудыг хэрэглэсэн. Мөр болгоны эцэст байгаа тайлбар
  • 13. нь юу биелж байгааг тайлбарлана.X := 100; { ‘X’ нь одоогийн утга нь: 100 }X := X + 50; { ‘X’ нь одоогийн утга нь: 150 }Y := 150; { ‘Y’ нь одоогийн утга нь: 150 }X := X + Y; { ‘X’ нь одоогийн утга нь: 300 }Inc(X); { Нэмэгдүүлж байна. ‘X’ нь одоогийн утга нь: 301 }Хувьсагч бол компьютерийн санах ойд байрласан хэсэг утга юм. Эрхэмуншигч та энэ кодны тухай зарим зүйлсийг тэмдэглэж аваарай. Юунытүрүүнд Х хувьсагчийн өөрчлөлт (Бид дараа Object Pascal хэлнийхувьсагчийг удирдах оператор, функц, процедурын тухай үзэх болно.)Дараах хувьсагчууд нь нэмэлт, сонгогдсон утга юм.Програмын кодын мөр бүрийн төгсгөлд цэг таслал (;) тавидаг.САНАМЖ: Паскаль хэлийг эхлэн суралцагчид програмын кодуудынхоорондын ялгааг мэддэг байх хэрэгтэй. (зарлагдсан өгөгдөл, утга,хувьсагч, илэрхийлэл г.м)c := a + b;Дээрх жишээнд с хувьсагчид a болон b хувьсагчдийн нийлбэрийн утгыголгож байгаа үйлдэл болно. Энд a + b нь илэрхийлэл юм. Нэг мөрөндолон илэрхийлэл бичигдэж болох бөгөөд төгсгөлд нь цэг таслалтавигдана. Зарим тохиолдолд цэг таслал тавигдахгүй байж болдог. Үүнийгбид дараа нь үзнэ.Хувьсагчийн нэрийн ард хувьсагчийг тодорхойлсон төрөл бичигдэнэ. Функцболон процедурт хувьсагч, хувьсагчийг тодорхойлсон төрлийг зарлажөгдөг. Мөн хувьсагчийн нэрэнд том жижиг үсэг болон доод зураас, тоогхольж хэрэглэж болно. Ихэнхдээ том үсгээр эхэлдэг ба харин доодзураасаар эхлэхийг зөвшөөрдөггүй. Хэдийгээр хувьсагчийн нэр нь 255хүртлэх тэмдэгтээс тогтож болох боловч яг үнэндээ 20 тэмдэгт ч гэсэнашиглахад хэцүү байдаг.МашУртХувьсагчийнНэр : Integer; { урт хувьсагчийн нэр }Миний_хувьсагч : Integer; { доогуур зураас ашигласан }x : Integer; { нэг тэмдэгт ашигласан }X : Integer; { нэг тэмдэгт ашигласан}Тэмдэглэгээ2 : string; { үсэг болон тоо ашигласан }САНАМЖ: Паскал хэл нь тохиолдлыг нарийн мэдэрччаддаггүй. Жишээ нь:varXPos : Integer;{ ...later }XPos := 20;XPOS := 200;xpos := 110;XpoS := 40;Паскаль хэл нь С ба С++ хэлтэй харьцуулахад ойлгомжмуутай байж болох юм. Гэхдээ та удахгүй үүний ялгааг олж,ашиглаж сурах болно.САНАМЖ: Паскал хэл нь тохиолдлыг нарийн мэдэрч чаддаггүйболовч та програмдаа тэмдэгт мөртэй ажиллахдаа том үсэгашиглаж сурах хэрэгтэй.Обьект Паскал хэлний Өгөгдлийн төрөлШинээр: Объект Паскалийн өгөгдлийн төрөл нь санах ойд мэдээллийгхадгалдаг хөрвүүлэгч /compiler/ аргыг тодорхойлсон.Зарим програмчилалын хэлэнд хувьсагч олон төрлийн утгатай байжболдог. Жишээ нь доорх BASIC код юм.X = -1;X = 1000;X = 3.14;BASIC хэлэнд тооны төрөл хэмжээг тааруулахын тулд санах ойнзохицуулалтад анхаарах хэрэгтэй.Хувьсагчийг зарлахПаскал хэлэнд хувьсагчийг програмд ашиглахаасаа өмнө төрлийг нь
  • 14. зарлаж өгөх ёстой.varX1 : Integer;X : Integer;Y : Double;Z : Byte;{ ...ө.х }X1 := -1;X := 1000;Y := 3.14;Z := 27;Өгөгдлийн төрлөө зөв сонгосноор програмын үр дүн зөв гарна гэсэн үг.Тиймээс програмаа ажиллуулахаас өмнө өгөгдлийн төрлөө сайн нягтлажшалгах хэрэгтэй.Зарим өгөгдлийг signed, unsigned –аар өргөтгөж болдог. Өгөгдлийн signedтөрөл нь эерэг ба сөрөг утгыг авдаг бол unsigned төрөл нь зөвхөн эерэгутгыг авдаг. Хүснэгт 1.1 д Паскалийн үндсэн өгөгдлийн төрлүүдийн санахойд эзлэх хэмжээ болон авч болох утгын хязгаарыг үзүүлэв. Хүснэгтэд"String" буюу тэмдэгт мөрийг оруулаагүй. Харин "Strings" гэсэн дараагийнбүлэгт авч үзнэ.ХҮСНЭГТ 1.1. ОБЪЕКТ ПАСКАЛД АШИГЛАДАГ ӨГӨГДЛИЙН ТӨРЛҮҮД (32-BIT).
  • 15. Дээрх хүснэгтэд үзүүлснээр 32 битийн орчинд Integer, LongInt төрлүүд ньсанах ойд ижил 4 байт эзлэж байна. Энэ нь Delphi 4.0 -ийн орчинд нийцэжбайна. Харин 16 битийн орчинд Integer нь 2 байт эзлэж байхад Longint нь 4байт эзлэдэг.Ихэнх програмистууд LongInt –ээс илүү Integer –г өргөн хэрэглэдэг.Мөн Int64, Comp (computational) төрөлүүд нь авч болох утгын хэмжээ ижилбайна. Харин ялгаатай тал нь өөрсдийн дотоод хөрвүүлэлт хийдэг арга юм.Int64 нь integer төрөл, харин Comp нь real төрөл юм.Real ба Double төрлүүд нь ижил юм. Delphi програмын өмнөх хувилбартReal төрөл нь 6 байт байсан бол одоо 8 байт болсон. Энэ өөрчлөлт нь Realтөрлийг өнөөгийн хэв маягт ашиглах нөхцлийг бүрдүүлж өгсөн хэдий чDelphi програмд ашиглагдахдаа Double төрлөөс багаар ашиглагддаг буюухуучирсанд тооцогддог.САНАМЖ: Windows нь 2,147,483,647 (integer –н maximum утга)– аас илүү утга буцааж чадах GetDiskFreeSpaceEx функцыгагуулдаг.САНАМЖ: Single, Double, Extended, Currency өгөгдлийнтөрлүүд нь float төрөлд хамаарагдана.(10 -тийн тооллынсистем). Харин бусад төрөлтэй integer –ээр холбогддог. integerнь бутархай тоон утгыг илэрхийлдэггүй. Жишээ нь дараахькодод буруу зарласан байна.varX : Integer;{ Дараа нь... }X := 3.75;Энэ үед алдааг тань Паскал хэл тэр дор нь танд хэлж өгнө.Харин та үүнийг мэдсэнээр float төрөл нь Windows орчиндямар их ашиглагдахыг анзаарах болно.Өгөгдлийн төрлүүдийн хоорондох хөрвүүлэлтОбъект Паскаль нь өгөгдлийн төрлүүдийн хооронд хөрвүүлэлт хийжчаддаг. Жишээ нь:varRes : SmallInt;Num1 : Integer;Num2 : Integer;{ Дараа нь... }Num1 := 200;Num2 := 200;Res := Num1 * Num2;
  • 16. SmallInt дэх Integer төрөлтэй хоёр өгөгдлийг хооронд нь үржүүлж үр дүнг ньгаргаж байна. Энэ томъёо нь хоёр өгөгдлийн төрлийг холисон хэдий чОбьъект Паскаль хөрвүүлэлт хийж чадаж байна. Хариу буюу үр дүн нь -25,536 гарна. Хүснэгт 1.1 -д үзүүлснээр SmallInt нь хамгийн ихдээ 32,767утга авдаг. Тэгвэл энэ 32,767 дээр нэгийг нэмбэл хариу нь -32,768 болно.Та үүнийг туршихын тулд доорхи зааврын дагуу ажилларай.1. Шинэ проект нээж form -д label ба button -г байрлуул.2. button дээр Double-click хийж OnClick event -ийг сонго.3. Дараахь байдлаар бичнэ.procedure TForm1.Button1Click(Sender: TObject);varX : SmallInt;beginX := 32767;X := X + 1;Label1.Caption := IntToStr(X);end;4. Run хийж button товчоо дар.Label -ийн caption дээр -32768 болж өөрчлөгдснийг та харах болно./IntToStr функц нь integer -ийн утгыг string болгон хөрвүүлнэ./ Дээрх дасгал32767 нэмэх 1 тэнцүү 32768.Дээрх жишээ нь overflow ба wrapping гэж юу болохыг харуулж байгаа юм.Хувсагчдын утгын хувьд overflow буюу орон халилт үүсэхээргүй /ө.хmaximum -аас бага/ байх ёстой. Integer төрөл нь ойролцоогоор –2 -оос +2тэрбумын алслалттай байдаг.Зарим тохиолдолд Object Pascal нь хөрвүүлэлт хийж чаддаггүй. Сompilererror нь Integer Real хоёр хоорондоо хамааралгүй төрлүүд гэж мэдээлнэ.Сompiler error нь тодорхой төрлүүдэд хадгалагддаггүй утгуудыг зааж өгнө.Жишээ болгон доорх кодыг авч үзье.varX : Byte;beginX := 1000;end;Тогтмолыг зарлах Сompiler error –г харуулж байна. Танд Х хувьсагчийнутгыг 1000 гэж сонгож болохгүйг Сompiler нь мэдээллэх бөгөөд учир нь Ххувьсагч нь Byte хэмжээтэй ба Byte нь 0 - 255 хүртэл хэмжээтэй байдаг.Зөвлөгөө: Сompilе хийхдээ санамж анхааруулга алдаанымэдээлэл зэргийг сайтар дагах хэрэгтэй. Тэдгээр ньпрограмын кодын алдаа хэрэгцээтэй зарим мэдээллүүдийгхэлж өгдөг.Обьект Паскалийн ОператорХүснэгт 1.2 Түгээмэл ашиглагддаг операторууд.
  • 17. Операторуудын хувьд байнга хэрэглэгдэж байдаг хэсэг нь байхад басхааях ашиглагддаг операторууд ч байдаг.Аnd, or, not зэрэг түлхүүр үгс нь логикийн болон битийн гэсэн төрөлтэйбайдаг. Жишээ ньif (Started = True) and (X > 20) thenZ := X and Y;Дээрх жишээнд and үйлдэл нь хоёр янзаар хэрэглэгдэнэ.ТогтмолӨмнө хэлсэнчлэн тогтмол нь утгын хувьд өөрчлөгдлөггүй. Хувьсагчийнутгыг програм бичигч өөрчилж чаддаг бол тогтмолын утгыг чаддаггүй.Тогтмолыг зарлахдаа const түлхүүр үгийг ашигладаг.constDefaultWidth = 400;DefaultHeight = 200;Description = ‘Something really cool.’;Тогтмолыг зарлахдаа (:=) тэмдэг бус = тэмдэгийг ашигладаг. Мөн ямар чөгөгдлийн төрлийг онцолж заадаггүй.Массив
  • 18. Массив буюу array нь бүлэг утгын цогц гэж хэлж тодорхойлж болно.Өөрөөр хэлбэл нэг төрөлтэй хэсэг элемент юм. Зарлах үед түүнийг санахойн тодорхой зайд байрлуулдаггүй ба зөвхөн заагчийн эхлэх утгатогтоогддог. Массивыг дараах хэлбэрээр зарладаг.varMyArray : array[0..4] of Integer;Integer нь 4 байтын санах ойтой учраас дээрх массивын хувьд 5 индекстэйтул санах ойд 20 байт эзлэж байна.MyArray массив 5 гишүүн буюу индекстэй. Индексээ дугаарлажтэмдэглэхдээ [ ] хаалтад бичиж өгнө. Массивийн гишүүн тус бүрд доорхжишээнд анхны утга олгов.MyArray[0] := -200;MyArray[1] := -100;MyArray[2] := 0;MyArray[3] := 100;MyArray[4] := 200;Дараагийн жишээнд 3 ба 4 –р индексуудын утгуудыг хооронд нь нэмж Ххувьсагчид олгож байна.X := MyArray[3] + MyArray[4]; { үр дүн 300 }Олон хэмжээст массивМассив нь олон хэмжээст байж болно. Өөрөөр хэлбэл санах ойд мөрмөрөөрөө дараалж ажилладаг. Хоёр хэмжээст integer төрөлтэй массивүүсгэхийн тулд кодыг дараахь хэлбэрээр бичнэ.varMdArray : array[0..2, 0..4] of Integer;Энэ массив санах ойг 60 байтаар ачаалж байна. Массивын утга нь урд ньсанах ойд байрлаж байсан санамсаргүй өгөгдөл юм. Мөн индекс нь тэгээсэхэлдэг. Массивийн элементүүдийг энгийн масив хэлбэрээр ашиглажболох ба [ ] хаалтын тусламжтай дараахь хоёр байдлаар ашиглаж болно.Үр дүн нь ижил гарна.X := MdArray[1][1] + MdArray[2][1];X := MdArray[1, 1] + MdArray[2, 1];САНАМЖ: Массивийн элементийн тооны хязгаарт байхгүйиндекс гарч ирвэл алдаа заана. Доорхи жишээнд үзүүлэв.varMyArray : array[0..4] of Integer;X : Integer;beginX := MyArray[3] + MyArray[5]; { 5 дугаартай индекс байхгүй. }end;Тэгэхээр массивийн элементийн хязгаарыг анх зарлаж өгөх хэрэгтэй.Жишээ нь 10*20 хэмжээтэй массив үүсгэе.varMyArray : array[10..20] of Integer;10 баганатай 20 мөртэй хүснэгт мэтээр төсөөлье.constmyArray : array[0..4] of Integer = ( -200, -100, 0, 100, 200 );Их ба бага функцЭдгээр функцуудыг массивт олон дахин ашиглаж болно. Хувьсагчийн утгындээд доод хязгаарыг массивт энгийн байдлаар зарлаж өгдөг. Бага /Low/функц нь доод хязгаараас буцах үйлдэл /return/ хийдэг. Харин Их /High/функц нь мөн адил массивын дээд хязгаараас буцдаг.varX, I, Lower, Upper : Integer;MyArray : array[10..20] of Integer;begin{ MyArray массивын эхний хэсэг }Lower := Low(MyArray); { Lower нь 10 }Upper := High(MyArray); { Upper now contains 20 }X := 0;
  • 19. for I := Lower to Upper doX := X + MyArray[I];{ Х хувьсагч дээр ямар нэг зүйл хийнэ. }end;Массивийн хязгаарын гаднах утга нь ойртоход их ба бага функц тодорхойбиш хэрэглэгддэг.Динамик МассивDelphi 4 -т массивийг динамикаар оруулдаг. A динамикийн массивийнэхний хэмжээг гаднаас зарласан ба массивийг зарлах цагт хэмжээг ньтавьж агуулдаггүй. Дараа нь SetLength -ийн хэмжээг заан хэрэглэдэг.Жишээ нь:varBigArray : array of Integer; { хэмжээ олгоогүй байна }X : Integer;beginX := GetArraySize; { хэрэгтэй хэмжээг тодорхойлогч функц }SetLength(BigArray, X); { динамикаар хэмжээ тогтоож байна }{ одоо BigArray –г хэргэлнэ}end;Шинээр : A динамик массив нь массиваа санах ойд ачаалдаг. A динамикмассив нь програмд их бага хэмжээгээр хэрэглэгддэг.Массивийн индекс бүрд элемент харгалзуулан байрлуулах нь ачхолбогдолтой. Санах ойд 10 integer хангалттай байлгах хэрэгтэй гэвчбусад нь магадгүй 1000 integer хангалттай хэрэглэдэг.Массиваа Copy функцээр байрлуулан хэрэглэж чадна.Жишээ нь массив нь 100 ба 200 хэмжээтэй элемент хэрэглэдэг :Copy(BigArray, 200);Массивдаа утгыг нь хадгалсан ба массивийн хэмжээ нь 100 -с 200 элементболон өссөн.Олон хэмжээст dynamic массивыг үүсгэх нь нэг хэмжээст массивыгүүсгэхтэй бараг адилхан байдаг. Доор 2 хэмжээст массивыг үүсгэв. Код нь:varBigArray : array of array of Integer;beginSetLength(BigArray, 20, 20);BigArray[0][0] := 200;end;StringsПрограмд String -тэй ажиллахад хэцүү. Object Pascal нь 3 string төрөлтөй:long string, short string, ба wide string.Нэмэлт string төрөлтөй, энэ нь төгсгөлгүй string-briefly ба stringmanipulationфункцтэй.Short StringБогино string төрлийн урт нь тогтмол, тэмдэгтүүдийн хамгийн их хэмжээ нь255 тэмдэгт байдаг. Богино string нь 1 -ээс 2 замтай ба 1 зам нь 255 byteхэмжээтэй ShortString -д зарлагддаг.varS1 : ShortString; { 255 тэмдэгт }S2 : string[20]; { 20 тэмдэгт }String manipulation нь short төрөлтөй учир нь санах ой дахь string -ийнхэмжээг өөрчлөхгүй. Богино string хуучин төрлийг нь бодох ба урт stringоруулна. Богино strings нь урт byte -тай учир нь string -ийн анхны элементнь уртаа агуулдаг. (тоо болон тэмдэгт). Short string -ийн анхны элементийнутга нь string -ийнхээ уртыг тодорхойлдог. Жишээ нь :varS : ShortString; { 255 тэмдэгт }Len : Integer;beginS := ‘Hello’;Len := Ord(S[0]);
  • 20. end;Дээрх жишээнд string -ийн уртыг S[0] утга тодорхойлж байна. Мөн функцынуртыг тодорхойлж чадна. Функцын урт нь bit байна.Санамж : Ord функцын утгыг Char төрөл, integer утгаархувиргаж хэрэглэнэ. (дараалсан утга) Мөн Ord функц ньжагсаалттай хамт хэрэглэгддэг.Хэрэв та short string -ийн эхний элементийг хэрэглэх бол түүний урт ньstring байна. Тэгэхлээр програмын орчинд түүнийг хэрэглэх шаардлагагарч ирж байна. Эхлэн суралцагч таны хувьд програм техникийн дэвшилтэттехнологид 0 байтын short string -ийг нэмж судлахыг санал болгож байна.Long Stringlong string төрөл нь string объектэд динамик байдлаар байрладаг.Хэмжээний хязгаар нь зөвхөн ачаалагдсан санах ойгоор тодорхойлогддог.Объект Паскал нь санах ойд string -ийг байршуулж бас устгаж хэрэглэдэг.Long strings нь харин маш их уян хатан чанартай бөгөөд заримдаа shortstring шиг удаан болхи мэт нарийн төвөгтэй тэмдэгтүүдээ ачаалдаг.Хэрэв үр дүн тань шүүмжлэлтэй санагдвал long string-ийг ашиглаарай.Динамикаар санах ойд байрлуулснаар long string нь тэмдэгт мөрийнгарчгийг өөрчлөх боломжтой болсон Доорх жишээнд string нь түлхүүр үг,параметрийн хэмжээгүй зарлагдсан байна.varS : string; { динамикаар байрласан long string }Учир нь string нь динамикаар байрласанд оршино. Харин танд одооүйлдлийн хэсэгт өөрчлөлт хийж чадах боломж үлдсэн шүү. Ер нь long stringнь хэрэглэхэд маш энгийн ба өөрөөр хэлбэл тэмдэгт мөрөө санах ойгоосачаалах үед зай завсар гэх мэтийн санаа зовоосон асуудал гарахгүй. Учирнь энэ бүгд илүүчгүй дутуучгүй бүгд автомат юм.Long string нь 0 элементийг зөвшөөрдөггүй бөгөөд хэрэв түүнд хандвал үрдүн тань compiler error буюу алдаатай гарна гэсэн үг. SetLength функцийгашиглавал зохистой.Wide StringUnicode төлөв байдалтай double-byte хэрэглэдэг. Windows API функцэдхэрэглэгддэг. long string -ийн адилаар авах утгын хэмжээний хязгаар ньзөвхөн ачаалагдсан санах ойгоор тодорхойлогддог. string объектэддинамик байдлаар байрладаг. Үүнээс илүү деталчилсан мэдээллийг таолж авч чадахгүй болов уу. Учир нь OLE function -той дуудуулах хязгаартайбайдаг.Null /хоосон/ - Төгсгөгч Strings: PChar ба Char -ын МассивОбъект Паскал нь С ба C++ хэлнүүдээс string өгөгдлийн төрлөөрөөялгаатай. C ба C++ -д string нь 0 нь төгсгөлийг заадаг. Мөн массивын уртнь байтаар биш байдаг. PChar төрлийг дүүргэж хэрэглэх хэрэгтэй бамассивын бүх төрлийг ашиглаж болдог. Жишээ нь Windows MessageBoxфункц юм. Энэ функц нь Windows -ийн стандарт message мэдээллүүдийгдэлгэц дээр гаргадаг.function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT):Integer;Хоёр дахь ба гурав дахь параметрүүд нь массивын элементийг заагчаархаруулж байна.(message box текст, message box caption). Эдгээрфункцуудыг та Delphi програмаас дуудан ажиллуулж болно. PChar type -ийн жишээ код:varText : string;Caption : string;beginText := ‘Шалгаж байна.’;Caption := ‘Текст мэдээлэл’;MessageBox(0, PChar(Text), PChar(Caption), 0);end;Дээрх жишээнд Pchar -ыг Pascal -ын long string, null-terminated stringашиглан үзүүллээ. Харин та өөрөө Pchar -ыг үргэлжүүлж судлаарай.
  • 21. varText : PChar;beginText := ‘Шалгаж байна.’;MessageBox(0, Text, ‘Message’, 0);end;Pascal -ын string нь хүчирхэг төдийгүй хялбарханаар хэрэглэгдэж байна.Та үүнээс олон удаа хэрэглэх боломж байхгүй. Pchar -ыг long string, nullterminatedstring руу хөрвүүлж болдгийг дээрх жишээ харууллаа. Төгсгөлднь та массивт Char төрлийн өгөгдлийг Pchar ашиглан байршуулж үйлдэлхийж сурлаа.varText : array [0..20] of Char;beginText := ‘Шалгаж байна.’;MessageBox(0, Text, ‘Message’, 0);end;Windows API функцийг дуудахдаа null-terminated string -ийг параметраарашиглавал илүү тохиромжтой.Үндсэн Тэмдэгт мөр /String Basics/Pascal нь нилээн хэдэн string төрлийн элементүүдтэй.+ OperatorvarS1 : string;S2 : string;beginS1 := ‘SW210 Kim’;S2 := ‘Reisdorph’;Label1.Caption := S1 + ‘ ‘ + S2;end;Дээрх кодод S1, S2 хувьсагчдийн үр дүнг label -ын Caption property –ээрдамжуулан харууллаа. Одоо арай өөр жишээ үзье:varX : Integer;beginX := 199;Label1.Caption := ‘The result is: ‘ + IntToStr(X);end;Энд IntToStr функц ашиглан 199 гэсэн тоог тэмдэгт мөр болгонхувиргалаа.Subscript OператорТэмдэгт мөрөөс subscript ([ ]) –г ашиглан элемент бүрийг нь салган авчболдог.varS1 : string;S2 : Char;beginS1 := ‘Hello World!’;S2 := S1[1];Label1.Caption := S2;end;Дээрх жишээнд S2 хувьсагч нь Char төрлийн байна. Үр дүнд Н гэжLabel1.Caption дээр гарна. S[0] -ийг эхний элемент гэж long string, widestring -үүд үздэггүй.String -ийн контрол буюу тохируулгаObject Pascal нь String -ийн контрол буюу тохируулгыг шинээр нэвтрүүлжөгсөн. Ихэвчлэн хэвлэдэггүй тэмдэгт мөрд ашигладаг.Та control character хийхдээ # тэмдэг ашиглах ёстой. Доорх жишээнд (ASCII27) гэж тэмдэглэжээ.
  • 22. S := ‘This is a test. Escape follows.’#27’ Finished.’;S1 := ‘This is a test. Escape follows.’;S2 := ‘Finished.’;S3 := S1 + #27 + S2;Эндээс та хялбархан онол гаргаж болно. Form дээрээ button, label үүсгэ.button дээрээ Double-click /хулганаа товших/ хийж event -ийг нь OnClickболго:Label1.Caption := ‘Line 1’ + #10 + ‘Line 2’;Run хийж button товч дээрээ дар. Label 2 шугамаар мэдээллээ гаргадаггэдгийг та одоо мэдэж авлаа. Дээрх кодын хувьд (ASCII 10) -ыг 2 шугамаарүзүүлхэд ашиглаж байна.Том хэмжээний текстэн мэдээлэлийг нэг шугамаар авч болно.(ойролцоогоор 200 орчим тэмдэгт орсон үед) Delphi Code Editor нь хамгийнихдээ буюу 1,024 тэмдэгтээс тогтож болдог. Ийм хэмжээний мэдээллийнунших бүрэн бололцоотой гэж үздэг. Тэмдэгт мөрийн олон шугаманхэлбэрийг + operator -той жишээг доор үзүүлэв.MessageBox(0, ‘Энд маш урт message ‘ +‘that seems to go on and on forever. In order ‘ +‘to make the code more readable the message has ‘ +‘been split across several lines of code.’, ‘Message’, 0);Тэмдэгт мөрийн харьцуулах үйлдэлString нь харьцуулах операторын тусламжтай харьцуулалт хийж чаддаг.Хүснэгт 1.3 их ашиглагддаг операторуудыг жагсаан бичив.ХҮСНЭГТ 1.3. ТЭМДЭГТ МӨРИЙН ХАРЬЦУУЛАХ ОПЕРАТОР. Эдгээр операторууд нь ASCII кодоорхарьцдаг. Мөн үйлдэлд биелэгдэхдарааллаараа ялгагдана. Тэнцүү үйлдлийн буруу ашигласан жишээ:if FileName = ‘TEST.TXT’ thenOpenFile(FileName)elseReportError;String-Manipulation ФУНКЦИхэвчлэн ашиглагддаг функцуудын тайлбарыг доорх 1.4 хүснэгтэд үзүүлэв.ХҮСНЭГТ 1.4. ТЭМДЭГТ МӨРИЙН ФУНКЦ БА ПРОЦЕДУРУУД
  • 23. САНАМЖ: Нэмэлт функцуудын талаар мэдээллийг Delphiпрограмын help руу орж additional дотроос олж аварай.Одоо жишээн дээр StrToInt function туршиж үзье.Value := StrToInt(Edit1.Text);Өөр StrToXXX функц (StrToFloat, StrToDate гэх мэт) дээрх замын дагууажиллана.Format function нь тэмдэгт мөр ба нэмэлт аргументэд хэвшүүлэлт хийдэг.Доорх жишээн дээр үр дүнг нь үзье.varS : string;X : Integer;beginX := 10 * 20;S := Format(‘Үр дүн: %d’, [X]);Label1.Caption := S;
  • 24. end;Үр дүн: 200Энэ жишээнд %d тэмдэгт нь integer утгыг илэрхийлж байна. Мөн бусадтэмдэгтэй хувьсагчаар дамжуулан ажиллана. Жишээ нь:varX : Integer;Y : Integer;beginX := 20;Y := 5;Label1.Caption := Format(‘%d + %d = %d’, [X, Y, X + Y]);end;Дэлгэцэнд үр дүн нь гарахдаа дараах байдалтай байна.20 + 5 = 25Энэ жишээнд label -ын Caption property –г ашиглалаа. Өмнөх болон дараадараагийн жишээнд ашиглаж бас болно."Format Strings" –н талаар илүү их мэдээлэл үзье гэвэл Delphi help -ээсаварай. Windows үйлдлийн системийн ерөнхий зохион байгуулалтын талаартовчхонWindows-н өмнөх хувилбарууд MS-DOS үйлдлийн системтэй сайн зохицонажилладаг боловч үйлдлийн систем гэсэн утгандаа бүрэн хүрч чадахгүйбайсанбол өнөөгийн Windows95 өөрөө 1 цогц үйлдлийн системийг илэрхийлжчадахболжээ.Windows95 үйлдлийн систем нь ерөнхийдөө 3 дэд системд хуваагддаг.1. Win KERNEL2. Win GDI3. Win USERWindows95 нь 16 болон 32 битийн программуудыг ажиллуулахдаасистемийнвиртуаль машин болон дээрхи 3 дэд системийн тусламжтайгаар зохионбайгуулдаг. Системийн виртуаль машин гэдэг нь Windows-н бүх ажлыгдэмжижбайдаг Windows95-н бүрэлдхүүнд ордог үйлдлийн орчин юм. Мөн дээрхи 3дэдсистемийн ажлыг дэмжиж байдаг.32 битийн win гэдэг нь санах ойн 32 битийн моделийг ашиглаж байдагwindows-ншинэ хэрэглээ юм. Харин 16 битийн win гэдэг нь бидний урьд өмнөхэрэглэжбайсан windows-н хуучин хувилбарууд юм. Тэдгээр нь санах ойнсегментийнхаяглалтийг буюу чухамдаа 80286 процессорын санах ойн моделийгашигладаг.Тэдгээр нь Windows 3.x –нх шиг ажиллахдаа Windows95 нх шиг нэгдмэл нэгорон зайг хуваан эзэмшдэг бөгөөд олон бодлогын зарчимтайзохицодоггүй.Windows95-н хэрэглээний программийн төвшинд Windows 3.x –н API бүрэнтохирч ажилладаг.Win32 API нь Microsoft –н WinNT, Win32S, Win3.1-н өргөтгөл win32 битийн
  • 25. интерфейс юм. Windows95 үйлдлийн систем нь олон бодлогын аргадүндэслэндээрх application-уудыг жолооддог. Бүрхүүл гэдэг нь хэрэглэгчийгсистемтэйхарилцах үйлдлийг хангаж байдаг 32 битийн Windows application юм.Windows95-н бүрхүүл нь windows3.x-н программ менежер, файл менежерзэргийг нэгтгэсэн application юм.KERNELKERNEL нь windows-н доод түвшиний динамик санах ойн функцүүдээрхангажөгч байдаг үйлдлийн системийн цөм юм. Энэ нь 16 ба 32 битийн windows-нүйлдлүүд тохирохүйлчилгээг хангадаг.GDIGDI нь graphic device interface гэсэн товчилсон үг. Энэ нь Windows95-нграфикболомж болон дэлгэцэнд харуулах өнгө, хэлбэр дүрс, resolution-г хангажбайдаг.Win32 –т байдаг бүх шинэ боломжуудыг агуулна.USERUSER нь дэлгэцийн диспетчер юм. Windows-н интерфейсийг үүсгэх,удирдахфункцүүдийн цргц юм. Жишээ нь Хэрэглэгч хэд хэдэн MS-DOS –н Promptгарганашиглаж болно.Хэрэглэгч арай илүү виртуалчилах боломжийг хангадаг хэд хэдэн давуутал гарчирлээ.Системийн виртуаль машинWindows-н API функцийн төвшинДээр харлуулсан орон зайг хамтарч эзэмшинэ. Энэдээс Windows95 нь 16битийнпрограммуудад тусад нь орон зай гарган өгч орчинийг нь бүрдүүлж өгдөгньхарагдаж байна.Windows32 bitWindows32 bit16 bit16 bitБүрхүүлWindows-н дэд системWin KERNELKERNELWin USER Win GDIФайл удирдах дэд систем
  • 26. Сүлжээ удирдах дэд системҮйлдлийн системийн үйлчилгээВиртуал машин удирдах дэдсистемХөтлөгч хэрэгслүүдБүрхүүлЭнэ нь хэд хэдэн системийн удирдлагыг хэрэглэх нөөцүүдийнболомжуудаархангах программ юм. Windows95-үйлдлийн системийн бүрхүүл нь дэлгэцсистемийн нөөцүүдтэй харилцан ажиллахыг удирдан зохион байгуулдаг.APIХэд хэдэн зуун API функцүүд windows-н бүх системийн хийх үйлдчилгээгхангажөгдөг. Windows-н орчин бол интерфейс баазын дуудалтаар ханддаг.Үүнийг APIгэдэг.Системийн виртуаль машинWindows-н бүх application ситемийн виртуаль машины тухайн хил хязгаартүйлдлээ гүйцэтгэдэг. 16 битын application –ууд өөрийн нэгдмэл хаяглалыноронзайд ажилладаг.Энэ нь application бүрийн өөрийн орон зайн хаяглалтыг 32 битынхаяглалтаархангаж дэмжиж өгдөг.MS-DOS-н виртуаль машинWindows95 олон тооны MS-DOS-н программыг хамгаалалтын горим эсвэл8086виртуаль үйл ажиллагаа ажиллуулж дэмжиж байдаг. MS-DOS-н виртуальмашинхэд хэдийг үүсгэж болно.Виртуаль машины диспетчерВиртуаль машины диспетчер нь үнэндээ үйлдлийн системийн зүрх юм.Энэ ньдоод түвшиний санах ойн удирдлага болон драйверуудын виртуальзохионбайгуулалтын үйлчилгээг хянаж ажилллаж байдаг.| Windows95 –н диспетчерүүдWindows95 –н виртуаль машины диспетчер дотор хоёр диспетчеражиллажбайдаг.Үүнд: Үндсэн диспетчер. (primary scheduler)Энэ нь thread-дын приоретитүүдийг тооцоолж хариу өгнө.Квантын диспетчер (timeslice scheduler)Энэ нь хугацааны квантуудад хувааж хэсэгчлэн ажилуулана.Үнэн хэрэгтээ квантын диспитчер аль thread-н ямар хувийг нь ямархугацаандпроцессороор үйлчлүүлэхийг тооцоолно.Процесс 0-31 хүртэл приоритеттой байдаг ба үүнийг үндсэн диспетчербодоод
  • 27. квантын диспетчер лүү гаргана. Хэрвээ процессийн хугацааны квант 100хувьболсон бол VMStat_Background эсвэл VMStat_High_Pri_Background гэдэгтөлвийг үлдээдэг.DELPHI ДЭЭР АНХНЫ АЛХАМ ХИЙЦГЭЭЕТа мэдэж байгаа Delphi бол Borland пүүсийн Windows-ийн орчныпрограмыгбичдэг дээд түвшний програм юм. Delphi -ээр та Windows -ийн орчныпрограммыг урьд байгаагүйгээр хялбар бөгөөд хурдан бичих боломжтой.Win32 эсвэл Win32 graphical user interface (GUI) -ийг та нээж ажиллуулжболно. Win32 GUI -ийг ажиллуулснаар та дээд түвшний програмчлалынхэлний үнэн хүч чадлыг мэдрэх болно. Мөн та Web browsers –ийгминутийндотор үүсгэдэг шигээ form дээрх ActiveX control -оор тусгай програмуудыгүүсгэж болно. Энэ мэт олон зүйлийн давуу талууд Delphi -д байдаг баDelphi нь өөрөө кодоо үүсгэдэг тул програмын биелэлт хурдан байдаг.Танд л гэж хэлэхэд Pascal -ын программчлалыг жаахан судлах хэрэгтэй.Delphi нь Windows програмчлалын доод түвшний нарийн зүйлүүдийгнуудагба энэ нь танд чухал биш. Эцэст нь та програмист л болохыг хүсч байгаабол энэ нь бүгдийг судлах хэрэгтэй. Delphi нь танд урьд байгаагүй хөгжилтаашаалыг авчрах болно. Ингээд ханцуйгаа шамлан бүх ажилдааорогтун.Delphi сэтгэлийн таашаалыг авчрах агуу программ юм.Delphi IDE -ийг өнгөц харъяЭнэ хэсэг нь Delphi integrated development environment (IDE) -ийг агуулна.Windows програмчлалыг судлах бүхэнд энэ нь хэрэгтэй юм. Та одооDelphi-ийг эхлэх урам зоригтой байгаа гэж бодож байна. Программыгэхлүүлэхэдта хоосон form ба IDE -ийг харах болно.
  • 28. Delphi IDE нь 3 хэсэгт хуваагдана. Дээд хэсгийг нь үндсэн цонх гэдэг. Энэнь toolbars болон Component palette -ийг агуулдаг. Delphi toolbars ньcompiling project, хадгалах, нээх үйлдлүүдийг нэг товшилтоор гүйцэтгэхболомжийг танд олгоно.Component palette нь wide array of components агуулдаг ба түүнийг formдээр чирч тавьж болно. Component -ууд нь text labels, edit controls, listboxes, buttons ба бусад болно. . Componentууд нь бүлгүүдэд хуваагдсанбайна. Component palette -ийн дээд талын tab -ыг харав уу?Дээр нь очоод click хийвэл өөр өөр component гарч ирнэ. Form дээрээcomponent -оо байрлуулахын тулд Component palette -ийн компонентынbutton дээр click хийж component -оо харагдах хэсэгт нь очоод click хийххэрэгтэй. Яаж хэрэглэх үр дүнд юу болох бол гэж санаа зовох хэрэггүй.Эдгээр нь хормын дотор болно.Шинэ нэр томъёо: Component гэдэг бол software -ийн 2 хэсгийг агуулсанба тусгай урьдчилан тодорхойлогдсон функц үйлдлийг нь гүйцэтгэжбайдаг. Жишээ нь: text label, edit control, list box.Обьектийн инспекторҮндсэн цонхны доор дэлгэцийн зүүн талд Object Inspector байна. Энэ ньcomponent -ийн properties ба events -үүдийг өөрчлөхөд ашиглагддаг.Delphi-тэй ажиллах явцдаа үргэлж Object Inspector -ийг та хэрэглэх болно.ObjectInspector нь 2 хэсэгтэй. Properties tab ба Events. Component -ийнpropertiesнь component -ийг яаж ажиллуулахыг удирдана. Жишээ нь : Color property-ийг өөрчлөхөд background color -нь өөрчлөгддөг.Шинэ нэр томъёо: property –нь component -ийн үйл ажиллагаагтодорхойлдог.Events хэсэг нь component -ын event -уудын жагсаалтуудаас бүрдэнэ.Component дотор үйлдэл хийхэд event -ийг ашигладаг. Жишээ ньcomponent дарагдахад event нь component дарагдсан байна шүү гэж тандхэлнэ.Та component -д хамаарах код бичиж болох ба тусгай үйлдлийггүйцэтгэхэд хэрэглэж болно.Шинэ нэр томъёо: event бол цонх ба хэрэглэгчтэй ажиллах component -ийн харилцан ажиллагааны үр дүн юм.Delphi –ийн ажлын талбарDelphi IDE -ийн үндсэн хэсэг нь ажлын талбар юм. Ажлын талбар нь FormDesigner -ийг үүсгэнэ. Энэ нь гайхмаар юм биш Form Designer нь өөрөөform үүсгэдэг. Delphi -д form гэдэг нь программын цонхыг хэлнэ. Form ньпрограммын үндсэн цонх байж болно, dialog box эсвэл цонхны янзбүрийнхэлбэртэй байж болно.Form Designer -ийг, form -ийг үүсгэх процессийн хэсэгт component -уудыгнь байрлуулах, зөөх зэргээр ашиглаж болно. Form Designer -ийн ардCodeEditor байдаг. Программын кодыг Code Editor дээр бичдэг. Application -ийгүүсгэн ажиллах явцад Object Inspector, Form Designer, Code Editor, баComponent palette -ууд нь харилцан уялдаатай байдаг. Та Delphi IDE-ийгмэддэг боллоо одоо ямар нэг зүйлийг хийж үзье.
  • 29. Таны эхний програм: Hello WorldДэлгэцэнд Hello World гэж хэвлэх нь бүх програмчлалын хэлний сурахбичигт байдаг уламжлалт програм юм. Заавал ийм байх албагүй гэж бибоддог. Pascal хэлийг өмнө нь судалсан бол сайн юм. Та гайхаж магадгүйюм, Delphi танд одоогийн Windows program -ийн Hello World -д хүрэххамгийн хялбар замыг зааж өгнө.Програм бичихТа яг одоо Delphi -ийг ажиллуулж байгаа бол blank form -ийг харсан байхёстой. Form нь Form1 гэж нэрлэгдсэн байдаг. Form -ийн зүүн хэсэгт ObjectInspector form -ийн properties -үүдийг харуулна. Object Inspector -ийн titlebarдээр товш. Caption property нь идэвхжих ба cursor нь тэнд юу хийхийгхүлээнэ. Hello World! гэж бичин form -ийн caption -ийг өөрчил.Санамж: Properties -ийг өөрчлөх бол Delphi шууд өөрчлөлтийг ньгаргадаг.Caption -ийг өөрчлөх үед form -ийн window caption нь өөрчлөгдөж байгаагажигла.Toolbar дахь Run товчийг товш. Form нь гарахдаа caption нь Hello World!. -ийг гаргана. Энэ тохиолдолд ажиллаж байгаа программ нь бараг л blankform шиг харагдана.Програмыг өөрчлөхОдоо программаа жаахан өөрчилье. Hello World чинь байгаа бол Closebutton дээр товшин хаах хэрэгтэй. Form Designer дахин гарч ирэх ба form-ийг өөрчлөх боломжтой. Программыг илүү сайжруулахын тулд цонхнытөвдтекст нэмэх хэрэгтэй. Үүнийг хийснээр form -доо text label -ийг та нэмжөгнө.1. Эхлээд Component palette -ийн Standard хэсэгт товш.2. Label button -ийг товшоод form -ийн хаа нэгтээ товш. Labelcomponent нь form -ийн дотор байна.3. Object Inspector дээр буцаад оч. Label1 -ийн properties -ууд гарчирсэн байгаа. Caption property нь бас идэвхжсэн байгаа.4. Object Inspector эсвэл Caption property -ийн titlebar дээр товштэгээд Hello World! гэж бич. Form -дээрх label нь Hello World!. гэжгаргана.5. Үүнийг хийсэн бол label -ийн text -ийн хэмжээг өөрчилж чадна.Font property дээр 2 товш. Property нэмэлт font attribute -ийгхаруулахын тулд өргөн болно.6. Font -ийн Size property -ийг 24 болгоод form -дээрээ товш. Labelшинэ хэмжээтэй болно.
  • 30. Програмаа хаахDelphi -д жаахан дурласан бол энэ нь бүхнээс илүү таны сонирхлыгтатна.Дараа нь юу хийх вэ гэвэл одоогийн прожектийг хаах хэрэгтэй. FileцэснийClose All -ыг сонго. Project1 -ийн өөрчлөлтийг хадгалах бол No -ийг сонго.Таны 2 дахь программ: Hello World, II хэсэгPascal -ийг судлахаасаа өмнө Delphi хэрхэн ажиллдаг талаар мэдэххэрэгтэй. Танд Pascal –ийн олон төрөл дээр ажиллахад энэ нь хэрэгболно.Энэ хэсэг нь Delphi -ийн үнэн хүчийг хальт агуулна.
  • 31. Санамж: Компонентийн properties -ийг өөрчилсөн бол design-timeөөрчлөлтхийсэн гэсэн үг. Харин кодоор property -ийг нь өөрчилсөн бол runtimeөөрчлөлт гэж нэрлэгддэг.Ажиллах үед нь Caption property -ийг өөрчлөхийн тулд:1. Form дээрх button –ийг 2 товш. Ингэхэд Delphi нь event handler -ийгbutton -ийн OnClick event дээр үүсгэнэ. Үүсгэсэн код нь дараахбайдалтай байнаprocedure TForm1.Button1Click(Sender: TObject);beginend;2. Засварлагч курсор нь begin ба end гэсэн зарлагааны хоорондбайдаг ба таныг код бичихийг хүлээж байдаг.procedure TForm1.Button1Click(Sender: TObject);beginLabel1.Caption := `Hello World, Part II;end;Энэ код маш энгийн юм. Энэ нь Hello World, Part II гэсэн өгүүлбэрийгCaption property -руу шилжүүлдэг.3. Одоо toolbar -т байгаа Run товчин дээр дарж программыг ажиллуул.Программыг ажиллуулахад label -ийн caption нь Label1 гэж хэвээрбайгааг анхаарна уу. Form -ийн button дээр дарж label -ийн гарчгийгөөрчил. Гайхамшигтай байгаа биз. Зүгээр л Delphi ажиллаж байгааюм. Иймэрхүүгээр олон дасгалыг ойрын хэд хоногт хийж form -ийнбусад компонент labels, button –уудын талаар их туршлагатай болно.Би үйл явдлын ард нь юу болдгийг бүхэлд нь тайлбарлах гээгүйхарин дараа нь бүх тайлбар хийхийг л хүсэхггүй байна.Object Pascal хэлийг нягтлан харах ньDelphi -ийн RAD онцлогийг суралцахаасаа өмнө обьект Паскал хэлнийүндсийг судлах хэрэгтэй. Энэ ном магадгүй хамгийн сайн нь биш юм шигтанд санагдаж болох юм гэхдээ та юуны өмнө обьект Паскалийг судал.Обьект Паскалийг дараалаар нь судалбал сайн хэрэг. III бүлгийнхичээлийн дараа та обьект Паскалийн бүрэн дүр зурагтай болсон байна.Хоромхон зуурын ухвар ойлголтонд бүү хуурт.Зарим нь обьект Паскалийг бүрэн ойлгохыг шаарддаг ба энэ нь бодиттуршлага юм. Ойрын хэдэн өдрийн турш та зарим кодын хэсгийг харах баэнэ нь обьект Паскалийн зарим онцлогийг дүрслэн үзүүлдэг. Та заримдасгал хийх ба таны олсон шинэ мэдлэгийг бататгана .Эхний хэдэн өдөртазөвхөн Delphi application -ийг жаахан хэсэгт харна.Юун түрүүнд би Delphi IDE болон Visual Component Library (VCL) -ийгсудалмааргүй байна. Та бүрэн ойлголттой болсныхоо дараа эхлэххүртлээбага багаар ахих хэрэгтэй.Түүхийн шар хуудас1994 онд Borland пүүс нь RAD хэрэгсэл дээр ажиллаж эхэлсэн ба энэ код
  • 32. нь Delphi гэж нэрлэгдсэн байна. RAD -ийг хэрэгжүүлэх хамгийн шилдэгзамнь компонентийн загвар архитектур байна гэж шийдэгдсэн байсан. Энэ ньсистемийн гол цөм байх програмын хэлний асуудлыг шийдсэн байв.Тэр үед Borland пүүс нь Pascal –ийн зах зээл дэх ганц борлуулагч байв.Borland нь Pascal -ийн хэрэгсэлийг үйлдвэрлэдэг хамгийн сайн компанибайв. Та Pascal -ийн програмист байсан бол Borland -ийн TurboPascal -ийгхэрэглэн амтанд нь орох байсан биз. Borland пүүс Pascal хэлийг хуулийнхүрээнд бүрэн эзэмшдэггүй боловч Pascal -ийн ертөнцөд том байрэзэлдэггэдэгт эргэлзээ байдаггүй.Энэ нь Pascal хэлний онцлогийг нэмэгдүүлэх тал дээр том байр эзэлдэг.Энд хэлэхэд Pascal -ийн стандарт хороо байдаггүй ба Pascal хэлийгтодорхойлон бичигдсэн стандарт байдаггүй. Borland пүүс Delphi -ийгPascal-ийн үндсэн дээр бичсэн юм. (Borland -ийн нэр нь програмын хэлний нэрболсон) Delphi хэрэглээнд гарахаас өмнө Borland пүүс Pascal хэлийгөөрчилсөн. Жишээлбэл : Pascal -ийг обьект Pascal болгон өөрчилсөнбайв.Энэ нь обьект Pascal нь Pascal -ийн хувьд C++ нь C -ээс ямар ялгаатайбайдаг шиг обьект Pascal нь классийг Pascal -д нэмсэн ба үүгээр обьектхандлагат програмчлалд Pascal орж ирсэн. Delphi хөгжихийн хирээр шинэхэлний онцлог ба түлхүүр үг нэмэгдэн орж ирэн компонент загвартайзохицож эхэлсэн. Түлхүүр үгүүд ба property өөр бусад нэмэгдэн оржирсэн.Энэ нь Borland -д компонент загварын бүрэн хүчийг хэрэгжүүлэхболомжийголгосон.Компонентод тохируулан Паскал хэлийг өөрчилснөөрөө Borland нь RAD -ийг хэрэгжүүлэх боломжтой болсон. Гол нь обьект Паскал хэл ньөөрчлөгдсөнөөрөө Delphi -ийн боломжуудыг нээж өгсөн. Үр дүнд нькомпонент загвар ажиллаж эхэлсэн. Хэдийгээр ПаскалийгөөрчилсөнөөрөөBorland нь том алхам хийсэн боловч урьдах зүйлтэй холбоотой. Microsoftкомпани BASIC хэлийг авч өөрчлөн Visual Basic хэлийг гаргасан байдаг.Энэ шинэ хэл нь баазад ажилладаг эх Basic хэлнээсээ ялгагдахгүйшахамбайсан. Borland пүүс Паскал өөрчилснөөрөө эрсдэлтэй алхам хийсэн. Бүхюмны дараа хэрэглэгчид таатай бус хүлээн авсан. Одоог хүртэл BorlandньПаскалийн зах зээл дээр хатуу байр суурьтай байгаа ба энэ хэвээрээбайгаа билээ. Үүнд алдаа хийхгүй бол обьект Паскал хүчирхэг хэл ба бизарлалтыг нь тэгж хөнгөн хийхгүй байхсан.Обьект Паскал нь сургалтанд бол хамгийн хүчирхэг байгаа билээ. БиОбьект Паскалийг бүх онцлогийг агуулсан гэж хэлэхгүй. Паскал болпрограмчлалд түгээмэл хэрэглэгддэг.Санамж: Юу хийхийг тодорхойлохдоо Delphi нь хэд хэдэн нэр томъёогхуулан авсан. Delphi -ийн үндсэн хэл бол мэдээж обьект Паскал ба заримхүмүүс үүнийг Паскал гэж хэлдэг. Зарим Паскал дээр хийж байна хэлдэг.
  • 33. Эцэст нь юу гэж хэлэхээ та шийд. Обьект Паскал нь обьект хандлагатпрограмчлалд бүрэн зохицсон болно.Шинэ нэр томъёо: Обьект - урьд нь компонентыг тодорхойлж байсаншигтусгай програмчлалын хоёр тал юм. (Компонент бол обьект юм, харинбүхобьект нь компонент биш)Pascal Unit -уудПрограмчлал бол код бичихээс илүү ажил юм. Эцсийн эцэст энэ болпрограмын цогц бөгөөд код бичих нь програмчлах зорилгыг нь биелүүлжбайгаа болно. Таны бичсэн код бол зөвхөн текст файл руу ордог.Компьютер тэр текст файлыг аван машины кодод хөрвүүлэлт хийнойлгодог. Delphi -ийн код агуулдаг текст файлыг unit гэдэг.Шинэ нэр томъёо: unit бол кодын модульд хөрвүүлэгдэх боломжтойтекстфайл юм.Unit -ийн төрлүүдDelphi GUI application нь багадаа хоёр unit -ийг агуулдаг. Project sourceunitнь project source кодыг агуулдаг. Project source код нь DPR өргөтгөлбайдаг.Та project source unit -ийг Project | View Source -ийг үндсэн цэсээс сонгонүзэж болно. Project source unit -ийг өөрчлөх хэрэгцээ нэг их байдаггүй.Үнэндээ project source unit -ийг юу хийхээ мэдэхгүйгээр хийх хэрэггүй. Тахэрэв project source unit -ийг санамсаргүй өөрчилсөн бол application таньажиллахгүй болно.Delphi GUI application -ийн хоёр дахь төрөл нь үндсэн form -ийн unitбайдаг.Form unit гэдэг бол тухайн form -тай хамтардаг source code unit байдаг.Unit-ийн энэ төрөл нь PAS өргөтгөлтэй файл байдаг. Delphi -д та энэ төрлийгнь голлон хэрэглэнэ. Delphi GUI application нь голдуу нэг form unit -тэйбайдаг. (Үндсэн form -ийн хувьд) Харин энэ нь нэгээс илүү form unit -тэйбайж болно. Жишээ нь: About box -ийг гаргадаг application нь үндсэн formunit -тэй байх ба About box -ийн unit байна.Тэмдэглэл: "Delphi GUI application." нь console mode application -ийн GUIapplication -ээс ялгаатай байдаг. Console mode application бол consolewindow (DOS box) -ийг ажиллуулдаг 32-bit Windows application юм.Console application -д үндсэн form байдаггүй ба өөр form -уудыг агуулж чболно, агуулахгүй ч байж болно. Хэдий ийм боловч console application ньнэг эсвэл түүнээс илүү unit -тэй байж болно.Delphi application -д та 3 дахь unit -ийг хэрэглэж болно. Энэ төрлийн unitньsource кодыг агуулдаг. Зөвхөн unit -ийг агуулдаг код нь project -ийн бусадunit гэж дуудагддаг.Delphi Unit –ийн бүтэцDelphi unit нь урьд тодорхойлогдсон форматыг дагах ёстой. Unit урьдтодорхойлогдсон форматанд байх ба энэ нь хөрвүүлэгч unit -ийг уншиж
  • 34. чадах ба unit -ийн кодыг компиляц хийж чадна. Delphi project unit нь unit -ийн нэртэй програмын түлхүүр үгийг агуулдаг ба кодын хэсэг нь begin баend гэсэн түлхүүр үгээр тэмдэглэгддэг. Та үндсэн unit -ийг Delphi -ийнүндсэн цэсээс View | Project Source -ийг сонгон харж болох ба defaultDelphiproject -ийн project source unit -нь дараах байдалтай байна.Тэмдэглэгээ: Доорх мөрийн дугаарууд нь unit -ийн өөрийнх нь хэсэг бишболно. Үүнийг зөвхөн дарааллыг заахад ашигласан. Заримд нь иймдугаарбайгаа ба заримд нь байхгүй болно. Аль алинд нь Паскал хэл нь бусадхэлүүд шиг мөрийн дугаар авдаггүй гэдгийг ойлгох хэрэгтэй. (онцолбол,BASIC).Cтандарт DELPHI PROJECT –ийн PROJECT SOURCE01: program Project1;02:03: uses04: Forms,05: Unit1 in ‘Unit1.pas’ {Form1};06:07: {$R *.RES}08:09: begin10: Application.Initialize;11: Application.CreateForm(TForm1, Form1);12: Application.Run;13: end./1 мөрөнд програмын түлхүүр үг програмын үндсэн source unit -ээр энэunit-ийг тодорхойлсон. Үүнийг та unit -ийн нэр Project1 нь програмын түлхүүрүгээ даган яваагаас харж болно. (Delphi таныг нэр өгөх хүртэл өөрөөнэрийг нь автоматаар өгдөг)3 мөрөөс эхлэн түлхүүр үгээр тодорхойлогдсон хэсгийг харж байна. Ямарчunit -ийн нэр нь цэгтэй таслалтай түлхүүр үгийг дагадаг ба компиляци энэдарааллаар хийгдэнэ.7 мөрөнд компиляцийн директив нь Delphi нь project -ийн resource file -ийгагуулдгийг харна. Resource файлууд нь VIII бүлгээр яригдана. “CreatingApplications in Delphi."9 мөрөнд begin түлхүүр үг ба 13 мөрөнд end түлхүүр үгийг агуулсан.Сүүлийн түлхүүр үг цэгээр төгссөн байгааг ажигла. (unit нь олон түлхүүрүгтэй байж болох ба харин ганц төгсгөлийн end –тэй байна.)10, 11, 12 -р мөрүүдэд код нь application -ийг үүсгэж байгаа ба application -ийн үндсэн form -ийг үүсгэх ба application -ийн биелэлтийг эхлүүлнэ. Таэнэкодын нарийн хэсэгт анхаарах хэрэггүй.Тэмдэглэгээ: begin ба end нь кодыг блоклоно. Кодын блок нь кодынхэдэнмөрийг агуулж болох ба мөн хэдэн зуун мөрийн кодыг ч агуулж болно.
  • 35. Номонд ч бас ийм байгааг та харж болно. Та ном хэрэглэдэг бол яаж,хэзээхэрэглэхийг мэдэх болно.Паскал unit -ийн өөр хэсэгт харцгаая. Үндсэн цэсээс File | New -ийгсонгоно.New Items гарч ирэхэд icon -ийг байрлуулан 2 товшилт хий. Delphi шинэunit-ийг нээх ба харуулахдаа Code Editor -д unit код нь үүснэ.Хоосон UNIT01: unit Unit2;02:03: interface04:05: implementation06:07: end.Цөөн байгаа биз? Энэ unit нь 2 зүйлтэй. Эхнийх нь unit нь нэр нь түлхүүрүгтэйгээ байгаа. Түлхүүр үгтэй программ эхэлж байгаа ба код нь unitтүлхүүр үгтэй ба харин хэдхэн ерөнхий элементтэй байна. Pascal unit ньunit нэртэйгээ байгаа түлхүүр үгээр эхлэх ба end нь хоёулангийнх ньсүүлдбайдаг. Энд end түлхүүр үг нь бас сүүлдээ цэгтэй байгаа.Програмын main source unit -ийнх биш unit нь interface ба implementation -уудыг агуулдаг. Энэ хоёр түлхүүр үг нь The interface Section" and"Implementation Section," зэрэг хэсгүүдэд нарийн тодорхойлогдсон байгааболно. Программын үндсэн unit нь begin and end -ийг хоёуланг нь авчявахба харин source unit -нь төгсгөлдөө л end -тэй байна. Дараагийн хэсэг ньPascal unit дотор хэрэглэгддэг түлхүүр үгийг тодорхойлно.Uses жагсаалтШинэ нэр томъёо: uses жагсаалт бол гаднах unit -уудын жагсаалт.3 мөрөнд uses түлхүүр үгийг хэрэглэсэн байгаа. Uses нь бусад unit -уудынжагсаалтыг агуулсан хэсгийн эхлэлтийг тодорхойлж байгаа бөгөөд энэunitнь түлхүүр үгээсээ хамаарна.Application.CreateForm(TForm1, Form1);Кодын энэ мөр нь бусад unit -уудад байрлах мэдээллийг агуулах ба энэunit -д олдохгүй. Application.CreateForm гэж тодорхойлогдсон процедур ньForms.pas гэгдэх Delphi unit -д байх ба TForm1 ба Form1идентификаторууднь прожектийн main form unit-д байрлах ба Unit1.pas гэж хэлэгдэнэ. Тахолболтыг нь харав уу? Uses жагсаалт нь unit -ийг компиляци хийхэдхэрэгтэй нэмэлт мэдээллийг агуулдаг гэж үзнэ. Энд uses жагсаалтийгхаруулав.usesForms,Unit1 in ‘Unit1.pas’ {Form1};Uses жасгаалт нь 2 unit нэртэй байна. Forms ба Unit1. Заримдаа энэ нь
  • 36. сайн жишээ биш байдаг. Яагаад гэвэл 2 -р unit жагсаалт нь нэмэлттекстийгагуулсан байдаг. (Unit1 in ‘Unit1.pas {Form1}).Энэ текст нь form -ийг онцлоход хэрэглэгдэх ба unit -дээ байдаг бөгөөдпрожектийн main source unit -ээр л хэрэглэгддэг. (Угалзан хаалтанд байхтекст нь кодын бусад хэсэгт байх тайлбар)Uses жагсаалтыг байгуулахад мэдвэл зохих 2 зарчим байдаг:• Эхлээд жагсаалт дахь unit бүр дараах unit -ээсээ таслалаартусгаарлагдах ёстой.• Дараа нь сүүлийн unit-ийн жагсаалт нь цэг таслалтай байх. Цэг таслалнь uses жагсаалтыг төгссөнийг заана.Ерөнхийдөө жагсаалт нь идэвхтэй unit -ийн нэрсийг агуулах ёстой. Usesжагсаалт нь uses түлхүүр үг, цэг таслалтай end -ээр тодорхойлогдохёстой.Тэрнээс гадна uses жагсаалт нь яаж зохион байгуулагдсанаасаахамаарахгүй. Жишээ: Дараах 2 uses жагсаалтууд ижил:usesWindows, Messages, SysUtils, Classes, Graphics,Controls, Forms, Dialogs, StdCtrls;usesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;Unit нь uses жагсаалт нь ямар ч тоотой байж болно.Тэмдэглэгээ: Зарим тохиолдолд Delphi нь танд uses жагсаалтанд unit -ийгнэмж өгдөг. Энэ нь File | Use Unit цэсээр хийгддэг. Энэ онцлог нь IVбүлгээрнарийвчлан яригдана.Интерфейс хэсэгӨмнөх кодонд интерфейс түлхүүр үг байгааг анзаарсан болов уу.Интерфейс хэсэг бол идентификатор нь unit -ээсээ авч ирэн зарлагдсанunit –ийн хэсэг юм. Ихэнх unit -ууд нь өөр unit –уудад хэрэглэгдэх кодыгагуулсан байдаг. Энэ код нь класс, процедур, функц, хувьсагчаархангагдсан байж болно.Аль ч обьект нь интерфейс хэсгээрээ нэг unit -ээс нөгөө unit -руузарлагдахболомжтой. Та интерфейс хэсэг нь жагсаалтыг агуулдаг гэдгийг хэлжчадна. Интерфейс хэсэг нь интерфейс түлхүүр үгээр эхэлдэг баimplementation түлхүүр үгээр дуусдаг.Implementation хэсэгШинэ нэр томъёо: implementation хэсэг бол тухайн unit -ийн кодыгагуулдаг хэсэг юм.
  • 37. Implementation хэсэг implementation түлхүүр үгээр эхэлдэг ба дараагийнunit-ийн түлхүүр үгээр дуусдаг. Дараагийн unit -ийн түлхүүр үг нь голдуу unit -ийн төгсгөл end түлхүүр үг байдаг. Паскалийн тал байгаа учир илүү юмярих боломжгүй байна. Хэдий ийм боловч интерфейс ба implementation -ийн жишээ нь танд ойлголтыг жаахан төрүүлэх болно.DoSomething гэж нэрлэгдэх процедур нь unit -ийг үүсгэнэ. Та бусад unit -уудад DoSomething –ийг дуудагдахыг хүсч байна уу? Энэ тохиолдолдDoSomething процедурыг интерфейс хэсэгт зарлах ба implementationхэсэгттодорхойлох хэрэгтэй. Доорх хэлбэртэй байна.PUBLIC функцтэй unitunit Unit2;interfaceprocedure DoSomething;implementationprocedure DoSomething;begin{ Code for DoSomething goes here. }end;end.DoSomething процедур нь interface section -д зарлагдсан байгааг анзаар.Тэгээд implementation section -д тодорхойлогдсон байгаа.Initialization ба finalization хэсэгInitialization ба finalization хэсэг нь unit -ийн шаардлагатай кодыг цэвэрлэх,эхлэл хийх, гүйцэтгэх боломжтой. Initialization section -д ямар ч код unitсанах ойд ачаалагдах үед биелэгддэг. Finalization section -д unit санахойгоос ачаалагдаагүй байхаас өмнө биелэгддэг. Initialization section -гүйгээр та finalization section -тай байх боломжгүй. Энэ хоёр нь хоёулсонголт юм.Unit –д хэрэглэгддэг түлхүүр үгүүдPascal unit бусдыг агуулж болдог ба сонголтын түлхүүр үг нь өөр өөрзорилгоор нь хэсгүүдийг ангилдаг. Эдгээр түлхүүр үгүүдийн зарим ньолонхэрэглээтэй. Дараах хэсэг нь unit –д хамаарагдах түлхүүр үгийг лтодорхойлсон байгаа.Const түлхүүр үгЕр нь unit нь нэг түүнээс илүү const хэсгийн сонголттой байх боломжтой.Const хэсэг бол түлхүүр үгээр тодорхойлогдсон байдаг. Тогтмолоорзарлагдсан хувьсагчаар const хэсэг нь тодорхойлогдоно.Constant бол өөрчилж болохгүй идентификатор юм. Жишээ нь таныпрограмд олон хэмжигдэхүүн байдаг гэе. Үүндээ та тогтмол хувьсагчийгашиглах боломжтой. Const section -ийг доорх програмд нэмье гээдтөсөөлөөд үзье. Та const хэсэгт нэг тогтмолыг нэмэх ба өөр const хэсэг нь2тогтмолыг нэмсэн.unit Unit2;interfaceconstAppCaption = ‘My Cool Program 1.0’;
  • 38. procedure DoSomething;implementationconstBaseX = 20;BaseY = 200;procedure DoSomething;begin{ Code for DoSomething goes here. }end;end.AppCaption Тогтмол нь interface section -д зарлагдсан учир unit -ийн аль чхэсэгт энэ нь хэрэглэгдэж болох ба uses жагсаалтанд байгаа аль ч unit -ийн хувьд мөн адил байна. BaseX and BaseY хувьсагчууд нь unit дотрооболомжтой яагаад гэвэл тэд implementation section -д зарлагдсан.Тогтмол түлхүүр үг нь нэгээс илүү хэрэглээтэй байж болно.Type түлхүүр үгШинэ нэр томъёо: Type түлхүүр үг нь таны програм хэрэглэх шинэтөрлийг зарлахад хэрэглэгддэг. Шинэ төрлийг зарлах нь esotericпрограмчлалын технологи бөгөөд энд тайлбарлах нь хэцүү болно. Доор20байтын массив таны application -д хэрэгтэй байгаа ба энэ төрөл нь дахиндахин хэрэглэгдэнэ. Та доорх шиг зарлаж болно.TypeTMyArray = array [0..19] of Byte;Та одоо array [0..19] гэж бичихийн оронд TMyArray гэсэн төрлийг ашиглахболомжтой.“Var “Түлхүүр үгШинэ нэр томъёо: Энэ түлхүүр үг нь хувьсагчууд байдаг кодын хэсгийнзарлалтын үед хэрэглэгддэг.Энэ түлхүүр үгийг та элдэв хувьсагчуудыг зарлахад хэрэглэж болно. Var -ийг зарлах хэдэн байрлал байдаг. Unit -ийн түвшинд var -ийг та зарлажболно. Мөн процедур, функцийн түвшинд var -ийн хэсэг байж болно.unit Unit2;http://www.csms.edu.mn/cheri/interfacetypeTMyArray = array [0..19] of Byte;constAppCaption = ‘My Cool Program 1.0’;varX : Integer;MyArray : TMyArray;procedure DoSomething;implementationconstBaseX = 20;BaseY = 200;procedure DoSomething;begin{ Code for DoSomething goes here. }
  • 39. end;end.Const түлхүүр үг шиг, var -т бас олон хэрэглээ байдаг. Энэ нь бас функц,процедурын параметр, хувьсагч параметруудыг зарлахад хэрэглэгддэг.Тэмдэглэгээ: var -аар тодорхойлогдсон хэсэг нь түлхүүр үгээр эхэлж,дараагийн unit -ийн түлхүүр үгээр дуусна.Кодын тайлбарПаскал хэл рүү нарийвлан орохын өмнө кодын тайлбарын тухай товчтанилцуулъя. Тайлбар нь таны source кодод текст хэлбэрийн тайлбарөгөхзорилготой байна. Тайлбар нь код юу хийхийг тодорхойлоход хэрэглэгдэхба зохиогчийн эрхийн мэдээллийг хангах, өөртөө эсвэл бусдад тэмдэглэлхийхэд л ашиглагддаг.Тайлбар нь ялгаатай 3 аргаар тодорхойлогддог. Дараах зүйлүүд нь бүгдшугмын хувьд хүчинтэй байна.{ Dont forget to free this memory! }{ADTAPI.PAS 2.50Copyright (c) TurboPower Software 1996-98}(* Оюутнуудаа энэ кодыг засах хэрэгтэй *)// Энэ үнэн зэрлэг код{ Энэ код дээр дараа тухтай ажиллана }Магадгүй Delphi –д ихэнх тайлбарын төрөл нь угалзан хаалтыгхэрэглэдэг.“{“ нь эхлэх үед тайлбарыг, ”}” –нь тайлбарын төгсгөлд хэрэглэгдэнэ.Тайлбарын өөр нэг нь (*тайлбар эхлэх,ба *) байдаг. Энд бас нэгтайлбарынтэмдэг байдаг: (*/*) тайлбарын тэмдэглэгээ нь том хэмжээний тайлбарыгхийхэд болно. Эдгээр тайлбарын төрлүүд нь нэг эсвэл олон мөрттайлбарыг хийхэд ашиглагдана.Тэмдэглэгээ: Угалзан хаалт нь Паскалд өөр хэрэглээтэй байдаг. $ -ийгхэрэглэх үед хаалт нь компиляторын директорыг заадаг. Компилятортcompiler hints үүсгэхгүй гэж зааж өгөн source коддоо {$HINTS OFF} гэжбичих хэрэгтэй. Компилятор энэ мөрийг хараад unit -д дохио өгөхөө{$HINTS ON} –тэй тулаад зогсооно.Тайлбарын 3 дахь хэлбэр нь давхар зураас байдаг. Энэ нь голдуу С -хэлбэрийн тайлбар гэгддэг яагаад гэвэл С ба С++ үүнийн хэрэглэдэг. Энэхэлбэр нь нэг мөрөнд хэрэглэгддэг. Delphi -д энэ хэлбэр ажилладаггүйгэдгийг хэлье.Тэмдэглэгээ: Энд угалзан хаалт хэрэглэсэн байгаа. ”//” -ийг богинотайлбарт болон тестийн зорилгоор ашигласан .Аль ч тайлбарлагдсан текст нь компиляторт хамааралгүй байдаг. Хэрэвтаdefault Delphi IDE settings -ийг ашиглаж байгаа бол бүх тайлбар мөр ньбичмэл хөх текст байгаа. Энэ нь тайлбарыг хурдан ялгахад дөхөмбайдаг.Тэмдэглэгээ: Хэрэв та багийн бүрэлдэхүүнтэй програмчлалын ажилхийдэг бол та хамтран ажиллагчдынхаа код, бичлэгийг уншдаг байх.Кодонд товч тайлбар хийх нь аль ч програмистад цагийг нь хэмнэнэ. Та
  • 40. ганцаараа ажилладаг гэсэн ч тайлбар бичих нь чухал. Та бичсэн кодооямар амархан мартаж байгаагаа хараад л гайхна. Сайн кодын тайлбарньтаны хамтрагчийн цагийг хэмнээд зогсохгүй таныг ч бас аварна. Кодынтайлбар бичихээ бүү март!ХувьсагчидХувьсагчид нь хэрэглэгдэхээсээ өмнө зарлагдсан байдаг. Та хувьсагчдыгкодын тусгай хэсэгт зарлах ба var түлхүүр үгээр тодорхойлох хэрэгтэй.Жишээ нь:varX : Integer; { X хувьсагч нь integer төрөлтэй }Y : Integer; { Байршлын y утга }Өмнө нь “var” түлхүүр үгийн тухай Паскалийн unit -ийн нэр томъёонддурдсан билээ. Тэр хэсэгт unit -д хувьсагчуудыг хэрэглэдэг ба unit -ийнvarхэсэгт зарладаг гэж үзсэн билээ. Тэр нь үнэн ч та бас функц,процедуруудыг энэ хэсэгт зарлаж болно. Функц, процедурт хувьсагчуудыгзарлах боломжийг энэ нь танд олгож байгаа болно. Доорх жишээ ньпроцедурт var хэсэг байна.procedure TForm1.Test;varS : string;beginS := ‘Hello World!’;Label1.Caption := S;end;Та хувьсагчаа зарласны дараа үүнийгээ санах ойд өгөгдлийгзохицуулахадхэрэглэж болно. Энэ мэдээж танд нэг их сэтгэгдэл төрүүлэхгүй байхгэхдээхэдэн жишээг танд танилцуулъя. Дараах кодын хэсэг нь X, Y гэжзарлагдсан хувьсагчуудыг хэрэглэсэн. Мөр болгоны эцэст байгаатайлбарнь юу биелж байгааг тайлбарлана.X := 100; { ‘X’ нь одоогийн утга нь: 100 }X := X + 50; { ‘X’ нь одоогийн утга нь: 150 }Y := 150; { ‘Y’ нь одоогийн утга нь: 150 }X := X + Y; { ‘X’ нь одоогийн утга нь: 300 }Inc(X); { Нэмэгдүүлж байна. ‘X’ нь одоогийн утга нь: 301 }Хувьсагч бол компьютерийн санах ойд байрласан хэсэг утга юм. Эрхэмуншигч та энэ кодны тухай зарим зүйлсийг тэмдэглэж аваарай. Юунытүрүүнд Х хувьсагчийн өөрчлөлт (Бид дараа Object Pascal хэлнийхувьсагчийг удирдах оператор, функц, процедурын тухай үзэх болно.)Дараах хувьсагчууд нь нэмэлт, сонгогдсон утга юм.Програмын кодын мөр бүрийн төгсгөлд цэг таслал (;) тавидаг.САНАМЖ: Паскаль хэлийг эхлэн суралцагчид програмын кодуудынхоорондын ялгааг мэддэг байх хэрэгтэй. (зарлагдсан өгөгдөл, утга,хувьсагч, илэрхийлэл г.м)c := a + b;Дээрх жишээнд с хувьсагчид a болон b хувьсагчдийн нийлбэрийн утгыг
  • 41. олгож байгаа үйлдэл болно. Энд a + b нь илэрхийлэл юм. Нэг мөрөндолон илэрхийлэл бичигдэж болох бөгөөд төгсгөлд нь цэг таслалтавигдана. Зарим тохиолдолд цэг таслал тавигдахгүй байж болдог.Үүнийгбид дараа нь үзнэ.Хувьсагчийн нэрийн ард хувьсагчийг тодорхойлсон төрөл бичигдэнэ.Функцболон процедурт хувьсагч, хувьсагчийг тодорхойлсон төрлийг зарлажөгдөг. Мөн хувьсагчийн нэрэнд том жижиг үсэг болон доод зураас, тоогхольж хэрэглэж болно. Ихэнхдээ том үсгээр эхэлдэг ба харин доодзураасаар эхлэхийг зөвшөөрдөггүй. Хэдийгээр хувьсагчийн нэр нь 255хүртлэх тэмдэгтээс тогтож болох боловч яг үнэндээ 20 тэмдэгт ч гэсэнашиглахад хэцүү байдаг.МашУртХувьсагчийнНэр : Integer; { урт хувьсагчийн нэр }Миний_хувьсагч : Integer; { доогуур зураас ашигласан }x : Integer; { нэг тэмдэгт ашигласан }X : Integer; { нэг тэмдэгт ашигласан}Тэмдэглэгээ2 : string; { үсэг болон тоо ашигласан }САНАМЖ: Паскал хэл нь тохиолдлыг нарийн мэдэрччаддаггүй. Жишээ нь:varXPos : Integer;{ ...later }XPos := 20;XPOS := 200;xpos := 110;XpoS := 40;Паскаль хэл нь С ба С++ хэлтэй харьцуулахад ойлгомжмуутай байж болох юм. Гэхдээ та удахгүй үүний ялгааг олж,ашиглаж сурах болно.САНАМЖ: Паскал хэл нь тохиолдлыг нарийн мэдэрч чаддаггүйболовч та програмдаа тэмдэгт мөртэй ажиллахдаа том үсэгашиглаж сурах хэрэгтэй.Обьект Паскал хэлний Өгөгдлийн төрөлШинээр: Объект Паскалийн өгөгдлийн төрөл нь санах ойд мэдээллийгхадгалдаг хөрвүүлэгч /compiler/ аргыг тодорхойлсон.Зарим програмчилалын хэлэнд хувьсагч олон төрлийн утгатай байжболдог. Жишээ нь доорх BASIC код юм.X = -1;X = 1000;X = 3.14;BASIC хэлэнд тооны төрөл хэмжээг тааруулахын тулд санах ойнзохицуулалтад анхаарах хэрэгтэй.Хувьсагчийг зарлахПаскал хэлэнд хувьсагчийг програмд ашиглахаасаа өмнө төрлийг ньзарлаж өгөх ёстой.varX1 : Integer;X : Integer;Y : Double;
  • 42. Z : Byte;{ ...ө.х }X1 := -1;X := 1000;Y := 3.14;Z := 27;Өгөгдлийн төрлөө зөв сонгосноор програмын үр дүн зөв гарна гэсэн үг.Тиймээс програмаа ажиллуулахаас өмнө өгөгдлийн төрлөө сайн нягтлажшалгах хэрэгтэй.Зарим өгөгдлийг signed, unsigned –аар өргөтгөж болдог. Өгөгдлийн signedтөрөл нь эерэг ба сөрөг утгыг авдаг бол unsigned төрөл нь зөвхөн эерэгутгыг авдаг. Хүснэгт 1.1 д Паскалийн үндсэн өгөгдлийн төрлүүдийн санахойд эзлэх хэмжээ болон авч болох утгын хязгаарыг үзүүлэв. Хүснэгтэд"String" буюу тэмдэгт мөрийг оруулаагүй. Харин "Strings" гэсэн дараагийнбүлэгт авч үзнэ.ХҮСНЭГТ 1.1. ОБЪЕКТ ПАСКАЛД АШИГЛАДАГ ӨГӨГДЛИЙН ТӨРЛҮҮД (32-BIT).
  • 43. Дээрх хүснэгтэд үзүүлснээр 32 битийн орчинд Integer, LongInt төрлүүд ньсанах ойд ижил 4 байт эзлэж байна. Энэ нь Delphi 4.0 -ийн орчинднийцэжбайна. Харин 16 битийн орчинд Integer нь 2 байт эзлэж байхад Longint нь4байт эзлэдэг.Ихэнх програмистууд LongInt –ээс илүү Integer –г өргөн хэрэглэдэг.Мөн Int64, Comp (computational) төрөлүүд нь авч болох утгын хэмжээижилбайна. Харин ялгаатай тал нь өөрсдийн дотоод хөрвүүлэлт хийдэг аргаюм.Int64 нь integer төрөл, харин Comp нь real төрөл юм.Real ба Double төрлүүд нь ижил юм. Delphi програмын өмнөх хувилбартReal төрөл нь 6 байт байсан бол одоо 8 байт болсон. Энэ өөрчлөлт ньRealтөрлийг өнөөгийн хэв маягт ашиглах нөхцлийг бүрдүүлж өгсөн хэдий чDelphi програмд ашиглагдахдаа Double төрлөөс багаар ашиглагддаг буюухуучирсанд тооцогддог.САНАМЖ: Windows нь 2,147,483,647 (integer –н maximum утга)– аас илүү утга буцааж чадах GetDiskFreeSpaceEx функцыгагуулдаг.САНАМЖ: Single, Double, Extended, Currency өгөгдлийнтөрлүүд нь float төрөлд хамаарагдана.(10 -тийн тооллынсистем). Харин бусад төрөлтэй integer –ээр холбогддог. integerнь бутархай тоон утгыг илэрхийлдэггүй. Жишээ нь дараахькодод буруу зарласан байна.varX : Integer;{ Дараа нь... }X := 3.75;Энэ үед алдааг тань Паскал хэл тэр дор нь танд хэлж өгнө.Харин та үүнийг мэдсэнээр float төрөл нь Windows орчиндямар их ашиглагдахыг анзаарах болно.
  • 44. Өгөгдлийн төрлүүдийн хоорондох хөрвүүлэлтОбъект Паскаль нь өгөгдлийн төрлүүдийн хооронд хөрвүүлэлт хийжчаддаг. Жишээ нь:varRes : SmallInt;Num1 : Integer;Num2 : Integer;{ Дараа нь... }Num1 := 200;Num2 := 200;Res := Num1 * Num2;SmallInt дэх Integer төрөлтэй хоёр өгөгдлийг хооронд нь үржүүлж үр дүнгньгаргаж байна. Энэ томъёо нь хоёр өгөгдлийн төрлийг холисон хэдий чОбьъект Паскаль хөрвүүлэлт хийж чадаж байна. Хариу буюу үр дүн нь -25,536 гарна. Хүснэгт 1.1 -д үзүүлснээр SmallInt нь хамгийн ихдээ 32,767утга авдаг. Тэгвэл энэ 32,767 дээр нэгийг нэмбэл хариу нь -32,768 болно.Та үүнийг туршихын тулд доорхи зааврын дагуу ажилларай.1. Шинэ проект нээж form -д label ба button -г байрлуул.2. button дээр Double-click хийж OnClick event -ийг сонго.3. Дараахь байдлаар бичнэ.procedure TForm1.Button1Click(Sender: TObject);varX : SmallInt;beginX := 32767;X := X + 1;Label1.Caption := IntToStr(X);end;4. Run хийж button товчоо дар.Label -ийн caption дээр -32768 болж өөрчлөгдснийг та харах болно./IntToStr функц нь integer -ийн утгыг string болгон хөрвүүлнэ./ Дээрхдасгал32767 нэмэх 1 тэнцүү 32768.Дээрх жишээ нь overflow ба wrapping гэж юу болохыг харуулж байгаа юм.Хувсагчдын утгын хувьд overflow буюу орон халилт үүсэхээргүй /ө.хmaximum -аас бага/ байх ёстой. Integer төрөл нь ойролцоогоор –2 -оос +2тэрбумын алслалттай байдаг.Зарим тохиолдолд Object Pascal нь хөрвүүлэлт хийж чаддаггүй. Сompilererror нь Integer Real хоёр хоорондоо хамааралгүй төрлүүд гэж мэдээлнэ.Сompiler error нь тодорхой төрлүүдэд хадгалагддаггүй утгуудыг заажөгнө.Жишээ болгон доорх кодыг авч үзье.varX : Byte;beginX := 1000;end;Тогтмолыг зарлах Сompiler error –г харуулж байна. Танд Х хувьсагчийнутгыг 1000 гэж сонгож болохгүйг Сompiler нь мэдээллэх бөгөөд учир нь Х
  • 45. хувьсагч нь Byte хэмжээтэй ба Byte нь 0 - 255 хүртэл хэмжээтэй байдаг.Зөвлөгөө: Сompilе хийхдээ санамж анхааруулга алдаанымэдээлэл зэргийг сайтар дагах хэрэгтэй. Тэдгээр ньпрограмын кодын алдаа хэрэгцээтэй зарим мэдээллүүдийгхэлж өгдөг.Обьект Паскалийн ОператорХүснэгт 1.2 Түгээмэл ашиглагддаг операторууд.
  • 46. Операторуудын хувьд байнга хэрэглэгдэж байдаг хэсэг нь байхад басхааях ашиглагддаг операторууд ч байдаг.Аnd, or, not зэрэг түлхүүр үгс нь логикийн болон битийн гэсэн төрөлтэйбайдаг. Жишээ ньif (Started = True) and (X > 20) thenZ := X and Y;Дээрх жишээнд and үйлдэл нь хоёр янзаар хэрэглэгдэнэ.ТогтмолӨмнө хэлсэнчлэн тогтмол нь утгын хувьд өөрчлөгдлөггүй. Хувьсагчийнутгыг програм бичигч өөрчилж чаддаг бол тогтмолын утгыг чаддаггүй.Тогтмолыг зарлахдаа const түлхүүр үгийг ашигладаг.constDefaultWidth = 400;DefaultHeight = 200;Description = ‘Something really cool.’;
  • 47. Тогтмолыг зарлахдаа (:=) тэмдэг бус = тэмдэгийг ашигладаг. Мөн ямар чөгөгдлийн төрлийг онцолж заадаггүй.МассивМассив буюу array нь бүлэг утгын цогц гэж хэлж тодорхойлж болно.Өөрөөр хэлбэл нэг төрөлтэй хэсэг элемент юм. Зарлах үед түүнийг санахойн тодорхой зайд байрлуулдаггүй ба зөвхөн заагчийн эхлэх утгатогтоогддог. Массивыг дараах хэлбэрээр зарладаг.varMyArray : array[0..4] of Integer;Integer нь 4 байтын санах ойтой учраас дээрх массивын хувьд 5индекстэйтул санах ойд 20 байт эзлэж байна.MyArray массив 5 гишүүн буюу индекстэй. Индексээ дугаарлажтэмдэглэхдээ [ ] хаалтад бичиж өгнө. Массивийн гишүүн тус бүрд доорхжишээнд анхны утга олгов.MyArray[0] := -200;MyArray[1] := -100;MyArray[2] := 0;MyArray[3] := 100;MyArray[4] := 200;Дараагийн жишээнд 3 ба 4 –р индексуудын утгуудыг хооронд нь нэмж Ххувьсагчид олгож байна.X := MyArray[3] + MyArray[4]; { үр дүн 300 }Олон хэмжээст массивМассив нь олон хэмжээст байж болно. Өөрөөр хэлбэл санах ойд мөрмөрөөрөө дараалж ажилладаг. Хоёр хэмжээст integer төрөлтэй массивүүсгэхийн тулд кодыг дараахь хэлбэрээр бичнэ.varMdArray : array[0..2, 0..4] of Integer;Энэ массив санах ойг 60 байтаар ачаалж байна. Массивын утга нь урд ньсанах ойд байрлаж байсан санамсаргүй өгөгдөл юм. Мөн индекс ньтэгээсэхэлдэг. Массивийн элементүүдийг энгийн масив хэлбэрээр ашиглажболох ба [ ] хаалтын тусламжтай дараахь хоёр байдлаар ашиглаж болно.Үр дүн нь ижил гарна.X := MdArray[1][1] + MdArray[2][1];X := MdArray[1, 1] + MdArray[2, 1];САНАМЖ: Массивийн элементийн тооны хязгаарт байхгүйиндекс гарч ирвэл алдаа заана. Доорхи жишээнд үзүүлэв.varMyArray : array[0..4] of Integer;X : Integer;beginX := MyArray[3] + MyArray[5]; { 5 дугаартай индекс байхгүй. }end;Тэгэхээр массивийн элементийн хязгаарыг анх зарлаж өгөх хэрэгтэй.Жишээ нь 10*20 хэмжээтэй массив үүсгэе.varMyArray : array[10..20] of Integer;10 баганатай 20 мөртэй хүснэгт мэтээр төсөөлье.
  • 48. constmyArray : array[0..4] of Integer = ( -200, -100, 0, 100, 200 );Их ба бага функцЭдгээр функцуудыг массивт олон дахин ашиглаж болно. Хувьсагчийнутгындээд доод хязгаарыг массивт энгийн байдлаар зарлаж өгдөг. Бага /Low/функц нь доод хязгаараас буцах үйлдэл /return/ хийдэг. Харин Их /High/функц нь мөн адил массивын дээд хязгаараас буцдаг.varX, I, Lower, Upper : Integer;MyArray : array[10..20] of Integer;begin{ MyArray массивын эхний хэсэг }Lower := Low(MyArray); { Lower нь 10 }Upper := High(MyArray); { Upper now contains 20 }X := 0;for I := Lower to Upper doX := X + MyArray[I];{ Х хувьсагч дээр ямар нэг зүйл хийнэ. }end;Массивийн хязгаарын гаднах утга нь ойртоход их ба бага функц тодорхойбиш хэрэглэгддэг.Динамик МассивDelphi 4 -т массивийг динамикаар оруулдаг. A динамикийн массивийнэхний хэмжээг гаднаас зарласан ба массивийг зарлах цагт хэмжээг ньтавьж агуулдаггүй. Дараа нь SetLength -ийн хэмжээг заан хэрэглэдэг.Жишээ нь:varBigArray : array of Integer; { хэмжээ олгоогүй байна }X : Integer;beginX := GetArraySize; { хэрэгтэй хэмжээг тодорхойлогч функц }SetLength(BigArray, X); { динамикаар хэмжээ тогтоож байна }{ одоо BigArray –г хэргэлнэ}end;Шинээр : A динамик массив нь массиваа санах ойд ачаалдаг. A динамикмассив нь програмд их бага хэмжээгээр хэрэглэгддэг.Массивийн индекс бүрд элемент харгалзуулан байрлуулах нь ачхолбогдолтой. Санах ойд 10 integer хангалттай байлгах хэрэгтэй гэвчбусад нь магадгүй 1000 integer хангалттай хэрэглэдэг.Массиваа Copy функцээр байрлуулан хэрэглэж чадна.Жишээ нь массив нь 100 ба 200 хэмжээтэй элемент хэрэглэдэг :Copy(BigArray, 200);Массивдаа утгыг нь хадгалсан ба массивийн хэмжээ нь 100 -с 200элементболон өссөн.Олон хэмжээст dynamic массивыг үүсгэх нь нэг хэмжээст массивыгүүсгэхтэй бараг адилхан байдаг. Доор 2 хэмжээст массивыг үүсгэв. Коднь:var
  • 49. BigArray : array of array of Integer;beginSetLength(BigArray, 20, 20);BigArray[0][0] := 200;end;StringsПрограмд String -тэй ажиллахад хэцүү. Object Pascal нь 3 string төрөлтөй:long string, short string, ба wide string.Нэмэлт string төрөлтөй, энэ нь төгсгөлгүй string-briefly баstringmanipulationфункцтэй.Short StringБогино string төрлийн урт нь тогтмол, тэмдэгтүүдийн хамгийн их хэмжээнь255 тэмдэгт байдаг. Богино string нь 1 -ээс 2 замтай ба 1 зам нь 255 byteхэмжээтэй ShortString -д зарлагддаг.varS1 : ShortString; { 255 тэмдэгт }S2 : string[20]; { 20 тэмдэгт }String manipulation нь short төрөлтөй учир нь санах ой дахь string -ийнхэмжээг өөрчлөхгүй. Богино string хуучин төрлийг нь бодох ба урт stringоруулна. Богино strings нь урт byte -тай учир нь string -ийн анхны элементнь уртаа агуулдаг. (тоо болон тэмдэгт). Short string -ийн анхныэлементийнутга нь string -ийнхээ уртыг тодорхойлдог. Жишээ нь :varS : ShortString; { 255 тэмдэгт }Len : Integer;beginS := ‘Hello’;Len := Ord(S[0]);end;Дээрх жишээнд string -ийн уртыг S[0] утга тодорхойлж байна. Мөнфункцынуртыг тодорхойлж чадна. Функцын урт нь bit байна.Санамж : Ord функцын утгыг Char төрөл, integer утгаархувиргаж хэрэглэнэ. (дараалсан утга) Мөн Ord функц ньжагсаалттай хамт хэрэглэгддэг.Хэрэв та short string -ийн эхний элементийг хэрэглэх бол түүний урт ньstring байна. Тэгэхлээр програмын орчинд түүнийг хэрэглэх шаардлагагарч ирж байна. Эхлэн суралцагч таны хувьд програм техникийндэвшилтэттехнологид 0 байтын short string -ийг нэмж судлахыг санал болгож байна.Long Stringlong string төрөл нь string объектэд динамик байдлаар байрладаг.Хэмжээний хязгаар нь зөвхөн ачаалагдсан санах ойгоортодорхойлогддог.Объект Паскал нь санах ойд string -ийг байршуулж бас устгаж хэрэглэдэг.Long strings нь харин маш их уян хатан чанартай бөгөөд заримдаа shortstring шиг удаан болхи мэт нарийн төвөгтэй тэмдэгтүүдээ ачаалдаг.
  • 50. Хэрэв үр дүн тань шүүмжлэлтэй санагдвал long string-ийг ашиглаарай.Динамикаар санах ойд байрлуулснаар long string нь тэмдэгт мөрийнгарчгийг өөрчлөх боломжтой болсон Доорх жишээнд string нь түлхүүр үг,параметрийн хэмжээгүй зарлагдсан байна.varS : string; { динамикаар байрласан long string }Учир нь string нь динамикаар байрласанд оршино. Харин танд одооүйлдлийн хэсэгт өөрчлөлт хийж чадах боломж үлдсэн шүү. Ер нь longstringнь хэрэглэхэд маш энгийн ба өөрөөр хэлбэл тэмдэгт мөрөө санах ойгоосачаалах үед зай завсар гэх мэтийн санаа зовоосон асуудал гарахгүй.Учирнь энэ бүгд илүүчгүй дутуучгүй бүгд автомат юм.Long string нь 0 элементийг зөвшөөрдөггүй бөгөөд хэрэв түүнд хандвалүрдүн тань compiler error буюу алдаатай гарна гэсэн үг. SetLength функцийгашиглавал зохистой.Wide StringUnicode төлөв байдалтай double-byte хэрэглэдэг. Windows API функцэдхэрэглэгддэг. long string -ийн адилаар авах утгын хэмжээний хязгаар ньзөвхөн ачаалагдсан санах ойгоор тодорхойлогддог. string объектэддинамик байдлаар байрладаг. Үүнээс илүү деталчилсан мэдээллийг таолж авч чадахгүй болов уу. Учир нь OLE function -той дуудуулаххязгаартайбайдаг.Null /хоосон/ - Төгсгөгч Strings: PChar ба Char -ын МассивОбъект Паскал нь С ба C++ хэлнүүдээс string өгөгдлийн төрлөөрөөялгаатай. C ба C++ -д string нь 0 нь төгсгөлийг заадаг. Мөн массивын уртнь байтаар биш байдаг. PChar төрлийг дүүргэж хэрэглэх хэрэгтэй бамассивын бүх төрлийг ашиглаж болдог. Жишээ нь Windows MessageBoxфункц юм. Энэ функц нь Windows -ийн стандарт message мэдээллүүдийгдэлгэц дээр гаргадаг.function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT):Integer;Хоёр дахь ба гурав дахь параметрүүд нь массивын элементийг заагчаархаруулж байна.(message box текст, message box caption). Эдгээрфункцуудыг та Delphi програмаас дуудан ажиллуулж болно. PChar type -ийн жишээ код:varText : string;Caption : string;beginText := ‘Шалгаж байна.’;Caption := ‘Текст мэдээлэл’;MessageBox(0, PChar(Text), PChar(Caption), 0);end;Дээрх жишээнд Pchar -ыг Pascal -ын long string, null-terminated stringашиглан үзүүллээ. Харин та өөрөө Pchar -ыг үргэлжүүлж судлаарай.varText : PChar;
  • 51. beginText := ‘Шалгаж байна.’;MessageBox(0, Text, ‘Message’, 0);end;Pascal -ын string нь хүчирхэг төдийгүй хялбарханаар хэрэглэгдэж байна.Та үүнээс олон удаа хэрэглэх боломж байхгүй. Pchar -ыг long string,nullterminatedstring руу хөрвүүлж болдгийг дээрх жишээ харууллаа. Төгсгөлднь та массивт Char төрлийн өгөгдлийг Pchar ашиглан байршуулж үйлдэлхийж сурлаа.varText : array [0..20] of Char;beginText := ‘Шалгаж байна.’;MessageBox(0, Text, ‘Message’, 0);end;Windows API функцийг дуудахдаа null-terminated string -ийг параметраарашиглавал илүү тохиромжтой.Үндсэн Тэмдэгт мөр /String Basics/Pascal нь нилээн хэдэн string төрлийн элементүүдтэй.+ OperatorvarS1 : string;S2 : string;beginS1 := ‘SW210 Kim’;S2 := ‘Reisdorph’;Label1.Caption := S1 + ‘ ‘ + S2;end;Дээрх кодод S1, S2 хувьсагчдийн үр дүнг label -ын Caption property –ээрдамжуулан харууллаа. Одоо арай өөр жишээ үзье:varX : Integer;beginX := 199;Label1.Caption := ‘The result is: ‘ + IntToStr(X);end;Энд IntToStr функц ашиглан 199 гэсэн тоог тэмдэгт мөр болгонхувиргалаа.Subscript OператорТэмдэгт мөрөөс subscript ([ ]) –г ашиглан элемент бүрийг нь салган авчболдог.varS1 : string;S2 : Char;beginS1 := ‘Hello World!’;S2 := S1[1];Label1.Caption := S2;
  • 52. end;Дээрх жишээнд S2 хувьсагч нь Char төрлийн байна. Үр дүнд Н гэжLabel1.Caption дээр гарна. S[0] -ийг эхний элемент гэж long string, widestring -үүд үздэггүй.String -ийн контрол буюу тохируулгаObject Pascal нь String -ийн контрол буюу тохируулгыг шинээр нэвтрүүлжөгсөн. Ихэвчлэн хэвлэдэггүй тэмдэгт мөрд ашигладаг.Та control character хийхдээ # тэмдэг ашиглах ёстой. Доорх жишээнд(ASCII27) гэж тэмдэглэжээ.S := ‘This is a test. Escape follows.’#27’ Finished.’;S1 := ‘This is a test. Escape follows.’;S2 := ‘Finished.’;S3 := S1 + #27 + S2;Эндээс та хялбархан онол гаргаж болно. Form дээрээ button, label үүсгэ.button дээрээ Double-click /хулганаа товших/ хийж event -ийг нь OnClickболго:Label1.Caption := ‘Line 1’ + #10 + ‘Line 2’;Run хийж button товч дээрээ дар. Label 2 шугамаар мэдээллээ гаргадаггэдгийг та одоо мэдэж авлаа. Дээрх кодын хувьд (ASCII 10) -ыг 2шугамаарүзүүлхэд ашиглаж байна.Том хэмжээний текстэн мэдээлэлийг нэг шугамаар авч болно.(ойролцоогоор 200 орчим тэмдэгт орсон үед) Delphi Code Editor ньхамгийнихдээ буюу 1,024 тэмдэгтээс тогтож болдог. Ийм хэмжээний мэдээллийнунших бүрэн бололцоотой гэж үздэг. Тэмдэгт мөрийн олон шугаманхэлбэрийг + operator -той жишээг доор үзүүлэв.MessageBox(0, ‘Энд маш урт message ‘ +‘that seems to go on and on forever. In order ‘ +‘to make the code more readable the message has ‘ +‘been split across several lines of code.’, ‘Message’, 0);Тэмдэгт мөрийн харьцуулах үйлдэлString нь харьцуулах операторын тусламжтай харьцуулалт хийж чаддаг.Хүснэгт 1.3 их ашиглагддаг операторуудыг жагсаан бичив.ХҮСНЭГТ 1.3. ТЭМДЭГТ МӨРИЙН ХАРЬЦУУЛАХ ОПЕРАТОР.
  • 53. Эдгээр операторууд нь ASCII кодоорхарьцдаг. Мөн үйлдэлд биелэгдэхдарааллаараа ялгагдана. Тэнцүү үйлдлийн буруу ашигласан жишээ:if FileName = ‘TEST.TXT’ thenOpenFile(FileName)elseReportError;String-Manipulation ФУНКЦИхэвчлэн ашиглагддаг функцуудын тайлбарыг доорх 1.4 хүснэгтэдүзүүлэв.ХҮСНЭГТ 1.4. ТЭМДЭГТ МӨРИЙН ФУНКЦ БА ПРОЦЕДУРУУД
  • 54. САНАМЖ: Нэмэлт функцуудын талаар мэдээллийг Delphiпрограмын help руу орж additional дотроос олж аварай.Одоо жишээн дээр StrToInt function туршиж үзье.Value := StrToInt(Edit1.Text);Өөр StrToXXX функц (StrToFloat, StrToDate гэх мэт) дээрх замын дагууажиллана.Format function нь тэмдэгт мөр ба нэмэлт аргументэд хэвшүүлэлт хийдэг.Доорх жишээн дээр үр дүнг нь үзье.varS : string;X : Integer;begin
  • 55. X := 10 * 20;S := Format(‘Үр дүн: %d’, [X]);Label1.Caption := S;end;Үр дүн: 200Энэ жишээнд %d тэмдэгт нь integer утгыг илэрхийлж байна. Мөн бусадтэмдэгтэй хувьсагчаар дамжуулан ажиллана. Жишээ нь:varX : Integer;Y : Integer;beginX := 20;Y := 5;Label1.Caption := Format(‘%d + %d = %d’, [X, Y, X + Y]);end;Дэлгэцэнд үр дүн нь гарахдаа дараах байдалтай байна.20 + 5 = 25Энэ жишээнд label -ын Caption property –г ашиглалаа. Өмнөх болон дараадараагийн жишээнд ашиглаж бас болно."Format Strings" –н талаар илүү их мэдээлэл үзье гэвэл Delphi help -ээсаварай. Standart-компнентDelphi программын чухал хэсэг бол компнентууд юм. Одоо Standart-компнентийг үзье.Standart-компнентийн Delphi програмд харагдах хэлбэр доторхи бүтцүүд:
  • 56. -MainMenu :Програмуудын цонхны дээд хэсэгт байрлах програмын үндсэн менюүг хийхэдашиглагдана.Жишээ нь: Word, Excel, Media Player г.м олон програмд байдаг. Програмы н үндсэн хэсэг Хийгдэх дараалал: 1. MainMenu-гээ сонгоод Form дээрээ гаргаад 2 дарна...2. Caption дээр нь меньюїгийн нэрнїїдийг дэс дараалан бичиж
  • 57. Unit.pas дээр нь дараах загвараар бичинэ: Жишээ: procedure Tform1.New1Click(Sender: Tobject); begin inc (Childcount) ; createMDIChild (‘Untitled’+inttostr (Childcount)+’.txt) ; end; -PopupMenu : Mouse -ний баруун товчтой ажиллана. (мөн дээрхийн адил олон програмд ашиглагдана). PopupMenuCaption дээр нь меньюїгийннэрнїїдийг дэс дараалан бичижєгнє(Copy,Paste, Close All г.м )
  • 58. Unit.pas дээр нь дараах загвараар бичинэ: Жишээ: procedure TForm1.Closeall1Click(Sender: TObject); var i : integer ; begin for I := MDIChildCount-1 downto 0 do MDIChildren[I].Close; end; -Label : Тэмдэгт мөрийг гаргана. Label ашигласанCaption дээр нь меньюїгийннэрнїїдийг дэс дараалан бичижєгнє
  • 59. -Edit : Нэг тэмдэгт мөртэй ажиллана. Жишээ: Тооны машин дээр үзье. Edit компнентийг ашигласанэText дээр нь Edit утга бичижєгнє Unit.pas дээр нь дараах загвараар бичинэ: Жишээ: procedure TForm1.Button11Click(Sender: TObject); begin edit1.Text:=edit1.Text+1;
  • 60. end;-Memo :Олон тэкст мөртэй ажиллана. Жишээ нь: Notepad, WordPad г.м олон програмдашиглагдана. Memo компнентийг ашигласанMemo -д ашиглагдах зарим командууд: Memo1.Lines.add(‘thestring’); -Memo -д тэмдэгт мөр нэмэх Memo1.Lines.Clear -Memo -гоос устгах Memo1.Lines[0...] -Memo -д тэмдэгт мөр мөрөөр нэмэх Memo1.Lines.Savetofile(file-ийн нэр зам) - текст файл хадгалах
  • 61. Unit.pas дээр нь дараах загвараар бичинэ: Жишээ: procedure CreateMDIChild (name : string) ; var child : TChildWin ; Begin child := Tchildwin.Create(Application); child.caption := name ; if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name); end ; -Button : Программуудын товчыг хийхэд ашиглагдана. Жишээ нь: Файлуудыг хадгалах комманд дээр үзье. Button компнентийг ашигласан ButtonCaption дээр нь меньюїгийннэрнїїдийг дэс дараалан бичижєгнє
  • 62. Unit.pas дээр нь дараах загвараар бичинэ: Жишээ: procedure TForm1.Closeall1Click(Sender: TObject); var i : integer ; begin for I := MDIChildCount-1 downto 0 do MDIChildren[I].Close; end; -CheckBox, RadioButton : CheckBox : Програм дээр олон сонголт хийх контрол. RadioButton : Програм дээр нэг л сонголт хийх контрол. Жишээ нь: Print -лэх тохиргооны комманд дээр үзье. CheckBox компнентийг ашгиласан RadioButtonком ашгиласанCaption дээр нь меньюїгийннэрнїїдийг дэс дараалан бичижєгнє
  • 63. -ListBox :Програмжждын тэмдэгт мөртэй ажиллахад ашиглагдана.Жишээ нь:Select хийж байгаа үйлдэл нь... ListBox компнентийг ашигласан ListBox -ийн events: Items -мөрийн тоо Colums -баганы тоо Extendedselected -нэг нэгээр нь сонголт хийх Multiselected - олон олноор сонголт хийх Parentcolor -эх өнгө Sorted -үсгээ автоматаар эрэмблэнэ.
  • 64. Unit.pas дээр нь дараах загвараар бичинэ:Жишээ: Бүрэн хэмжээний зохиосон бичлэгunit Umain;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; Edit1: TEdit; Label1: TLabel; Button2: TButton; Button3: TButton; procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button3Click(Sender: TObject);begin close ;end;procedure TForm1.FormCreate(Sender: TObject);begin
  • 65. edit1.Text := ;end;procedure TForm1.Button1Click(Sender: TObject);begin if edit1.text = then begin showmessage (Medeellee oruul.) ; edit1.setfocus ; exit ; end ; listbox1.items.add (edit1.text) ; edit1.text := ; edit1.setfocus ;end;procedure TForm1.Button2Click(Sender: TObject);var i : integer ; b : boolean ;begin b := false ; i := 0 ; while i < listbox1.items.count do if listbox1.Selected [i] then begin listbox1.Items.Delete (i) ; b := true ; end else inc (i) ; if not b then showmessage (ustgah medeellee songo.) ;end;end.Үр дүн ба Debug хийхэд:
  • 66. Standart, AdditionalMainmenuPopupmenu itemsLabel captionEdit textMemo linesButtonCheckboxRadiobutton checkedListboxComboBox ItemsScrollbar Min Max positionGroupBoxRadioGroup Items ColumnsPanelAdditionalBitbtn Kind glyphSpeedButton Glyph FlatMaskEdit EditmaskString Grid cellsDrawGridImage Picture Stretch TransparentShape Shape
  • 67. Brush PenBelev Shape styleScrollboxCheckListBox Items.checkedSpliter !StaticText ChartStylesfsBoldfsItalicfsUnderlinefsStrikeoutӨөрийн стиль үүсгэхvarStyles : TFontStyles;beginStyles := Styles + [fsBold, fsItalic];end;Memo.Font.Style = Styles;Styles := Styles - [fsItalic];if fsBold in Styles thenDoSomething;ХөрвүүлэлтInttostr();Strtoint();Floattostr()Inttohex()Timetostr()Datetostr()DecodeDate(Date: TDateTime; var Year, Month, Day: Word);EncodeDate(Year, Month, Day: Word): TDateTime;EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);varAChar : Char;AnInteger : Integer;
  • 68. beginAChar := `A;AnInteger := Integer(AChar);Label1.Caption := IntToStr(AnInteger);end;Өнөөдөр та нар энгийн Windows application -аас том Windows applicationруу яаж орох талаар сурах болно. Тэр тусмаа дараахи зүйлүүдийг:• Window хийх арга (chemeglel) : toolbar болон status bar;• Command хийх;• Delphi application -ийг хувьлах;• Cursor хэрэглэх;Windows Decoration -ийг хийхБи таны байшингын цонхны гэрэл чимэглэл яриагүй. Би юу ярих вэ гэвэлtoolbars болон status bar нүүрний тухай ярна. Энэ үйл ажилгаагерөнхийдөөwindows decoration гэнэ. Энэ нь маш олон төрлийн жижиг хэсгээсхамаарна.ToolbarsToolbars нь (мөн control bar эсвэл speedbar гэдэг) Windows program -ийнголбагаж юм. Хэрэглэгчид сэтгэлдээ нийцсэн юм хүсдэг ба toolbar болтэднийнэг юм. Маш сайн чанрын toolbar нь доорхи зүйлүүдийг агуулсан байхёстой.• Тoвчнууд нь application -ий цэсэн дээр байх ёстой.• Боломжтой болон боломжгүй товчууд байдаг.• Tooltips нь товчын үйл ажилгааг тайлбарладаг.• Дэлгэцэнд аpplication -ий status bar -ийн нэмэлт заавар гарч ирнэ.• Хасах боломж.• Бусад удирдлагууд нь combobox -ууд эсвэл цэсийг доош ньбуулгадаг товнууд шиг байна.Дурдсан зарим нэг өвөрмөц онцолгууд toolbar бүрт байдаггүй. Delphi -дtoolbar -ийн өвөрмөц чанар нь хялбар боловсронгуй юм. Дараагийн”Command -аар үйл ажилгааг нэмэх” бүлэг би command яаж хийх тухайярна. Би toolbar товчнуудаар command яаж хийхийг дарааүргэлжлүүлэнэ.8 дахь өдөр “delphi application –д байгуулах” , би урд нь хэлсэнчлэн хамгийнхялбар toolbar байгуулах бол application Wizard хэрэглэх. Чи аль хэдийнapplication -aa эхэлсэн байсан ч хамаагүй application wizard хэрэглэж toolbarбайгуулна. Application -aa application wizard –тай ерөнхий болгоод,дэлгэцийг toolbar –тай нь хамт clipboard руу хуулна, дараа нь чи өөрийнхөөжинхэнэ application -aa дахин онгойлгоод ( application wizard –аахадгалахгүй ч байж болно), дараа нь clipboard –оос toolbar –ийг өөрийнхөөapplication –д буулга.Харамсалтай нь application wizard чиний бүх хэрэгтэй зүйлийг (toobarбайгуулах) чинь өгөж чадахгүй. Хамгийн бодууштай нь. Application wizardдээр үеийн арга барил хэрэглэж toolbar байгуулдаг. Toolbar байгуулхад
  • 69. бэлдэх зүйл бол toolbar бас coolbar –ийн бүрэлдхүүн юм. (win32 бүрэлдхүүнээсолох хэрэгтэй). Одоо энэ 2 бүрэлдхүүнээс суралцъя.CoolBar КомпонентCool Bar бүлэгүүд (Bands)1. Coolbar бүрэлдхүүнтэй эд нар program run –лхад байраа өөрчлөнөбас өөр хэмжээтэй болно. Шинэ application бас доошлох (drop)coolbar band –аас эхлэнэ.2. Coolbar дахь drop combo box. Delphi шинэ бүлэг байгуулж combobox –ийг тогтоож байдаг coolbar –ийн өргөнйин combo boxанхаарах.3. Coolbar дотроо дахиж доошлуулах combo box бүрэлдхүүн хий.Дахиж нэг бүлэг эхний бүлгийн доор байгуулагдсан байна4. Хоёрдох бүлэгтээ mouse -ийнхоо cursor -ийг хэмжээний gripcombo box хоёрын дунд байрлуул. Cursor гарны цэгийг өөрчлөнө.Бүлгээ хөдөлгөхөд чамд мэдэгдэнэ. (чи бас хэмжээний gripхэрэглэж band –aa хөдөлгөж болно) тэр band -аа хөдөлгөж нөгөөband –ийнхаа доод цэгт авайч. Нэгдэх бүлэг жижигсэж хоёрдохбүлэгтээ зай тавьж өгнө. Тэр бүлгээ доошлуулаад coolbar“гийнхаа дунд хэсэгт авайч. Тэгээд хэмжээний grip (sizing grip)хэрэглэж хэмжээгээ өөрчил.5. Одоо дэлгэцний band “аа coolbard -aa байрлуул.6. Сool Bar дээрээ дараад autosizе “aa true болго.7. Дараа нь coolbarn “ийнхаа доороос Memo component “ийг ол.Align -ийг alСlient болго.Одоо run program. Cool bar -ийн бүлгүүдийг түрш. Дээш нь доош ньхөдөлгөж үз бас хэмжээг нь өөрчил. Чамайг band -ийг хөдөлгөх явцадcoolbar хэмжээгээ өөрчлөх шаардалга гарч байгааг чи анхаарч байгаа биздээ.Cool bar -ийн бүлгүүд Bands property луу чөлөөтэй орно. Энэ property болTcoolbands, энэ нь Tcoolband -ийн жагсаалт бүрэлдэхүүнүүд. Хэрэв чихоёрдох бүлгийг нуухыг хүсвэл чи энгэж нууж чадна:CoolBar.Bands[1].Visible := False;Чи хоёр аргаар бүлгүүд нэмж болно. Чи аль хэдийн сурснаар бүлэгбайгуулахдаа coolbar -ийн аль нэг бүрэлдхүүнийн drop бүрэлдхүүнхэрэглэж болно, бас нөгөө арга нь Bands editor хэрэглэх юм. Bands editorхэрэглэхдээ double-click coolbar эсвэл click button Object inspector доторBands propertyt -ийн хажуугийн button. Бүлэг нэмэхдээ Add buttonhereglene.Чи бас бүлэг арилгахдаа delete button хэрэглэнэ. Мove up бас move downbutton -ийг хэрэглэж бүлгүүдийн дэс дарааг өөрчлөнө.Чи bitmap property хэрэглэж бүлгийнхээ background -ийг суурьлуулана.Дүрсийг сонгоход тэр дүрс бүлгийн зүүн талд гарна. Чи imageindexхэргэл.Чи байгуулахдаа бүлгийнхээ хамгийн нам бас хамгийн богино хэмжээгтогтоохыг хүсвэл MinHeight бас MinWidth property хэрэглээрэй.Бүлгийнхээхэмжээг тогтвортой байлгахын тулд FixedSize property to True гэж болго.ToolBar КомпонентХуучин Toolbar –аа устгах
  • 70. 1. Меню component-ийг дараад, Alight property-ийг All None болгонөөрчилнө. Менюгийн дээд талаас дарсан чигээр чирээд шинэхэрэгсэл нэмэх зай гаргана.2. Toolbar дээр дараад устгана.Шинэ Toolbar нэмэхДахин шинэ component нэмж дахин эхлэж болно. Юуны өмнө coolbarболон toolbar -ийг нэмэх хэрэгтэй. Энэ удаад coolbar тийм их чухалхэрэгтэй биш, учир нь одоогоор зөвхөн нэг toolbar -тай байгаа. Гэхдээдараа нь toolbar нэмж болох ба үүнийгээ бодолцож төлөвлөх нь зүйтэй.Дараах алхамуудыг гүйцэтгэнэ.1. Form дээр (дүрс) coolbar -ийн component -ийг зөөж тавина. Энэ ньөөрийг автоматаар form-ийн дээд хэсэгт байрлуулдаг. Propertyname-ийг coolbar болгон өөрчил.2. Coolbar-т toolbar component-ийг зөөж тавь, түүний Name property-гmaintoolbar болгон өөрчил.3. Бүх захын хязгааруудын үзүүлэхийн тулд object inspector-т байгааEdgeborders property-д 2 удаа дарна. Ebtop хэлбэрийг Falseболгон өөрчил. (одоо бүх edgeborder хэлбэрүүд False болно)4. Flat property-г True болгон өөрчил. Энэ нь курсор тэдний дээгүүрөнгөрөх бүртэл toolbar-уудад хавтгай харгалзах хэлбэрийг олгоно.5. Coolbar дээр даран түүний Autosize property-г True болгонөөрчилнө. Coolbar нь toolbar-ийн хэмжээгээр өөрийн хэмжээгөөрчлөх болно.6. Memo component дээр дараад Align property-г буцаагаад AllClientболгон өөрчил.Toolbar –т товч нэмэхОдоо toolbar-д товчлуурууд нэмж эхлэе. Та хэд хэдэн товчнууд, мөн цөөхөнзавсрууд нэмж болно.Эхний үед товчнуудгүй байх ба үүнийг дараа нь янзалж болно. Одоодараах алхамуудыг хийе:1. Тoolbar дээр хулганы баруун товчоо дараад New Button -г сонго.Ингэхэд шинэ товч toolbar дээр байрлана. Товчны Name property-гFile NewButton болгон өөрчил.Hint Property-ийг New богоод New File үүсгээд, Show Hint-рproperty-г True болго.(Hint Code-ийг 8 дахь өдөр бичсэнээ сана. Энэ код чинь програмдбайгаа бөгөөд шинэ hint чинь шууд ажиллах болго)2. Дахин Toolbar дээр баруун товч (маузны) дараа New Button-ийгсонго. Ингэснээр 2 дахь товч эхний товчны баруун талдбайрлагдах болно. Name Property-ийг нь File Open Button болгонөөрчил. Hint Property-ийг Open гээд байгаа файлаа нээ. Show Hintproperty-ийг True болго.3. Дахин товч нэм. Товчны Name property-ийг File Save Buttonболгон өөрчил. Hint property-г save болгоод файлыг хадгалж showhint property-г True болго.Санамж: Товчнууд болон spacer-үүдийг toolbar-т нэмэхэдtoolbar-ийн сүүлийн хяналтын хэсгийн баруун талд үргэлжбайдаг.Button-г oруулахдаа хүссэн газраа байрлуулах боломжгүйч дараа нь button эсвэл spacer нэмэгдэхэд дараад өөр
  • 71. газар зөөж болно. Байгаа button-ууд нь шинэ button-д зайгаргаж өгнө.Ингээд button-г тохируулах эхний алхам дууслаа. Одоо button-ны 2 дахьтохиргоог хийнэ. Гэхдээ үүнээс өмнө эхний тохиргоо болон 2 дахьтохиргооны хооронд багахан завсар тусгаарлагч хэрэгтэй.1. Toolbar-дээр баруун товчоо дараад New sepatator-ийг сонго.Тoolbar-т тусгаарлагч бий болно.2. Бас нэг товч нэм. Name property-г нь Edit Cut Button; Hint propertyгCut/cuttoclipbord болго.3. Copy & Paste товч нэм. Нэрүүдийг болон Hint property-гашиглалтын дагуу нэр өг.4. Дахин тусгаарлага оруул.5. Help About Button товч оруул. Hint property-г About/About Scratchpad болгон өөрчил.6. Cut; Copy; Paste; Help товчнуудийг сонго. (Shift дарж байгаад)Тэгээд Show Hint property-г True болгон өөрчил. Сонгосон товчболгон өөрчлөгдөнө.Хийсэн form чинь Figure 13.3-тай адил болох болно.Toolbar –ийн товчыг ажилуулахТовчлууруудыг гаргачихлаа. Одоогоор тэд ямарч үүрэг гүйцэтгэхчадваргүйбайгаа. ОnClick-г нь тохируулаагүй байгаа. Одоо үүнийг хийцгээе:1. Эхний товчны File New Button-ийг дараад Object Inspector -ийнEvent хуудасийг сонго. OnClick-ийн drop-down суман дээр дараадFile New Click-г сонго. Ингэснээр товчийг идэвхжүүлэх боломжтойболно.2. Товч бүр дээр нэгдүгээр алхамыг гүйцэтгэ. OnClick дарж сонголтхийхдээ болгоомжтой бай.3. Scratch Pad-д About Box-г хийгээгүй бол одоо нэгийг хий. Дараань Help/About menu-д үйлдлийг зааж өг. Help about button-ийOnClick-г татаж, Help About menu-д үйлдлийг өг.Toolbar -ийн товчнуудад Bitmap нэмэхЭнэ Toolbar-т Ямар нэг юм дутуу байна. Glyphs нэмэх шаардлагатай.Дараах алхамуудыг хийж Imagelist component нэм.1. Form дээрээ Imagelist component байрлуул.2. Form дахь Imagelist component -ийн icon дээр байруун товчоодараад Imagelist editor-г сонго. Imagelist editor харагдана.3. Add товчийг дар. Сommon FilesBorland sharedImagesButtonsхавтсийг удирдлага болгон FILENAME.BMP файлыг дарж нээ.Харилцах цонх гарч bitmap-г 2 дүрс болгон салгах уу гэсэн асуултгарна. Шинээр дүрснүүд маань адил өндөр өргөн нь 16 боллоогэсэн үг. Сонгосон дүрс чинь 16 pixel-ээс муу өргөнтэй батохиромжтой хэмжээнд жижигрэх эсвэл 2 дүрсэд хуваагдана.Дахин дуудвал Delphi-тай нэг Bitmap 2 дүрстэй хамт гарч ирнэ.Эхний Дүрс нь хэвийн, дараах нь дутуу гарна.4. Image list Editor-р bitmap-ийг 2 дүрс болгохдоо Yes-г дарна.Ингэснээр 2 дүрсийг харуулна. Эхний дүрс нь л таньд хэрэгтэй.Дутуу дүрсийг устга.5. Add Button-г дахин дар. Fileopen.BMP файл дээр дар. Bitmap-ийн2 дүрс болгоход Yes дар. Дутуу дүрсийг устга.
  • 72. 6. Товч бүр дээр 5-р алхамыг гүйцэтгэ. Дуртай Bitmap-ийг сонго.Дүрсийн жагсаалтийг гаргаж байхдаа илүү дүрсүүдээ устгажбайхаа мартав.Toolbar дахь товчнуудын дарааллаар Imagelist editor дахьдүрсүүд байрлаж байгаа эсэхийг хараарай. Ингээд 7 дүрстэйболллоо.7. Ok дараад Imagelist editor-г хаа.Санамж: Imagelist editor -г нэг удаад хэд хэдэн дүрсийг зэрэгсонгоод дүрсийн жагсаалтыг нэг дор хийж болно.Одоо Toolbar-ийг дүрсний жагсаалттай холбож байна. Toolbar дээр ObjectInspector-т Images property-г байрлуулаад доорхи жагсаалтаас Imagelist –гсонго. Бүх алхмаа зөв хисэн бол таны товчнууд дүрстэй болсон байгаа.Toolbar нэмэх бүрт Delphi автоматаар ImageIndex Property-г товчиндзориулж оруулж өгнө. Учир нь та товч боолон дүрснүүдийг ижилдарааллаар байрлуулсан ба товчнууд дахь glyphs зөв байх нь гарцаагүй.Хэрвээ товч буруу байвал товчны ImageIndex property-г өөрчилж болноэсвэл Imagelist editor-луу дахин ороод дүрс ба дүрсний жагсаалтийгөөрчилж болно.Санамж: Дүрсний жагсаалтын дүрсүүдийг дахин байрлуулж,тэднийг ILE-ийн шинэ байрлалд зөөж тавь.Glyphs товчОдоо хэрэглэх боломжтой товчны л glyphs -тэй болно. Ажиллахболомжгүйтовчны glyphs мөн шаардлагатай. үүнийг хийх 2 арга бий.• Ажиллах боломжгүй glyphs-г Toolbar автоматаар бүтээх.• Ажиллах боломжгүй Bitmap-г агуулах 2 дахь дүрсийн жагсаалтыгтовчинд зориулж бүтээх.Үүний эхний арга нь Хамаагүй хялбар юм. Ихэнхи тохиолдолд үүнийгхийхэд хангалттай ч заримдаа идэвхигүй товчны glyphs-г бүтээгчалгоритмажиллахгүй байх тохиорлдол гардаг. (glyphs-ийн илэрхийлэл нь тодорхойбус, зөв биш харагддаг). Учир нь товчинд хангалттай өнгө ялгах өнгөбайхгүйд байгаа юм. Энэ тохиолдолд та идэвхгүй товчны glyphs-г агуулжбуй 2 дахь дүрсний жагсаалтйг гаргаж болно. Toolbar-ын DisabledImagesproperty-г тохиргоог хийж идэвхигүй glyphs бүхий дүрснүүдийгтохируулснаар үлдсэн нь автоматаар хийгдэх болно. ScratchPad-н хувьдToolbar-н товчнуудийг автоматаар орж байгаа цаашид хийхшаардлагатайзүйл үгүй.Хуучин ScratchPad-г дахин хамт гаргаж болно. Энэ бол төслийг хадгалахболомжтой үе юм. Хадгалсны дараа Run товчийг дарж програмыгажиллуул. Тэгээд товчнууд юу хийх ёстой, юу хийж байна гэдгийг хар.Хэрэв программ ажиллахгүй бол эргэж алхам бүрээ хянаад алдааг олжзас.Ингээд амжилттай бол ScratchPad төслийн номын кодийг харсан нь дээрбайх.Toolbar Tips ба Hints7 дахь өдрийн ‘VCL components”, 8 дахь өдрийн “Delphi-д хэрэглээг бийболгох нь” сэдвээр ярилцаж байхдаа, ScratchPad programm-д hint text
  • 73. оруулж байхдаа tooltip болн hints-ийн талаар яриж байсан.TABLE 13.1. TOOLTIP-д ХАМААТАЙ хэрэглээний PROPERT-ууд.Дээрх Default-ийн тохируулсан хугацааны сонголт нь ихэнхи хэрэглээндбайдаг хэдий ч та өөрийн хувилбарыг оруулах сонголттой.TOOLBARS БA ЗӨВӨЛГӨӨ• Хэрэглэгч хяналтын текстйиг уншиж байхад хяналтын тооltipsбүү хэрэглэ.• Tooltip, Hint-г товч бөгөөд тодорхой байлга.• Status bar-ны Hint-г илүү утга төгөлдөр болго.• Хэрэглэгчдээ Hint-г хаах сонголтыг өг.Toolbar-т өөр хяналт нэмэхToolbar-н бүрэлдэхүүн хэсэг бол маш өргөн хүрээтэй. Toolbar-т нэмэгдэххяналтын бусад төрлүүдээс хамгийн түгээмэл нь Combo Box юм. ComboBox бүхий Toolbar үсгийн фонт солих, zoom тохируулах, сонголт хийхгээдболомж хязгааргүй.Component-г Toolbar-т нэмэхдээ Component Palette-ээс componentсонгоодtoolbar дээрээ зөөж аваач. Toolbar өөрөө хаана байрлуулахаазохицуулна.Шаардлагатай бол зай тусгаарлагч оруул. Нэгэнт component-г toolbar-торуулсан бол хэлбэр байдлыг хүссэнээрээ янзал. Нэлээд төвөгтэй мэтболовч үнэндээ энэ бүхэн маш энгин. Windows API-г ашиглан toolbarCombo Box-г оруулж туршиж үзээгүй бол Delphi ямар их ажлыг чинхөнгөлжхамгаалж байгааг та ойлгохгүй.Dockable ToolbarDockable Toolbar нь байршилаа өөрчилдөг. Хулганаараа дараад өөрбайрлалд байрлуулж болно. Ихэнхи Windows -н программд dockabletoolbar
  • 74. түгээмэл байдаг. Dockable toolbar бол paradox sort-ууд юм. Нэг талаарихэнхи хэрэглээтэй dockable toolbar хэрэглэгчид маань хүлээж бйадаг баэнэ өвөрмөц тун дажгүй юм. Нөгөө талаар ихэнхи dochable toolbar-уудүйлдэл хйихэд хэрэглэгддэг. Delphi-д dochable toolbar-г хийхэд хэцүү бишюм. Та ч үүнийг хийж чадна.Тэмдэглэл: Үүнийг зөвхөн toolbar -ийг хийх хэргэлхэд чбус windows -ийн орчинд ашиглаж байна.Dockable Toolbar -ийг хийхDockable toolbar хийхэд 2 алхам хийнэ.• Dragkind-н тохиргоог DkDock дээр тавь.• Dragmode-г тохиргоог dkAutomatic дээр тавь.Дээрх сонголтын хийсний дараа toolbar-г дэлгцэн дээрээ хүссэнээрээбайрлуулж болно. Гэсэнч үүнийг байнга хийх шаардлага гарахгүй.Toolbar-гбайрлуулахад drag&drop үйлдлийг хийж чаддаг байх хэрэгтэй.Dock SitesRoger Waters-ийн хэлснээр “Ямарч тэнэг хүн нохойд оромж хэрэгтэйгмэддэг” адил toolbar гарган бйарлуулах орон зай хэрэгтэй. Windows –норчны component-ууд нь DochSite property-н тохиргоо нь True байдаг.Component нь голцуу TpageControl, Tcoolbar, Tcontrolbar, Tpagescroller,Tpanel-г docksite -р хэрэглэдэг.Дараах алхамуудыг гүйцэтгэ:1. Хоосон форм дээр coolbar-н component-г тавь. Docksite property-гTrue болго.2. Coolbar дээр toolbar-г тавь. Toolbar-ын dragkind property -г dkDockболгоод үүнийг dragMode property-г dmAutomatic болго. Toolbarдээр хэд хэдэн шинэ товч бий болго.3. 2 дахь Coolbar-н оролт дээр байрлуул. Aligh property-г dLeftболгоод Aligh property-г True болго.4. 3 дахь Coolbar-г байрлуул. Coolbar-ийн өргөн нь 40 pixel орчимбайна.Одоо Програмаа ажиллуул. Toolbar -г DockSite -с DockSite -рүү зөө.Status BarStatus Bar нь хэрэглээг улам хэрэгцээтэй болгодог бас нэг онцлог юм.Бүгдбиш ч ихэнхи нь Status Bar -д тус болдог.Win32 Status Bar хяналт бүхий VCL Status Bar бүрэлдэхүүн нь Breeze -гбүтээгч Status Bar -г хидэг. 13.2 хүснэгтэд буй мэдээллийн жагсаалтийгнэгхарчих.StatusBar PROPERTIES.
  • 75. Дээрх хүснэгтээс харвал Status Bar энгийн ба multipanel-тай байдагбайна.Энгийн уу? эсвэл цогцолбор уу?Хэрвээ Simple bar-тай байхыг хүсвэл simple panel propety-г True болго.simple panel-ийг True эсвэл False болгосноор simple ба complex Status Barаль нь байхыг сонгож болно.Complex Status Bar нь олон панелтай. Хэрвээ Status Bar хэрэглэх болStatus Bar panel editor -ийг ашигла. Status Bar panel editor-г дуудахын тулдpanels property -н Value column дээр 2 дар. Panel нэмэхийн тулд StatusBarpanel editor-н Add New товчийг дар. Устгахын тулд Delete Selectedтовчийгдар. Засвар хийхийн тулд панелаа сонгоод Object Inspector –н панелийнтохиргоог хий.NOTE: Complex bar -ны панел тус бүр TstatusPanel -н төрөлюм.Ихэнхи properties өөрийн тайлбартай байдаг хэдий ч цаашдынтэмдэглэлд2 хүчин зүйл шаардлагатай.Text property нь панелд харуулах текстээ агуулж байдаг. Text property-гмөнпанелийн текстийг өөрчилж байхад хэрэглэж болно. Status Bar-нтохиргооны талаар дараа яригдах болно. Панелийн дизайн дээр текстийн
  • 76. хэрэг байхгүй. Ажиллаж байхад текст өөрчлөх гэж байгаа бол psTextэсвэлpsOwnerDraw-ын алинаар нь ч Style property-г тохируулж болно. Панелдахтекстүүд Alignment property-н зааснаар байрлана. Хэрэв Style ньpsOwnerDrawing байвал панел ямар байх талаар дараа ярилцана.Panel-д зориулсан Width, Bevel, болон Alignment properties бол шуудтодорхой байдаг. Дадлага хийснээр эдгээр property Status Bar-н харагдахбайдалд хэрхэн нөлөөлөхийг мэдэж болно.Note: Status Bar panel editor -ээр дамжуулан Status Bar ямарөөрчлөлт оруулдгийг форм дизайнер дээр харж болно.Status Bar panel editor дээр ажиллаж байхдаа Status Bar -г харж чадна.Хийсэн өөрчлөлт бүр чинь форм дизайнер дээр харна. Status Bar дээрпанел нэмээд дууссан бол SBPE-г форм дизайнер руу буцаж ор.Note: Status Bar component-н panels property-г өөрчлөнсайжруулж байхад форм дизайнер автоматаар simple panelproperty-г False болгоно. Хэрэв та multiple panels-г хэрэглэжбайгаа бол simple Status Bar-тай байхыг хүсэхгүй биздээ.Status Bar –ийн текстийг өөрчлөхҮүнийг хийх 2 арга байна.• Status Bar-ны simple text property-г зааврын дагуу өөрчлөнө. (Simple status bar) эсвэл панел тус бүрийн Text property-г (complex Status Bar-т)• VCL-г автоматаар Auto Hint proprerty-г True болгохоор status bar –г тохируул.Хэрэв simple status bar -тай бол status bar -ын текстийг өөрчлөх нь ихэнгийн юм. Simple panel property нь True байхад status bar -д оруулаххүссэн текстийг Simple text property-д тохируулна.StatusBar.SimpleText := ‘This shows up in the status bar.’;Complex bar -тай бол текст өөрчлөх нь жаахан илүү төвөгтэй байх.Хэрвээcomplex status bar-н эхний panel-н текстийг өөрчлөхийг хүсвэл нэгиймэрхүүзүйл ашиглах байх.Боловсруулсан: оюутан Б. Нямсүрэн SW01D062 Хянасан: багш Ч. Эрдэнэбат14Өөрөө өөртөө заах нь: Borland Delphi 4http://www.csms.edu.mn/cheri/StatusBar.Panels[0].Text := ‘Status Bar Text’;Status bar component-н panels property нь Item гэж нэрлэгдэх status bar-ынпанелийн array-тай байдаг. Энэ Item-н array-д хийсэн Text property-нэлемент нь панелийн текстийн өөрчилнө. Учир нь Item бол panels object-дdefault array property болдог ба та онцгойлсон заалттай Items-тэй байхшаардлагагүй. Array 0-д сууршагдсаныг харж байгаа байхаа. status bar-ныэхний панел нь 0 array элементтэй байна.Автомат status bar-ны Hint текст нь тайлбартаа их юм шаарддаггүй. Таны
  • 77. хийх зүйл бол Autohint property-г True болгон явдал юм. үлдсэн ньавтоматаар хийгдэнэ.NOTE: AutoHint-г хэрэглэсэн ч та status bar-н текстийгзааварчлан өөрчилж болно. status bar-н текстийг та яаж чөөрчилж болно. Курсор текст hint-тэй component-н дээгүүрөнгөрөх дараагийн удаад текст сонгогдоно гэдгийг мартуузай.Owner-Drawn Status Bar PanelsТүрүүн panel-н Style property нь psText эсвэл psOwnerDraw байж болнохэмээн хэлсэн билээ. Panel-ийн Style-ийн psOwnerDrawn болгохдоопанелдхарагдах аливаа дүрсийг өөрөө хийж болдог. Дэлгэцэн дээр дүрсгаргахынтулд owner panel -г ашиглах яршигтай ажилтай боллоо гэсэн үг бишээ.Энэнь та дэлгэцэн дээр status bar-нд горим төрлийн icon эсвэл bitmap гарганагэсэн үг. Хийх алхамууд:1. Panel-ын Style property-г psOwnerDraw болго.2. OnDrawPanel event –д кодыг бичиж өг.OnDraw panel-н үйлдлүүдийг л хийх нь гол ажил юм. OnDraw panel-нeventhandler иймэрхүү харагдана.procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;Panel: TStatusPanel; const Rect: TRect);Status bar-н хэмжүүр бол status bar-н заагч юм. status bar-т ер нь заагчтайбайх болно. Тиймээс multiple OwnerDrawn status bar хэрэглээгүй бол энэхэмжүүр хэрэггүй. Одоогоор drawing-д хэрэгтэй тусгай панелийн заагчболpanel property юм. Та энэ хэмжүүрийг хэрвээ status bar-таа нэгээс илүүOwnerDrawn panel-тай бол аль panel нь drawing хэрэгтэй байгаа гэдгийгтодорхойлохийн тулд ашиглаж болно. Rect хэмжүүр нь panel-ийн хэмжээгба байрлалыг агуулж байдаг. Энэ хэмжүүр нь их чухал юм. Учир нь энэньзургийн хэсийн хэмжээг яг тодорхой хэсэг юм .OnDrawPanel event handler нь Style property-г psOwnerDraw болгох панелтус бүрийг дуудсан. Хэрэв та зурах ганцхан панелтай бол санаа зовоххэрэггүй. Хэрэв multiple panels зурах бол аль panel-г вэ гэдгээтодорхойлоод зур. Хавсралтийг харвал тодорхой ойлгох байхаа. Номныкод нь status bar-тай холбоотой зүйлсийг хийхэд тус болох хавсралтбүхийStatbar гэсэн нэртэй программыг багтаасан байгаа. Программыгажиллуулжтаны хэрэглээний status bar-г гүйцэтгэж буй tip-н эх сурвалжийг тань мэд.Зураг 13.6-д программ хэрхэн ажиллаж байгааг харуулжээ.Энэ программын status bar нь multiple panel-тай болохыг харж байгаабайхаа. Дунд талын 3 panel-ууд бол OwnerDrawn юм. OVK болон EXTтэмдэгтэй panel-ууд нь Word программ эсвэл code editor-тай төстэйбайгаа.Overtype эсвэл Extended Selection mode зэрэг иймэрхүү төрлийн
  • 78. программууд нь on ч байж магад off ч байж магад. Хэрэв mode нь onбайвал status bar-н panel дахь текст хар өнгөтэй байна. Хэрэв off байвалтекст 3 хэмжээст бүдэг харагдана. 3 дахь OwnerDrawn panel нь Windowsicon-ий нөөцийг status bar дах графикийн хэрэглээг хавсаргана.Программыг ажиллуулж хэрхэн ажиллаж байгааг мэд. Жагсаалт 13.1StatBar программын OnDrawPanel үйлдлийг харуулж байна.procedure TMainForm.StatusBarDrawPanel(StatusBar: TStatusBar;Panel: TStatusPanel; const Rect: TRect);varR : TRect;Icon : HIcon;beginwith StatusBar.Canvas do begin{ Create a temporary TRect object. The Rect parameter{ is const so we cant change it. }R := Rect;{ Check to see if panel 3 is the panel which needs{ to be drawn. If so, draw an icon in the panel. }if Panel.Index = 3 then begin{ Load one of the stock Windows icons. This time{ using the API is easier than using VCL. }Icon := LoadIcon(0, IDI_HAND);{ Draw the icon and shrink it down to 15 x 15 pixels. }{ Center it in the panel, too. }DrawIconEx(Handle, Rect.Left + 6, 3,Icon, 15, 15, 0, 0, DI_NORMAL);{ Nothing more to do. }Exit;end;{ This rather lengthy if statement checks to see if{ either the Overtype Mode or Extended Selection{ check boxes are checked. If so, then what we need{ to do is to draw the text twice. First, we draw it{ in white. Then we draw it again, offset by 1 pixel,{ in gray. The effect is a 3D disabled-text look. }if ((Panel.Index = 1) and (OvrMode.Checked = False)) or((Panel.Index = 2) and (ExtendedSel.Checked = False))then begin{ Move over and down one pixel for the offset. }Inc(R.Left);Inc(R.Top, 2);{ Change the text color to white. }Font.Color := clWhite;{ Set the backround mode to transparent so the{ text appears hollow and so that the white{ text can be seen under the gray. }Brush.Style := bsClear;{ Draw the text using the API function DrawText. }{ I use DrawText because it allows me to center{ the text both horizontally and vertically within
  • 79. { the given rectangle. }DrawText(Handle, PChar(Panel.Text), -1,R, DT_CENTER or DT_VCENTER or DT_SINGLELINE);{ Set the color to gray because were going to{ draw the text in gray in a moment. }Font.Color := clGray;{ Set the rect back to the original size. }Dec(R.Left);Dec(R.Top, 2);end;{ Display the text. If the item is not disabled then{ the default color (black) is used to draw the text. }{ If the item is disabled, then the text color has{ been set to gray by the code above. }DrawText(Handle, PChar(Panel.Text), -1,R, DT_CENTER or DT_VCENTER or DT_SINGLELINE);end;end;Энэ код нь сүрдмээр харагдаж болох юм. Гэвч ихэнх нь тайлбар юм. Кодньнилээд энгийн бөгөөд алхам бүртээ тайлбар орсон байгаа. 3D харагдажбайгаа идэвхигүй текст нь нэг удаад цагаанаар бичигдсэнээрболовсронгуйболж drawing нь Slight offset-тэй саарал болно. Үр дүнд нь текст хонхойнхарагдана. Icon нь Windows API functions LoadIcon болон DrawIcon Ex-гхэрэглэснээр гарч ирнэ. status bar panel-ийн Owner drawing эхлээд байххэдий ч энэ нь тийм муу эд биш гэдгийг та ойлгох болно.Та Windows-н хэрэглээг удаан хугацааны турш бичиж магад, тэгээд statusbar-даа хэзээ ч Owner Drawing ашиглахгүй ч байж мэднэ. Хэзээ нэгэн цагтхэрэг болвол хийхэд боломжгүй зүйл биш гэдгийг мэдэж авлаа.Command EnablingCommand Enabling нь тухайн үеийн нөхцөл байдлаас хамаарч товчийгбиелэгдэх, үл биелэгдэх болгох процесс юм. Жишээ нь:Текст засварлаж байх явцад ямарч текст идэвхжүүлээгүй хирнээ CutэсвэлCopy товчийг дарвал ямарч команд биелэгдэхгүй. Clipboard-д ямар чтекстороогүй бол Paste товч ажилдаггүйтэй адил.Command Enabling нь тийм ч хэцүү биш. Ялангуя шинэ Delphi-нTActionListcomponent-тай бол хүнд асуудал биш. Зөв хийж сурахад хугацаахэрэгтэй.Учир нь та наривчлан алхам бүрт анхаарал тавих хэрэгтэй.Command Enabling –ийг TActionList and TАction ашигланхэрэгжүүлэхTAction төрлүүд Command Enabling болох таатай нөхцлийг бүрдүүлнэ.TAction List нь component palette-г нэмэлт TAB-г олж зохицуулдаг.Нэрнээс нь аваад үзвэл TAction Object-н жагсаалийн асуудлийгилэрхийлжбайна. Та ямар нэг үйлдлийг бүтээлээ, тэгээд үйлдэл дээрээ тулгуурлан
  • 80. ямар нөхцөлд биелэгдэх, үл биелэгдэх ёстойг тэмдэглэнэ. Үүндcomponentцэс, toolbar, context menu items г.м.Edit/Cut –командийг авч үзье. Хамгийн багаар гэхэд үүнд зориулсан 3үйлдэлтэй байх хэрэгтэй.• Үндсэн цэс• Toolbar товч• Шуурхай цэс (popup)Action List editor-р үйлдлээ хийнэ. Жишээ нь: Edit/Cut.Cut нэртэй үйлдлийг хийгээд CutAction гэнэ. Тэгээд Object Inspector -ийгашиглан CutAction-г тэмдэглээд Action property-г үйлдлийг хийх объектбүрт (цэс, toolbar, шуурхай цэс) хамааруулж өгөх хэрэгтэй. Ажиллуулахявцад Cut сонголтын идэвхжүүлэхийн тулд нэг код хийчихнэ.CutAction.Enabled := True;Ингэснээр Cut-г биелүүлэх бүх component ажиллах болно. Идэвхигүйболгохын тулд үйлдлийг Enabled property-г False гэж тэмдэглээд л болоо.TAction болон TAction List-н OnUpdate үйлдэл нь командыг идэвхжүүлэхкодийгтохиромжтой газар байрлуулна.TAction ашиглан командыг биелүүлэх чадвартай боллоо. Дараагын хэсэгтScratch Pad-д командийн биеллийг нэмэх болно.Command Enabling –ийг хэрэгжүүлэхЭхлээд Action List component -г тохируул, дараа нь олон төрлийнcomponent -г action жагсаалтайд оруул. Scratch Pad программд командыгхэрэгжүүлэе.Тэмдэглэл: Хэрвээ та хэд хэдэн үйлдлийг хадгалахыг хүсэжбайгаа бол, үйлдлийн шинэ категори нээж болно. Шинэүйлдлийн категори үүсгэхийн тулд өөрийн хүссэн дурынтекстэд 1 ба түүнээс дээш үйлдлийг агуулах энгийн категориүүсгэхийн тулд эхлээд edit үйлдлийг үүсгэнэ.Компонентод Action –уудыг холбохҮйлдлийн бүрэлдэхүүн хэсгийг холбох дараагийн алхам бол:1. Menu Editor –ийг эхлүүлэхийн тулд Main Menu – н дээр 2 удаатовш.2. File/ save menu – г сонгоод save үйлдлийн шинж чанарыг соль.3. File save as menu – г сонгоод, save as үйлдлийн шинж чанарыгсонго.4. Edit menu – руу шилжээд Cut menu-г сонго. Cut үйлдлийн шинжчанарыг өөрчил.5. Copy үйлдлийг ашиглаж edit menu доторх Copy Рastе үйлдэлийг4-т заасантай адил адил замаар үйлдэлийг гүйцэтгэнэ.6. Toolbar menu доторх File save товчийг дарж Form Designer –гүүсгэнэ.7. Cut ,Copy, Рastе үйлдэлийг тус тусад нь гүйцэтгэхийн тулдToolbar menu доторх Cut ,Copy , Рastе товчлууруудыг дарна.8. Хэрвээ шаардлагатай бол Memo Papup menu –ний үйлдэлийншинж чанарыг өөрчил.Хэрэв та үйлдэлийн шинж чанарын бүрэлдэхүүний Save үйлдлийггүйцэтгэх тушаал өгсөн тохиолдолд Save үйлдлийн бүрэлдэхүүн хэсэг
  • 81. болох Caption. Checked. Enabled. Help context . Hint. Image. Index . Shortcutболон Vteible – үүд нь бүгд өөрчлөгдөх болно. Ямар нэгэн үйлдэл хийхэдтүүнийг бүх бүрэлдэхүүн хэсгүүд дахин өөрчлөгдөн бичигддэг. Тиймээс ташинэ үйлдэл хийхэд Hint болон Item index нь өөрчлөгдөнө. Энэ үйлдлийггүйцэтгээгүй тохиолдолд FoolBar болон Hint text буруу бичигдэх болно.Тухайн үйлдлийн бүрэлдэхүүн хэсэг бүр түүнийг тойрон бичигдсэн байдаг.Тодорхой үйлдэл өөрчлөгдсөн тохиолдолд, тухайн үйлдэлд хамаарагдахбүрэлдэхүүн хэсгүүд бүгд өөрчлөгдөнө.SaveAction.Enabled := False;Хэрвээ ийм код гарч ирвэл Save үйлдлийг үүсэгэхэд үйлдлийн шинжчанарын ямарч бүрэлдэхүүн хэсэг боломжгүй гэсэн үг. Энэ үйлдлийгболомжтой болгохын тулд дараах кодыг ашигла:SaveAction.Enabled := True;Энэ бол маш энгйн. Учир нь дараах 2 код тэнцүү тохиолдолд Saveүйлдлийг гйүцэтгэхэд тухайн үйлдлийн бүрэлдэхүүн хэсэгт өөрийн шинжчанар агуулагдана.{ Үйлдлийг гүйцэтгэх нэгэн тохиолдол байна. }SaveAction.Enabled := False;{ Хүнд арга. }FileSave.Enabled := False;FileSaveBtn.Enabled := False;Ээн жишээний зөвхөн нэгээр л та хадгалж чадна. Хэрвээта хэд хэдэнбүрэлдэхүүн хэсгийг боломжтой эсвэл боломжгүй болгох хэрэгтэй байгаатохиолдолд энэ үйлдэл нь таны цагийг маш ихээр хэмнэх болно. Та шинэүйлдэл хийх болон түүнтэй хамааралтай хэд хэдэн бүрэлдэхүүн хэсгийгболмжтой болгоход дээрх код маш хялбар гүйцэтгэх болно.Scratch Pad программ руу шилжье. Cut болон copy товчлуурууд ажилlахболомжгүй байна гэж бодъё. Memo дотор текст бичээд түүнийгээ Toolbarдоторх Cut болон copy товчлуур боломжтой болно. Memo дотор хаа нэгтээтовшиход сонгогдсон текст дахин сонгогдох болно. Энэ тохиолдолд Cut.copy товчлуурууд дахин ажиллах боломжгүй болно. Paste товчлууражиллах боломжтой байна уу. Хэрвээ тийм бол монитор дээрх Alt + printscreen товчлуурыг дар. Энэ тохиолдолд Paste товчлуур ажиллахболомжгүй болно. Өөр текстийг сонгоод Cut эсвэл Copy товчлуурын альнэгийг товш. Энэ тохиолдолд Paste товчлуур ажиллах болно. Учир нь одооMemo -д буулгах өөр текстийг агуулж байгаа учраас. Энэ хэрхэн ажиллахвэ.Хэрвээ ямар нэгэн Edit хяналтийг ажиллуулаад оруулсан тохиолдолдтүүнийг дагалдах бүх бүрэлдэхүүн хэсгүүд / TEditCopy. TеditCut. TeditPaste/ үйлдэлтэй автоматаар ажиллах боломжтой, үгүйг гүйцэтгэх болно. Save.Save as ангилалуудыг ажиллах боломжтой болгох командууд. Дээрхкомандыг гүйцэтгэхийн тулд OnUpdate гэдгийг ашиглах хэрэгтэй. ҮүнээсOnUpdate –ийн тухай мэдээллийг авах хэрэгтэй. On Update нь таны өгсөнкомандыг ажиллагаатай болгохын тулд тохирох зайгаар хангана. Таныхүсэлтийг гүйцэтгэхэд бэлэн болсон тохиолдолд танд WM_Enteridle гэсэнмэдээллийг илдгээх болно.Та өөрийнхөө командыг ажиллах боломжтой болгохын тулд On Update –дшинэ холбоо үүсгэнэ. Та командаа шалгахын тулд Memo -гийн нөхцөлийгшалгаж Save. Save as ажиллах болмжтой болно.
  • 82. On Update үйлдлийг үүсгэхэд дараах зүйлүүдийг буюу алхамуудыггүйцэтгэнэ.1. Action list Editor эхлүүлээд Action бүрэлдэхүүн хэсгийг 2 удаатовш.2. Ажиллах боломжтой үйлдлийн жагсаалтаас Save action сонго.Хэрвээ үйлдийн жагсаалтанд дээрх үйлдэл харагдахгүй байгаатохиолдолд File үйлдлийн категорийг товш.3. On Update д Object Juspector гаргаж ирэхийн тулд Value гэсэнтовчлуурыг 2 удаа товш On Update дотор Code Editor гарч ирнэ.4. Action list Editor байрлуул. Хэрвээ Action list Editor олж чадахгүйбайгаа тохиолдолд View / Window жагсаалтыг ашигла / үйлдлийнжагсаалтаас Save Action –ийг сонго.5. On Update-ийн дараагийн хуудас руу шилжихийн тулд сум заажбайгаа хэсэгт 2 удаа товш. Жагсаалтаас Save action update –гсонго. Энэ нь On Update, Save, save as файл ашиглах боломжойболно.6. Action List Editor .-ийг хаа.procedure TMainForm.SaveActionUpdate(Sender: TObject);begin{ Command enabler for Save and Save As. }SaveAction.Enabled := Memo.Modified and (Length(Memo.Lines.Text) > 0);SaveAsAction.Enabled := SaveAction.Enabled;{ The following two command enablers dont use actions. }{ Instead the Enabled property of the two menu items }{ is accessed directly. }{ Command enabler for Select All. }EditSelectAll.Enabled := Memo.Lines.Count > 0;{ Command enabler for Undo. }EditUndo.Enabled := Memo.Modified;end;Өмнө нь Memo text агуулж байсан, эсвэл үгүй байсан ч memoтодорхойлогдсон байсан ч үгүй ч save action үйлдэл ажиллах боломжтойбайсан. Дээрх кодыг хэрэгжүүлснээр текст агуулж байгаа болон ажиллажбайгаа тохиолдолд Save үйлдэл горимд ажиллах боломжой болно. Save.Save as категори адил аргаар ажиллана.Edit menu. Select all undo хэрэглүүр нь үйлдлийг ажилгаагүй байсан чажиллах боломжтой.TCommandListЭнэ бол таны өгсөн командын жагсаалтанд хараахан дурьдагдаагүй байгаанэмэлт тусламж юм. Дээрх нуугдмал тусламжийг харахын тулд дараахалахмуудыг хийнэ.1. Schatch Pad`s гол бүтцээс Main menu гэсэн тэмдэглэгээгсонго.2. ImageList – ийн Image – n шинж чанарыг өөрчил.3. PopupMenu –г адил аргаар хий.Харин одоо программ руу шилжээд File & Edit menu -г хар. Menu-niiдоторхи хэсгүүд Image Index–n шинж чанар болон түүнтэй дагалдахүйлдлүүдийг хэвээр хадгалагдаж үлдэнэ.Delphi Application хэвлэхWindows - ийг ашиглагчдын өдөр тутам хийдэг үйлдэл бол хэвлэх юм. Dos -
  • 83. ийн орчинд бодитоор ашиглах хэвлэлтийн боломжуудаар хангадаг. Тухайнпрограмм бүрийг хэвлэхэд Dos программ бүхий л боломжоор хангаж өгчбайдаг.Delphi хүсэлтийг хэвлэхэд хэд хэдэн үе шат дамжина. Үүний тулд та эхлээдVCL -д хэвлэлтэнд бэлтгэж сурах хэрэгтэй. Тэгсэн тохиолдолд автоматаарбүх зүйлийг гүйцэтгэх болно. Үүнээс гадна та тусгай хэвлэх командуудыгэзэмших болно. Хэвлэх команд Box -н доторх зүйлүүдийг судлах хэрэгтэй.Харин дараа нь Delphi хүсэлтийг хэрхэн хэвлэхийг ярилцья.Хэвлэх Dialog BoxesWindows нь таны хүсэлтийг биелүүлэхэд Print & PrintSetup хангаж өгнө.Print командыг хэвлэж эхэлэхэд ашиглана. Харин PrintSetup командыгхэвлэлтийг дүрсэлэхэд ашигладаг.Print Dialog BoxPrint команд нь хэрэглэгч гол Menu -нээс File print командыг сонгоход гарчирдэг юм. Тэгээд OK товчлуурыг дарахад хэвлэж эхэлнэ. Хэрвээ Cancelтовчлуурыг дарахад команд таслагдана.Print dialog бүрэлдэхүүн хэсэг дотор VCL -ийн Print команд гүйцэтгэхердийн аргаар Print dialog -г дуудаж хэвлэх үйдлийг хийж болно. Printкомандыг дуудсаны дараа хэвлэх командыг дагалдаж хэдэн хувь хэвлэх,ямар хэмжээтэй хэвлэх вэ гэсэн бүрэдлэхүүн хэсгүүд дагалдаж гарч ирнэ.Хэвлэх хүсэлт өгсөн тохиолдолд бүх командуудыг хэвлэхэд бэлэн болгожбүх боломжуудыг ханган өгөх хэрэгтэй.PrintDialog PROPERTIES.
  • 84. Print rage болон Print to file цонхны Print команд өгөгдсөн тохиолдолдтүүнийг хаах илүү үйлдэл хийх шаардлагагүй. Жишээ нь: Хэрэв та хэвлэххүсэлт өгсөн тохиолдолд From page –s To page -г хүртэл таны хэрэгтэйгэсэн бүхнийг уншиж хэвлэх болно. ОК товчлуурыг дарахыг мартуузай.Print Setup Dialog BoxХэвлэх командаа өөрчлөх, хуудасны хэмжээ, тоо, боломж зэргийгөөрчлөхөд Print setup –g ашигладаг.Шинээр хэвлэх команд өгч байгаа тохиолдолд, Print командыг ашиглахаасPrintSetup -г ашиглахгүй. Гэвч PrintSetup нь Print командаас хамаагүйхялбар ашиглагддаг. PrintSetup -ийг сонгосноор Print командыг дагалддагбүрэлдэхүүн хэсгүүд бүгд автоматаар гүйцэтгэгдэх болно. PrintSetupдуудаад Cancel товчийг дарвал бүх зүйл зогсох болно. Харин ОК товчийгдарахад хийж гүйцэтгэх ёстой бүхнийг өөрөө гүйцэтгэнэ.procedure TMainForm.FilePrintSetupClick(Sender: TObject);beginPrinterSetupDialog.Execute;end;
  • 85. Хялбар аргаар хэвлэхТа ямар ч төрлийн хүсэлт шаардлага тавьсан, хэдэн зуун ширхэг ч бүгдийгнь хэвлэх боломжтой. Эхлээд хамгийн хялбар аргыг судлаад дараа нь илүүажиллагаатай тооцогдох хэвлэлтийг судална.Form –ийн хэвлэх аргуудХэлбэрийн агуулгыг хэвлэхэд form нь командийг дуудаж хэвлэдэг. Энэ ньзөвхөн хэрэгтэй зүйл л хэвлэгдэнэ. Дагалдах хүрээ зэрэг нь хэвлэгдэхгүй.Та Print Scale цонхыг хянаж байдаг 3 хэлбэрийн хэвлэх командыг сонгожболно.PrintScale PROPERTYOption ТайлбарpoNone Тусгай хэмжээ шаардахгүй шууд хэвлэнэ.PoProportional Дэлгэцэн дээрх хэмжээтэй ижил хэмжээгээр хэвлэнэ.poPrintToFit өгөгдсөн хэвлэх командын хэлбэр, хэмжээг өсгөжхорогдуулна.RichEdit ComponentWindows тэмдэглэлийн хяналтаар орсон бүх ажлыг шууд хангахбүрэлдэхүүн хэсэг бол RichEdit юм. RichEdit команд өгсөн тохиолдолд Printкомандаар дамжиж хэвлэгдэнэ. Энэ хэвлэх команд ажиллаж байхад printmanager цонхыг ашиглаж Caption -г нэг параметр өөрөө дуудна.RichEdit.Print(‘MyApp.exe - readme.txt’);TIP: WindowsAPI нь ShellExecute командаар эхийг хэвлэнэ.Жишээ нь:ShellExecute(Handle, ‘print’, ‘readme.txt’, nil, nil, SW_HIDE);Энэ код нь Notepad ачаалалд Readme текст нэртэй файлыгхэвлэнэ. Дараа нь Notepad руу шилжинэ. Та Notepadпрограммыг үндсэн цонхон дээрээс олж харахгүй учир нь Sw_hide загвар Show параметрд зориулагдсан байдаг.QuickReport –дамжуулан хэвлэхӨгөгдлийн сангийн программууд нь мэдээлэлүүдийг хэвлэхэд QuickReport -ийг ашиглаж болно. Энэ хэсгийн гарчгуудыг бүү хойш нь тавь. Хэвлэх болтийм хүнд даалгавар биш юм. Багахан цаг зав, байршил л шаардах байх.Эхлээд өөрийн хэвлэх гэж буй зүйлийнхээ хэрхэн дугаарлахыг мэдэж байххэрэгтэй хэд хэдэн зүйлүүдийг судлах хэрэгтэй. Дараа нь та тусгай кодийгхайгаарай.Device Context гэж юу вэ?Canvas бол дээр та текст бичиж, шугам татаж зураг зурах зүйлүүдийг хийжболдог. Саnvas –т хамаарах шинж байдлууд, жишээ нь: шулуунуудынтөрлийг сонгоход DC дээр сонгогдсон үзэгийг ашиглана. Үүний нэгэн адилөнгө хэлбэрийг гаргах бийрийг сонгож өнгө хэлбэрийг гаргана. Учир ньwindows -т DC -ийн хязгааралагдмал байдаг. DC -ийн бүх деталуудынталаар та VCL халхавч хэсгээс харж болно. Та хэвлэх canvas -ийгдэлгэцийн canvas дээр таны зурсантай адил хийнэ. Энэ нь canvas -ийнорчинтой төстэй аргаар хэвлэдэг.TPrinter Class ба Хэвлэх АжилгааVCL нь операторыг TPrinter class -аар хангахад тусалдаг. Энэ нь windows-ийн бүх хэвлэлтийг Printer нь шулуун, график, текст болон бусад зурсан
  • 86. объектуудыг хэвлэдэг canvas шинж чанартай байдаг. Энэ бол хялбарханбиш. Та Delpi программуудыг хэвлэхэд таны ашиглаж байгаа жагсаалтандPrinter нэмэгддэг.Printer.BeginDoc;Printer.Canvas.TextOut(20, 20, ‘Hello There!’);Printer.EndDoc;TPrinter PROPERTIES.
  • 87. TPrinter METHODS.Хэрхэн ажиллуулах тухайPrint, Printer Setup -нуудыг аль хэдийг гаргаж аваад байна. Гэхдээ татэднийг үйлдэл хийхэд боломжтой болгох хэрэгтэй. Үүний тулд:1. Гол меню бүрэлдэхүүн дээр 2 удаа товшиж Menu -ийг гаргаж ир.2. Menu designer доторхscratch menu -нээс File printer сонго.3. File printer set up menu -г сонгоод Scratch menu- г хаа.4. Print dialog - ийг байрлуулаад нэрийг нь өөрчил.FilePrintClick METHOD.procedure TMainForm.FilePrintClick(Sender: TObject);varI : Integer;LineHeight : Integer;LinesPerPage : Integer;LineCount : Integer;R : TRect;S : string;begin{ Display the Print dialog. }if PrintDialog.Execute then begin{ Set the title for the printer object. }Printer.Title := ‘ScratchPad – ‘ + OpenDialog.FileName;{ Set the printer font to the same font as the memo. }Printer.Canvas.Font := Memo.Font;{ Determine the line height. Take the Size of the{ font and and use the MulDiv function to calculate{ the line height taking into account the current{ printer resolution. Use the Abs function to get{ the absolute value because the result could be a
  • 88. { negative number. After that add 40% for leading. }LineHeight := Abs(MulDiv(Printer.Canvas.Font.Size,GetDeviceCaps(Printer.Handle, LOGPIXELSY), 72));Inc(LineHeight, (LineHeight * 4) div 10);{ Determine how many lines will fit on a page. Trim{ it back by three lines to leave some bottom margin. }LinesPerPage := (Printer.PageHeight div lineHeight) - 4;{ Start printing on line 4 rather than line 0 to leave{ room for the header and to allow for some top margin. }LineCount := 4;{ Tell Windows were starting and print the header. }Printer.BeginDoc;R.Top := LineHeight;R.Left := 20;R.Right := Printer.PageWidth;R.Bottom := LineHeight * 2;DrawText(Printer.Handle,PChar(OpenDialog.FileName), -1, R, DT_CENTER);{ Loop through all of the lines and print each one. }for I := 0 to Pred(Memo.Lines.Count) do begin{ When we get to the bottom of the page reset the{ line counter, eject the page, and start a new page. }Inc(LineCount);if LineCount = LinesPerPage then beginPrintFooter(R, LineHeight);LineCount := 4;Printer.NewPage;end;{ Get the next string and print it using TextOut }S := Memo.Lines.Strings[I];Printer.Canvas.TextOut(0, LineCount * LineHeight, S);end;{ All done. }PrintFooter(R, LineHeight);Printer.EndDoc;end;end;PrintFooter METHOD.procedure TMainForm.PrintFooter(var R: TRect; LineHeight: Integer);varS : String;beginwith Printer do begin{ Build a string to display the page number. }S := Format(‘Page %d’, [PageNumber]);{ Set up the rectangle where the footer will be drawn. }{ Find the bottom of the page and come up a couple of{ lines. }R.Top := PageHeight - (lineHeight * 2);
  • 89. R.Bottom := R.Top + lineHeight;{ Display the text using DrawText so we can center the{ text with no fuss. }DrawText(Handle, PChar(S), -1, R, DT_CENTER);{ Draw a line across the page just above the `Page X text. }Canvas.MoveTo(0, R.Top - 2);Canvas.LineTo(R.Right, R.Top - 2);end;end;Bitmap –ийг хэвлэхBitmap хэвлэхэд хялбар. Хийх шаардлагатай зүйл бол Bitmap -ийншаардах жишээг шинээр бий болгоод объект руу ачааллаад canvas ийнdra method - ийг ашиглаж хэвлэгч рүү илгээнэ.procedure TForm1.Button1Click(Sender: TObject);varBitmap : TBitmap;beginBitmap := TBitmap.Create;Bitmap.LoadFromFile(‘test.bmp’);Printer.BeginDoc;Printer.Canvas.Draw(20, 20, Bitmap);Printer.EndDoc;Bitmap.Free;end;Cursors –ийг ашиглахКурсорийг ашиглахад хэцүү биш. Гэхдээ та бүхэнд хэрхэн ажиллах үндсэнойлголтыг өгье.Cursor –ийн үндсэн үзүүлэдтүүдЭхлээд та курсорыг ердийн бүрдэл, хэлбэр эсвэл таны бичиг баримтынбүсэд нэвтэрэхэд ашиглана. Хэрвээ та бичиг эх рүү нэвтрэх курсорыгөөрчлөхийг хүсвэл, дэлгэцийн объектийн курсорын шинж чанарыг өөрчлөххэрэгтэй. Дэлгэцийн объект курсорын шинж чанарыг өөрчилж байхдаа такурсорын гүйцэтгэх бүрдэлүүдийг бүрэн хангаж байгаа эсэхийг батлах ньзүйтэй.Курсорын удирдлага нь дэлгэцийн объектийн шаардлагын дагуу ажиллана.Бүх курсорууд дэлгэцийн объектэд курсорын шинж чанарт багтдаг.Курсорын шинж чанар гэдэг нь таны хүсэлтийн дагуу сонгогдохкурсоруудын жагсаалт юм.Дэлгэцийн объектийн курсорын шинж чанарыг ашиглахын тулд ашиглахкурсорынхоо нэрийг курсорын жагсаалтанд бичнэ. Та курсорыг маш олоншалтгаанаар өөрчилж болно. Курсор шаардлагагүй тохиолдолд эсвэлтусгай курсор ашигладаг программ ашиглах үед эсвэл таны эхэд туслахадзэрэгт хэрэгтэй.Cursor –ийн хэрэглэх болон ачааллахХэд хэдэн курсорууд аар хангадаг. Танд сонголт хийхэд чинь зориуланкурсорын хэдэн төрлийг нэмж өгдөг. Үүнийг та хэдийд ч ашиглаж болно.Курсорыг сольдог хамгийн тодорхой үе бол таны бичиж байгаа зүйлийнуртсан байхад.Хэрэглэж байгаа курсороо солихийн өмнө хадгалахад хэрэгтэй яагаадгэвэл та аль курсорыг хэдийд ашиглахаа сайн мэдэхгүй. Хадгалсан
  • 90. курсороо сүүлд нь ашиглахад танд хялбар байх болно. Та өөр хувийнбүрэлдэхүүнээс хамааран курсороо сольж болно. Жишээ нь: зурахпрограммын үед зурах гэж байгаа зүйлээсээ хамаарч зургын хэрэгсэлээсонгосноор курсороо сольж болно.Энэ тохиолдолд та дэлгэцийн объектийн курсорыг солих шаардлагагүй.Учир нь меню, болон бусад дагалдах бүрэлдлүүдийг дагаад курсорөөрчлөгддөг.Хэрэглэгч Cursor –ыг ашиглах ба ачааллахХэрэглэгч курсорыг ачаалаахд цаг их шаардагдана. Дээр хэлсэнчилэнкурсорын шинж чанарт таны текстэн дээр ажиллаж чадах курсоруудынжагсаалт гарч ирдэг. Хэрэглэгчийн шаардаж байгаа курсорыг ашиглахынтулд хэд хэдэн үе шатыг дамжих ёстой.1. Шинэ курсор үүсгээд болгож хадгал.2. Өөрийн программаа болго.3. LoadCursor ашиглаж курсороо ачаал4. Дэлгэцийн объектийн курсорийн шинж чанарыг индексчилэндугаарал5. Дэлгэцийн объектийг ашиглаж байх үед аль ч курсор ачаалагдахболомжтой.ДүгнэлтОдоо чи дээд түвшний Windows -ийн ашиглалт зарим онцлог бүтцийнтухай,түүнийг чи өөрийн программад хэрхэн хэрэгжүүлэх талаар сурсан.Өөрийнзүтгэл чармайлтаар хэрэгтэй ямар ч засал чимэглэлийг хэрэгжүүлнэ.Гэвчтүүнийг сайн ашиглаж чадахгүй. Зарим нэг тохиолдолд хэвлэх нь чухалcomponent -ийг байгуулхад тусалдаг ба тэдгээр хэвлэлтүүд нь гайхмаархялбархан. Бусад үед чи хацуйгаа шамлаад Tprinting class -тай ажилна.Хэдийгээр тийм боловч хэвлэх нь айх зүйл биш.WorkshopWorkshop -ийн шалгах асуултууд нь чиний ойлголтыг баталгаажуулхадтуслах материал ба бэлдсэн материалууд нь чамд дадлага болж чи юусурсан бэ гэдгээ ашиглана. Чи шалгах асуултуудын хариуг Хавсралт АШалгах асуултуудын хариу -с олж чадна.Q&AА: Би toolbar -ийн бүх component -уудаа идвэхгүй болгож чадах уу?Х: Чадна. Toolbar -ийн Enabled property -г False болгоно.А: Би Tcoolbar ба Tcontrolbar бараг адилхан зүйл хийдэг гэжтэмдгэлсэн ба аль нэгийг нь л хэрэглэх ёстой юу?Х: Миний зөвөлгөө бол Tcontrolbar -г ашигласан нь дээр. Олонхувилбарууд нь Microsoft -ийн удирдах бааз COMCTRL32.DDLбайдаг.MDI Form, MDI child formFormstyle
  • 91. MDIchild MDIform Normal StayontopActiveMDIChildMDIChildren[interger]MDIChildCountprocedure TMainForm.Cascade1Click(Sender: TObject);beginCascade;end;procedure TMainForm.Tile1Click(Sender: TObject);beginTile;end;ArrangeIcons;procedure TChild.FormClose(Sender: TObject; var Action: TCloseAction);beginAction := caFree;end;project option forms auto-creat form available formГруппээр нь сонгох ба зөөхShift and ControlDebug хийх
  • 92. Run F9 АжиллуулахParameters ПраметрStep Over F8 Алхам алхамаар ньTrace Into F7 Мөр мөрөөрTrace to Next Source Shift+F7LineRun to Cursor F4 Мөр хүртэл ажиллуулахProgram PauseProgram Reset Ctrl+F2Add Watch at Cursor Ctrl+F5 Харах цонхонд хийхEvaluate/Modify Ctrl+F7Add Breakpoint Мөрийн эхэнд улаан тэмдэглэгээ тавиж зөв ажиллаж байна эсхийг шалганаWin32 - н Component уудTabControl Tabs хавтасны нэрүүд нь TabPosition Хавтасны нэр гарах байрлал TabIndex идвэхтэй хавтасны дугаарPageControl ActivePage Идвэхтэй хуудасны дугаар TabPostion хуудасны нэр гарах байрлал Хуудас нэмэхдээ хулганы баруун товч дээр дарж Бас урд дараагын хуудас руу шилжинэ.InageListRichEdit Lines Word wrapTrack bar Max Min Prequence хэд хувааж тоймлож үзүүлэх хэмжүүр Postion TrickMark хэмжүүр хаан байрлах 2 талдаа 1 талдаа Orientation босоо эсвэл хэвтээг сонгохUpDown Max Min Position Orientation Incerment хэд хэдээр нэмэгдэхийг заанаProgressBar
  • 93. Hotkey Hotkey ямар товч дарадсан авна InvalidKeys авахгүй товчнууд Modifer авах товчнуудAnimate Active идвэхжүүлэх CommonAVI ихэнх Windows ашигладаг дүрсүүд FileName Start frame эхлэх Stop frame төгсөх Repeatition хэд давтах Trancparent нэвт гэрэлтэхListBox :Програмжждын тэмдэгт мөртэй ажиллахад ашиглагдана.Жишээ нь:Select хийж байгаа үйлдэл нь... ListBox компнентийг ашигласан ListBox -ийн events: Items -мөрийн тоо Colums -баганы тоо Extendedselected -нэг нэгээр нь сонголт хийх Multiselected - олон олноор сонголт хийх Parentcolor -эх өнгө Sorted -үсгээ автоматаар эрэмблэнэ.
  • 94. Unit.pas дээр нь дараах загвараар бичинэ:Жишээ: Бүрэн хэмжээний зохиосон бичлэгunit Umain;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; Edit1: TEdit; Label1: TLabel; Button2: TButton; Button3: TButton; procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation
  • 95. {$R *.DFM}procedure TForm1.Button3Click(Sender: TObject);begin close ;end;procedure TForm1.FormCreate(Sender: TObject);begin edit1.Text := ;end;procedure TForm1.Button1Click(Sender: TObject);begin if edit1.text = then begin showmessage (Medeellee oruul.) ; edit1.setfocus ; exit ; end ; listbox1.items.add (edit1.text) ; edit1.text := ; edit1.setfocus ;end;procedure TForm1.Button2Click(Sender: TObject);var i : integer ; b : boolean ;begin b := false ; i := 0 ; while i < listbox1.items.count do if listbox1.Selected [i] then begin listbox1.Items.Delete (i) ; b := true ; end else inc (i) ; if not b then showmessage (ustgah medeellee songo.) ;end;end.
  • 96. Үр дүн ба Debug хийхэд:TListboxTListBox нь TCustomListBox-д байдаг ерөнхий ажлын горимыгхэрэгжүүлдэг. TListBox нь TCustomListBox -с удамшсан олон property-той боловч ямар нэгэн шинэ ажлын горимыг гаргаж чадахгүй. TlistBox ньItem -уудыг сонгох , нэмэх мөн устгадаг жагсаалтанд харуулахадхэрэглэгдэнэ.Column - Олон баганатай ListBox -ийн харагдах баганы тоог заана.Гэхдээ энэ нь зөвхөн horizontial scrollbar -тай тохиолдолд хэрэглэгдэнэ.Өөрөөр хэлбэл , энэ property 0 утгатай байхад ListBox нь зөвхөн нэгбаганатай бөгөөд vertical scrollbar -тай, харин тэгээс их утгатай үедтухайн утганд харгалзах тоотой тэнцүү баганатай , horizontial scrollbar -тай байна гэсэн үг юм.ExtendedSelect - ListBox дахь Item-уудыг сонгох зориулалттай бөгөөдMultiSelect property-той хамт ажиллана.ExtendedSelect нь True , MultiSelect нь мөн True үед эхний тэмдэглэсэнItem-аас дараагийн идэвхжүүлсэн Item-ийн хоорондох бүх Item-уудыгтэмдэглэнэ. Мөн хулгана, SHIFT товч ашиглан дэс дараалан байрласанItem -уудыг тэмдэглэж болно. Хэрэв дараалан байрлаагүй Item-уудыгтэмдэглэх шаардлагатай бол CTRL товч ашиглана.
  • 97. ExtendedSelect нь False , MultiSelect нь True үед SHIFT, CTRL-гүйгээр хэдхэдэн Item-уудыг тэмдэглэж болно. Гэвч нэг үйлдлээр Item -уудыгтэмдэглэж чадахгүй.Харин MultiSelect нь False үед ExtendedSelect ямар ч нөлөөгүй бөгөөдItem -ууд тэмдэглэгдэхгүй.SelCount - MultiSelect True байхад ListBox дахь тэмдэглэгдсэн Item -уудын тоог олоход хэрэглэнэ. MultiSelect нь False үед SelCount нь -1утгатай байна.Sorted - True үед ListBox дахь Item-уудыг цагаан толгойн үсгийндараалллаар эрэмбэлнэ. Энэ үед ListBox -д шинээр нэмэгдэж байгааItem-ууд нь мөн эрэмбэлэгдэж орно. False байхад эрэмбэлэхгүй байгаабайдлаар нь харуулна.Clear – ListBox-д байгаа бүх Item-уудыг устгахад хэрэглэнэ. Хэдийгээрстандарт ListBox-ийн Item-ууд нь String төрөлтэй боловч ListBox-ийн Clearmethod-ийг хэрэглэх нь Items property-ийн Clear method-ыг хэрэглэснээсилүү дээр байдаг.ComboBox Items -мөрийн тооGroupBoxRadioGroup Items -мөрийн тоо Columns -баганы тооActionListCheckListBox CheckListBox нь ерөнхийдөө ListBox-той адил боловч элементүүд ньcheck box-той байдгаараа түүнээс ялгагдана. Хэрэглэгч түүнээс хэдэн чitem сонгож болно. Өөртөө scrollbar-тай. Properties:
  • 98. • • AllowGrayed - Энэ нь үнэн утгатай байвал checkbox нь checked, unchecked, and grayed гэсэн 3 төлөвийн аль нэгэнд байж болно. Үгүй бол checked, эсвэл unchecked.• • Checked - Аль item тэмдэглэгдсэн байгааг заана.• • Columns - Баганы тоог заана.• • Flat - CheckListBox нь 3 хэмжээст байдлаар харагдах эсэхийг заана.• • IntegralHeight - CheckListbox нь гүйцэд харагдахгүй мөр агуулах эсэх• • ItemEnabled - cbGrayed төлөвийг ашиглалгүйгээр тухайн item-ийг идэвхитэй буюу идэвхигүй болгоно.• • ItemHeight - style property нь OwnerDrawFixed гэсэн утгатай байхад үүнийг ашиглан мөрийн өндрийг зааж өгч болно.• • ItemIndex - Сонгогдсон item-ийн дугаарыг заана.• • SelCount - Сонгогдсон item-үүдийн тоо.• • Selected - Тухайн item сонгогдсон эсэх.• • Sorted - CheckListBox-ийн item-үүд нь цагаан толгойн дарааллаар эрэмбэлэгдсэн эсэх.• • State - Тухайн item сонгогдсон, сонгогдоогүй, идэвхгүй төлөвийн алинд байгааг заана.• • Style - Тэмдэгт мөр агуулдаг стандарт CheckListBox юм уу, стандарт бус юм уу гэдгийг заана. Events:• • OnClickCheck -Аль нэг item-ийн checkbox-ийг сонгоход дуудагдана.• • OnDrawItem- style property нь OwnerDrawFixed буюу OwnerDrawVariable байхад ашиглаж болно.• • OnMeasureItem- style property нь зөвхөн OwnerDrawVariable байхад ашиглаж болно.TcheckBoxЭнэ зураг дээр улаанаар тойруулан үзүүлсэн icon бол Стандарткомпонент CheckBox юм.Энэ товч нь хянах хайрцаг дарагдсан эсвэл дарагдаагүй байдгийгилэрхийлнэ.Хэрэглэгчид сонголтуудыг A TCheckBox componentолгоно.Хэрэглэгч сонголт хийж хайрцгийг хянаж болно эсвэл сонгохгүйбайж болдог.TCheckBox properties
  • 99. AllowGrayed буюу Саарал төлөвт хянах хайрцаг нь байж болохыгтодорхойлно.Delphi –ийн бичлэг нь:property AllowGrayed: Boolean; хэлбэртэй байдаг.Хэрэв энэ нь үнэнутгатай байвал check box нь checked, unchecked, and grayed гэсэн 3боломжит төлөвт байдаг.Хэрэв худал утгатай байвал checked andunchecked гэсэн 2 төлөвтэй байдаг.Доорхи жишээнд программыг ажиллуулахад эхлээд check box-ийгшалгана.Хэрэглэгч үүн дээр дарахад the check box -нь uncheckedбайна.Дахин дарахад саарал төлөвт орно.procedure TForm1.FormCreate(Sender: TObject);begin CheckBox1.AllowGrayed := True; CheckBox1.State := cbChecked;end;-Checked төлөв:check box нь checked төлөвт байгааг заадаг.Delphi syntax:property Checked: Boolean;C++ syntax:__property bool Checked = {read=GetChecked, write=SetChecked,stored=IsCheckedStored, default=0};Хэрэв AllowGrayed property нь үнэн утгатай байвал та State property-ийгилүү өргөн хэрэглэх боломжтой.TCheckBox events:OnEnter eventDelphi syntax:property OnEnter: TNotifyEvent;C++ syntax:__property Classes::TNotifyEvent OnEnter = {read=FOnEnter,write=FOnEnter};OnEnter-ийг удирдлагыг идэвхтэй болгон зарим онцгой процесстохиолдоход ашигладаг.Энэ event нь 2 application, form-ийн хоорондшилжихэд эсвэл удирдлагаа агуулсан application зэрэгт хэрэглэгддэггүй.Хэрэв тусдаа 2 агуулгатай удирдлагын хооронд шилжих тохиолдолд энэнь агуулсан удирлагын өмнөх удирлагад тохиолдоно.OnExit event үүнтэй адил байдаг.
  • 100. Жишээлбэл:ОК товч, group box-нь 3 radio button-тай form байдаг гэжүзье.Тэгээд аль нэг radio button дээр нь дарахад OnExit болдог баOnEnter event –нь зайлшгүй дагаж хамт байдаг ба заавал дарагддагбайна.ОК дээр дарахад OnExit event болох ба заавал нэг нэгтэйгээ хамтбайдаг.GRAPHICS БА MULTIMEDIA ПРОГРАМЧЛАЛ• Хялбар замаар Graphics хийх;• Device context and Tcanvas;• GDI обьектуудo Pens, Brushes, Fonts;o Bitmaps ба Palette;o Region огтлох;o Teкст зурах;o Bitmap зурах;o Memory Bitmap үүсгэх;o Memory Bitmap –ийг хадгалах;• Multimedia програмчлахo Windows API aшиглан Wave Audio тоглуулах;o TmediaPlayer компонент;o MediaPlayer Properties , Methods ба Eventso Wave Audioo Гаралтын volume –г тохируулах;o Wave Audio –г бичиж авах;• MIDI Audio;• CD Audio;• AVI Video;Graphics and Multimedia нь програмын дээд түвшнийг төлөөлдөг.Өнөөдрийн энэ сэдэвт та нар Graphics ба Multimedia –г Delphi хэл дээрпрограмчлах тухай үзэж танилцана. Graphics –ийг програмчлахын тулдямар ч гэсэн TCanvas TBitmap классуудын тухай нилээд хэдэн зүйлийгмэдэх хэрэгтэй. Би та нарт Delphi хэл дээр Graphics –г үзүүлэх хялбараргаас эхэлье. Үүний дараа та нар Windows Graphics Device Interface(GDI)–ийн тухай мөн түүний компонентуудынх тухай мэдэж, хийжсурна. Одоо бид олон төрлийн хүрээ, хэлбэр дүрс зурах тогтсон дэгжурмын тухай мөн Bitmap үзүүлэх олон аргыг сурна. Харин Multimediaпрограмчлах бүлгийн хэсэгт хэрхэн Windows API -аар дуут файлтоглуулах тухай үзнэ. Мөн та нар долгионт Audio тоглуулах, MIDIболон AVI video тоглуулахад TMediaPlayer класс хэрхэн хэрэглэгдэхтухай сурч мэдэх болно. Иймээс эхэлцгээе.TextRect Clipping rectangle дотор текст бичихЭдгээр properties ба methods нь Windows Device context –ийн үүргийнбага хэсгийг төлөөлдөг. Гэхдээ та нарт хэлэхэд Graphics -тай ажиллажбайхад эдгээр properties ба methods 80 хувийн үүргийг гүйцэтгэдэг.
  • 101. Хэдийгээр ийм боловч би TCanvas –ийн тухай ярихаасаа өмнөGraphic’s object –ийг яаж Windows програмчлалд хэрэглэх тухай яриххэрэгтэй болов уу.GDI objectsGDI –д олон төрлийн обьектууд байдаг ба эдгээр нь хэрхэн devicecontext функцийг тодорхойлдог бол? GDI –ийн энгийн хэрэглэгддэгобьектууд нь Pens, Brushes, Fonts. Бусад обьектуудад Palettes,Bitmaps, regions багтдаг. Эхлээд Pens, Brushes, Fonts –ийг үзээд дараань complex object -руу орцгооё.Pens, Brushes, ба FontsPens, Brushes, Fonts нь TCanvas класст яаж хэрэглэгдэж байгааг авчүзье.PensPen нь обьектоор тодорхойлогдсон ба шугам зурахад хэрэглэгдэнэ.Шугам нь шулуун байх ба нэг цэгээс эхлэлтэй нэг цэгт төгсгөлтэй эсвэлтэгш өнцөгт, эллипс, олон өнцөгтийн хүрээ байна. TCanvas классынPen property –аар pen –ээ оруулах ба энэ нь TPen классын жишээ юм.Хүснэгт 12.3 TPen-ийн property- нуудыг жагсаав.Хүснэгт 12.3 TPen properties.Эдгээр шинж чанаруудыг та хүссэнээрээ тохируулна. Доорх жишээндулаан өнгөөр Dashed line-р харуулав.Canvas.Pen.Color:=clRed;Canvas.Pen.Style:=psDash;Canvas.MoveTo(20,20);Canvas.LineTo(120,20);Энэ кодчилолыг формынхаа товчинд OnClick handler дээр туршижүзээрэй. Таныг товчин дээрээ дарахад зурагдах шулуун нь form дээргарах болно.Тэмдэглэл : Энэ сэдвийн бүх жишээнүүдийг ийм байдлаар туршижүзсэн байх хэрэгтэй. Хэрэв та нар дээрх жишээг туршиж үзсэн бол form–оо дээш нь зөөхөд таны зурсан шулуун арилах болно. Иймээс үүнийгбайнгын болгохыг хүсвэл form –ийн OnPaint event –д дээр шулуунзурдаг кодоо бичиж болно. OnPaint event нь form –ийн харагдахбайдал, байршил өөрчлөгдхөд үүсээдэг.Dashed ба Dotted pen style зөвхөн pen width –ийн утга 1 байх үедхэрэглэгдэнэ. PsClear pen style нь line –аа устгахад хэрэглэгдэнэ.Тэгэхдээ энэ line нь Windows GDI draw –ийн обьект болох тэгш өнцөгт,эллипс, олон өнцөгтүүдийн эргэн тойрны хүрээг хэлж байгаа юм.Зөвлөмж: TPen –ийн олон property -нуудыг form дээрээ Shape
  • 102. component ашиглан туршиж үзээрэй. Мөн Shape –ийнхаа pen -ийнproperty –г өөрчилж сайжруулаарай. TPen классын Mode шинж чанарнь effect -үүдийн гаднах харагдах байдалд онцгой хэрэгтэй байдаг.BrushesЭнэ нь Graphical Shape -ийн дотрох хэсгийг буюу filled area –гтөлөөлдөг. Хэрвээ та нар эллипс, тэгш өнцөгт, олон өнцөгтүүдийгзурсан бол Brush -г ашиглан дүүргэж болно. Ихэвчлэн энэ үед Brush ньзөвхөн өнгө байдаггүй Bitmap эсвэл pattern –ийг агуулсан байдаг. Brushнь TCanvas class -д байдаг ба нэг property юм. Brush –аар харагдаххэлбэрийг өөрчилж туршиж үзээрэй. Brush нь Tbrush class -ийн нэгобъект юм. TPen, TBrush class -д бичиж тэмдэглэх event, methodерөөсөө байдаггүй. Хүснэгт 12.4 –т шинж чанаруудыг жагсааж бичив.Property ТайлбарХүснэгт12.4 TPen properties.Доорх жишээнд форм дээрээ дугуй зураад 45 градусын налуутайзураасаар дотрохыг нь будах хэлбэрийг ашиглалаа.Canvas.Brush.Color:=clBlue;Canvas.Brush.Style:=bsDiagCross;Canvas.Ellipse(20,20,220,220);Brush -ийн хэв маягийг ашиглаж байхад түүний Color property шугмын
  • 103. өнгийг өөрчилдөг ба энэ шугам нь зургийнх юм. Зарим нэг VCLautomatically forces зэрэгт background mode -ийг transparent болгодог.Гэхдээ энэ нь pattern fill үед болно. Background mode –ийг transparentболгоно гэдэг нь дүрсийн дэвсгэрийг цонхны дэвсгэр өнгө, хэв маягхэлбэртэй адил болгохыг хэлж байгаа юм.Өмнөхөөс арай өөрөөр харагдуулъя. Өөрөөр хэлбэл дугуй дүрсийндэвсгэр өнгийг формынхтай адил болгож . Энийг grayscale -дээр харахтийм амар биш гэдгийг мэдэж байна. Хэрэв background –аа тус тусд ньтодорхойлохыг хүсвэл VCL circumvent хэрэгтэй ба API –руу шууд очно.Энд хэрэв цагаан дэвсгэр дээр хөхөөр зураас татах кодыг үзүүлэв :Canvas.Brush.Color:=clBlue;Canvas.Brush.Style :=bsdiagCross;SetBkMode(Canvas.handle,OPAQUE);SetBkColor(Canvas.Handle, clWhite);Canvas.Ellipse(20,20,220,220);Одоо дэвсгэр өнгө цагаан болохыг Figure12.2 т дээрх кодчилолоордугуй дүрсийг харуулав.Brush -ийн өөр сонирхолтой өвөрмөц онцлог нь Bitmap backgroundoption юм. Доор бичигдэх кодчилол нь bitmap brush -ийн тухай ихзүйлийг хэлж өгнө:Canvas.Brush.Bitmap:=TBitmap.Greate;Canvas.Brush.Bitmap.LoadFromFile(‘bkgnd.bmp’);Canvas.Ellipse(20,20,220,220);Canvas.brush.Bitmap.Free;Эхний мөрөнд TBitmap обьектийн үүсэж буйг Brush -ийн Bitmapproperty –руу гэж тодорхойлж байна. Bitmap property нь утгаа аваагүйүүсэж байгаа маш өвөрмөц байна. Хоёр дах мөрөнд bitmap -аафайлаас зөөж байна. Гурав дах мөрөнд эллипс зурж байна. Энэмөрний дараа эллипс зурагдсан байх учраас Brush property устгагдажбайна. Энэ үйлдэл зайлшгүй чухал юм. Учир нь VCL танд үүнийг хийжөгөхгүй. Хэрвээ brush property устгах нь бүтэлгүй болбол таныпрограмд санах ой хүрэхгүй болох магадлалтай. Доорх зурагт Bitmapbrush -аар эллипс зурсныг харуулав. Танд зарим үед заавал hollow
  • 104. Brush хэрэг болно. Үүгээр background -аа харуулах болно. Hollow Brush-аа үүсгээд түүнийхээ brush style д зөвхөн bsClear гэж өгнө. Одообүгдээрээ өмнөх жишээгээ авч түүн дээрээ 2 дахь дугуйгаа дотор ньнэмж hollow brush aшиглая.procedure TForm1.Button1Click(Sender: TObject);beginCanvas.Pen.Width:=1;Canvas.Brush.Bitmap:=TBitmap.Create;Canvas.Brush.Bitmap.LoadFromFile(bkgnd.bmp);Canvas.Ellipse(20,20,220,220);Canvas.Brush.Style:=bsClear;Canvas.Pen.Width:=5;Canvas.Ellipse(70,70,170,170);Canvas.brush.Bitmap.Free;end;Хэрвээ шууд API руу очвол та өөр зүйлүүдийг хийх боломжтой болно.Хэдийгээр ийм боловч VCL Brush class –т ихэвчлэн эдгээрийггүйцэтгэдэг.FontsЭнд ямар нэгэн шинэ зүйл байхгүй. Fonts нь TCanvas class –тайхэрэглэдэг ба Tcanvas -ийн Fonts -оос ялгаагүй форм эсвэл бусадкомпонентуудад хэрэглэгддэг. TCanvas –ийн Font property нь бусадкомпонентуудын Font property -тай ижил байдаг. Canvas -т font -ийгсолихдоо зөвхөн үүнийг хийгдэг:Canvas.Font.Name:=’Courlier New’;Canvas.Font.Size:=14;Canvas.Font.Style:=Canvas.Font.Style+[fsBold];Canvas.TextOut(20,20, ‘ Testing’);Байна. Дараа бид текст зурах хэсэг дэх fonts нь юу хийдэг болохыг авчүзье.Bitmaps ба Palette
  • 105. Ихэнхдээ bitmaps, palettes –ууд нь хамтдаа явдаг. TBitmap class -ийгхэрэглэж байх үед Bitmap ачаалах ба дүрслэл хийхэд хялбар байдаг.Та нар хэдийнээ VIII бүлэгийн хичээл дээр Jumping Jack програм дахьTBitmap –ийн үйл ажиллагааг харсан. TBitmap class нэлээд хэд хэдэннөхцөл байдалд өргөн хэрэглэгддэг. Дараагийн бүлэгт bitmaps зурахболон Memory Bitmaps –ийн талаар ярих үед зарим нөхцөл байдлыгхарах болно. TBitmap class нь нэг цогц учраас би method, propertyбүрийг тайлбарлаагүй болно. Palette –ийн чухал ач холбогдлыгтайлбарлахаар жишээ авч үзүүллээ. OnPaint event handler дээркодчилолыг эсвэл button click event дээр хэрэглэ.procedure TForm1.Button1Click(Sender: TObject);VarBitmap :TBitmap;beginBitmap:=Tbitmap.Create;{ Bitmap.IgnorePalette:=True;}Bitmap.LoadFromFile(c:co.bmp);Canvas.Draw(0,0,Bitmap);Bitmap.Free;End;Програм ажиллуулахад та гоё Bitmap –ийг формаасаа харах болно.Эдгээр мөрнүүд ойлгомжтой тул тайлбаргүй. Харин 4 дах мөрөнд VCL–ийн Palette -ийн мэдээллийг татгалзаарай. Тэгээд дахин програмааажиллуулаарай. Ингэхэд bitmap-ийн өнгө бүгд буруу худал болно.(хэрвээ video adapter –ийнхаа display –ийг more than 256 Colors гэжтохируулбал та энэ үр нөлөөг анзаарч чадахгүй. ) Яагаад гэвэл paletteaшиглаж чадахгүй. Харин palette bitmap -ийнхаа зөв өнгөнүүдийгpalette system -д найдвартай хувиарлаж чаддаг. Bitmap, Paletteобьектууд нь Graphics боловсруулалтад чухал үүрэгтэй оролцдогбайна.Clipping RegionsRegions нь Canvas –ийн дэлгэцэнд зурах хэсгийг хянаж байдаг мужюм. TCanvas class –д ClipRect property байдаг. Харин энэ нь зөвхөн
  • 106. уншдаг. Clipping Regions-ийг өөрчлөхөд Windows API –г хэрэглэххэрэгтэй. Одоо өмнөх жишээгээ авч хэрхэн Clipping Regions work –дбага зэрэг зураг хавсаргаж түүнийгээ өөрчилж сайжруулахыг үзье.procedure TForm1.Button1Click(Sender: TObject);VarBitmap: TBitmap;Rgn: HRGN;beginBitmap:=Tbitmap.Create;Bitmap.LoadFromFile(c:co.bmp);Rgn:=CreateRectRgn(100,50,250,250);SelectClipRgn(Canvas.Handle ,Rgn);Canvas.Draw(0,0,Bitmap);Bitmap.Free;End;Одоо програмаа ажиллуулахад та зөвхөн Bitmap -ийн харагдаж байгаахэмжээг харах болно. SelectClipRgn функц нь Canvas Clipping Region(хайчлах муж) –ийг тэгш өнцөгттэй адилтгаж координатыг100,50,250,250 гэж тогтоодог. Өмнө нь bitmap -ийг хөдөлгөөнгүйбайрлалд зурсан бол одоо зөвхөн Bitmap -ийн Clipping Region –оорхэмжээг нь тодорхойлсон нь харагдаж байна. Clipping Region –аасгаднахыг эс зөвшөөрсөн байна. Өмнөх жишээгээ авч олон сонирхолтойзүйл хийж өөрчиллөө. Тэгш өнцөгт Region үүсгэж байгаа мөрийг авчоронд нь доорх мөрийг тавилаа.Rgn:=CreateEllipticRgn(30,30,170,170);
  • 107. Одоо дахин програмаа ачааллаарай. Энэ үед Bitmap circular region -аар хязгаарлагдана.За одоо region –ний өөр нэг төрлийг авъя:ConstPoints: array [0..3] of Point = ((X:80,Y:0) ,(X:0,Y:80), (X:80,Y:160),(X:160,Y:80));VarBitmap: TBitmap;Rgn: HRGN;beginBitmap:=Tbitmap.Create;Bitmap.LoadFromFile(‘c:co.bmp’);Rgn:=CreatePolygonRgn(Points,4,ALTERNATE);SelectClipRgn(Canvas.Handle ,Rgn);Canvas.Draw(0,0,Bitmap);Bitmap.Free;EndЭнэ үед та олон өнцөгтийн region хэрэглэж region үүсгэж буй цэгүүдээрмассив тодорхойлнсон байна. CreatePolygonRgn функц нь цэгүүдийнRegion form цувааг үүсгэж байна. Үүн шиг хүссэнээрээ олон цэгүүдийгхэрэглэж болно. Төгсгөлийнх нь хаагдах цэгийг онцгойлон зааж болохгүйучир нь region автоматаар өөрөө эхлэлийн цэг төгсгөлийн цэгийг хооронднь холбож төгсгөдөг. Дахин програмаа ажиллуулж ямар үр дүн өгөхийгхар.Тэмдэглэл: Энд бичсэн кодчилолын хэсэгт хэрхэн массивын анхны утгыгтогтоохыг харуулав. Кодчилол:ConstPoints: array [0..3] of Point=((X:80,Y:0),(X:0,Y:80),(X:80,Y:160),(X:160,Y:80));Энд Tpoint массивын хязгаарыг тогтоож анхны өгөгдлөөр хангаж байна.Tpoint –д 2 талбар байдаг. X ба Y гэсэн. үүнд fieldname буюу талбарыннэрийг жагсааж тодорхойлох цэгээр өгөгдлийг нь тогтоож өгөх . Жишээнь:(X:80) Мөн X ба Y-ийн өгөгдлөөр хангагдсан биеийг хос хосоор нь
  • 108. нийлүүлж бичнэ. Үүнийг 4 удаа бичсэн. Яагаад гэвэл массивт 4 элементбайна. Массивыг зарлаж анхны утга тогтоохдоо зөвхөн ийм байдлаарбичнэ. Та region –ийг дандаа хэрэглэхгүй ч гэсэн танд хэрэгтэй үед үнэлжбаршгүй чухал болно. Зураг боловсруулалтанд шаардлагатай зүйлүүдийгхийж гүйцэтгэхэд хэрэг болно.Зурах үндсэн ажиллагааӨмнө нь та номноос графикийн зарим үндсэн хэв маягтай тулгарч байсанбайх. Үүгээрээ та Rectangle method нь талбай ба тэгш өнцөгт зурахадхэрэглэгддэг гэдгийг, харин Ellipse method нь дугуй ба зуйван дүрсзурахад,MoveTo ба LineTo -ээр хүрээ зурахдаа хэрэглэдгийг мэдсэн байгаа байх.Мөн Arc method нум зурахад, Pie method pie-shaped objects зурахадхэрэглэгддэг. Энэ бүгд чухамдаа үндсэн ойлголтууд юм.Teкст зурахDrawing text хийж сурах нь хэцүү дадлага юм. Нэмж хэлэхэд үүнд нилээдхэдэн гоё өвөрмөц онцлогууд байдаг . Эдгээрийн талаар та нар мэдэжавах хэрэгтэй .TextOut ба TextRect функцуудTextOut method canvas дээр бичих үндсэн арга болж өгдөг. Үүнд тийм чхэцүү юм байхгүй. Та нар зөвхөн X ба Y –ийнхаа байрлалыг зааж өгчхарагдах текстээ жишээн дээрхтэй ижил бичиж өгнө:procedure TForm1.Button1Click(Sender: TObject);beginCanvas.TextOut(20,20, www.csms.edu.mn/cheri);End;Энэ нь формын string –ийг 20,20 байрлалд гаргана. X ба Yнь гарахтекстийнхээ зүүн дээд булангаас нь байрлуулдаг. Үүнийг туршижүзээрэй.procedure TForm1.Button1Click(Sender: TObject);beginCanvas.TextOut(20,20, www.csms.edu.mn/cheri);Canvas.MoveTo(20,20);Canvas.LineTo(100,20);End;
  • 109. Энэ кодчилол текстээ 20, 20 байрлалд үзүүлж, мөн шугам 100, 20 хүртэлзурж байна. Шугам нь текстийнхаа оройноос хөндлөнгөөр зурагдсан.TextRect method нь танд clipping rectangle -дээ текст нэмж харуулахболомжийг олгодог. Энэ method -ийг хэрэглэж байх үедээ текстээ заавалтодорхой хил хязгаар дотор нь багтаах хэрэгтэй. Хэрэв хязгаараас илүүгарах юм бол хайчилдаг. Доорх жишээнд 100 -аас илүү гарсныг үзүүлжбаталж байна.Зөвлөгөө: Хэрэв текстээ tab төгсгөлтэй бичвэл Windows API функцTabbedTextOut-г хараарай.TextBackgroundСаарал форм дээр цагаан background –тай байсан нь сэтгэл татахгүйбайна. Text background -ийг цагаанаар тогтоосон brush -аас олж авсан. Угасуудлыг шийдэх 2 арга зам байна. Эхнийх нь canvas brush -ийн өнгийгсолих, дараагийнх нь text background –г transparent хийх. Text background–ийг өөрчлөх нь хялбар байна. Тэгэхдээ нэг асуулт байна. Ямар өнгөөртекстийнхаа дэвсгэр өнгийг болгохоо мэдэж байна уу? Энэ нөхцөлдтекстийнхаа дэвсгэр өнгийг формынхтай ижил болгов. Үүний тулд:Canvas.Brush.Color:=Color;Гэж хийнэ. Энэ кодчилол нь олон нөхцөл байдалд ажиллана. Зарим үедтанд олон контрол байна. Харин та зөвхөн text transparent -ийнхааbackground -ийг өөрчлөх юм бол хялбар болно. Кодчилол нь ямар байхыгхаруулъя:VarOldStyle: TbrushStyle;BeginOldStyle:=Canvas.Brush.Style;Canvas.Brush.Style:=bsClear;Canvas.textOut(20,20, ‘www.csms.edu.mn/cheri’);Canvas.brush.Style:=OldStyle;EndЭхлээд одоогийн байгаа brush style -аа хадгална. Дараа нь brush style -ийгtransparent дээр bsClear гэж тогтоож өгнө. Тэгээд текстээ харуулсныхаа
  • 110. дараа Brush style -ийг эргээд урд нь ямар стиль байсныг тавилаа. Татекстээ бичиж өгчихөөд өмнөх style -аа хадгалсан хэлбэрээр нь дахинтогтоож өгнө. Энэ нь хуучин байсан brush style -ийг цаашид байх ньзүгээргэж бодвол дахин тогтоож болохыг харуулав. Transparent backgroundхэрэглэх үед бас нэг өөр давуу тал бий. Энэ нь та хэсэг текстээ bitmapbackground дээр гаргах боломжтой боллоо гэсэн үг. Харин энэ үед solidдэвсгэр хэрэглэж болохгүй. Кодчилол нь зургийн хамт (factory.bmp file ньBorland Shared Files 56 Color директоороор олдоно.)procedure TForm1.Button1Click(Sender: TObject);VarOldStyle: TbrushStyle;Bitmap:TBitmap;BeginBitmap:=Tbitmap.Create;Bitmap.LoadFromFile(‘factory.bmp’);Canvas.Draw(0,0, Bitmap);Canvas.Font.Name:=’Arial Bold’;Canvas.Font.Size:=13;Oldstyle:=Canvas.Brush.Style;Canvas.Brush.Style:=bsClear;Canvas.TextOut(20,5,’Transparent background’);Canvas.brush.Style:=OldStyle;Canvas.TextOut(20,30,’solid background’);Bitmap.Free;end;Энэ код нь форм дээр bitmap зурна. Дараа нь текст формд зураг нь дээрtransparent background –аар бичигдэнэ. Үр дүнг харж байхад backgroundtransparent нь танд таалагдана. Мөн transparent background текстэндзурагхавсаргана. Үүнийг уг номны XIII бүлэгт “Owner Drawn Status panels”хэсэгтүзнэ.Draw Text функцWindows API DrawText функц нь canvas дээр TextOut -аас илүү өргөнболомжтой юм. TCanvas class -д DrawText method байдаггүй учраасDrawText –ийг хэрэглэхдээ шууд дуудна. Эхлээд DrawText -ийн жишээгхараад дараа нь энэ функцын тухай авч үзье.
  • 111. VarR:TRect;beginR:=Rect(20,20,280,80);Canvas.Rectangle(20,20,280,80);DrawText(Canvas.Handle,’An example of drawetext.’,-1,R,DT_SINGLELINE or DT_VCENTER DT_CENTER);end;Эхлээд Rect -ийг windows API Rect функцаар анхны утга тогтоосоонбайна.Үүний дараах мөр нь Canvas дээр rectangle буюу тэгш өнцөгтийг зуржбайна. Ингэхдээ тэгш өнцөгтийн түүн дээр зурагдах хэмжээг нь зааж өгнө.Сүүлийн мөрөнд текст бичихдээ Drawtext функцыг дуудан бичиж байна.Харин одоо энэ функцынхээ хоорондоо ялгаатай параметрүүдийг нь авчүзье.• Эхний параметр нь тухайн зургаа буюу жишээн дээрх тэгш өнцөгтөөюун дээр зурахаа зааж өгнө.• Хоёрдах параметрт string утга авч харагдах текстээ бичиж өгнө.• Гуравдах параметрт зурагдах хэсгийнх тоог зааж өгнө. –1 утгатайбайвал энэ нь string-ийг бүтэнээр нь гаргана.• Drawtext -ийн 4 дөх параметр TRect хувьсагчийг авна. Яагаад гэвэлзарим Drawtext -ийн боловсруулалт тэгш өнцөгтийг хийхдээөөрчилдөг учираас энэ параметр хувьсагч авна.• DrawText хэрхэн ажиллахыг энэ параметрт бичнэ. Параметр ньтекстээ бичих үед хэрэглэгдэх flag-ийг заана. Энэ жишээндDT_SINGLELINE, DT_VCENTER, DT_CENTER flag-ийг хэрэглэсэнбайна. Энэ flags нь текстийг дан шугамаар, хөндлөнгөөр нь голлуулжгаргахыг илэрхийлж байгаа юм. Drawtext -д бараг 20 flags байдаг батэдгээрийг тус тусд нь тодорхойлж болно. Би тэр болгоныгтайлбарламааргүй байна учир нь Win 32 API –ийн online help -дгүйцэт жагсааж бичсэн байдаг .Өмнөх жишээндээ Drawtext функцдээ текстээ голлуулж Horizontally,Vertically, both зэргээс нэгийг нь сонгон авсан. Та яг одоо энэ функцын ачхолбогдлыг ухаарахгүй байж магадгүй. Гэвч та хэрвээ owner drawncomponents хийж эхлэхээр эсвэл own graphical compoment -aa бичижэхлэхээрээ хэрэгцээг нь мэдрэх болно.procedure TForm1.Button1Click(Sender: TObject);VarR: TRect;beginR:=Rect(20,100,120,150);DrawText(Canvas.Handle,This text is too long.,-1, R,DT_END_ELLIPSIS);end;
  • 112. Дээрх код ажиллахад үүсэх үр дүнд текст ингэж харагдана.Хэрвээ та тэгш өнцөгт дотор текстээ багтахгүй урт гэж мэдвэл flag -ийгхэрэглэж чадах боллоо. DT_CALCRECT flag нь текстийн багтаахадхэрэглэх өндрийг боддог. Энэ flag –ийг хэрэглэж байхад харин текстээбичиж өгөхгүй . Windows текстийг багтаахад хэр зэрэг өндөртэй тэгшөнцөгт байхыг хэлж өгнө. Тэгээд Windows багтах өндрөөр нь тэгшөнцөгтийн зүүнээс эхлэн өөрчилж гүйцэтгэдэг байна. Энэ flag олон мөртекстийг бичихэд маш чухал ач холбогдолтой байдаг. Доорх жишээндwindows -оос текстээ багтаах тэгш өнцөгтийнхөө өндрийг асууж, тэрөндрөөр нь тэгш өнцөгтөө зураад дээр нь текстээ бичиж байгаакодчилолыг бичив.procedure TForm1.Button1Click(Sender: TObject);VarR: TRect;S: string;beginR:=Rect(20,150,150,200);S:=This is very long string which will +run into multiple lines of text;DrawText(Canvas.Handle, Pchar(s),-1,R,DT_CALCRECT orDT_WORDBREAK);Canvas.Brush.Style:=bsSolid;Canvas.Rectangle(R.Left,R.Top,R.Right,R.Bottom);Canvas.Brush.Style:=bsClear;DrawText(Canvas.Handle, Pchar(s),-1,R, DT_WORDBREAK);end;DrawText -ийн 2 дах параметр string биш текст параметр болохоор
  • 113. массивын заагчийг шаарддаг учираас Pchar(s) гэж бичсэн байна.Тэмдэглэл: Хэрэв та Delphi 1.0 –ийг ашиглаж байгаа бол String –г Pcharлуу болгохдоо StrPCopy функцыг хэрэглээрэй.Жишээ нь:VarTemp: array [0..3]of Char;R : TRect;S : stringbeginDrawText(Canvas.Handle, StrPCopy(Temp,S), -1, R,DT_CALCRECT orDT_WORDBREAK);Харин Delphi 1.0 –ээс дээших хувилбаруудад бол Pchar –г өмнөхжишээтэйадил хэрэглээрэй . Энэ кодчилолоо формынхоо OnPaint event дээртавиадпрограмаа ажиллуулаарай. Мөн текстийнхаа уртыг өөрчлөөд үзээрэй.Ингэхэд энэ нь ямар ч асуудалгүй та хичнээн ихийг нэмж бичсэн ч тэгшөнцөгт таны текстийн гаднаар хүрээлэгдсэн байх болно.Зөвлөгөө: Хэрэв танд текст бичих олон cонголт хэрэгтэй байгаа болDrawTextEx функцыг хэрэглээрэй. Win32API-ийн online help –смэдээллийгаваарай.Тэмдэглэл: DrawText дээр текст бичих нь TextOut -ийг хэрэглэхээс арайудаан байдаг. Хэрвээ таны зургийн боловсруулалт хурдан байхшаардлагатай бол TextOutм-ийг хэрэглэх нь зохимжтой. Гэхдээ энэ 2 ньзарчмын хувьд хоорондоо ялгаагүй юм. DrawText нь маш өргөнхэрэглээтэй.Bitmap зурахBitmap зурах нь нилээн хэцүү юм шиг санагддаг. Харин та үүнийгүзсэнийхээ дараа маш хялбархан зүйл байна гэж бодох болно. ТэгэхээрTCanvas –д Btmap зурахад зориулагдсан хэдэн method –ууд байдаг.Эдгээрээс хамгийн их хэрэглэгддэг method бол Draw. Энэ нь Canvasдээрхгарах байрлалыг зааж өгөхөд л хангалттай. Одоо хэдэн жишээ авъя.procedure TForm1.Button1Click(Sender: TObject);VarBitmap: TBitmap;BeginBitmap:= TBitmap.Create;Bitmap.LoadFromFile(c:co.bmp);Canvas.Draw(0,0,Bitmap);Bitmap.Free;end;
  • 114. Энэ жишээнд өгөгдсөн зургийн файлаас TBitmap обьект үүсгэж формынзүүн дээд буланд гаргаж үзүүлж байна. Bitmap –даа ямар ч өөрчлөлторуулахгүйгээр гаргаж үзүүлбэл Draw -ийг хэрэглээрэй. Хэрвээ хэмжээгньөөрчилж гаргамаар байгаа бол StretchDraw method -ийг хэрэглээрэй.Ингэхдээ Bitmap -ийнхаа гарах тэгш &#x