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
Seite 1 von 3  1 23      
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.168 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!
Miniaturansicht angehängter Grafiken
delphipraxis.png  
  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
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: StringGrid Zeile einfärben

  Alt 28. Dez 2014, 14:15
Wie sind denn die Werte von X und Y? Du deklarierst zwar die Variablen, weißt diesen aber keine Werte zu. Somit sind die undefiniert und können irgendwo in einem negativen Bereich liegen. Auch hier hast du die Compiler Meldung nicht beachtet. Der schreibt nämlich genau das hin.

Weise also den beiden Variablen einen Wert zu und schon müsste das funktionieren.

Hier vielleicht noch ein Tipp. Delphi-Referenz durchsuchenMouse.CursorPos, Delphi-Referenz durchsuchenScreenToClient oder Delphi-Referenz durchsuchenClientToScreen könnten hier fürs erste helfen. Du könntest als X und Y Werte die passenden Rect.Top und Rect.Left Werte übernehmen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: StringGrid Zeile einfärben

  Alt 28. Dez 2014, 15:07
// Was ist hier falsch?
Wie sind denn die Werte von X und Y? Du deklarierst zwar die Variablen, weißt diesen aber keine Werte zu. ...
Ich kann mich nur noch einmal wiederholen und hoffen der TE hört endlich mal auf das, was ihm jemand sagt und beachtet es auch.
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
 
#10

AW: StringGrid Zeile einfärben

  Alt 28. Dez 2014, 16:21
hallo,

dieses funktioniert leider auch nicht!

Delphi-Quellcode:
var
  X, Y: Integer;
begin
  if StringGrid1.Cells[3, ARow] = '1'
   then
    begin
      StringGrid1.Canvas.Brush.Color := clYellow;
    X := Rect.Left;
    Y := Rect.Top;
    ImageList1.Draw(StringGrid1.Canvas, X, Y, 0, true); { 0 = erstes Image in ImageList }
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:51 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