Selectarea rândurilor individuale

De cele mai multe ori, în practică, este necesar să se aloce câteva linii, schimbându-se fundalul sau culoarea fonturilor. De exemplu, în contabilitate, liniile cu o valoare mai mică decât zero sunt de obicei selectate. Să presupunem că programul dvs. arată clienții, iar o coloană conține soldul acestora din contul companiei dvs. Dacă acest echilibru este mai mic decât 0, atunci clientul se află în arierate la firma dvs. Contabilul va fi foarte confortabil dacă debitorii (debitorii) vor fi evidențiate în lista generală în roșu.







Procesul de vectorizare a datelor din grila DBGrid depinde de valorile proprietăților sale DefaultDrawing. Implicit, proprietatea este True, adică datele sunt extrase automat. În cazul în care proprietatea conține False, desenul va trebui să codifica propriile lor proprietăți în OnDrawColumnCell sau OnDrawDataCell, care au fost deja menționate în acest capitol.

Dacă am scris o proprietate desen algoritm, dar DefaultDrawing conține Adevărat, prima grila este umplut cu date automat si apoi algoritmul nostru este executat. Cu alte cuvinte, desenarea unor părți ale grilei se va face de două ori. Nu e bine pentru performanța programului, dar trebuie să o facem așa: noi nu sunt toate rândurile și coloanele vor afișa un mod diferit, dar numai unii. Restul va fi completat cu date prestabilite.

Să analizăm mai detaliat această metodă. Dacă îl găsiți în ajutorul Delphi, veți vedea:

proprietate OnDrawColumnCell: TDrawColumnCellEvent;

Adică, această metodă are tipul TDrawColumnCellEvent. Descrierea tipului este:

tip TDrawColumnCellEvent = procedură (Expeditor: TObject; const Rect: TRect; DataCol: Integer; Coloană: TColumn; Stat: TGridDrawState) a obiectului;

Să ne uităm la parametrii. Rect - coordonatele desenului.

DataCol este numărul de serie al coloanei curente (începând cu 0). Coloana - datele din coloana curentă. Stare - starea celulei. Poate fi:

• gdSelected - celula este evidențiată

• gdFocused - focalizare de intrare în celulă

• gdFixed - celula - antetul coloanei.

De exemplu, în exemplul nostru, este necesar ca liniile cu personalul responsabil pentru serviciul militar să fie evidențiate cu roșu:

Selectarea rândurilor individuale

Fig. 12.7. Selectarea rândurilor

Observăm imediat că prezența coloanelor goale creează probleme suplimentare dar solvabile. Codul evenimentului OnDrawColumnCell va trebui modificat, acesta va fi:

procedura TfMain.DBGrid1DrawColumnCell (expeditor: TObject; const Rect: TRect;







DataCol: Integer; Coloană: TColumn; Stat: TGridDrawState); var

cu DBGridl.Canvas începe

// Are câmpul "garantat" conțin adevărul?

în cazul în care (ADOTable1 [ 'BoeHHOo6H3aHHbra']) = true și nu (gdSelected în stat), apoi începe // obține toate liniile de celule albe pe roșu: Font.Color: = clRed; FillRect (Rect); se încheie; // dacă

// dacă este o coloană de colaționare goală dacă Column.Index = 0 începe apoi

dacă ADOTable1 ['First Name'] <> Null atunci

s: = ADOTable1 ['Prenume'] + ''; dacă ADOTable1 ['Name'] <> Null atunci

// dacă este o coloană goală cu butonul else dacă Column.Index = 6 începe apoi

DBGrid1.DefaultDrawColumnCell (Rect, DataCol, Coloană, Stat); Exit;

// toate celelalte coloane

TextOut (Rect.Left + 2, Rect.Top + 2, Column.Field.Text); se încheie; // cu sfârșit;

Ne vom ocupa de cod. În primul rând, folosind cu, specificăm că vom lucra direct cu proprietatea DBGrid1.Canvas, care este responsabilă pentru stilul de desenare a celulei. Apoi, ne uităm dacă True se află în câmpul "War-bound" al înregistrării curente. Dacă da, indicați că culoarea fontului trebuie să fie roșie, iar apoi prin funcția FillRect (Rect) ștergem ieșirea standard.

Apoi, vom determina dacă în acest moment este desenată coloana prefabricată goală cu "Prenume IO". Dacă aceasta este, atunci vom forma variabila s cu datele necesare și vom scoate, ca și în ultima oară.

Dacă aceasta este o coloană goală cu un buton ".", Vom face o ieșire standard și vom ieși din procedură. Dacă nu facem acest lucru, avem o eroare de program. Toate celelalte coloane pe care le imprimam cu un șir

TextOut (Rect.Left + 2, Rect.Top + 2, Column.Field.Text);

Observați că am adăugat doi pixeli la coordonatele din partea stângă și superioară a celulei. Dacă acest lucru nu este făcut, atunci noul desen nu va picta complet pe cel vechi:

Fig. 12.8. Tragere incorectă

Numărul de pixeli pe care îl adăugați depinde de formatul și dimensiunea fontului. De obicei, acest lucru este determinat prin eșantionare. De exemplu, o celulă poate conține numere care sunt de obicei presate la marginea dreaptă și apoi doi pixeli nu pot fi eliberați.

Puteți verifica un tip de date, de exemplu, astfel:

// în cazul în care textul, muta doar 2 pixeli dacă Column.Field.DataType = ftString apoi

TextOut (Rect.Left, Rect.Top + 2, Column.Field.Text) // daca cifrele, noi le trecem la dreapta de 28 de pixeli else TextOut (Rect.Left + 28, Rect.Top + 2, Column.Field.Text) ;

Evidențiarea liniei cu text roșu poate să nu fie suficientă pentru client. Dacă se cere ca aceste linii să fie evidențiate într-o linie roșie cu un font alb? Apoi, în loc de

Font.Color: = clRed; FillRect (Rect);

trebuie să scrie

// tipăriți toate celulele liniei cu text alb pe fundal roșu: Brush.Color: = clRed; Font.Color: = ClWhite; FillRect (Rect);

După cum puteți vedea, subproperitatea

DBGridl.Canvas.Brush.Color este responsabil pentru culoarea umplerii celulei și

DBGridl.Canvas.Font.Color pentru culoarea fontului pe care îl afișează. Puteți deschide lista culorilor disponibile în orice proprietate Color a oricărei componente. Acum puteți crea o rețea cu elemente de desen complexe.

Curs 13. DBChart. Grafice și diagrame.

Pentru componentele diagrame utilizate Graficului filele suplimentare și DBChart cu date Controale paletă componente tab. Acest lucru este echivalent cu componentele, diferența constă în faptul că DBChart primește date din setul de date specificat - un tabel sau o interogare, precum și utilizarea datelor din diagramă trebuie să le facă.

Acestea sunt componente destul de complexe, au multe proprietăți, care la rândul lor sunt obiecte complexe. Dacă descriem în detaliu componentele grafice și diagrame, obținem o carte mică, așa că vom lua în considerare doar tehnicile de bază pentru a lucra cu ele.

Programarea bazelor de date în Delphi







Articole similare

Trimiteți-le prietenilor: