Avatar billede anold Nybegynder
25. august 2000 - 07:32 Der er 7 kommentarer og
1 løsning

Farve på Celle i Stringgrid

Kan det lade sig gøre at farve en celle i et stringgrid f.eks via  StringGrid1.CellsColor[0,1]:= \'Red\';
Avatar billede tknudsen Nybegynder
25. august 2000 - 09:06 #1
ja - men det skal foregå i stringgridets DrawCell event:

SG.Canvas.Brush.Color = clRed;
SG.Canvas.FillRect(Rect);
SG.Canvas.TextOut(Rect.Left+2,Rect.Top+2,SG.Cells[ACol,ARow]);

Avatar billede tknudsen Nybegynder
25. august 2000 - 09:09 #2
og så kan du jo bare spørge i eventen hvilken celle du er i - feks:
var
  cellColor : TColor;
if ACol=0 then
  cellColor := clRed;
...
SG.Canvas.Brush.Color := cellColor;
Avatar billede anold Nybegynder
25. august 2000 - 09:23 #3
Hej TKnudsen
Det lyder til at være en rigtig løsning, MEN
jeg kunne godt tænke mig, hvis du kunne vise
et eks. hvor en celle bliver farvet, men det skal ske under FormCreate eventen.
Avatar billede tknudsen Nybegynder
25. august 2000 - 09:34 #4
Når den form som stringgridet er på bliver created eller opdateret (feks efter minimize-restore) bliver alle visuelle controllers Draw events kaldt. Og for stringgridet gælder det at alle cellerne bliver opdateret. Derfor behøver du ikke lave noget specielt i FormCreate.

eksemplet skulle farve kolonne 0 rød, kolonne 1 grøn, celle 2,2 blå

procedure TForm1.SGOnDrawCell(jeg kan ikke huske hvilke params der bliver overført)
  var
    cellColor : TColor;
begin
  case ACol of
  0 : cellColor := clRed;
  1 : cellColor := clGreen;
  2 : if ARow = 2 then
        cellCOlor := clGreen;
    else
      cellColor := clWhite;
  end;
  SG.Canvas.Brush.Color := cellColor;
  SG.Canvas.FillRect(Rect);
  SG.Canvas.TextOut(Rect.Left+2,Rect.Top+2,SG.Cells[ACol,ARow]);
end;

eksemplet er skrevet uden kompiler - så måske er der et par fejl - feks kan jeg ikke huske om det i en case hedder \'else\' eller \'default\'
Avatar billede tknudsen Nybegynder
25. august 2000 - 09:35 #5
på samme måde kan du med SG.Canvas.Font sætte den ønskede font for netop een celle.

Hvis du vil lave det som oop har jeg et eksempel dertil - skriv.
Avatar billede anold Nybegynder
25. august 2000 - 09:55 #6
Hej TKnudsen


Avatar billede delphi Nybegynder
05. oktober 2000 - 13:23 #7
Tknudsen>> Spørgsmålet gik på hvorledes en ENKELT celle farves.  Du farver alle celler.  Jeg ved godt at der skal en meget lille ændring til, men here goes....

Const
  SpecialCol  = 2;
  SpecialRow  = 3;
  SpecialColor = clRed;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
    cellColor : TColor;
begin
  If (ACol = SpecialCol) And (ARow  = SpecialRow)  Then
    StringGrid1.Canvas.Brush.Color := SpecialColor;

  StringGrid1.Canvas.FillRect(Rect);
  StringGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+2,StringGrid1.Cells[ACol,ARow]);
end;

Delphi
Avatar billede delphi Nybegynder
05. oktober 2000 - 13:23 #8
Ok, det er myreknepperi - sorry, sådan er jeg i dag....
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester