![]() |
Stringgrid Zelle unterschiedlich färben
Hallo,
ich habe folgendes Problem: Ich möchte eine Zelle im Stringgrid in X-verschiedenen Farben füllen (für einen Terminplaner, je nach Anzahl der Benutzer). Weiss aber nicht, wie ich eine Zelle dem entsprechend teile. Habe viel gesurft und leider nix gefunden :cry: Also, bitte nicht schlagen, falls es hier schon einmal gefragt wurde :-D Schon mal vielen Dank!!! MfG Logan |
Re: Stringgrid Zelle unterschiedlich färben
DefaultDrawing auf False setzen (im OI)
und dann in OnDrawCell den Zelleninhalt selber zeichnen (Hintergrund + Text) in der OH ist ein Beispiel zu finden (OH > OnDrawCell) [add] Ach ja ... Herzlich Willkommen ^^ |
Re: Stringgrid Zelle unterschiedlich färben
Heißt dass nicht OwnerDraw und muss auf True stehen?
|
Re: Stringgrid Zelle unterschiedlich färben
Liste der Anhänge anzeigen (Anzahl: 1)
Hai Logan,
ersteinmal : "Herzlich Willkommen in der Delphi-PRAXiS" :hi: Bevor ich da jetzt groß etwas schreibe hänge ich lieber mein Demo in den Anhang. Es sollte eigentlich alles erklären können. :stupid: |
Re: Stringgrid Zelle unterschiedlich färben
OwnerDraw is schonmal falsch ... dachte schon ich hätte mich geirrt ... böser Luckie, hattest mir schon fast Angst gemacht :shock:
Aber ich hab gerade nochmal nachgesehn: DefaultDrawing muß nicht unbedingt auf Fals gesetzt werden ... nur weil man es bisher zufällig immer gemacht hatte, muß man ja auch nicht davon ausgehn, daß es immer so sein muß :oops: Zitat:
@Sharky: wofür is eigentlich ExplicitLeft, ExplicitTop und ExplicitWidth? (weder D7, noch D2005 kennen das) |
Re: Stringgrid Zelle unterschiedlich färben
Zitat:
Und auch vielen Dank für die Hilfe!!! |
Re: Stringgrid Zelle unterschiedlich färben
@Sharky:
Hmmm, bei der Demo bekomme ich 3 Fehler schon zu Beginn :( Die ich ignorieren muss. Ich nutze Delphi 2005, hat es was damit evtl. zu tuen? |
Re: Stringgrid Zelle unterschiedlich färben
Zitat:
Die drei genannten Propertys sind erst sein D2006 dabei. Und das Demo hatte ich dummerweise mal in einem D2006 geöffnet und wieder gespeichert. |
Re: Stringgrid Zelle unterschiedlich färben
In der Demo geht es aber nur drum Zellen einfarbig zu färben.
Soweit bin ich auch schon :) Und in der Online-Hilfe finde ich leider kein Beispiel zu ?! |
Re: Stringgrid Zelle unterschiedlich färben
schau mal unter CANVAS ... du kannst alle möglichen Zeichenoperationen da verwenden ;)
|
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);
|
Re: Stringgrid Zelle unterschiedlich färben
Hallo,
du mußt beim Aufruf im letzten Parameter eine Menge übergeben:
Delphi-Quellcode:
Gruß Hawkeye
StringGrid1DrawCell (StringGrid1, 1, 1, Rect(0, 0, 0, 0), [gdSelected]);
|
Re: Stringgrid Zelle unterschiedlich färben
Vielen Dank..in der Delphi Hilfe war leider kein Beispiel dabei um es zu veranschaulichen man hat nur die States beschrieben die es gibt
:thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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