Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   StringGrid - Einzelne Zellen färben - unter Bedingung (https://www.delphipraxis.net/146477-stringgrid-einzelne-zellen-faerben-unter-bedingung.html)

ELiTe33ELiTe 20. Jan 2010 18:58


StringGrid - Einzelne Zellen färben - unter Bedingung
 
Hallo :-).

Da ich mit anderen, ähnlichen Problemen und deren Lösungen nicht zurecht kam und nicht auf mein Problem ändern konnte, wollte ich mal hier nachfragen :-).


Folgendes Problem besteht..
Ich bin jetzt in der 11. Klasse und als Leistungskurs haben wir IS - Informationssysteme.
Wir haben angefangen mit Delphi 5 zu programmieren und lernen jetzt alles von 0 an.

Wir haben ein Programm gemacht das folgendes bewirkt:
100 Leute werfen jeweils 3 mal.
Bei bestimmten Kombinationen kommt man in Preisklasse von 1-4.
Das klappt auch alles soweit.

Um mein Programm zu verschönern, wollte ich nun aber die Zellen, wo jeweils die Preisklasse drin steht, färben.
Jede Preisklasse andersfarbig natürlich ;-).

Wie mache ich das nun?
Hoffe ihr könnt mir einige Tips und Hinweise geben.

Unten seht ihr meinen aktuellen Quelltext, da findet sich aber noch nichts zum färben.

Delphi-Quellcode:
unit UMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, Grids;

type
  TForm1 = class(TForm)
    TabAusgabe: TStringGrid;
    BStart: TBitBtn;
    procedure BStartClick(Sender: TObject);
  private
    { Private-Deklarationen }
    wfeld : array[1..3, 1..100] of integer;

    FUNCTION preis (person: integer): string;
    PROCEDURE wuerfeln;
    PROCEDURE ausgabe;

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.wuerfeln;
 var person, wurf :integer;
begin
  FOR person:= 1 TO 100 DO
   FOR wurf:= 1 TO 3 DO
    wfeld[wurf,person]:= random(6) + 1;
end;


procedure TForm1.BStartClick(Sender: TObject);
 begin
   wuerfeln;
   ausgabe;
 end;

procedure TForm1.ausgabe;
 var person, wurf :integer;
begin
  for person:= 1 TO 100 DO
   BEGIN
    TabAusgabe.Cells[0,person-1]:= IntToStr(person);

    FOR wurf:=1 TO 3 DO
     TabAusgabe.Cells[wurf,person-1]:= IntToStr(wfeld[wurf,person]);

    TabAusgabe.Cells[4,person-1]:= preis(person);
   END;
end;

function TForm1.preis(person: integer): string;
 VAR preisklasse : string;
     PK : integer;
begin
 preisklasse:= 'Niete';

 if   (wfeld[1,person] = wfeld[2,person])
    OR (wfeld[2,person] = wfeld[3,person])
    OR (wfeld[1,person] = wfeld[3,person])
 THEN preisklasse := 'PK4';

 if (wfeld[1,person] + wfeld[2,person] + wfeld[3,person] ) > 12
 THEN preisklasse := 'PK3';

 if
  (wfeld[1,person] = wfeld[2,person]) and (wfeld[1,person] = wfeld[3,person])
 THEN preisklasse := 'PK2';

  if (wfeld[1,person] = wfeld[2,person]) and (wfeld[1,person] = wfeld[3,person]) and (wfeld[1,person] + wfeld[3,person] + wfeld[3,person] = 18 )
  or (wfeld[1,person] = wfeld[2,person]) and (wfeld[1,person] = wfeld[3,person]) and (wfeld[1,person] + wfeld[3,person] + wfeld[3,person] = 3 )
 THEN preisklasse := 'PK1';


 result:= preisklasse;
 end;

initialization
  randomize;

end.
http://img686.imageshack.us/img686/6008/delphi.jpg


Vielen Dank für eure Hilfe :-).

Wolfgang Mix 20. Jan 2010 19:14

Re: StringGrid - Einzelne Zellen färben - unter Bedingung
 
Liste der Anhänge anzeigen (Anzahl: 1)
herzlich willkommen in der DP :dp:
Teste 'mal dies

Gruß

Wolfgang

Teekeks 20. Jan 2010 19:21

Re: StringGrid - Einzelne Zellen färben - unter Bedingung
 
Ich wollte auch sagen: onDrawCell prüfen ob die Aktuell gezeichnete Celle die Person enthält die du Farbig machen willst.
Als Beispiel:
Delphi-Quellcode:
procedure TForm1.SGUebersichtDrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
var d:boolean=false;
    x:integer;
begin
// erstmal grundfarbe setzen:
  (sender as TStringgrid).canvas.Brush.color:=(sender as TStringgrid).color;
  (sender as TStringgrid).canvas.Font.color:=clWindowText;
  if (acol<(sender as TStringgrid).fixedCols) or (arow<(sender as TStringgrid).fixedRows) then
  begin
    (sender as TStringgrid).canvas.Brush.color:=(sender as TStringgrid).FixedColor; //Farbe der Header
    if (arow=ActRow) then (sender as TStringgrid).canvas.Brush.color:=clMoneyGreen;
  end
  else
  begin
    // was färben bei der Aktuellen Zeile:
    if (arow=ActRow) then (sender as TStringgrid).Canvas.Brush.Color:=clMoneyGreen;
    if gdSelected in astate then
    begin
      (sender as TStringgrid).canvas.Brush.color:=clHighlight; //farbe von markierung
      (sender as TStringgrid).canvas.Font.color:=clwindow;
    end;
  end;
  (sender as TStringgrid).canvas.FillRect(arect);
  (sender as TStringgrid).Canvas.TextOut(arect.left+3,arect.top+3,(sender as TStringgrid).Cells[acol,arow]);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 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