Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica


Informatica


Qdidactic » stiinta & tehnica » informatica
Obiecte tip form



Obiecte tip form


OBIECTE TIP FORM

Definitie si clasificare


Formularele sunt machete (ferestre) folosite in scopul adaugarii, modificarii, stergerii sau consultarii datelor in/din tabelele BD. In acest scop, un formular va contine o suita de elemente vizuale (obiecte grafice) numite controale.

Actualizarea tabelelor folosind formulare prezinta urmatoarele avantaje:

Interfata prietenoasa - realizata prin intermediul diferitelor controale (butoane, casete text, etc.) sau alte elemente grafice;

Posibilitatea definirii unor reguli de validare suplimentare celor definite la nivelul tabelelor (in special, restrictiile impuse de necesitatea corelarii datelor din tabele diferite: Data fact >=Data contract).

Posibilitatea actualizarii mai multor tabele printr-un singur formular, operatie realizabila prin intermediul subformularelor.




Clasificarea formularelor se poate face in functie de urmatoarele criterii:


Dupa sursa de date:

Formulare legate (bound) - sunt formulare care permit afisarea sau actualizarea datelor din tabele;

Formulare nelegate (unbound) - sunt formulare destinate afisarii sau editarii unor date care nu sunt stocate in tabele. Ele sunt folosite frecvent pentru afisarea unor mesaje, vizualizarea unor informatii despre sistem, preluarea datelor necesare afisarii unui raport, etc.


In functie de  modul de afisare, sunt disponibile urmatoarele tipuri de formulare:

Single form afiseaza doar inregistrarea curenta;

Continuous form permite vizualizarea mai multor inregistrari;

Datasheet form afiseaza datele sub forma de linii si coloane, la fel ca o foaie de calcul tabelar;

Chart form afiseaza datele sub forma grafica.





Dupa modul de interactiune cu alte ferestre:

Formulare modale - nu permit accesarea obiectelor continute in alte ferestre pana cand nu sunt inchise (close) sau ascunse (hide). Se mai numesc si formulare de dialog;

Formulare nemodale - permit utilizatorului sa activeze si alte ferestre.



Obiectele de tip formular sunt grupate in categoria Forms a ferestrei Database. Cele trei butoane disponibile executa urmatoarele operatii:

New creeaza un formular nou;

Design deschide un formular existent pentru a fi modificat;

Open lanseaza in executie formularul selectat.






Crearea si modificarea formularelor


Pentru realizarea acestei operatii, munca proiectantului poate fi usurata fie prin generarea automata a unor tipuri de formulare predefinite, fie prin asistarea lui de catre o serie de asistenti (wizards).

Etapele necesare crearii unui formular sunt urmatoarele:

Se actioneaza butonul New din fereastra Database, categoria Forms, pentru activarea asistentului New Form ;


LISTA 2

 

LISTA 1

 


Din lista 1, se va selecta varianta dorita pentru crearea formularului:

Design View - operatia de proiectare a formularului nu va fi asistata de Access;

Form Wizard - utilizatorul va fi indrumat pas cu pas in crearea formularului;

AutoForm: Columnar - Access va genera automat un formular de tip single form;

AutoForm: Tabular - Access va genera automat un formular de tip continuous form;

AutoForm: Datasheet - Access va genera automat un formular de tip datasheet;

Chart Wizard - utilizatorul va fi asistat in crearea unui formular ce va afisa datele sub forma de grafic;

Pivot Table Wizard - noul formular va ingloba o tabela pivot generata prin aplicatia Excel.

Din lista 2, se va alege tabela sau interogarea ce va deveni sursa de date a formularului. Selectarea sursei de date este obligatorie pentru formularele generate automat si pentru cele grafice (variantele AutoForm si Chart Wizard).


In practica, se foloseste foarte frecvent urmatoarea metoda: intr-o prima faza formularele sunt generate prin Form Wizard sau AutoForm, dupa care sunt deschise in mod Design pentru a fi modificate,, astfel incat sa corespunda cat mai bine cerintelor utilizatorului final.

Proiectarea formularelor prin varianta Form Wizard presupune urmatoarele etape (sursa de date este o tabela):

In primul ecran Form Wizard  se selecteaza campurile din sursa de date ce vor fi afisate in formular:











Din urmatorul ecran se alege tipul de formular:


Apoi se alege stilul dorit pentru formular:




In ultima etapa se defineste titlul formularului, precum si modul in care va fi deschis formularul (pentru executie sau pentru modificare):



Varianta Design View este mai putin folosita pentru crearea formularelor. Selectarea acestei optiuni din fereastra New Form are ca efect generarea unui formular gol, in care utilizatorul isi poate defini propriile controale. Campurile sursei de date pot fi selectate spre afisare din lista butonului Field List (sau optiunea din meniul View) si "depuse" in interiorul formularului (de obicei in sectiunea Detail).













Structura formularelor:


Bara de titlu contine: meniul sistem (permite operatii ca minimizare, maximizare, inchidere, mutare, etc.), titlul formularului si butoanele de minimizare, restaurare, inchidere;

Bordura (chenarul) va delimita formularul pe ecran;

Bara de defilare verticala si orizontala;

Sectiunea de antet (Form Header) este folosita pentru a afisa titlul formularului sau alte informatii privitoare la folosirea acestuia. Aceasta zona nu este vizibila in modul Datasheet. Daca formularul este afisat in modul Continuous Form (vor fi vizibile mai multe inregistrari), continutul zonei de antet nu va fi derulat. Pentru ca acesta zona sa fie disponibila in timpul proiectarii, se selecteaza optiunea FormHeader/Footer din meniul View;

Antetul de pagina (Page Header) este o zona ce apare numai cand formularul este tiparit la imprimanta. Pentru a fi disponibila in cursul proiectarii, se selecteaza optiunea PageHeader/Footer din meniul View;

Sectiunea de detaliu (Detail) va contine toate controalele necesare afisarii/editarii inregistrarilor. In timpul executiei formularului, aceasta zona poate contine un control numit selector de inregistrare (record selector) situat in partea stanga, control ce afiseaza starea inregistrarii curente (inregistrare in curs de editare, inregistrare noua, inregistrare blocata, etc.) sau poate fi folosit la selectarea inregistrarii curente in vederea stergerii sau copierii acesteia;


Subsolul de pagina (Page Footer) poate contine data curenta, numarul paginii, etc., si este afisat numai la tiparirea formularului;

Subsolul formularului (Form Footer) are un comportament asemanator cu zona de antet si poate contine diferite informatii ca, de pilda, totalul general sau diverse controale;

Butoane de navigare sunt afisate numai in timpul executiei formularului si pot fi folosite pentru deplasari in cadrul inregistrarilor;



















Proprietatile obiectelor Forms


Formularele, ca orice obiect Access, se caracterizeaza prin metode si proprietati. Cu ajutorul metodelor se actioneaza asupra starii unui obiect, iar proprietatile indica starea acestuia.

Proprietatile formularelor sunt disponibile la executie, prin intermediul obiectelor de tip macro sau prin intermediul limbajului VBA. Metodele pot fi accesate (atat la proiectare, cat si in cursul executiei) numai prin actiuni macro sau din cadrul unor proceduri/functii VBA.

