AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken OnDrawColumnCell - EINE Zelle färben, abhängig vom Wert einer anderen Zelle

OnDrawColumnCell - EINE Zelle färben, abhängig vom Wert einer anderen Zelle

Ein Thema von itsafranky · begonnen am 26. Okt 2017 · letzter Beitrag vom 27. Okt 2017
Antwort Antwort
itsafranky

Registriert seit: 9. Mai 2013
2 Beiträge
 
#1

OnDrawColumnCell - EINE Zelle färben, abhängig vom Wert einer anderen Zelle

  Alt 26. Okt 2017, 23:59
Datenbank: absoluteDB • Version: 7 • Zugriff über: Delphi?
Moin !

Da will ich mich mal ein erstes Mal versuchen...
(Hoffe ich mach nicht gleich alles falsch !

Ich möchte über OnDrawColumnCell eines dbGrids in der
Zeile X die Zelle in der Spalte Y in Abhängikeit des
Zellenwertes wegen mir in der Spalte Y+2 ändern (z.b. farbe, egal):

Spalte1........Spalte2...Spalte3

x1)rot/grün...(x2)......(x3)Wahr/Falsch.... Zeile x

Also ist x3 wahr wird x1 rot, ist x3 falsch wird x1 grün.

Das würde mir schon reichen.

Ich kann nur immer in einer Spalte "spielen".....

OK, also wäre nett wenn ihr eine Idee habt.

P.S.: Sollte ein diebezüglicher Beitrag bereits existieren
bitte nicht schimpfen, sondern bitte kurz vermuten warum ich
den nicht gefunden habe.

also thanks frank
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: OnDrawColumnCell - EINE Zelle färben, abhängig vom Wert einer anderen Zelle

  Alt 27. Okt 2017, 00:30
Suchst Du sowas? (Nur Fragmente als Idee)
Delphi-Quellcode:
procedure SetKategorieColor(iID : Integer; Field : TField; frmDBG : TfrmDGB);
begin
       if (Field.AsString = csDublette) then frmDBG.SetCellColor(clPurple,clWhite)
  else if (Field.AsString = csFormatUnbekannt) then frmDBG.SetCellColor(clRed,clYellow)
  else if (Field.AsString = csFrame) then frmDBG.SetCellColor(clBlue,clWhite)
  else
...
  else if (Copy(Field.AsString,1,4) = 'HTTP') then frmDBG.SetCellColor(clRed,clWhite)
  else if (Copy(Field.AsString,1,6) = 'Socket') then frmDBG.SetCellColor(clRed,clWhite)
  ;
  if (frmDBG.dbg.Tag = iID) then begin
    frmDBG.dbg.Canvas.Font.Style := [fsBold];
    frmDBG.SwapColor;
  end else begin
    frmDBG.dbg.Canvas.Font.Style := [];
  end;
end;

procedure TfrmDGB.SwapColor; // Cellfarbe und Schriftfarbe vertauschen.
var
      clTemp : TColor;
begin
  clTemp := dbg.Canvas.Brush.Color;
  dbg.Canvas.Brush.Color := dbg.Canvas.Font.Color;
  dbg.Canvas.Font.Color := clTemp;
end;

procedure TfrmDGB.SetCellColor(clBrush : TColor; clFont : TColor);
begin
  dbg.Canvas.Brush.Color := clBrush;
  dbg.Canvas.Font.Color := clFont;
end;

procedure TfmMain.frmDBGImageUrlsdbgDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  sName : String;
begin
  sName := AnsiUpperCase(Column.FieldName);
  if sName = 'KATEGORIEthen begin // Für dieses Feld wollen wir 'ne Sonderbehandlung.
    SetKategorieColor(fImgUrlID.AsInteger,Column.Field,frmDBGImageUrls);
  end else begin
    if (frmDBGImageUrls.dbg.Tag = fImgUrlID.AsInteger) then begin // Abfragen, ob' der aktuelle Satz ist.
      frmDBGImageUrls.dbg.Canvas.Font.Style := [fsBold];
      frmDBGImageUrls.dbg.Canvas.Font.Color := clBlack;
    end else begin
      frmDBGImageUrls.dbg.Canvas.Font.Style := [];
    end;
  end;
  // Der Aufruf von DefaultDrawColumnCell am Ende ist wichtig, sonst klappt es nicht.
  frmDBGImageUrls.dbg.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  inherited;
end;
Hier gibt es ein Formular (TfmMain) mit u. a. dem Frame (TfrmDGB), auf welchem ein tJVDBGrid (dbg) liegt.

Dem DBGrid wird im Ereignis OnDrawColumnCell die Methode frmDBGImageUrlsdbgDrawColumnCell zugewiesen.

Eventuell kanmnst Du Dir hieraus was passendes zusammensuchen.

Prinzipiell kann man im Ereignis zu OnDrawColumnCell an den Spaltennamen zu der aktuell gezeichneten Zelle kommen und davon abhängig die Inhalte der anderen Spalten zum gleichen Datensatz abfragen und darauf "farblich" reagieren.

Man muss bei der Verarbeitung im Ereignis immer von der Zelle ausgehen, die gezeichnet wird. Man kann nicht von einer Zelle aus eine andere farblich umgestaltenn, sondern nur für die gerade zu zeichnende Zelle auf die Werte der anderen Spalten zum Datensatz reagieren.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
977 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: OnDrawColumnCell - EINE Zelle färben, abhängig vom Wert einer anderen Zelle

  Alt 27. Okt 2017, 07:00
Je nach Grid, kann man das anders machen, aber für VCL.TDBGrid:

In OnDrawColumncell prüfst du, ob du in der Zelle bist, die du anders dargestellt haben möchtest.
Du hast auf die Werte der anderen Zellen Zugriff, bzw auf die Feldwerte:
http://docwiki.embarcadero.com/Libra...mDBGrid.Fields

Dein Grid bewegt sich synchron zur Datenmenge und umgekehrt, dh die Zeile eines Grids entspricht der aktuellen Zeile der Datenmenge dh du kannst direkt in der Datenmenge deinen Wert holen und darauf reagieren.

Ähnliche Frage:
https://stackoverflow.com/questions/...index/37853296

Genügt das zum Weitermachen?
  Mit Zitat antworten Zitat
itsafranky

Registriert seit: 9. Mai 2013
2 Beiträge
 
#4

AW: OnDrawColumnCell - EINE Zelle färben, abhängig vom Wert einer anderen Zelle

  Alt 27. Okt 2017, 10:38
moin !

vielen dank, alles gut !
entscheidend für mich idi.... war der hinweis:

"Man muss bei der Verarbeitung im Ereignis immer von der Zelle ausgehen, die gezeichnet wird. Man kann nicht von einer Zelle aus eine andere farblich umgestaltenn, sondern nur für die gerade zu zeichnende Zelle auf die Werte der anderen Spalten zum Datensatz reagieren."

habe es exact umgekehrt probiert....

netten tag frank
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf