AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TStringGrid.Ondrawcell (Parameter?)
Thema durchsuchen
Ansicht
Themen-Optionen

TStringGrid.Ondrawcell (Parameter?)

Ein Thema von Michael Leyhe · begonnen am 12. Jan 2004 · letzter Beitrag vom 12. Jan 2004
Antwort Antwort
Michael Leyhe

Registriert seit: 1. Dez 2003
Ort: Sprockhövel
101 Beiträge
 
Delphi 7 Enterprise
 
#1

TStringGrid.Ondrawcell (Parameter?)

  Alt 12. Jan 2004, 16:10
Ich habe folgendes Problem:

Ich möchte eine Zelle aus einem StringGrid bunt Färben.
Dazu gibt es den Befehl
Ondrawcell (Sender: Tobject; ACol :integer; ARow :integer; Rect :TRect; State :TGridDrawstate) ich weiss nur nicht was ich bei Sender: Tobject, Rect :TRect und State :TGridDrawstate hinschreiben muss damit es Bunt wird?
Michael
Wer weis vll. ist das Leben ja ein Integer, wenn man negativ genug denkt wird es irgendwann positiv.
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#2

Re: TStringGrid.Ondrawcell (Parameter?)

  Alt 12. Jan 2004, 16:12
Hallo,
so wird z.B. eine bestimmte Zelle eingefärbt:

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  s: String;
begin
  if (ACol = 2) and (ARow = 3) then
  with Sender as TStringGrid do
  begin
    s := Cells[ACol, ARow];
    Canvas.Brush.Color := clRed;
    Canvas.FillRect(Rect);
    DrawText(Canvas.Handle, PChar(s), Length(s), Rect, DT_LEFT);
  end;
end;
Gruß
s14
  Mit Zitat antworten Zitat
Michael Leyhe

Registriert seit: 1. Dez 2003
Ort: Sprockhövel
101 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: TStringGrid.Ondrawcell (Parameter?)

  Alt 12. Jan 2004, 16:32
Danke für deinen Beitrag, allerdings klappt es nach mehrmaligem ausprobieren noch nicht.

Kann mir das mal jemand für dieses Beispiel eine Prozedure schicken:

Feld: TStringGrid;
Button1: TButton;

Wenn ich nun auf den Button klicke soll die Zelle [x,y] Rot gefärbt werden.



Danke an alle die mir helfen!
Michael
Wer weis vll. ist das Leben ja ein Integer, wenn man negativ genug denkt wird es irgendwann positiv.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: TStringGrid.Ondrawcell (Parameter?)

  Alt 12. Jan 2004, 16:51
Procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
Rect: TRect; State: TGridDrawState);
Procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
Rect: TRect; State: TGridDrawState);
Delphi-Quellcode:
Procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
  Rect: TRect; State: TGridDrawState);
Var
  s : String;
Begin
  With Sender As TStringGrid Do
  Begin
    
    If (aCol < FixedCols) Or
      (aRow < FixedRows) Then Exit; //Fixed col / Fixed row => Exit

    If (aCol = CellX) And (aRow = CellY) Then // Wenn zu zeichnende Zelle den Koord. entspricht ...
    Begin
      s := Cells[aCol, aRow];
      Canvas.Brush.Color := clRed;
      Canvas.FillRect(Rect);
      DrawText(Canvas.Handle, PChar(s), Length(s), Rect, DT_LEFT);
    End
    Else
    Begin // Wenn nicht dann in der Farbe des Stringgrid einfärben (altes Rot weg)
      s := Cells[aCol, aRow];
      Canvas.Brush.Color := Color;
      Canvas.FillRect(Rect);
      DrawText(Canvas.Handle, PChar(s), Length(s), Rect, DT_LEFT);
    End;
  End;
End;
CellX & CellY sind private Variablen deines Forms und bekommen beim OnClick des Buttons:

Delphi-Quellcode:
CellX := StringGrid1.Col;
CellY := StringGrid1.Row;
StringGrid1.Repaint;
Da alle Zellen bis auf die "Fixed"-zellen überzeichnet werden kann es bei großen Grids ziemlich aufwending werden!
  Mit Zitat antworten Zitat
Nightshade

Registriert seit: 7. Jan 2003
Ort: Menden
192 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: TStringGrid.Ondrawcell (Parameter?)

  Alt 12. Jan 2004, 17:08
Delphi-Quellcode:
var MyCells : array of array of TColor;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  s: String;
begin
  if MyCells[ACol,ARow] <> 0 then
  with Sender as TStringGrid do
  begin
    s := Cells[ACol, ARow];
    Canvas.Brush.Color := MyCells[ACol,ARow];
    Canvas.FillRect(Rect);
    DrawText(Canvas.Handle, PChar(s), Length(s), Rect, DT_LEFT);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Setlength(MyCells,10,20);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MyCells[Stringgrid1.Selection.Left,Stringgrid1.Selection.Top] := clRed;
end;
Mit SetLength musst du dann das Array an deine Zeilen und Spaltenzahl anpassen
(wenn die sich in Programmverlauft ändern sollten). (Siehe FormCreate)
Christian
Killing for peace is like fucking for virginity

Nightshade
  Mit Zitat antworten Zitat
Michael Leyhe

Registriert seit: 1. Dez 2003
Ort: Sprockhövel
101 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: TStringGrid.Ondrawcell (Parameter?)

  Alt 12. Jan 2004, 19:51
Vielen dank an euch alle die mir geholfen haben. Es funktioniert jetzt alles so wie ich es wollte.
Michael
Wer weis vll. ist das Leben ja ein Integer, wenn man negativ genug denkt wird es irgendwann positiv.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz