AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign StringGrid erste Zeile fixiert aber JEDE Row-0-Zelle mit anderer Farbe
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid erste Zeile fixiert aber JEDE Row-0-Zelle mit anderer Farbe

Ein Thema von StefanL38 · begonnen am 15. Aug 2021 · letzter Beitrag vom 15. Aug 2021
Antwort Antwort
StefanL38

Registriert seit: 2. Nov 2013
11 Beiträge
 
#1

AW: StringGrid erste Zeile fixiert aber JEDE Row-0-Zelle mit anderer Farbe

  Alt 15. Aug 2021, 12:55
So jetzt habe ich doch eine Lösung gefunden:

Ich habe einen Array
  Spaltenfarbe : Array[0..100] of TColor; definiert. Der Einfachheit halber 100 Elemente = mehr als ich maximal brauche.

Die Farbwerte im Array werden mit clWhite initialisiert
Delphi-Quellcode:
  for i := 0 to 100 do
  begin
    Spaltenfarbe[i] := clWhite;
  end;

Der Eventhandler SelectCell speichert mir die Spalte / Reihe der angeklickten Zelle
Delphi-Quellcode:
procedure TForm1.StringGridVorschauSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);

  begin
  SelectedCellCol := ACol;
  SelectedCellRow := ARow;

  //ShowMessage('Col=' + IntToStr(SelectedCellCol) + ' Row=' + IntToStr(SelectedCellRow) );
end;
Doppelklick ruft den Farbauswahldialog auf

Delphi-Quellcode:
procedure TForm1.StringGridVorschauDblClick(Sender: TObject);
begin
  ColorCellCol := SelectedCellCol;
  ColorCellRow := SelectedCellRow;
  ColorDialog1.Execute;
  Spaltenfarbe[ColorCellCol] := ColorDialog1.Color;
end;
Und weist dem Array-Element die Farbe aus dem Colordialog zu.


Dem Farbauswahldialog habe ich gleich noch einen hinweisgebenden Titel verpasst
Delphi-Quellcode:
procedure TForm1.ColorDialog1Show(Sender: TObject);
begin
  SetWindowText(ColorDialog1.Handle, 'Farbe für Spalte '
  + StringGridVorschau.Cells[SelectedCellCol, 0] + ' setzen' );
end;
Im DrawCell-Eventhandler werden dann die farbigen Rects und mit weiß/schwarz als Kontrastfarbe
der Text geschrieben.
Aber nur dann wenn auch eine Farbe <> weiß gesetzt wurde.

Delphi-Quellcode:
procedure TForm1.StringGridVorschauDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);

begin
  with sender as Tstringgrid do
    if ( (ARow = 0) and (Spaltenfarbe[ACol] <> clWhite) ) then
    begin
      Canvas.brush.Color := Spaltenfarbe[ACol];
      Canvas.Font.Color := BlackWhiteContrastColor(Spaltenfarbe[ACol]);
      canvas.fillRect(Rect);
      canvas.TextOut(Rect.Left,Rect.Top,Cells[ACol,ARow]);
    end;
end;
Die Schriftfarbe schwarz/weiß wird von dieser function ermittelt
Delphi-Quellcode:
function BlackWhiteContrastColor(value: TColor):TColor;
var
  intensity : Integer;
begin
  value := ColorToRGB(value);

  intensity := GetBValue(value) * 21 // Blue
    + GetGValue(value) * 174 // Green
    + GetRValue(value) * 61; // Red

   // intensity = 0 -> dark
   // intensity = 255*256 -> bright

  if intensity >= (128*256) then
    Result := clBlack
  else
    Result := clWhite;
end;
viele Grüße Stefan
  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:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz