![]() |
Re: Stringgrid Zelle unterschiedlich färben
Zitat:
Sollen die Zellen nur farbig sein oder auch Text enthalten? |
Re: Stringgrid Zelle unterschiedlich färben
nich trauchig sein, du hast es doch gut gemacht ... dort steht ja drin, wie man zeichnet und den Text reinmacht, also alles, was man braucht, dieses müß jetzt halt nur noch angepasst werden ;)
Zusammenfassung aus deiner Demo:
Delphi-Quellcode:
// Hintergrund zeichnen
Canvas.Brush.Color := clGreen; Canvas.FillRect(Rect); // Textausgeben DrawText(Canvas.Handle, PChar(celltext), Length(celltext), Rect, DT_SINGLELINE); |
Re: Stringgrid Zelle unterschiedlich färben
Zitat:
|
Re: Stringgrid Zelle unterschiedlich färben
Hai (b)engelchen.
Ich glaube Du hast auch nicht richtig gelesen. Er möchte ja in einer Zelle mehr als eine Farbe. Hier mal ein Demo für eine zweifarbige Zelle (horizontal geteilt):
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: integer;
Rect: TRect; State: TGridDrawState); var celltext: string; myDrawRect: TRect; rowHeight: integer; begin with (Sender as TStringGrid) do begin celltext := Cells[ACol, ARow]; myDrawRect := Rect; SetBkMode(StringGrid1.Canvas.Handle,OPAQUE); if (ARow = 2) and (ACol > 0) then // Hier ist es zweifarbig begin Canvas.Brush.Color := clRed; rowHeight := RowHeights[ARow]; myDrawRect.Bottom := myDrawRect.Bottom - (rowHeight div 2); Canvas.FillRect(myDrawRect); // Hintergrund für die obere Hälfe zeichnen Canvas.Brush.Color := clBlue; myDrawRect.Bottom := Rect.Bottom; myDrawRect.Top := myDrawRect.Top + (rowHeight div 2); Canvas.FillRect(myDrawRect); // Hintergrund für die untere Hälfe zeichnen SetBkMode(StringGrid1.Canvas.Handle, TRANSPARENT); // Den Hintergrund nich überschreiben end; if (ARow = 3) then // Einfarbige Zeilen begin Canvas.Brush.Color := clGreen; Canvas.FillRect(Rect); end; DrawText(Canvas.Handle, PChar(celltext), Length(celltext),Rect, DT_SINGLELINE); end; end; |
Re: Stringgrid Zelle unterschiedlich färben
Oha, genau sowas meinte ich, vielen lieben Dank für die Hilfe und sorry falls ich mich unverständlich ausgedrückt habe :oops:
Super Forum!!! |
Re: Stringgrid Zelle unterschiedlich färben
Zitat:
Zitat:
So, nur um sicher zu sein: Hast Du auch verstanden wass ich da im Code mache? |
Re: Stringgrid Zelle unterschiedlich färben
Verstanden schon, mir geht es ja nicht um Copy & Paste, will ja schliesslich was lernen :)
In meinen Augen is der Schlüssel genau hier: myDrawRect.Bottom := myDrawRect.Bottom - (rowHeight div 2); //<---Genau das SetBkMode(SG_Jahre.Canvas.Handle, TRANSPARENT); :cheers: |
Re: Stringgrid Zelle unterschiedlich färben
Genau.
Man hat ja in der Variablen Rect die genaue Position der Zelle die gerade gezeichnet wird. Also berechne ich einfach die Position wenn der Bereich denn ich färben möchte nur halb so hoch ist wie die Zelle. Das mit dem SetBkMode ist notwendig um bei der Textausgabe den Hintergrund nicht mit der aktuelle Brush.Color zu überschreiben. |
Re: Stringgrid Zelle unterschiedlich färben
Zitat:
Zitat:
|
Re: Stringgrid Zelle unterschiedlich färben
sorry, dass ich das thema herauskrame aber ich bekomme es einfach nicht hin die hier genannte Funktion auszuführen..
ich verwende den Code auf der ersten Seite bei dem man zwei farben einfügen kann und will mit einem knopfdruck eine Zelle färben aber das geht nicht weil er sagt dass TGridDrawState und Enumeration inkompatibel sind.. mein Aufruf ist wie folgt:
Delphi-Quellcode:
und das geht eben nicht wie rufe ich die Funktion denn nun auf ? :(
Stringgrid1drawcell(StringGrid1,1,1,Rect(0,0,0,0),gdSelected);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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-2025 by Thomas Breitkreuz