Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Stringgrid Zelle unterschiedlich färben (https://www.delphipraxis.net/59674-stringgrid-zelle-unterschiedlich-faerben.html)

Sharky 27. Dez 2005 12:39

Re: Stringgrid Zelle unterschiedlich färben
 
Zitat:

Zitat von Logan
In der Demo geht es aber nur drum Zellen einfarbig zu färben.

:wall: Ich sollte genauer lesen :oops:

Sollen die Zellen nur farbig sein oder auch Text enthalten?

himitsu 27. Dez 2005 12:45

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);

Logan 27. Dez 2005 12:51

Re: Stringgrid Zelle unterschiedlich färben
 
Zitat:

Sollen die Zellen nur farbig sein oder auch Text enthalten?
In der Jahresansicht soll es nur farbig sein, und in den anderen Ansichten Text und farbig :)

Sharky 27. Dez 2005 12:53

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;

Logan 27. Dez 2005 13:02

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!!!

Sharky 27. Dez 2005 13:11

Re: Stringgrid Zelle unterschiedlich färben
 
Zitat:

Zitat von Logan
... und sorry falls ich mich unverständlich ausgedrückt habe

Du kannst ja nichts dafür wenn ich nicht richtig lesen kann. Es war schon genau beschrieben was Du wolltest.

Zitat:

Super Forum!!!
Das hören wir immer gerne. Danke :-D

So, nur um sicher zu sein:
Hast Du auch verstanden wass ich da im Code mache?

Logan 27. Dez 2005 13:18

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:

Sharky 27. Dez 2005 13:29

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.

himitsu 27. Dez 2005 14:45

Re: Stringgrid Zelle unterschiedlich färben
 
Zitat:

Zitat von Sharky
Hai (b)engelchen.
Ich glaube Du hast auch nicht richtig gelesen. Er möchte ja in einer Zelle mehr als eine Farbe.

Zitat:

Zitat von himitsu
schau mal unter CANVAS ... du kannst alle möglichen Zeichenoperationen da verwenden ;)

na verstanden hatte ich es schon richtig, denk ich mal ... wie gesagt, es mußten doch nur die Zeichenoperationen so angepasst werden, daß da mehrere Farbbereiche entstehen ^^

Avax2k 16. Mai 2006 19:42

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:
Stringgrid1drawcell(StringGrid1,1,1,Rect(0,0,0,0),gdSelected);
und das geht eben nicht wie rufe ich die Funktion denn nun auf ? :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz