Cunoștințele dobândite în lecțiile anterioare sunt suficiente pentru a începe să studieze mecanismele de intrare și de ieșire a datelor. Schema generală a programului este de aproximativ după cum urmează: utilizatorul introduce date, programul le citește, le face un fel de operațiune și produce un rezultat. Simplificată: introducere, procesare, ieșire. Ce putem face deja? Pentru datele de intrare avem nevoie de alte elemente, cum ar fi un câmp de introducere a textului (tEditează) sau multi-line -. TMemo, CheckBox sau RadioButon pentru a selecta parametri, etc pot fi folosite pentru a emite o etichetă de text (TLabel). Acum, să ne uităm la partea software. Deja știm cum să descriem variabilele, știm ce tip de date este și ce tipuri (numere, linii etc.) există. Rămâne doar să aflăm cum să asociem elemente vizuale cu codul de program. În exemplele discutate în lecțiile anterioare, am cerut valorile variabilelor manual (în codul), dar nu este cu siguranță acceptabil pentru fiecare program de. Programul trebuie să fie universal și să proceseze datele transferate de utilizator. Pentru intrare și ieșire, vor fi utilizate câteva funcții în Delphi. Care sunt funcțiile, de ce sunt necesare și cum să lucrați cu ele, ne-am uitat la ultima lecție. Ei bine, mai aproape de punct?
Introduceți, de exemplu, TEdit
Câmpul de introducere a textului (TEdit) este un element simplu și în același timp convenabil pentru introducerea datelor. În câmp putem introduce atât numărul cât și textul - nu există restricții. Deci, prima noastră sarcină este să aflăm ce este introdus pe teren. Pentru aceasta, trebuie să ne referim la proprietățile acestui obiect. Proprietatea Text este responsabilă pentru textul care se află în câmp. Aceasta este ceea ce vom folosi. Să încercăm să numărăm numărul care trebuie introdus. Vom plasa pe formular câmpul (TEdit) și butonul (TButton). Să creați butonul de preluare a butonului de buton și să faceți următoarele: declarați o variabilă de tip întreg și apoi încercați să puneți valoarea introdusă în câmpul respectiv.
procedura TForm1.Button1Click (expeditor: TObject);
var A: Integer;
începe
A: = Edit1.Text;
se încheie;
Se pare că totul este adevărat - am anunțat o variabilă și dorim doar să știm ce se înscrie în domeniu. Să încercăm să fugim (F9) - nu este așa de ușor! Compilatorul raportează o eroare:
[Error] Unit1.pas: Tipuri incompatibile: "Integer" și "TCaption"
Se spune că tipurile de date Integer și TCaption nu se potrivesc. TCaption este tipul de date al proprietății Text al TEdit. Acest tip "indică" un șir de text, i. E. orice caractere. Este mai clar? În câmpul de introducere, putem introduce nu numai numere, ci și litere și chiar orice caractere care sunt pe tastatură (și de fapt - în general, orice simboluri din tabelul de cod). Cu toate acestea, variabila noastră este un număr! Se pare că vrem să scriem simboluri ca număr. Este dezordonat! Da, spui: dar vom introduce numere, nu litere. Adevărat, dar compilatorul știe despre asta? Bineînțeles că nu. Și nu-l puteți convinge :-)
Tipurile de date nepotrivite sunt o greșeală obișnuită. Pentru a converti un tip de date într-altul este necesar foarte des. Exemplul nostru este o confirmare vie a acestui lucru. Pentru a lucra cu un număr, trebuie să convertim textul (exact textul) într-un număr.
Transformările pot fi efectuate în mai multe moduri. Principala este folosirea funcțiilor speciale. Funcțiile iau unul din mai mulți parametri (argumente), dintre care una este o variabilă sau o valoare care trebuie convertită. Funcția efectuează unele operații și returnează valoarea tipului de care avem nevoie.
Pentru a converti textul (șir) la un întreg, utilizați funcția StrToInt (). Numele reflectă cu precizie scopul funcției. Într-o funcție, un singur parametru este un șir, iar ieșirea este un număr. Prin urmare, pentru ca exemplul nostru să funcționeze, trebuie să scriem acest lucru:
procedura TForm1.Button1Click (expeditor: TObject);
var A: Integer;
începe
A: = StrToInt (Edit1.Text);
se încheie;
Acum programul va începe. Să încercăm să introducem un număr și să apăsăm butonul - nu se observă nici un răspuns. Acest lucru este adevărat, pentru că nu am programat altceva decât citirea numărului introdus. Și acum să încercăm să introduceți caractere străine (adică nu numere) - programul va "zbura" cu mesajul de eroare:
Mesajul indică, de asemenea, cauza erorii: "" abc "este un număr întreg nevalid". Cum să evităm astfel de mesaje și să le îndeplinim în schimb, vom da seama mai târziu.
Ieșire de date pentru exemplul TLabel
Înainte de a încheia, hai să facem niște operații cu numărul introdus. De exemplu, să pătrundem numărul. După cum știți, știți deja. Ieșirea este implementată într-o etichetă de text (Tabel). Proprietatea Caption este responsabilă pentru textul etichetei. În acest caz, acțiunile noastre trebuie să fie inverse: atunci când intrăm, am introdus valoarea introdusă în variabila, iar la ieșire ar trebui să transferăm valoarea din variabilă la element. Titlu pentru TLabel este de asemenea descris de tipul de date TCaption. și anume acesta este textul. Deci, trebuie să facem transformarea inversă, adică convertiți numărul la șir de text. Deoarece funcția pentru o astfel de traducere este numită, este ușor de ghicit - IntToStr (). Versiunea finală a dispozitivului de administrare a butoanelor:
procedura TForm1.Button1Click (expeditor: TObject);
var A: Integer;
începe
A: = StrToInt (Edit1.Text);
A: = Sqr (A);
Label1.Caption: = IntToStr (A)
se încheie;
Rulați programul și încercați:
Cel mai simplu program I / O este gata.
Unde pot afla despre tipurile acestor proprietăți?
Când scrieți funcția StrToInt (), linia proprietății Text va apărea, desigur.
O generalizare a ceea ce sa spus
Am examinat mecanismul de intrare-ieșire prin exemplul prelucrării numărului. Dacă prelucrarea face obiectul unui text, atunci nu este nevoie să convertiți tipurile de date. În mod similar, aproape toate datele sunt introduse și ieșite, principalul lucru este să efectuați conversia unor tipuri în altele.
Pentru a introduce numere întregi, există și un element convenabil - TSpinEdit. Acesta este situat pe fila Samples. În aspect este similar cu TEdit, numai în câmp există două butoane cu săgeți - pentru a schimba valoarea. Limitele numărului permis sunt setate de proprietățile MinValue și MaxValue. iar valoarea în sine este stocată în proprietatea Value.
Lucrul cu numere reale
De asemenea, ar trebui să menționăm numerele fracționate, pentru că uneori nu putem face fără ele. În general, intrarea și ieșirea lor sunt aproape aceleași ca și pentru numere întregi, sunt utilizate numai funcțiile StrToFloat () și FloatToStr (). E simplu. Cu toate acestea, cu numere reale există o problemă - separatorul întregului și partea fracționată. Faptul este că nu există nici o certitudine care caracter trebuie considerat separator - perioadă sau virgulă. Caracterul selectat depinde de setările sistemului de operare (în Windows, acest semn este definit în Panoul de control din secțiunea Limbi și standarde regionale). Astfel, dacă ascuțiți programul sub o virgulă, atunci pe sistemele în care este instalat punctul, nimic nu va funcționa și vor apărea erori în timpul funcționării. În același timp, sub acest punct, nu puteți ascuți programul, pentru că aveți și o virgulă. Din fericire, există o soluție. Există o variabilă pe care nu trebuie să o declarați oriunde, dar a cărei valoare poate fi schimbată este variabila DecimalSeparator. Este declarată în modulul SysUtils și stochează caracterul care va fi considerat un delimiter. Puteți seta valoarea dorită o singură dată, de exemplu, când programul este pornit. Astfel puteți seta punctul separator:
procedura TForm1.FormCreate (expeditor: TObject);
începe
DecimalSeparator: = '.' ;
se încheie;
Alte modalități de ieșire
În plus față de ieșirea către obiecte (de exemplu, în TLabel), uneori este convenabil să afișați date sub formă de mici ferestre individuale. În acest scop, există comenzi standard. În lecțiile anterioare, ne-am întâlnit deja cu ei, dar nu i-am dezasamblat în detaliu.
1. O fereastră simplă cu un mesaj - ShowMessage ()
Fereastra cea mai primitivă conține textul specificat și butonul OK pentru a închide fereastra. Puteți apela această fereastră cu procedura ShowMessage (). al cărui parametru este text - va fi afișat în fereastră. Modificați mini-programul nostru prin eliminarea TLabel și înlocuirea liniei de ieșire:
procedura TForm1.Button1Click (expeditor: TObject);
var A: Integer;
începe
A: = StrToInt (Edit1.Text);
A: = Sqr (A);
ShowMessage (IntToStr (A));
se încheie;
În acest caz, vedem următoarele:
Trebuie remarcat faptul că în timp ce fereastra mesajului se află pe ecran, interfața programului este blocată și comenzile ulterioare sunt terminate. Numai după apăsarea butonului, programul își va continua activitatea.
2. Caseta de dialog - MessageDlg ()
Dulapurile de dialog sunt un tip mai complex de ferestre. Casetele de dialog sunt adesea folosite pentru a "comunica" cu utilizatorul. Odată ce am folosit această fereastră - când fereastra programului a fost închisă, am întrebat utilizatorul dacă fereastra ar trebui închisă. Acum, să analizăm lucrul cu astfel de ferestre în detaliu.
Casetele de dialog sunt create de funcția MessageDlg (). Aceasta este o funcție, nu o procedură. Valoarea returnată este butonul pe care la apăsat utilizatorul. Funcția are 4 parametri de intrare:
- Textul mesajului (tip de date - String);
- Tipul de casetă de dialog (tipul de date special - TMsgDlgType) - indică pictograma din fereastră și titlul ferestrei. Acest parametru este specificat de una dintre următoarele constante:
- mtInformation - fereastra de informații (pictograma din fereastră este litera "i");
- mtConfirmation - o fereastră cu o întrebare (pictogramă - un semn de întrebare);
- mtWarning - fereastra de avertizare (pictogramă - punct de exclamare);
- mtError - o fereastră cu un mesaj de eroare (pictograma - o cruce pe fundal roșu);
- mtCustom - o fereastră fără o pictogramă, și în titlu - numele fișierului executabil (toate celelalte tipuri în antetul pus tipul corespunzător numele de dialog - informații de avertizare, etc.)
- Button. care vor fi afișate în fereastră. Fiecare buton are, de asemenea, o anumită constantă. Butoanele sunt enumerate prin virgule și tot acest "set" este înconjurat de paranteze pătrate (ceea ce înseamnă paranteze pătrate - vom afla mai târziu). Iată constantele tuturor butoanelor disponibile: mbYes. mbNo. MBOK. mbCancel. mbAbort. mbRetry. mbIgnore. mbAll. mbNoToAll. mbYesToAll. mbHelp. Numele constantei indică numele butonului însuși.
- Al patrulea parametru indică indexul secțiunii din sistemul de ajutor. corespunzătoare acestui dialog. De regulă, aceasta nu este utilizată și este setată pur și simplu 0.
Deoarece valorile returnate de funcția sunt toate aceeași constantă cheie, cu singura diferență că, în loc de „mb“, ei încep să „mr“ (contracție de „buton modal“ și „rezultat modal“, respectiv).
Să ne schimbăm programul - să se afișeze rezultatul în fereastra de informații. Observați cât de frumoasă arată această fereastră:
procedura TForm1.Button1Click (expeditor: TObject);
var A: Integer;
începe
A: = StrToInt (Edit1.Text);
MessageDlg ( 'numere pătrate' + IntToStr (A) + 'este egal cu' + IntToStr (Sqr (A)), mtInformation, [MBOK], 0);
se încheie;
Notă: puteți să combinați șiruri de text doar prin adăugarea lor - semnul "+" (a se vedea fragmentul de cod de mai sus). Linile în sine sunt scrise în citate simple.
Ei bine și în cele din urmă vom încerca să folosim dialogul pentru caietul de sarcini de la utilizatorul informațiilor suplimentare. De exemplu, dacă este introdus un număr negativ, vom întreba dacă acesta ar trebui să fie pătrat. Codul va arata cam asa:
procedura TForm1.Button1Click (expeditor: TObject);
var A: Integer;
începe
A: = StrToInt (Edit1.Text);
dacă A <0 then
dacă MessageDlg ("Numărul negativ, pătrați?", mtConfirmation, [mbYes, mbNo], 0) = mrYes atunci
MessageDlg ( 'numere pătrate' + IntToStr (A) + 'este egal cu' + IntToStr (Sqr (A)), mtInformation, [MBOK], 0);
se încheie;
Rezultatul va fi:
Aspectul ferestrelor de toate tipurile:
3. Caseta de dialog MessageBox ()
Utilizând funcția MessageBox (), puteți afișa și casete de dialog. În aparență, ele aproape nu diferă de ferestrele MessageDlg (). cu toate acestea, este posibil să specificați titlul ferestrei. Pentru a genera o linie de cod folosind MessageBox (), există un program Master MessageBox. Cu aceasta puteți crea rapid caseta de dialog necesară. Problema MessageBox () este că tipul și butoanele de dialog sunt setate într-un mod ușor neobișnuit.
Introduceți utilizând caseta de dialog
Ferestrele speciale există nu numai pentru afișare, ci și pentru intrare. Un exemplu de astfel de fereastră este InputBox (). Funcțiile primesc 3 parametri: titlul titlului ferestrei, textul explicației și valoarea care se află în câmp atunci când fereastra este afișată pe ecran. Funcția introdusă în câmp se returnează ca valoare-rezultat. exemplu:
procedura TForm1.Button2Click (expeditor: TObject);
începe
dacă InputCasuta (. „Enigma“ 'sta bunicul, o sută de straturi care purtau dezbrace lui -. lacrimi vărsat Cine.? „“) = «ceapa» atunci
MessageDlg ('Corect!', MtInformation, [mbOk], 0)
altfel
MessageDlg ("Nu ai ghicit", MtWarning, [mbOk], 0)
se încheie;
concluzie
Am analizat modalitățile de introducere și ieșire a datelor și, de asemenea, am făcut cunoștință cu casetele de dialog. Metodele de intrare / ieșire sunt utilizate în aproape orice aplicație: în cele care au o interfață de fereastră, acest lucru se face folosind obiecte vizuale, iar pentru aplicațiile console - în modul linie de comandă.
teme pentru acasă
Creați un program care solicită utilizatorului trei numere - lungimea laturilor triunghiului. Când butonul este apăsat, programul trebuie să calculeze suprafața triunghiului cu laturile indicate și dacă un astfel de triunghi nu există, atunci emiteți un mesaj corespunzător.