Caracteristici de lucru cu interfețe în Delphi. Cele mai bune soluții IT pentru afaceri Dimensiunile ferestrelor nu trebuie să depășească dimensiunea ecranului

doar pentru rezultate

respectarea strictă a termenelor limită

Transparenţă

implementarea proiectului

suport tehnic cadou

Programare, îmbunătățiri, consultații pe 1C

Cum lucrăm

1. Discutam problema telefonic. În prezența acces de la distanță- afișați pe ecranul computerului.

2. Evaluăm munca în ruble dacă proiectul este mare, dacă nu - numărul aproximativ de ore.

3. Ne facem treaba.

4. Acceptați munca în programul dumneavoastră, dacă există neajunsuri, le corectăm.

5. Noi emitem o factura, tu platesti.

Costul muncii

1. Toate lucrările sunt împărțite în 3 categorii: consultație, actualizarea unei configurații tipice, elaborarea sau programarea unui nou raport, procesare, butoane etc.

3. Pentru munca de peste 10 ore se pregateste in prealabil o sarcina tehnica cu descrierea si costul lucrarii. Lucrarea începe după aprobarea TOR cu dvs.

Suport tehnic

1. Dacă găsiți erori în lucrările acceptate anterior, în termen de 3 luni, le corectăm gratuit.

2. Pentru clienții obișnuiți, remediam orice neajunsuri în activitatea noastră gratuit în decurs de un an.

Programe pentru gestionarea afacerii dvs.

Cumpărați 1C:Enterprise

Suntem dealer oficial al 1C, puteți achiziționa de la noi diverse produse software si licente. Pe lângă cumpărarea unei „cutie”, vă vom ajuta să configurați programul, să consultați și să faceți setările de bază.

  • Contabilitate
  • Automatizarea magazinului
  • Angro
  • Asistență la instalare și configurare inițială inclus in pachet!
  • Ajustarea configurațiilor la nevoile clientului, dezvoltarea de noi module în lipsa funcțiilor necesare în configurația standard.
1c contabilitate 1C: Managementul comerțului 1C: Comerț cu amănuntul 1C: Managementul salariilor și al resurselor umane
De la 3300 de ruble. De la 6700 rub. De la 3300 de ruble. De la 7400 rub.

Furnizarea unui server.

Server de configurare instantanee + 1C.

Fără server? Nu contează, vom selecta și vom configura rapid un server în „cloud”. Pentru o taxă mică, obțineți o soluție foarte fiabilă.

  • Disponibilitate 24/7
  • Nu este nevoie să-l păstrezi pe al tău administrator de sistem(economiile vor acoperi costul serverului dvs.).
  • Configurare și instalare rapidă a 1C pe server, în 3 zile vei avea deja un sistem complet funcțional.
  • Oricand te poti muta la server local dacă soluţia nu este satisfăcătoare.

SMS de la 1C

Doriți ca clienții să învețe din timp despre promoții și reduceri? Clienții nu se întorc? Personalizați trimiterea de SMS-uri direct de la 1C!

Compania noastră va putea configura rapid trimiterea de SMS-uri către clienții dvs. direct de la 1C. Exemple de evenimente care pot fi automatizate:

  • Recunoștință pentru achiziția și acumularea de bonusuri imediat după următoarea achiziție.
  • Acumularea de bonusuri pe card ca cadou pentru o zi de naștere/o altă zi importantă sau de sărbătoare.
  • Notificare depozit.
  • Expirarea voucherului cadou.
  • Notificare de primire a plății anticipate și rezervare a mărfurilor.
  • Adresa cu indicatii catre magazin/birou, numere de telefon.
  • etc.

Setarea în 1C poate fi făcută de specialiștii noștri sau de angajații noștri. Vă puteți familiariza cu tarifele pe pagina SMS-tarife.

  • Garanție Livrare SMS, banii se retrag doar pentru SMS-urile livrate.
  • Facturare separată pentru fiecare SMS.
  • Refacerea echilibrului în diferite moduri.
  • Vizualizați istoricul tuturor SMS-urilor trimise în orice moment.
  • Numele expeditorului în loc de numărul numeric de pe telefonul destinatarului.

Creare interfata utilizatorul este redus să aleagă din paleta de componente componentele Delphi necesare pentru ca programul să funcționeze, servind interfata management, precum și interfata afișarea informațiilor și transferarea acestora în Formular cu aspectul ulterioar.

Interfața de utilizator pe care o creați ar trebui să utilizeze elemente standard, familiare utilizatorului și să ofere confort maxim. Toate acestea sunt în cele din urmă determinate de un astfel de criteriu precum eficacitatea interfeței - rezultatul maxim cu efort minim.
Principii de creație interfață ușor de utilizat cunoscut. ca cel mai mult principii generaleîn timp ce creează interfețe cu utilizatorul trei puncte principale pot fi luate în considerare:

  1. Programul ar trebui să ajute la îndeplinirea sarcinii, nu să devină sarcina.
  2. Când lucrează cu programul, utilizatorul nu ar trebui să se simtă ca un prost.
  3. Programul ar trebui să funcționeze în așa fel încât utilizatorul să nu considere computerul un prost.
Primul principiu- aceasta este așa-numita „transparență” a interfeței. Interfața cu utilizatorul trebuie să fie intuitivă, ușor de învățat și să nu creeze utilizatorului probleme pe care acesta va trebui să le depășească în procesul de lucru. Utilizați standard, fără componente excesive de înfrumusețare, folosiți familiar, folosit programe similare tehnici de management și vei atinge criteriile de performanță primul principiu.

Al doilea principiu se află în neglijenţă abilități intelectuale utilizatorii. Din propria mea experiență, știu că de multe ori utilizatorii nu numai că nu știu să lucreze la un computer, ci pur și simplu le este frică să facă ceva pe cont propriu. Prin urmare, interfața cu utilizatorul ar trebui să fie cât mai prietenoasă posibil.
Mai mult decât atât, temerile utilizatorilor sunt adesea justificate, deoarece costul programului și al computerului în sine, nu poate fi comparat cu costul, de exemplu, al unei baze de date creată în mulți ani de efort. De aceea, programatorul, atunci când creează o interfață cu utilizatorul, trebuie să includă întotdeauna în programul „protecție prost” - împotriva acțiunilor greșite și a introducerii utilizatorului de date incorecte. Dar unii programatori se lasă prea duși de o astfel de protecție, o fac prea intruzivă și, ca urmare, funcționarea programului seamănă cu faimosul „pas stânga, pasul dreapta este considerat o scăpare”! Și ceea ce un programator creează ca soluție la o problemă, începe să creeze probleme.
A se conforma al doilea principiu nu este nevoie să permiteți programului să „corecteze” acțiunile utilizatorului și să indice exact ce să acționeze pentru el, conducându-l într-un cadru îngust. De asemenea, nu ar trebui să vă lăsați prea conduși de afișarea mesajelor de indiciu informațional, în special a celor de dialog, deoarece acest lucru distrage atenția utilizatorului de la muncă. Și este mai bine să oferiți posibilitatea de a dezactiva complet solicitările.

Al treilea principiu este de a crea un program cu cele mai mari abilități „mentale” posibile. În ciuda dezvoltării rapide tehnologia calculatoarelor, chiar și programele larg răspândite pot fi numite doar foarte condiționat având inteligență artificială. Acestea interferează cu experiența utilizatorului prin afișare casete de dialog cu întrebări stupide care provoacă nedumerire chiar și în cele mai simple situații. Drept urmare, utilizatorii din inimile lor exclamă: „Ei bine, mașina asta este proastă!”
Personal, sunt enervat de întrebările constante ale aproape tuturor. editori de text despre salvarea textului modificat, deși textul original și actualul nu diferă cu un singur caracter. Da, am tastat ceva, dar apoi am returnat totul înapoi, este chiar imposibil să-mi dau seama! Trebuie să verific să văd dacă am greșit ceva.

Încercați să respectați următoarele reguli:

Elemente de interfață standard
Utilizați standardul pentru element dat interfața componentelor. După ce vă cunoaște programul, utilizatorul nu va pierde timpul să se cunoască, ci va începe imediat să lucreze - acesta este unul dintre semnele unui program realizat profesional.
Paletă mică de instrumente
Încercați să nu folosiți prea mult un numar mare de diverse componente. Și, desigur, folosind o componentă standard undeva într-un singur loc, într-un caz similar folosește-o și ea.
Distanță egală între comenzi
Aranjați elementele de interfață la aceeași distanță unul de celălalt. Componentele împrăștiate aleatoriu creează senzația unui produs neprofesional. Și invers, plasarea atent calibrată pe Forma butoanelor, comutatoarelor, casetelor de selectare și a altor componente care alcătuiesc interfața este un semn de calitate a muncii.
ordinea filelor. "ordinea corectă
TabOrder este ordinea în care cursorul ecranului se deplasează peste comenzi atunci când este apăsată o tastă Tab. Într-un program scris corect, cursorul se deplasează, urmând logica lucrului utilizatorului cu programul. Când creează un program, programatorul schimbă adesea componente, elimină unele și adaugă altele după cum este necesar. Ca rezultat, în programul terminat, cursorul sare aleatoriu peste Formular. După finalizarea programului, nu uitați să setați TabOrder.
Selectarea fontului
Lăsați fonturile în pace. Fonturile implicite proprii ale Delphi vor funcționa pentru orice sistem pe care ar putea rula programul dvs. Folosiți fontul aldine numai pentru a evidenția elementele importante. Aplicație cursiv si in special subliniere, pe care utilizatorul îl poate confunda cu un hyperlink - formă proastă.
Alegerea culorilor
În ceea ce privește culorile elementelor de interfață, la fel ca și în cazul fonturilor, este mai bine să le lăsați standard, implicit. Delphi folosește paleta sistemului Windows și, prin schimbarea acesteia, utilizatorul poate personaliza cu ușurință culorile pentru el însuși.
Management alternativ
Un program realizat profesional ar trebui să poată fi controlat nu numai cu mouse-ul, ci și cu tastatura. Nu ar trebui să existe funcții disponibile pentru execuție doar cu mouse-ul (desenul în editorii grafici nu contează!). Pentru cele mai utilizate funcții, ar trebui furnizate „taste rapide” pentru accesul lor rapid.
Blocuri de construcție a interfeței
În ceea ce privește elementele specifice ale interfeței cu utilizatorul, calitatea interacțiunii utilizatorului cu programul depinde de:
  • conformitatea elementului de control cu ​​sarcina acestuia;
  • regulile după care funcţionează controlul.
    Această pagină discută regulile pentru crearea unor elemente de interfață.
Și acum vreau să arăt ce instrumente oferă Delphi pentru gestionarea componentelor din formular, poziția relativă a acestora și comportamentul cursorului atunci când o tastă este apăsată. Tab.

Pentru a aranja componentele unul față de celălalt în ordinea corectă, mai întâi trebuie să le evidențiezi. Puteți pur și simplu să trageți mouse-ul peste zona din Formular care conține componentele selectate. Sau ținând Schimb", specificați cu același mouse fiecare componentă de selectat. Faceți clic repetat pe componenta selectată (în timp ce apăsați " Schimb") îl deselectează.

Componentele selectate pot fi controlate ca întreg - mutate în jurul formularului, atribuite valori acelorași proprietăți, copiate (pentru instalare, de exemplu, pe alt formular), chiar și șterse.

Acum faceți clic dreapta pe una dintre componente și din meniul „pop-up” selectați Poziție -> Aliniere... Va apărea o casetă de dialog care vă permite să reglați poziția componentelor din grup pe orizontală și pe verticală. De exemplu, trebuie să ne aliniem cele patru butoane la stânga și să ne asigurăm că există între ele aceeasi distanta vertical. Pentru a face acest lucru, selectați butoanele radio Orizontală: partea stângăși Verticală: spațiu în mod egal.

Selectarea unui articol Centru, vom aranja componentele astfel încât centrele lor să fie situate pe aceeași linie orizontal sau vertical, iar punctul Centru în fereastră mută componentele în centrul ferestrei, orizontal sau vertical.

În același meniu, linia Tab O Ordin... determină apariția unei casete de dialog care controlează mișcarea cursorului prin elementele interfeței atunci când este apăsată o tastă Tab. Când formularul apare pe ecran, cursorul se va afla în mod natural pe componenta situată pe prima linie a casetei de dialog. Și apoi se va muta în jos în listă. În caseta de dialog, două săgeți albastre „sus” și „jos” controlează poziția componentei selectate. A scoate in evidenta componentă necesară, utilizați săgețile pentru a vă deplasa la linia dorită din listă și așa mai departe.

La selectarea unui element de meniu Control -> Apare un submeniu cu două elemente:

  • Aduceți în față
  • trimite înapoi
Acestea sunt metode componente care sunt disponibile și în mod programatic. Button1.SendToBack mută butonul în „fond” și Button1.BringToFront- aduceți în față”. Adică, dacă o componentă este plasată deasupra alteia, aceste metode le schimbă. Cazurile în care se poate aplica acest lucru sunt destul de evidente.

Programarea orientată pe obiecte (OOP), pe lângă conceptul de clasă, oferă și conceptul fundamental de interfață.

Ce este o interfață și care sunt caracteristicile lucrului cu ea în limbajul de programare Delphi?

O interfață este o construcție semantică și sintactică în codul de program folosit pentru a specifica serviciile furnizate de o clasă sau componentă (Wikipedia).

De fapt, o interfață definește o listă de proprietăți și metode care ar trebui utilizate atunci când se lucrează cu o clasă care implementează această interfață, precum și semnătura acestora (nume, tip de date, parametri acceptați (pentru proceduri și funcții), etc.). Astfel, o clasă care implementează o interfață trebuie neapărat să implementeze toate componentele sale. Mai mult, în strictă conformitate cu modul în care sunt descrise în el.

Foarte des, interfețele sunt comparate cu clase abstracte, dar pentru toate asemănările, această comparație nu este în întregime corectă. În clasele abstracte, este disponibil cel puțin controlul asupra vizibilității membrilor. În același timp, domeniile nu sunt definite pentru interfețe.

Interfețele vă permit să faceți arhitectura mai flexibilă, deoarece unifică accesul la o anumită funcționalitate și, de asemenea, vă permit să evitați o serie de probleme asociate cu moștenirea clasei (interfețele pot fi, de asemenea, moștenite una de la alta).

Delphi folosește cuvântul cheie interfață pentru a declara o interfață. Acesta este același cuvânt cheie care definește o secțiune de modul care poate fi accesată din exterior (între Cuvinte cheie interfață și implementare). Cu toate acestea, atunci când declarați o interfață, este utilizată o sintaxă diferită, similară cu declararea claselor.

Delphi/Pascal

IMyNewInterface = procedura de interfata InterfaceProc; Sfârșit;

IMyNewInterface =interfață

procedura InterfaceProc ;

Sfârșit ;

Astfel, sintaxa declarației interfeței în sine nu are diferențe fundamentale față de alte limbaje de programare (funcțiile de sintaxă bazate pe Pascal nu contează). În același timp, implementarea interfețelor are o serie de trăsături caracteristice.

Faptul este că interfețele Delphi au fost introduse inițial pentru a suporta tehnologia COM. Prin urmare, interfața IInterface, care în Delphi este strămoșul tuturor celorlalte interfețe (un fel de analog al TObject), conține deja trei metode de bază de lucru cu această tehnologie: QueryInterface, _AddRef, _Release. Ca rezultat, dacă o clasă implementează orice interfață, atunci trebuie să implementeze și acele metode. Chiar dacă această clasă nu este proiectată să funcționeze cu COM.

Datorită acestei caracteristici a interfeței IInterface, în Delphi utilizarea interfețelor, în cele mai multe cazuri, duce la adăugarea de caracteristici evident neutilizate la clasă.

Există o clasă de bibliotecă TInterfaceObject, care conține deja implementarea acestor metode și, atunci când se moștenește de la aceasta, nu este nevoie să le implementați singur. Dar, deoarece Delphi nu acceptă moștenirea mai multor clase, utilizarea sa cauzează adesea doar complexitate suplimentară în proiectarea și implementarea funcționalității deja necesare.

Toate acestea au dus la faptul că, în ciuda tuturor posibilităților oferite de interfețe, utilizarea lor practică în Delphi aproape că nu a depășit lucrul cu COM.

Fiind optimizate pentru a lucra în principal cu această tehnologie, interfețele, sau mai bine zis funcționalitatea și restricțiile arhitecturale pe care le adaugă fără greș, nu se justifică atunci când rezolvă alte probleme.

Prin urmare, mulți programatori Delphi sunt încă, de fapt, lipsiți de un instrument puternic și flexibil pentru dezvoltarea arhitecturii aplicațiilor.

Acest articol se bazează pe întrebări de pe forumuri: „Cum returnez un șir de caractere dintr-un DLL?”, „Cum transmit și returnez o matrice de înregistrări?”, „Cum transmit un formular unui DLL?”.

Ca să nu-ți petreci jumătate din viață să-ți dai seama - în acest articol voi aduce totul pe un platou de argint.

Subiectele acestui articol, în grade diferite, au fost deja atinse de mai multe ori în acest blog, dar în acest articol sunt adunate la grămadă, sunt date justificări. Pe scurt, un link către acest articol poate fi aruncat celor care dezvoltă DLL.

Notă importantă: articolul trebuie citit rand pe rand. Exemplele de cod sunt furnizate numai ca exemple, la fiecare pas (punct) al articolului se adauga codul de exemple cu detalii noi. De exemplu, chiar la începutul articolului nu există o gestionare a erorilor, sunt indicate metode „clasice” (cum ar fi folosirea GetLastError , convențiile sdtcall etc.), care sunt înlocuite cu altele mai adecvate în cursul articolului. Acest lucru se face din motivul că modelele „noi” („neobișnuite”) nu ridică întrebări. În caz contrar, la fiecare exemplu, ar trebui să se insereze o notă de forma: „asta se discută în acel paragraf de mai jos, dar că – în acesta aici”. În orice caz, la sfârșitul articolului există un link către un cod gata făcut, scris ținând cont de tot ce se spune în articol. Poți doar să-l iei și să-l folosești. Și articolul explică de ce și de ce. Dacă nu sunteți interesat de „de ce și de ce” - derulați până la sfârșit până la concluzie și un link pentru a descărca exemplul.

Unul și cel mai mult punctele forte Mediul de programare Delphi este arhitectura sa deschisă, datorită căreia Delphi permite un fel de metaprogramare, permițându-vă să „programați mediul de programare”. Această abordare aduce Delphi la un nivel calitativ nou de sisteme de dezvoltare a aplicațiilor și vă permite să încorporați suplimentar unelte care suportă aproape toate etapele creării sistemelor de aplicații. O gamă atât de largă de posibilități se deschide datorită conceptului de așa-numite interfețe deschise implementat în Delphi, care reprezintă legătura dintre IDE (Integrated Development Environment) și instrumentele externe.

Acest articol se concentrează pe interfețele deschise ale Delphi și oferă o prezentare generală a caracteristicilor pe care le oferă. Delphi definește șase interfețe publice: interfață instrument, interfață de proiectare, interfață expert, interfață fișier, interfață de editare și interfață de control al versiunilor. Este puțin probabil ca în cadrul acestui articol să putem acoperi în detaliu și să ilustrăm posibilitățile fiecăruia dintre ele. Textele sursă ale Delphi vă vor ajuta să înțelegeți mai bine problemele luate în considerare, deoarece dezvoltatorii le-au oferit comentarii detaliate. Declarațiile de clasă care reprezintă interfețe publice sunt conținute în modulele corespunzătoare din directorul ...\Delphi\Source\ToolsAPI. Interfața de proiectare (modulul DsgnIntf.pas) oferă mijloacele de a crea editori de proprietăți și editori de componente.

Editorii de proprietăți și de componente sunt un subiect demn de o discuție separată, așa că reamintim doar că editorul de proprietăți controlează comportamentul inspectorului de obiecte atunci când încercați să modificați valoarea proprietății corespunzătoare, iar editorul de componente este activat atunci când dublu click butonul stâng al mouse-ului pe imaginea componentei plasată pe formular. Interfața de control al versiunilor (modulul VCSIntf.pas) este concepută pentru a crea sisteme de control al versiunilor. Începând cu versiunea 2.0, Delphi acceptă sistemul integrat de control al versiunilor Intersolv PVCS, astfel încât în ​​majoritatea cazurilor nu este necesar să vă dezvoltați propriul sistem. Din acest motiv, vom omite, de asemenea, luarea în considerare a interfeței de control al versiunilor. Interfața de fișiere (modulul FileIntf.pas) vă permite să redefiniți sistemul de fișiere de lucru al IDE, ceea ce face posibilă alegerea propriului mod de stocare a fișierelor (în câmpurile Memo de pe serverul bazei de date, de exemplu). Interfața de editare (modulul EditIntf.pas) oferă acces la bufferul de text sursă, care vă permite să analizați și să generați cod, să determinați și să schimbați poziția cursorului în fereastra editorului de cod și să controlați evidențierea sintaxei textului sursă.

Clasele speciale oferă interfețe pentru componentele plasate pe formular (definirea tipului de componentă, obținerea referințelor la componentele părinte și secundare, accesarea proprietăților, trecerea focalizării, ștergerea etc.), la formularul în sine și la fișierul de resurse al proiectului. Interfața de editare vă permite de asemenea să identificați așa-numiții notificatori de module care determină reacția la evenimente precum schimbarea codului sursă al modulului, modificarea formularului, redenumirea componentei, salvarea, redenumirea sau ștergerea modulului, modificarea resursei proiectului fișier etc. Tool Interface (modulul ToolIntf. pas) oferă dezvoltatorilor mijloacele pentru a obține informatii generale despre starea IDE-ului și efectuarea de acțiuni precum deschiderea, salvarea și închiderea proiectelor și fisiere individuale, crearea unui modul, obținerea de informații despre proiectul curent (numărul de module și formulare, denumirea acestora etc.), înregistrarea Sistemul de fișiere, organizarea interfețelor către module individuale etc. În plus față de notificatorii de module, Interfața instrument definește notificatori de suplimente care notifică despre evenimente precum deschiderea/închiderea fișierelor și proiectelor, încărcarea și salvarea unui fișier desktop de proiect, adăugarea/excluderea modulelor de proiect, instalarea/dezinstalarea pachetelor, compilarea unui proiect, iar în Spre deosebire de notificatoarele modulare, notificatorii de completare vă permit să anulați execuția unor evenimente.

În plus, interfața instrumentului oferă un mijloc de accesare a meniului principal al IDE-ului Delphi, permițându-vă să încorporați elemente suplimentare în acesta. Interfața Expert (modulul ExptIntf.pas) stă la baza creării Expert Advisors - module software, încorporat în IDE pentru a-și extinde funcționalitatea. Un exemplu de expert este Delphi Database Form Wizard, care generează un formular pentru vizualizarea și modificarea conținutului unui tabel al bazei de date. După ce am definit clasa de experți, trebuie să ne asigurăm că Delphi „învață” despre expertul nostru. Pentru a face acest lucru, trebuie să fie înregistrat apelând procedura RegisterLibraryExpert, trecându-i ca parametru o instanță a clasei expert. Ca o ilustrație, să creăm un expert simplu în stilul esStandard, care, atunci când este selectat elementul de meniu Delphi corespunzător, afișează un mesaj că rulează. După cum puteți vedea din tabelul de mai sus, stilul esStandard necesită șase metode pentru a fi înlocuite:

Pentru ca expertul să fie „activat”, trebuie să selectați elementul de meniu Component/Install Component ... , să selectați modulul care conține expertul (în cazul nostru exmpl_01.pas) în dialogul Browse, să faceți clic pe OK și după compilare pachetul dclusr30.dpk din meniul principal Delphi din secțiunea Ajutor, ar trebui să apară elementul Simple Expert 1, când este selectat, apare mesajul informativ „Standard Expert a început!”. De ce Delphi pune elementul de meniu expert în secțiunea Ajutor rămâne un mister. Dacă nu vă place faptul că elementul de meniu apare oriunde în Delphi și nu unde doriți, este posibilă următoarea opțiune: creați un expert în stil de supliment, care elimină crearea automată a elementului de meniu și adăugați element de meniu „manual” folosind interfața instrumentului. Acest lucru vă va permite să setați locația noului element în meniul principal într-un mod arbitrar.

Pentru a adăuga un element de meniu, se folosește clasa TIToolServices - baza interfeței instrument - și clasele TIMainMenuIntf, TIMenuItemIntf care implementează interfețe pentru meniul principal IDE și elementele acestuia. Instanța ToolServices a clasei TIToolServices este creată de IDE-ul însuși atunci când este inițializată. Rețineți că este responsabilitatea dezvoltatorului să lanseze interfețele în meniul principal Delphi și elementele acestuia. Pe parcurs, să complicăm puțin încărcarea funcțională a Expert Advisor: atunci când elementul său de meniu este activat, acesta va emite un certificat despre numele proiectului deschis în acest momentîn mediu: În acest exemplu, locul central este ocupat de funcția AddIDEMenuItem, care adaugă un element de meniu în meniul principal al IDE-ului Delphi. Ca parametri, i se trece textul noului articol de meniu, identificatorul acestuia, identificatorul articolului înaintea căruia este introdus noul articol, reprezentarea simbolică a cheii, care, împreună cu Tasta Ctrl poate fi folosit pentru acces rapid la noul articol și un handler de evenimente corespunzător selecției noului articol. Am adăugat un nou element de meniu la secțiunea Vizualizare înainte de articolul Ceasuri.

Acum să facem cunoștință cu notificatorii. Să definim un notificator de supliment care urmărește momentele de închidere/deschidere a proiectelor și ajustează câmpul care stochează numele în consecință proiect activ(Voi omite implementarea metodelor care nu s-au schimbat în comparație cu exemplul anterior pentru concizie): Pentru a implementa notificatorul, am definit clasa TAddInNotifier, care este un descendent al lui TIAddInNotifier, și am suprascris metoda FileNotification. IDE-ul va apela această metodă de fiecare dată când apare un eveniment la care notificatorul de supliment este capabil să răspundă (fiecare astfel de eveniment este notat de constanta de tip TFileNotification corespunzătoare). Câmpul Expert din clasa TAddInNotifier este folosit pentru părere cu un expert (metoda TAddInNotifier.FileNotification). În destructorul expertului, înregistrarea notificatorului este neînregistrată, iar notificatorul este distrus. Acum să ilustrăm utilizarea notificărilor modulare. Să creăm un expert add-in care generează mesaje despre fiecare act de salvare a unui fișier de proiect (pentru concizie, nu oferim implementarea metodelor deja familiare nouă): În acest exemplu, expertul add-in monitorizează evenimentele corespunzătoare deschiderea/închiderea proiectelor.

De fiecare dată când se deschide un proiect, se înregistrează un notificator de modul corespunzător fișierului de proiect. În ceea ce privește implementarea, notificatorii modulari sunt similari notificărilor de completare: definim o clasă TModuleNotifier care este un descendent al TIModuleNotifier și suprascriem metodele Notify și ComponentRenamed. IDE-ul apelează metoda Notify atunci când apar anumite evenimente legate de acest modul; în cadrul acestei metode, se determină reacția la un anumit eveniment. Metoda ComponentRenamed este apelată atunci când numele componentei care se află pe formularul modulului se modifică. Vă rugăm să rețineți că nu folosim această metodă, dar trebuie să o suprascriem, altfel, atunci când numele componentei se schimbă, se va apela metoda abstractă a clasei de bază, ceea ce duce la consecințe imprevizibile.

Înregistrarea unui notificator de modul este ceva mai complicată decât înregistrarea unui add-in de notificator: mai întâi obținem interfața modulului (TIModuleInterface) și apoi înregistrăm notificatorul folosind interfața modulului. Când proiectul este închis, notificatorul modulului este neînregistrat (din nou folosind TIModuleInterface) și notificatorul este distrus. În concluzie, vom arăta cum puteți determina poziția cursorului în fereastra editorului de cod. Să creăm un Expert Advisor care, atunci când este selectat elementul de meniu corespunzător, să afișeze un mesaj care să conțină numele fișierului activ și poziția cursorului în acesta (se oferă doar implementarea metodelor care sunt esențiale pentru acest exemplu): Pentru a determina poziția cursorului, trebuie să primim următoarea secvență de interfețe: interfață modul (TIModuleInterface); interfață editor de cod (TIEditorInterface); interfață de vizualizare a modulului în fereastra editorului (TIEditView).

Dacă fișierul activ cu textul sursă (*.pas) este activ la selectarea articolului de meniu expert, atunci este afișat un mesaj care conține numele fișierului activ și poziția curentă a cursorului în acesta. Dacă fișierul activ nu este un fișier pas, nu este emis niciun mesaj. Metoda GetCurrentFile a clasei TIToolServices este folosită pentru a obține numele fișierului activ. Aceasta încheie discuția noastră despre modalitățile de utilizare a interfețelor publice. CD-ROM-ul conține codul sursă pentru toate exemplele date. CD-ROM-ul conține, de asemenea, un exemplu mai complex și mai extins, care conține un expert în add-in care permite utilizatorului să marcheze codul sursă al modulelor Delphi. În fișierul bkmrks97.htm se găsește un ghid rapid pentru instalarea și utilizarea Bookmark Expert. Deci, în acest articol, interfețele publice sunt discutate în termeni generali și sunt date exemple de utilizare a acestora. Încă o dată, datorită disponibilității codurilor sursă ale interfețelor deschise, puteți înțelege cu ușurință detaliile care vă interesează. Sperăm că varietatea de oportunități oferite interfețe deschise, vă va oferi mai mult de o idee îndrăzneață și utilă.