Դելֆիում ինտերֆեյսների հետ աշխատելու առանձնահատկությունները. Լավագույն ՏՏ լուծումները բիզնեսի համար Պատուհանների չափերը չպետք է գերազանցեն էկրանի չափը

միայն արդյունքների համար

ժամկետների խիստ պահպանում

Թափանցիկություն

ծրագրի իրականացում

Տեխնիկական աջակցություն որպես նվեր

Ծրագրավորում, բարելավումներ, խորհրդատվություն 1C-ի վերաբերյալ

Ինչպես ենք մենք աշխատում

1. Հեռախոսով քննարկում ենք խնդիրը։ Ներկայությամբ հեռավոր մուտք- ցույց տալ ձեր համակարգչի էկրանին:

2. Աշխատանքը գնահատում ենք ռուբլով, եթե նախագիծը մեծ է, եթե ոչ՝ ժամերի մոտավոր թիվը։

3. Մենք ավարտում ենք աշխատանքը:

4. Դուք ընդունում եք աշխատանք ձեր ծրագրում, եթե կան թերություններ, մենք դրանք ուղղում ենք։

5. Մենք հաշիվ ենք տալիս, դուք վճարում եք։

Աշխատանքի արժեքը

1. Բոլոր աշխատանքները բաժանված են 3 կատեգորիայի՝ խորհրդատվություն, տիպիկ կոնֆիգուրացիայի թարմացում, նոր հաշվետվության մշակում կամ ծրագրավորում, մշակում, կոճակներ և այլն։

3. 10 ժամից ավելի աշխատանքի համար նախապես պատրաստվում է տեխնիկական առաջադրանք՝ աշխատանքի նկարագրությամբ եւ արժեքով։ Աշխատանքը սկսվում է ձեզ հետ TOR-ի հաստատումից հետո:

Տեխնիկական աջակցություն

1. Նախկինում ընդունված աշխատանքներում սխալներ հայտնաբերելու դեպքում 3 ամսվա ընթացքում մենք դրանք ուղղում ենք անվճար։

2. Մշտական ​​հաճախորդների համար մենք մեկ տարվա ընթացքում անվճար շտկում ենք մեր աշխատանքի ցանկացած թերություն։

Ձեր բիզնեսը կառավարելու ծրագրեր:

Գնել 1C:Enterprise

Մենք 1C-ի պաշտոնական դիլերն ենք, մեզնից կարող եք ձեռք բերել տարբեր տեսակներ ծրագրային արտադրանքև լիցենզիաներ։ Բացի «տուփ» գնելուց, մենք կօգնենք ձեզ կարգավորել ծրագիրը, խորհրդակցել և կատարել հիմնական կարգավորումները:

  • Հաշվապահություն
  • Խանութի ավտոմատացում
  • Մեծածախ
  • Աջակցություն տեղադրման և նախնական կարգավորումներառված փաթեթում!
  • Հաճախորդի կարիքներին համապատասխան կոնֆիգուրացիաների ճշգրտում, ստանդարտ կազմաձևում անհրաժեշտ գործառույթների բացակայության դեպքում նոր մոդուլների մշակում:
1c հաշվապահություն 1C. Առևտրի կառավարում 1C: Մանրածախ 1C. Աշխատավարձի և մարդկային ռեսուրսների կառավարում
3300 ռուբից: 6700 ռուբից: 3300 ռուբից: 7400 ռուբից:

Սերվերի տրամադրում.

Ակնթարթային տեղադրման սերվեր + 1C:

Սերվեր չկա՞ Կարևոր չէ, մենք կընտրենք և արագ կտեղադրենք սերվեր «ամպի» մեջ։ Փոքր գումարի դիմաց դուք ստանում եք շատ հուսալի լուծում։

  • Հասանելիություն 24/7
  • Պետք չէ սեփականը պահել համակարգի ադմինիստրատոր(խնայողությունները կփակեն ձեր սերվերի արժեքը):
  • 1C-ի արագ տեղադրում և տեղադրում սերվերում, 3 օրից դուք արդեն կունենաք լիարժեք աշխատող համակարգ։
  • Ցանկացած պահի կարող եք տեղափոխվել տեղական սերվերեթե լուծումը գոհացուցիչ չէ.

SMS ձեր 1C-ից

Ցանկանու՞մ եք, որ հաճախորդները ժամանակին իմանան ակցիաների և զեղչերի մասին: Հաճախորդները չե՞ն վերադառնում: Անհատականացնել ուղարկելով SMSուղիղ 1C-ից!

Մեր ընկերությունը կկարողանա արագ կարգավորել SMS ուղարկելը ձեր հաճախորդներին անմիջապես 1C-ից: Իրադարձությունների օրինակներ, որոնք կարող են ավտոմատացվել.

  • Շնորհակալություն հաջորդ գնումից անմիջապես հետո բոնուսների գնման և հաշվեգրման համար:
  • Բոնուսների կուտակում քարտին որպես նվեր ծննդյան/մեկ այլ կարևոր կամ տոնական օրվա համար:
  • Պահեստի ծանուցում.
  • Նվերի վաուչերի ժամկետի ավարտը։
  • Նախավճարի ստացման և ապրանքների ամրագրման մասին ծանուցում.
  • Հասցե դեպի խանութ/գրասենյակ ուղղություններով, հեռախոսահամարներով։
  • և այլն:

1C-ի կարգավորումը կարող են անել մեր մասնագետները կամ մեր աշխատակիցները: Սակագներին կարող եք ծանոթանալ SMS-սակագներ էջում։

  • Երաշխիք SMS առաքում, գումարը հանվում է միայն առաքված SMS-ի համար։
  • Յուրաքանչյուր SMS-ի համար առանձին վճարում:
  • Հաշվեկշռի համալրում տարբեր ձևերով.
  • Դիտեք բոլոր ուղարկված SMS-ների պատմությունը ցանկացած պահի:
  • Ստացողի հեռախոսի թվային համարի փոխարեն ուղարկողի անունը:

Ստեղծագործություն ինտերֆեյսօգտվողը կրճատվում է բաղադրիչների գունապնակից ընտրելով ծրագրի աշխատանքի համար անհրաժեշտ Delphi բաղադրիչները, որոնք ծառայում են ինտերֆեյսկառավարում, ինչպես նաև ինտերֆեյսցուցադրելով տեղեկատվություն և դրանք փոխանցելով Ձևին՝ հետագա դասավորությամբ:

Ձեր ստեղծած օգտատիրոջ միջերեսը պետք է օգտագործի ստանդարտ, օգտագործողին ծանոթ տարրեր և ապահովի առավելագույն հարմարավետություն: Այս ամենը, ի վերջո, որոշվում է այնպիսի չափանիշով, ինչպիսին է ինտերֆեյսի արդյունավետությունը՝ նվազագույն ջանքերով առավելագույն արդյունք:
Ստեղծման սկզբունքները օգտագործողի համար հարմար ինտերֆեյսհայտնի է. որպես ամենաշատը ընդհանուր սկզբունքներստեղծագործելիս օգտագործողի միջերեսներկարելի է դիտարկել երեք հիմնական կետ.

  1. Ծրագիրը պետք է օգնի իրականացնել առաջադրանքը, այլ ոչ թե դառնա խնդիր:
  2. Ծրագրի հետ աշխատելիս օգտատերը չպետք է իրեն հիմարի պես զգա։
  3. Ծրագիրը պետք է աշխատի այնպես, որ օգտագործողը համակարգիչը հիմար չհամարի։
Առաջին սկզբունքը- սա ինտերֆեյսի այսպես կոչված «թափանցիկությունն» է: Օգտվողի միջերեսը պետք է լինի ինտուիտիվ, հեշտ սովորելու համար և օգտագործողի համար խնդիրներ չստեղծի, որոնք նա ստիպված կլինի հաղթահարել աշխատանքի ընթացքում: Օգտագործեք ստանդարտ, առանց ավելորդ զարդարման բաղադրիչների, օգտագործեք ծանոթ, օգտագործված նմանատիպ ծրագրերկառավարման տեխնիկան, և դուք կհասնեք կատարողականի չափանիշներին առաջին սկզբունքը.

Երկրորդ սկզբունքընկած է անտեսման մեջ ինտելեկտուալ կարողություններօգտվողներ. Իմ սեփական փորձից ես գիտեմ, որ հաճախ օգտվողները ոչ միայն չգիտեն ինչպես աշխատել համակարգչում, այլ պարզապես վախենում են ինքնուրույն որևէ բան անել: Հետեւաբար, օգտագործողի միջերեսը պետք է հնարավորինս բարեկամական լինի:
Ավելին, օգտատերերի մտավախությունները հաճախ արդարացված են, քանի որ ծրագրի արժեքը և հենց համակարգիչը չեն կարող համեմատվել, օրինակ, երկար տարիների ջանքերի ընթացքում ստեղծված տվյալների բազայի արժեքի հետ: Այդ իսկ պատճառով ծրագրավորողը օգտատիրոջ միջերես ստեղծելիս միշտ պետք է ծրագրում կառուցի «հիմար պաշտպանություն»՝ սխալ գործողություններից և օգտագործողի կողմից սխալ տվյալների մուտքագրումից: Բայց որոշ ծրագրավորողներ չափից դուրս տարվում են նման պաշտպանությամբ, դարձնում այն ​​չափազանց աներես, և արդյունքում ծրագրի աշխատանքը հիշեցնում է հայտնի «քայլը ձախ, աջ քայլը համարվում է փախուստ»: Իսկ այն, ինչ ստեղծում է ծրագրավորողը որպես խնդրի լուծում, ինքն է սկսում խնդիրներ ստեղծել։
Համապատասխանելու համար երկրորդ սկզբունքըկարիք չկա թույլ տալ ծրագրին «ուղղել» օգտատիրոջ գործողությունները և նշել, թե կոնկրետ ինչ պետք է գործի նրա փոխարեն՝ նրան մղելով նեղ շրջանակի մեջ։ Նաև չպետք է շատ տարվել տեղեկատվական ակնարկների, հատկապես երկխոսության հաղորդագրությունների ցուցադրմամբ, քանի որ դա շեղում է օգտագործողին աշխատանքից: Եվ ավելի լավ է նախատեսել հուշումներն ընդհանրապես անջատելու հնարավորությունը։

Երրորդ սկզբունքհնարավորինս մեծագույն «մտավոր» ունակություններով ծրագիր ստեղծելն է։ Չնայած արագ զարգացմանը համակարգչային տեխնիկա, նույնիսկ լայն տարածում գտած ծրագրերը միայն շատ պայմանականորեն կարելի է անվանել արհեստական ​​ինտելեկտ ունեցող։ Նրանք խանգարում են օգտագործողի փորձին՝ ցուցադրելով երկխոսության տուփերհիմար հարցերով, որոնք տարակուսանք են առաջացնում նույնիսկ ամենապարզ իրավիճակներում։ Արդյունքում, օգտատերերն իրենց սրտում բացականչում են. «Դե, այս մեքենան հիմար է»:
Անձամբ ինձ նյարդայնացնում են գրեթե բոլորի մշտական ​​հարցերը։ տեքստային խմբագիրներփոփոխված տեքստը պահպանելու մասին, թեև բնօրինակը և ընթացիկ տեքստը չեն տարբերվում մեկ նիշով: Այո, ես ինչ-որ բան գրեցի, բայց հետո ամեն ինչ վերադարձրեցի, իսկապե՞ս անհնար է դա պարզել: Ես պետք է ստուգեմ, որպեսզի տեսնեմ, թե արդյոք ինչ-որ բան խառնել եմ:

Փորձեք պահպանել հետևյալ կանոնները.

Ստանդարտ ինտերֆեյսի տարրեր
Օգտագործեք ստանդարտը տրված տարրբաղադրիչի ինտերֆեյս: Ծանոթանալով ձեր ծրագրին՝ օգտատերը ժամանակ չի վատնի միմյանց ճանաչելու համար, այլ անմիջապես կսկսի աշխատել՝ սա պրոֆեսիոնալ պատրաստված ծրագրի նշաններից մեկն է։
Գործիքների փոքր գունապնակ
Աշխատեք շատ չօգտագործել մեծ թվովտարբեր բաղադրիչներ. Եվ իհարկե, օգտագործելով մեկ ստանդարտ բաղադրիչ ինչ-որ տեղ մեկ տեղում, նմանատիպ դեպքում նույնպես օգտագործեք այն։
Հսկիչների միջև հավասար տարածություն
Տեղադրեք ինտերֆեյսի տարրերը միմյանցից նույն հեռավորության վրա: Պատահականորեն ցրված բաղադրիչները ստեղծում են ոչ պրոֆեսիոնալ արտադրանքի զգացում: Եվ հակառակը, ինտերֆեյսը կազմող կոճակների, անջատիչների, վանդակների և այլ բաղադրիչների ձևի վրա մանրակրկիտ չափաբերված տեղադրումը որակյալ աշխատանքի նշան է:
ներդիրների կարգը. "ճիշտ կարգը
TabOrderայն հերթականությունն է, որով էկրանի կուրսորը շարժվում է կառավարիչների վրայով, երբ սեղմվում է ստեղնը Ներդիր. Ճիշտ գրված ծրագրում կուրսորը շարժվում է՝ հետևելով ծրագրի հետ օգտագործողի աշխատանքի տրամաբանությանը։ Ծրագիր ստեղծելիս ծրագրավորողը հաճախ փոխում է բաղադրիչները, որոշները հեռացնում և ըստ անհրաժեշտության ավելացնում մյուսները: Արդյունքում, ավարտված ծրագրում կուրսորը պատահականորեն ցատկում է Ձևի վրայով: Ծրագիրը ավարտելուց հետո մի մոռացեք սահմանել TabOrder.
Տառատեսակի ընտրություն
Պարզապես հանգիստ թողեք տառատեսակները: Delphi-ի սեփական լռելյայն տառատեսակները կաշխատեն ցանկացած համակարգի համար, որով կարող է աշխատել ձեր ծրագիրը: Օգտագործեք թավ տառատեսակ միայն կարևոր տարրերն ընդգծելու համար: Դիմում գրավորև հատկապես ընդգծելով, որը օգտատերը կարող է սխալմամբ հիպերհղում անվանել՝ վատ ձև:
Գույների ընտրություն
Ինչ վերաբերում է ինտերֆեյսի տարրերի գույներին, ինչպես տառատեսակների դեպքում, ավելի լավ է դրանք լռելյայն թողնել ստանդարտ։ Delphi-ն օգտագործում է Windows համակարգի ներկապնակը, և այն փոխելով՝ օգտատերը կարող է հեշտությամբ հարմարեցնել գույներն իրենց համար։
Այլընտրանքային կառավարում
Պրոֆեսիոնալ պատրաստված ծրագիրը պետք է հնարավոր լինի կառավարել ոչ միայն մկնիկի, այլև ստեղնաշարի միջոցով։ Միայն մկնիկի միջոցով կատարման համար հասանելի գործառույթներ չպետք է լինեն (գրաֆիկական խմբագրիչներում նկարելը չի ​​հաշվվում): Առավել օգտագործվող գործառույթների համար պետք է տրամադրվեն «թեժ ստեղներ»՝ դրանց արագ մուտքի համար։
Ինտերֆեյսի շինանյութեր
Ինչ վերաբերում է ինտերֆեյսի հատուկ տարրերին, ծրագրի հետ օգտագործողի փոխգործակցության որակը կախված է.
  • կառավարման տարրի համապատասխանությունը իր առաջադրանքին.
  • կանոնները, որոնցով գործում է վերահսկողությունը.
    Այս էջում քննարկվում են ինտերֆեյսի որոշ տարրեր ստեղծելու կանոնները:
Եվ հիմա ես ուզում եմ ցույց տալ, թե ինչ գործիքներ է առաջարկում Delphi-ն՝ ձևի բաղադրիչները կառավարելու համար, դրանց հարաբերական դիրքը և կուրսորի վարքագիծը, երբ ստեղնը սեղմվում է: Ներդիր.

Որպեսզի բաղադրամասերը ճիշտ հերթականությամբ դասավորվեն միմյանց նկատմամբ, նախ անհրաժեշտ է ընդգծել դրանք. Դուք պարզապես կարող եք մկնիկը քաշել Ձևի այն տարածքի վրայով, որը պարունակում է ընտրված բաղադրիչները: Կամ պահելով Հերթափոխ«, նույն մկնիկով նշեք ընտրվող յուրաքանչյուր բաղադրիչ: Մկնիկի կրկնվող սեղմումով ընտրված բաղադրիչի վրա (սեղմելով « Հերթափոխ«) հանում է այն:

Ընտրված բաղադրիչները կարող են կառավարվել որպես ամբողջություն՝ տեղափոխել Ձևի շուրջը, արժեքներ վերագրել նույն հատկություններին, պատճենել (տեղադրման համար, օրինակ, մեկ այլ ձևաթղթում), նույնիսկ ջնջվել:

Այժմ աջ սեղմեք բաղադրիչներից մեկի վրա և «թռուցիկ» ընտրացանկից ընտրեք Դիրք -> Հավասարեցնել...Կհայտնվի երկխոսության տուփ, որը թույլ է տալիս խմբում կարգավորել բաղադրիչների դիրքը հորիզոնական և ուղղահայաց: Օրինակ, մենք պետք է հավասարեցնենք մեր չորս կոճակները դեպի ձախ և համոզվենք, որ դրանց միջև կա նույն հեռավորությունըուղղահայաց: Դա անելու համար ընտրեք ռադիո կոճակները Հորիզոնական՝ ձախ կողմերԵվ Ուղղահայաց: Տարածությունը հավասարապես.

Նյութի ընտրություն Կենտրոն, բաղադրիչները կդասավորենք այնպես, որ դրանց կենտրոնները տեղակայվեն նույն գծի վրա՝ հորիզոնական կամ ուղղահայաց, իսկ կետը. Կենտրոնը պատուհանումբաղադրիչները տեղափոխում է պատուհանի կենտրոն՝ հորիզոնական կամ ուղղահայաց:

Նույն մենյուում տող Ներդիր Օպատվեր...առաջացնում է երկխոսության տուփի տեսք, որը վերահսկում է կուրսորի շարժումը ինտերֆեյսի տարրերի միջով, երբ ստեղնը սեղմվում է Ներդիր. Երբ Ձևը հայտնվում է էկրանին, կուրսորը բնականաբար կլինի երկխոսության տուփի առաջին տողում գտնվող բաղադրիչի վրա: Եվ հետո այն կտեղափոխվի ցուցակի ներքև: Երկխոսության վանդակում երկու կապույտ սլաքներ «վերև» և «ներքև» վերահսկում են ընտրված բաղադրիչի դիրքը: Ընդգծել պահանջվող բաղադրիչ, օգտագործեք սլաքները ցուցակի ցանկալի գիծը տեղափոխելու համար և այլն:

Ցանկի տարր ընտրելիս Վերահսկում ->Ենթացանկը հայտնվում է երկու տարրով.

  • Առաջ բերել
  • ուղարկել ետ
Սրանք բաղադրիչ մեթոդներ են, որոնք հասանելի են նաև ծրագրային առումով: Button1.SendToBackկոճակը տեղափոխում է «ֆոն» և Button1.BringToFront- առաջ բերել". Այսինքն, եթե մի բաղադրիչը տեղադրվում է մյուսից վեր, այս մեթոդները փոխում են դրանք: Այն դեպքերը, որոնց դեպքում դա կարող է կիրառվել, բավականին ակնհայտ են:

Օբյեկտ-կողմնորոշված ​​ծրագրավորումը (OOP), բացի դասի հայեցակարգից, նախատեսում է նաև ինտերֆեյսի հիմնարար հայեցակարգ:

Ի՞նչ է ինտերֆեյսը և որո՞նք են դրա հետ աշխատելու առանձնահատկությունները Delphi ծրագրավորման լեզվով:

Ինտերֆեյսը ծրագրային կոդի իմաստային և շարահյուսական կառուցվածք է, որն օգտագործվում է դասի կամ բաղադրիչի կողմից մատուցվող ծառայությունները նշելու համար (Վիքիպեդիա):

Փաստորեն, ինտերֆեյսը սահմանում է հատկությունների և մեթոդների ցանկ, որոնք պետք է օգտագործվեն այս ինտերֆեյսը իրականացնող դասի հետ աշխատելիս, ինչպես նաև դրանց ստորագրությունը (անունը, տվյալների տեսակը, ընդունված պարամետրերը (ընթացակարգերի և գործառույթների համար) և այլն): Այսպիսով, դասը, որն իրականացնում է ինտերֆեյս, պետք է անպայման իրականացնի իր բոլոր բաղադրիչները: Ընդ որում, խիստ համապատասխան, թե ինչպես են նկարագրված դրանում։

Շատ հաճախ ինտերֆեյսները համեմատվում են վերացական դասերի հետ, բայց չնայած բոլոր նմանություններին, այս համեմատությունը լիովին ճիշտ չէ: Վերացական դասարաններում նվազագույնը հասանելի է անդամների տեսանելիության վերահսկողությունը: Միևնույն ժամանակ, ինտերֆեյսների համար շրջանակներ սահմանված չեն:

Ինտերֆեյսները թույլ են տալիս ավելի ճկուն դարձնել ճարտարապետությունը, քանի որ դրանք միավորում են մուտքը որոշակի գործառույթի, ինչպես նաև թույլ են տալիս խուսափել դասերի ժառանգման հետ կապված մի շարք խնդիրներից (ինտերֆեյսները կարող են նաև ժառանգվել միմյանցից):

Delphi-ն օգտագործում է ինտերֆեյսի հիմնաբառը՝ ինտերֆեյս հայտարարելու համար: Սա նույն բանալի բառն է, որը սահմանում է մոդուլի բաժին, որը կարելի է մուտք գործել դրսից (միջև հիմնաբառերինտերֆեյս և իրականացում): Այնուամենայնիվ, ինտերֆեյսի հայտարարման ժամանակ օգտագործվում է այլ շարահյուսություն, որը նման է դասերի հայտարարմանը:

Դելֆի/Պասկալ

IMyNewInterface = ինտերֆեյսի ընթացակարգ InterfaceProc; վերջ;

IMyNewInterface =ինտերֆեյս

ընթացակարգ InterfaceProc;

վերջ ;

Այսպիսով, ինտերֆեյսի հայտարարագրման շարահյուսությունն ինքնին հիմնարար տարբերություններ չունի ծրագրավորման այլ լեզուներից (Պասկալի վրա հիմնված շարահյուսական հատկանիշները չեն հաշվվում): Միևնույն ժամանակ, ինտերֆեյսերի իրականացումն ունի մի շարք բնութագրական առանձնահատկություններ.

Փաստն այն է, որ Delphi ինտերֆեյսներն ի սկզբանե ներկայացվել են COM տեխնոլոգիան աջակցելու համար: Հետևաբար, IInterface ինտերֆեյսը, որը Delphi-ում բոլոր մյուս ինտերֆեյսների նախահայրն է (TObject-ի մի տեսակ անալոգ), արդեն պարունակում է այս տեխնոլոգիայի հետ աշխատելու երեք հիմնական մեթոդ՝ QueryInterface, _AddRef, _Release: Արդյունքում, եթե դասը իրականացնում է որևէ ինտերֆեյս, ապա այն պետք է իրականացնի նաև այդ մեթոդները։ Նույնիսկ եթե այս դասը նախատեսված չէ COM-ի հետ աշխատելու համար:

IInterface ինտերֆեյսի այս հատկության շնորհիվ Delphi-ում ինտերֆեյսների օգտագործումը, շատ դեպքերում, հանգեցնում է ակնհայտորեն չօգտագործված հատկանիշների ավելացմանը դասին:

Գոյություն ունի գրադարանային դասի TInterfaceObject, որն արդեն պարունակում է այս մեթոդների իրականացումը, և դրանից ժառանգություն ստանալիս կարիք չկա ինքնուրույն իրականացնել դրանք։ Բայց քանի որ Delphi-ն չի աջակցում բազմակի դասերի ժառանգությանը, դրա օգտագործումը հաճախ միայն լրացուցիչ բարդություն է առաջացնում արդեն իսկ պահանջվող ֆունկցիոնալության նախագծման և իրականացման մեջ:

Այս ամենը հանգեցրեց նրան, որ, չնայած ինտերֆեյսների ընձեռած բոլոր հնարավորություններին, Դելֆիում դրանց գործնական օգտագործումը գրեթե չէր անցնում COM-ի հետ աշխատելուց այն կողմ։

Օպտիմիզացված լինելով հիմնականում այս տեխնոլոգիայի հետ աշխատելու համար, ինտերֆեյսները, ավելի ճիշտ՝ ֆունկցիոնալությունն ու ճարտարապետական ​​սահմանափակումները, որոնք դրանք անսխալ ավելացնում են, չեն արդարացնում իրենց այլ խնդիրներ լուծելիս:

Հետևաբար, Delphi-ի շատ ծրագրավորողներ, փաստորեն, դեռևս զրկված են հավելվածների ճարտարապետությունը մշակելու հզոր և ճկուն գործիքից:

Այս հոդվածը հիմնված է ֆորումներում առկա հարցերի վրա. «Ինչպե՞ս կարող եմ վերադարձնել տողը DLL-ից», «Ինչպե՞ս կարող եմ փոխանցել և վերադարձնել գրառումների զանգվածը», «Ինչպե՞ս կարող եմ ձևը փոխանցել DLL-ին»:

Որպեսզի ձեր կյանքի կեսը չծախսեք դա պարզելու վրա, այս հոդվածում ես ամեն ինչ կբերեմ արծաթե սկուտեղի վրա:

Այս հոդվածի թեմաները, տարբեր աստիճաններով, արդեն մեկ անգամ չէ, որ շոշափվել են այս բլոգում, բայց այս հոդվածում դրանք հավաքված են կույտով, տրված են հիմնավորումներ: Մի խոսքով, այս հոդվածի հղումը կարելի է նետել նրանց, ովքեր մշակում են DLL-ը:

Կարևոր նշում: հոդվածը պետք է կարդալ հաջորդաբար. Կոդի օրինակները տրամադրվում են միայն որպես օրինակներ, հոդվածի յուրաքանչյուր քայլի (կետում) օրինակների ծածկագիրը ավելացվում է նոր մանրամասներով։ Օրինակ, հոդվածի հենց սկզբում սխալների հետ կապված չկա, նշվում են «դասական» մեթոդները (օրինակ՝ օգտագործելով GetLastError, sdtcall կոնվենցիաներ և այլն), որոնք հոդվածի ընթացքում փոխարինվում են ավելի ադեկվատներով։ Դա արվում է այն պատճառով, որ «նոր» («անսովոր») ձևավորումները հարցեր չեն առաջացնում։ Հակառակ դեպքում, յուրաքանչյուր օրինակի հետ պետք է մուտքագրել ձևի նշում. Ամեն դեպքում, հոդվածի վերջում կա պատրաստի կոդի հղում, որը գրված է՝ հաշվի առնելով հոդվածում ասվածը։ Դուք կարող եք պարզապես վերցնել այն և օգտագործել այն: Եվ հոդվածում բացատրվում է, թե ինչու և ինչու: Եթե ​​ձեզ չի հետաքրքրում «ինչու և ինչու» - ոլորեք մինչև վերջ մինչև եզրակացությունը և օրինակը ներբեռնելու հղումը:

Մեկը և ամենաշատը ուժեղ կողմերըԴելֆի ծրագրավորման միջավայրը նրա բաց ճարտարապետությունն է, որի շնորհիվ Delphi-ն թույլ է տալիս մի տեսակ մետածրագրավորում՝ թույլ տալով «ծրագրավորել ծրագրավորման միջավայրը»։ Այս մոտեցումը Delphi-ին բերում է հավելվածների մշակման համակարգերի որակապես նոր մակարդակի և թույլ է տալիս տեղադրել լրացուցիչ գործիքներորոնք ապահովում են կիրառական համակարգերի ստեղծման գրեթե բոլոր փուլերը: Նման լայն հնարավորություններ են բացվում Delphi-ում ներդրված, այսպես կոչված, բաց ինտերֆեյսների հայեցակարգի շնորհիվ, որոնք կապող օղակ են IDE-ի (Ինտեգրված զարգացման միջավայր) և արտաքին գործիքների միջև:

Այս հոդվածը կենտրոնանում է Delphi-ի բաց ինտերֆեյսների վրա և տրամադրում է նրանց տրամադրած հնարավորությունների ակնարկ: Delphi-ն սահմանում է վեց հանրային ինտերֆեյս՝ Գործիքների ինտերֆեյս, Դիզայնի միջերես, Փորձագիտական ​​ինտերֆեյս, Ֆայլի միջերես, Խմբագրել Ինտերֆեյս և Տարբերակի վերահսկման միջերես: Քիչ հավանական է, որ այս հոդվածի շրջանակներում մենք կարողանանք մանրամասնորեն անդրադառնալ և լուսաբանել դրանցից յուրաքանչյուրի հնարավորությունները։ Դելֆիի սկզբնաղբյուր տեքստերը կօգնեն ձեզ ավելի մանրամասն հասկանալ քննարկվող խնդիրները, քանի որ մշակողները նրանց տրամադրել են մանրամասն մեկնաբանություններ: Դասերի հայտարարագրերը, որոնք ներկայացնում են հանրային ինտերֆեյսները, պարունակվում են համապատասխան մոդուլներում ...\Delphi\Source\ToolsAPI գրացուցակում: Դիզայնի ինտերֆեյսը (DsgnIntf.pas մոդուլը) ապահովում է գույքի խմբագրիչներ և բաղադրիչների խմբագրիչներ ստեղծելու միջոցներ:

Հատկությունների և բաղադրիչների խմբագրիչները առանձին քննարկման արժանի թեմա են, ուստի մենք միայն հիշում ենք, որ գույքի խմբագիրը վերահսկում է Object Inspector-ի վարքագիծը, երբ փորձում եք փոխել համապատասխան հատկության արժեքը, և բաղադրիչի խմբագրիչը ակտիվանում է, երբ կրկնակի սեղմեքմկնիկի ձախ կոճակը ձևաթղթի վրա տեղադրված բաղադրիչի պատկերի վրա: Տարբերակի կառավարման միջերեսը (VCSIntf.pas մոդուլը) նախատեսված է տարբերակների կառավարման համակարգեր ստեղծելու համար: Սկսած 2.0 տարբերակից՝ Delphi-ն աջակցում է Intersolv PVCS ինտեգրված տարբերակների կառավարման համակարգին, ուստի շատ դեպքերում անհրաժեշտ չէ զարգացնել ձեր սեփական համակարգը: Այդ պատճառով մենք բաց կթողնենք նաև տարբերակի վերահսկման ինտերֆեյսի դիտարկումը: Ֆայլի միջերեսը (FileIntf.pas մոդուլը) թույլ է տալիս վերաիմաստավորել IDE-ի աշխատանքային ֆայլային համակարգը, ինչը հնարավորություն է տալիս ընտրել ֆայլերը պահելու ձեր սեփական ձևը (օրինակ, տվյալների բազայի սերվերի Memo դաշտերում): Խմբագրման ինտերֆեյսը (EditIntf.pas մոդուլը) ապահովում է մուտք դեպի սկզբնաղբյուր տեքստի բուֆեր, որը թույլ է տալիս վերլուծել և գեներացնել կոդը, որոշել և փոխել կուրսորի դիրքը կոդի խմբագրիչի պատուհանում և վերահսկել սկզբնաղբյուր տեքստի շարահյուսության ընդգծումը:

Հատուկ դասերը ինտերֆեյսներ են տրամադրում ձևի վրա տեղադրված բաղադրիչներին (որոշելով բաղադրիչի տեսակը, հղումներ ստանալ ծնող և զավակ բաղադրիչներին, մուտք գործել հատկություններ, փոխանցել ֆոկուս, ջնջել և այլն), բուն ձևին և նախագծի ռեսուրսային ֆայլին: Խմբագրել ինտերֆեյսը նաև թույլ է տալիս նույնականացնել այսպես կոչված մոդուլի ծանուցիչները, որոնք որոշում են արձագանքը այնպիսի իրադարձությունների, ինչպիսիք են մոդուլի սկզբնական կոդը փոխելը, ձևի փոփոխությունը, բաղադրիչի վերանվանումը, մոդուլի պահպանումը, վերանվանումը կամ ջնջումը, նախագծի ռեսուրսի փոփոխությունը: ֆայլ և այլն: Գործիքների միջերեսը (ToolIntf. pas մոդուլը) ծրագրավորողներին տրամադրում է միջոցներ ձեռք բերելու համար ընդհանուր տեղեկություն IDE-ի վիճակի և այնպիսի գործողություններ կատարելու մասին, ինչպիսիք են նախագծերի բացումը, պահպանումը և փակումը, և անհատական ​​ֆայլեր, մոդուլի ստեղծում, ընթացիկ նախագծի վերաբերյալ տեղեկություններ ստանալը (մոդուլների և ձևաթղթերի քանակը, դրանց անվանումները և այլն), գրանցվել. ֆայլային համակարգ, առանձին մոդուլների միջերեսների կազմակերպում և այլն: Ի հավելումն մոդուլի ծանուցիչների, Գործիքների միջերեսը սահմանում է հավելյալ ծանուցիչներ, որոնք ծանուցում են այնպիսի իրադարձությունների մասին, ինչպիսիք են ֆայլերը և նախագծերը բացելը/փակելը, ծրագրի աշխատասեղանի ֆայլի բեռնումը և պահպանումը, ծրագրի մոդուլների ավելացումը/բացառումը, փաթեթների տեղադրումը/տեղահանումը, նախագծի կազմումը, և Ի տարբերություն մոդուլային ծանուցիչների, հավելյալ ծանուցիչները թույլ են տալիս չեղարկել որոշ իրադարձությունների կատարումը:

Բացի այդ, Tool Interface-ն ապահովում է Delphi IDE-ի հիմնական մենյու մուտք գործելու միջոց՝ թույլ տալով դրանում լրացուցիչ տարրեր տեղադրել: Փորձագիտական ​​ինտերֆեյսը (ExtIntf.pas մոդուլը) փորձագետների խորհրդատուների ստեղծման հիմքն է. ծրագրային մոդուլներ, ներդրված է IDE-ում՝ դրա ֆունկցիոնալությունն ընդլայնելու համար: Փորձագետի օրինակ է Delphi Database Form Wizard-ը, որը ձևավորում է տվյալների բազայի աղյուսակի բովանդակությունը դիտելու և փոփոխելու ձև: Փորձագետների դասը սահմանելուց հետո մենք պետք է համոզվենք, որ Delphi-ն «սովորում է» մեր փորձագետի մասին: Դա անելու համար այն պետք է գրանցվի՝ զանգահարելով RegisterLibraryExpert պրոցեդուրան՝ որպես պարամետր փոխանցելով փորձագետների դասի օրինակ։ Որպես օրինակ, եկեք ստեղծենք esStandard ոճի պարզ փորձագետ, որը, երբ ընտրվում է Delphi ընտրացանկի համապատասխան տարրը, ցուցադրում է հաղորդագրություն, որ այն աշխատում է: Ինչպես երևում է վերևի աղյուսակից, esStandard ոճը պահանջում է վեց մեթոդի վերացում.

Որպեսզի փորձագետը «ակտիվանա», դուք պետք է ընտրեք մենյուի տարրը Component/Install Component ..., ընտրեք փորձագետը պարունակող մոդուլը (մեր դեպքում exmpl_01.pas) Browse երկխոսության մեջ, սեղմեք OK, և այն կազմելուց հետո: dclusr30.dpk փաթեթը Delphi-ի հիմնական ընտրացանկում Օգնության բաժնում, պետք է հայտնվի Simple Expert 1 տարրը, երբ ընտրված է, հայտնվում է «Ստանդարտ փորձագետը սկսել է» տեղեկատվական հաղորդագրությունը: Ինչու է Delphi-ն դնում փորձագետների ցանկի տարրը Օգնություն բաժնում, մնում է առեղծված: Եթե ​​ձեզ դուր չի գալիս այն փաստը, որ ցանկի տարրը հայտնվում է Դելֆիում ցանկացած վայրում, և ոչ այնտեղ, որտեղ ցանկանում եք, հնարավոր է հետևյալ տարբերակը. ընտրացանկի տարրը «ձեռքով»՝ օգտագործելով Գործիքների միջերեսը: Սա թույլ կտա կամայական կերպով սահմանել նոր տարրի գտնվելու վայրը հիմնական մենյուում:

Ցանկի տարր ավելացնելու համար օգտագործվում է TIToolServices դասը՝ գործիքի միջերեսի հիմքը, և TIMainMenuIntf, TIMEenuItemIntf դասերը, որոնք ինտերֆեյսներ են իրականացնում IDE-ի հիմնական ցանկի և դրա տարրերի համար: TIToolServices դասի ToolServices օրինակը ստեղծվում է հենց IDE-ի կողմից, երբ այն սկզբնավորվում է: Նկատի ունեցեք, որ մշակողի պարտականությունն է թողարկել միջերեսները Delphi-ի հիմնական ընտրացանկի և դրա տարրերի համար: Ճանապարհին, եկեք մի փոքր բարդացնենք Expert Advisor-ի ֆունկցիոնալ ծանրաբեռնվածությունը. երբ նրա ընտրացանկի տարրը ակտիվացվի, այն կտրամադրի վկայագիր՝ բացված նախագծի անվանման մասին: այս պահինմիջավայրում. Այս օրինակում կենտրոնական տեղը զբաղեցնում է AddIDEMenuItem ֆունկցիան, որը ցանկի տարր է ավելացնում Delphi IDE-ի հիմնական ընտրացանկին: Որպես պարամետրեր՝ փոխանցվում է նոր ընտրացանկի տեքստը, դրա նույնացուցիչը, այն տարրի նույնացուցիչը, որի առաջ տեղադրվում է նոր տարրը, բանալիի խորհրդանշական ներկայացումը, որը հետ միասին. Ctrl ստեղնըկարող է օգտագործվել արագ մուտքդեպի նոր տարր, և իրադարձությունների մշակիչ, որը համապատասխանում է նոր տարրի ընտրությանը: Մենք մենյուի նոր տարր ենք ավելացրել «Դիտել» բաժնում «Ժամացույցներ» կետից առաջ:

Այժմ եկեք ծանոթանանք ծանուցողների հետ։ Եկեք սահմանենք հավելյալ ծանուցիչ, որը հետևում է նախագծերի փակման/բացման պահերին և համապատասխանաբար կարգավորում է այն դաշտը, որը պահպանում է անունը: ակտիվ նախագիծ(Հակիրճության համար ես բաց կթողնեմ մեթոդների իրականացումը, որոնք չեն փոխվել նախորդ օրինակի համեմատ). Ծանուցիչն իրականացնելու համար մենք սահմանեցինք TAddInNotifier դասը, որը TIAddInNotifier-ի հետնորդն է, և փոխարինեցինք FileNotification մեթոդը: IDE-ն կկանչի այս մեթոդը ամեն անգամ, երբ տեղի է ունենում իրադարձություն, որին հավելյալ ծանուցիչը կարող է արձագանքել (յուրաքանչյուր նման իրադարձություն նշվում է համապատասխան TFileNotification տեսակի հաստատունով): TAddInNotifier դասի Expert դաշտը օգտագործվում է հետադարձ կապփորձագետի հետ (մեթոդ TAddInNotifier.FileNotification): Փորձագետի դեստրուկտորում ծանուցողի գրանցումը գրանցված չէ, իսկ ծանուցողը ոչնչացվում է: Հիմա եկեք պատկերացնենք մոդուլային ծանուցիչների օգտագործումը: Եկեք ստեղծենք հավելյալ փորձագետ, որը ստեղծում է հաղորդագրություններ ծրագրի ֆայլը պահպանելու յուրաքանչյուր գործողության մասին (կարճության համար մենք չենք տրամադրում մեզ արդեն ծանոթ մեթոդների իրականացումը). Այս օրինակում հավելյալ փորձագետը վերահսկում է իրադարձությունները, որոնք համապատասխանում են. նախագծերի բացում/փակում.

Ամեն անգամ, երբ նախագիծը բացվում է, գրանցվում է ծրագրի ֆայլին համապատասխան մոդուլի ծանուցիչ: Իրականացման առումով մոդուլային ծանուցիչները նման են հավելյալ ծանուցիչներին. մենք սահմանում ենք TModuleNotifier դաս, որը TIModuleNotifier-ի ժառանգն է և անտեսում է դրա Notify և ComponentRenamed մեթոդները: IDE-ն կանչում է Notify մեթոդը, երբ տեղի են ունենում այս մոդուլի հետ կապված որոշակի իրադարձություններ. Այս մեթոդի ներսում որոշվում է որոշակի իրադարձության արձագանքը: ComponentRenamed մեթոդը կոչվում է, երբ փոխվում է բաղադրիչի անունը, որը գտնվում է մոդուլի ձևի վրա: Խնդրում ենք նկատի ունենալ, որ մենք չենք օգտագործում այս մեթոդը, բայց մենք պետք է անտեսենք այն, հակառակ դեպքում, երբ բաղադրիչի անունը փոխվի, կկանչվի բազային դասի աբստրակտ մեթոդը, ինչը հանգեցնում է անկանխատեսելի հետևանքների։

Մոդուլի ծանուցիչի գրանցումը որոշ չափով ավելի բարդ է, քան ծանուցողի հավելյալ գրանցելը. սկզբում մենք ստանում ենք մոդուլի ինտերֆեյսը (TIModuleInterface), այնուհետև գրանցում ենք ծանուցիչը՝ օգտագործելով մոդուլի միջերեսը: Երբ նախագիծը փակ է, մոդուլի ծանուցիչը չգրանցված է (կրկին օգտագործելով TIModuleInterface) և ծանուցիչը ոչնչացվում է: Եզրափակելով, մենք ցույց կտանք, թե ինչպես կարող եք որոշել կուրսորի դիրքը կոդերի խմբագրիչի պատուհանում: Եկեք ստեղծենք Փորձագետ խորհրդատու, որը, երբ ընտրվի համապատասխան ընտրացանկի տարրը, կցուցադրի հաղորդագրություն, որը պարունակում է ակտիվ ֆայլի անվանումը և դրա մեջ կուրսորի դիրքը (տրված է միայն այն մեթոդների իրականացումը, որոնք էական են այս օրինակի համար). Կուրսորի դիրքը որոշելու համար մենք պետք է ստանանք միջերեսների հետևյալ հաջորդականությունը. մոդուլի միջերես (TIModuleInterface); կոդի խմբագրիչի ինտերֆեյս (TIEditorInterface); մոդուլի դիտման միջերեսը խմբագրի պատուհանում (TIEditView):

Եթե ​​սկզբնական տեքստով ակտիվ ֆայլը (*.pas) ակտիվ է փորձագիտական ​​ընտրացանկի տարրն ընտրելիս, ապա ցուցադրվում է հաղորդագրություն, որը պարունակում է ակտիվ ֆայլի անվանումը և կուրսորի ներկայիս դիրքը դրանում: Եթե ​​ակտիվ ֆայլը pas ֆայլ չէ, հաղորդագրություն չի թողարկվում: Ակտիվ ֆայլի անունը ստանալու համար օգտագործվում է TIToolServices դասի GetCurrentFile մեթոդը։ Սա ավարտում է հանրային ինտերֆեյսների օգտագործման ուղիների մեր քննարկումը: CD-ROM-ը պարունակում է բոլոր տրված օրինակների սկզբնական կոդը: CD-ROM-ը պարունակում է նաև ավելի բարդ և ընդլայնված օրինակ, որը պարունակում է հավելյալ փորձագետ, որը թույլ է տալիս օգտվողին էջանշել Delphi մոդուլների սկզբնական կոդը: Bookmark Expert-ի տեղադրման և օգտագործման արագ ուղեցույցը պարունակվում է bkmrks97.htm ֆայլում: Այսպիսով, այս հոդվածում հանրային ինտերֆեյսները քննարկվում են ընդհանուր տերմիններով և տրված են դրանց օգտագործման օրինակներ: Կրկին բաց ինտերֆեյսերի սկզբնական կոդերի առկայության շնորհիվ դուք հեշտությամբ կարող եք հասկանալ ձեզ հետաքրքրող մանրամասները: Հուսով ենք, որ ընձեռված հնարավորությունների բազմազանությունը բաց միջերեսներ, ձեզ կտա մեկից ավելի համարձակ և օգտակար գաղափար։