Pentru ca fereastra Properties sa afiseza proprietatile formularului, acesta trebuie in prealabil selectat (prin optiunea Select Form din meniul Edit sau printr-un click pe caseta de selectie a formularului sau pe zona din afara acestuia.

Setarea unei proprietati se poate face fie prin tastarea valorii respective, fie prin selectarea valorii dintr-o lista derulanta, fie cu ajutorul asistentului, care poate fi invocat prin apasarea butonului Build Wizard (atunci cand acesta este disponibil).









In cadrul ferestrei Properties , proprietatile formularului curent sunt impartite in patru categorii:


Format contine proprietati privitoare la dimensiune, aspect, coordonatele de afisare ale formularului, etc.;

Data grupeaza proprietati referitoare la sursa de date si inregistrarile aferente;

Event grupeaza evenimentele ce pot fi tratate fie prin proceduri sau functii VBA, fie prin macro-uri. Proprietatile acestei categorii se numesc proprietati eveniment si au denumiri asemanatoare ce cele ale evenimentelor carora le sunt atasate;

Other contine diverse alte proprietati.


Cele mai uzuale proprietati sunt:

din categoria Format:

Caption contine titlul formularului ce apare in bara de titlu a acestuia;

Default View specifica modul implicit de afisare, folosit la executia formularului (Single Form, Continuous Form, Datasheet);

View Allowed reprezinta modurile de afisare ce sunt disponibile in timpul executiei;

Scroll Bars seteaza barele de defilare vizibile in cursul executiei (orizontala, verticala, amandoua sau niciuna);

Record Selectors afizeaza sau nu selectorul de inregistrare in timpul executiei formularului;

Navigation Buttons specifica daca formularul va contine butoanele de navigare in timpul executiei;

Dividing Lines precizezaza daca se afiseaza linii pentru delimitarea sectiunilor formularului sau a inregistrarilor la executie;

Auto Center pe Yes, formularul va fi afisat pe centrul ecranului;

Border Style specifica tipul bordurii (va avea efect si asupra comportamentului formularului);

None fara bordura (formularul nu va putea fi redimensionat);

Thin bordura subtire (formularul nu va putea fi redimensionat);

Sizable - bordura implicita (formularul poate fi redimensionat);

Dialog - un formular de tip Dialog Box.

Control Box indica prezenta meniului sistem in bara de titlu;

Min Max Buttons dezactiveaza sau activeaza fie ambele, fie unul dintre butoanele de minimizare si maximizare din bara de titlu;

din categoria Data:

Record Source contine sursa de date a formularului (tabel sau interogare);

Filter contine criteriul de selectie care se va aplica inregistrarilor din formular (expresie Access);

Order By permite specificarea campurilor dupa care vor fi sortate inregistrarile din formular;

Data Entry pe Yes, formularul va putea fi folosit numai pentru adaugarea de inregistrari;

Records Locks specifica daca si ce inregistrari vor fi blocate pentru alti utilizatori (toate sau cea curenta);

Proprietatile din categoria Events contin denumiri de functii, proceduri eveniment sau macro-uri ce vor fi executate la aparitia evenimentelor respective.  Deci, avem trei posibilitati:

eveniment tratat printr-o functie: =NumeFunctie([ListaParametri])

eveniment tratat printr-o procedura eveniment - proprietatea va contine expresia EventProcedure, iar editarea procedurii se poate face prin actionarea butonului BuildWizard;

eveniment tratat printr-un Macro - proprietatea eveniment va contine numele macro-ului

Din categoria Other:

Pop Up, daca se doreste ca, in cursul executiei sale, formularul sa fie permanent vizibil (se va situa deasupra celorlalte ferestre, chiar daca nu este activ), aceasta proprietate se va seta pe Yes;

Modal specifica daca formularul va fi modal sau nemodal;

Cycle descrie efectul apasarii tastei Tab pe ultimul camp din formular: salt la urmatoarea inregistrare (All records), revenire la primul camp (Current record), revenire la primul camp din pagina curenta (Current Page);

Menu Bar contine numele unui meniu creat de utilizator, ce va fi afisat la lansarea in executie a formularului;

Toolbar indica toolbar-ul propriu ce va fi disponibil in cursul executiei.












Cele mai uzuale evenimente sunt in tabelele de mai jos:







Controale in formulare


Principalele controale disponibile din Toolbox sunt prezentate in tabelul urmator:






Controalele sunt obiecte grafice (elemente vizuale) ce sunt incluse in formulare sau rapoarte, in scopul editarii/afisarii datelor sau executarii unor actiuni (etichete, casete text, butoane, etc.). Adaugarea controalelor se poate face numai in etapa de modificare a formularelor, astfel:

Din meniul Toolbox se selecteaza butonul aferent controlului dorit;

Se descrie, cu ajutorul mouse-lui, o zona dreptunghiulara pe suprafata formularului, definind astfel pozitia si dimensiunea noului control;


Controalele pot fi clasificate in functie de urmatoarele criterii:

Rol:

controale pentru editare si afisarea datelor (casete de text, etichete, etc.);

controale pentru executarea unor actiuni (butoane de comanda)

controale pentru afisarea graficelor (imagini, obiecte cadru).


Sursa de date:

controale legate (bound) sunt controale ce afiseaza sau editeaza datele din campuri;

controale nelegate (unbound) sunt independente de realizarile campurilor, asadar, nu permit actualizarea acestora. In general, din aceasta categorie fac parte controalele calculate (ex.: o caseta de text ce va afisa totalul facturii), dar si controalele care, prin insusi specificul lor, nu pot fi atasate campurilor (ex.: butoanele de comanda, etichetele, cadrele, etc.).


Structura:

Controale elementare (butoane, casete text, etichete, etc.);

Controale containere inglobeaza alte controale (grup de optiuni, control tag, etc.).


In timpul proiectarii, un control poate fi selectat prin efectuarea unui click pe controlul respectiv sau prin selectarea lui din lista Object din meniul Formatting. Selectia multipla se poate realiza prin mentinerea apasata a tastei <Shift>.

Un control selectat poate fi mutat, redimensionat si sters. Pozitionarea unui control selectat se poate face fie folosind combinatiile de taste <Ctrl> + ←,→,↑,↓, fie cu ajutorul mouse-lui. In acest ultim caz, pointer-ul mouse-ului trebuie deplasat pe marginea controlului pana cand va lua forma unei maini, dupa care, folosind tehnica "drag-and-drop", obiectul poate fi mutat dupa voie.

Modificarea dimensiunii unui control selectat poate fi realizata prin folosirea tastei <Shift> in combinatie cu una din tastele sageti, fie cu ajutorul mouse-ului ("tragand" de marginile controlului). Stergerea unui control selectat se face cu ajutorul tastei <Delete> sau prin selectarea optiunii Delete din meniul Edit.


Proprietatile controalelor


Proprietatile unui control sunt afisate in fereastra Properties, atunci cand controlul respectiv este selectat (click pe el). Ca si in cazul formularelor, metodele aferente controalelor sunt disponibile numai prin intermediul macro-urilor sau a modulelor.


Proprietati din categoria Format:


a.     Format-numai pentru casetele text- modelul de afisare al datelor;

b.     Decimal Places-numai pentru casetele text- numarul de zecimale;

c.      Caption- numai pentru controalele needitabile- textul afisat;

d.     Visible- afisarea sau nu in timpul executiei;

e.     Left- coordonata orizontala a coltului stanga-sus;

f.       Top- pozitia pe verticala a coltului stanga-sus;

g.      Width- latimea controlului;

h.     Height- inaltimea controlului;

i.       Back Style- mod de afisare (normal sau transparent);

j.       Back Color- culoarea de fundal;

k.      Special Efect- efectele tridimensionale ale controlului;

l.       Border Style- bordura (transparent, continuu, punctat, etc);

m.   Border Color- culoarea bordurii;

n.     Border With- grosimea bordurii;

o.     Fore Color- culoarea textului;

p.     Font Name- tipul textului;

q.     Font Size- dimensiunea textului;

r.      Picture- numele si calea fisierului grafic ce va fi afisat in interiorul controlului (pentru butoane si controale de tip imagine);

s.      Text Align- alinierea textului in interiorul controlului;





Proprietati din categoria Data:

a.     Control Source- sursa de date : numele unui camp (controale legate) sau o expresie Access de calcul precedata de "=" (controale nelegate);

b.     Input Mask- formatul folosit la introducerea datelor (numai pentru casete text);

c.      Default Value- valoarea implicita;

d.     Validation Rule- regula de validare pentru control; la executia formularului, mai intai se verifica regula de validare a controlului, apoi cea a campului atasat;

e.     Validation Text- mesaj afisat cand regula de validare nu este respectata;

f.       Enabled- activeaza sau dezactiveaza controlul;

g.      Locked- blocarea datelor din control, acesta va deveni read-only;


Proprietati din categoria Event: functii, proceduri eveniment sau macro-uri ce vor fi executate la declansarea evenimentelor atasate, dupa cum veti vedea in tabelele de mai jos:



Proprietati din categoria Other:

a.     Name- numele controlului; la creare fiecare control primeste un nume unic, format din tipul sau plus un numar (ex.: TextBox5); utilizatorul poate modifica acest nume, schimbandu-l cu unul mai sugestiv; controalele legate, generate automat de Wizard, au nume identice cu denumirile campurilor atasate;

b.     Status Bar Text- mesajul afisat in barea de stare, in momentul selectarii controlului;

c.      Tab Stop- pe Yes si controlul poate fi accesat cu Tab;

d.     Tab Index- numarul de ordine al controlului, in functie de care acesta va fi accesat cu ajutorul tastei Tab; toate controalele editabile vor primi un numar de ordine unic, la creare; acest numar poate fi modificat fie prin aceasta proprietate, fie prin optiunea View / TabOrder din meniul Access.



Adaugarea de noi controale


Sa presupunem ca am creat cu ajutorul expertului un formular simplu pentru tabela Agenti din aplicatia Imobiliare (fig.1). Acestuia dorim sa-I adaugam noi controale: butoane de comanda pentru operatii care afecteaza inregistrari - adaugarea unei noi inregistrari, stergerea inregistrarii curente, pozitionarea pe inregistrarea urmatoare).

Plasarea si definirea unui buton de comanda se realizeaza folosind instrumentul Command Button din Toolbox (fig.2). Pentru a putea folosi expertul Access la crearea acestor butoane trebuie sa fie activ (apasat) instrumentul Control Wizard din Toolbox (fig.2). Prin glisare, se vor plasa succesiv butoanele de comanda in cadrul formularului. In fig. 3 se prezinta dialogul pentru crearea butonului de comanda ce are ca functie adaugarea unei noi inregistrari in tabela Agenti, cand utilizatorul actioneaza prin clic asupra lui.

Intr-un mod asemanator sunt create celelalte butoane de comanda. Formularul astfel completat se va utiliza pentru actualizarea datelor din tabela Agenti (fig.4).

Pentru crearea unor controale complexe (casete combinate, casete de tip lista, etc.) folosim tot expertul Access.

De exemplu, dorim ca adaugarea unui proprietar de imobil in formularul Imobil sa se faca prin selectarea acestuia dintr-o lista ce contine toti proprietarii.

Dupa cum am mai precizat, pentru campurile ce indeplinesc rol de cheie externa, este recomandat ca in formulare sa se creeze controale de tip combo box sau list box, deoarece, datorita referintei de integritate, cheile externe nu admit decat valori comune cu cheile primare pe care le refera. Pentru asigurarea acestei restrictii, idel ar fi controlul de tip list box, dar pentru ca acesta necesita, de regula, o zona mai mare in formular, se foloseste in acest scop controlul combo box care are proprietatea Limi To List setata pe valoarea Yes (nu va admite valori care nu exista in lista). Mai jos este prezentata schema de functionare a unei casete combinate (Combo Box). fig.5

O astfel de control, denumit si caseta combinata va afisa valorile campului Nr_Proprietar din tabela Proprietar, iar cu valoarea selectata din lista va actualiza campul Nr_Proprietar din tabela Imobile. Fig.6.

Pentru crearea unei casete combinate, cu ajutorul expertului Access, se parcurg urmatoarele etape:

Se activeaza butonul Control Wizard din Toolbox (daca nu este).

Tot din Toolbox se selecteaza (apasa) butonul Combo Box.

Se plaseaza mouse-ul in zona dorita pe formular si se executa clic.

In primul ecran al expertului (fig.7) se selecteaza prima optiune ( I want the combo box to look up the value in a table or a query)

Cele trei optiuni afisate au urmatoarele semnificatii:

lista va cotine valorile unui camp dintr-o tabela sau interogare;

caseta combinata contine valori prestabilite, definite de utilizator;

salt la inregistrarea din sursa de date a formularului a carei valoare coincide cu cea selectata din lista.

In  urmatorul ecran (fig.8) se specifica tabela sau interogarea ce va furniza date listei de valori a controlului (tabela Proprietari):

Apoi, se vor alege campurile tabelei sursa ce vor fi afisate in lista de valori: fig.9.

In continuarea, se va ajusta dimensiunea fiecarei coloane din lista de valori (prima coloana - cheia- este implicit ascunsa): fig.10.

Se alege campul din sursa de date a formularului ce va fi actualizat cu valoarea selectata din lista (campul atasat controlului - Nr_Proprietar): fig.11.

In ultimul ecran, se specifica eticheta controlului de tip caseta combinata: fig.12.


Observatie: daca din diferite motive, expertul Access nu functioneaza, proiectantul va fi nevoit sa seteze singur proprietatile controlului de tip Combo Box:

Column Widths- dimensiunea fiecarei coloane din lista;

List Widths- latimea totala a listei derulante;

Row Source Type- tipul sursei de date pentru valorile din lista (tabela/interogare, valori definite de utilzator, realizarile unui camp);

Row Source- denumirea tabelei, a interogarii asu chiar fraza SQL ce va furniza date listei de valori;

Bound Column- numarul de ordine al coloanei care va actualiza campul atasat controlului (coloana respectiva poate fi ascunsa);

Limit To ListI- permite sau nu utilizatorului sa introduca valori ce nu exista in lista controlului.



Formulare cu subformulare


Rolul subformularelor este de a actualiza mai multe tabele prin intermediul unei singure ferestre (formular). Subformularele sunt create, in general, pentru anumite tabele dependente (Detail) de altele (Master) din cadrul unei relatii de tip 1: n.

Lucrurile sunt relativ simple: un formular se poate ingloba (include) in cadrul altui formular, primul devenind subformular, iar al doilea formular principal.

Un formular poate sa contina oricate subformulare, dar un subformular poate sa contina, la randul sau, cel mult un alt subformular (sunt admise 3 niveluri de imbricare a formularelor):









Avantajele oferite de utilizarea subformularelor constau in:

Posibilitatea actualizarii mai multor tabele dintr-un singur formular.

Sincronizarea automata a subformularului cu formularul principal, operatie care consta in:

actualizarea automata a campului cheie externa din subformular, cu valoarea detinuta de campul cheie primara din formularul principal;

filtrarea automata a inregistrarilor din subformular, in functie de valoarea cheii primare din formularul principal.


Pentru definirea unui formular cu subformular exista trei posibilitati. Prima presupune urmatoarele etape:

se deschide formularul principal in mod Design

se activeaza fereastra bazei de date;

folosind tehnica drag-and-drop, se "depune" formularul, ce se doreste a fi subformular, in interiorul celui principal;

se salveaza formularul principal.


Se creaza astfel o legatura dinamica (dynamic link) intre cele doua formulare: orice modificare facuta ulterior asupra subformularului, ca obiect de tip formular, se va reflecta in formularul principal, unde obiectul are rol de subformular.

Sincronizarea formular-subformular se realizeaza prin intermediul campurilor de legatura: cheia primara din sursa de date aferenta formularului principal si cheia externa din sursa de date aferenta subformularului. Denumirile acestor campuri sunt inscrise automat de Access in proprietatile Link MasterField si Link Child Field ale controlului de tip subform din formularul principal.

A doua modalitate este introducerea in Form Wizard ca sursa pentru formular de campuri din tabele legate (1 : n). In acest caz va apare un ecran in plus in expert (fig.13), in care se va selecta tabela in functie de care se vor afisar campurile din formular (este bine sa alegem tabela master - cea cu campul de legatura cheie primara) si optiunea Form with subform(s)

A treia modalitate consta in folosirea controlului de tip Subform/Subreport din Toolbox ceea ce va deschide un dialog expert Subform Wizard (fig.14).

Dupa cum s-a vazut, formularele contin controale de mai multe tipuri. Din acest motiv, un formular este considerat drept o colectie de controale. In Access, specificarea unui element dintr-o colectie se face prin expresii de genul:

NumeColectie!NumeElement sau

NumeColectie[index] sau

NumeColectie("NumeElement")

Chiar si formularele deschise la un moment dat apartin colectiei predefinte, denumite Forms. Subformularele, in schimb, sunt controale speciale ale formularelor si, pentru a referi un control al unui subformular, trebuie folosita expresia:

NumeControlSubform.Form!NumeControl unde:

NumeControlSubform - este numele controlului de tip subform;

Form - este o proprietate a subformularului, care contine o referinta spre formularul principal;

NumeControl - este numele controlului din subformular, la care se face referire.


Referirea controalelor din subformulare apare necesara, mai ales, in cazul calculelor subtotalurilor.






Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright