Karakteristike rada sa interfejsima u Delphiju. Najbolja IT rješenja za posao Veličine prozora ne bi trebalo da prelaze veličinu ekrana

samo za rezultate

striktno poštovanje rokova

Transparentnost

implementacija projekta

tehnička podrška na poklon

Programiranje, poboljšanja, konsultacije na 1C

Kako radimo

1. O problemu razgovaramo telefonom. U prisustvu daljinski pristup- prikazati na ekranu vašeg računara.

2. Rad procjenjujemo u rubljama ako je projekat velik, ako nije - približan broj sati.

3. Završili smo posao.

4. Vi prihvatate rad u svom programu, ako postoje nedostaci, mi ih ispravljamo.

5. Mi izdajemo fakturu, vi plaćate.

Troškovi rada

1. Svi radovi su podeljeni u 3 kategorije: konsultacije, ažuriranje tipične konfiguracije, razvoj ili programiranje novog izveštaja, obrada, dugmad itd.

3. Za rad preko 10 sati unaprijed se izrađuje tehnički zadatak sa opisom i cijenom radova. Rad počinje nakon odobrenja TOR-a sa vama.

Tehnička podrška

1. Ukoliko nađete greške u prethodno prihvaćenim radovima, u roku od 3 mjeseca, ispravljamo ih besplatno.

2. Za stalne kupce sve nedostatke u radu otklanjamo besplatno u roku od godinu dana.

Programi za vođenje vašeg poslovanja.

Kupite 1C: Enterprise

Mi smo službeni zastupnik 1C, kod nas možete kupiti razne softverskih proizvoda i licence. Pored kupovine "kutije", pomoći ćemo vam da podesite program, konsultujete i izvršite osnovna podešavanja.

  • Računovodstvo
  • Automatizacija prodavnice
  • Veleprodaja
  • Pomoć pri montaži i početno podešavanje uključeno u paket!
  • Fino podešavanje konfiguracija prema potrebama kupca, razvoj novih modula u nedostatku potrebnih funkcija u standardnoj konfiguraciji.
1c računovodstvo 1C: Upravljanje trgovinom 1C: Maloprodaja 1C: Platni spisak i upravljanje ljudskim resursima
Od 3300 rub. Od 6700 rub. Od 3300 rub. Od 7400 rub.

Obezbeđivanje servera.

Server za trenutno podešavanje + 1C.

Nema servera? Nema veze, izabraćemo i brzo postaviti server u "oblaku". Za malu naknadu dobijate veoma pouzdano rešenje.

  • Dostupnost 24\7
  • Nema potrebe da čuvate svoje sistem administrator(uštede će pokriti troškove vašeg servera).
  • Brzo podešavanje i instalacija 1C na serveru, za 3 dana ćete već imati potpuno ispravan sistem.
  • U bilo koje vrijeme možete se preseliti u lokalni server ako rješenje nije zadovoljavajuće.

SMS sa vašeg 1C

Želite da kupci na vrijeme saznaju o akcijama i popustima? Klijenti se ne vraćaju? Prilagodi slanje SMS-a direktno sa 1C!

Naša kompanija će moći brzo podesiti slanje SMS-a vašim klijentima direktno iz 1C. Primjeri događaja koji se mogu automatizirati:

  • Zahvalnost za kupovinu i prikupljanje bonusa odmah nakon sljedeće kupovine.
  • Prikupljanje bonusa na karticu kao poklon za rođendan/drugi važan ili praznični dan.
  • Obavijest o skladištu.
  • Istek trajanja poklon vaučera.
  • Obaveštenje o prijemu avansa i rezervaciji robe.
  • Adresa sa uputama za radnju/kancelariju, brojevi telefona.
  • itd.

Postavljanje u 1C mogu izvršiti naši stručnjaci ili naši zaposlenici. Sa tarifama se možete upoznati na stranici SMS-tarife.

  • Garancija SMS dostava, novac se povlači samo za isporučene SMS poruke.
  • Zasebna naplata za svaki SMS.
  • Dopunjavanje bilansa na razne načine.
  • Pogledajte historiju svih poslanih SMS-ova u bilo kojem trenutku.
  • Ime pošiljaoca umjesto brojčanog broja na telefonu primaoca.

Kreacija interfejs korisnik je sveden na to da iz palete komponenti izabere Delphi komponente neophodne za rad programa, služeći interfejs menadžment, kao i interfejs prikazivanje informacija i njihovo prenošenje u obrazac sa naknadnim izgledom.

Korisnički interfejs koji kreirate treba da koristi standardne, korisniku poznate elemente i da pruža maksimalnu pogodnost. Sve je to u konačnici određeno takvim kriterijem kao što je učinkovitost sučelja - maksimalni rezultat uz minimalan napor.
Principi stvaranja korisničko sučelje poznato. kao najviše opšti principi prilikom stvaranja korisničkih interfejsa mogu se razmotriti tri glavne tačke:

  1. Program bi trebao pomoći u ostvarenju zadatka, a ne postati zadatak.
  2. Kada radite sa programom, korisnik se ne bi trebao osjećati kao budala.
  3. Program treba da radi na način da korisnik ne smatra kompjuter budalom.
Prvi princip- ovo je takozvana "transparentnost" interfejsa. Korisnički interfejs treba da bude intuitivan, lak za učenje i da ne stvara probleme korisniku koje će morati da savlada u procesu rada. Koristite standardne, bez pretjeranih komponenti ukrašavanja, koristite poznate, korištene slični programi tehnike upravljanja i dostići ćete kriterije učinka prvi princip.

Drugi princip leži u zanemarivanju intelektualne sposobnosti korisnika. Iz vlastitog iskustva znam da često korisnici ne samo da ne znaju raditi za računarom, već se jednostavno plaše da bilo šta urade sami. Stoga, korisnički interfejs treba da bude što je moguće više prijateljski raspoložen.
Štaviše, strahovi korisnika su često opravdani, jer se cena programa, a i samog računara, ne može porediti sa cenom, na primer, baze podataka stvorene višegodišnjim trudom. Zato programer prilikom kreiranja korisničkog interfejsa uvek mora u program ugraditi „zaštitu od budale“ – od pogrešnih radnji i korisničkih unosa netačnih podataka. Ali neki programeri se previše zanose takvom zaštitom, čine je previše nametljivom, i kao rezultat, rad programa liči na čuveni "korak lijevo, korak desno se smatra bijegom"! A ono što programer stvori kao rješenje problema, sam počinje stvarati probleme.
U skladu drugi princip nema potrebe dozvoliti programu da "ispravi" radnje korisnika i naznači šta tačno da radi umesto njega, gurajući ga u uski okvir. Takođe, ne treba se previše zanositi prikazivanjem informativnih hint poruka, posebno dijaloških, jer to odvlači korisnika od posla. I bolje je predvidjeti mogućnost potpunog onemogućavanja upita.

Treći princip je kreiranje programa sa najvećim mogućim "mentalnim" sposobnostima. Uprkos brzom razvoju kompjuterska tehnologija, čak se i široko rasprostranjeni programi mogu samo vrlo uvjetno nazvati posjedovanjem umjetne inteligencije. Oni ometaju korisničko iskustvo prikazivanjem dijaloški okviri sa glupim pitanjima koja izazivaju zbunjenost čak iu najjednostavnijim situacijama. Kao rezultat toga, korisnici u svojim srcima uzvikuju: "Pa, ovaj auto je glup!"
Lično me nerviraju stalna pitanja skoro svih. uređivači teksta o tome da li da sačuvate izmenjeni tekst, iako se originalni i trenutni tekst ne razlikuju ni po jednom znaku. Da, ukucao sam nešto, ali sam onda sve vratio nazad, zar je stvarno nemoguće shvatiti! Moram da proverim da li sam nešto zabrljao.

Pokušajte se pridržavati sljedećih pravila:

Standardni elementi interfejsa
Koristite standard za dati element komponentni interfejs. Nakon upoznavanja vašeg programa, korisnik neće gubiti vrijeme na upoznavanje, već će odmah početi s radom - to je jedan od znakova profesionalno napravljenog programa.
Mala paleta alata
Pokušajte da ne koristite previše veliki broj razne komponente. I naravno, koristeći jednu standardnu ​​komponentu negdje na jednom mjestu, u sličnom slučaju i nju koristite.
Jednak razmak između kontrola
Rasporedite elemente interfejsa na istoj udaljenosti jedan od drugog. Nasumično raspoređene komponente stvaraju osjećaj neprofesionalnog proizvoda. I obrnuto, pažljivo kalibrirano postavljanje na Formu dugmadi, prekidača, potvrdnih okvira i ostalih komponenti koje čine interfejs znak je kvalitetnog rada.
redosled kartica. "ispravan redoslijed
TabOrder je redosled kojim se kursor na ekranu pomera preko kontrola kada se pritisne taster Tab. U ispravno napisanom programu kursor se pomera, prateći logiku rada korisnika sa programom. Prilikom kreiranja programa, programer često mijenja komponente, uklanja neke i dodaje druge po potrebi. Kao rezultat toga, u gotovom programu, kursor nasumično skače preko obrasca. Nakon završetka programa, ne zaboravite podesiti TabOrder.
Odabir fonta
Samo ostavite fontove na miru. Delphi-jevi sopstveni podrazumevani fontovi će raditi za svaki sistem na kojem vaš program može da radi. Koristite podebljani font samo za isticanje važnih elemenata. Aplikacija cursive a posebno podvlačenje, što korisnik može zamijeniti za hipervezu - loš oblik.
Izbor boja
Što se tiče boja elemenata interfejsa, kao iu slučaju fontova, bolje ih je ostaviti standardne, podrazumevano. Delphi koristi Windows sistemsku paletu, a njenom promenom korisnik može lako da prilagodi boje za sebe.
Alternativno upravljanje
Profesionalno napravljen program treba da se može kontrolisati ne samo mišem, već i tastaturom. Ne bi trebalo da postoje funkcije dostupne za izvršavanje samo pomoću miša (crtanje u grafičkim uređivačima se ne računa!). Za najčešće korišćene funkcije treba obezbediti "vrući tasteri" za njihov brzi pristup.
Građevinski blokovi interfejsa
S obzirom na specifične elemente korisničkog sučelja, kvaliteta interakcije korisnika s programom ovisi o:
  • usklađenost kontrolnog elementa sa svojim zadatkom;
  • pravila po kojima funkcioniše kontrola.
    Ova stranica govori o pravilima za kreiranje nekih elemenata interfejsa.
A sada želim da pokažem koje alate Delphi nudi za upravljanje komponentama na obrascu, njihovu relativnu poziciju i ponašanje kursora kada se pritisne taster. Tab.

Prvo da biste rasporedili komponente jedna u odnosu na drugu ispravnim redoslijedom treba ih istaknuti. Možete jednostavno prevući miša preko područja na obrascu koje sadrži odabrane komponente. Ili držanjem Shift", navedite istim mišem svaku komponentu koja će biti odabrana. Ponovljeni klik miša na odabranu komponentu (dok pritisnete " Shift") poništava odabir.

Odabrane komponente se mogu kontrolisati kao cjelina - pomicati po Obrascu, dodjeljivati ​​vrijednosti istim svojstvima, kopirati (za instalaciju, na primjer, na drugom Obrascu), čak i brisati.

Sada kliknite desnim tasterom miša na jednu od komponenti i iz "skočućeg" menija izaberite Položaj -> Poravnaj... Pojavit će se dijaloški okvir koji vam omogućava da prilagodite položaj komponenti u grupi horizontalno i vertikalno. Na primjer, trebamo poravnati naša četiri gumba ulijevo i osigurati da postoji između njih ista udaljenost vertikalno. Da biste to učinili, odaberite radio dugmad Horizontalno: lijeve strane i Vertikalno: prostor jednako.

Odabir stavke Centar, rasporedit ćemo komponente tako da će njihovi centri biti smješteni na istoj liniji vodoravno ili okomito, a tačka Centar u prozoru pomiče komponente u sredinu prozora, bilo vodoravno ili okomito.

U istom meniju, linija Tab O naručiti... uzrokuje pojavu dijaloškog okvira koji kontrolira kretanje kursora kroz elemente interfejsa kada se pritisne tipka Tab. Kada se obrazac pojavi na ekranu, kursor će prirodno biti na komponenti koja se nalazi u prvom redu dijaloškog okvira. A onda će se pomeriti nadole sa liste. U dijaloškom okviru, dvije plave strelice "gore" i "dolje" kontroliraju položaj odabrane komponente. Istaknite potrebna komponenta, koristite strelice za prelazak na željeni red na listi i tako dalje.

Prilikom odabira stavke menija Kontrola -> Pojavljuje se podmeni sa dvije stavke:

  • Izbaciti naprijed
  • poslati nazad
Ovo su komponente komponenti koje su dostupne i programski. Button1.SendToBack pomiče dugme u "pozadinu" i Button1.BringToFront- izbaciti naprijed". To jest, ako je jedna komponenta postavljena iznad druge, ove metode ih zamjenjuju. Slučajevi u kojima se ovo može primijeniti su prilično očigledni.

Objektno orijentisano programiranje (OOP), pored koncepta klase, takođe obezbeđuje osnovni koncept interfejsa.

Šta je interfejs i koje su karakteristike rada sa njim u programskom jeziku Delphi?

Interfejs je semantička i sintaktička konstrukcija u programskom kodu koja se koristi za specifikaciju usluga koje pruža klasa ili komponenta (Vikipedija).

U stvari, interfejs definiše listu svojstava i metoda koje treba koristiti kada se radi sa klasom koja implementira ovaj interfejs, kao i njihov potpis (ime, tip podataka, prihvaćeni parametri (za procedure i funkcije), itd.). Dakle, klasa koja implementira interfejs mora nužno implementirati sve njegove komponente. Štaviše, u strogom skladu sa načinom na koji su u njemu opisani.

Vrlo često se interfejsi porede sa apstraktnim klasama, ali uz sve sličnosti, ovo poređenje nije sasvim tačno. U apstraktnim časovima, u najmanju ruku, dostupna je kontrola vidljivosti članova. U isto vrijeme, opsegi nisu definirani za sučelja.

Interfejsi vam omogućavaju da arhitekturu učinite fleksibilnijom, jer objedinjuju pristup određenoj funkcionalnosti, a također vam omogućavaju da izbjegnete niz problema povezanih sa nasljeđivanjem klasa (interfejsi se također mogu naslijediti jedan od drugog).

Delphi koristi ključnu riječ interfejs za deklarisanje interfejsa. Ovo je ista ključna riječ koja definira odjeljak modula kojem se može pristupiti izvana (između ključne riječi interfejs i implementacija). Međutim, kada se deklariše interfejs, koristi se drugačija sintaksa, slična deklarisanju klasa.

Delphi/Pascal

IMyNewInterface = procedura interfejsa InterfaceProc; kraj;

IMyNewInterface =sučelje

procedure InterfaceProc ;

kraj ;

Dakle, sama sintaksa deklaracije interfejsa nema fundamentalne razlike od drugih programskih jezika (osobine sintakse zasnovane na Pascal-u se ne računaju). Istovremeno, implementacija interfejsa ima niz karakterističnih karakteristika.

Činjenica je da su Delphi interfejsi prvobitno uvedeni da podržavaju COM tehnologiju. Dakle, interfejs IIinterface, koji je u Delphiju predak svih ostalih interfejsa (neka vrsta analoga TObject), već sadrži tri osnovne metode za rad sa ovom tehnologijom: QueryInterface, _AddRef, _Release. Kao rezultat toga, ako klasa implementira bilo koji interfejs, onda mora implementirati i te metode. Čak i ako ova klasa nije dizajnirana za rad sa COM.

Zbog ove karakteristike interfejsa IIinterface, u Delphiju upotreba interfejsa, u većini slučajeva, dovodi do dodavanja očigledno neiskorišćenih karakteristika u klasu.

Postoji bibliotečka klasa TInterfaceObject koja već sadrži implementaciju ovih metoda i, kada se od nje nasljeđuje, nema potrebe da ih sami implementirate. Ali pošto Delphi ne podržava višestruko nasljeđivanje klasa, njegova upotreba često samo uzrokuje dodatnu složenost u dizajnu i implementaciji već potrebne funkcionalnosti.

Sve je to dovelo do činjenice da, uprkos svim mogućnostima koje pružaju interfejsi, njihova praktična upotreba u Delphiju gotovo da nije išla dalje od rada sa COM-om.

Budući da su optimizirani za rad uglavnom s ovom tehnologijom, sučelja, odnosno funkcionalnost i arhitektonska ograničenja koja dodaju bez greške, ne opravdavaju se pri rješavanju drugih problema.

Stoga su mnogi Delphi programeri još uvijek, zapravo, lišeni moćnog i fleksibilnog alata za razvoj arhitekture aplikacija.

Ovaj članak je zasnovan na pitanjima na forumima: "Kako da vratim string iz DLL-a?", "Kako da prosledim i vratim niz zapisa?", "Kako da prosledim obrazac u DLL?".

Kako ne biste proveli pola života smišljajući to - u ovom članku ću sve donijeti na srebrnom tacnu.

Teme ovog članka, u različitoj mjeri, već su dotaknute više puta na ovom blogu, ali u ovom članku su skupljene u gomilu, daju se opravdanja. Ukratko, veza do ovog članka može se baciti onima koji razvijaju DLL.

Važna napomena: članak se mora pročitati sukcesivno. Primjeri kodova su dati samo kao primjeri, na svakom koraku (tački) članka dodaje se šifra primjera s novim detaljima. Na primjer, na samom početku članka nema rukovanja greškama, naznačene su "klasične" metode (kao što su korištenje GetLastError, sdtcall konvencije itd.), koje se u toku članka zamjenjuju adekvatnijim. To se radi iz razloga što "novi" ("neobični") dizajni ne postavljaju pitanja. U suprotnom, uz svaki primjer bi se morala ubaciti napomena u obliku: "o tome se govori u onom pasusu ispod, a o onom - u ovom ovdje." U svakom slučaju, na kraju članka nalazi se link na gotov kod napisan uzimajući u obzir sve što je rečeno u članku. Možete ga jednostavno uzeti i koristiti. A članak objašnjava zašto i zašto. Ako vas ne zanima "zašto i zašto" - skrolujte do kraja do zaključka i linka za preuzimanje primjera.

Jedna i većina snage Delphi programsko okruženje je njegova otvorena arhitektura, zahvaljujući kojoj Delphi dozvoljava neku vrstu metaprogramiranja, omogućavajući vam da "programirate programsko okruženje". Ovaj pristup dovodi Delphi na kvalitativno novi nivo sistema za razvoj aplikacija i omogućava vam da ugradite dodatne alata koji podržavaju gotovo sve faze kreiranja aplikativnih sistema. Ovako širok spektar mogućnosti otvara se zahvaljujući konceptu takozvanih otvorenih interfejsa implementiranih u Delphiju, koji su veza između IDE (Integrated Development Environment) i eksternih alata.

Ovaj članak se fokusira na Delphi-jeva otvorena sučelja i pruža pregled funkcija koje oni pružaju. Delphi definiše šest javnih interfejsa: interfejs alata, interfejs za dizajn, interfejs stručnjaka, interfejs datoteka, interfejs za uređivanje i interfejs za kontrolu verzija. Malo je vjerovatno da bismo u okviru ovog članka mogli detaljno pokriti i ilustrirati mogućnosti svakog od njih. Izvorni tekstovi Delphi-ja pomoći će vam da detaljnije razumete pitanja koja se razmatraju, budući da su ih programeri dali detaljnim komentarima. Deklaracije klasa koje predstavljaju javna sučelja sadržane su u odgovarajućim modulima u direktoriju ...\Delphi\Source\ToolsAPI. Dizajn sučelje (modul DsgnIntf.pas) pruža sredstva za kreiranje uređivača svojstava i uređivača komponenti.

Uređivači svojstava i komponenti su tema vrijedna posebne rasprave, pa se samo prisjećamo da uređivač svojstava kontrolira ponašanje Object Inspector-a kada pokušate promijeniti vrijednost odgovarajućeg svojstva, a uređivač komponenti se aktivira kada dvostruki klik lijevo dugme miša na sliku komponente postavljene na obrazac. Interfejs kontrole verzija (VCSIntf.pas modul) je dizajniran za kreiranje sistema kontrole verzija. Počevši od verzije 2.0, Delphi podržava Intersolv PVCS integrisani sistem kontrole verzija, tako da u većini slučajeva nije potrebno razvijati sopstveni sistem. Iz tog razloga ćemo također izostaviti razmatranje interfejsa za kontrolu verzija. Datotečni interfejs (FileIntf.pas modul) vam omogućava da redefinišete radni sistem datoteka IDE-a, što omogućava da izaberete sopstveni način skladištenja datoteka (na primer, u Memo poljima na serveru baze podataka). Interfejs za uređivanje (modul EditIntf.pas) omogućava pristup baferu izvornog teksta, koji vam omogućava da analizirate i generišete kod, odredite i promenite poziciju kursora u prozoru uređivača koda i kontrolišete isticanje sintakse izvornog teksta.

Posebne klase obezbeđuju interfejse za komponente postavljene na obrazac (definisanje tipa komponente, dobijanje referenci na nadređene i podređene komponente, pristup svojstvima, prenošenje fokusa, brisanje, itd.), za sam obrazac i za fajl resursa projekta. Interfejs za uređivanje takođe vam omogućava da identifikujete takozvane obaveštajce modula koji određuju reakciju na događaje kao što su promena izvornog koda modula, modifikacija forme, preimenovanje komponente, čuvanje, preimenovanje ili brisanje modula, promena resursa projekta fajl, itd. Interfejs alata (modul ToolIntf. pas) pruža programerima sredstva za dobijanje opće informacije o stanju IDE-a i izvođenju radnji kao što su otvaranje, spremanje i zatvaranje projekata, i pojedinačni fajlovi, kreiranje modula, dobijanje informacija o trenutnom projektu (broj modula i obrazaca, njihovi nazivi itd.), registracija sistem podataka, organizacija interfejsa za pojedinačne module itd. Pored notifiera modula, sučelje alata definira dodatke koji obavještavaju o događajima kao što su otvaranje/zatvaranje datoteka i projekata, učitavanje i spremanje desktop fajla projekta, dodavanje/izuzimanje modula projekta, instaliranje/deinstaliranje paketa, kompajliranje projekta, i u Za razliku od modularnih notifiera, dodatni notifieri vam omogućavaju da otkažete izvršenje nekih događaja.

Pored toga, interfejs alata omogućava pristup glavnom meniju Delphi IDE, omogućavajući vam da u njega ugradite dodatne stavke. Stručni interfejs (modul ExptIntf.pas) je osnova za kreiranje stručnih savjetnika - softverski moduli, ugrađen u IDE kako bi se proširila njegova funkcionalnost. Primer stručnjaka je Delphi čarobnjak za forme baze podataka, koji generiše obrazac za pregled i modifikovanje sadržaja tabele baze podataka. Nakon što smo definisali klasu stručnjaka, moramo biti sigurni da Delphi „uči“ o našem ekspertu. Da biste to uradili, mora se registrovati pozivanjem procedure RegisterLibraryExpert, prosleđujući joj instancu klase stručnjaka kao parametar. Kao ilustraciju, napravimo jednostavnog stručnjaka u stilu esStandard, koji, kada se izabere odgovarajuća stavka Delphi menija, prikazuje poruku da je pokrenut. Kao što možete vidjeti iz gornje tabele, stil esStandard zahtijeva šest metoda koje treba zamijeniti:

Da bi se stručnjak „aktivirao“, morate odabrati stavku menija Komponenta/Instaliraj komponentu... , odabrati modul koji sadrži stručnjaka (u našem slučaju exmpl_01.pas) u dijalogu Browse, kliknuti OK, a nakon kompajliranja dclusr30.dpk paketu u glavnom meniju Delphi-ja u odeljku Pomoć, treba da se pojavi stavka Simple Expert 1, kada se izabere, pojavljuje se informativna poruka “Standard Expert je pokrenut!”. Zašto Delphi stavlja stavku menija stručnjaka u odeljak Pomoć ostaje misterija. Ako vam se ne sviđa činjenica da se stavka menija pojavljuje bilo gdje u Delphiju, a ne gdje želite, moguća je sljedeća opcija: kreirajte stručnjaka za stilove dodataka, koji eliminiše automatsko kreiranje stavke menija, i dodajte stavku menija “ručno” koristeći interfejs alata. Ovo će vam omogućiti da postavite lokaciju nove stavke u glavnom meniju na proizvoljan način.

Za dodavanje stavke menija koristi se klasa TIToolServices - osnova sučelja alata - i klase TIMAinMenuIntf, TIMenuItemIntf koje implementiraju interfejse za glavni meni IDE-a i njegove stavke. ToolServices instancu klase TIToolServices kreira sam IDE kada se inicijalizira. Imajte na umu da je odgovornost programera da pusti interfejse za glavni meni Delphija i njegove stavke. Usput, malo zakomplikujmo funkcionalno opterećenje Stručnog savjetnika: kada se njegova stavka u meniju aktivira, on će izdati potvrdu o nazivu projekta otvorenog u ovog trenutka u okruženju: U ovom primeru centralno mesto zauzima funkcija AddIDEMenuItem, koja dodaje stavku menija u glavni meni Delphi IDE. Kao parametri, prosleđuje se tekst nove stavke menija, njen identifikator, identifikator stavke ispred koje je umetnuta nova stavka, simbolički prikaz ključa, koji zajedno sa Taster Ctrl može se koristiti za brz pristup na novu stavku i rukovalac događaja koji odgovara odabiru nove stavke. Dodali smo novu stavku menija u sekciju Pogled prije stavke Satovi.

Sada se upoznajmo sa notifierima. Hajde da definiramo dodatak za obavještavanje koji prati trenutke zatvaranja/otvaranja projekata i u skladu s tim prilagođava polje koje pohranjuje ime aktivan projekat(Izostaviću implementaciju metoda koje se nisu promijenile u odnosu na prethodni primjer radi kratkoće): Da bismo implementirali notifier, definirali smo klasu TAddInNotifier, koja je potomak TIAddInNotifier-a, i nadjačali metodu FileNotification. IDE će pozvati ovu metodu svaki put kada se dogodi događaj na koji je dodatak za obavještavanje sposoban odgovoriti (svaki takav događaj je označen odgovarajućom konstantom tipa TFileNotification). Polje Expert u klasi TAddInNotifier se koristi za povratne informacije sa stručnjakom (metoda TAddInNotifier.FileNotification). U destruktoru stručnjaka, registracija prijavitelja se ne registruje i notifier se uništava. Sada ilustrujmo upotrebu modularnih notifiera. Kreirajmo stručnjaka za dodatke koji generira poruke o svakom činu spremanja projektne datoteke (radi kratkoće, ne pružamo implementaciju metoda koje su nam već poznate): U ovom primjeru, stručnjak za dodatak prati događaje koji odgovaraju otvaranje/zatvaranje projekata.

Svaki put kada se projekat otvori, registruje se notifier modula koji odgovara datoteci projekta. U smislu implementacije, modularni notifieri su slični notifierima dodataka: definiramo klasu TModuleNotifier koja je potomak TIModuleNotifier-a i poništava njegove metode Notify i ComponentRenamed. IDE poziva metodu Notify kada se dogode određeni događaji povezani sa ovim modulom; unutar ove metode određuje se reakcija na određeni događaj. Metoda ComponentRenamed se poziva kada se promijeni ime komponente koja se nalazi na obrascu modula. Imajte na umu da ne koristimo ovu metodu, ali je moramo nadjačati, u suprotnom, kada se promijeni ime komponente, biće pozvan apstraktni metod osnovne klase, što dovodi do nepredvidivih posljedica.

Registrovanje notifier modula je nešto komplikovanije od registracije dodatka za notifier: prvo dobijamo interfejs modula (TIModuleInterface), a zatim registrujemo notifier koristeći interfejs modula. Kada se projekat zatvori, notifier modula je odjavljen (opet koristeći TIModuleInterface) i notifier je uništen. U zaključku ćemo pokazati kako možete odrediti poziciju kursora u prozoru uređivača koda. Kreirajmo stručnog savjetnika koji će, kada se izabere odgovarajuća stavka menija, prikazati poruku koja sadrži naziv aktivne datoteke i poziciju kursora u njoj (data je implementacija samo metoda koje su bitne za ovaj primjer): Da bismo odredili poziciju kursora, moramo primiti sljedeći niz interfejsa: interfejs modula (TIModuleInterface); interfejs uređivača koda (TIEditorInterface); interfejs za prikaz modula u prozoru uređivača (TIEditView).

Ako je aktivna datoteka sa izvornim tekstom (*.pas) aktivna pri odabiru stavke ekspertnog menija, tada se prikazuje poruka koja sadrži naziv aktivne datoteke i trenutnu poziciju kursora u njoj. Ako aktivna datoteka nije pas datoteka, poruka se ne izdaje. Metoda GetCurrentFile klase TIToolServices se koristi za dobivanje imena aktivne datoteke. Ovo završava našu raspravu o načinima korišćenja javnih interfejsa. CD-ROM sadrži izvorni kod za sve navedene primjere. CD-ROM takođe sadrži složeniji i prošireni primjer koji sadrži stručnjaka za dodatke koji omogućava korisniku da označi izvorni kod Delphi modula. Brzi vodič za instaliranje i korištenje Bookmark Expert-a nalazi se u datoteci bkmrks97.htm. Dakle, u ovom članku se općenito govori o javnim sučeljima i daju se primjeri njihove upotrebe. Još jednom, zahvaljujući dostupnosti izvornih kodova otvorenih sučelja, lako možete razumjeti detalje koji vas zanimaju. Nadamo se da će raznovrsnost mogućnosti pružiti otvoreni interfejsi, daće vam više od jedne smele i korisne ideje.