Utilizarea Programarii Html Si Java In Managementul Educational
SINTEZA PROIECTULUI DE DIPLOMA
3.TEMA PROIECTULUI: Utilizarea programarii HTML si JAVA in managementul educational
4.CUVINTE CHEIE : INTERNET, HTML, JAVA, APPLET, HARTA DE IMAGINI
5.DESCRIEREA SINTETICA A PROIECTULUI:
Proiectul reprezinta un exemplu de realizare a unei pagini WEB complexe, cu o interfata grafica activa, la realizarea careia contribuie facilitatile oferite de appleturile Java; este o aplicatie de sine statatoare, ce urmeaza a fi utilizata pentru a face cunoscuta prin intermediul Internetului activitatea laboratorului disciplinei de Software in Telecomunicatii, din cadrul Universitatii Tehnice Cluj-Napoca. Lucrarea este insotita de elementele teoretice de baza ce privesc limbajul HTML, cat si fundamentele programarii in limbajul Java, axate in deosebi pe realizarea appleturilor, in mod general, si puncteaza resursele si elementele de programare utilizate in realizarea aplicatiei, in particular.
1.Memoriu tehnic
1.1 Introducere
In stadiul actual de dezvoltare ale societatii omenesti, comunicarea a devenit mai mult decat o necesitate; putem spune ca este chiar un mod de a trai. Din ce in ce mai mult, lumea este privita ca o retea, in care internetul vine cu o superba promisiune: prin imensa retea globala, vom deveni cu totii niste cetateni universali.
Internet-ul a implinit 25 de ani si nu mai este doar un experiment. "Copilãria" lui s-a încheiat si o datã cu ea s-a terminat si epoca romantica în care doar hobby-stii se descurcau prin hatisul protocoalelor si a variantelor de Unix. Acum sistemul este
relativ stabil si larg folosit, si probabil a contribuit mai mult la realizarea satului global decat televiziunea prin satelit care isi revendica deseori acest merit. Oricine a trimis un mesaj prin email peste ocean si a primit raspunsul într-un sfert de ora a
constientizat mult mai puternic ideea de sat global decat privind un meci de fotbal transmis în direct de pe acelasi continent.
Reteaua de calculatoare, obiectivul primar al ARPANETului, a devenit pe nesimtite o retea de oameni: se vorbeste de un timp de comunitãti virtuale, compuse nu din oamenii apartinand aceluiasi spatiu geografic ci din cei uniti prin acelasi newsgroup, mailing list sau BBS.
1.2 HTML-prezentare
Unul din primele elemente fundamentale ale WWW ( World Wide Web ) este HTML ( Hypertext Markup Language ), care descrie formatul primar in care documentele sint distribuite si vazute pe Web. Multe din trasaturile lui, cum ar fi independenta fata de platforma, structurarea formatarii si legaturile hipertext, fac din el un foarte bun format pentru documentele Internet si Web.
Primele specificatiile de baza ale Web-ului au fost HTML, HTTP si URL.HTML a fost dezvoltat initial de Tim Berners-Lee la CERN in 1989. HTML a fost vazut ca o posibilitate pentru fizicienii care utilizeaza computere diferite si schimbe intre ei informatie utilizind Internetul. Erau prin urmare necesare citeva trasaturi : independenta de platforma, posibilitati hypertext si structurarea documentelor. Independenta de platforma inseamna ca un document poate fi afisat in mod asemanator de computere diferite ( deci cu fonturi, grafica si culori diferite ), lucru vital pentru o audienta atit de variata.
Hipertext inseamna ca orice cuvint, fraza, imagine sau alt element al documentului vazut de un utilizator ( client ) poate face referinta la un alt document, ceea ce usureaza mult navigarea intre multiple documente sau chiar in interiorul unui aceluiasi document. Structurarea riguroasa a documentelor permite convertirea acestora dintr-un format in altul precum si interogarea unor baze de date formate din aceste documente.
1.2.1 SGML si HTML
Tim Berners-Lee a utilizat ca model SGML ( Standard Generalized Markup Language ), un standard international in plina dezvoltare. SGML avea avantajul unei structurari avansate si al independentei de platforma dar proiectarea lui a avut in vedere mai mult structura semantica a documentului decit modul de formatare. Flexibil, SGML putea fi descris ca o specificare pentru descrierea altor formate. Utilizatorii puteau crea noi formate (DTD, Document Type Definitions) care puteau fi intelese de orice produs soft SGML pur si simplu prin citirea mai intai a definitiilor noilor formate.
HTML este pur si simplu un DTD, deci o aplicatie a SGML. In primii ani de evolutie HTML a crescut lent, in principal pentru ca ii lipseau posibilitatile de a descrie publicatii electronice profesionale; limbajul permitea oarece control asupra fontelor dar nu permitea inserarea graficii. In 1993, NCSA a imbogatit limbajul pentru a permite inserarea graficii si au construit primul navigator grafic, Mosaic. Au urmat apoi contributii ad hoc ale diverselor firme care au adus adaugiri limbajului HTML (adaugiri si nu imbogatiri pentru ca unele taguri nu erau in conformitate cu principiile generale ale SGML) astfel incat, prin 1994 limbajul parea scapat de sub control. Urmarea a fost ca la prima conferinta WWW din Geneva ( Elvetia ) s-a constituit un grup ( HTML Working Group ) a carui prima misiune a fost formalizarea HTML intr-un DTD al SGML, lucru care s-a concretizat in HTML Level 2 ( sau HTML 2.0; Nivelul 1, deci HTML 1.0, a fost proiectat de Tim Berners-Lee ). Importanta actiunii acestui grup consta in faptul ca, odata standardizat, limbajul poate fi apoi extins intr-un mod mai controlat la alte nivele.
Standardul oficial HTML este World Wide Web Consortium (W3C), care este afiliat la Internet Engineering Task Force (IETF). W3C a enuntat cateva versiuni ale specificatiei HTML, printre care si HTML 2.0, HTML 3.0,HTML 3.2, HTML 4.0 si, cel mai recent, HTML 4.01. In acelasi timp, autorii de browsere, cum ar fi Netscape si Microsoft, au dezvoltat adesea propriile "extensii" HTML in afara procesului standard si le-au incorporat in browserele lor. In unele cazuri, cum ar fi tagul Netscape , aceste extensii au devenit standarde de facto adoptate de autorii de browsere.
HTML 2.0, elaborat in Iunie 1994, este standardul pe care ar trebui sa-l suporte toate browserele curente, inclusiv cele mod text. HTML 2.0 reflecta conceptia originala a HTML ca un limbaj de marcare independent de obiectele existente pentru asezarea lor in pagina, in loc de a specifica exact cum ar trebui sa arate acestea. Daca doriti sa fiti siguri ca toti vizitatorii vor vedea paginile asa cum trebuie, folositi tagurile HTML 2.0.
Specificatia HTML 3.0, enuntata in 1995, a incercat sa dezvolte HTML 2.0 prin adaugarea unor facilitati precum tabelele si un mai mare control asupra textului din jurul imaginilor. Desi unele din noutatile HTML 3.0 erau deja folosite de autorii de browsere, multe nu erau inca. In unele cazuri, taguri asemanatoare implementate de autorii de browsere au devenit mai raspandite decat tagurile "oficiale". Specificatia HTML 3.0 acum a expirat, deci nu mai este un standard oficial.
In Mai 1996, W3C a scos pe piata specificatia 3.2, care era proiectata sa reflecte si sa standardizeze practicile acceptate la scara larga. Deci, HTML 3.2 include tagurile HTML 3.0 ce erau adoptate de autorii de browsere ca Netscape si Microsoft plus extensii HTML raspandite. In bilantul asupra HTML, W3C recomanda ca providerii de informatii sa utilizeze specificatia HTML 3.2. Versiunile curente ale majoritatii browserelor ar trebui sa suporte toate, sau aproape toate aceste taguri.
De asemenea exista extensii Netscape si Microsoft care nu fac parte din specificatia HTML 3.2, ori pentru ca sunt mai putin utilizate, ori au fost omologate dupa aparitia HTML 3.2. Pentru ca navigatorul Netscape a fost printre primele browsere care suporta anumite taguri HTML 3.0, iar Netscape detine in jur de 70% din piata de browsere, multi au crezut eronat ca toate extensiile Netscape (incluzand taguri ca si facilitati ca ferestrele) fac parte din HTML 3.0 sau HTML 3.2.
La momentul redactarii acestui document, HTML 4.0 este larg utilizat si au fost deja publicate specificatiile HTML 4.01.
Documentele HTML sint documente in format ASCII si prin urmare pot fi create cu orice editor de texte. Au fost insa dezvoltate editoare specializate care permit editarea intr-un fel de WYSIWYG (What You See Is What You Get) desi nu se poate vorbi de WYSIWYG atita vreme cit navigatoarele afiseaza acelasi document oarecum diferit, in functie de platforma pe care ruleaza. Au fost de asemenea dezvoltate convertoare care permit formatarea HTML a documentelor generate ( si formatate ) cu alte editoare. Evident conversiile nu pot pastra decit partial formatarile anterioare deoarece limbajul HTML este inca incomplet.
1.3 Notiunile de baza in HTML
Orice document HTML incepe cu notatia <html> si se termina cu notatia </html>. Aceste caractere speciale se numesc in literatura de specialitate "TAG-uri".Prin conventie, toate informatiile HTML incep cu o paranteza unghiulara deschisa "<" si se termina cu o paranteza unghiulara inchisa ">".
Tag-urile intre aceste paranteze transmit comenzi catre browser pentru a afisa pagina intr-un anumit mod.Unele blocuri prezinta delimitator de sfarsit de bloc, in timp ce pentru alte blocuri acest delimitator este optional sau chiar interzis.
Intre cele doua marcaje <html> si </html> vom introduce doua sectiuni: sectiunea de antet <head>…</head> si corpul documentului <body>…</body>. Blocul <body>…</body> cuprinde continutul propriu-zis al paginii HTML, adica ceea ce va fi afisat in ferastra browser-ului.
O eticheta poate fi scrisa atat cu litere mici, cat si cu litere mari. Adica
<HTML> = <HtmL> = <html>. Caracterele "spatiu" si "CR/LF" ce apar intre etichete sunt ignorate de catre browser.
Deci un prim document HTML arata in felul urmator:
<html>
<head></head>
<body>
</body>
</html>
Titlul unei pagini se obtine inserand in sectiunea <head>…</head> a urmatoarei linii:
<title>Acesta este titlul paginii WEB</title>
In plus, in sectiunea <body>…</body> se pot scrie texte in cantitatea dorita. Daca nu intalnim nici un marcaj < sau > atunci interpretorul HTML le va lua ca texte simple si le va afisa pe ecran.
Continutul blocului <title>…</title> va aparea in bara de titlu a ferestrei browser-ului. Daca acest bloc lipseste intr-o pagina HTML, atunci in bara de titlu a ferstrei browser-ului va aparea numele fisierului. Daca se introduc mai multe linii intr-o pagina browser-ul va afisa intr-un singur rand, intrucat caracterele " CR/LF " sunt ignorate de browser. Trecerea pe o linie noua se face la o comanda explicita, care trebuie sa apara in pagina html. Aceasta comanda este marcajul <br> ( de la " line break " – intrerupere de linie ).
1.3.1. Blocuri preformatate
Pentru ca browser-ul sa interpreteze corect caracterele " spatiu ", " tab " si " CR/LF " ce apar in cadrul unui text, acest text trebuie inclus intr-un bloc <pre>…</pre>.
<html>
<head>
<title>bloc preformatat</title>
</head>
<body><pre>
Prima linie
A doua linie
A treia linie
</pre></body>
</html>
1.3.2. Culoarea de fond
O culoare poate fi precizata in doua moduri:
Printr-un nume de culoare.Sunt disponibile cel putin 16 nume de culori: aqua, black, fuchsia, gray, green lime, maroon, navy, olive, purple, red, silver, teal, white si yellow.
Prin constructia " #rrggbb " unde r (red), g (green), sau b (blue) sunt cifre hexazecimale si pot lua valorile: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, A, b, B, c, C, d, D, e, E, f, F; se pot defini astfel 65536 de culori.
Culoarea unei pagini se precizeaza prin intermediul unui atribut al etichetei <body>.
Culoarea fondului paginii Web se stabileste cu atributul bgcolor al etichetei <body>, de exemplu: <body bgcolor = culoare>.
1.3.3. Culoarea textului
Acest lucru se face prin intermediul atributului text al etichetei <body> dupa sintaxa <body text=culoare>.
O eticheta poate avea mai multe atribute. De exemplu , o eticheta cu trei atribute arata astfel: <eticheta atribut1 = valoare1 atribut2 = valoare2 atribut3 = valoare3>.
Textul afisat este caracterizat de urmatoarele atribute: tunci in bara de titlu a ferstrei browser-ului va aparea numele fisierului. Daca se introduc mai multe linii intr-o pagina browser-ul va afisa intr-un singur rand, intrucat caracterele " CR/LF " sunt ignorate de browser. Trecerea pe o linie noua se face la o comanda explicita, care trebuie sa apara in pagina html. Aceasta comanda este marcajul <br> ( de la " line break " – intrerupere de linie ).
1.3.1. Blocuri preformatate
Pentru ca browser-ul sa interpreteze corect caracterele " spatiu ", " tab " si " CR/LF " ce apar in cadrul unui text, acest text trebuie inclus intr-un bloc <pre>…</pre>.
<html>
<head>
<title>bloc preformatat</title>
</head>
<body><pre>
Prima linie
A doua linie
A treia linie
</pre></body>
</html>
1.3.2. Culoarea de fond
O culoare poate fi precizata in doua moduri:
Printr-un nume de culoare.Sunt disponibile cel putin 16 nume de culori: aqua, black, fuchsia, gray, green lime, maroon, navy, olive, purple, red, silver, teal, white si yellow.
Prin constructia " #rrggbb " unde r (red), g (green), sau b (blue) sunt cifre hexazecimale si pot lua valorile: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, A, b, B, c, C, d, D, e, E, f, F; se pot defini astfel 65536 de culori.
Culoarea unei pagini se precizeaza prin intermediul unui atribut al etichetei <body>.
Culoarea fondului paginii Web se stabileste cu atributul bgcolor al etichetei <body>, de exemplu: <body bgcolor = culoare>.
1.3.3. Culoarea textului
Acest lucru se face prin intermediul atributului text al etichetei <body> dupa sintaxa <body text=culoare>.
O eticheta poate avea mai multe atribute. De exemplu , o eticheta cu trei atribute arata astfel: <eticheta atribut1 = valoare1 atribut2 = valoare2 atribut3 = valoare3>.
Textul afisat este caracterizat de urmatoarele atribute: Marime ( size), Culoare (color), Font (style). Acestea sunt atribute ale etichetei <basefont>.Este o eticheta singulara (fara delimitator de sfarsit de bloc).
<basefont size = numar color = culoare style = font>
unde:
numar – poate fi 1, 2, 3, 4, 5, 6 sau 7; ( 1 pentru fontul cel mai mic si 7 pentru fontul cel mai mare);
culoare – este o culoare precizata prin nume sau printr-o constructie RGB;
font – poate fi un font generic ca " serif ", " san serif ", " cursive ", " monospace ", "fantasy " sau un font specific instalat pe calculatorului clientului, ca " Times New Roman ", " Helvetica " sau " Arial ".Se accepta ca valoare si o lista de fonturi separate prin virgula, de exemplu: " Times New Roman, serif,monospace ".
Domeniul de valabilitate al caracteristicelor precizate de aceasta eticheta se intinde de la locul in care apare eticheta pana la sfarsitul paginii sau pana la urmatoarea eticheta <basefont>.
Daca acest atribut lipseste atunci textul din pagina Web are atribute prestabilite sau atribute precizate de browserul utilizat. Atributele prestabilite sunt: size = 3, color = black, si style = " Times New Roman " . Pozitionarea continutului paginii Web fata de marginile ferestrei browserului se poate face cu ajutorul a doua atribute ale etichetei <body>:
leftmargin ( stabileste distanta dintre marginea stanga a ferstrei browserului si marginea stanga a continutului paginii );
topmargin ( stabileste distanta dintre marginea de sus a ferstrei browserului si marginea de sus a continutului paginii );
1.3.4. Stiluri pentru blocurile de text
Pentru ca un bloc de text sa apara in pagina evidentiat (cu caractere aldine), trebuie inclus intre delimitatorii <b>…</b> ( b vine de la "bold").
Pentru ca un text sa fie scris cu carcatere mai mari cu o unitate decat cele curente acesta trebuie inclus intr-un bloc delimitat de etichetele <big>…</big>.
Pentru ca un text sa fie scris cu carcatere mai mici cu o unitate decat cele curente acesta trebuie inclus intr-un bloc delimitat de etichetele <small>…</small>.
Pentru ca un text sa fie scris cu carcatere cursive acesta trebuie inclus intr-un bloc delimitat de etichetele <i>…</i> ( i vine de la " italic ").
Pentru a insera secvente de text aliniate ca indice (sub-script) sau ca exponent (super-script) , aceste fragmente trebuie delimitate de etichetele <sub>…</sub>, respectiv <sup>…</sup>. Pentru a insera un bloc de caractere subliniate se utilizeaza etichetele <u>…</u> (u vine de la " underline "). Pentru a insera un bloc de caractere subliniate se utilizeaza etichetele <strike>…</strike> sau <s>…</s>.
1.3.5. Stiluri fizice si logice
Am prezentat deja 8 stiluri de scriere a caracterelor unui bloc de text, numite si stiluri fizice intrucat nu s-a acordat nici o atentie semnificatiei informatiei continute de aceste blocuri. In continuare sunt prezentate stilurile utilizate la formatarea unui bloc. Aceste stiluri tin cont de semnificatia pe care o are blocul in cadrul paginii Web.
Pentru a pune in evidenta ( prin silul cursiv ) fragmente de text se utilizeaza etichetele:
<cite>…</cite> ( " cite " inseamna citat);
<em>…</em> (em vine de la " emphasize " = a evidentia).
In locul lor se poate utiliza eticheta echivalenta <i>…</i>. Urmatoarele etichete au efecte similare. Ele permit scrierea fragmentului de text cu caractere monospatiate (de tipul celor folosite de o masina de scris):
<code>…</code> ( " code " inseamna cod sau sursa);
<kbd>…</kbd> ( kbd vine de la " keyboard " = tastatura);
<tt>…</tt> ( tt vine de la " teletype " = teleprinter).
Eticheta de tip bloc <blink>…</blink> delimiteaza fragmenete de text clipitoare. Aceasta eticheta functioneaza numai in browserul Netscape Communicator.
Etichetele pot fi imbricate;un fragment de text poate fi scris cu aldine si cursive in acelsi timp si se pot folosi simultan stilurile subliniat, exponent, marit si cursiv.
Blocul <q>…</q> permite inserarea in-line a citatelor.Aceste citate sunt afisate de catre browser cu caractere cursive; " q " vine de la " in-line quotation " (citate inserate in-line). Si blocurile " q " pot fi imbricate.
1.3.6. Fonturi
Un font este caracterizat de urmatoarele atribute:
culoare (stabilita prin atributul color);
tipul sau stilul (stabilit prin atributul face);
marimea (definita prin atributul size);
marimea in puncte tipografice (stabilita prin atributul point-size);
grosime (definita prin atributul weight).
Toate aceste atribute apartin etichetei , care permite inserarea de blocuri de texte personalizate.
1.3.6.1. Culorea fontului
O culoare poate fi precizata in doua moduri: printr-un nume de culoare sau printr-o constanta conform standardului de culoare RGB (Red, Green,Blue). O astfel de constanta se formeaza astfel: #rrggbb, unde r, g si b sunt cifre hexazecimale.
Pentru a scrie un fragment de text cu caractere de o anumita culoare se incadreaza acest fragment intre delimitatori avand stabilit atributul color la valoarea necesara.
1.3.6.2. Familia fontului
Pentru a scrie un text intr-o pagina pot fi folosite mai multe fonturi (stiluri de caractere). Exista cinci familii generice de fonturi care sunt de regula disponibile pe toate calculatoarele utilizatorilor: serif, sans serif, cursive, monospace si fantasy.
Tipul de font necesar poate fi stabilit prin atributul face al etichetei .
Pot fi introduse mai multe fonturi separate prin virgula. In acest caz browserul va utiliza primul font pe care il cunoaste.
1.3.6.3. Marimea fontului
Pentru a stabili marimea unui font se utilizeaza atributul size al etichetei . Valorile acestui atribut pot fi:
1, 2, 3, 4, 5, 6, 7 ( 1 pentru cel mai mic font si 7 pentru cel mai mare);
+1, +2, etc. pentru a mari dimensiunea fontului cu 1, 2, etc. fata de valoarea curenta;
-1, -2, etc. pentru a micsora dimensiunea fontului cu 1, 2, etc. fata de valoarea curenta.
Marimea unui font poate fi stabilita exact cu ajutorul atributului point-size. Valorile acceptate de acest atribut pot fi orice numere naturale pozitive. Numarul astfel precizat reprezinta marimea fontului in puncte tipografice. Acest atribut functioneaza numai cu Netscape Communicator.
1.3.6.4. Grosimea unui font
Grosimea unui caracter poate fi definita cu ajutorul atributului weight al etichetei text . Valorile posibile pentru acest atribut sunt 100, 200, 300, 400, 500, 600, 700, 800 si 900 (100 pentru fontul cel mai subtire si 900 pentru cel mai gros).
1.3.7.Blocuri de text
Aceste etichete nu se refera la particularitatiile caracterelor ce compun textul, ci la functiile pe care le poate avea un bloc de text in cadrul paginii Web.
Toate aceste etichete produc automat trecerea la un rand nou si adaugarea unui spatiu suplimentar.
Daca intr-o pagina web trebuie inclusa o adresa ,atunci putem utiliza facilitatile oferite de o eticheta dedicata: <address>…</address>.
Pentru ca un bloc de text sa fie indentat ( marginea din stanga a textului sa fie deplasata la dreapta la o anumita distanta fata de marginea paginii ), acesta trebuie inclus intre etichetele <blockquote>…</blockquote>.
Intr-un bloc <pre>…</pre>, semnificatia marcajelor HTML se pastreaza.
Blocul <pre>…</pre> este indicat pentru a insera randuri vide ( spatiu intre randurile succesive ). Caracterul " spatiu " poate fi luat in considerare de browser daca este inserat explicit prin .
Intr-un fisier HTML, caracterele "<" si ">" au o semnificatie speciala pentru browser. Ele incadreaza comenzile si atributele de afisare a elementelor intr-o pagina. Daca dorim ca un fragment de text sa contina astfel de caractere, acest fragment trebuie incadrat de una dintre perechile de etichete:
<xmp>…</xmp> ( 80 de caractere pe rand );
<listing>…</listing> ( 120 de caractere pe rand ).
Aceste marcaje interpreteaza corect caracterele " spatiu ", " eticheta " si "CR/LF ". Textul afisat in pagina este monospatiat.
Cu ajutorul etichetei paragraf <p> este posibil trecerea la o linie noua si permite:
-inserarea unui spatiu suplimentar inainte de blocul paragraf;
-inserarea unui spatiu suplimentar dupa blocul paragraf, daca se foloseste delimitatorul </p> (acesta fiind optional);
-alinierea textului cu ajutorul atributului align, avand valorile posibile " left ", " center " sau " right ".
Intr-un text titlurile ( headers ) de capitole pot fi introduse cu ajutorul etichetelor <h1>, <h2>, <h3>, <h4>, <h5>, <h6>. Toate aceste etichete se refera la un bloc de text si trebuie insotite de o eticheta de incheiere similara.
Aceste etichete accepta atributul align pentru alinierea titlului blocului de text la stanga (in mod prestabilit ) , in centru si la dreapta. Tag-ul <h1> permite scrierea unui titlu cu caractere mai mari si aldine, pe cand <h6> foloseste caracterele cele mai mici.
Intr-o pagina Web pot fi inserate linii orizontale.acest lucru se face cu ajutorul
etichetei <hr>. Pentru a configura o linie orizontala se utilizeaza urmatorele atribute ale etichetei <hr>:
-align permite alinierea liniei orizontala. Valorile posibile sunt " left " ," center " si " right ";
-width permite alegerea lungimii liniei;
-size permite alegerea grosimii liniei;
-noshade cand este prezent defineste o linie fara umbra;
-color permite definirea culorii liniei.
Blocul introdus de etichetele <center>…</center> aliniaza centrat toate elementele pe care le contine.
Blocul de text cuprins intre etichetele <nobr>…</nobr> va fi afisat pe o singura linie. Modalitatea cea mai eficienta de delimitare si de formatare a unui bloc de text este folosirea delimitatorilor <div>…</div>. Un parametru foarte foarte util pentru stabilirea caracteristicilor unui bloc <div> ( diviziune ) este align ( aliniere ).
Valorile posibile ale acestui parametru sunt:
" left " ( aliniere la stanga );
" center " ( aliniere centrala );
" right " ( aliniere la dreapta ).
Un bloc <div>…</div> poate include alte subblocuri. In acest caz , alinierea precizata de atributul align al blocului are efect asupra tuturor subblocurilor incluse in blocul <div>. Un bloc <div>…</div> admite atributul " nowrap " care interzice intreruperea randurilor de catre browser.
1.3.8 Imagini
Imaginile sunt stocate in fisiere cu diverse formate. Formatele acceptate de
browsere pentru fisierele imagine sunt:
GIF (Graphics Interchange Format) cu extensia .gif;
JPEG (Joint Photographic Experts Group) cu extensia .jpeg sau .jpg;
XPM (X PixMap) cu extensia .xmp;
XBM (X BitMap) cu extensia .xbm;
BMP (BitMap) cu extensia .bmp (numai cu Internet Explorer);
TIFF (Tagged Image File Format) cu extensia .tif sau .tiff;
Cele mai raspandite formate sunt GIF (8biti pentru o culoare, 256 culori posibile) si JPEG (24biti pentru o culoare, 16777216 de culori posibile).
1.3.8.1. Adresa URL a unei imagini
URL ( "Uniform Resourse Locator" = identificator unic al resursei ) este un standard folosit in identificarea unica a unei resurse in Internet.
Toate imaginile cu care vom lucra vor avea adresa URL exprimata in functie de directorul ce contine documentul HTML care face referire la imagine.
Pentru a insera o imagine intr-o pagina, se utilizeaza eticheta <img> (de la "image"=imagine). Pentru a putea fi identifica imaginea care va fi inserata, se utilizeaza un atribut al etichetei <img> si anume src (de la "source"=sursa).
Daca imaginea se afla in acelasi director cu fisierul HTML care face referire la imagine, atunci adresa URL a imaginii este formata numai din numele imaginii, inclusiv extensia.
1.3.8.2. Chenarul si dimensionarea unei imagini
Daca doriti sa adaugati un chenar in jurul imaginii, folositi atributul border al etichetei <img>. Valorile acestor atribute sunt numere intregi pozitive. O imagine are anumite dimensiuni pe orizontala si verticala, stabilite in momentul crearii ei.
Daca nu se cere altfel , aceste dimensiuni sunt respectate in momentul afisarii ei in pagina Web.
Dimensiuniile prestabilite ale unei imagini pot fi modificate prin intermediul atributelor width si height.
1.3.8.3. Alinierea unei imagini
Alinierea unei imagini se poate face prin intermediul atributului align care poate lua urmatorele valori:
" left " – aliniere la stanga; celelalte componente sunt dispuse pe in partea dreapta;
" right " – aliniere la dreapta; celelalte componente sunt dispuse pe in partea stanga;
" top " – aliniere deasupra; partea de sus a imaginii se aliniaza cu partea de sus a textului ce precede imaginea;
" middle " – aliniere la mijloc; mijlocul imaginii se aliniaza cu linia de baza a textului ce precede imaginea.
" bottom " – aliniere la baza; partea de jos a imaginii se aliniaza cu linia de baza a textului.
Atributele hspace si vspace precizeaza distanta in pixeli pe orizontala , respectiv pe verticala, dintre imagine si restul elementelor din pagina.
Atributul alt admite ca valoare un text care va fi afisat in locul imaginii.
1.3.8.4 Alte considerente legate de imagini
O imagine poate fi utilizata pentru a stabili fondul unei pagini Web. In acest scop se foloseste atributul background al etichetei <body>, avand ca valoare adresa URL a imaginii. Imaginea se multiplica pe orizontala si pe verticala pana umple intregul ecran.
O legatura (link) introduce in pagina Web o zona activa. Efectuand click cu butonul mouse-ului pe aceasta zona in browser se va incarca o alta pagina.
Pentru a utiliza imaginea "img1.jpg" drept legatura catre pagina index.html utilizam sintaxa:
<a href ="index.html"><img src= "../../images/img1.jpg "></a>
In mod prestabilit imaginea utilizata pe post de zona activa este inconjurata de un chenar avand culoarea unei legaturi. Daca stabilim pentru atributul border al etichetei <img> acest chenar dispare.
Imaginile pot fi utilizate pentru a obtine efecte deosebite intr-o pagina web.
Printre aceste utilizari speciale putem enumera: linii orizontale formate cu ajutorul imaginilor , simboluri speciale pentru elementele unei liste neordonate, etc.
1.3.9 Legaturi
Legaturile (link-urile) reprezinta partea cea mai importanta a unei pagini Web.
Ele transforma un text obisnuit in hipertext sau hiperlegatura, care premite trecerea rapida de la o informatie aflata pe un anumit server la alta informatie memorata pe un alt server aflat oriunde in lume. Legaturile sunt zone active intr-o pagina Web, adica zone de pe ecran sensibile la apasarea butonului stang al mouse-ului.
O legatura catre o pagina aflata in acelasi director se formeaza cu ajutorul etichetei <a> (de la "anchor"=ancora). Pentru a preciza pagina indicata de legatura se utilizeaza un atribut al etichetei <a> numit href, care ia valoare numele fisierului HTML aflat in acelasi director. Zona activa care devina sensibila la apasarea butonului stang al mouse-ului este formata din textul cuprins intre etichetele <a>…</a>. Prezenta etichtetei de sfarsit </a> este obligatorie.
Daca pagina referita se afla pe acelasi disc local, dar intr-un alt director atunci pentru a preciza pozitia ei in structura de directoare se poate folosi adresarea relativa.
<html>
<head>
<title> Comutarea intre doua pagini aflate pe acelasi disc local</title>
</head>
<body>
<h3>Pagina 3 </h3>
<a href="../../exemple/lista3.html">
Link catre o pagina cu liste </a>
</body>
</html>
In exemplul urmator se utilizeaza adresa URL www.netscape.com care incarca pagina de start din site-ul firmei Netscape Corporation.
<html>
<head>
<title> Link catre site-ul firmei Netscape</title>
</head>
<body>
<h3>Link catre site-ul firmei Netscape </h3>
<a href="http://www.netscape.com">
Netscape Corporation </a>
</body>
</html>
1.3.10 Ancore
Intr-o pagina foarte lunga pot exista puncte de reper catre care se definesc legaturi. O ancora se defineste de asemenea prin eticheta <a>. Pentru a defini ancora se utilizeaza atributul name care primeste ca valoare un nume atribuit ancorei (de exemplu "leg1"). Pentru a insera o legatura catre "leg1" definita in aceeasi pagina se utilizeaza eticheta <a> avand atributul href de valoare "#leg1".
Pentru a introduce o legatura catre o ancora definita in alt document (alta pagina) aflat in acelasi director, atributul href primeste o valoare de forma "nume_fisier.html#nume_ancora".
Atributul id este un atribut universal ,adica poate fi atasat oricarui element al unei pagini Web. Acest atribut va inlocui complet atributul name, care putea fi atasat numai anumitor elemente. Atributul id primeste ca valoare un nume (de exemplu "id1") care identifica in mod unic un element. Atributul id poate fi utilizat pe post de ancora intr-o pagina Web dupa modelul:
<eticheta id = "id1"> … </eticheta>
<a href = "#id1" >Link catre elementul "id1" </a>
unde "eticheta" poate fi orice element .
In mod prestabilit se utilizeaza trei culori pentru legaturi:
-o culoare pentru legaturile nevizitate (nu s-a efectuat nici un clic pe ele)
-o culoare pentru legaturile vizitate (s-a efectuat cel putin un clic pe ele)
-o culoare pentru legaturile active (deasupra carora se afla mouse-ul la un moment dat).
Aceste atribute pot fi stabilite cu ajutorul a trei atribute ale etichetei <body>:
link pentru legaturile nevizitate;
vlink pentru legaturile vizitate;
alink pentru legaturile active.
Valorile pe care le pot lua aceste atribute sunt culori definite prin nume sau conform standardului RGB.
Intr-o pagina Web se poate afla legaturi care permit lansarea in executie a aplicatiei de expediere a mesajelor electronice. Pentru aceasta se utilizeaza in constructia adresei URL serviciul Internet mailto: urmat de o adresa e-mail valida. Pentru ca linkul sa functioneze trebuie ca pe calculator sa fie instalata o aplicatie de expediere a mesajelor electronice (Outlook Express pe calc. Windows , Pine pe calc. Unix) iar adresa sa fie valida si calculatorul sa fie conectat la Internet.
O pagina Web poate contine legaturi catre orice tip de fisiere aflate pe orice servere din Internet. Pentru aceasta se utilizeaza eticheta <a> avand valoarea atributului href egala cu adresa URL a fisierului destinatie. Atunci cand se efectueaza clic pe legatura, browserul va deschide o caseta de dialog – File download – care va permite sa salvati pe discul local fisierul sau sa lansati in executie aplicatia capabila sa interpreteze corect fisierele de tipul respectiv.
Atributul title apartine etichetei <a> si comanda aparitia unei mici ferestre in pagina Web cand mouse-ul se afla pe o legatura, fereastra in care este afisata valoarea data acestui atribut. Acest atribut are astfel menirea de a furniza informatii suplimentare despre semnificatia unei legaturi.
Sunetele pot fi stocate in fisiere in diverse formate:
AU/m-law cu extensia .au;
AIFF/AIFC cu extensiile .aiff, .aif;
WAVE/WAV cu extensia .wav;
MPEG Audio cu extensia .mpeg2, sau .mp2;
MIDI cu extensia .mid sau .midi;
O legatura catre un fisier de sunet se realizeaza folosind eticheta <a> destinata legaturilor catre orice tip de fisiere, unde atributul href va avea valoarea egala cu adresa URL a fisierului de sunet. De exemplu:
<a href="numefisier.au">Link catre fisierul de sunet</a>
Videoclipurile sunt stocate in fisiere diverse formate. Formatele si extensiile corespunazatoare pentru fisierele utilizabile in paginile Web sunt urmatoarele:
MPEG cu extensia .mpeg sau mpg;
QuickTime cu extensia .mov;
AVI cu extensia .avi.
O legatura catre un fisier de sunet se realizeaza folosind eticheta <a> destinata legaturilor catre orice tip de fisiere, unde atributul href va avea valoarea egala cu adresa URL a fisierului videoclip. De exemplu:
<a href="numefisier.avi">Link catre fisierul videoclip</a>
1.3.11 Liste
Unul din cele mai obisnuite elemente din documentele cu mai multe pagini este un set de definitii, referinte sau indexuri. Glosarele sunt exemple clasice in acest sens; cuvintele sunt listate in ordine alfabetica, urmate de definitii ale termenilor respectivi. In HTML, intreaga sectiune a unui glosar va fi gestionata printr-o lista de definitii, care este inclusa intr-o pereche de marcaje de lista de definitii: <dl>…</dl> (de la "definition list" = lista de definitii).
Observatii:
-Un termen al listei este initiat de eticheta <dt> (de la "definition term" = termen definit);
-Definitia unui termen este initiata de eticheta <dd> (de la "definition description" = descrierea definitiei);
-Definitia unui termen incepe pe o linie noua si este indentata; O lista neordonata este un bloc de text delimitat de etichetele corespondente<ul>…</ul> (" ul " vine de la " unordered list " = lista neordonata). Fiecare element al listei este initiat de eticheta <li> (list item).
Lista va fi indentata fata de restul paginii Web si fiecare element al listei incepe pe un rand noua. Tag-urile <ul> si <li> pot avea un atribut type care stabileste caracterul asfisat in fata fiecarui element al listei.Valorile posibile al acestui atribut sunt:
-"circle" (cerc)
-"disc" (disc plin) (valoarea prestabilita);
-"square" (patrat)
Listele neordonate pot fi imbricate pe mai multe niveluri
O lista ordonata de elemente este un bloc de text delimitat de etichetele corespondente <ol>…</ol> (" ol " vine de la " ordered list " = lista ordonata). Fiecare element al listei este initiat de eticheta <li> (list item).
Lista va fi indentata fata de restul paginii Web si fiecare element al listei incepe pe un rand noua. Tag-urile <ol> si <li> pot avea un atribut type care stabileste tipul de caractere utilizate pentru ordonarea listei. Valorile posibile sunt:
" A " pentru ordonare de tipul A , B , C , D etc. ( litere mari );
" a " pentru ordonare de tipul a , b , c , d etc. ( litere mici );
" I " pentru ordonare de tipul I , II , III , IV etc. ( cifre romane mari );
" i " pentru ordonare de tipul i , ii , iii , iv etc. ( cifre romane mici );
" 1 " pentru ordonare de tipul 1 , 2 , 3 , 4 etc. ( cifre arabe – optiune
prestabilita );
Tag-ul <ol> poate avea un atribut start care stabileste valoarea initiala a secventei de ordonare.Valoarea acestui atribut trebuie sa fie un numar intreg pozitiv. Tag-ul <li> poate avea un atribut value care stabileste valoare pentru elementul respectiv al listei. Valoarea acestui atribut trebuie sa fie un numar intreg pozitiv. Listele ordonate pot fi imbricate intre ele sau cu liste neordonate. O lista de meniuri este un bloc delimitat de etichete corespondente <menu>…</menu>. Fiecare element al listei este initiat de eticheta <li> ( list item ). Cele mai multe browsere afiseaza lista de meniuri ca pe o lista neordonata. O lista de directoare este un bloc delimitat de etichete corespondente <dir>…</dir> (de la " director "). Fiecare element al listei este initiat de eticheta <li> ( list item ). Cele mai multe browsere afiseaza lista de directoare ca pe o lista neordonata.
1.3.12 Tabele
Tabelele ne permit sa cream o retea dreptunghiulara de domenii, fiecare domeniu avand propriile optiuni pentru culoarea fondului, culoarea textului, alinierea textului etc.Pentru a insera un tabel se folosesc etichetele <table> si </table>. In interiorul lor se vor defini elementele componente ale unui tabel, anume headingul, intre tagurile <th> si </th>, si corpul tabelului, impartit in randuri, <tr> , si coloane.
In interiorul fiecarui element al tabelului se pot alege parametrii doriti pentru culoare de fond, culoarea caracterelor, alinierea textului, cu optiunile deja amintite in paragrafele anterioare.
1.3.13 Ferestre in HTML
Ferestrele sau (cadrele) ne permit sa definim in fereastra browserului subferestre in care sa fie incarcate documente HTML diferite.
Ferestrele sunt definite intr-un fisier HTML special , in care blocul <body>…</body> este inlocuit de blocul <frameset>…</frameset>. In interiorul acestui bloc, fiecare cadru este introdus prin eticheta <frame>.
Un atribut obligatoriu al etichetei <frame> este src, care primeste ca valoare adresa URL a documentului HTML care va fi incarcat in acel frame. Definirea cadrelor se face prin impartirea ferestrelor (si a subferestrelor) in linii si coloane:
-impartirea unei ferestre intr-un numar de subferestre de tip coloana se face cu ajutorul atributului cols al etichetei <frameset> ce descrie acea fereastra;
-impartirea unei ferestre intr-un numar de subferestre de tip linie se face cu ajutorul atributului rows al etichetei <frameset> ce descrie acea fereastra;
-valoarea atributelor cols si rows este o lista de elmente separate prin virgula , care descriu modul in care se face impartirea.
Elementele listei pot fi:
-un numar intreg de pixeli;
-procente din dimensiunea ferestrei (numar intre 1 si 99 terminat cu %);
-n* care inseamna n parti din spatiul ramas;
Exemplu 1: cols=200,*,50%,* inseamna o impartire in 4 subferestre , dintre care prima are 200 pixeli , a treia ocupa jumatate din spatiul total disponibil ,iar a doua si a patra ocupa in mod egal restul de spatiu ramas disponibil.
Exemplu 2: cols=200,1*,50%,2* inseamna o impartire in 4 subferestre , dintre care prima are 200 pixeli , a treia ocupa jumatate din spatiul total disponibil iar a doua si a patra ocupa in mod egal restul de spatiu ramas disponibil, care se imparte in trei parti egale , a doua fereastra ocupand o parte , iar a patra ocupand 2 parti.
Observatii:
-daca mai multe elemente din lista sunt configurate cu * , atunci spatiul disponibil ramas pentru ele se va imparti in mod egal.
-o subfereastra poate fi un cadru (folosind <frame>)in care se va incarca un document HTML sau poate fi impartita la randul ei la alte subfereste (folosind <frameset>).
Pentru a stabili culoarea chenarului unui cadru se utilizeaza atributul bordercolor. Acest atribut primeste ca valoare un nume de culoare sau o culoare definita in conformitate cu modelul de culoare RGB.Atributul bordercolor poate fi atasat atat etichetei <frameset> pentru a stabili culoarea tuturor chenarelor cadrelor incluse,cat si etichetei pentru a stabili culoarea chenarului pentru un cadru individual.
Atributul border al etichetei <frameset> permite configurarea latimii chenarelor tuturor cadrelor la un numar dorit de pixeli. Valoarea prestabilita a atributului border este de 5 pixeli. O valoare de 0 pixeli va defini un cadru fara chenar. Pentru a obtine cadre fara chenar se utilizeaza border="0". In mod prestabilit, chenarul unui cadru este afisat si are aspect tridimensional. Afisarea chenarului unui cadru se poate dezactiva daca se utilizeaza atributul frameborder cu valoare "no".
Acest atribut poate fi atasat atat etichetei <frameset> (dezactivarea fiind valabila pentru toate cadrele incluse) cat si etichetei <frame> (dezactivarea fiind valabila numai pentru un singur cadru). Valorile posibile ale atributului frameborder sunt:
"yes" -echivalent cu 1; "no" -echivalent cu 0;
Atributul scrolling al etichetei <frame> este utilizat pentru a adauga unui cadru o bara de derulare care permite navigarea in interiorul documentului afisat in interiorul cadrului. Valorile posibile sunt:
"yes" – barele de derulare sunt adaugate intotdeauna;
"no" – barele de derulare nu sunt utilizabile;
"auto" – barele de derulare sunt vizibile atunci cand este necesar
Atributul noresize al etichetei <frame> (fara nici o valoare suplimentara) daca este prezent, inhiba posibilitatea prestabilita a utilizatorului de a redimensiona cadrul cu ajutorul mouse-ului.
Atributele marginheight si marginwidth ale etichetei <frame> permit stabilirea distantei in pixeli dintre continutul unui cadru si marginile verticale, respectiv orizontale ale cadrului.Valori posibile:
-numar de pixeli;
-procent din latimea, respectiv din inaltimea cadrului;
Exista browsere care nu suporta cadre pentru aceasta se utilizeaza in interiorul blocului <frameset> eticheta <noframes>.Daca programul de navigare stie sa interpreteze cadre, va ignora ce se gaseste in aceasta portiune, iar daca nu, materialul cuprins in zona <noframes>…</noframes> va fi singurul care va fi inteles si afisat.
De precizat este faptul ca intre <noframes> … </noframes> se pot introduce orice alte tag-uri HTML (inclusiv imagini, hiperlink-uri, tabele).
Un cadru intern este specificat prin intermediul blocului <iframe>…</iframe>. Un cadru intern se insereaza intr-o pagina Web in mod asemanator cu o imagine sau in modul in care se specifica marcajul <frame>. Atributele aceptate de eticheta <iframe> sunt in parte preluate de la etichetele <frame> si <frameset>,cum ar fi: src, border, frameborder, bordercolor, marginheight, marginwidth, scrolling, name, noresize; sau de la eticheta <img> vspace, hspace, align, width, height.
In mod prestabilit, la efectuarea unui clic pe o legatura noua pagina (catre care indica legatura) o inlocuieste pe cea curenta in aceeasi fereastra (acelasi cadru). Acest comportament se poate schimba in doua moduri:
prin plasarea in blocul <head>…</head> a unui element <base> care precizeaza,prin atributul target numele ferestrei (cadrului) in care se vor incarca toate paginile noi referite de legaturile din pagina curenta conform sintaxei:
<base target="nume_ferastra/frame_de_baza"> prin plasarea in eticheta <a> a atributului target, care precizeaza numele ferestrei (cadrului) in care se va incarca pagina nou referita de legatura, conform sintaxei: <a href="legatura" target="nume_fereastra/frame">…</a>.
Observatie:
-daca este prezent atat un atribut target in <base> cat si un atribut target in <a>, atunci cele precizate de atributul target din <a> sunt prioritare.Numele unui cadru este stabilit prin atributul name al etichetei <frame> conform sintaxei: <frame name="nume_frame">
Atributul target al etichetei<frame> accepta anumite valori predefinite de o valoare deosebita pentru creatorii de pagini Web. Aceste valori sunt:
"_self" (incarcarea noii pagini are loc in cadrul curent);
"_blank" (incarcarea noii pagini are loc intr-o fereastra noua anonima);
"_parent" (incarcarea noii pagini are loc in cadrul parinte al cadrului curent daca acesta exista, altfel are loc in fereastra browserului curent);
"_top" (incarcarea noii pagini are loc in fereastra browserului ce contine cadrul curent);
1.3.14 FORMULARE
Un formular este un ansamblu de zone active alcatuit din butoane, casete de selectie, campuri de editare etc. Formularele vor asigura construirea unori pagini Web care permit utilizatorilor sa introduca efectiv informatii si sa le transmita serverului. Formularele pot varia de la o simpla caseta de text, pentru introducerea unui sir de caractere pe post de cheie de cautare – element caracteristic tuturor motoarelor de cautare din Web – pana la o structura complexa, cu multiple sectiuni, care ofera facilitati puternice de transmisie a datelor. O sesiune cu o pagina web ce contine un formular cuprinde urmatoarele etape:
1. Utilizatorul completeaza formularul si il expedieaza unui server.
2. O aplicatie dedicata de pe server analizeaza formularul completat si (daca este necesar) stocheaza datele intr-o baza de date.
3. Daca este necesar serverul expedieaza un raspuns utilizatorului.
Un formular este definit intr-un bloc delimitat de etichetele corespondente <form> si </form>. Exista doua atribute esentiale ale elementului <form>:
-Atributul action precizeaza ce se va intampla cu datele formularului odata ce acestea ajung la destinatie.De regula ,valoarea atributului action este adresa URL a unui script aflat pe un srver WWW care primeste datele formularului ,efectueaza o prelucrare a lor si expedieaza catre utilizator un raspuns.
<form action="http://www.yahoo.com/cgi-bin/nume_fis.cgi">.
Script-urile pot fi scrise in limbajele Perl,C,PHP,Unix shell.
-Atributul method precizeaza metoda utilizata de browser pentru expedierea datelor formularului.Sunt posibile urmatoarele valori:
get (valoarea implicita)-in acest caz ,datele din formular sunt adaugate la adresa URL precizata de atributul action; nu sunt permise cantitati mari de date (maxim 1 Kb);intre adresa URL si date este inserat un "?".
Datele sunt adaugate conform sintaxei: nume_camp = valoare_camp. Intre diferite seturi de date este introdus un "&".
post- in acest caz datele sunt expediate separat. Sunt permise cantitati mari de date (ordinul MB)
Pentru ca un formular sa fie functional, trebuie precizat ce se va intampla cu el dupa completarea si expediere.Cel mai simplu mod de utilizare a unui formular este expedierea acestuia prin posta electronica (e-mail). Pentru aceasta se foloseste un atribut al etichetei <form>: si anume action care primeste ca valoare " mailto: " concatenat cu o adresa valida de e-mail catre care se va expedia formularul completat.
Majoritatea elementelor unui formular sunt definite cu ajutorul etichetei <input>. Pentru a preciza tipul elementului se foloseste atributul type al etichetei <input>. Pentru un camp de editare, acest atribut primeste valoarea "text". Alte atribute pentru un element <input> sunt:
-atributul name ,permite atasarea unui nume fiecarui element al formularului.
-atributul value ,care permite atribuirea unei valori initiale unui element al formularului.
Un buton de expediere al unui formular se introduce cu ajutorul etichetei <input>, in care atributul type este configurat la valoarea "submit".Acest element poate primi un nume prin atributul name. Pe buton apare scris "Submit Query" sau valoarea atributului value ,daca aceasta valoare a fost stabilita.
Pentru elementul <input> de tipul camp de editare (type = "text") , alte doua atribute pot fi utile:
-atributul size specifica latimea campului de editare depaseste aceasta latime, atunci se executa automat o derulare acestui camp;
-atributul maxlength specifica numarul maxim de caractere pe care le poate primi un camp de editare; caracterele tastate peste numarul maxim sunt ignorate.
Observatii:
-daca atributul type lipseste intr-un element <input> , atunci campul respectiv este considerat in mod prestabilit ca fiind de tip "text".
-formularele cu un singur camp (de tip text) nu au nevoie de un buton de expediere, datele sunt expediate automat dupa completarea si apasarea tastei ENTER.
Daca un element de tip <input> are atributul type configurat la valoarea "reset",atunci in formular se introduce un buton pe care scrie "Reset". La apasarea acestui buton ,toate elementele dinn formular primesc valorile prestabilite (definite odata cu formularul ), chiar daca aceste valori au fost modificate de utilizator.
Un buton Reset poate primi un nume cu ajutorul atributului name si o valoare printr-un atribut value. Un asemenea buton afiseaza textul "Reset" daca atributul value lipseste, respectiv valoarea acestui atribut in caz contar.
Daca se utilizeaza eticheta <input> avand atributul type configurat la valoarea "password" , atunci in formular se introduce un element asemanator cu un camp de editare obisnuit (introdus prin type="text"). Toate atributele unui camp de editare raman valabile. Singura deosebire consta in faptul ca acest camp de editare nu afiseaza caracterele in clar,ci numai caractere *,care ascund de privirile altui utilizator aflat in apropiere valoarea introdusa intr-un asemenea camp. La expedierea formularului insa, valoarea tastata intr-un camp de tip "password" se transmite in clar.
Butoanele radio permit alegerea ,la un moment dat , a unei singure variante din mai multe posibile. Butoanele radio se introduc prin eticheta <input> cu atributul type avand valoarea "radio".
O caseta de validare (checkbox) permite selectarea sau deselectarea unei optiuni.
Pentru inserarea unei casete de validare se utilizeaza eticheta <input> cu atributul type configurat la valoarea "checkbox".
Observatii:
-fiecare caseta poate avea un nume definit prin atributul name.
-fiecare caseta poate avea valoarea prestabilita "selectat" definita prin atributul checked.
Intr-o pereche "name = value" a unui formular se poate folosi intregul continut al unui fisier pe post de valoare. Pentru aceasta se insereaza un element <input> intr-un formular, cu atributul type avand valoarea "file" (fisier). Atributele pentru un element de tip caseta de fisiere sunt:
-atributul name permite atasarea unui nume
-atributul value primeste ca valoare adresa URL a fisierului care va fi expediat o data cu formularul. Aceasta valoare poate fi atribuita direct atributului value, se poate fi tastata intr-un camp de editare ce apare o data cu formularul sau poate fi selectata prin intermediul unei casete de tip File Upload sau Choose File care apare la apasarea butonului Browse… din formular;
-atributul enctype precizeaza metoda utilizata la criptarea fisierului de expediat.Valoarea acestui atribut este "multipart/form-data".
O lista de selectie permite utilizatorului sa aleaga unul sau mai multe elemente dintr-o lista finita. Lista de selectie este inclusa in formular cu ajutorul etichetelor corespondente <select>si </select>. O lista de selectie poate avea urmatoarele atribute:
-atributul name, care ataseaza listei un nume (utilizat in perechile "name=value" expediat serverului);
-atributul size, care precizeaza (printr-un numar intreg pozitiv , valoarea prestabilita fiind 1) cate elemente din lista sunt vizibile la un moment dat pe ecran (celelalte devenind vizibile prin actionarea barei de derulare atasate automat listei).
Elementele unei liste de selectie sunt incluse in lista cu ajutorul etichetei <option>. Doua atribute ale etichetei option se dovedesc utile:
atributul value primeste ca valore un text care va fi expediat server-ului in perechea "name=value"; daca acest atribut lipseste ,atunci catre server va fi expediat textul ce urmeaza dupa <option>;
atributul selected (fara alte valori) permite selectarea prestabilita a unui element al listei.
O lista de selectie ce permite selectii multiple se creeaza intocmai ca o lista de selectie obisnuita. In plus , eticheta <select> are un atribut multiple (fara alte valori). Cand formularul este expediat catre server pentru fiecare element selectat al listei care este se insereaza cate o pereche "name=value" unde name este numele listei.
Intr-un formular campurile de editare multilinie pot fi incluse cu ajutorul etichetei <textarea>. Eticheta are urmatoarele atribute:
-atributul cols, care specifica numarul de caractere afisate intr-o linie;
-atributul rows, care specifica numarul de linii afisate simultan;
-atributul name, care permite atasarea unui nume campului de editare multilinie;
-atributul wrap, (de la "word wrap"=trecerea cuvintelor pe randul urmator), care determina determina comportamentul campului de editare fata de sfarsitul de linie.Acest atribut poate primi urmatoarele valori:
a) " off "; in acest caz:
-intreruperea cuvintelor la marginea dreapta a editorului se produce numai cand doreste utilizatorul;
-caracterul de sfarsit de linie este inclus in textul transmis serverului o data cu formularul;
b) " hard "; in acest caz:
-se produce intreruperea cuvintelor la marginea dreapta a editorului ;
-caracterul de sfarsit de linie este inclus in textul transmis serverului o data cu formularul;
c) " soft "; in acest caz:
-se produce intreruperea cuvintelor la marginea dreapta a editorului ;
-nu se include caracterul de sfarsit de linie in textul transmis serverului o data cu formularul;
Intr-un formular pot fi afisate butoane. Cand utilizatorul apasa un buton, se lanseaza in executie o functie de tratare a acestui eveniment. Limbajul HTML nu permite scrierea unor astfel de functii (acest lucru este posibil daca se utilizeaza limbajele Javascript sau Java). Pentru a insera un buton intr-un formular , se utilizeaza eticheta <input> avand atributul type configurat la valoarea "button".
Alte doua atribute ale elementului "button" sunt:
-atributul name, care permite atasarea unui nume butonului
-atributul value, care primeste ca valoare textul ce va fi afisat pe buton.
Un buton pentru lansarea in executie a unei actiuni poate fi introdus intr-un formular prin elementul <input> avand atributul type configurat la valoarea "button", asa cum s-a vazut mai inainte. Exista o a doua modalitate de a introduce intr-o pagina Web un buton de apasat, si anume prin intermediul blocului <button>…</button>.
Un astfel de buton poate fi inserat intr-un formular, in acest caz declansand actiuni legate de acel formular, sau poate fi introdus oriunde in pagina pentru initierea unor actiuni independente de formulare. Atributele posibile ale elementului "button" sunt:
-name acorda elementului un nume;
-value precizeaza textul care va fi afisat pe buton;
-type precizeaza actiunea ce se va executa la apasarea butonului daca acesta este inclus intr-un formular.Valorile posibile pentru acest atribut sunt: "button","submit" ,"reset".
In corpul blocului <button>…</button> se poate afla un text sau un marcaj de inserare a unei imagini.
Observatii finale:
Elementul <form> poate avea un atribut target, care primeste ca valoare numele unei ferestre a browserului in care va fi incarcat raspunsul trimis serverului WWW la expedierea unui formular. Toate elementele cuprinse intr-un formular pot avea un atribut disabled care permite dezactivarea respectivului element. Toate elementele de tip text cuprinse intr-un formular pot avea un atribut readonly care interzice modificarea continutului acestor elemente.
1.3.15 STILURI
Stilurile pun la dispozitia creatorilor de site-uri noi posibilitati de personalizare a paginilor Web. Un stil reprezinta un mod de a scrie un bloc de text ( adica anumite valori pentru font, marime culoare, aliniere, distante fata de margini etc).
Exista doua modalitati de a defini un stil:
-sintaxa CSS (Cascading Style Sheets);
-sintaxa Javascript.
Cascading Style Sheets inseamna "foi in stilul cascada".
Stilurile identificate se aplica blocurilor de text pentru care sunt definite. De exemplu:
<style>
h1 {text-align:center; color:red;}
</style>
Toate titlurile care apar in fisier ca fiind de marime 1 vor fi de culoare rosie si centrate. Daca dorim ca acelasi stil sa fie utilizat de catre mai multe elemente (de ex. "h1", "h2", si "p") atunci se utilizeaza o lista acestor elemente, separate prin virgula:
<style>
h1, h2, p {text-align:center; color:red;}
</style>
Toate elementele unui document admit un atribut universal numit id.
Atributul id poate identifica stilul utilizat de un element.
Pentru a utiliza un stil "identificat" , in blocul <style>…</style> se introduce definitia stilului conform sintaxei:
<style>
#rosu { color: red }
</style>
In elementul in care se doreste utilizarea locala a acestui stil, se foloseste atributul id care primeste valoare numele stilului definit anterior.
Daca dorim ca un stil " identificat " sa fie aplicabil numai pentru anumite elemente ale documentului ( de exemplu "h2") atunci in constructia selectorului va aparea acest element (de exemplu "h2#ac").
Stilurile in-line sunt definite chiar in eticheta ce initiaza blocul in care dorim sa se aplice aceste stiluri. Pentru aceasta se utilizeaza atributul universal style (comun practic tuturor etichetelor ce par intr-un document HTML).
Valoarea data atributului style este tocmai descrierea stilului, cuprinsa nu intre acolade {..} ci intre ghilimele "…".
Daca dorim utilizarea unui anumit style pentru un fragment de text, atunci includem acest text intr-un bloc cu ajutorul delimitatorilor <span>…</span>, dupa care utilizam atributul style pentru eticheta <span>.
Stilurile definite in interiorul unui bloc <style>…</style> pot fi transferate intr-un fisier extern existand astfel posibilitatea utilizarii lor in mai multe fisiere HTML.
Pentru a utiliza un stil definit intr-un fisier extern se procedeaza astfel:
Se creaza un fisier care sa contina numai descrierea stilurilor si se salveaza cu extensia .css sau .html. Continutul acestui fisier coincide cu continutul unui bloc <style>…</style> , fara ca acesti delimitatori sa fie inclusi.
In fisierul HTML care utilizeaza stilurile definite in fisierul creat la punctul 1 , se include in blocul <head>…</head> o eticheta <link>avand trei atribute:
-atributul rel cu valoarea "stylesheet"
-atributul href avand ca valoare adresa URL a fisierului creat la punctul 1 ;
-atributul type cu valoarea "text/css".
Se utilizeaza titlurile definite in fisierul extern ca si cum ar fi definite in fisierul HTML curent intr-un bloc <style>…</style>.
Pseudoclasele se utilizeaza pentru personalizarea legaturilor. Ele se definesc in blocul <style>…</style> sau intr-un fisier extern, conform sintaxei:
a: link {color: black; font-size: 20pt}
a: activate {color: blue; font-style: italic}
a: visited {color: cyan; text-decoration: none}
Pentru ca numai anumite legaturi sa utilizeze un stil se pot folosi urmatoarele doua metode:
a: link.CLASA1 {…} combinat cu <a class = CLASA1 href=" "> …</a>
a: link#ID1 {…} combinat cu <a id = ID1 href=" "> …</a>
1.4 Java-prezentare
1.4.1. Introducere
Reteaua Internet este locul unde s-a dezlantuit pentru prima data mica fiara numita Java. Acum, mii de programatori se intrec in a invata totul despre acest instrument de lucru, pentru a revolutiona Internetul si modul de scriere a programelor.
Java este un limbaj compilat. Executabilele Java au extensia .class sau uneori .jar. Spre deosebire de alte executabile, in general executabilele Java nu pot fi rulate direct de catre sistemul de operare. Unele sisteme de operare sunt insa echipate din start cu tot ce e nevoie pentru a rula programe Java.
Executabilele Java ruleaza intr-o asa numita JVM (Java Virtual Machine). Acesta este pracic un interpretor care interpreteaza codul Java compilat. Ganditi-va la JVM ca la un procesor virtual. De fapt specificatiile masinii virtuale Java sunt chiar ca ale unui procesor, si exista si implementari hardware. Avantajul masinii Virtuale Java
este codul odata compilat, care poate fi rulat in orice sistem de operare. Dezavantajul este ca un executabil Java este executat mai lent decat un executabil obisnuit.
Din start trebuie sa se faca distinctie intre doua tipuri de executabile Java:
1.Applet-uri Java. Applet-urile sunt programe java care in general pot rula numai in interiorul unui navigator Web. Acestea sunt incluse in pagile web la fel ca si imaginile.
2.Programe Java. Acestea pot rula independent de un navigator web si au caracteristicile oricaror altor programe cu deosebirea ca pentru a le rula in sistem trebuie sa existe instalat un intepretor java (JVM – Java Virtual Machine sau JRE -Java Runtime Environment)
Limbajul Java a fost creat si dezvoltat initial de catre Sun. Prima versiune populara de Java a fost Java 1.02 care a aparut in 1996. Sun a distribuit asa numitul JDK1.02 (java development Kit). Acesta contine compilator, si interpretor java precum si alte unelte utile mai ales programatorilor (debuger, generator de documentatie, dezasamblor). Initial au existat versiuni pentru sistemele de operare Sun, Windows 3.x/95 si MacOS. Ulterior au aparut versiuni si pentru alte sisteme de operare (alte UNIX-uri, Linux etc) acestea nefiind insa versiuni oficiale Sun. Ideea a fost ca toate implementarile Java sa respecte specificatiile Sun. In acest fel orice program odata compilat poate fi rulat in orice alt sistem. Se pare insa ca acest lucru nu a fost respectat de catre toate implementarile Java si chiar de catre versiunile ulterioare dezvoltate de Sun.
In 1997 a aparut JDK1.1. Acesta a adus multe imbunatatiri si extensii asteptate cu nerabdare de multi programatori. Din pacate unele programe compilate cu versiuni 1.02 ale compilatorului nu sunt compatibile cu Java1.1 decat daca sunt recompilate. Bineinteles ca un program sau applet java 1.1 nu va rula intr-un mediu java1.02 .
Pentru a rula Applet-uri trebuie avuta siguranta ca navigatorul web poate rula applet-uri si ca aceast optiune nu este dezactivata. Principalele navigatoare care pot rula Applet-uri Java sunt: Netscape (versiuni mai noi de 2) , Hot Java (orice versiune),
Internet Explorer (versiuni mai noi de 3).
1.4.2 Appleturi Java
Java este un limbaj puternic, aflat in plina dezvoltare. Fara indoiala ca cei care navigheaza pe WEB au vazut appleturile in actiune. Unele siteuri se bazeaza pe limbajul Java pentru a realiza animatii si sunt interesante prin noutatea pe care o prezinta si prin felul in care atrag atentia asupra unui anumit lucru. Acestea nu ilustreaza insa pe deplin forta limbajului Java ca instrument de programare.
Primul pas in crearea oricarui applet este intelegerea exacta a operatiilor pe care acesta trebuie sa le execute si clarificarea scopului in care va fi facut. Obiectivul este descrierea detaliata a fiecarui obiect de care este nevoie pentru construirea appletului. Dupa ce sunt specificate toate acestea, se poate concepe modul in care aplicatia va fi prezentata utilizatorului, si actiunile acestuia pentru a obtine anumite rezultate. Specificatiile pot include o anumita organizare a ecranului ; Un mic desen este de folos in stabilirea informatiilor care trebuie prezentate utilizatorului si alegerea unui format atractiv.
Dupa ce este schitata asezarea in pagina, se trece la descrierea fiecarui obiect al appletului, in termenii functiilor pe care va trebui sa le execute. Multe din aceste obiecte apar pe ecran si pot fi definite prin organizarea ecranului. Altele executa operatii de fundal, constituind suportul pentru obiectele care apar pe ecran. Aceste obiecte se pot defini prin intermediul functiilor pe care trebuie sa le execute. Unul dintre avantajele programarii orientate pe obiecte este usurinta cu care se pot adauga obiecte noi, pentru a implementa functionalitati care nu au fost prevazute initial.
Dupa ce sunt stabilite operatiile pe care trebuie sa le executa appletul, se realizeaza o schita simpla, o macheta a appletului. Urmatorul pas este descrierea aplicatiei prin intermediul obiectelor componente
Definirea clasei pentru fiecare obiect reprezinta numai o parte a etapei de determinare a structurii aplicatiei. Aceasta include si stabilirea obiectelor prezenta la lansarea in executie, momentul in care sunt create noile obiecte si modul in care acestea vor comunica intre ele.
Cea mai simpla metode de creare a unui applet este extinderea clasei Applet, care, asa cum este definita in interfata API, include toate metodele necesare. La lansarea in executie aplicatia creaza obiecte, care sunt deja definite in interfata API.
Pentru construirea aplicatiei trebuie parcurse urmatoarele etape: crearea fisierului HTML pentru testarea apletului (pentru vizualizarea lui), crearea unui fisier ce contine clasele incluse, declararea claselor noi , adaugarea variabilelor de clasa, definirea metodelor si, in final, compilarea appletului.
2. Breviar de calcul
Aplicatia in ansambul ei reprezinta o modalitate de interfatare a utilizatorilor cu informatiile rezidente pe serverul Universitatii Tehnice Cluj-Napoca, si anume cu cele ce privesc activitatea desfasurata in cadrul laboratorului disciplinei de Software in telecomunicatii. Activitatea colectivului de Programare si sisteme de operare din cadrul Catedrei de Comunicatii, atat in ceea ce priveste cercetarea, cat si cea curenta, desfasurata impreuna cu studentii reprezinta un nucleu de real interes opentru o categorie larga de oameni, pornind de la studentii altor profile sau facultati, pana la angajatii unor companii de software. De aceea, pentru a facilita accesul la informatie, s-a hotarat crearea unei pagini WEB a laboratorului, care sa fie disponibila on-line. Scopul final este atat de a stabili contacte si parteneriate reciproc avantajoase, in vederea extinderii activitatii laboratorului, cat si de a facilita accesul la informatie pentru studenti, in scopuri educationale.
S-a pus de asemenea accentul pe realizarea unei aplicatii gemene, dar in limba engleza, pentru a putea face posibil accesul utilizatorilor de peste hotare, urmarind aceleasi scopuri de mai sus, aplicabile insa persoanelor nevorbitoare de limba romana.
Mizand in primul rand pe faptul ca o pagina de Internet este cu atat mai "prietenoasa", cu cat aspectul grafic al prezentarii este mai evoluat, s-a incercat imbinarea unei palete reduse de culori, pentru a nu supraincarca senzatia vizuala a utilizatorului ; desigur combinatiile cromatice utilizate sunt supuse criticilor obiective, deoarece afinitatile programatorului in raport cu un numar mare de utilizatori, asa cum sunt cei ai Internetului, sunt fara indoiala subiective.
Un rol deosebit de important il joaca interactivitatea ; in acest scop am creat un applet Java care realizeaza un meniu derulant activat de mutarea mouseului asupra unor arii predefinite. Elementele meniului reprezinta hiperlegaturi catre paginile de interes pentru utilizator. Meniul derulant actioneaza asupra unei harti de imagine, a carei realizare va fi descrisa in paragraful urmator.
2.1 Realizarea hartii de imagine
In mod uzual, imaginile prezente in paginile WEB sunt fie in standard jpg fie gif. In cazul de fata am ales lucrul cu standardul gif, din considerente de memorie alocata imaginii. Desigur, pe piata de software mondiala se gasesc zeci de aplicatii destinate crearii de imagini pentru pagini WEB, iar simpla alegere intre ele se bazeaza pe experienta programatorului in lucrul cu un anumit mediu grafic. Pentru aplicatia de fata am ales Paint Shop Pro, un mediu performant, de ultima generatie, pentru a realiza imaginea utilizata.
Pentru a explora o modalitate diferita de realizare a unei imagini, am utilizat facilitatea de captare de imagini a programului, in vederea prelucrarii ; un artificiu folosit aici, pe care personal nu l-am intalnit altundeva, este crearea imaginii de baza in cadrul unui fisier HTML, utilizand facilitatile oferite de tabelele din standardul HTML. Aceasta optiune este justificata de necesitatea ca informatia din cadrul paginii principale sa fie structurata, lucru realizabil si in mod direct, prin crearea unei imagini pornind de la zero, dar care ar fi necesitat mai mult timp de lucru si experienta mai indelungata cu mediul Paint Shop Pro.
Asadar imaginea captata, realizata in standard HTML, arata astfel :
Figura 1. Captarea imaginii cu Paint Shop Pro 6
Se observa din imagine si fereastra de configurare a optiunii de captare de imagine ; dupa configurarea setarilor, in pagina HTML in care este realizat tabelul este selectata aria care va fi preluata, si, cu ajutorul butonului drept al mouseului, este importata imaginea in program.
In continuare este listat codul HTML utilizat pentru crearea imaginii:
<html>
<head>
<title>Laboratorul de Software in Telecomunicatii</title>
</head>
<body background="book.JPG" bgcolor="green">
<font size=+3 face="Viner Hand ITC" color=blue><center><i>Bine ati venit in
Laboratorul de Software in Telecomunicatii !</i></center></font>
<table width=75% border=15 bordercolorlight=navy bordercolordark=blue
cellpadding=10 cellspacing=2 align=center >
<tr>
<th><IMG SRC="GLOB.GIF" ALLIGN="CENTER">
<Th width=15 bgcolor="yellow">Cursuri oferite
<Th width=15><img src="eu-s.gif" width=72 height=48 border="0" >
<Th width=15 bgcolor="yellow">Activitatea de cercetare
<Th width=15><img src="utcnback.jpg" width=63 height=63 border="0">
</table>
<table width=75% border=15 bordercolorlight=blue bordercolordark=navy
cellpadding=10 cellspacing=2 align=center >
<tr>
<th width=15><img src="eng.gif" align=right>
<Th width=15 bgcolor="yellow">Proiecte propuse
<Th width=15><img src="email.gif" width=63 height=63 border="0"
alt="Email Us" align=center>
<Th width=15 bgcolor="yellow">Studenti inscrisi
<th width=15><IMG SRC="GLOB.GIF" ALLIGN="CENTER">
</table>
</body>
</html>
Prin jonglarea cu valorile parametrilor tabelelor a fost obtinut efectul de album foto inramat, cat si latura umbrita.
Se poate observa cu usurinta ca miscarea mouseului pe ecran se transpune in schimbarea permanenta a coordonatelor sale. Utilizand aceasta facilitate a programului, se defineste in continuare harta de imagine; astfel, fiecare arie, reprezentand un dreptunghi, care se doreste a fi separata pentru meniul derulant se defineste prin perechea de coordonate coltul stanga sus-coltul dreapta jos. Rezulta astfel un set de perechi de coordonate, corespunzatoare ariei 1, 2 samd., care vor fi utilizate, asa cum se va arata in continuare, in constructia parametrilor appletului.
Inainte de a fi salvata in varianta finala, imaginea este redimensionata dupa necesitatile appletului, cu ajutorul optiunii resize.
2.2 Realizarea meniului derulant
Pentru realizarea meniului derulant a fost utilizat limbajul de programare Java. Prima tentatie in ceea ce priveste realizarea sa a fost utilizarea Java Script, ceea ce ar fi simplificat in oarecare masura structura generala a aplicatiei, si ar fi redus necesarul de memorie alocata stocarii. Insa, contrar asteptarilor, modul in care se derulau optiunile meniului nu se incadrau in nota generala a paginii, din cauza miscarilor mult prea bruste executate. Folosirea unui applet Java a dat efectul scontat : meniul se deruleaza lasand impresia ca viteza de derulare este controlata de un mecanism, iar aspectul grafic este net superior, datorita posibilitatilor multiple de configurare.
In continuare se va prezenta realizarea appletului Java ; pentru concizie, se va explica prin comentarii pe marginea codului sursa Java .
// Applet java care controleaza o harta de imagini, realizand un
//meniu derulant cu optiuni de tip hiperlegatura
//Importarea claselor existente in interfata API, utile aplicatiei:
import java.applet.*;
import java.awt.*;
import java.net.URL;
import java.util.StringTokenizer;
//Definirea clasei primare PopUpMenu; intotdeauna numele clasei primare trebuie sa //fie identic cu cel al fisierului sursa Java in care este salvata :
public class PopUpMenu extends Applet
{
//utilizarea unei functii predefinite pentru furnizarea informatiilor despre autor:
public String getAppletInfo()
{
return "Menu created by Seidner Robert,[anonimizat]";
}
//clasa primara contine metoda init()
//metoda init() este rulata cand mediul de executie incarca appletul,
//inainte de executarea lui
//aceasta metoda creaza obiectele necesare appletului;este o metoda
//publica, poate fi apelata de alte obiecte si nu returneaza nici o valoare
public void init()
{
size = size();
center = new Point(size.width / 2, size.height / 2);
//mecanismul de tratare a exceptiilor de tip try-catch, pentru stabilirea parametrilor //imaginii
try
{
//In “s” se memoreaza calea directoare a imaginii, declarata in fisierul HTML ca valoare a parametrului mapimage:
String s = getParameter("mapimage");
if(s != null)
{
mapImage = getImage(new URL(getDocumentBase(), s));
prepareImage(mapImage, this);
}
}
catch(Exception _ex) { }
//In s1 se memoreaza parametrul culorii de fond utilizate:
String s1;
if((s1 = getParameter("paper")) != null)
bgColor = parseColor(s1);
bgDarker = bgColor.darker();
bgDarker = bgDarker.darker();
bgBrighter = bgColor.brighter();
bgBrighter = bgBrighter.brighter();
//In s1 se inscrie culoarea textului, respectiv a parametrului “ink”:
if((s1 = getParameter("ink")) != null)
fgColor = parseColor(s1);
darkerFgColor = fgColor.darker();
darkerFgColor = darkerFgColor.darker();
//Urmeaza culoarea utilizata pentru scoaterea in evidenta a meniului selectat:
if((s1 = getParameter("highlight")) != null)
hlColor = parseColor(s1);
hlFlag = true;
//Daca exista valoare pentru parametrul de marcaj, si valoarea este “nemarcat”
if((s1 = getParameter("mark")) != null && s1.equalsIgnoreCase("false"))
hlFlag = false;
//atunci se defalca valorile parametrului border, dimensiunea, respectiv culoarea
try
{
s1 = getParameter("border");
if(s1 != null)
{
StringTokenizer stringtokenizer = new StringTokenizer(s1, ",");
int j;
if((j = Integer.parseInt(stringtokenizer.nextToken())) > 0)
//se memoreaza valorile rezultate din defalcare:
bdSize = j;
bdColor = parseColor(stringtokenizer.nextToken());
}
}
catch(Exception _ex) { }
//Area, target, url, item, status sunt parametrii stabiliti in fisierul de vizualizare a //appletului, pentru fiecare din ariile definite de harta de imagine, asa cum se va vedea
//in listarea codului HTML. Valorile acestor parametrii, care sunt de fapt niste siruri //de caractere, se memoreaza intr-o serie de variabile, S1…S5:
//Se incrementeaza numarul ariei selectabile:
while((s1 = getParameter("area#" + (areas + 1))) != null)
areas++;
area = new Area[areas];
//Daca aria respectiva are hiperlegatura intr-o noua fereastra, se memoreaza valoarea //parametrului terget in variabila s1
if((s1 = getParameter("target")) != null)
target = s1;
//Intr-o bucla for, se stabileste configuratia targetului pentru fiecare arie:
for(int i = 0; i < areas; i++)
{
String s2 = getParameter("area#" + (i + 1));
getShape(i, s2);
area[i].targetFrame = target;
area[i].defaultUrl = getParameter("url#" + (i + 1));
area[i].defaultStatus = getParameter("status#" + (i + 1));
s2 = getParameter("target#" + (i + 1));
if(s2 != null)
area[i].targetFrame = s2;
area[i].alignment = 1;
if((s2 = getParameter("align")) != null)
if(s2.equalsIgnoreCase("right"))
area[i].alignment = 2;
else
if(s2.equalsIgnoreCase("center"))
area[i].alignment = 0;
area[i].style = 0;
//Se stabileste si forma ariei:
if((s2 = getParameter("style")) != null)
if(s2.equalsIgnoreCase("rect"))
area[i].style = 1;
else
if(s2.equalsIgnoreCase("round"))
area[i].style = 2;
//In alta bucla for se stabilesc adresele utilizate pentru navigare in cadrul //componentelor meniului; exista o adresa predefinita, pentru toate sectiunile ariei //respective, cat si un status al selectarii hiperlegaturii respective:
for(int l = 0; l < area[i].items; l++)
{
if(area[i].defaultUrl != null)
area[i].url[l] = area[i].defaultUrl;
if(area[i].defaultStatus != null)
area[i].status[l] = area[i].defaultStatus;
}
}
//In acesta bucla se stabilesc valorile pentru numarul elementului unui meniu, adresa //la care se face trimiterea din cadrul acelui element si statusul hiperlegaturii :
for(int k = 0; k < areas; k++)
{
for(int i1 = 0; i1 < area[k].items; i1++)
{
String s4;
if((s4 = getParameter("item#" + (k + 1) + "-" + (i1 + 1))) != null)
area[k].item[i1] = s4;
if((s4 = getParameter("url#" + (k + 1) + "-" + (i1 + 1))) != null)
area[k].url[i1] = s4;
if((s4 = getParameter("status#" + (k + 1) + "-" + (i1 + 1))) != null)
area[k].status[i1] = s4;
}
}
try
{
String s3 = getParameter("font");
StringTokenizer stringtokenizer1 = new StringTokenizer(s3, ",");
//In S5 se memoreaza tipul de font utilizat, stilul si dimensiunea sa:
String s5 = stringtokenizer1.nextToken();
if(s5.equalsIgnoreCase("Courier"))
fontName = "Courier";
else
if(s5.equalsIgnoreCase("Dialog"))
fontName = "Dialog";
else
if(s5.equalsIgnoreCase("Helvetica"))
fontName = "Helvetica";
else
if(s5.equalsIgnoreCase("Symbol"))
fontName = "Symbol";
else
if(s5.equalsIgnoreCase("TimesRoman"))
fontName = "TimesRoman";
else
fontName = s5;
s5 = stringtokenizer1.nextToken();
if(s5.equalsIgnoreCase("plain"))
fontStyle = 0;
else
if(s5.equalsIgnoreCase("bold"))
fontStyle = 1;
else
if(s5.equalsIgnoreCase("italic"))
fontStyle = 2;
else
if(s5.equalsIgnoreCase("boldItalic"))
fontStyle = 3;
else
fontStyle = 0;
s5 = stringtokenizer1.nextToken();
int k1;
if((k1 = Integer.parseInt(s5)) > 0)
fontSize = k1;
else
fontSize = 11;
}
catch(Exception _ex) { }
Graphics g = getGraphics();
font = g.getFont();
//Sunt setati parametrii pentru fontul utilizat la desenarea appletului
g.setFont(font = new Font(fontName, fontStyle, fontSize));
FontMetrics fontmetrics = g.getFontMetrics();
fontAdvance = fontmetrics.getMaxAdvance();
fontAscent = fontmetrics.getMaxAscent();
fontHeight = fontmetrics.getHeight();
//Bucla utilizata pentru stabilirea dimensiunilor pentru dreptunghiul desenat ca si //popBox :
for(int j1 = 0; j1 < areas; j1++)
{
int l1 = 0;
int i2 = 0;
int j2 = 0;
int k2 = 0;
for(int l2 = 0; l2 < area[j1].items; l2++)
{
String s6 = area[j1].item[l2];
int i3 = fontmetrics.stringWidth(s6);
if(i3 > j2)
j2 = i3;
}
Rectangle rectangle = area[j1].getBoundingBox();
j2 += 2 * hrznMargin;
k2 = area[j1].items * fontHeight + 2 * vertMargin;
if(rectangle.x + rectangle.width / 2 < center.x)
{
l1 = (rectangle.x + rectangle.width) – fontAdvance;
if(l1 + j2 > size.width)
l1 = Math.max(0, size.width – j2);
} else
{
l1 = Math.max(0, (rectangle.x + fontAdvance) – j2);
if(l1 + j2 > size.width)
l1 = Math.max(0, size.width – j2);
}
if(rectangle.y + rectangle.height / 2 < center.y)
{
i2 = rectangle.y + rectangle.height / 2;
if(i2 + k2 > size.height – adMargin)
i2 = Math.max(0, size.height – k2 – adMargin);
} else
{
i2 = Math.max(0, (rectangle.y + rectangle.height / 2) – k2);
if(i2 + k2 > size.height – adMargin)
i2 = Math.max(0, size.height – k2 – adMargin);
}
String s7;
if((s7 = getParameter("box#" + (j1 + 1))) != null)
{
StringTokenizer stringtokenizer2 = new StringTokenizer(s7, ",");
String s8 = stringtokenizer2.nextToken();
int j3;
if((j3 = Integer.parseInt(s8)) > 0)
l1 = j3;
s8 = stringtokenizer2.nextToken();
if((j3 = Integer.parseInt(s8)) > 0)
i2 = j3;
}
area[j1].popBox = new Rectangle(l1, i2, j2, k2);
}
}
//metoda ce defineste forma ariei desenate: rectangulara, rotunda sau poligonala
private void getShape(int i, String s)
{
StringTokenizer stringtokenizer = new StringTokenizer(s, ",");
int j = Integer.parseInt(stringtokenizer.nextToken());
String s1 = stringtokenizer.nextToken();
if(s1.equalsIgnoreCase("rect"))
{
int k = Integer.parseInt(stringtokenizer.nextToken());
int i1 = Integer.parseInt(stringtokenizer.nextToken());
int l1 = Integer.parseInt(stringtokenizer.nextToken());
int l2 = Integer.parseInt(stringtokenizer.nextToken());
area[i] = new Area(j, new Rectangle(k, i1, l1 – k, l2 – i1));
}
if(s1.equalsIgnoreCase("circ"))
{
int l = Integer.parseInt(stringtokenizer.nextToken());
int j1 = Integer.parseInt(stringtokenizer.nextToken());
int i2 = Integer.parseInt(stringtokenizer.nextToken());
area[i] = new Area(j, l, j1, i2);
}
if(s1.equalsIgnoreCase("poly"))
{
Polygon polygon = new Polygon();
int k1;
int j2;
for(; stringtokenizer.hasMoreTokens(); polygon.addPoint(k1, j2))
{
k1 = Integer.parseInt(stringtokenizer.nextToken());
j2 = Integer.parseInt(stringtokenizer.nextToken());
}
area[i] = new Area(j, polygon);
}
}
//metoda parseColor care returneaza culoarea utilizata
public Color parseColor(String s)
{
StringTokenizer stringtokenizer = new StringTokenizer(s, ",");
if(s.equalsIgnoreCase("white"))
return Color.white;
if(s.equalsIgnoreCase("black"))
return Color.black;
if(s.equalsIgnoreCase("lightGray"))
return Color.lightGray;
if(s.equalsIgnoreCase("gray"))
return Color.gray;
if(s.equalsIgnoreCase("darkGray"))
return Color.darkGray;
if(s.equalsIgnoreCase("red"))
return Color.red;
if(s.equalsIgnoreCase("green"))
return Color.green;
if(s.equalsIgnoreCase("blue"))
return Color.blue;
if(s.equalsIgnoreCase("yellow"))
return Color.yellow;
if(s.equalsIgnoreCase("magenta"))
return Color.magenta;
if(s.equalsIgnoreCase("cyan"))
return Color.cyan;
if(s.equalsIgnoreCase("pink"))
return Color.pink;
if(s.equalsIgnoreCase("orange"))
return Color.orange;
if(s.equalsIgnoreCase("gold"))
return new Color(231, 231, 107);
Color color;
if(stringtokenizer.countTokens() == 3)
{
int i = Integer.parseInt(stringtokenizer.nextToken());
int k = Integer.parseInt(stringtokenizer.nextToken());
int i1 = Integer.parseInt(stringtokenizer.nextToken());
color = new Color(i, k, i1);
} else
{
color = new Color(231, 231, 107);
}
if(s.length() == 7 && s.charAt(0) == '#')
{
int j = Integer.parseInt(s.substring(1, 3), 16);
int l = Integer.parseInt(s.substring(3, 5), 16);
int j1 = Integer.parseInt(s.substring(5, 7), 16);
color = new Color(j, l, j1);
}
return color;
}
//Tratarea evenimentelor legate de miscarea mouse-ului pe ecran
public boolean mouseExit(Event event, int i, int j)
{
mouseX = -1;
mouseY = -1;
activeArea = -1;
getAppletContext().showStatus("");
overAd = false;
repaint();
return true;
}
public boolean mouseDown(Event event, int i, int j)
{
String s = "";
if(activeArea >= 0)
s = area[activeArea].targetFrame;
if(mouseY > size.height – adMargin)
{
URL url;
try
{
url = new URL(getCodeBase(), "http://www.utcluj.ro/");
}
catch(Exception _ex)
{
url = null;
}
if(url != null)
getAppletContext().showDocument(url, "_blank");
}
if(activeArea >= 0)
{
URL url1;
if(activeItem >= 0)
try
{
url1 = new URL(getCodeBase(), area[activeArea].url[activeItem]);
}
catch(Exception _ex)
{
url1 = null;
}
else
try
{
url1 = new URL(getCodeBase(), area[activeArea].defaultUrl);
}
catch(Exception _ex)
{
url1 = null;
}
if(url1 != null)
getAppletContext().showDocument(url1, s);
}
return true;
}
public boolean mouseMove(Event event, int i, int j)
{
boolean flag = false;
mouseX = i;
mouseY = j;
int k = activeArea;
int l = activeItem;
activeArea = -1;
activeItem = -1;
if(mouseY > size.height – adMargin)
overAd = true;
else
overAd = false;
if(k >= 0 && area[k].popBox.inside(i, j))
flag = true;
if(!flag)
{
for(int i1 = areas – 1; i1 >= 0; i1–)
if(area[i1].inside(i, j))
{
area[i1].poped = true;
activeArea = i1;
activeItem = area[i1].overItem(i, j, fontHeight);
} else
{
area[i1].poped = false;
}
}
if(flag)
{
activeArea = k;
activeItem = area[activeArea].overItem(i, j, fontHeight);
}
if(activeArea >= 0)
{
if(activeArea != k || activeItem != l)
if(activeItem == -1)
{
if(area[activeArea].defaultStatus != null)
showStatus(area[activeArea].defaultStatus);
else
if(area[activeArea].defaultUrl != null)
showStatus(area[activeArea].defaultUrl);
} else
if(area[activeArea].status[activeItem] != null)
showStatus(area[activeArea].status[activeItem]);
else
showStatus(area[activeArea].url[activeItem]);
}
repaint();
return true;
}
//metoda care deseneaza obiectele pe ecran
public void paint(Graphics g)
{
update(g);
}
//metoda care realizeaza actualizarea valorilor variabilelor si
//apoi deseneaza obiectele pe ecran
public void update(Graphics g)
{
//Daca sunt indeplinite conditiile de dimensionare ale appletului, este desenata //imaginea, daca nu, este construita o imagine cu urmatoarele caracteristici :
if(offGraphics == null || size.width != offDimension.width || size.height !=+ +offDimension.height)
{
offDimension = size;
offImage = createImage(size.width, size.height);
offGraphics = offImage.getGraphics();
}
offGraphics.setColor(bgColor);
offGraphics.fillRect(0, 0, size.width, size.height);
if((checkImage(mapImage, this) & 0x20) == 32)
{
offGraphics.drawImage(mapImage, 0, 0, this);
} else
{
offGraphics.setFont(font);
offGraphics.setColor(fgColor);
offGraphics.drawString("Downloading image…Please wait…Thank you!",+ +fontAdvance, fontHeight + fontAscent);
}
if(activeArea >= 0)
{
if(hlFlag)
{
offGraphics.setColor(hlColor);
if(area[activeArea].shape == 1)
{
Rectangle rectangle = area[activeArea].getRect();
//Este desenat dreptunghiul, a carui culoare se va specifica in urmatoarele linii de //program
offGraphics.drawRect(rectangle.x, rectangle.y, rectangle.width,+
+rectangle.height);
} else
//In functie de forma ariei, se deseneaza o forma corespunzatoare a meniului derulant, //cu coordonatele precizate prin variabilele x, y, width, height
if(area[activeArea].shape == 2)
{
Rectangle rectangle1 = area[activeArea].getCirc();
offGraphics.drawOval(rectangle1.x, rectangle1.y, rectangle1.width,+
+rectangle1.height);
} else
if(area[activeArea].shape == 3)
{
Polygon polygon = area[activeArea].getPoly();
offGraphics.drawPolygon(polygon);
int j = polygon.npoints – 1;
//Daca aria este poligonala, este desenata o linie poligonala cu ajutorul; matricilor //xpoints si ypoints
offGraphics.drawLine(polygon.xpoints[j], polygon.ypoints[j],+
+polygon.xpoints[0], polygon.ypoints[0]);
}
}
if(area[activeArea].items > 0)
{
if(area[activeArea].style == 0)
{
offGraphics.setColor(bgDarker);
//Se precizeaza culoarea obiectelor desenate:
offGraphics.fillRect(area[activeArea].popBox.x,area[activeArea].popBox.y,+
+area[activeArea].popBox.width, area[activeArea].popBox.height);
offGraphics.setColor(bgColor);
offGraphics.fillRect(area[activeArea].popBox.x,area[activeArea].popBox.y,+ +area[activeArea].popBox.width – 2, area[activeArea].popBox.height – 2);
offGraphics.setColor(bgBrighter);
offGraphics.drawLine(area[activeArea].popBox.x,area[activeArea].popBox.y,+
+area[activeArea].popBox.x + area[activeArea].popBox.width,+
+area[activeArea].popBox.y);
offGraphics.drawLine(area[activeArea].popBox.x + 1,+
+area[activeArea].popBox.y + 1, (area[activeArea].popBox.x ++
+area[activeArea].popBox.width) – 1, area[activeArea].popBox.y + 1);
offGraphics.drawLine(area[activeArea].popBox.x,+ +area[activeArea].popBox.y,area[activeArea].popBox.x,area[activeArea].popBox.y++ +area[activeArea].popBox.height);
offGraphics.drawLine(area[activeArea].popBox.x + 1,+
+area[activeArea].popBox.y + 1, area[activeArea].popBox.x + 1,+
+(area[activeArea].popBox.y + area[activeArea].popBox.height) – 1);
} else
//Daca aria are un stil de formatare, atunci culoarea se extrage din stilul respectiv
if(area[activeArea].style == 1)
{
offGraphics.setColor(bdColor);
offGraphics.fillRect(area[activeArea].popBox.x,area[activeArea].popBox.y,+ +area[activeArea].popBox.width,area[activeArea].popBox.height);
offGraphics.setColor(bgColor);
offGraphics.fillRect(area[activeArea].popBox.x + bdSize,+
+area[activeArea].popBox.y + bdSize, area[activeArea].popBox.width – 2 * bdSize,+ +area[activeArea].popBox.height – 2 * bdSize);
} else
{
offGraphics.setColor(bdColor);
//Colorarea dreptunghiului cu colturi rotunjite
offGraphics.fillRoundRect(area[activeArea].popBox.x,area[activeArea].popBox.y,+ +area[activeArea].popBox.width,area[activeArea].popBox.height,+ +hrznMargin,vertMargin);
offGraphics.setColor(bgColor);
offGraphics.fillRoundRect(area[activeArea].popBox.x + bdSize,+
+area[activeArea].popBox.y + bdSize, area[activeArea].popBox.width – 2 * bdSize,
+area[activeArea].popBox.height – 2 * bdSize, hrznMargin, vertMargin);
}
offGraphics.setFont(font);
for(int i = 0; i < area[activeArea].items; i++)
{
//Colorarea elementului activ din meniu
if(i == activeItem)
{
int k = area[activeArea].popBox.x + bdSize * 2;
int l = area[activeArea].popBox.y + vertMargin + (i – 1) * fontHeight+ ++fontAscent + (fontHeight – fontAscent);
int i1 = area[activeArea].popBox.width – bdSize * 4;
int k1 = fontHeight;
offGraphics.setColor(hlColor);
offGraphics.fillRect(k, l, i1, k1);
offGraphics.setColor(bgColor);
} else
{
offGraphics.setColor(fgColor);
}
//Setarea formatarii caracterelor utilizate in scrierea sirului de caractere din elementele //meniului
FontMetrics fontmetrics = g.getFontMetrics();
String s = area[activeArea].item[i];
int j1 = fontmetrics.stringWidth(s);
int l1 = area[activeArea].popBox.width – j1 – hrznMargin / 2;
if(l1 >= area[activeArea].popBox.width – bdSize * 2 – hrznMargin * 2)
l1 = (area[activeArea].popBox.width – hrznMargin * 2 – bdSize * 2) +2;
//Setarea este defalcatain functie de alinierea fata de marginea ecranului a ariei //respective, generand meniul fie la stanga, fie la dreapta
if(area[activeArea].alignment == 0)
offGraphics.drawString(s, area[activeArea].popBox.x+((hrznMargin /+
+4 + area[activeArea].popBox.width / 2) – j1 / 2), area[activeArea].popBox.y ++
+vertMargin + i * fontHeight + fontAscent);
else
if(area[activeArea].alignment == 2)
offGraphics.drawString(s, area[activeArea].popBox.x + l1,+
+area[activeArea].popBox.y + vertMargin + i * fontHeight + fontAscent);
else
offGraphics.drawString(s, area[activeArea].popBox.x + hrznMargin,+
+area[activeArea].popBox.y + vertMargin + i * fontHeight + fontAscent);
}
}
//declararea constructorului PopUpMenu pentru initializarea variabilelor
public PopUpMenu()
{
areas = 1;
fgColor = Color.blue;
bgColor = Color.cyan;
bdSize = 3;
bdColor = Color.blue;
hlFlag = true;
invertFlag = true;
overAd = false;
hlColor = Color.red;
fontName = "Helvetica";
fontStyle = 1;
fontSize = 11;
hrznMargin = 10;
vertMargin = 10;
pop = -1;
mouseX = -1;
mouseY = -1;
target = "_self";
activeArea = -1;
activeItem = -1;
}
//declararea variabilelor appletului
Image mapImage;
int areas;
Color fgColor;
Color darkerFgColor;
Color bgDarker;
Color bgBrighter;
Color bgColor;
int bdSize;
Color bdColor;
boolean hlFlag;
boolean invertFlag;
boolean overAd;
Color hlColor;
String fontName;
int fontStyle;
int fontSize;
int hrznMargin;
int vertMargin;
int adMargin;
int pop;
int mouseX;
int mouseY;
String target;
String code;
char c;
Area area[];
int activeArea;
int activeItem;
Font font;
int fontAdvance;
int fontAscent;
int fontHeight;
Point center;
Dimension offDimension;
Dimension size;
Image offImage;
Graphics offGraphics;
}
Ultima etapa care trebuie parcursa, dupa scrierea si verificarea codului sursa Java, o reprezinta compilarea codului pentru obtinerea fisierului cu extensia .class. Pentru a compila cod sursa Java avem nevoie de un mediu de dezvoltare Java. Cel utilizat in cazul de fata este pachetul JDK 1.2.2, al firmei Sun Microsistems. Algoritmul de compilare este urmatorul : se selecteaza din meniul Start optiunea Run, unde se tasteaza in fereastra de dialog Command, apoi se tasteaza Enter :
Figura 2. Lansarea prompterului DOS
Se va lansa prompterul MSDOS. Daca nu ne aflam in directorul in care este continut fisierul .java, atunci vom utiliza setul de comenzi DOS pentru a obtine urmatorul rezultat :
Figura 3. Lansarea in executie a compilatorului Java
Se observa comanda tastata la prompter : javac este numele functiei care realizeaza compilarea, iar fisierul trebuie mentionat impreuna cu extensia sa.
In urma compilarii rezulta un fisier cu numele identic, insa cu extensia .class. Acest fisier este urilizat in vizualizarea appletului in cadrul paginii HTML.
2.3 Realizarea paginilor HTML
Corpul aplicatiei se compune dintr-un numar de 16 pagini HTML de sine statatoare, interconectate prin hiperlegaturi cu pagina principala . Opt dintre pagini sunt redactate in limba romana si opt in limba engleza, realizand traducerea informatiilor prezentate, pentru a facilita accesul celor interesati si care nu sunt vorbitori de limba romana.
Pagina principala, numita in mod clasic “index.html” are si ea o traducere in limba engleza, “engpage.html” ; de fapt traducerea consta in construirea unei alte harti de imagine utilizand limba engleza, cu aceleasi metode ca si cele prezentate in paragraful 2.1. Ambele pagini contin appletul Java cu meniul derulant si , de asemenea, au legatura reciproca, una pentru cealalta. Astfel, daca utilizatorul este conectat la server, poate sa aleaga varianta romana sau engleza a paginii. Celelalte 7 pagini in limba romana, respectiv in limba engleza reprezinta de fapt continutul informational al sistemului ; aici utilizatorul poate afla domeniile de interes pe care se axeaza laboratorul, tematicile expuse, etc.
Programarea in limbaj HTML este o programare care nu necesita compilare de cod sursa, ca in cazul Java ; codul HTML este un cod interpretabil, iar interpretatrea este realizata de catre browserele utilizate la navigarea in WWW.
Applatul Java a carui creare a fost delaliata anterior ruleaza in pagina principala, “index.html”. In continuare voi puncta modul de realizare a paginii web principale prin comentarii pe baza listarii codului sursa:
Orice fisier HTML incepe cu tagul <HTML> si se incheie cu </HTML>. In interiorul paragrafului TITLE an mentionat titlul paginii HTML, care poate fi
vizualizat pe bara superioara albastra a navigatorului Web. Acest parametru este optional.
Liniile de cod care urmeaza sunt necesare pentru indexarea paginii web de catre motoarele de cautare. Tagurile <meta> reprezinta elemente de programare avansata, in interiorul carora se precizeaza informatiile legate de autorul paginii, de proprietar, de titlu, si de cuvintele cheie, utilizate pentru configurarea motorului de cautare, cuvinte cheie cu ajutorul carora se poate regasi pagina de web in lista de rezultate ale cautarii.De asemenea, o informatie importanta care trebuie oferita motoarelor de cautare este limba in care este scrisa pagina, ceea ce se realizeaza in interiorul tagului <HTML>.
In interiorul tagului BODY am realizat setarile pentru elementele grafice componente ale paginii, si anume pentru fundal, a carui culoare va fi verde, pentru culoarea textului, in acest caz, negru si pentru culorile utilizate de catre hiperlegaturi ; este bine de mentionat ca legaturile pot fi impartite in trei categorii, in functie de actiunile executate de catre utilizator, in legaturi simple, neselectate, in legaturi selectate, in acest caz stabilindu-se culoarea utilizata dupa selectare si, in final, legaturile vizitate anterior, care vor fi colorate diferit de cele nevizitate :
<HTML LANG=ro>
<HEAD>
<TITLE>Software laboratory</TITLE>
<LINK REV="made" href="mailto:[anonimizat]">
<META NAME="keywords" CONTENT="HTML, Java, applet, computers, programming, computer medical applications, image map">
<META NAME="description" CONTENT="Activity of the Software laboratory, in the Technical University of Cluj-Napoca, Romania">
<META NAME="author" CONTENT="Seidner Robert">
<META NAME="ROBOTS" CONTENT="ALL">
</HEAD>
<BODY bgcolor=green TEXT="#ffffff" LINK="#e7e76b" VLINK="#808000" ALINK="#ff0000">
In sectiunea care urmeaza se stabilesc parametrii legati de appletul PopUpMenu; aplicatia va fi afisata centrat in pagina, intr-o fereastra cu dimensiunile stabilite de parametrii width si height :
<center>
<applet code="PopUpMenu.class" codebase="." width=700 height=390>
<param name="mapimage" value="images/image4.gif">
<param name="author" value="Seidner Robert">
<param name="copyright" value="[anonimizat]">
<param name="ink" value="#80ffff">
<param name="paper" value="#006060">
<param name="border" value="2,#e7e76b">
<param name="highlight" value="#ffff00">
<param name="font" value="helvetica,plain,14">
<param name="mark" value="false">
<param name="align" value="left">
<param name="style" value="3d">
In continuare urmeaza un set de parametrii care definesc ariile separate din harta de imagine, care vor raspunde in mod diferit la actiunile utilizatorului. Spre exemplu, in parametrul numit area#1 se specifica cate elemente componente va avea meniul derulant, forma ariei si coordonatele stanga-sus respectiv dreapta-jos. Valorile parametrilor item vor fi chiar sirurile de caractere afisate ca si componente ale meniului derulant, iar cele ale parametrului url vor fi adresele utilizate de hiperlegatura pentru navigare. Deci, prin mutarea mouse-ului asupra unei anumite zone din imaginea de pe ecran, se va genera deschiderea unui meniu derulant, din care utilizatorul va putea selecta optiunea dorita pentru a ajunge la informatii. Este de remarcat respectarea asocierilor dintre item#1-1 si url#1-1, samd.
<param name="area#1" value="4,rect,268,126,336,226">
<param name="item#1-1" value="Programarea calculatoarelor-anul I CO si ENG (semestrul I)">
<param name="item#1-2" value="Programarea calculatoarelor-anul I CO si ENG (semestrul II)">
<param name="item#1-3" value="Software in telecomunicatii-anul IV CO">
<param name="item#1-4" value="Ingineria programarii in telecomunicatii-anul VI TM in CO">
<param name="url#1-1" value="cursuri1co1.html">
<param name="url#1-2" value="cursuri1co2.html">
<param name="url#1-3" value="cursuri4co.html">
<param name="url#1-4" value="cursuri6.html">
<param name="area#2" value="2,rect,442,126,532,226">
<param name="item#2-1" value="Recunoasterea formelor prin analiza de imagini si aplicatiile ei">
<param name="item#2-2" value="Introducere in aplicatii programate">
<param name="url#2-1" value="patternro.html">
<param name="url#2-2" value="progapplicro.html">
<param name="area#3" value="1,rect,538,126,616,226">
<param name="item#3-1" value="Universitatea Tehnica Cluj-Napoca">
<param name="area#4" value="1,rect,86,226,178,370">
<param name="item#4-1" value="Our page in English">
<param name="url#4-1" value="engpage.html">
<param name="area#5" value="3,rect,184,226,272,370">
<param name="item#5-1" value="Analiza medicala inteligenta folosind echipamente multimedia">
<param name="item#5-2" value="Procesarea locala si distribuita a imaginilor si aplicatiilor multimedia">
<param name="item#5-3" value="Metode avansate de instruire a studentilor din domeniul electronicii si telecomunicatiilor">
<param name="url#5-1" value="FILE1.html">
<param name="url#5-2" value="FILE2.html">
<param name="url#5-3" value="FILE3.html">
<param name="area#6" value="1,rect,278,266,378,370">
<param name="item#6-1" value="E-mail">
<param name="url#6-1" value="mailto:adresa">
<param name="area#7" value="1,rect,384,266,472,370">
<param name="item#7-1" value="Lucrari de diploma 2000/2001">
<param name="url#7-1" value="diplome.html">
<param name="target#3" value="NewWindow">
<param name="url#3-1" value="http://www.utcluj.ro/">
</applet>
</center>
</body>
</html>
In mod similar au fost stabiliti parametrii de intrare ai appletului, pentru fiecare sectiune a imaginii ; de remarcat este modalitatea diferita in care se realizeaza hiperlegatura in cazul ariei cu numarul 3. Aici am considerat util ca in urma selectarii hiperlegaturii catre serverul Universitatii Tehnice Cluj-Napoca, navigatorul sa deschida aceasta pagina intr-o noua fereastra de navigare. Acest mod faciliteaza lucrul in paralel cu cele doua surse de informatie. Modalitatea de implementare este utilizarea parametrului target#3, prin care i se cere navigatorului mai intai deschiderea unei noi ferestre si apoi localizarea adresei url#3-1.
In imaginea urmatoare se evidentiaza modul de reactie al appletului in urma mutarii cursorului asupra unei arii selectabile. Meniul care se deruleaza are optiuni multiple, iar mutarea cursorului asupra uneia anume va face ca optiunea respectiva sa iasa in evidenta prin schimbarea culorii de fond. In urma executarii unui click, se va deschide o alta pagina Web.
Figura 4. Modul de generare al meniului derulant
Elementele care compun pagina principala sunt din categoria hiperlink ; ele pot face lagatura cu colectivul de programare din cadrul catedrei de comunicatii, prin hiperlegatura de tip mailto, configurata cu ajutorul unei imagini ce reprezinta o scrisoare, cu informatiile privind tematica lucrarilor de diploma si a studentilor inscrisi in anul universitar curent, cu pagina web a Universitatii Tehnice Cluj-Napoca. Tot aici utilizatorul se poate documenta in legatura cu proiectele propuse pentru cercetare in cadrul colectivului de programare cat si in legatura cu cursurile oferite in domeniul programarii calculatoarelor.
In ceea ce priveste paginile web structurate pe informatii, ele au o structura unitara, fiind construite pe acelasi schelet de baza. Acest mod de lucru nu numai ca scurteaza si simplifica codul HTML utilizat, reducand volumul de lucru al programatorului ci ofera si o impresie placuta utilizatorului, obisnuindu-l sa gaseasca acelasi mod de prezentare in fiecare pagina care apartine sistemului. Aceasta metoda de creare de pagini componente pe structura de baza similara este intalnit la majoritatea siturilor care isi prezinta informatiile structurate pe mai multe pagini ; modelul se inspira din clasicele carti, ale caror pagini sunt tiparite avand acelasi format al caracterelor si aceeasi ordonare in pagina. Insa, spre deosebire de carte, daca dorim sa renuntam la lecturarea paginii curente si sa cautam alte informatii, nu este nevoie sa rasfoim, ci este suficient sa executam click pe ancora de intoarcere in pagina principala, unde vom regasi structurarea informatiilor.
In continuare se prezinta modul de realizare al paginilor componente ; in figura se exemplifica una din pagini, subliniind faptul ca toate sunt construite pe aceeasi structura :
Figura 5. Modelul paginilor web componente
Pentru utilizatorii straini, nevorbitori de limba romana, solutia este simpla : prin executarea unui click pe ancora cu drapelul Marii Britanii, se va incarca varianta in limba engleza a paginii principale, in care informatiile sunt identice din punct de vedere al continutului.
Structura paginii este formata dintr-un tabel, in care este structurata, in cazul de fata, informatia continuta in cursurile predate la disciplina de Software in telecomunicatii.
Explicarea mai amanuntita a modului de realizare al paginii se face in continuare, in paralel cu codul sursa HTML utilizat.
Se remarca utilizarea, pe langa tagurile HTML obligatorii, a tagului <link>, in interiorul paragrafului <head>. Acest tag este un element de programare avansata, ce utilizeaza stilurile. In HTML, stilurile definesc tipul de formatare al caracterelor, dimensiune, culoare, etc. Declarea stilurilor se poate face in mai multe feluri : fie prin definirea parametrilor in interiorul unui bloc <style>, fie prin stiluri identificate, adica prin utilizarea unui identificator universal, id, pentru obiectele care vor fi desenate cu caracteristicile stabilite prin declaratia de stil. In acest caz am utilizat o a treia metoda, mai deosebita prin felul de implementare, si anume declararea parametrilor in cadrul unui fisier extern. Acest fisier este de tip text, cu extensia .css, si contine propriu zis ceea ce ar fi trebuit scris in interiorul unui bloc style, mai putin tagurile de rigoare. In aplicatia noastra, fisierul este numit chiar style.css si este referit din interiorul paginii HTML prin intermediul tagului link, si anume prin parametrii type, rel si href :
<HTML>
<HEAD>
<TITLE>Cursuri</TITLE>
<link type="text/css" rel="stylesheet" href="style.css" >
</HEAD>
In interiorul corpului paginii, elementele sunt organizate sub forma tabelara. Primul tabel reprezinta varianta de aranjare in pagina a antetului: in prima linie se gaseste, aliniat central, titlul continutului paginii, iar pe a doua linie,vom regasi alte doua elemente ale paginii, semestrul curent si imaginea selectabila prin click, care realizeaza hiperlegatura cu pagina principala.
<BODY >
<center>
<table>
<tr align="center">
CONTENT OF COMPUTER PROGRAMMING COURSE-Ist YEAR CO
<tr align="left"><td>First semester</td>
<td><a href="engpage.html"><img aling="right" src="images/khome.gif"></a>
</td></tr></table>
</center>
Cel de-al doilea tabel reprezinta varianta constructiva de baza a paginii. Acest model este creat prin setarea la valori corespunzatoare a parametrilor tagului <table>, si anume pentru border, cu scopul de a crea o bordura limitatoare intre elementele tabelului si pentru cellspacing, pentru a distanta celulele intre ele. Trebuie subliniata aici facilitatea oferita de tagurile ce privesc tabelele, anume de a configura culorile de fond ale unor anumite celule ale tabelului, alese de catre programator, Posibilitatea acesta de a configura in mod diferit setarile pentru elementele aceluiasi tabel da o nota aparte impresiei vizuale oferite utilizatorului paginii web.
Tabelul se compune din mai multe linii si din doua coloane ; in elementele primei coloane se specifica tiltul cursurilor prezentate iar in a doua coloana se regasaste cuprinsul lor, pe scurt. Prezentarea mai mult decat sintetica a cursurilor oferite depaseste obiectivele acestei aplicatii ; ceea ce s-a dorit a se realiza este punerea in contact cu resursele oferite de colectivul de programare din cadrul facultatii noastre, detalierea urmand a se realiza impreuna cu colectivul amintit, pentru contactarea caruia se vor folosi tot resursele oferite de aplicatia de fata.
<table border=1 cellspacing=10>
<tr align="center"><th bgcolor=teal>Title</th>
<th bgcolor=olive>Thematics</th></tr>
<tr align="left"><td><B>Introduction in computer programming</B></td>
<td><EM>Algorithms, program, programming language (LP)</EM></td></tr>
<tr align="left"><td><B>Classification and LP evolution</B></td>
<td> <EM>Programming principles</EM></td></tr>
<tr align="left"><td><B>Anatomy of a computer</B></td>
<td> <EM>Computer data representation. Fundamental data representation and
instructions</EM></td></tr>
<tr align="left"><td><B>Introduction concerning C/C++ programming</B></td>
<td><EM> The structure of a first C/C++ program and application. Predefined data types in C, constants, variables</EM>.</td></tr>
<tr align="left"><td><B>Aggregate types</B></td>
<td> <EM>Arrays, structures. Functions: calling, prototype, definition. Elements of preprocessing in C</EM></td></tr>
<tr align="left"><td><B>Input/output operations in C/C++</B></td>
<td><EM> Input/output with format, printf, scanf. Stream input/output in C++, cin, cout</EM></td></tr>
<tr align="left"><td><B>Basic elements of C language</B></td>
<td><EM> Operators in C language. Control of program flow, instructions in C</EM></td></tr>
<tr align="left"><td><B>Memory classes</B></td>
<td><EM> global and local variables. Functions and memory classes. Initialization of variables and arrays.</EM></td></tr>
<tr align="left"><td><B>Introduction concerning pointers in C</B></td>
<td><EM> Pointers: operators, address calling with pointers and references. Pointers operations</EM></td></tr>
<tr align="left"><td><B>Other considerations referring to pointers</B></td>
<td><EM> Arrays and pointers, pointers to functions. Arguments transfer to main function</EM></td></tr>
<tr align="left"><td><B>Dynamic allocation: in C and in C/C++</B></td>
<td> </td></tr>
<tr align="left"><td><B>User defined data types</B></td>
<td><EM> Data structures and pointers. Unions, bit fields. Typedef, enum, recursive data</EM></td></tr>
<tr align="left"><td><B>Recursion</B></td>
<td><EM>Mathematical recursivity. Recursive programming using C/C++ language</EM></td></tr>
</table>
</body>
</html>
In final voi incerca prezentarea succinta a fisierului style.css, care contine stilurile utilizate in paginile web, stiluri declarate in maniera Cascading Style Sheets. Listarea codului sursa din fisier este:
<!–Stilurile utilizate de elementele din corpul paginilor de web–>
body { bgcolor:green;
text-color:"#ffffff";
LINK:"#e7e76b";
VLINK:"#808000";
ALINK:"#ff0000";
}
Se observa ca fisierul este de tip text, iar comentariile utilizate sunt de tip HTML. Se specifica culoarea fundalului, culoarea textului utilizat in pagina, cat si culotile legaturilor, in functie de starea lor la un moment dat, selectate, vizitate sau nevizitate. Declararea parametrilor se face intre paranteze acolade.
Realizarea de pagini web este un exercitiu aparent simplu din punct de vedere al limbajului utilizat. Greutatea consta insa in gasirea configuratiei potrivite aplicatiei date, realizarea schitei de principiu si adaugarea pe masura a componentelor, cu grija unei perfecte integrari cu ambianta grafica a paginii, pentru evitarea contrastelor nepotrivite. O importanta aparte trebuie acordata gamei de culori alese, pentru a crea o impresie buna vizuala utilizatorului. Desi aceasta alegere este supusa subiectivitatii programatorului, totusi exista o serie de aspecte grafice care se evita in construirea unei pagini web, din care amintim nealinierea elementelor, supraincarcarea ecranului sau colorarea prea stridenta, observatii de care un programator HTML cu suficienta experienta trebuie sa tina cont.
3. Rezultate experimentale
Modul de utilizare al aplicatiei
Fiind o aplicatie creata pentru a fi accesata in World Wide Web, utilizarea ei este deosebit de simpla oricarui utilizator de Internet. Practic, tot ceea ce trebuie pentru vizualizarea aplicatiei este un browser de Internet care suporta Java. Din producatorii si versiunile cele mai cunoscute amintim: Netscape (versiuni mai noi de 2) , Hot Java (orice versiune), Internet Explorer (versiuni mai noi de 3). In imaginea urmatoare se exemplifica un mod tipic de a deschide pagini de web cu Internet Explorer :
Figura 6. Deschiderea aplicatiei cu Internet Explorer
Daca aplicatia nu este disponibila on-line, la o adresa cunoscuta, dar aveti fisierul sursa HTML, primul pas care trebuie efectuat este selectarea din meniul file a optiunii “open “, care va genera o casuta de dialog de tipul celei din imagine. Daca se cunoaste calea directoare catre fisierul sursa care se doreste a fi vizualizat, aceasta se specifica in spatiul alb. Daca insa aceasta cale nu este cunoscuta, se va selecta optiunea browse, ca in imaginea de mai sus, care reprezinta un mininavigator pe computerul dvs. Cu ajutorul acestui instrument veti localiza fisierul, insa trebuie acordata atentie tipului de fisier pe care doriti sa-l cautati (in cazul de fata fisier HTML), tip care este ales din meniul derulant files of type, ca mai sus. Odata fisierul gasit, este suficienta selectarea optiunilor open si OK pentru ca browserul sa-i afiseze continutul pe ecran.
Modul de utilizare al facilitatilor oferite de aplicatie
In acest paragraf voi incerca sa reamintesc pe scurt facilitatile oferite de aplicatie. Scopul final al aplicatiei este utilizarea sa in scop educational ; ea se adreseaza in primul rand studentilor, dar este accesibila unei categorii mai largi de public, denumita generic utilizatori de Internet. Meritul de baza al aplicatiei este accesibilitatea atat de larga a informatiilor prezentate aici, facand din ea un instrument util oricarei activitati, din orice domeniu.
Privit ca mijloc de informare in masa, Internetul, prin amploarea pe care a dobandit-o in ultimii ani, este unic. Din acest punct de vedere, aplicatia este o pagina web tipica, de generatie noua, datorita interactivitatii pe care o ofera. Lasand pentru moment deoparte utilitatea informatiilor prezentate la adapostul acestui mod de prezentare, aplicatia in sine , prin modul de realizare, poate fi considerata o resursa extrem de utila. Codul sursa HTML poate fi reutilizat pentru realizarea altor prezentari similare; simplitatea consta in inlaturarea informatiilor concrete si pastrarea codului HTML pur, pentru a fi utilizat in prezentarea unui alt tip de materiale.
De mare utilitate este si codul sursa Java, al meniului derulant. Cu un grad mai ridicat de dificultate decat refolosirea codului HTML, el poate fi adaptat unei aplicatii diferite. Pentru un programator Java cu experienta suficienta, impunerea de noi cerinte meniului poate fi realizata pe baza modelului de fata. Scopul educational trasat initial pentru aceasta aplicatie este indeplinit pe deplin daca utilizatorii isi pot fundamenta sau imbunatati cunostintele in domeniul programarii web pe baza acestei aplicatii.
4. Concluzii
Datorita dezvoltarii foarte rapide prin care trece domeniul informatic, al calculatoarelor, in paralel cu cel al dezvoltarii de programme, apar zilnic idei noi, tehnologii noi, programe noi. Pana nu de mult, un calculator era izolat si utilizatorul lui folosea numai programe sau documente locale ; in ziua de azi situatia este fundamental diferita. Exista retele de sute de mii de calculatoare legate intre ele si utilizatori din toata lumea au posibilitatea sa schimbe informatii intre ei datorita Internetului. Acest schimb continuu de informatie are ca finalitate o dezvoltare a cunostintelor in domenii foarte variate si, implicit, dezvoltarea sub aspect cultural si economic a societatii moderne.
Aplicatia de fata sintetizeaza, sub aspectul informatiilor oferite, activitatea laboratorului de Software in telecomunicatii ; activitatea colectivului de Programare si Sisteme de operare din cadrul Catedrei de comunicatii a Facultatii de Electronica si Telecomunicatii reprezinta un punct de real interes pentru o categorie larga de public, pornind de la studentii facultatii si pana la toti cei pasionati de domeniul calculatoarelor, mai ales din punct de vedere al dezvoltarii de software. De aceea, dezvoltarea unei pagini web, disponibile on-line, in care sa fie disponibile toate informatiile privind activitatea acestui colectiv, modul de a intra in contact cu el, etc. a fost considerata o oportunitate. Datele oferite in cadrul acestui sistem de prezentare web sunt structurate pe domeniile: cursuri, laboratoare, directii de cercetare, lucrari de diploma propuse studentilor. Utilizatorul poate selecta informatiile dorite in mod extrem de facil, utilizand optiunile de baza oferite de orice pagina web sau cele ale oricarui navigator.
Sub aspectul tehnic al implementarii, designul aplicatiei a fost gandit astfel incat sa poata fi utilizat de orice generatie de navigator web, singura constrangere existenta fiind necesitatea suportarii de Java de catre browser, datorita appletului Java utilizat pentru crearea meniului derulant.
Codul sursa utilizat in realizarea aplicatiei, atat din punct de vedere HTML cat si din punct de vedere Java reprezinta un model pe baza caruia utilizatorii isi pot crea propriile modele de prezentari. Ca si autor al aplicatiei, incurajez refolosirea codurilor sursa, transformarea sau imbunatatirea lor, mai putin in ceea ce priveste scopuri comerciale. Finaliatea aplicatiei este atingerea unui scop educational, care este desavarsit prin intelegerea si refolosirea codurilor sursa de catre utilizatori ; acest lucru poate fi considerat ca un prim pas in directia cunoasterii activitatii laboratorului de Software.
Avantajul de baza al aplicatiei consta in interactivitatea prezentarii, care aduce un plus de interes in raportul utilizatorului cu sursa de informatie ; miza este pusa pe aspectul grafic, care lasa o impresie vizuala placuta, cat si pe facilitatea de a selecta informatiile dorite, prin structurarea lor pe domenii.
Un alt avantaj reprezinta modalitatea distribuita de prezentare a informatiilor, la care contributia esentiala o aduce facilitatea oferita de Internet. Accesul utilizatorilor de oriunde este facilitat si de versiunile in limba engleza oferite la intreg continutul informational, ceea ce ofera un plus sub aspectul categoriilor de utilizatori.
Fara indoiala, ca orice aplicatie ce tine de realitate, ea are si dezavantaje. Aspectul esential in ceea ce priveste dezavantajul aplicatiei consta in imposibilitatea utilizatorilor de a comunica in mod direct cu colectivul, de a contribui la activitatea laboratorului cu propriile creatii, etc. Pentru implementarea unor asemenea facilitati, ar fi fost nevoie de utilizarea programarii de tip CGI, a carei complexitate depaseste obiectivele fixate acestei aplicatii.
6. Anexe
Codul sursa al paginii principale, index.html :
<HTML LANG=ro>
<HEAD>
<TITLE>Software laboratory</TITLE>
<LINK REV="made" href="mailto:[anonimizat]">
<META NAME="keywords" CONTENT="HTML, Java, applet, computers, programming, computer medical applications, image map">
<META NAME="description" CONTENT="Activity of the Software laboratory, in the Technical University of Cluj-Napoca, Romania">
<META NAME="author" CONTENT="Seidner Robert">
<META NAME="ROBOTS" CONTENT="ALL">
</HEAD>
<BODY bgcolor=green TEXT="#ffffff" LINK="#e7e76b" VLINK="#808000" ALINK="#ff0000">
<center>
<applet code="PopUpMenu.class" codebase="." width=700 height=390>
<param name="mapimage" value="images/image4.gif">
<param name="author" value="Seidner Robert">
<param name="copyright" value="[anonimizat]">
<param name="ink" value="#80ffff">
<param name="paper" value="#006060">
<param name="border" value="2,#e7e76b">
<param name="highlight" value="#ffff00">
<param name="font" value="helvetica,plain,14">
<param name="mark" value="false">
<param name="align" value="left">
<param name="style" value="3d">
<param name="area#1" value="4,rect,268,126,336,226">
<param name="item#1-1" value="Programarea calculatoarelor-anul I CO si ENG (semestrul I)">
<param name="item#1-2" value="Programarea calculatoarelor-anul I CO si ENG (semestrul II)">
<param name="item#1-3" value="Software in telecomunicatii-anul IV CO">
<param name="item#1-4" value="Ingineria programarii in telecomunicatii-anul VI TM in CO">
<param name="url#1-1" value="cursuri1co1.html">
<param name="url#1-2" value="cursuri1co2.html">
<param name="url#1-3" value="cursuri4co.html">
<param name="url#1-4" value="cursuri6.html">
<param name="area#2" value="2,rect,442,126,532,226">
<param name="item#2-1" value="Recunoasterea formelor prin analiza de imagini si aplicatiile ei">
<param name="item#2-2" value="Introducere in aplicatii programate">
<param name="url#2-1" value="patternro.html">
<param name="url#2-2" value="progapplicro.html">
<param name="area#3" value="1,rect,538,126,616,226">
<param name="item#3-1" value="Universitatea Tehnica Cluj-Napoca">
<param name="area#4" value="1,rect,86,226,178,370">
<param name="item#4-1" value="Our page in English">
<param name="url#4-1" value="engpage.html">
<param name="area#5" value="3,rect,184,226,272,370">
<param name="item#5-1" value="Analiza medicala inteligenta folosind echipamente multimedia">
<param name="item#5-2" value="Procesarea locala si distribuita a imaginilor si aplicatiilor multimedia">
<param name="item#5-3" value="Metode avansate de instruire a studentilor din domeniul electronicii si telecomunicatiilor">
<param name="url#5-1" value="file1.html">
<param name="url#5-2" value="file1.html">
<param name="url#5-3" value="file1.html">
<param name="area#6" value="1,rect,278,266,378,370">
<param name="item#6-1" value="E-mail">
<param name="url#6-1" value="mailto:adresa">
<param name="area#7" value="1,rect,384,266,472,370">
<param name="item#7-1" value="Lucrari de diploma 2000/2001">
<param name="url#7-1" value="diplome.html">
<param name="target#3" value="NewWindow">
<param name="url#3-1" value="http://www.utcluj.ro/">
</applet>
</center>
</body>
</html>
Codul sursa al modelului paginilor componente, care contin informatia :
<HTML>
<HEAD>
<TITLE>Cursuri</TITLE>
<link type="text/css" rel="stylesheet" href="style.css" >
</HEAD>
<BODY >
<center>
<table>
<tr align="center">
CONTINUTUL DISCIPLINEI DE PROGRAMAREA
CALCULATOARELOR – anul I CO si ENG
<tr align="left"><td>Semestrul 1</td>
<td><a href="index.html"><img aling="right" src="images/khome.gif"></a>
</td></tr></table>
</center>
<table border=1 cellspacing=10>
<tr align="center"><th bgcolor=teal>Titlul cursului</th><th bgcolor=olive>Tematica abordata</th></tr>
<tr align="left"><td><B>Introducere in programarea calculatoarelor</B></td><td><EM> Algoritmi, program, limbaje de programare (LP)</EM></td></tr>
<tr align="left"><td><B>Clasificarea si evolutia LP</B></td><td> <EM>Principiile programarii.</EM></td></tr>
<tr align="left"><td><B>Arhitectura calculatoarelor</B></td><td> <EM>Fundamente privind reprezentarea datelor in calculator. Tipuri de date si instructiuni.</EM></td></tr>
<tr align="left"><td><B>Introducere privind programarea in C/C++</B></td><td><EM> Structura unui program si a unei aplicatii C/C++. Tipuri de date definite in C, constante, variabile</EM>.</td></tr>
<tr align="left"><td><B>Tipuri agreate</B></td><td> <EM>Tablouri, structuri. Functii: apel, prototip, definire. Preprocesarea in C.</EM></td></tr>
<tr align="left"><td><B>Intrari iesiri in limbajul C/C++</B></td><td><EM> Formatele printf, scanf. Intrari iesiri de tip stream, cin, cout.</EM></td></tr>
<tr align="left"><td><B>Elemente de baza ale limbajului C</B></td><td><EM> Operatorii limbajului C. Structuri de control si instructiuni in C.</EM></td></tr>
<tr align="left"><td><B>Clase de memorie</B></td><td><EM> Variabile globale si locale. Clase de memorie si functii. Initializarea variabilelor si a tablourilor.</EM></td></tr>
<tr align="left"><td><B>Introducere privind Pointerii in C</B></td><td><EM> Pointeri: operatori, apel prin adresa cu pointeri si referinte</EM></td></tr>
<tr align="left"><td><B>Operatii cu pointeri</B></td><td> </td></tr>
<tr align="left"><td><B>Alte considerente privitor la pointeri</B></td><td><EM> Tablouri si pointeri, pointeri spre functii. Transfer de argumente catre functia main.</EM></td></tr>
<tr align="left"><td><B>Alocarea dinamica: in C si in C/C++</B></td><td> </td></tr>
<tr align="left"><td><B>Tipuri de date utilizator</B></td><td><EM> Structuri de date si pointeri. Reuniuni, cimpuri de biti. Typedef, enum,date recursive.</EM></td></tr>
<tr align="left"><td><B>Recursivitatea</B></td><td><EM> Recursivitatea in matematica si in programare</EM></td></tr>
</table>
</body>
</html>
Codul sursa Java, al appletului PopUpMenu:
// Applet java care controleaza o harta de imagini, realizand un
//meniu derulant cu optiuni de tip hiperlegatura
//Importarea claselor existente:
import java.applet.*;
import java.awt.*;
import java.net.URL;
import java.util.StringTokenizer;
//Definirea clasei primare PopUpMenu:
public class PopUpMenu extends Applet
{
public String getAppletInfo()
{
return "Menu created by Seidner Robert,[anonimizat]";
}
//clasa primara contine metodele init() si run()
//metoda init() este rulata cand mediul de executie incarca appletul,
//inainte de executarea lui
//aceasta metoda creaza obiectele necesare appletului;este o metoda
//publica, poate fi apelatade alte obiecte si nu returneaza nici o valoare
public void init()
{
size = size();
center = new Point(size.width / 2, size.height / 2);
//mecanismul de tratare a exceptiilor de tip try-catch
try
{
String s = getParameter("mapimage");
if(s != null)
{
mapImage = getImage(new URL(getDocumentBase(), s));
prepareImage(mapImage, this);
}
}
catch(Exception _ex) { }
String s1;
if((s1 = getParameter("paper")) != null)
bgColor = parseColor(s1);
bgDarker = bgColor.darker();
bgDarker = bgDarker.darker();
bgBrighter = bgColor.brighter();
bgBrighter = bgBrighter.brighter();
if((s1 = getParameter("ink")) != null)
fgColor = parseColor(s1);
darkerFgColor = fgColor.darker();
darkerFgColor = darkerFgColor.darker();
if((s1 = getParameter("highlight")) != null)
hlColor = parseColor(s1);
hlFlag = true;
if((s1 = getParameter("mark")) != null && s1.equalsIgnoreCase("false"))
hlFlag = false;
try
{
s1 = getParameter("border");
if(s1 != null)
{
StringTokenizer stringtokenizer = new StringTokenizer(s1, ",");
int j;
if((j = Integer.parseInt(stringtokenizer.nextToken())) > 0)
bdSize = j;
bdColor = parseColor(stringtokenizer.nextToken());
}
}
catch(Exception _ex) { }
while((s1 = getParameter("area#" + (areas + 1))) != null)
areas++;
area = new Area[areas];
if((s1 = getParameter("target")) != null)
target = s1;
for(int i = 0; i < areas; i++)
{
String s2 = getParameter("area#" + (i + 1));
getShape(i, s2);
area[i].targetFrame = target;
area[i].defaultUrl = getParameter("url#" + (i + 1));
area[i].defaultStatus = getParameter("status#" + (i + 1));
s2 = getParameter("target#" + (i + 1));
if(s2 != null)
area[i].targetFrame = s2;
area[i].alignment = 1;
if((s2 = getParameter("align")) != null)
if(s2.equalsIgnoreCase("right"))
area[i].alignment = 2;
else
if(s2.equalsIgnoreCase("center"))
area[i].alignment = 0;
area[i].style = 0;
if((s2 = getParameter("style")) != null)
if(s2.equalsIgnoreCase("rect"))
area[i].style = 1;
else
if(s2.equalsIgnoreCase("round"))
area[i].style = 2;
for(int l = 0; l < area[i].items; l++)
{
if(area[i].defaultUrl != null)
area[i].url[l] = area[i].defaultUrl;
if(area[i].defaultStatus != null)
area[i].status[l] = area[i].defaultStatus;
}
}
for(int k = 0; k < areas; k++)
{
for(int i1 = 0; i1 < area[k].items; i1++)
{
String s4;
if((s4 = getParameter("item#" + (k + 1) + "-" + (i1 + 1))) != null)
area[k].item[i1] = s4;
if((s4 = getParameter("url#" + (k + 1) + "-" + (i1 + 1))) != null)
area[k].url[i1] = s4;
if((s4 = getParameter("status#" + (k + 1) + "-" + (i1 + 1))) != null)
area[k].status[i1] = s4;
}
}
try
{
String s3 = getParameter("font");
StringTokenizer stringtokenizer1 = new StringTokenizer(s3, ",");
String s5 = stringtokenizer1.nextToken();
if(s5.equalsIgnoreCase("Courier"))
fontName = "Courier";
else
if(s5.equalsIgnoreCase("Dialog"))
fontName = "Dialog";
else
if(s5.equalsIgnoreCase("Helvetica"))
fontName = "Helvetica";
else
if(s5.equalsIgnoreCase("Symbol"))
fontName = "Symbol";
else
if(s5.equalsIgnoreCase("TimesRoman"))
fontName = "TimesRoman";
else
fontName = s5;
s5 = stringtokenizer1.nextToken();
if(s5.equalsIgnoreCase("plain"))
fontStyle = 0;
else
if(s5.equalsIgnoreCase("bold"))
fontStyle = 1;
else
if(s5.equalsIgnoreCase("italic"))
fontStyle = 2;
else
if(s5.equalsIgnoreCase("boldItalic"))
fontStyle = 3;
else
fontStyle = 0;
s5 = stringtokenizer1.nextToken();
int k1;
if((k1 = Integer.parseInt(s5)) > 0)
fontSize = k1;
else
fontSize = 11;
}
catch(Exception _ex) { }
Graphics g = getGraphics();
font = g.getFont();
g.setFont(font = new Font(fontName, fontStyle, fontSize));
FontMetrics fontmetrics = g.getFontMetrics();
fontAdvance = fontmetrics.getMaxAdvance();
fontAscent = fontmetrics.getMaxAscent();
fontHeight = fontmetrics.getHeight();
for(int j1 = 0; j1 < areas; j1++)
{
int l1 = 0;
int i2 = 0;
int j2 = 0;
int k2 = 0;
for(int l2 = 0; l2 < area[j1].items; l2++)
{
String s6 = area[j1].item[l2];
int i3 = fontmetrics.stringWidth(s6);
if(i3 > j2)
j2 = i3;
}
Rectangle rectangle = area[j1].getBoundingBox();
j2 += 2 * hrznMargin;
k2 = area[j1].items * fontHeight + 2 * vertMargin;
if(rectangle.x + rectangle.width / 2 < center.x)
{
l1 = (rectangle.x + rectangle.width) – fontAdvance;
if(l1 + j2 > size.width)
l1 = Math.max(0, size.width – j2);
} else
{
l1 = Math.max(0, (rectangle.x + fontAdvance) – j2);
if(l1 + j2 > size.width)
l1 = Math.max(0, size.width – j2);
}
if(rectangle.y + rectangle.height / 2 < center.y)
{
i2 = rectangle.y + rectangle.height / 2;
if(i2 + k2 > size.height – adMargin)
i2 = Math.max(0, size.height – k2 – adMargin);
} else
{
i2 = Math.max(0, (rectangle.y + rectangle.height / 2) – k2);
if(i2 + k2 > size.height – adMargin)
i2 = Math.max(0, size.height – k2 – adMargin);
}
String s7;
if((s7 = getParameter("box#" + (j1 + 1))) != null)
{
StringTokenizer stringtokenizer2 = new StringTokenizer(s7, ",");
String s8 = stringtokenizer2.nextToken();
int j3;
if((j3 = Integer.parseInt(s8)) > 0)
l1 = j3;
s8 = stringtokenizer2.nextToken();
if((j3 = Integer.parseInt(s8)) > 0)
i2 = j3;
}
area[j1].popBox = new Rectangle(l1, i2, j2, k2);
}
}
//metoda ce defineste forma ariei desenate: rectangulara, rotunda sau poligonala
private void getShape(int i, String s)
{
StringTokenizer stringtokenizer = new StringTokenizer(s, ",");
int j = Integer.parseInt(stringtokenizer.nextToken());
String s1 = stringtokenizer.nextToken();
if(s1.equalsIgnoreCase("rect"))
{
int k = Integer.parseInt(stringtokenizer.nextToken());
int i1 = Integer.parseInt(stringtokenizer.nextToken());
int l1 = Integer.parseInt(stringtokenizer.nextToken());
int l2 = Integer.parseInt(stringtokenizer.nextToken());
area[i] = new Area(j, new Rectangle(k, i1, l1 – k, l2 – i1));
}
if(s1.equalsIgnoreCase("circ"))
{
int l = Integer.parseInt(stringtokenizer.nextToken());
int j1 = Integer.parseInt(stringtokenizer.nextToken());
int i2 = Integer.parseInt(stringtokenizer.nextToken());
area[i] = new Area(j, l, j1, i2);
}
if(s1.equalsIgnoreCase("poly"))
{
Polygon polygon = new Polygon();
int k1;
int j2;
for(; stringtokenizer.hasMoreTokens(); polygon.addPoint(k1, j2))
{
k1 = Integer.parseInt(stringtokenizer.nextToken());
j2 = Integer.parseInt(stringtokenizer.nextToken());
}
area[i] = new Area(j, polygon);
}
if((s = getParameter("image#" + (i + 1))) != null)
{
StringTokenizer stringtokenizer1 = new StringTokenizer(s, ",");
String s2 = stringtokenizer1.nextToken();
int k2 = Integer.parseInt(stringtokenizer1.nextToken());
int i3 = Integer.parseInt(stringtokenizer1.nextToken());
try
{
if(s2 != null)
{
area[i].image = getImage(new URL(getDocumentBase(), s2));
prepareImage(area[i].image, this);
}
}
catch(Exception _ex) { }
if(area[i].image != null)
{
area[i].hasImage = true;
area[i].imageX = k2;
area[i].imageY = i3;
}
}
}
//metoda parseColor care returneaza culoarea utilizata
public Color parseColor(String s)
{
StringTokenizer stringtokenizer = new StringTokenizer(s, ",");
if(s.equalsIgnoreCase("white"))
return Color.white;
if(s.equalsIgnoreCase("black"))
return Color.black;
if(s.equalsIgnoreCase("lightGray"))
return Color.lightGray;
if(s.equalsIgnoreCase("gray"))
return Color.gray;
if(s.equalsIgnoreCase("darkGray"))
return Color.darkGray;
if(s.equalsIgnoreCase("red"))
return Color.red;
if(s.equalsIgnoreCase("green"))
return Color.green;
if(s.equalsIgnoreCase("blue"))
return Color.blue;
if(s.equalsIgnoreCase("yellow"))
return Color.yellow;
if(s.equalsIgnoreCase("magenta"))
return Color.magenta;
if(s.equalsIgnoreCase("cyan"))
return Color.cyan;
if(s.equalsIgnoreCase("pink"))
return Color.pink;
if(s.equalsIgnoreCase("orange"))
return Color.orange;
if(s.equalsIgnoreCase("gold"))
return new Color(231, 231, 107);
Color color;
if(stringtokenizer.countTokens() == 3)
{
int i = Integer.parseInt(stringtokenizer.nextToken());
int k = Integer.parseInt(stringtokenizer.nextToken());
int i1 = Integer.parseInt(stringtokenizer.nextToken());
color = new Color(i, k, i1);
} else
{
color = new Color(231, 231, 107);
}
if(s.length() == 7 && s.charAt(0) == '#')
{
int j = Integer.parseInt(s.substring(1, 3), 16);
int l = Integer.parseInt(s.substring(3, 5), 16);
int j1 = Integer.parseInt(s.substring(5, 7), 16);
color = new Color(j, l, j1);
}
return color;
}
//Tratarea evenimentelor legate de miscarea mouse-ului pe ecran
public boolean mouseExit(Event event, int i, int j)
{
mouseX = -1;
mouseY = -1;
activeArea = -1;
getAppletContext().showStatus("");
overAd = false;
repaint();
return true;
}
public boolean mouseDown(Event event, int i, int j)
{
String s = "";
if(activeArea >= 0)
s = area[activeArea].targetFrame;
if(mouseY > size.height – adMargin)
{
URL url;
try
{
url = new URL(getCodeBase(), "http://www.utcluj.ro/");
}
catch(Exception _ex)
{
url = null;
}
if(url != null)
getAppletContext().showDocument(url, "_blank");
}
if(activeArea >= 0)
{
URL url1;
if(activeItem >= 0)
try
{
url1 = new URL(getCodeBase(), area[activeArea].url[activeItem]);
}
catch(Exception _ex)
{
url1 = null;
}
else
try
{
url1 = new URL(getCodeBase(), area[activeArea].defaultUrl);
}
catch(Exception _ex)
{
url1 = null;
}
if(url1 != null)
getAppletContext().showDocument(url1, s);
}
return true;
}
public boolean mouseMove(Event event, int i, int j)
{
boolean flag = false;
mouseX = i;
mouseY = j;
int k = activeArea;
int l = activeItem;
activeArea = -1;
activeItem = -1;
if(mouseY > size.height – adMargin)
overAd = true;
else
overAd = false;
if(k >= 0 && area[k].popBox.inside(i, j))
flag = true;
if(!flag)
{
for(int i1 = areas – 1; i1 >= 0; i1–)
if(area[i1].inside(i, j))
{
area[i1].poped = true;
activeArea = i1;
activeItem = area[i1].overItem(i, j, fontHeight);
} else
{
area[i1].poped = false;
}
}
if(flag)
{
activeArea = k;
activeItem = area[activeArea].overItem(i, j, fontHeight);
}
if(activeArea >= 0)
{
if(activeArea != k || activeItem != l)
if(activeItem == -1)
{
if(area[activeArea].defaultStatus != null)
showStatus(area[activeArea].defaultStatus);
else
if(area[activeArea].defaultUrl != null)
showStatus(area[activeArea].defaultUrl);
} else
if(area[activeArea].status[activeItem] != null)
showStatus(area[activeArea].status[activeItem]);
else
showStatus(area[activeArea].url[activeItem]);
}
repaint();
return true;
}
//metoda care deseneaza obiectele pe ecran
public void paint(Graphics g)
{
update(g);
}
//metoda care realizeaza actualizarea valorilor variabuilelor si
//apoi deseneaza obiectele pe ecran
public void update(Graphics g)
{
if(offGraphics == null || size.width != offDimension.width || size.height != offDimension.height)
{
offDimension = size;
offImage = createImage(size.width, size.height);
offGraphics = offImage.getGraphics();
}
offGraphics.setColor(bgColor);
offGraphics.fillRect(0, 0, size.width, size.height);
if((checkImage(mapImage, this) & 0x20) == 32)
{
offGraphics.drawImage(mapImage, 0, 0, this);
} else
{
offGraphics.setFont(font);
offGraphics.setColor(fgColor);
offGraphics.drawString("Downloading image…Please wait…Thank you!", fontAdvance, fontHeight + fontAscent);
}
if(activeArea >= 0)
{
if(hlFlag)
{
offGraphics.setColor(hlColor);
if(area[activeArea].shape == 1)
{
Rectangle rectangle = area[activeArea].getRect();
offGraphics.drawRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
} else
if(area[activeArea].shape == 2)
{
Rectangle rectangle1 = area[activeArea].getCirc();
offGraphics.drawOval(rectangle1.x, rectangle1.y, rectangle1.width, rectangle1.height);
} else
if(area[activeArea].shape == 3)
{
Polygon polygon = area[activeArea].getPoly();
offGraphics.drawPolygon(polygon);
int j = polygon.npoints – 1;
offGraphics.drawLine(polygon.xpoints[j], polygon.ypoints[j], polygon.xpoints[0], polygon.ypoints[0]);
}
}
if(area[activeArea].hasImage)
offGraphics.drawImage(area[activeArea].image, area[activeArea].imageX, area[activeArea].imageY, this);
if(area[activeArea].items > 0)
{
if(area[activeArea].style == 0)
{
offGraphics.setColor(bgDarker);
offGraphics.fillRect(area[activeArea].popBox.x, area[activeArea].popBox.y, area[activeArea].popBox.width, area[activeArea].popBox.height);
offGraphics.setColor(bgColor);
offGraphics.fillRect(area[activeArea].popBox.x, area[activeArea].popBox.y, area[activeArea].popBox.width – 2, area[activeArea].popBox.height – 2);
offGraphics.setColor(bgBrighter);
offGraphics.drawLine(area[activeArea].popBox.x, area[activeArea].popBox.y, area[activeArea].popBox.x + area[activeArea].popBox.width, area[activeArea].popBox.y);
offGraphics.drawLine(area[activeArea].popBox.x + 1, area[activeArea].popBox.y + 1, (area[activeArea].popBox.x + area[activeArea].popBox.width) – 1, area[activeArea].popBox.y + 1);
offGraphics.drawLine(area[activeArea].popBox.x, area[activeArea].popBox.y, area[activeArea].popBox.x, area[activeArea].popBox.y + area[activeArea].popBox.height);
offGraphics.drawLine(area[activeArea].popBox.x + 1, area[activeArea].popBox.y + 1, area[activeArea].popBox.x + 1, (area[activeArea].popBox.y + area[activeArea].popBox.height) – 1);
} else
if(area[activeArea].style == 1)
{
offGraphics.setColor(bdColor);
offGraphics.fillRect(area[activeArea].popBox.x, area[activeArea].popBox.y, area[activeArea].popBox.width, area[activeArea].popBox.height);
offGraphics.setColor(bgColor);
offGraphics.fillRect(area[activeArea].popBox.x + bdSize, area[activeArea].popBox.y + bdSize, area[activeArea].popBox.width – 2 * bdSize, area[activeArea].popBox.height – 2 * bdSize);
} else
{
offGraphics.setColor(bdColor);
offGraphics.fillRoundRect(area[activeArea].popBox.x, area[activeArea].popBox.y, area[activeArea].popBox.width, area[activeArea].popBox.height, hrznMargin, vertMargin);
offGraphics.setColor(bgColor);
offGraphics.fillRoundRect(area[activeArea].popBox.x + bdSize, area[activeArea].popBox.y + bdSize, area[activeArea].popBox.width – 2 * bdSize, area[activeArea].popBox.height – 2 * bdSize, hrznMargin, vertMargin);
}
offGraphics.setFont(font);
for(int i = 0; i < area[activeArea].items; i++)
{
if(i == activeItem)
{
int k = area[activeArea].popBox.x + bdSize * 2;
int l = area[activeArea].popBox.y + vertMargin + (i – 1) * fontHeight + fontAscent + (fontHeight – fontAscent);
int i1 = area[activeArea].popBox.width – bdSize * 4;
int k1 = fontHeight;
offGraphics.setColor(hlColor);
offGraphics.fillRect(k, l, i1, k1);
offGraphics.setColor(bgColor);
} else
{
offGraphics.setColor(fgColor);
}
FontMetrics fontmetrics = g.getFontMetrics();
String s = area[activeArea].item[i];
int j1 = fontmetrics.stringWidth(s);
int l1 = area[activeArea].popBox.width – j1 – hrznMargin / 2;
if(l1 >= area[activeArea].popBox.width – bdSize * 2 – hrznMargin * 2)
l1 = (area[activeArea].popBox.width – hrznMargin * 2 – bdSize * 2) + 2;
if(area[activeArea].alignment == 0)
offGraphics.drawString(s, area[activeArea].popBox.x + ((hrznMargin / 4 + area[activeArea].popBox.width / 2) – j1 / 2), area[activeArea].popBox.y + vertMargin + i * fontHeight + fontAscent);
else
if(area[activeArea].alignment == 2)
offGraphics.drawString(s, area[activeArea].popBox.x + l1, area[activeArea].popBox.y + vertMargin + i * fontHeight + fontAscent);
else
offGraphics.drawString(s, area[activeArea].popBox.x + hrznMargin, area[activeArea].popBox.y + vertMargin + i * fontHeight + fontAscent);
}
}
//declararea constructorului PopUpMenu pentru initializarea variabilelor
public PopUpMenu()
{
areas = 1;
fgColor = Color.blue;
bgColor = Color.cyan;
bdSize = 3;
bdColor = Color.blue;
hlFlag = true;
invertFlag = true;
overAd = false;
hlColor = Color.red;
fontName = "Helvetica";
fontStyle = 1;
fontSize = 11;
hrznMargin = 10;
vertMargin = 10;
pop = -1;
mouseX = -1;
mouseY = -1;
target = "_self";
activeArea = -1;
activeItem = -1;
}
//declararea variabilelor appletului
Image mapImage;
int areas;
Color fgColor;
Color darkerFgColor;
Color bgDarker;
Color bgBrighter;
Color bgColor;
int bdSize;
Color bdColor;
boolean hlFlag;
boolean invertFlag;
boolean overAd;
Color hlColor;
String fontName;
int fontStyle;
int fontSize;
int hrznMargin;
int vertMargin;
int adMargin;
int pop;
int mouseX;
int mouseY;
String target;
String code;
char c;
Area area[];
int activeArea;
int activeItem;
Font font;
int fontAdvance;
int fontAscent;
int fontHeight;
Point center;
Dimension offDimension;
Dimension size;
Image offImage;
Graphics offGraphics;
}
//definirea clasei Area, care este apelata in appletul PopUpMenu
import java.applet.*;
import java.awt.*;
class Area
{
public Area(int i, Rectangle rectangle)
{
alignment = 1;
poped = false;
style = 0;
hasImage = false;
items = i;
item = new String[i];
url = new String[i];
status = new String[i];
shape = 1;
rect = rectangle;
}
public Area(int i, int j, int k, int l)
{
alignment = 1;
poped = false;
style = 0;
hasImage = false;
items = i;
item = new String[i];
url = new String[i];
status = new String[i];
shape = 2;
x = j;
y = k;
r = l;
}
public Area(int i, Polygon polygon)
{
alignment = 1;
poped = false;
style = 0;
hasImage = false;
items = i;
item = new String[i];
url = new String[i];
status = new String[i];
shape = 3;
poly = polygon;
}
public final Rectangle getRect()
{
if(shape == 1)
return rect;
else
return new Rectangle();
}
public final Rectangle getCirc()
{
if(shape == 2)
return new Rectangle(x – r, y – r, r * 2, r * 2);
else
return new Rectangle();
}
public final Polygon getPoly()
{
if(shape == 3)
return poly;
else
return new Polygon();
}
public final Rectangle getBoundingBox()
{
Rectangle rectangle = new Rectangle();
if(shape == 1)
rectangle = rect;
if(shape == 2)
rectangle = new Rectangle(x – r, y – r, 2 * r, 2 * r);
if(shape == 3)
rectangle = poly.getBoundingBox();
return rectangle;
}
public final boolean inside(int i, int j)
{
if(poped && popBox.inside(i, j))
return true;
if(shape == 1)
return rect.inside(i, j);
if(shape == 2)
{
int k = x – i;
int l = y – j;
double d = Math.sqrt(k * k + l * l);
if(d <= (double)r)
return true;
}
if(shape == 3)
return poly.inside(i, j);
else
return false;
}
public final int overItem(int i, int j, int k)
{
int l = -1;
if(poped && popBox.inside(i, j))
{
l = (j – popBox.y – 10) / k;
if(l >= items)
l = items – 1;
}
return l;
}
public static final int RECT = 1;
public static final int CIRC = 2;
public static final int POLY = 3;
public static final int THREED = 0;
public static final int CENTER = 0;
public static final int LEFT = 1;
public static final int RIGHT = 2;
public int shape;
public int items;
public int alignment;
boolean poped;
private Rectangle rect;
private int x;
private int y;
private int r;
private Polygon poly;
public int width;
public int height;
public int style;
public Rectangle popBox;
public String item[];
public String url[];
public String status[];
public String defaultUrl;
public String defaultStatus;
public String targetFrame;
public Image image;
public int imageX;
public int imageY;
public boolean hasImage;
}
5. Bbliografie
1. David Ragget : Elemente avansate de programare in limbaj HTML, disponibil on-line la adresa : www.w3.org
2. Peter Norton, William Stanek : Ghid de programare in Java, Editura Teora, 1999
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Utilizarea Programarii Html Si Java In Managementul Educational (ID: 149225)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
