Sunteți pe pagina 1din 3

Programarea visuala in Delphi (Tutorial; Nivel: Incepator)

on: 30-09-2006, 10:09


NOTA: "Nivel: incepator" se refera la incepatorii in Delphi. Se presupune ca deja aveti
niste cumostiinte minimale despre algoritmica si programare (fie in Pascal sau alt limbaj
structurat)
In primul rand nu voi vorbi despre diferentele de limbaj (Da, sunt diferita, dar despre asta, va
urma) ci voi vorbi despre diferentele in gandire la implementarea unui program. Va voi
prezenta structura unui program cu interfata grafica faut in Delphi 7 si va voi spune care sunt
diferentele majore de gandire.
In primul rand, cand incepeti un proiect nou in Delphi (application) IDE-ul va genera automat
6 fisiere (in tutorial se pastreaza numele oferite de IDE, fisierele nu vor fi salvate sub alta
denumire):
Project1.dpr
Project1.cfg
Project1.dof
Project1.res
Unit1.pas
Unit1.dfmFiecare din aceste fisiere are importanta lui: Fisierul Project1.dpr (si orice alt
fisier cu extensia .dpr) reprezinta ceea ce in Pascal era denumit in mod frecvent ca fiind
programul principal. Acest fisier contine practic informatiile despre formularele si uniturile
principale din program. Tot el este cel care contine codul pentru initializarea aplicatiei.
Continutul default este:
Code: [Select]
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Veti observa ca el contine doar cateva informatii minimale; de asemenea nu foloseste decat 2
unit-uri: Forms (necesar pentru a putea lucra cu formularele) si Unit1 care este practic unit-ul
pentru primul formular. Daca se introduc mai multe formulare in proiect, ele vor aparea la
declaratii.
Linia {$R *.res} include in program orice fisier cu extensia .res (fisiere cu resurse; ele pot
contine icoane, cursoare, imagini, siruri de caractere sau chiar alte fisiere imbricate in fisierul
res). Restul codului se ocupa cu initializarea aplicatiei (Application.Initialize;), crearea
formularelor existente (Application.CreateForm(TForm1, Form1); ) si rularea aplicatiei
(Application.Run;). Cat atat ar fi de zis despre un fisier dpr.
Fisierul Project1.dof contine toate setarile (referitoare la Proiect) necesare pentru compilator.
Continutul lui este prea mare pentru a fi introdus aici, dar va pot spune ca in el sunt trecute
informatiile despre pacheetele incluse sau excluse, setarile pentru linker-ul compilatorului, cat
si alte informatii despre modul de compilare a proiectului. Daca vreodata va jucati cu setarile
compilatorului pentru un proiect, iar acesta nu se mai compileaza, stergeti acest fisier (el va fi
regenerat din nou cu setarile implicite).
Fisierul Project1.cfg contine de asemenea cateva informatii pentru compilator. In el vor fi
trecute flag-urile (deocamdata nu e nevoie sa explic mai mult despre flag-uri), informatii
referitoare la memorie si la modul in care compilatorul va trata secvente de cod mai...
speciale.
Fisierul Project1.res contine resursele: iconitele (da, le puteti schimba... scapati de cea initiala
cu un 7 amarat), cursoare pt mouse, imagini, etc. Tot ce pot sa va zic, e sa deschideti fisierul
cu un explorator de resurse (gen ResHacker, etc). Veti vedea mai bine asa despre ce vorbesc.
Fisierul Unit1.pas este cel mai important, deoarece el va contine practic codul pentru
aplicatie! In el vor fi trecute instructiunile pentru formularul default; practic, acesta e codul
care il veti scrie si care va reprezenta "creierul" aplicatiei. Veti observa ca programarea in
acest fisier se face strict functionala! Nu vor exista secvente de cod care se vor executa fara sa
fie indeplinite anumite conditii (nu va exista acel program principal).
Fisierul Unit1.dfm este fisierul responsabil cu pastrarea informatiilor despre formular. In el
sunt trecute pozitiile componentelor, numele acestora si proprietatile lor.
Acum ca stiti structura fisierelor, sa trecem la "modul de gandire". Diferenta majora intre
crearea de aplicatii mod consola si cel in mod "grafic" este modul in care programul executa
secventele de cod. Daca in cazul aplicatiilor de tip consola executia programului era liniara, in
cazul programelor executate in mod grafic in delphi lucrurile stau altfel.
Practic, intr-un program de tip consola executia instructiunilor se face astfel (pseudocod):
Code: [Select]
functie div(param):tip
inceput
instructiune;
sfarsit

program principal
inceput
instructiune
apel div
instructiune
sfarsit
Pentru codul de mai sus, linia evenimentelor ar fi: se executa instructiunile din Programul
principal pana la intalnirea apelului functiei div. In momentul in care se intalneste acest apel,
executia "sare" din programul principal si trece prin instructiunile functiei. Odata ce s-au
terminat instructiunile acesteia, se va continua cu executia programului principal.
Practic, mereu se va stii numarul de pasi si modul in care se vor executa instructiunile (nu ma
intrebati de goto pentru ca e programare nestructurata!!!).
In Delphi la programarea "visuala" (sau VCL ori CLX) treaba asta altfel... La executarea
programului principal se vor face initializarile de rigoare, iar la intalnirea comenzii
Application.Run se va arata primul formular definit si executia insturctiunilor va "sari" la
instructiunile unitului formularului respectiv. Pana aici, nimic nou. Dar abia acum incepe
distractia... In momentul in care linia de executie ajunge in unitul unui formular, ce credeti ca
se va intampla? De vreme ce unitul respectiv nu are program principal, va puteti da seama ca
nu se va executa nimic automat si neconditionat. Partea cea mai grea de inteles este cea cu
eventurile (evenimentele), sau declansatoarele de functii. In momentul in care linia de
executie ajunge in unitul formului, ea va sari aleator de la o functie la alta. Totusi, aceste
salturi nu sunt chiar aleatorii, ci sunt conditionate de mesajele primite de la... Utilizator,
sistemul de operare sau chiar alte programe. De exemplu, in limbajul pascal daca vroiai sa
executi instructiunea "writeln('something');" pentru a te asigura ca va fi afisat cel putin acel
text pe ecran indiferent de succesul executarii aplicatiei sau nu, era prima instructiune care o
scriai dupa BEGIN-ul principal. In delphi treaba sta altfel. Deoarece exista o gramada de
dependente si factori de analizat, modificarea programului principal nu este asa usoara. Mai
toata treaba se poate si se face din uniturile formularelor (este cea mai buna metoda in cazul
programarii VCL | CLX). Dar considerand ca in unit nu avem program principal... ce facem?
De exemplu avem evenimentul onCreate atasat obiectului de tip FORM. Ce inseamna asta?
Ca imediat dupa crearea formularului (si initiaalizarea tuturor componentelor pe care le
contine) se va da un mesaj (in interiorul programului) care va anunta aplicatia ca formularul a
fost creat cu succes. In momentul asta, aplicatia "vede" daca cumva trebuie sa execute un
anumit set de instructiuni in cazul in care primeste acest mesaj. La fel se poate intampla si la
inchiderea formularului, la afisarea lui, la mutarea lui pe ecran, etc. Acest lucru este foarte
util. Daca in Pascal, executia instructiunilor era inflexibila odata ce programul era compilat
(adica doar programul putea alege sa nu execute anumite instructiuni folosind IF-uri) la
programele Delphi nu mai este cazul. Sa luam exemplu un program care are un singur
formular si foloseste eventurile onCreate, onShow, onClick si onClose; Va puteti da seama ca
sigur se vor executa eventurile onCreate (la crearea formularului), onShow (la afisarea
formularului) si onClose (la inchiderea formularului). Dar onClick? Daca utilizatorul nu da
click pe formular secventele de cod pentru acest event nu vor fi declansate niciodata. Totusi,
Delphi permite programatorului sa se asigure ca macar odata va fi executata si acea secventa
de cod prin apelarea procedurii TForm1.FormClick prin apelarea ei in oricare din secventele
de instructiuni din cadrul eventurilor onCreate, OnClose, etc. Din acest punct de vedere,
Delphi este mult mai permisiv decat Pascal.
Sper ca nu v-am pierdut cu toate aceste explicatii. Veti gasi si un link un pic mai jos care are
un program facut tocmai in scopul de a va arata aceste evnimente . Uitati-va la codul sursa si
incercati sa va dati seama ce va face aplicatia

S-ar putea să vă placă și