Avatar billede nih Novice
26. juli 2001 - 06:50 Der er 12 kommentarer og
1 løsning

StringGrid

Hvordan sætter man baggrundsfarven på en enkelt række eller kolonne ?????

Jeg forsøger at lave en kalender, og vil gerne have weekender og helligdage fremhævet.

Jeg er ny i DElphi og håber ikke spørgsmålet er for dumt.

Niels
Avatar billede borrisholt Novice
26. juli 2001 - 07:56 #1
Niels >>

Et StringGrid har et event der hedder OnDrawCell Det sker lige umiddelbart før hver enkelt celle bliver tegner. Du finder det under \"Events\" fanen på din object inspector.
Klik to gange på den. og lad os antage det var række 4 du vil have farvet rød så skriv det følgende kode :

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;  Rect: TRect; State: TGridDrawState);
begin
  if aCol <> 4 then
    exit;

  with StringGrid1.Canvas do
  begin
    Brush.Color := clRed;
    FillRect(Rect);
  end;
end;

(Procedure jheadderen får du fra Delphi)

Jens B http://fotx.net/borrisholt
Avatar billede nih Novice
26. juli 2001 - 10:42 #2
Det fungere fint, MEN kan man ikke gøre det direkte i den løkke der indsætter ugedagene:

procedure TForm1.BitBtn1Click(Sender: TObject);
  var
    i : integer;
begin
  for i := 1 to 7 do  begin
    sgTest.Cells[1,i] := inttostr(i);
    if (i = 6) or (i = 7) then  begin
      //Tegn rækken rød

    end;
  end;

end;

Niels

Avatar billede borrisholt Novice
26. juli 2001 - 10:49 #3
Niels>> Jeg er ikke helt med. I dit tilfælde præcis hvilke Celler skal være røde ...

Jens B
Avatar billede nih Novice
26. juli 2001 - 10:56 #4
De rækker hvor ugedagen er 6 eller 7.

Mit stringGrid indeholder 31 rækker og ovenstående FOR loop indsætter ugedagene efter datoen i måneden.
Nogen måneder er det række 3 og 4, der passer med lørdag/søndag, Andre måneder ligger ugedagene helt anderledes.

Niels
Avatar billede morten_s Nybegynder
26. juli 2001 - 10:57 #5
Lørdag og Søndag *G*
Avatar billede nih Novice
26. juli 2001 - 11:00 #6
Det er jo ikke sikkert at \'i\' i mit loop passer med rækkenumret - øh forstår du det ?????
Avatar billede nih Novice
26. juli 2001 - 11:13 #7
Nu ser proceduren sådan ud:

procedure TForm1.BitBtn1Click(Sender: TObject);
  var
    i : integer;
    x : Trect;
begin
  for i := 1 to 7 do  begin
    sgTest.Cells[1,i] := inttostr(i);
    if (i = 6) or (i = 7) then  begin
      //Tegn rækken rød
      x := sgtest.CellRect(1, i);
      sgTest.Canvas.Brush.Color := clRed;
      sgTest.Canvas.FillRect(x);
    end;
  end;

end;


De skøre celler (1,6) og (1,7) blinker kun rødt, men jeg må da være på rette vej ;o).
Avatar billede borrisholt Novice
26. juli 2001 - 11:19 #8
HVAD MED NOGET ALLA DET HER :

procedure TForm1.sgTestDrawCell(Sender: TObject; ACol, ARow: Integer;  Rect: TRect; State: TGridDrawState);
begin
    if ((ARow = 6) or (ARow = 7)) and (aCOL = 1) then
    begin
      sgTest.Canvas.Brush.Color := clRed;
      sgTest.Canvas.FillRect(Rect);
    end;
end;
Avatar billede nih Novice
26. juli 2001 - 11:26 #9
Ja, jeg kan godt se at jeg ikke har forklaret mig godt nok.
Mit loop er bare en lille stump af en helhed.
Forestil dig at jeg starter i række 5 - så skal det jo være række nr 3 og 4 og 11 og 12 osv der skal fremhæves.

Når jeg kommer hjem fra arbejde, kigge jeg på det igen - hele koden ligger nemlig derhjemme.
Avatar billede borrisholt Novice
26. juli 2001 - 11:33 #10
Niels >>>
  Det der er hele fidusen er at du skal beregne eller hard code hvile celler du vil have farvet ... Det skal du så kode int i onDraw ...

Jens B
Avatar billede nih Novice
26. juli 2001 - 12:10 #11
Jeg skal (for at være sikker) altså løbe alle cellerne igennem igen i onDraw og hvis dagNr = 6 eller 7 farve cellen.

Jeg kigger på det senere idag.

Niels
Avatar billede borrisholt Novice
26. juli 2001 - 12:11 #12
Yepper ...

Avatar billede nih Novice
26. juli 2001 - 13:04 #13
Ja, så har jeg allerede fri :)

Tak for tålmodigheden, nu kan jeg komme en del videre i mit projekt
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