„Delphi“: Automatiškai koreguokite „DBGrid“ stulpelio plotį

Suprojektuotas taip, kad vartotojas galėtų peržiūrėti ir redaguoti duomenis lentelių lentelėse, DBGrid pateikia įvairius būdus, kaip tinkinti tai, kaip jis vaizduoja „savo“ duomenis. Turėdamas tiek daug lankstumo, a Delfi kūrėjas visada gali rasti naujų būdų, kaip padaryti jį galingesnį.

Viena iš trūkstamų „TDBGrid“ savybių yra ta, kad nėra galimybės automatiškai koreguoti konkrečių stulpelių plotį, kad jis visiškai atitiktų tinklelio kliento plotį. Kai keičiate „DBGrid“ komponento dydį vykdymo metu, stulpelio pločio dydis nekeičiamas.

Jei DBGrid plotis yra didesnis už bendrą visų stulpelių plotį, iškart po paskutinio stulpelio gausite tuščią sritį. Kita vertus, jei bendras visų stulpelių plotis yra didesnis nei DBGrid plotis, atsiras horizontali slinkties juosta.

Automatiškai sureguliuokite „DBGrid“ stulpelio plotį

Galite atlikti vieną patogią procedūrą, kuri nustato selektyviųjų „DBGrid“ stulpelių plotį, kai tinklelio dydis keičiamas vykdymo metu.

Svarbu atkreipti dėmesį, kad paprastai tik du ar tris DBGrid stulpelius reikia automatiškai pakeisti; visuose kituose stulpeliuose rodomi kai kurie "statinio pločio" duomenys. Pvz., Visada galite nurodyti fiksuotą stulpelių, kuriuose rodomos duomenų laukų vertės, pateiktas naudojant TDateTimeField, TFloatField, TIntegerField ir panašias, plotį.

instagram viewer

Be to, tikriausiai (projektavimo metu) sukursite patvarius lauko komponentus, naudodami laukų redaktorių, kad nurodytumėte duomenų rinkinio laukus, jų savybes ir užsakymą. Turėdamas TField palikuonių objektą, galite naudoti ypatybę Žyma, kad nurodytumėte, jog tam tikras stulpelis, kuriame rodomos to lauko vertės, turi būti automatiškai parinktas.

Tai yra idėja: jei norite, kad stulpelis automatiškai pritaikytų turimą plotą, TField palikuonio savybei „Tag“ priskirkite sveikąjį skaičių, kuris nurodo minimalaus atitinkamo stulpelio plotį.

„FixDBGridColumnsWidth“ procedūra

Prieš pradėdami, „OnCreate“ renginys objekto „Forma“, kuriame yra „DBGrid“, forma nurodykite, kurių stulpelių dydį reikia automatiškai pakeisti, paskirdami atitinkamo TField objekto „Tag“ savybę, kuri nėra lygi nuliui.

procedūra TForm1.FormCreate (Siuntėjas: TObject);
prasideda
// nustatykite automatiškai keičiamus stulpelius priskirdami
// Minimm plotis nuosavybėje Tag.

// naudojant fiksuotą vertę: 40 pikselių
Lentelė1.FieldByName ('FirstName'). Žyma: = 40;
// naudojant kintamąją vertę:
// numatytasis stulpelio pavadinimo tekstas
Lentelė1.FieldByName ('LastName'). Žyma: = 4 + drobė. Teksto plotis (1 lentelė. FieldByName ('LastName'). DisplayName);
galas
;

Aukščiau pateiktame kode1 lentelė yra su „a“ susietas „TT“ komponentas „DataSource“ komponentas, kuris yra susietas su DBGrid. Lentelė1.Lentelės ypatybė nurodo „DBDemos Employee“ lentelę.

Pažymėjome stulpelius, kuriuose rodomos „FirstName“ ir „LastName“ laukų vertės, kad jie būtų automatiškai keičiami. Kitas žingsnis - paskambinkite mūsų „FixDBGridColumnWidth“ „OnResize“ įvykių tvarkytuve, kad gautumėte formą:

procedūra TForm1.FormResize (Siuntėjas: TObject);
prasideda
„FixDBGridColumnsWidth“ (DBGrid1);
galas
;

Pastaba: Visa tai turi prasmę, jei „DBGrid“ savybė „Lygiuoti“ apima vieną iš šių reikšmių: „alTop“, „alBottom“, „alClient“ arba „alCustom“.

Galiausiai, čia yra „FixDBGridColumnsWidth“ procedūros kodas:

procedūra „FixDBGridColumnsWidth“const DBGrid: TDBGrid);
var
i: sveikasis skaičius; „TotWidth“: sveikasis skaičius; VarWidth: sveikasis skaičius; ResizableColumnCount: sveikasis skaičius; „AColumn“: TColumn;
prasideda
// bendras visų stulpelių plotis prieš keičiant dydį
Bendras plotis: = 0;
// kaip padalyti bet kokią papildomą vietą tinklelyje
VarWidth: = 0;
// kiek stulpelių reikia automatiškai pakeisti
ResizableColumnCount: = 0;
dėl i: = 0 į -1 + DBGrid. Stulpeliai. Grafas dobeginas
„TotWidth“: = „TotWidth“ + „DBGrid“. Stulpeliai [i] .Platumas;
jei DBGrid. Stulpeliai [i] .Laikas. 0 žyma tada
Inc („ResizableColumnCount“);
galas;
// stulpelio skyriklio eilutėje pridėkite 1 pxjei „dgColLines“ „DBGrid“. Galimybės tada
„TotWidth“: = „TotWidth“ + „DBGrid“. Stulpeliai. Grafas;
// pridėti indikatoriaus stulpelio plotįjei „dgIndicator“ „DBGrid“. Galimybės tada
„TotWidth“ = = „TotWidth“ + indikatoriaus plotis;
// pločio valas "kairėje"
VarWidth: = DBGrid. „ClientWidth“ - „TotWidth“;
// Vienodai paskirstykite VarWidth
// į visus automatiškai keičiamo dydžio stulpelius
jei ResizableColumnCount> 0 tada
VarWidth: = varWidth div ResizableColumnCount;
dėl i: = 0 į -1 + DBGrid. Stulpeliai. Grafas dobeginas
„ACkolumn“: = DBGrid. Stulpeliai [i];
jei ACkolona. Laukas. 0 žyma tada pradedama
ACkolona. Plotis: = AC stulpelis. Plotis + VarWidth;
jei ACkolona. Plotis tada
ACkolona. Plotis: = AC stulpelis. Laukas. Žyma;
galas;
galas;
galas
; (* „FixDBGridColumnsWidth“)
instagram story viewer