Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Feld in Stringgrid färben (https://www.delphipraxis.net/112103-feld-stringgrid-faerben.html)

Klaus01 15. Apr 2008 13:12

Re: Feld in Stringgrid färben
 
Vielleicht kannst Du dir diese Funktion zu Nutze machen:

Delphi-Quellcode:
Returns the screen coordinates of a cell in the grid.

function CellRect(ACol, ARow: Longint): TRect;
Grüße
Klaus

DeddyH 15. Apr 2008 13:23

Re: Feld in Stringgrid färben
 
Das sollte doch bereits in Rect stehen, oder?

[edit] Ich habe Folgendes gerade mal unter D5 ausprobiert:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i,j: integer;
begin
  Randomize;
  for i := StringGrid1.FixedRows to Pred(StringGrid1.RowCount) do
    for j := StringGrid1.FixedCols to Pred(StringGrid1.ColCount) do
      StringGrid1.Cells[i,j] := IntToStr(Random(150) + 101);
end;

//Für Delphi 5 selbst implementiert
function TryStrToInt(const s: string; out i: integer): Boolean;
begin
  Result := true;
  try
    i := StrToInt(s);
  except
    Result := false;
    i := 0;
  end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var wert: integer;
begin
  //fixe Spalten/Zeilen ausgenommen
  if ((ACol) >= (Sender as TStringGrid).FixedCols) and
     ((ARow) >= (Sender as TStringGrid).FixedRows) then
    begin
      //je nach Wert Hintergrundfarbe setzen
      if TryStrToInt((Sender as TStringGrid).Cells[ACol,ARow],wert) and
         (StrToInt((Sender as TStringGrid).Cells[ACol,ARow]) > 200) then
        (Sender as TStringGrid).Canvas.Brush.Color := clRed
      else
       (Sender as TStringGrid).Canvas.Brush.Color := clWhite;

     //Zelle füllen
     (Sender as TStringGrid).Canvas.FillRect(Rect);

     //Text mittig ausgeben
     DrawText((Sender as TStringGrid).Canvas.Handle,
              PChar((Sender as TStringGrid).Cells[ACol,ARow]),
              Length((Sender as TStringGrid).Cells[ACol,ARow]),
              Rect,
              DT_CENTER or DT_VCENTER or DT_SINGLELINE);
  end;
end;
[/edit]

Hansa 15. Apr 2008 14:51

Re: Feld in Stringgrid färben
 
Geht das immer noch nicht ? Das hier (steht im OnDrawCell) zeichnet alle Zellen in denen 1 steht weiß auf dunkelblau :

Delphi-Quellcode:
      if ACol = 1 then begin
        if IntoStr (Cells [ACol,ARow] = 1 then begin
          canvas.Font.Size:= 8;
          canvas.Font.Color:= clwhite;
          canvas.brush.Color := clNavy;
          canvas.TextOut(rect.Left,rect.bottom-canvas.Textheight('X')-1,
                         Cells [ACol,ARow]);
        end;
      end
Und das geht definitiv. Die Bedingung "= 1" lässt sich ja wohl leicht anpassen. 8)

DeddyH 15. Apr 2008 15:05

Re: Feld in Stringgrid färben
 
Wenn Du aus Inttostr Strtoint machst, könnte das funktionieren :zwinker: . Außerdem hast Du uns ein with verschwiegen, so macht der Code keinen Sinn.

Hansa 15. Apr 2008 15:13

Re: Feld in Stringgrid färben
 
Das soll ein Denkanstoß für SEIN Programm sein. In meinem geht die OnDrawCell-Prozedur über 2 DIN A 4 Seiten. Soll ich die etwa posten ? :shock: Wenn er die durch Abkürzen verursachten Schreibfehlerchen nicht bemerkt/versteht, dann macht das ganze Thema keinen Sinn ! Dann soll er besser die Finger davon lassen. 8)

mkinzler 15. Apr 2008 15:22

Re: Feld in Stringgrid färben
 
Dann hättest du auch nicht noch eine Lösung Posten müssen.
@5etH: wir könnten dies hier abkürzen, wenn du versuchen würdest die geposteten Lösungen zu verstehen und ggf. die Hilfe zu konsultieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr.
Seite 3 von 3     123   

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