Stringgrid ruzny font pro ruznou bunku – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Stringgrid ruzny font pro ruznou bunku – Delphi – Fórum – Programujte.comStringgrid ruzny font pro ruznou bunku – Delphi – Fórum – Programujte.com

 

Jerremy09
~ Anonymní uživatel
9 příspěvků
7. 8. 2007   #1
-
0
-

Dobry den, jak jiz nazev napovida potreboval bych zjistit jak pro ruznou bunku Stringgridu vytvorim ruzny font. PR: mam Stringgrid naplneny cisli od 1-4 a pro kazdy cislo potrebuju jinou barvu

1 2 4 3
3 2 4 1
3 3 1 4
....
....
atd.
pritom se barva musi pevne stahovat k cislu, Sringrid se totiz vyplnuje nahodne.
prosim pomozte. Muj mail je Jerremy09@seznam.cz , nebo ICQ: 233183343
Dik za kazdou odpoved

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
7. 8. 2007   #2
-
0
-

unit Unit1;


interface

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

const cNumOfColors = 3;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
mColorArray : array [0..cNumOfColors] of TColor;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i, j: integer;
begin
randomize;
for i:=0 to cNumOfColors do
mColorArray[i] := TColor(RGB(random(256),random(256), random(256)));
for i:=0 to StringGRid1.RowCount-1 do
for j := 0 to StringGrid1.ColCount-1 do
StringGrid1.Cells[j,i] := IntToStr(Random(cNumOfColors));
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with StringGrid1 do begin
Canvas.Font.Color := mColorArray[StrToInt(Cells[ACol, ARow])];
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect);
DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), Rect, DT_CENTER);
end;
end;

end.

Nahlásit jako SPAM
IP: ...–
Jerremy09
~ Anonymní uživatel
9 příspěvků
7. 8. 2007   #3
-
0
-

To si delas prdel :O, tak rychle jsem to necekal, fakt ti moc dekuju ;)

Nahlásit jako SPAM
IP: ...–
Jerremy09
~ Anonymní uživatel
9 příspěvků
8. 8. 2007   #4
-
0
-

Hmmm tak prvotni nadseni opadlo, protoze tomu moc nerozumim, nemohl by jsi k tomu pripsat nejaky info co jak funguje?

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
8. 8. 2007   #5
-
0
-

Celé kouzlo spočívá ve vykresloání, které se provádí při kreslení jednotlivých buňek tedy v metodě(resp. handleru eventu) OnDrawCell. Ta má několik parametrů, z níchž duléžité jsou zejména parametry ACol, ARow, Rect. Systém tuto metodu volá sám a vždy ji naplní příslušnými hodnotami ACol, ARow jsou idnexy práve krelené buňky a v Rect je obdelník reprezentující rozměry(resp. 2 krajní body) buňky. A teď už k programu, tebe v podstatě může zajímat jen ta metoda StringGrid1DrawCell:
1) V konstruktoru se naplní pole mColorArray nahodnou barvou, pole je jednorozměrné - velikost pole ovlivňuje konstanta cNumOfColors, ta odpovídá počtu barev - resp. čísel které se mohou ve SG nacházet.




unit Unit1;

interface

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

const cNumOfColors = 3;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
mColorArray : array [0..cNumOfColors] of TColor;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject); // konstrukotr je pouze pro ukazku
var i, j: integer;
begin
randomize;
for i:=0 to cNumOfColors do
mColorArray[i] := TColor(RGB(random(256),random(256), random(256))); // v tomto poli si pamatuju vsechny barvy
for i:=0 to StringGRid1.RowCount-1 do
for j := 0 to StringGrid1.ColCount-1 do
StringGrid1.Cells[j,i] := IntToStr(Random(cNumOfColors));
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with StringGrid1 do begin
Canvas.Font.Color := mColorArray[StrToInt(Cells[ACol, ARow])]; // vyberu barvu odpovidajici indexu v poli mColorArray
Canvas.Brush.Color := clWhite; // nastavi barvu štetce na bilou
Canvas.FillRect(Rect); // "vycisti" bunku
DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), Rect, DT_CENTER); // nakresli text do stredu bunky - vice viz msdn
end;
end;

end.

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý