Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hintergrundfarbe einzelner Zellen im Stringgrid ändern. (https://www.delphipraxis.net/122152-hintergrundfarbe-einzelner-zellen-im-stringgrid-aendern.html)

oldmann 10. Okt 2008 09:59


Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo,

wer kann mir erklären wie man wie man in mit der Anweisung 'OnGetCellColor' die Hintergrundfarbe einzelner Zellen im Stringgrid zur Laufzeit ändert.
Wenn es möglich ist, bitte mit Beispiel.

Danke im voraus.
Oldmann

DeddyH 10. Okt 2008 10:10

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo und Willkommen in der DP, oldmann :dp:,

das Ereignis 'OnGetCellColor' kenne ich jetzt nicht, aber Du könntest mal in der DP-Suche nach Hier im Forum suchenOnDrawCell schauen, da gibt es reichlich Beispiele. Bei Fragen einfach fragen ;)

RWarnecke 10. Okt 2008 10:20

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo und willkommen in der DP oldmann,

bei den Schweizern findest Du dieses hier.

taaktaak 10. Okt 2008 10:34

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Moin, Moin.

Auch von mir ein herzliches Willkommen! :hi:

Ein OnGetCellColor() kennt das "normale" TStringGrid nicht. Offenbar arbeitest du mit einer anderen Komponente. Poste doch mal die Parameter, vermutlich werden wir dir dann helfen können.

oldmann 10. Okt 2008 11:07

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo Ralph,

danke für Deine Antwort.
Also zuerst einmal möchte ich sagen was vorhanden ist und was gemacht werden soll.
Ich hab bisher Daten aus einer Datei in einem Stringgrid auf dem Bildschirm ausgegeben.
Als Stringgrid habe ich die Komponente StringAlignGrid von Andreas Hörstemeier benutzt die sehr komfortabel ist und in der man jede einzelne Zelle mit einer beliebigen Farbe belegen kann.
Nun habe ich eine andere Gridkomponente gefunden, die den Vorteil hat das man jede einzelne Spalte durch klick auf die oberste Zeile sortieren kann.
Die Grid-Komponente stammt aus den Pie-Tools, die Adresse ist http://www.pie-tools.de/.
Ich wollte nun mein vorhandenes StringAligngrid von Andreas Hörstemeier auf die Pie-Stringgridkomponente umstellen.
Das klappt auch soweit, doch leider gibt es hier keine Möglichkeit eine einzelne Zelle mit einer Hintergrundfarbe zu belegen (zumindest habe ich keine gefunden).
Den Autor der Pie-Komponente konnte ich nicht erreichen.
Ich muss aber bei einem bestimmten Wert in der Zeile, die erste Zelle der Zeile mit einer anderen Hintegrundfarbe markieren.
Ich hoffe, das mir hier jemand weiterhelfen kann.

Gruss Eberhard (Oldmann)

DeddyH 10. Okt 2008 11:10

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Ich habe dort den Satz entdeckt:
Zitat:

TPieDataGrid jetzt mit neuem Ereignis OnDrawOneCell zur individuellen Darstellung (z.B. Bitmaps) einzelner Zellen.
Wäre das nicht ein Ansatzpunkt?

oldmann 10. Okt 2008 11:40

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo Detlef,

danke für Deinen Hinweis.
Leider kann ich mit dem Ereignis OnDrawOneCell so nichts anfangen.
Soweit reichen leider meine Programmierkenntnisse nicht.
Ein Beispiel konnte ich dazu nicht finden.
Vielleicht kann mir jemand ein funktionelles Beispiel geben.

Gruss Eberhard (Oldmann)

SaFu 10. Okt 2008 11:49

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Tachsche

Guckmal hier hab ich was für dich, dein StringGrid hat ein ereigniss OnDrawCell, da Kopierst du das rein

Die Spaltenzahl erhöst du mal auf 12 und wenn du das gemacht hast, gib mal "ja" in eine Zelle ein, vorher natürlich die Farben setzen.

viel spass damit

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
Var Celltext :string;
    Farbe: boolean;
    StC: TCanvas;
begin
   StC := StringGrid1.Canvas;
   With (Sender As TStringGrid) do
    begin
     
      Textformat := DT_SINGLELINE;
      Celltext := Cells[ACol, ARow];
      Farbe := True;

      //Text wird zentriert
      Textformat := Textformat Or DT_CENTER Or DT_VCENTER;

      if (ACol = 1) Or (ACol = 0) Then {//Zentrieren für spalten 1 und 0}
        begin
          StC.Font.Style := StC.Font.Style + [fsBold]; //Text fett
        end;

      if (ACol > 1) and (ACol < 11)then
       begin
          begin
            if LowerCase(Cells[ACol, ARow]) = 'Ja' then
             begin
               StC.Brush.Color := //Deine Zellenfarbe
               StC.Font.Color := // Deinen Zellen Schriftfarbe
               Canvas.Font.Style := StC.Font.Style + [fsBold]; //Text fett
             end;
         end
       begin
         if (Farbe) then
          begin
           //Zelle einfärben
           SetBkMode(StC.Handle, OPAQUE);
           StC.FillRect(Rect);
          end;

         //Abschliessend den Text zeichnen
         DrawText(StC.Handle, PChar(Celltext), Length(celltext), Rect, Textformat);
       end;
   end;

nahpets 10. Okt 2008 12:13

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo,

das TStringAlignGrid hat in der mir bekannten Version doch dasda:
Delphi-Quellcode:
StringAlignGrid1.ColorCell[0,0] := clWindow;
Damit dürfte die Zuweisung einer Farbe doch sehr einfach sein.
Dazu gibt es noch
Delphi-Quellcode:
StringAlignGrid1.CellFont[0,0].Color := clRed;
für die Schriftfarbe.

Delphi-Quellcode:
property ColorCell[ACol,ARow:longint]: TColor read GetColorCell write SetColorCell;
property ColorCol[ACol:longint]: TColor read GetColorCol write SetColorCol;
property FixColorCol[ACol:longint]: TColor read GetFixColorCol write SetFixColorCol;
property ColorRow[ARow:longint]: TColor read GetColorRow write SetColorRow;
property FixColorRow[ARow:longint]: TColor read GetFixColorRow write SetFixColorRow;
Damit müsste doch fast jede beliebige Einfärbung sämtlicher Zellen möglich sein.

oldmann 10. Okt 2008 12:52

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo,

danke für die Hinweise.
Ich habe das ausprobiert. Die Variable 'Textformat' kannte das Programm nicht.
Ich habe sie vom Typ Word deklariert.
Dann ging es bis zur Zeile:
Canvas.Font.Style := StC.Font.Style + [fsBold]; //Text fett
Hier wird gemeckert:
Inkompatible Typen: TColor und Procedure, untyped Pointer or untyped Parameter.
Was muss ich hier ändern?

Eine weitere Frage ist:
Ich muss ja aus meinem Programmteil in dem ich meine Datei in das Stringgrid einlese beim auftreten eines bestimmten Wertes in die Procedure

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

wechseln um die Cellfarbe zu ändern.
Wie muss ich den Aufruf vornehmen und welche Variablen muss ich übergeben.
Bitte ein Beispiel.
Es tut mir Leid wenn ich Euch, mit solch für Euch sicher simplen Sachen, nerve.

Gruß Eberhard (Oldmann)

DeddyH 10. Okt 2008 12:54

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Der Quelltext oben bezog sich auf das Standard-StringGrid. Außerdem musst Du die Kommentare beachten und die gewünschten Farben ergänzen, die wurden dort ausgelassen.

oldmann 10. Okt 2008 12:55

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo Stefan,

die Änderung der Farben im StringalignGrid ist ja nicht das Problem.
Das klappte bisher.
Aber ich möchte ja zu der PIE-Grid-Komponete wechseln und dort gibt es Probleme mit der Cellfarbe.

Gruss Eberhard (Oldmann)

DeddyH 10. Okt 2008 13:02

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Ich habe mir nun doch mal den Source runtergeladen. OnDrawOneCell ist dort als TPieGridDrawCellEvent deklariert. Dessen Signatur sieht so aus:
Delphi-Quellcode:
TPieGridDrawCellEvent = procedure (Sender: TObject; ACol, ARow: Longint; Rect: TRect; State: TGridDrawState; VAR DrawDefault: Boolean) of object;
Das sieht doch schon einmal sehr vielversprechend aus und gleicht dem OnDrawCell des Standard-StringGrids bis auf den letzten Parameter.

nahpets 10. Okt 2008 13:17

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo Eberhard,
Zitat:

Zitat von oldmann
Hallo Stefan,

die Änderung der Farben im StringalignGrid ist ja nicht das Problem.
Das klappte bisher.
Aber ich möchte ja zu der PIE-Grid-Komponete wechseln und dort gibt es Probleme mit der Cellfarbe.

Gruss Eberhard (Oldmann)

jo, hast recht, habe wohl nur halb gelesen oder verstanden, dachte Du würdest die Komponente wechseln, weil's mit der Farbe beim StringAlignGrid nicht so recht funktioniert.

Gruss Stephan

oldmann 12. Okt 2008 09:05

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo,

ich möchte mich erst einmal bei allen die mir Tipps gegeben haben bedanken.
Ich komme im Moment leider nicht dazu das alle auszuprobieren.
Falls ich später noch Probleme habe werde ich mich noch mal melden.

Gruss Eberhard (Oldmann)

RaSoWa1 12. Okt 2008 12:59

Re: Hintergrundfarbe einzelner Zellen im Stringgrid ändern.
 
Hallo Eberhard (Oldmann),

wenn du die Komponente wechseln möchtest, dann schau dir doch auch mal meine TFiltergrid-Komponente an.
Dort kannst du unter anderem mit dem Ereignis "OnRowColorProc" einzelne Zellen und Zeilen gestalten und auch mit einem Mausklick auf die Spaltenüberschrift diese sortieren.

Gruß Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 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