I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
du skal bruge stringriddens "onDraw" event. I denne (der aktiveres hvergang en celle skal vises) skal du teste på om den celle der er den aktive er den du vil ændre. Hvis det er sætter du grid.canvas.color := clDiTFarveValg; og ellers til den farve cancassen ellers har.
NB! Tænk på at denne event bliver kaldt for hver celle i gridden, og hver gang bare en af cellerne bliver ændret. Det er derfor vigtigt at du huske at teste på at det er den celle du vil ændre, og at du husker at sætte farver til default hvis det ikke er. Fordi det du gør er at ændre hele griddens canvas farve, men du kun gør det mens det er den celle du vil skifte farve på der er aktiv.
Det lyder måske som noget volapyk, men det virker. Desuden findes der en lang række 3-parts komponenter der bl.a. tilbyder farvede (db-)grids.
Hvis du ikke kan finde ud af det så sig til, så kan jeg vise dig et eks. jeg bruger til bl.a. at ændre på overskriftsteksternes formattering og baggrundsfarve.
om den kun bliver kaldt for den celler der bliver ændret vil jeg ikke afvise, selvom jeg mener at det gælder for alle synlige. Det burde selvfølggeligt kun være de celler der skifter udseende der er berørt. Men det kan du jo løse ved at sætte den ønskede celles værdi og du kan jo bare sætte det til den samme værdi som den allerede har.
Nedenstående den ondraw event jeg bruger:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState); const FmtCentered = DT_SINGLELINE or DT_VCENTER or DT_NOCLIP or DT_CENTER; FmtLeft = DT_SINGLELINE or DT_VCENTER or DT_NOCLIP or DT_LEFT; FmtRight = DT_SINGLELINE or DT_VCENTER or DT_NOCLIP or DT_RIGHT; var TempString : array[0..80] of char; acol : integer absolute col; arow : integer absolute row; format : integer; begin with StringGrid1 do begin canvas.font := font; if arow = 0 then begin format := FmtCentered; canvas.font.color := clWindowText; canvas.brush.color := clbtnface; end else begin format := FmtLeft; if state = [gdSelected, gdFocused] then begin canvas.font.color := clHighLightText; canvas.brush.color := clHighLight; end else begin canvas.font.color := clWindowText; canvas.brush.color := clWindow; end; end; canvas.fillrect(rect); rect.right := rect.right -3; rect.left := rect.left +3; strpcopy(@(TempString[0]),stringgrid1.cells[acol,arow]); drawtext(canvas.handle, TempString, -1, rect, format); end; end;
jow tak - det virkede hvis jeg en den case hvor den editerede celle blev opdateret tilskrev den celle jeg ønskede at ændre - og alle celler bliver kun opdateret hvis det er nødvendig - ellers opdateres kun ændrede celler (delphi5)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.