04.01.2021

Xülasə: Delphi proqramlaşdırma mühitinin açıq interfeyslərindən istifadə. Delphi-də istifadəçi interfeyslərinin yaradılması üçün ən yaxşı təcrübələr Delphi-də interfeyslərdən istifadə


yalnız nəticə üçün

son tarixlərə ciddi riayət etmək

Şəffaflıq

layihənin icrası

hədiyyə olaraq texniki dəstək

Proqramlaşdırma, 1C-də məsləhətlərin yenidən nəzərdən keçirilməsi

Necə işləyirik

1. Problemi telefonla müzakirə edirik. iştirakı ilə uzaqdan giriş- kompüterinizin ekranında göstərin.

2. Biz işi rublla qiymətləndiririk, əgər layihə böyükdürsə, əgər olmasa - təxmini saat sayı.

3. Biz işi bitiririk.

4. Proqramınızda işi qəbul edirsiniz, əgər çatışmazlıqlar varsa, biz onları düzəldirik.

5. Biz faktura veririk, siz ödəyirsiniz.

İşin dəyəri

1. Bütün işlər 3 kateqoriyaya bölünür: konsultasiya, tipik konfiqurasiyanın yenilənməsi, yeni hesabatın hazırlanması və ya proqramlaşdırılması, emal, düymələr və s.

3. 10 saatdan artıq iş üçün əvvəlcədən işin təsviri və dəyəri olan texniki tapşırıq tərtib edilir. Sizinlə texniki tapşırıqları razılaşdırdıqdan sonra iş başlayır.

Texniki dəstək

1. Əvvəllər qəbul edilmiş əsərlərdə 3 ay ərzində hər hansı bir səhv aşkar etsəniz, biz onları pulsuz olaraq düzəldirik.

2. Daimi müştərilər üçün işimizdə olan çatışmazlıqları il ərzində pulsuz olaraq düzəldirik.

Biznesinizi idarə etmək üçün proqramlar.

1C: Enterprise al

1C -nin rəsmi dileriyik, müxtəlif satın ala bilərsiniz proqram məhsulları və lisenziyalar. Bir "qutu" almaqdan əlavə, proqramı qurmağa, məsləhət verməyə və əsas parametrləri etməyə kömək edəcəyik.

  • Mühasibat uçotu
  • Mağaza avtomatlaşdırılması
  • Topdan
  • Quraşdırma və ilkin quraşdırma yardımı paketə daxildir!
  • Müştərinin ehtiyacları üçün konfiqurasiyaların dəqiq tənzimlənməsi, standart konfiqurasiyada lazımi funksiyalar olmadıqda yeni modulların hazırlanması.
1c mühasibat uçotu 1C: Ticarətin İdarə Edilməsi 1C: Pərakəndə satış 1C: Əmək haqqı və kadrların idarə edilməsi
3300 rubldan. 6700 rubldan. 3300 rubldan. 7400 rubldan.

Server təminatı.

Ani quraşdırma serveri + 1C.

Serveriniz yoxdur? Fərqi yoxdur, biz “buludda” serveri götürüb tez quracağıq. Kiçik bir ödəniş üçün çox etibarlı bir həll alırsınız.

  • 24/7 mövcudluq
  • Özünüzü saxlamağa ehtiyac yoxdur sistem idarəçisi(qənaət server xərclərinizi ödəyəcək).
  • 1C-nin serverdə sürətli qurulması və quraşdırılması, 3 gün ərzində artıq tam işlək sistemə sahib olacaqsınız.
  • Həll sizə uyğun gəlmirsə, istənilən vaxt yerli serverə keçə bilərsiniz.

1C-dən SMS

Müştərilərin promosyonlar, endirimlər haqqında vaxtında xəbər tutmasını istəyirsiniz? Müştərilər geri qayıtmır? 1C -dən birbaşa SMS göndərməyi qurun!

Şirkətimiz müştərilərinizə birbaşa 1C-dən SMS göndərilməsini tez bir zamanda qura biləcək. Avtomatlaşdırıla bilən hadisələrə nümunələr:

  • Növbəti alışdan dərhal sonra alış və bonusların hesablanması üçün təşəkkür edirik.
  • Digər əhəmiyyətli və ya tətil üçün doğum gününə hədiyyə olaraq karta bonusların hesablanması.
  • Malların anbara gəlməsi barədə bildiriş.
  • Hədiyyə bonuslarının müddətinin başa çatması.
  • Avans ödənişinin alınması və malların rezervasiyası barədə bildiriş.
  • Mağazaya/ofisə necə getməyin təfərrüatları, telefon nömrələri ilə ünvan.
  • və s.

