![]() |
StringGrid -> Zelle farblich
Hallo zusammen,
wie kann ich eine bestimmte Zelle farblich machen ? Wenn ich das so mache:
Delphi-Quellcode:
leuchtet die Zelle nur ganz kurz rot auf.
var
Rect: TRect; with StringGrid do begin Canvas.Brush.Color := clred; Rect := StringGrid.CellRect(5,10); Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[5, 10]); end; Gruss Holger |
Re: StringGrid -> Zelle farblich
Du machst da aber schon im OnPaint-Ereignis des StringGrid?
|
Re: StringGrid -> Zelle farblich
Ein OnPaint - Ereignis hat mein StringGrid nicht, nur ein OnDrawCell, nur das möchte ich nicht benutzen, da es ja Zelle abgeht. Ich aber nur bestimmte Zellen ansprechen will.
Gruss Holger |
Re: StringGrid -> Zelle farblich
Meinte auch OnDrawCell...
Wirst du aber verwenden müssen, da sonst das StringGrid jedesmal deine rot gefärbten Zellen übermalt. Glaube, irgendwie man kann prüfen, ob Spalte = 5 und Zeile = 10 ist, dann wird selber gezeichnet, sonst wird der Standard Drawhandler aufgerufen...... evt. mit inherited? |
Re: StringGrid -> Zelle farblich
Beispiel mit OnDrawColumnCell:
Delphi-Quellcode:
stahli
procedure TFormAw.DBGridFaelligeVorgaengeDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var ErledigtFlag:Boolean; begin if (Sender is TDBGrid) then with (Sender as TDBGrid) do begin ErledigtFlag:=False; if Assigned(Column.Field) then begin if (Column.Field.DataSet.FindField('Erledigt')<>nil) then begin ErledigtFlag:=(Column.Field.DataSet.FieldByName('Erledigt').AsBoolean); end; end; if (ErledigtFlag) then begin Canvas.Brush.Color:=clSilver;//$00B3B3FF;//clYellow; Canvas.Pen.Color:=clBlack;//clRed; DefaultDrawColumnCell(Rect,DataCol,Column,State); end else if ((Column.Title.Caption='Termin') or (Column.Title.Caption='AbgelaufenAm')) then begin if Assigned(Column.Field) then begin if (Column.Field is TDateField) then begin if ((Column.Field.AsDateTime>0) and (Column.Field.AsDateTime<Date)) then begin // if ((Fields.FindField('Status')<>nil) and (Column.FieldByName('Status...').AsString<>'...ok')) then begin Canvas.Brush.Color:=$00B3B3FF;//clYellow; Canvas.Pen.Color:=clRed; DefaultDrawColumnCell(Rect,DataCol,Column,State); // end; end; end; end; end; end; end; |
Re: StringGrid -> Zelle farblich
Kann ich auch am Ende den Rest nachzeichnen ?
Soll heissen: Wenn er durchgelaufen ist, also z.B. an Spalte 5 und Zeile 10 angekommen ist, soll er an Spalte 2 und Zeile 3 was nachzeichnen ? Mein Problem ist, wenn ich bei jeder Spalte/Zeile Abfrage ob er da Zeichnen soll dauert das zu lange. Gruss Holger |
Re: StringGrid -> Zelle farblich
wüsste ich nicht...
Außerdem flackert die Darstellung dann. Du kannst aber z.B. eine globale Variable nutzen. In der ersten Zelle definierst Du sie und danach fragst Du sie nur noch ab. stahli |
Re: StringGrid -> Zelle farblich
in der drawcell methode werden dir doch acol und arow mitgeliefert.
wieso fragst du in dieser nicht auf acol = 5 und arow = 10 ab? mfg Jonny |
Re: StringGrid -> Zelle farblich
Hallo Holger,
Jonny hat natürlich recht! Ich habe nicht aufgepasst und dachte, Du nutzt ein DBGrid - Sorry! :oops: (Für DBGrid stimmt, aber was ich geschrieben habe :zwinker: ) Stahli |
Re: StringGrid -> Zelle farblich
Hi,
ich habe nur einen kleinen Teil hier nachgefragt. Im Endeffekt habe ich 12 Zeilen und 31 Spalten. Ich müsste also bei ACol = 1 und ARow = 1 die Datenbank abfragen, dann ACol = 2 und ARow = 1 u.s.w. Das würde zu lange dauern. Lese jetzt die Datenbank vorher aus und schreibe die Daten in eine Globale Variable. Meine Frage ist nun, wann zeichnet sich das StringGrid neu, bzw. wann wird das Ereignis OnDrawCell angesteuert ? Gruss Holger |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 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 by Thomas Breitkreuz