AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Farbe von mit OnDrawcell gefärbter StringGridZelle abfragen
Thema durchsuchen
Ansicht
Themen-Optionen

Farbe von mit OnDrawcell gefärbter StringGridZelle abfragen

Ein Thema von Stecky2000 · begonnen am 5. Nov 2008 · letzter Beitrag vom 7. Nov 2008
Antwort Antwort
Seite 1 von 3  1 23      
Stecky2000

Registriert seit: 7. Mai 2008
Ort: Trebur
66 Beiträge
 
Delphi 2010 Professional
 
#1

Farbe von mit OnDrawcell gefärbter StringGridZelle abfragen

  Alt 5. Nov 2008, 11:43
Ich hoffe, der Tietel sagt schon genug.

Ich habe ine einem StringGrid, mittels OnDrawCell, bestimmte Zellen nach bestimmten Bedingungen mit verschiedenen Farben eingefärbt.

In einem StringGrid von 7x24 zellen sind z. B. 12 versch. Zellne mit clLime, 4 versch. mit clRed und 4 mit clBlue eingefärbt.

Nun habe ich die Inhalte des stringGrids nach Excel exportiert, was auch gut klappt.
Nur möchte ich nun auch die Färbung der Zelle mit senden.

Wie ich die Färbung in Excel erzeuge ist kein Prob, nur muss ich vorher abfragen, welche Zelle im StringGrid eine farbe x besitzt.

Ich habe es so versucht, hatte aber null Erfolg:

 if StringGrid1.Canvas.Brush.Color = clLime then Da fehlt aber die Bestimmung der Zelle.

Damit ging aber gar nichts:

 if StringGrid1Cells[x, y].Canvas.Brush.Color = clLime then Weis jemand einen rat?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Farbe von mit OnDrawcell gefärbter StringGridZelle abfra

  Alt 5. Nov 2008, 12:07
Wie wäre es die gleichen Auswertungscode auch beim Excel-Export zu verwenden?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Farbe von mit OnDrawcell gefärbter StringGridZelle abfra

  Alt 5. Nov 2008, 12:11
Hallo,

wie wäre es wenn du dir die Farbe als Object in der Zelle speicherst?
Dies müsste meines Erachtens möglich sein - kanns momentan aber nicht
testen, weil ich kein Delphi auf dem Firmenrechner habe.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Stecky2000

Registriert seit: 7. Mai 2008
Ort: Trebur
66 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Farbe von mit OnDrawcell gefärbter StringGridZelle abfra

  Alt 5. Nov 2008, 12:26
Sorry, aber ich verstehe nur Bahnhof.

Bin nur ein Hobby-Programmierer und steck da nicht so tief drin.

Also noch mal zur Verdeutlichung:

In eine StringGrid1 mit 7x24, ist für einen Dienstplan mit 7 Tagen und 24 Wochen,

stehen Zahlen drin so z.B. 1,1,1,2,2,0,0, das wären die 7 Zellen in einer Zeile.

Nun hab ich Bedingungen, z.B.
wenn in StringGrid2[Spalte1,Wertx] das Zeichen "x" drin steht, dann zeichne in StringGrid1 die entsprechende Zelle clLime.

Beim export nach excel will ich diese Abfrage nicht machen, sondern gleich sagen,

Delphi-Quellcode:
For i := 1 to 24 do
  For j := 1 to 7 do
     begin
        Excel.Cells[i, j] := StringGrid1.Cells[j, i];
        If StringGrid1.Cells[j, i].Canvas.Brush.Color = clLime then
           Excel.Selection.Interior.ColorIndex := 4;
     end;
So was in der Art. Die Zellen des StringGrid1 müssen mir doch irgendwie Auskunft darüber geben können, ob sie
clLime, clRed, oder clBlue sind?
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#5

Re: Farbe von mit OnDrawcell gefärbter StringGridZelle abfra

  Alt 5. Nov 2008, 13:55
Moin, Moin.
Diese Information ist im StandardGrid nicht verfügbar. Im Post#3 wurde dir ja eine mögliche Lösung vorgeschlagen:

In OnDrawCell() übergibts du die Information, mit welcher Farbe du den Zellhintergrund füllst, an die Objektvariable die für jede Zelle des Grids verfügbar ist: Stringgrid.Objects[aCol,aRow]. Da diese Variable vom Typ TObject ist muss dies über ein Typecasting von TColor nach TObject erfolgen.
Zum Zeitpunkt des Exports nach Excel gehst du den umgekehrten Weg. Der Inhalt der korrespondierenden Objektvariable wird von TObject nach TColor gewandelt.

So müsste es eigentlich funktionieren.
Ralph
  Mit Zitat antworten Zitat
Stecky2000

Registriert seit: 7. Mai 2008
Ort: Trebur
66 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Farbe von mit OnDrawcell gefärbter StringGridZelle abfra

  Alt 5. Nov 2008, 14:50
Hallo TaakTaak,

Danke für die Antwort, aber ich verstehe es nicht.

In meinen OnDrawCell wird wie folgt vorgegeangen:

Delphi-Quellcode:

procedure TDPLForm.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);

begin
  with (Sender as TStringGrid) do
  begin
    // Don't change color for first Column, first row
    if (ACol = 0) or (ARow = 0) then
      Canvas.Brush.Color := clBtnFace
    else
    begin
         if (cells[ACol, ARow] <> '') and (cells[ACol, ARow] <> ' ') then
           if cells[ACol, ARow] = StringGrid3.Cells[0, StrToInt(cells[ACol, ARow])] then
               begin
                    if (StringGrid3.Cells[1, StrToInt(cells[ACol, ARow])] = 'x') or (StringGrid3.Cells[1, StrToInt(cells[ACol, ARow])] = 'X') then
                       begin
                            Canvas.Brush.Color := clLime;
                            Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]);
                            Canvas.FrameRect(Rect);
                       end;
                    if (StringGrid3.Cells[1, StrToInt(cells[ACol, ARow])] = 'd') or (StringGrid3.Cells[1, StrToInt(cells[ACol, ARow])] = 'D') then
                       begin
                            Canvas.Brush.Color := clRed;
                            Canvas.Font.Color := clWhite;
                            Canvas.Font.Style := [fsbold];
                            Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]);
                            Canvas.FrameRect(Rect);
                       end;
                    if (StringGrid3.Cells[1, StrToInt(cells[ACol, ARow])] = 'g') or (StringGrid3.Cells[1, StrToInt(cells[ACol, ARow])] = 'G') then
                       begin
                            Canvas.Brush.Color := clBlue;
                            Canvas.Font.Color := clWhite;
                            Canvas.Font.Style := [fsbold];
                            Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]);
                            Canvas.FrameRect(Rect);
                       end;
                    if (StringGrid3.Cells[2, StrToInt(cells[ACol, ARow])] = '') then
                       begin
                            Canvas.Brush.Color := clBlack;
                            Canvas.Font.Color := clWhite;
                            Canvas.Font.Style := [fsbold];
                            Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]);
                            Canvas.FrameRect(Rect);
                       end;
               end;
    end;
  end;
end;

Ich schreibe die Farbe also nur mit

Canvas.Brush.Color := clLime; rein.

Ich habe darauf hin und nach deiner Antwort folgendes versucht, aber ohne Erfolg:

Color := Integer(StringGrid1.Objects[j, i]); Das geht aber auch nicht, da steht in der Variablen Color immer nur 0 drin;
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#7

Re: Farbe von mit OnDrawcell gefärbter StringGridZelle abfra

  Alt 5. Nov 2008, 15:31
hihihi, genau anders 'rum!

Die Farbe muss ins Objekt! Deine Zuweisung läuft ja genau in die falsche Richtung. So wie es dort steht, musst du es machen, wenn du die Daten exportierst.
Ralph
  Mit Zitat antworten Zitat
Stecky2000

Registriert seit: 7. Mai 2008
Ort: Trebur
66 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Farbe von mit OnDrawcell gefärbter StringGridZelle abfra

  Alt 5. Nov 2008, 16:26
Ich glaube wir reden an einander vorbei.

Ich will doch gerade exportieren.

Dazu will ich doch wissen ob in StrinGrid1 eine Zelle eingefärbt ist, damit ich dann in Excel ebenfalls die Zelle färbe.

Das Abfragen ob die Zelle im StringGrid gefäbt ist wollte ich nun damit machen:

Color := Integer(StringGrid1.Objects[j, i]); Ich habe dazu speziell eine Version von meinem Prg/Dienstplan gemacht, in der gleich in Zeile 1 des StringGrids,
die Spalte 1 grün ist, die Spalte 2 rot ist und die Spalte 3 blau ist.

Wenn nun oben beschriebene Schleifen in Spalte1/Zeile1 läuft zeigt die Variable Color immer 0.

Bitte sage mir, ob ich dich komplett missverstehe und hilf mir bitte auf die Sprünge.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#9

Re: Farbe von mit OnDrawcell gefärbter StringGridZelle abfra

  Alt 5. Nov 2008, 16:48
Ahhh, verstehe,
wir reden aber nur zum Teil aneinander vorbei:

Bevor du die Farbe aus Objects (beim Export) lesen kannst, muss der Wert ja erst einmal dort abgelegt werden. Das muss im OnDrawCell() geschehen. Da sehe ich in deinem Code nix, wo das passiert: Überall dort, wo du den Hintergrund färbst, musst du zusätzlich die verwendete Farbe ins Object speichern, also z.B.
Delphi-Quellcode:
 ...then begin
  Canvas.Brush.Color := clLime;
  Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]);
  Canvas.FrameRect(Rect);
  TStringGrid(Sender).Objects[aCol,aRow]:=Integer(Canvas.Brush.Color) // <<< !!!!!
  end;
// edit: Ich glaub, das "TStringGrid(Sender)." ist überflüssig?!
Ralph
  Mit Zitat antworten Zitat
Stecky2000

Registriert seit: 7. Mai 2008
Ort: Trebur
66 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Farbe von mit OnDrawcell gefärbter StringGridZelle abfra

  Alt 5. Nov 2008, 17:12
Also an dieser Stelle im OnDrawCell erscheint die Farbe im StringGrid in Grün (Hintergrund der zelle):

Canvas.FrameRect(Rect); Bedeutet das, das ich die Zelle zwar färbe aber dne Farbwert nicht in die Zelle schreibe/speichere und ihn deshalb auch nicht wieder auslesenkann?

Ich dachte, wenn die Zelle grün ist, dann ist sie eben grün und weis das auch.

Edit:
Nun hab ich damit

StringGrid1.Objects[aCol,aRow] := Integer(Canvas.Brush.Color); versucht den Wert zu speichern, aber da sagt er immer, "inkompatible Typen TObject und Integer;

Und bei

TStringGrid(Sender).Objects[aCol,aRow] := Integer(Canvas.Brush.Color); das gleiche.
  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 15:37 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