Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   StringGrid Zelle einzeln mit If...then färben ? (https://www.delphipraxis.net/159426-stringgrid-zelle-einzeln-mit-if-then-faerben.html)

Gilmohr 27. Mär 2011 17:56

Delphi-Version: 5

StringGrid Zelle einzeln mit If...then färben ?
 
Hi,
hab hier ne kleine sache bei der ich nicht weiterkomme.
ICh hätte gern nach der If abfrage dass mir die entsprechende Zelle rot eingefärbt wird.
mit dem ganzen StringGrid funktioniert das so schon. nur wie kann ich die einzelne Zelle ansprechen?

Delphi-Quellcode:
    if StrToFloat(v2[a]) <=07 then
    StringGrid2.Cells[0,a] := v2[a] ;

    if StrToFloat(v2[a]) > 0.7 then
    StringGrid2.color := clRed;
danke schonmal

mkinzler 27. Mär 2011 17:57

AW: StringGrid Zelle einzeln mit If...then färben ?
 
Dann musst du das Grid selber zeichen (OwnerDraw)

rollstuhlfahrer 27. Mär 2011 17:58

AW: StringGrid Zelle einzeln mit If...then färben ?
 
Gar nicht. Du müsstest dann
Delphi-Quellcode:
OwnerDraw
auf TRUE setzen und dann die Zellen alle selbst malen.

Bernhard

madtom 27. Mär 2011 18:30

AW: StringGrid Zelle einzeln mit If...then färben ?
 
Hallo,

hier wäre mal ein Beispiel, wie mann die selektierte Zeile einfärbt: (Quelle: Peter Below (TeamB))

Delphi-Quellcode:
// Coloring the active row of a stringgrid

type
  // required to access protected method InvalidateRow
  TGridCracker = Class( TStringgrid );
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
  State: TGridDrawState);
var
  Grid: TStringGrid;
begin
  if gdFixed in State then
    Exit;
  Grid := Sender as TStringGrid;
  if Grid.Row = ARow then
  begin
    with Grid.Canvas.Brush do
    begin
      Color := $C0FFFF;
      Style := bsSolid;
    end;
    Grid.Canvas.FillRect(Rect);
    Grid.Canvas.Font.Color := clBlack;
    Grid.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Grid.Cells[ACol, ARow]);
    Grid.Canvas.Brush := Grid.Brush;
  end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
  with TGridCracker(Sender as TStringGrid) do
  begin
    InvalidateRow(Row);
    InvalidateRow(ARow);
  end;
end;
Beste Grüße

Thomas

Gilmohr 27. Mär 2011 18:39

AW: StringGrid Zelle einzeln mit If...then färben ?
 
OK, vielen Dank für die schnellen Antworten.

@madtom: vielen Dank auch für die info !

alternativ wäre es evtl einfacher für mich wenn 0,7 überschritten wird den entsprechenden String v2[a] dann einzufärben?

wie würde das dann ausehen bei mir?
bzw wie kann ich einem String ne Farbe zuweisen?

hier nochmal die code Passage wie ich es bis jetzt gemacht hab:

Delphi-Quellcode:
    if StrToFloat(v2[a]) <=07 then
    StringGrid2.Cells[0,a] := v2[a] + ' m/s ' ;
    StringGrid2.color := clWhite;

    if StrToFloat(v2[a]) > 0.7 then
    StringGrid2.color := clRed;

rollstuhlfahrer 27. Mär 2011 19:13

AW: StringGrid Zelle einzeln mit If...then färben ?
 
Du kannst einem String keine Farbe zuweisen. Du kannst nur dem String eine Info mit auf den Weg geben (als zusätzliche Zeichen), dass eine bestimmte Farbe angewählt werden soll. Das musst du dann aber auch selbst machen (Andere Farbe -> selber Zeichnen).

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr.

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