![]() |
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. ![]() Vielen Dank für eure Hilfe :-). |
Re: StringGrid - Einzelne Zellen färben - unter Bedingung
Liste der Anhänge anzeigen (Anzahl: 1)
|
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