AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid Zeile einfärben

Ein Thema von strom · begonnen am 28. Dez 2014 · letzter Beitrag vom 13. Jan 2015
Antwort Antwort
strom

Registriert seit: 23. Aug 2008
Ort: Keine Ergebnisse gefunden
290 Beiträge
 
#1

StringGrid Zeile einfärben

  Alt 28. Dez 2014, 11:08
Hallo,

was ist hier falsch am Code?
leider bekomme ich auch keine Fehlermeldung ?

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
   c : TColor;
begin
   if StringGrid1.Cells[3,Arow]='1then
      c:=clYellow
   else
      if StringGrid1.Cells[3,Arow]='2then
         c:=clFuchsia
      else
         if StringGrid1.Cells[3,Arow]='3then
            c:=clRed;
   if gdSelected in State then
      c:=clred;
   StringGrid1.Canvas.FillRect(Rect);
   StringGrid1.Canvas.Font.Color:=clBlack;
   StringGrid1.Canvas.TextRect(Rect,Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
end;
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: StringGrid Zeile einfärben

  Alt 28. Dez 2014, 11:14
Welchen Wert hat c wenn keine der Bedingungen erfüllt ist? Und wo wird c verwendet?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.285 Beiträge
 
Delphi 12 Athens
 
#3

AW: StringGrid Zeile einfärben

  Alt 28. Dez 2014, 11:16
Leider bekommen wir auch keine Beschreibung was passiert, bzw. was nicht passiert und was eigentlich passieren sollte.

Zitat:
leider bekomme ich auch keine Fehlermeldung ?
Doch, das bekommst du!

Zitat:
was ist hier falsch am Code?
DU hast vergessen auf deinen Compiler zu hören und somit die beiden Fehler nicht beachtet.
  • c ist nicht initialisiert
  • c wird nicht verwendet
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
strom

Registriert seit: 23. Aug 2008
Ort: Keine Ergebnisse gefunden
290 Beiträge
 
#4

AW: StringGrid Zeile einfärben

  Alt 28. Dez 2014, 12:32
Danke für Eure Hilfe

Es geht jetzt!!

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
   if StringGrid1.Cells[3,Arow]='1then begin
    StringGrid1.Canvas.Brush.Color := clYellow;
    StringGrid1.Canvas.Font.Color := clblack;

  end else
      if StringGrid1.Cells[3,Arow]='2then
       StringGrid1.Canvas.Brush.Color := clred;
       StringGrid1.Canvas.Font.Color := clblack;
   if gdSelected in State then
        StringGrid1.Canvas.Brush.Color := clred;
        StringGrid1.Canvas.Font.Color := clblack;
   StringGrid1.Canvas.FillRect(Rect);
   StringGrid1.Canvas.Font.Color:=clBlack;
   StringGrid1.Canvas.TextRect(Rect,Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
end;
Noch eine Zusatzfrage, (siehe Bild) wieso wird die erste Spalte mit eingefärbt? Beim selektieren nicht!
Angehängte Grafiken
Dateityp: png delphiPraxis.png (7,1 KB, 28x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: StringGrid Zeile einfärben

  Alt 28. Dez 2014, 12:42
Weil die festen Spalten niemals den Status gdSelected haben?

Und wenn du den Code richtig formatierst, dann sieht man auch etwas klarer:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell( Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState );
begin
  if StringGrid1.Cells[3, ARow] = '1'
  then
    begin
      StringGrid1.Canvas.Brush.Color := clYellow;
      StringGrid1.Canvas.Font.Color := clblack;

    end
  else if StringGrid1.Cells[3, ARow] = '2'
  then
    StringGrid1.Canvas.Brush.Color := clred;
  StringGrid1.Canvas.Font.Color := clblack;
  if gdSelected in State
  then
    StringGrid1.Canvas.Brush.Color := clred;
  StringGrid1.Canvas.Font.Color := clblack;
  StringGrid1.Canvas.FillRect( Rect );
  StringGrid1.Canvas.Font.Color := clblack;
  StringGrid1.Canvas.TextRect( Rect, Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow] );
end;
Du setzt an drei Stellen immer StringGrid1.Canvas.Font.Color := clblack; . Wozu das?

Das macht exakt das Gleiche:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell( Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState );
begin
  StringGrid1.Canvas.Font.Color := clblack;

  if StringGrid1.Cells[3, ARow] = '1'
  then
    begin
      StringGrid1.Canvas.Brush.Color := clYellow;
    end
  else if StringGrid1.Cells[3, ARow] = '2'
  then
    StringGrid1.Canvas.Brush.Color := clred;
  if gdSelected in State
  then
    StringGrid1.Canvas.Brush.Color := clred;
  StringGrid1.Canvas.FillRect( Rect );
  StringGrid1.Canvas.TextRect( Rect, Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow] );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#6

AW: StringGrid Zeile einfärben

  Alt 28. Dez 2014, 12:57
Oder noch kürzer:

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell( Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState );
begin
  StringGrid1.Canvas.Font.Color := clblack;

  if (gdSelected in State) or (StringGrid1.Cells[3, ARow] = '2') then
    StringGrid1.Canvas.Brush.Color := clRed
  else if StringGrid1.Cells[3, ARow] = '1then
    StringGrid1.Canvas.Brush.Color := clYellow;

  StringGrid1.Canvas.FillRect( Rect );
  StringGrid1.Canvas.TextRect( Rect, Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow] );
end;
  Mit Zitat antworten Zitat
strom

Registriert seit: 23. Aug 2008
Ort: Keine Ergebnisse gefunden
290 Beiträge
 
#7

AW: StringGrid Zeile einfärben

  Alt 28. Dez 2014, 14:11
Vielen Dank für die erfolgreiche Hilfe hier im Forum!

Wenn ich jetzt noch ein Icon aus einer ImageList hinzufügen möchte,
muss ich was beachten?

Dieses hier funktioniert leider nicht!

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var
  X, Y: Integer;
begin
 StringGrid1.Canvas.Font.Color := clblack;

  if StringGrid1.Cells[3, ARow] = '1'
  then
    begin
      StringGrid1.Canvas.Brush.Color := clYellow;
      ImageList1.Draw(StringGrid1.Canvas, X, Y, 0, true); // Was ist hier falsch?
    end
  else if StringGrid1.Cells[3, ARow] = '2'
  then
    StringGrid1.Canvas.Brush.Color := clgray;
  if gdSelected in State
  then
    StringGrid1.Canvas.Brush.Color := clred;
  StringGrid1.Canvas.FillRect( Rect );
  StringGrid1.Canvas.TextRect( Rect, Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow] );
end;
  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 14:12 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