Eliminare virusi, malware de pe site
Un tutorial despre cum se scoate malware de pe o pagina web
Programarea visuala in Delphi (Tutorial; Nivel: Incepator)
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:
Citat:
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):
Citat:
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