Utilizarea interfețelor în Delphi. Caracteristici de lucru cu interfețe în Delphi. Elemente de interfață standard

Articolul a fost scris pe baza rezultatelor analizelor programelor scrise de tinerii dezvoltatori ai grupului nostru.

Aranjați corect secvența de comutare a componentelor

Mulți utilizatori, în special cei care au lucrat anterior în DOS, au obiceiul de a comuta între câmpurile de intrare nu cu mouse-ul, ci folosind tastatura cu tasta Tab. În plus, este mult mai rapid decât selectarea fiecărui câmp cu mouse-ul. Prin urmare, ordinea de comutare a componentelor trebuie setată corect. Acest lucru se aplică atât componentelor din interiorul tuturor componentelor containerului (panouri, GroupBoxes și altele asemenea), cât și componentelor containerului în sine, dacă există mai multe dintre ele pe formular.

Ordinea de comutare a componentelor din interiorul containerului este stabilită de proprietatea TabOrder. Prima componentă care devine activă este cea cu TabOrder egal cu 0, a doua cu 1 și așa mai departe, până când toate componentele au fost repetate. În plus, componenta are o proprietate TabStop, care indică dacă componenta va primi focalizare la comutarea cu tasta Tab. Dacă trebuie să dezactivați comutarea la orice componentă, setați TabStop = false pentru aceasta. În acest caz, se va putea trece la această componentă doar cu ajutorul mouse-ului.

Sunt momente când utilizatorii care sunt obișnuiți să comute o anumită cheie într-un program, din obișnuință, continuă să o folosească în altele. Acest lucru se întâmplă adesea cu utilizatorii 1C, unde tasta Enter poate fi folosită pentru a naviga prin câmpurile de introducere. Ei bine, să le oferim această oportunitate în programele noastre dacă o cer. Setați proprietatea KeyPreview a formularului la true și scrieți handlerul de evenimente OnKeyPress:

Procedura TForm1.FormKeyPress(Sender: TObject; var Key: Char);
ÎNCEPE
dacă ord(key)=vk_Return atunci
Form1.SelectNext(PriemForm.ActiveControl, adevărat, adevărat);
Sfârşit;

Un astfel de handler oferă o tranziție prin elementele formularului atunci când este apăsată tasta Enter. Trebuie remarcat faptul că această metodă nu va funcționa cu butoane, deoarece apăsarea Enter pe un buton face ca acesta să fie apăsat, în timp ce apăsarea Tab transferă focalizarea de intrare către următoarea componentă din secvența de comutare.

Butoane implicite

Toți aceiași utilizatori se obișnuiesc rapid cu faptul că în casetele de dialog ale aplicației, de regulă, puteți confirma alegerea cu tasta Enter și anulați cu tasta Esc. Să nu-i dezamăgim în programele noastre, mai ales că este foarte ușor de făcut. Pentru butonul Enter, setați proprietatea implicită la true. Pentru un buton care răspunde la Esc, setați proprietatea Cancel la true. Si asta e.

Da sau nu

Toate casetele de dialog care solicită acțiuni utilizator trebuie să aibă cel puțin două butoane: confirmarea unei acțiuni și refuzul unei acțiuni (Da/Nu, Salvare/Anulare etc.). Acțiunea poate fi anulată prin închiderea ferestrei cu butonul [X] din titlul ferestrei. Este invalid dacă există un singur buton pentru confirmarea acțiunii, iar pentru refuz ar trebui să se închidă fereastra cu butonul [X] din titlu, sau nu există nicio posibilitate de refuz. Acest lucru derutează utilizatorul, provocând o întrebare logică: cum să refuzi?

De asemenea, nu uitați de cele spuse mai sus în paragraful „Butoane implicite”.

Toate casetele de dialog ar trebui să se deschidă în centrul ecranului

Centrate în loc de locul în care au fost create în modul design. În primul rând, este mai vizual și, în al doilea rând, elimină automat problema diferitelor rezoluții de ecran pentru diferiți utilizatori.

Se face o excepție dacă caseta de dialog nu este modală și, ca urmare a muncii utilizatorului în această fereastră, apar imediat modificări în fereastra principală (de exemplu, filtrarea unui set de date, redesenarea graficelor etc.).

Dimensiunile ferestrelor nu trebuie să depășească dimensiunile ecranului.

În niciun caz. Este o rușine când o parte a ferestrei iese din ecran. Această cerință nu depinde de rezoluția ecranului utilizatorului, de exemplu. scuze precum „Lasă-i să pună o rezoluție mai mare” nu funcționează.

Redimensionarea corectă a elementelor ferestrei

Elementele ferestrei trebuie să redimensioneze sau să se miște corect atunci când fereastra este redimensionată, când fereastra este maximizată și când fereastra este restaurată după ce a fost maximizată.

Totul este mereu vizibil

Reducerea dimensiunii ferestrei nu ar trebui să ducă la dispariția elementelor ferestrei și, de preferință, nu ar trebui să ducă la apariția barelor de defilare (scroller) ale ferestrei în sine. Puteți limita dimensiunea minimă a ferestrei astfel încât toate elementele să fie vizibile și accesibile. Dacă nu este posibil să plasați componentele astfel încât toată lumea să fie vizibilă în fereastră, puteți utiliza file (de tip PageControl) pentru a împărți componentele în grupuri. Nici scuzele despre rezoluția ecranului nu sunt ratate.

Sugestii peste tot, indicii mereu

Pentru butoane, în special pe barele de instrumente (cum ar fi ToolBar), ar trebui date indicii, astfel încât să fie întotdeauna clar de ce este nevoie de acest buton sau acela.

Spectrul de culori

Nu este necesar să pictați componentele pe formă în toate culorile curcubeului. Acest lucru obosește ochii și împrăștie atenția utilizatorului. Nu pare „mișto”. Evidențierea este utilizată atunci când este necesar să se atragă atenția utilizatorului asupra unui anumit element sau a unei anumite părți a ferestrei. De exemplu, puteți colora intrările cu erori în culoare roșu deschis sau, dimpotrivă, culoarea verde deschis a intrărilor, a căror verificare a avut succes.

Concluzie

Există o metodă foarte bună care vă permite să găsiți deficiențele programului în general și ale interfeței în special. Este simplu: imaginează-te în locul utilizatorului și timp de o jumătate de oră încearcă să lucrezi așa cum lucrează el. Este și mai bine dacă utilizatorul dvs. este la îndemână (de exemplu, lucrează în aceeași organizație). În acest caz, stai lângă el, sau mai bine zis în locul lui, și încearcă să-și faci treaba. Introduceți date, modificați-le, afișați rapoarte etc. Dacă nu știți cum să o faceți corect, întrebați utilizatorul. Nu faceți una sau două operațiuni de același tip, ca în modul de depanare, ci 20-30 sau chiar mai multe operațiuni diferite, într-o ordine diferită. Uitați să introduceți ceva sau să îl introduceți incorect și vedeți cum reacționează programul la el. Veți vedea rapid punctele slabe ale programului dvs.

Autorul articolului a automatizat activitatea comisiei de admitere la universitate, iar în primul an de implementare a programului, a petrecut 3-4 ore pe zi la comisia de admitere, înregistrând solicitanții, completându-le datele personale și dându-le. rapoarte de examen. Și în rest timp de lucru corectate erori și omisiuni. Crede-mă, anul viitor practic nu mai sunt probleme. La fel a fost și cu introducerea modulului de personal.

Astfel, țineți cont de experiența utilizatorului. Să fie ușor și plăcut pentru ei să lucreze cu programele dvs.

Unul și cel mai mult punctele forte medii 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 traduce Delphi într-un mod calitativ nou nivel sisteme de dezvoltare a aplicațiilor și vă permite să încorporați instrumente suplimentare în acest produs care acceptă aproape toate etapele de creare sisteme aplicate. O gamă atât de largă de posibilități se deschide datorită conceptului de așa-numite interfețe deschise implementate în Delphi, care sunt 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 încearcă să modifice 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ă modificaț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ă răspunsul la evenimente precum schimbarea codului sursă al modulului, modificarea formularului, redenumirea componentei, salvarea, redenumirea sau ștergerea modulului, modificarea resursei proiectului fișier, etc. Interfața instrumentului (modulul ToolIntf. pas) oferă dezvoltatorilor mijloacele de a obține Informații generale despre starea IDE-ului și efectuați acțiuni precum deschiderea, salvarea și închiderea proiectelor și fișierelor individuale, crearea unui modul, obținerea de informații despre proiectul curent (numărul de module și formulare, numele 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) este baza pentru crearea experților - module software care sunt încorporate î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 o instanță a clasei expert ca parametru. 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 stilul de completare, care elimină crearea automată a elementului de meniu și adăugați elementul 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, primește textul noului articol de meniu, identificatorul acestuia, identificatorul articolului înaintea căruia este introdus noul articol, reprezentarea simbolică a tastei, 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 când proiectele sunt închise/deschise și ajustează câmpul care stochează numele proiectului activ în consecință (omitem implementarea metodelor care nu s-au schimbat față de exemplul anterior pentru concizie): Pentru a implementa notificatorul, am definit clasa TAddInNotifier, care este un descendent al lui TIAddInNotifier și am suprascris FileNotification. IDE-ul va apela această metodă de fiecare dată când apare un eveniment la care notificatorul de supliment poate răspunde (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 emite mesaje despre fiecare act de salvare a unui fișier de proiect (pentru concizie, implementarea metodelor pe care le cunoaștem deja nu este dată): În acest exemplu, expertul add-in monitorizează evenimentele corespunzătoare deschiderii /î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 oarecum 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 consilier care, atunci când este selectat elementul corespunzător de meniu, 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. Un ghid rapid pentru instalarea și utilizarea expertului Bookmark este conținut în fișierul bkmrks97.htm. 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 posibilități oferite de interfețele deschise vă va oferi mai mult de o idee îndrăzneață și utilă.

doar pentru rezultate

respectarea strictă a termenelor limită

Transparenţă

implementarea proiectului

suport tehnic ca un cadou

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

Cum lucrăm

1. Discutam problema telefonic. Dacă aveți acces 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 lucru peste 10 ore, precompilat sarcina tehnica cu descrierea și costul lucrării. 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

Noi suntem dealer oficial Firme 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 salarizării și al resurselor umane
De la 3300 rub. De la 6700 rub. De la 3300 rub. 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? Configuraț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.
  • Și așa mai departe.

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.

  • Garantie livrare SMS, banii sunt retrași doar pentru SMS-urile livrate.
  • Facturare separată pentru fiecare SMS.
  • Refacerea echilibrului în diferite moduri.
  • Vizualizați oricând istoricul tuturor SMS-urilor trimise.
  • Numele expeditorului în loc de numărul numeric de pe telefonul destinatarului.

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 una sau alta funcționalitate și vă permit, de asemenea, 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 secțiunea modulului care poate fi accesată din exterior (între interfață și cuvintele cheie de 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 caracteristici.

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 majoritatea cazurilor, 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, lor uz practicîn Delphi aproape că nu a mers dincolo de 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.

Creare interfata utilizatorul este redus la alegerea din paleta de componente necesare functionarii programului Componentele Delphi, angajati 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 eficiența interfeței - rezultatul maxim cu efort minim.
Sunt cunoscute principiile creării unei interfețe prietenoase cu utilizatorul. Ca principii cele mai generale de creare 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 ar trebui să fie intuitivă, ușor de învățat și să nu creeze probleme utilizatorului pe care acesta va trebui să le depășească în acest proces. Utilizați componente standard, neîmpodobite, utilizați controalele obișnuite utilizate de programe similare și veți atinge criteriile de performanță primul principiu.

Al doilea principiu constă în neglijarea abilităţilor intelectuale ale utilizatorilor. 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 computerul în sine, nu poate fi comparat cu costul, de exemplu, al unei baze de date create de 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 a tehnologiei informatice, chiar și programele larg răspândite pot fi numite doar foarte condiționat având inteligență artificială. Ele interferează cu munca utilizatorului afișând 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 componente standard pentru acest element de interfață. 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 utilizați prea multe componente diferite. Ș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 al muncii de calitate.
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 de sistem 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 numai cu mouse-ul (desenul în editori grafici nu conteaza!). Pentru cele mai utilizate funcții, trebuie 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 prin tine 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 gestionate ca un întreg - mutate în formular, 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ă au aceeași distanță verticală între ele. 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. Selectați componenta dorită, 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 „fundal” ș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.


Top