1C-də parametrlər mütəxəssislərimiz və ya əməkdaşlarımız tərəfindən edilə bilər. SMS tarifləri səhifəsində tariflərlə tanış ola bilərsiniz.

  • SMS çatdırılma zəmanəti, pul yalnız çatdırılan SMS üçün çıxarılır.
  • Hər bir SMS üçün ayrıca hesab.
  • Balansın müxtəlif yollarla doldurulması.
  • İstənilən vaxt bütün göndərilən SMS-lərin tarixçəsinə baxın.
  • Mesajı qəbul edənin telefonunda rəqəmsal nömrə yerinə göndərənin adı.

Obyekt yönümlü proqramlaşdırma (OOP), sinif konsepsiyasından əlavə, interfeysin fundamental konsepsiyasını da təmin edir.

İnterfeys nədir və Delphi proqramlaşdırma dilində onunla işləməyin xüsusiyyətləri hansılardır?

İnterfeys bir sinif və ya komponent (Vikipediya) tərəfindən təmin edilən xidmətləri müəyyən etmək üçün istifadə olunan proqram kodunda semantik və sintaktik konstruksiyadır.

Əslində, interfeys bu interfeysi həyata keçirən siniflə işləyərkən istifadə edilməli olan xassələrin və metodların siyahısını, habelə onların imzasını (ad, məlumat növü, qəbul edilmiş parametrlər (prosedurlar və funksiyalar üçün) və s.) müəyyən edir. Beləliklə, müəyyən bir interfeysi həyata keçirən sinif mütləq onun bütün komponentlərini həyata keçirməlidir. Bunun nə ilə əlaqəsi var ciddi uyğunluq orada təsvir olunduğu şəkildə.

İnterfeyslər tez -tez mücərrəd siniflərlə müqayisə olunur, lakin oxşarlığa baxmayaraq, bu müqayisə tamamilə doğru deyil. Abstrakt dərslərdə ən azı üzvlərin görünməsinə nəzarət mövcuddur. Eyni zamanda, interfeyslər üçün əhatə dairəsi müəyyən edilmir.

İnterfeyslər arxitekturanı daha çevik etməyə imkan verir, çünki onlar müəyyən bir funksionallığa girişi birləşdirir, həmçinin sinif irsiyyəti ilə bağlı bir sıra problemlərin qarşısını almağa imkan verir (interfeyslər bir-birindən də miras alına bilər).

Delphi-də interfeys elan etmək üçün interfeys açar sözündən istifadə edin. Bu, modulun kənardan daxil ola bilən bölməsini təyin edən eyni açar sözdür ( açar sözlər interfeys və həyata keçirilməsi). Bununla belə, interfeys elan edilərkən, sinif bəyannamələrinə bənzər fərqli sintaksis istifadə olunur.

Delphi / Pascal

IMyNewInterface = interfeys proseduru InterfaceProc; son;

IMyNewInterface = interfeys

InterfaceProc proseduru;

son;

Beləliklə, interfeys bəyannaməsinin sintaksisi digər proqramlaşdırma dillərindən əsaslı şəkildə fərqlənmir (Paskala əsaslanan sintaksisin xüsusiyyətləri nəzərə alınmır). Eyni zamanda, interfeyslərin həyata keçirilməsi bir sıra xarakterik xüsusiyyətlərə malikdir.

Məsələ ondadır ki, Delphi interfeysləri əvvəlcə COM texnologiyasını dəstəkləmək üçün təqdim edilmişdir. Buna görə də Delphi-də bütün digər interfeyslərin (TObject-in bir növ analoqu) əcdadı olan IIinterface interfeysi artıq bu texnologiya ilə işləmək üçün üç əsas metodu ehtiva edir: QueryInterface, _AddRef, _Release. Nəticədə, bir sinif hər hansı bir interfeysi həyata keçirirsə, mütləq bu üsulları da tətbiq etməlidir. Bu sinif COM ilə işləmək üçün nəzərdə tutulmasa belə.

IIinterface interfeysinin bu xüsusiyyətinə görə Delphi-də interfeyslərdən istifadə əksər hallarda qəsdən istifadə olunmayan imkanların sinfə əlavə olunmasına gətirib çıxarır.

TInterfaceObject kitabxana sinfi var, bu metodların tətbiqini artıq özündə ehtiva edir və ondan miras qaldıqda onları özünüz həyata keçirməyə ehtiyac yoxdur. Lakin Delphi çox sinifli irsiyyəti dəstəkləmədiyi üçün onun istifadəsi çox vaxt artıq tələb olunan funksionallığın dizaynında və həyata keçirilməsində əlavə çətinliklərə səbəb olur.

Bütün bunlar ona gətirib çıxardı ki, interfeyslərin verdiyi bütün imkanlara baxmayaraq, onların praktik istifadə Delphi-də demək olar ki, COM ilə işləməkdən kənara çıxmadı.

Əsasən bu texnologiya ilə işləmək üçün optimallaşdırılmış interfeyslər, daha doğrusu, əlavə etdikləri funksionallıq və memarlıq məhdudiyyətləri digər problemləri həll edərkən özünü doğrultmur.

Buna görə də, bir çox Delphi proqramçıları hələ də, faktiki olaraq, tətbiq arxitekturasının inkişafı üçün güclü və çevik alətdən məhrumdurlar.

Bu məqalə forumlardakı suallara əsaslanır: "DLL-dən sətri necə qaytara bilərəm?", "Bir sıra qeydləri necə köçürmək və qaytarmaq olar?", "Formanı DLL-yə necə köçürmək olar?"

Ömrünüzün yarısını başa düşməyə sərf etməməyiniz üçün - bu yazıda hər şeyi gümüş nimçəyə gətirəcəyəm.

Bu məqalənin mövzularına artıq bu bloqda müxtəlif dərəcələrdə toxunulmuşdur, lakin bu məqalədə onlar bir dəstə toplanmışdır, əsaslandırma verilmişdir. Bir sözlə, bu məqaləyə bir keçid DLL-ləri inkişaf etdirənlərə atıla bilər.

Vacib qeyd: məqaləni oxumaq lazımdır ardıcıl olaraq... Kod nümunələri yalnız olaraq verilir misallar, məqalənin hər addımında (bəndində) nümunələrin kodu yeni detallarla əlavə olunur. Məsələn, məqalənin lap əvvəlində heç bir səhvə yol verilmir, məqalənin gedişində daha adekvat olanlarla əvəz olunan "klassik" üsullar (məsələn, GetLastError, sdtcall konvensiyalarından istifadə və s.) göstərilir. Bu, "yeni" ("qeyri-adi") konstruksiyaların heç bir sual doğurmaması səbəbindən edilir. Əks təqdirdə, hər bir nümunə üçün forma qeydini daxil etmək lazımdır: "bu, aşağıdakı paraqrafda müzakirə olunur, lakin bu, bu paraqrafdadır." Hər halda, məqalənin sonunda məqalədə deyilənlərin hamısı nəzərə alınmaqla yazılmış hazır kodun bağlantısı var. Sadəcə götürüb istifadə edə bilərsiniz. Və məqalə niyə və niyə izah edir. Əgər "niyə və niyə" ilə maraqlanmırsınızsa - nümunəni yükləmək üçün nəticəyə və linkə keçin.

C ++ kodundan Delphi sinifini istifadə edərkən problemim var. bir obyekti qaytaran bir funksiyanı ixrac edən delphi dll demosu.
Delphi Dll kodum belə görünür:

Kitabxana DelphiTest; // hissədən istifadə edir .... növü IMyObject = interfeys proseduru DoThis (n: Tam ədəd); DoThat funksiyası: PWideChar; son; TMyObject = sinif (TInterfacedObject, IMyObject) proseduru DoThis (n: Tam ədəd); DoThat funksiyası: PChar; son; // TMyObject tətbiqi bura gedin ... proseduru TMyObject.DoThis (n: Tam ədəd); showmessage start ("siz DoThis metoduna zəng edirsiniz" + intToStr (n) + "parametr"); son; TMyObject.DoThat funksiyası: PChar; showmessage-ə başlayın (“siz DoThat funksiyasını çağırırsınız”); Nəticə: = Pchar ("Hello im Dothat"); son;

// DLL funksiyasını ixrac edin:

CreateMyObject funksiyası: IMyObject; stdcall, ixrac; var txt: TextFile; AssignFile başlamaq (txt, "C: \ log.log"); Sıfırla (txt); Yazı (txt, "salam"); Nəticə: = TMyObject.Create; son; CreateMyObject ixrac edir;

C ++ layihəmdə IMyObject interfeysini belə elan etdim:

Sinif IMyObject (ictimai: IMyObject (); virtual ~ IMyObject (); virtual boşluq DoThis (int n) = 0; virtual char * DoThat () = 0;);

və mənim əsas funksiyam belədir:

Typedef IMyObject * (__stdcall * CreateFn) (); int main () (HMODULE hLib; hLib = LoadLibrary (L "DelphiTest.dll"); təsdiq (hLib! = NULL); // keç !! CreateFn pfnCreate; pfnCreate = (CreateFn) GetProcAddress ((HINSTANCE) hLib, "Obre" "); if (pfnCreate == NULL) (DWORD errc = GetLastError (); printf ("% u \ n ", errc); // səhv 127 alır) başqa (printf (" uğur yüklənməsi \ n ");) IMyObject * objptr = pfnCreate (); objptr-> DoThis (5); FreeLibrary (hLib); int in; scanf_s ("% i", & in); qaytarmaq 0;)

bu misalda, ixrac edilmiş funksiyaya daxil olmağa çalışarkən iş vaxtı xətası aldım. xəttdəki səhvlər:
IMyObject * objptr = pfnCreate ();

Mənim nümunəmdə nəyin səhv olduğunu deyə bilərsiniz.
və əgər mümkünsə, C++ kodundan Delphi sinfinə (DLL-də) daxil olmaq üçün hər hansı iş nümunəsi.

Həll

Birinci problem metodlar konvensiyasını çağırmaqdır. Delphi interfeysi, Delphi üçün xüsusi bir zəng konvensiyası olan reyestrdən istifadə edir. stdcall-dan istifadə Məsələn, interfeys metodları üçün.

Növbəti problem C++ dilindədir. Sizin C++ interfeysiniz IUnknown-dən alınmalıdır.Həmçinin o, konstruktor və ya dağıdıcı elan etməməlidir.

Bundan başqa, Delphi kodunuz char *, Wchar_t *ilə xəritələnməyən PWideChar tərəfindən ixrac edilir.

Daha uzağa baxsaq, PChar-ın qaytarılması burada əla işləyir, çünki tətbiqiniz hərfi qaytarır. Ancaq daha ciddi kod, yəqin ki, dinamik olaraq ayrılmış sətirdən istifadə etmək istəyəcək, bu zaman dizaynınız qüsurludur.

Kökdə bir fayl yaratmaq üçün unutmayın sistem diski yüksək səviyyəli idarəçi olmalısınız. Beləliklə, bu, başqa bir uğursuzluq nöqtəsidir.

Mən başqa səhvlərin də olduğunu gözləyirəm, amma indiyə qədər tapdıqlarım bunlardır.

Bir və ən çox güclü tərəflər Delphi proqramlaşdırma mühiti onun açıq arxitekturasıdır, bunun sayəsində Delphi sizə “proqramlaşdırma mühitini proqramlaşdırmağa” imkan verən bir növ metaproqramlaşdırmaya imkan verir. Bu yanaşma Delphi-ni proqramların işlənib hazırlanması sistemlərinin keyfiyyətcə yeni səviyyəsinə çıxarır və proqram sistemlərinin yaradılmasının demək olar ki, bütün mərhələlərini dəstəkləyən bu məhsula əlavə alətlər daxil etməyə imkan verir. Belə geniş imkanlar IDE (İnteqrasiya edilmiş İnkişaf Mühiti) və xarici alətlər arasında əlaqə olan Delphi-də həyata keçirilən açıq interfeyslər adlanan konsepsiya sayəsində açılır.

Bu məqalə Delphi-nin açıq interfeyslərinə diqqət yetirir və onların təmsil etdiyi imkanların icmalını təqdim edir. Delphi altı açıq interfeysi müəyyən edir: Tool Interface, Design Interface, Expert Interface, File Interface, Edit Interface və Version Control Interface. Çətin ki, bu məqalə çərçivəsində onların hər birinin imkanlarını ətraflı işıqlandıra və təsvir edə bilək. Delphi mənbə kodları sizə baxılan məsələləri daha ətraflı başa düşməyə kömək edəcək, çünki tərtibatçılar onlara ətraflı şərhlər veriblər. Ümumi interfeysləri təmsil edən sinif bəyannamələri ... \ Delphi \ Source \ ToolsAPI qovluğunun müvafiq modullarında mövcuddur. Dizayn İnterfeysi (DsgnIntf.pas modulu) mülkiyyət redaktorları və komponent redaktorları yaratmaq üçün vasitələr təqdim edir.

Xassələrin və komponentlərin redaktorları ayrıca müzakirəyə layiq bir mövzudur, ona görə də xatırlayırıq ki, xassə redaktoru müvafiq əmlakın dəyərini dəyişdirməyə çalışarkən Obyekt Müfəttişinin davranışına nəzarət edir və komponent redaktoru iki dəfə dəyişdirildikdə aktivləşdirilir. formada yerləşdirilmiş komponentin şəklinə siçanın sol düyməsini sıxın. Versiya İdarəetmə İnterfeysi (VCSintf.pas modulu) versiyaya nəzarət sistemlərinin yaradılması üçün nəzərdə tutulub. 2.0 versiyasından bəri Delphi inteqrasiya olunmuş versiya idarəetmə sistemi Intersolv PVCS-ni dəstəkləyir, ona görə də əksər hallarda öz sisteminizi inkişaf etdirməyə ehtiyac yoxdur. Bu səbəbdən Versiya İdarəetmə İnterfeysini də atlayacağıq. Fayl interfeysi (FileIntf.pas modulu) IDE-nin işləyən fayl sistemini ləğv etməyə imkan verir ki, bu da faylların saxlanması üçün öz üsulunuzu seçməyə imkan verir (məsələn, verilənlər bazası serverində Memo sahələrində). Edit Interface (EditIntf.pas modulu) kodu təhlil etməyə və yaratmağa, kod redaktoru pəncərəsində kursorun mövqeyini təyin etməyə və dəyişdirməyə, mənbə mətnin sintaksisi vurğulamasına nəzarət etməyə imkan verən mənbə kodu buferinə girişi təmin edir.

Xüsusi siniflər formada yerləşdirilən komponentlərə (komponent tipinin müəyyən edilməsi, ana və uşaq komponentlərinə istinadların alınması, xassələrə daxil olmaq, fokusun ötürülməsi, silinməsi və s.), formanın özünə və layihənin resurs faylına interfeyslər təqdim edir. Edit Interface həmçinin modulun mənbə mətninin dəyişdirilməsi, formanın dəyişdirilməsi, komponentin adının dəyişdirilməsi, modulun saxlanması, adının dəyişdirilməsi və ya silinməsi, layihə resurs faylının dəyişdirilməsi kimi hadisələrə reaksiyanı müəyyən edən modul bildirişçiləri müəyyən etməyə imkan verir. , və s. Tool Interface (ToolIntf. pas) tərtibatçılar üçün bir vasitə təmin edir ümumi məlumat IDE-nin vəziyyəti haqqında və layihələri və fərdi faylları açmaq, saxlamaq və bağlamaq, modul yaratmaq, cari layihə haqqında məlumat almaq (modulların və formaların sayı, onların adları və s.), qeydiyyat kimi hərəkətlərin yerinə yetirilməsi fayl sistemi, fərdi modullara interfeyslərin təşkili və s. Modul bildirişçilərə əlavə olaraq, Alət İnterfeysi faylları və layihələri açmaq / bağlamaq, masaüstü layihə faylını yükləmək və saxlamaq, layihə modullarını əlavə etmək / istisna etmək, paketləri quraşdırmaq / silmək, layihə tərtib etmək kimi hadisələr barədə xəbərdar edən əlavə bildirişçiləri müəyyən edir. Modul bildirişçilərdən fərqli olaraq əlavə bildirişlər bəzi hadisələrin icrasını ləğv etməyə imkan verir.

Bundan əlavə, Alət İnterfeysi Delphi IDE-nin əsas menyusuna daxil olmaq üçün bir vasitə təqdim edir və əlavə elementlərin ona daxil edilməsinə imkan verir. Ekspert İnterfeysi (ExptIntf.pas modulu) Ekspert Məsləhətçiləri yaratmaq üçün əsasdır - proqram modulları funksionallığını genişləndirmək üçün IDE-yə daxil edilmişdir. Ekspert nümunəsi verilənlər bazası cədvəlinin məzmununa baxmaq və dəyişdirmək üçün forma yaradan Delphi Verilənlər Bazasının Forma Sihirbazını göstərmək olar. Mütəxəssis sinifini təyin etdikdən sonra, Delphi mütəxəssisimiz haqqında "bildiyinə" əmin olmalısınız. Bunun üçün o, RegisterLibraryExpert prosedurunu çağıraraq, parametr kimi ekspert sinfinin nümunəsini ötürməklə qeydiyyatdan keçməlidir. Bir illüstrasiya olaraq, sadə esStandard üslublu Ekspert Məsləhətçisi yaradaq, o, müvafiq Delphi menyu elementi seçildikdə onun işlədiyi barədə mesajı göstərir. Yuxarıdakı cədvəldən göründüyü kimi, esStandard üslubu ləğv etmək üçün altı üsul tələb edir:

Ekspertin “hərəkətə keçməsi” üçün Komponent / Komponent Quraşdır ... menyu elementini seçin, Gözdən keçir dialoq qutusunda eksperti ehtiva edən modulu (bizim halda, exmpl_01.pas) seçin, OK düyməsini basın və sonra Dclusr30.dpk paketini Yardım bölməsində Delphi-nin əsas menyusunda tərtib edərkən Sadə Ekspert 1 maddəsi görünməlidir, seçildikdə “Standart Ekspert işə salındı!” məlumat mesajı görünür. Delphi-nin niyə ekspert menyusunu Help bölməsinə qoyması sirr olaraq qalır. Menyu elementinin Delphi-nin istədiyiniz yerdə deyil, istənilən yerdə görünməsi xoşunuza gəlmirsə, aşağıdakı seçim mümkündür: menyu elementinin avtomatik yaradılmasını istisna edən əlavə stilində ekspert yaradın və əlavə edin. Alət interfeysindən istifadə edərək "əl ilə" menyu elementi. Bu, hər hansı bir şəkildə əsas menyuda yeni elementin yerini təyin etməyə imkan verəcəkdir.

Menyu elementi əlavə etmək üçün, Alətlər İnterfeysinin əsasını təşkil edən TIToolServices sinfi və IDE -nin əsas menyusuna və elementlərinə interfeyslər tətbiq edən TIMainMenuIntf, TIMenuItemIntf sinifləri istifadə olunur. TIToolServices sinfinin ToolServices nümunəsi işə salındıqda IDE-nin özü tərəfindən yaradılır. Qeyd edək ki, tərtibatçı Delphi-nin əsas menyusuna və elementlərinə interfeyslərin buraxılması üçün yalnız məsuliyyət daşıyır. Yol boyu ekspertin funksional yükünü bir qədər çətinləşdirək: onun menyu elementi aktivləşdirildikdə o, hazırda mühitdə açıq olan layihənin adı haqqında məlumatı göstərəcək: Bu nümunədə mərkəzi yeri AddIDEMenuItem funksiyası tutur. , Delphi IDE-nin əsas menyusuna menyu elementi əlavə edir. Parametrlər olaraq, yeni menyu elementinin mətni, onun identifikatoru, yeni elementin daxil edildiyi elementin identifikatoru, açarın simvolik təsviri, Ctrl düyməsi ilə birlikdə menyuya tez daxil olmaq üçün istifadə edilə bilər. yeni element və yeni elementin seçiminə uyğun gələn hadisə idarəedicisi ona ötürülür. Baxış bölməsinə Saatlar elementindən əvvəl yeni menyu elementi əlavə etdik.

İndi bildirişçilərlə tanış olaq. Layihələrin bağlanması/açılması anlarını izləyən və müvafiq olaraq aktiv layihənin adını saxlayan sahəni tənzimləyən əlavə bildirişçini təyin edək (əvvəlki nümunə ilə müqayisədə dəyişikliyə məruz qalmamış metodların həyata keçirilməsini buraxacağıq): bildirişçini tətbiq etdikdə biz TIAddInNotifier nəsli olan TAddInNotifier sinfini təyin etdik və FileNotification ilə üst-üstə düşdük. Əlavə bildirişçinin cavab verə biləcəyi hadisə baş verdikdə IDE bu metodu çağıracaq (hər belə hadisə TFileNotification tipli müvafiq sabitlə işarələnir). TAddInNotifier sinfində Ekspert sahəsi üçün istifadə olunur rəy ekspert ilə (metod TAddInNotifier.FileNotification). Mütəxəssisin destruktorunda bildiricinin qeydiyyatı silinir və bildirici məhv edilir. İndi modul bildirişçilərin istifadəsini təsvir edək. Layihə faylının saxlanmasının hər bir aktı haqqında mesajlar verən əlavə ekspert yaradaq (qısalıq üçün artıq bizə tanış olan metodların tətbiqini təqdim etməyəcəyik): Bu misalda əlavə eksperti qeyd olunanlara uyğun hadisələrə nəzarət edir. layihələrin açılması / bağlanması.

Hər dəfə layihə açılanda layihə faylına uyğun modul bildiriş qeydə alınır. Tətbiq baxımından modul bildirişlər əlavə bildiricilərə bənzəyir: biz TIModuleNotifier-in nəslindən olan TModuleNotifier sinfini təyin edirik və onun Notify və ComponentRenamed metodlarını ləğv edirik. Bu modulla bağlı müəyyən hadisələr qaldırıldıqda IDE Notify metodunu çağırır; bu metodun daxilində bu və ya digər hadisəyə reaksiya müəyyən edilir. ComponentRenamed metodu modul formasında komponentin adı dəyişdikdə çağırılır. Nəzərə alın ki, biz bu üsuldan istifadə etmirik, lakin biz onu ləğv etməliyik, əks halda komponentin adı dəyişdikdə, əsas sinfin mücərrəd metodu çağırılacaq ki, bu da gözlənilməz nəticələrə gətirib çıxarır.

Modul bir bildiricinin qeydiyyatı, bir əlavə bildirişinin qeyd edilməsindən bir az daha mürəkkəbdir: əvvəlcə modul interfeysini (TIModuleInterface) əldə edirik, sonra bildirişçini modul interfeysindən istifadə edərək qeydiyyatdan keçiririk. Layihə bağlandıqda, modul bildirişçinin qeydiyyatı qeydiyyatdan çıxarılır (yenidən TIModuleInterface istifadə olunur) və bildirişçi məhv edilir. Nəhayət, kod redaktoru pəncərəsindəki kursorun yerini necə təyin edə biləcəyinizi sizə göstərəcəyik. Gəlin Mütəxəssis Məsləhətçisi yaradaq ki, müvafiq menyu elementini seçdikdən sonra aktiv faylın adını və içindəki kursorun mövqeyini əks etdirən mesajı göstərsin (yalnız proqram üçün vacib olanların həyata keçirilməsi). bu misalüsullar): Kursorun yerini müəyyən etmək üçün aşağıdakı interfeys ardıcıllığını almalıyıq: modul interfeys (TIModuleInterface); kod redaktoru interfeysi (TIEditorInterface); redaktor pəncərəsində modul görünüşünün interfeysi (TIEditView).

Ekspert menyu maddəsi seçildikdə mənbə mətni olan fayl (* .pas) aktivdirsə, aktiv faylın adını və kursorun indiki mövqeyini əks etdirən bir mesaj göstərilir. Əgər qeyri-pas faylı aktivdirsə, mesaj göstərilmir. TIToolServices sinifinin GetCurrentFile metodu aktiv faylın adını almaq üçün istifadə olunur. Bu, açıq interfeyslərdən istifadə yollarının nəzərdən keçirilməsini yekunlaşdırır. CD-ROM, təqdim olunan bütün nümunələr üçün mənbə kodunu ehtiva edir. CD-ROM, həmçinin istifadəçiyə Delphi modullarının mənbə kodunu əlfəcin qoymağa imkan verən əlavə ekspertdən ibarət daha mürəkkəb və ətraflı nümunəni ehtiva edir. Bookmark Expert-in quraşdırılması və istifadəsi üçün qısa təlimat bkmrks97.htm faylında var. Beləliklə, bu məqalə açıq interfeysləri təsvir edir və onlardan istifadə nümunələrini təqdim edir. Bir daha təkrar edəcəyik: açıq interfeyslərin mənbə kodunun mövcudluğu sayəsində sizi maraqlandıran detalları asanlıqla anlaya bilərsiniz. Ümid edirik ki, açıq interfeyslərin təqdim etdiyi müxtəlif imkanlar sizə birdən çox cəsarətli və faydalı fikir verəcəkdir.


2021
maccase.ru - Android. Brendlər. Dəmir. xəbərlər