Capitolul 6 Programarea aplicațiilor cu o interfață grafică
Toți operatorii liniei curente lipsesc (prin urmare, este recomandat să aibă un operator pe linie pentru a putea controla execuția fiecărui operator separat). Fiecare apăsare ulterioară a F7 va determina executarea instrucțiunii pe următoarea linie. Operatorul executant curent va fi evidențiat în gri, iar numărul acestuia este marcat cu săgeată verde, Fig. 6,35. Dacă codul întâlnește un apel unei proceduri sau unei funcții, atunci toți operatorii de carieră ai acestei proceduri (funcție)
de asemenea, într-un mod pas cu pas.
Pas cu pas în bypass. De fiecare dată când este apăsată tasta F8, toți operatorii liniei curente vor fi de asemenea executați. Dacă găsiți codul
convocarea unei proceduri sau a unei funcții, atunci toți operatorii corporali ai procedurii vor fi executați.
(funcții) fără intrare, adică "imediat" și indicatorul va fi setat la următorul
după ce apelează șirul de subrutine.
Fereastra de observare. Poate că instrumentul cel mai important și mai util este
freturi. În această fereastră, puteți monitoriza valorile curente ale variabilelor în timpul executării programului. Acest instrument vă va ajuta să urmăriți ciclul de viață al variabilelor care vă interesează și să vedeți cum se schimbă valorile acestora după executarea unui anumit operator. Pentru a deschide această fereastră, puteți utiliza comanda de meniu View -> windows Debug -> Window Observation. Totuși,
deschideți cu o combinație de taste
Figura 6.36. Pentru a adăuga o nouă variabilă, faceți clic dreapta pe
în fereastra de observație, în caseta de dialog deschis, introduceți numele
sau expresie, Fig. 6.37. Puteți desemna o locație permanentă

6.3 Programarea vizuală în mediul Lazarus
Fig. 6,35. Executarea pas cu pas a aplicației
Fig. 6.36. Fereastra din lista observațiilor
Fig. 6.37. Fereastra pentru adăugarea unei noi variabile în lista de urmărire
Este în general acceptat faptul că depanarea precede testarea. Asta este, pro-
Gramaticianul, atunci când dezvoltă programul, îl depanează mai întâi (detectează și
"ucide" toate "bug-urile"), apoi trece la testare. Dar, în general,
Capitolul 6 Programarea aplicațiilor cu o interfață grafică
testarea și depanarea proceselor interconectate. Adesea, atunci când se testează
Există erori care sunt fixate ... prin depanare și invers,
În timpul depanării, sunt detectate multe erori algoritmice. Prin urmare, această frază aproape întotdeauna utilizează împreună - testarea și depanarea.
În principiu, testarea începe atunci când cererea dvs. a devenit pe deplin operațională, adică sa oprit "zburând", "suspendând", "
și așa mai departe, și a început să dea rezultate. Dacă aceste rezultate sunt dezvăluite prin testare, dar cu excepția corectitudinii rezultatelor obținute,
în timpul testării este foarte important să se verifice "inacceptabil", "imposibil"
și chiar acțiuni "stupide" ale utilizatorilor. Dacă nu este nevoie să introduceți un număr de 0, ar trebui să verificați cu siguranță modul în care se comportă programul dvs. când introduceți exact acest zero, și așa mai departe. În exemplele pe care le-am examinat, noi, în esență,
asta au fost ceea ce fac ei!
6.3.10 Componente de afișare și selecție de date
Acest grup de componente vă permite să afișați vizual informații
De asemenea, este ușor să selectați datele potrivite. Informațiile din aceste componente sunt conținute sub forma unei liste (set) de linii. Pentru a lucra cu liste de șiruri, a fost dezvoltată o clasă specială numită TStrings. Această clasă este un abstract-
și încapsulează metodele de lucru cu seturi de rânduri. Din această clasă,
există clase specializate în componentele de afișare și selectare a datelor care oferă acces și procesare a unui set de șiruri de caractere corespunzătoare
cu funcționalitatea componentei. Deoarece metodele de adăugare și eliminare
Rândurile din clasa TStrings nu sunt implementate și declarate ca fiind abstracte,
toate clasele moștenitorilor din componentele mapării și selecției se suprapun acestor metode. Pentru a introduce, a edita și a edita date multi-linie mai convenabil
6.3 Programarea vizuală în mediul Lazarus
utilizați componenta TMemo.
6.3.10.1. Componenta TMemo
"Notepad", adică Sunt disponibile toate funcțiile de editare standard (selectare,
Informațiile din TMemo sunt conținute ca un set de rânduri (de tip matrice) de tip TStrings. Fiecare element al matricei conține exact un rând. Dos
La o linie separată, puteți utiliza proprietatea Liniile noii sale
măsură (index). Indicele este specificat, așa cum ar trebui să fie pentru matrice, într-
între paranteze. Numerotarea rândului începe de la zero. Numărul total de linii
este deținută în proprietatea Lines.Count.
Dacă șirul nu se încadrează în întregime în fereastră, atunci puteți seta proprietatea
WordWrap = true și apoi partea din linia care nu se potrivește va fi mutată automat la linia următoare.
De asemenea, puteți seta barele de defilare cu proprietatea ScrollBars.
Valorile posibile ale proprietăților sunt:
ssNone - instalat în mod prestabilit, fără bare de defilare.
ssVertical - setați bara verticală de defilare.
ssHorizontal - Setați bara orizontală de defilare.
ssBoth - setează atât benzi verticale cât și orizontale.
ssAutoVertical - bara verticală din fereastra componentei este vizibilă, dar nu este disponibilă până când fereastra nu este umplută vertical.
ssHorizontal - Bara orizontală din fereastra componentei este vizibilă, dar nu este disponibilă până când fereastra nu este umplută orizontal.
ssAutoBoth - combină cele două valori anterioare.
Puteți împiedica modificarea utilizatorului prin setarea proprietății
Capitolul 6 Programarea aplicațiilor cu o interfață grafică
Adăugarea unei noi linii la introducerea datelor de la tastatură se face prin apăsarea tastei Enter. Proprietatea WantReturns trebuie să fie
este setat la true. Dacă WantReturns = false. apoi pentru a merge la o nouă linie, trebuie să apăsați pe Ctrl + Enter.
Proprietatea SelStart indică începutul textului selectat și SelLength
- lungimea textului selectat (numărul de caractere).
În proprietatea Text, întregul set de rânduri este reprezentat ca o singură linie, cu returul carierei delimitatorilor și înfășurarea liniei (# 13 # 10) între linii.
Să vedem cum să umplem programabil câmpul de intrare al unei componente. Pentru a
Pentru a introduce un șir în TMemo, trebuie să utilizați următoarele metode:
funcția Adăugare (const S: string): integer; - adaugă șirul S
TMemo și returnează indexul.
adăugați procedura (const S: șir); - adaugă pur și simplu șirul S
la sfârșitul unui set de linii.
Pentru a adăuga un set întreg, de exemplu, dintr-o altă componentă
TMemo. puteți aplica metode:
procedură AddStrings (TheStrings: Tstrings); - unde TheStrings este un set de șiruri de tip TStrings. adaugă acest set de șiruri de caractere la
procedură Atribuire (Sursă: TPersistent); - șterge complet conținutul TMemo și încarcă un nou set de rânduri de la Source.
Pentru a insera un rând într-un loc arbitrar în lista de linii, există o metodă
introduceți procedura (index: integer; const S: șir); -
unde Index este numărul (indicele) liniei unde este inserat șirul S. În același timp, linia veche nu dispare, dar este deplasată în jos împreună cu toate liniile de bază
(indicele lor crește automat cu unul).
Puteți înlocui conținutul unui rând cu un simplu operator de atribuire, de exemplu, pentru a înlocui conținutul unei linii cu un index cu

6.3 Programarea vizuală în mediul Lazarus
Înregistrați operatorul:
Memo1.Lines [k]: = 'Conținutul șirului înlocuit';
De asemenea, puteți adăuga rânduri de către un operator de atribuire, dar pentru o singură utilizare,
nu puteți utiliza această metodă la momentul creării formularului, adică în procesare
Creați o formă.
Și, în final, pentru a șterge un șir, metoda aplicată
Să aplicăm aceste cunoștințe unui exemplu simplu. Creați un nou
proiectul dumneavoastră. Puneți două componente TMemo pe formular. două inscripții și un buton aproximativ așa cum se arată în figura 6.38.
Fig. 6.38. Formați cu componente TMemo
În formularul OnCreate pentru formular, introduceți codul:
procedura TForm1.FormCreate (expeditor: TObject);
Memo1.Lines.Append ('Acesta este un șir lung,' + // metoda de adăugare
"nu se potrivește în fereastra Memo1");
Memo1.Lines.Add ("Și aceasta este o linie scurtă"); // metoda de adăugare
Memo2.Clear; // ștergeți setul de mesaje Memo2
pentru i: = 0 la Memo1.Lines.Count - 1 do // adăugați rânduri
Memo2.Lines.Append (Memo1.Lines [i]); // în buclă
//Memo2.Lines.Add(Memo1.Lines[i]);// puteți aplica Adăugați
Memo2.Lines.AddStrings (Memo1.Lines); // Prima metodă
Memo2.Lines.Assign (Memo1.Lines); // al doilea, cu curățenie
Experimentați introducerea textului pentru diferite valori ale proprietăților
WordWrap. WantReturns. ReadOnly și ScrollBars.
Pentru a seta parametrii fontului, proprietatea Font este disponibilă. Are subdomenii sub numele de Nume - nume font, dimensiune - dimensiune, culoare -
Culoare, stil - stil de font și altele.
Proprietatea Aligment este utilizată pentru a alinia textul în fereastra TMemo.
Are următoarele semnificații:
taLeftJustify - aliniază la stânga. taCenter - alinierea centrului. taRightJustify - Aliniere dreapta.

6.3 Programarea vizuală în mediul Lazarus
Proprietatea Font este de asemenea disponibilă în program. Pentru exemplul anterior, adăugați un alt buton la formular, așa cum se arată în Fig. 6.39.
Scrieți următorul handler pentru acest buton:
procedura TForm1.Button2Click (expeditor: TObject);
Fig. 6.39. Formularul de cerere
După pornirea aplicației și dând clic pe butonul "Schimbare font", textul din
Memo2 își va schimba dimensiunea și culoarea.
Se pune întrebarea, dar nu pot da utilizatorului dreptul de a schimba atributele fontului? Pentru aceasta, există o componentă specială
bor proprietățile fonturilor TFontDialog. Acesta este situat pe pagina Dialoguri
o paletă de componente. Componenta nu este vizuală, deoarece în timpul rulării utilizatorul nu va vedea componenta însăși, ci un dialog standard,

Capitolul 6 Programarea aplicațiilor cu o interfață grafică
Când se face referire la această componentă. Prin urmare, poate fi
trăiți oriunde în formă. Dialogul este inițiat printr-o metodă specială.
casa componentă a Execute. Aceasta este o funcție care returnează adevărat. dacă în re-
Utilizatorul a ales de fapt câteva opțiuni pentru fonturi. Parametrii selectați sunt stocați în proprietățile componentei TFontDialog. Dacă utilizatorul nu a selectat nimic și a făcut clic pe butonul Anulare
sau tasta Esc. atunci funcția revine false.
Astfel, pentru a apela dialogul, trebuie să scrieți:
dacă FontDialog1.Execute apoi
Creați o nouă aplicație. Glisați componenta TMemo pe formular,
TFontDialog. două butoane și două inscripții, așa cum se arată în Fig. 6,40.
Fig. 6,40. Forma de aplicare cu componenta suplimentară TFontDialog
În manualul butonului "Schimbare font", introduceți codul:
procedura TForm1.Button1Click (expeditor: TObject);
dacă FontDialog1.Execute apoi