Setochki (tstringgrid, tdrawgrid) în delphi, delphi, componentele delphi sursa delphi

Setochki (TStringGrid, TDrawGrid) în Delphi

  • Borderstyle - stilul cadrului. Aici există opțiuni pentru bssingie sau bsNone. Puteți, independent, la rândul lor, să instalați aceste tipuri și să vedeți ce sunt.
  • numărul de coloane - numărul de coloane din rețea. Să lăsăm așa cum este - 5 bucăți.
  • Defauitcoiwidth - lățimea implicită a coloanei.
  • DefauitDrawing - desen în mod implicit. Dacă este setat la adevărat, atunci componenta însăși va afișa datele de intrare. Dacă este False, atunci va trebui să o faceți singur, să reacționați la evenimentele relevante.
  • DefauitcoiHeight - înălțimea implicită a liniei. Valoarea stabilită aici este destul de mare, deci să intrăm în 16. Deci grila va arăta mai elegantă, cel puțin pentru gustul meu.
  • Fixedcoior - culoarea coloanelor și rândurilor fixe. Nu puteți introduce text în celule fixe, ele sunt utilizate ca titluri. În Fig. 11.9 prima coloană și prima linie sunt fixe și, prin urmare, afișate cu culoarea comenzilor (culoarea implicită).
  • Fixedcois este numărul de coloane fixe. Ele sunt întotdeauna prima, nu puteți crea o coloană fixă ​​în mijlocul grila. Deși nu, este probabil doar o chestiune de timp, dar va trebui să scrieți singur codul.
  • FixedRows - numărul de linii fixe. Ele sunt întotdeauna prima, nu puteți crea un rând fix în mijlocul grilajului. Acest lucru se poate face numai de unul singur.
  • GridLinewidth - grosimea liniilor de rețea.
  • Opțiuni - setări rețea. Dacă faceți dublu clic pe butonul stâng al mouse-ului pe această proprietate sau o dată pe pătratul din stânga numelui proprietății, se deschide o listă extinsă de proprietăți suplimentare.

Să luăm în considerare fiecare dintre ele separat:

    • goFixedVertLine - trageți linii verticale în celule fixe;
    • goFixedHorzLine - trage linii orizontale ale rețelei la celule fixe;
    • govertLine - trage linii verticale ale rețelei în celule nefixate;
    • goHorzLine - trage linii orizontale ale rețelei în celule nefixate;
    • goRangeSeiect - permite selectarea mai multor celule;
    • goDrawFocuSeiected - atrage focalizarea celulei selectate;
    • goRowSizing - dacă este posibilă modificarea dimensiunii rândurilor prin tragerea mouse-ului;
    • goCoisizing - dacă este posibil să modificați mărimea coloanelor tragând mouse-ul;
    • goRowMoving - dacă este posibil să se deplaseze linia (dacă este adevărat, atunci puteți da clic pe butonul mouse-ului, plasându-se un pointer la o celulă-linie fixă ​​și trageți într-o nouă poziție);
    • goCoiMoving - dacă este posibil să se deplaseze coloana (dacă este adevărat, atunci puteți da clic pe butonul mouse-ului, plasându-se un pointer la o coloană de celulă fixă ​​și trageți-l într-o nouă poziție);
    • goEditing - dacă este posibil să introduceți date din tastatură în rețea (pentru exemplul nostru, setați la true);
    • goTabs - dacă setați acest lucru la adevărat, puteți călători între celule utilizând cheia <ТаЬ> ;
    • goRowseiect - dacă este falsă, este selectată numai celula selectată (dacă este adevărată, atunci întreaga linie);
    • goAlwaysshowEditor - dacă este falsă, atunci când accesați celula, trebuie să faceți clic pentru ao edita sau . dacă este adevărat, atunci când o celulă este selectată, ea poate fi editată imediat;
    • goThumbTracking - dacă datele vor fi extrase în timp ce utilizatorul va muta bara de defilare.
  • RowCount este numărul de rânduri. Pentru primul exemplu, avem cinci.
  • scrollBars - dacă doriți să afișați barele de derulare.
    • ssNone - nu se afișează;
    • ssBanda orizontală orizontală;
    • ssVertical este doar o bară verticală.

Deci, să scriem primul exemplu. Creați un handler de evenimente Onshow pentru formular și scrieți conținutul listei acolo

procedura TMainForm.FormShow (expeditor: TObject);

Obiectul TStringGrid are o proprietate care nu este descrisă în celulele inspectorului de obiecte. Această proprietate este o matrice bidimensională de rânduri în care datele stocate în grila sunt stocate. Pentru a accesa o celulă, trebuie să scrieți StringGridl.Cells [numărul coloanei, numărul celulei].

ATENȚIE. Numerotarea coloanelor și a liniilor începe de la zero.

De exemplu, dacă doriți să scrieți textul "Hello" în a doua coloană și al patrulea rând, ar trebui să scrieți:

În același mod, puteți citi conținutul celulelor:

dacă StringGridl.Cells [1,3] = 'Buna' atunci face [orice acțiune].

În Fig. 11.10 puteți vedea o fereastră în care un exemplu este afișat într-o stare goală.

Să consolidăm acest exemplu și, în același timp, să ne familiarizăm mai mult cu grila. După cum puteți vedea, în exemplul respectiv există Anul nașterii. În acest câmp, datele trebuie introduse, ceea ce înseamnă că ele trebuie

Setochki (tstringgrid, tdrawgrid) în delphi, delphi, componentele delphi sursa delphi

au un anumit format. Ar fi foarte convenabil, dacă în acest câmp ar fi posibil să setați masca de intrare, dar grila nu suportă acest lucru. Aici puteți utiliza un hitrost- atunci când utilizatorul face clic pe câmpul dorit, substitut TMaskEdit componentă, și lăsați utilizatorul introduce informații în ea într-un format foarte specific.

Să implementăm ceea ce am spus în practică. Pentru a face acest lucru, plasați componenta TMaskEdit pe formular (locația nu contează) și denumiți-o DateEdit. Setați masca pentru a introduce data 99/99/9999. Acum setați proprietatea vizibilă la fals, astfel încât componenta să nu fie vizibilă.

Creați un handler de evenimente onDrawCeii și scrieți conținutul înregistrării în el:

Procedura TMainForm.StringGridlDrawCell (Expeditor: TObj ECT; AcOI, Arow: Integer; Dreptunghi: TRect; Stat: TGridDrawState);

DateEdit.Visible: = false; // Faceți componenta DateEdit invizibilă

dacă (gdFocused în Statul) apoi // Dacă celula curentă este în foc, atunci.

dacă ACol = l apoi // Dacă celula din prima coloană este desenată, atunci.

// Scrieți textul DateEdit.Text în DateEdit: = StringGridl.Cells [ACol, ARow]; // Setați poziția stângă

DateEdit.Left: = Rect.Left + StringGridl.Left + 2; // Setați poziția de sus

DateEdit.Top: = Rect.Top + StringGridl.top + 2; // Setați lățimea

DateEdit.Width: = Rect.Right - Rect.Left; // Setați înălțimea

DateEdit.Height: = Rect.Bottom - Rect.Top; // Faceți componenta DateEdit vizibilă

Acest handler este numit de fiecare dată când trebuie să desenați o celulă. În cazul în care întreaga rețea este desenată, atunci este apelată pentru fiecare celulă separat. Pentru noi Delphi CREAT procedura procedurii de tratare a evenimentului StringGridlDrawCell cu următorii parametri:

expeditor - aici este trimis un pointer către obiectul care a generat evenimentul;

  • arow și acol - numărul rândului și numărul coloanei (coordonatele) celulei care urmează să fie desenată;
  • Rect este o structură în care sunt indicate dimensiunile și pozițiile relative ale celulei.

Ce se înțelege prin cuvântul "rudă"? Structura rectului arată astfel:

tip TRect = înregistrare

Stânga, Sus, Dreapta, Dreapta: Integer; se încheie;

După cum puteți vedea, aceasta este o structură de patru parametri - pozițiile stânga, sus, dreapta și de jos. În Fig. 11.11 săgețile arată dimensiunea care va fi în parametrii Stânga și Dreapta ale structurii Rect. Dimensiunile vor fi specificate în pixeli. Parametrul Drept specifică distanța în pixeli de la marginea din stânga a grilajului

până la marginea din dreapta a celulei și în parametru pozițiile stânga și de sus ale celulei

În partea inferioară este distanța de la partea de sus a grilajului până la marginea de jos a celulei. Adică, avem dimensiuni relative la grila însăși, nu la întreaga formă.

Ei bine, ultimul parametru care ne-a fost transmis în procedura de tratare a evenimentului este starea. Acesta conține informații despre starea celulei, care trebuie extrasă. Statele pot fi:

  • gdseiected - celula este evidențiată;
  • gdFocused - celula are focalizare de intrare;
  • gdFixed - celula este fixată.

Dacă nu există nici una din aceste valori în parametrul de stare, atunci aceasta este o celulă simplă. Parametrul de stare este declarat ca un set de valori. Aceasta înseamnă că poate lua oricare dintre aceste valori sau o combinație a acestora. Pentru a verifica dacă ceva este instalat în stare, trebuie să scrieți:

dacă (valoare în stare), apoi executați acțiunea

Acesta este modul în care valoarea gdFocused este verificată în al doilea rând de cod. Și numai dacă celula care urmează să fie desenată are focalizare, sunt efectuate următoarele acțiuni.

Setochki (tstringgrid, tdrawgrid) în delphi, delphi, componentele delphi sursa delphi
Dar, înainte de aceasta, ne ascundem linia de intrare mascată, deoarece ar putea fi vizibilă într-o altă celulă și, astfel încât să nu existe probleme, este mai bine să o ascundeți.

Dacă celula de desen focalizată, verificăm coloana în care se află celula. Dacă aceasta este prima coloană (unde trebuie să introducem o dată), atunci vom afișa DateEdit în locul celulei desenate. Pentru a face acest lucru, mai întâi atribuiți textul în DateEdit, care ar trebui să fie în această celulă. Apoi setați poziția și dimensiunea componentei DateEdit și apoi afișați-o.

După cum puteți vedea, metoda este foarte simplă și elegantă. Acum trebuie doar să creați un handler de evenimente # 111; schimbarea componentei DateEdit. Acest eveniment apare atunci când datele din linia de intrare s-au schimbat, ceea ce înseamnă că trebuie să le înregistrăm imediat în celula de rețea editată, altfel vor fi pierdute. Acest lucru se datorează faptului că toate datele sunt introduse în DateEdit, nu în grilă și trebuie să le mutăm manual:

procedura TMainForm.DateEdi tChange (Expeditor: TObj ect);

Pentru a consolida și mai mult material în această parte a capitolului, să luăm ultima componentă TSheskvoh aspectul coloană care vă permite să modificați valoarea în celula dintre „căsătorit“ și „Single“. Pentru aceasta, trebuie să instalați componenta CheckBox pe formular și să o faceți invizibilă. Apoi trebuie să schimbați evenimentul onDrawCeii, așa cum se arată în listă:

procedură TMainForm.StringGridlDrawCell (expeditor: TObj ect; ACol,

ARow: Integer; Rect: TRect; Stat: TGridDrawState); începe

dacă (gdFocused in State) începe apoi dacă ACol = l începe atunci

DateEdit.Left: = Rect.Left + StringGridl.Left + 2;

DateEdit.Top: = Rect.Top + StringGridl.top + 2;

DateEdit.Width: = Rect.Right - Rect.Left;

DateEdit.Height: = Rect.Bottom - Rect.Top;

dacă începe ACol = 4

i f CheckBoxl.Caption = 'ao' apoi CheckBoxl.Checked: = true

CheckBoxl.Left: = Rect.Left + StringGridl.Left + 2;

CheckBoxl.Top: = Rect.Top + StringGridl.top + 2;

CheckBoxl.Width: = Rect.Right - Rect.Left;

CheckBoxl.Height: = Rect.Bottom - Rect.Top;

Și, desigur, este necesar să "prindem" evenimentul # 111; clic pe componenta CheckBox1 pentru a scrie valoarea modificată înapoi la grila. În acest handler, scrieți codul listei:

procedura TMainForm.CheckBoxlClick (expeditor: TObject);

dacă CheckBoxl.Checked = adevărat, atunci CheckBoxl.Caption: = 'Altfel căsătorit'