Avatar billede gorlist Nybegynder
30. januar 2002 - 10:58 Der er 20 kommentarer og
2 løsninger

Farve én celle i Stringgrid?

Er det muligt at ændre farven på en enkelt celle i et stringgrid?
Avatar billede martinlind Nybegynder
30. januar 2002 - 11:04 #1
Ja, med ownerdraw
Avatar billede gorlist Nybegynder
30. januar 2002 - 11:06 #2
Eksempel udbedes

F.eks. stringgrid1.cells[x,y].ownerdraw:= clred eller hvordan?
Avatar billede martinlind Nybegynder
30. januar 2002 - 11:10 #3
The following code uses the bitmaps in an image list component to draw the contents of each cell in a draw grid.  It draws a focus rectangle around the cell that has focus.

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState);

var
  index: integer;
begin
  index := Row * DrawGrid1.ColCount + Col;
  with Sender as TDrawGrid do
  begin
    Canvas.Brush.Color := clBackGround;
    Canvas.FillRect(Rect);
    ImageList1.Draw(Canvas,Rect.Left,Rect.Top,index);
    if gdFocused in State then
      Canvas.DrawFocusRect(Rect);
  end;

end;
Avatar billede nca Juniormester
30. januar 2002 - 11:14 #4
Put et kald til denne procedure i OnDrawCell eventen

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  OrgColor:TColor;
begin
  if ARow = 2 then
    if ACol = 2 then
      begin
        OrgColor := StringGrid1.Canvas.Brush.Color;
        StringGrid1.Canvas.Brush.Color := clRed;
        StringGrid1.Canvas.Rectangle(Rect);
        StringGrid1.Canvas.Brush.Color := OrgColor;
      end;
end;
Avatar billede gorlist Nybegynder
30. januar 2002 - 11:15 #5
Hvad er et drawgrid? Jeg bruger et stringgrid - er det en nedarvning eller hvordan?
Avatar billede gorlist Nybegynder
30. januar 2002 - 11:23 #6
martinlind>> Hvad er imagelist1 i dit eksempel??
Avatar billede gorlist Nybegynder
30. januar 2002 - 11:26 #7
nca>> I linje StringGrid1.Canvas.Rectangle(Rect); brokker compileren sig over at 'incompatible types: Integer and TRect'
Avatar billede martinlind Nybegynder
30. januar 2002 - 11:27 #8
En ImageList comp. med billeder i, mit eks. er fra online hjælpen
Avatar billede gorlist Nybegynder
30. januar 2002 - 11:39 #9
Martinlind>> Den imagelist1, hvad skal den udskiftes med?

Jeg har jo ikke en imagelist - proceduren skal farve celle x,y.
Avatar billede martinlind Nybegynder
30. januar 2002 - 11:42 #10
Du skal bare fjerne linen og sætte

Canvas.Brush.Color := clRed;

Vil gi' en rød celle
Avatar billede gorlist Nybegynder
30. januar 2002 - 11:50 #11
martinlind>> Hvornår er det lige præcis at procedure StringGrid1DrawCell bliver kaldt? Jeg kan ikke få det til at virke...
Avatar billede martinlind Nybegynder
30. januar 2002 - 11:53 #12
Hver gang den skal tegne en celle
Avatar billede nca Juniormester
30. januar 2002 - 11:55 #13
Det forstår jeg ikke.
Gå ind i DrawCell eventen for din StringGrid og kopier min procedure ind i den nylavede procedure.
Fjern de 2 første linjer (procedure-hovedet) fra min procedure.
Fjern Begin fra min procedure og så kør dit program.
Avatar billede gorlist Nybegynder
30. januar 2002 - 11:57 #14
Jeg har mit stringgrid1 og når jeg klikker på en celle skal den blive rød.
Avatar billede gorlist Nybegynder
30. januar 2002 - 12:03 #15
Nu har jeg kopieret din procedure ind, rettet navne til stringgrid1 og byttet imagelist1.draw-linjen ud med canvas.brust.color:=clred;

Nu farver den hele stringgrid1 rød. Hvordan specificerer jeg at det kun er én celle der skal farves rød og først når jeg trykker på den?
Avatar billede gorlist Nybegynder
30. januar 2002 - 12:06 #16
Min procedure ser således ud:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  index: integer;
begin
  index := ARow * Stringgrid1.ColCount + ACol;
  with Sender as TStringgrid do
  begin
    Canvas.Brush.Color := clred;
    Canvas.FillRect(Rect);
    Canvas.Brush.Color := clRed;
    if gdFocused in State then
      Canvas.DrawFocusRect(Rect);
  end;
end;

Men det passer da ikke rigtig nogen steder af jeg først sætter farven til clred og herefter til clred igen?
Avatar billede gorlist Nybegynder
30. januar 2002 - 12:07 #17
Desuden bruger jeg hverken index eller definerer Rect.
Avatar billede hreiff Nybegynder
30. januar 2002 - 12:19 #18
Lidt opfølgning på martinlind's svar:
Hvis du ændrer procedure TForm1.StringGrid1DrawCell til:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;
  Rect: TRect; State: TGridDrawState);
var
  index: integer;
begin
  index := Row * StringGrid1.ColCount + Col;
  with Sender as TStringGrid do
  begin
    if gdFocused in State then
    begin
      Canvas.Brush.Color := clRed;
      Canvas.FillRect(Rect);
      Canvas.Brush.Color := clBackGround;
      Canvas.DrawFocusRect(Rect);
    end;
  end;
end;

Bliver cellen i fokus rød.

//hreiff
Avatar billede gorlist Nybegynder
30. januar 2002 - 12:27 #19
Jeg forstår stadig ikke hvad jeg skal bruge index til.
Det virker dog!
Hvordan får jeg den til at bibeholde den røde farve i cellen?
Avatar billede nca Juniormester
30. januar 2002 - 12:34 #20
>>hreiff
En anden gang bør du nok beskrive dit problem lidt mere udførlig. Som du kan se, er der en del, du ikke har oplyst om, da du stillede spørgsmålet.
Avatar billede nca Juniormester
30. januar 2002 - 12:35 #21
Undskyld hreiff, kommentaren var til gorlist
Avatar billede gorlist Nybegynder
30. januar 2002 - 13:06 #22
Beklager meget, men jeg troede ikke der ville være meget forskel på at ændre farven i en celle og ændre farven i en celle, så farven blev bibeholdt.
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