Archiv verlassen und diese Seite im Standarddesign anzeigen : Einzelne Formatierungen bei StringGrid
Mr. Boom
23.08.2002, 17:26
Wie kann ich bei einem Stringgrid die Schrift einer einzelnen Zelle ändern? Z. B. Jede zweite Reihe soll eine rote Schrift haben.
musst bei onpaint die methode zum zeichnen überschreiben. wenn die zeile grad bzw. ungrade ist, machst:
stringgrid1.canvas.font.color := clblack
wenn nich:
stringgrid1.canvas.font.color := clred
wie das überschreiben des onpaint-events geht, musst bei den samples raussuchen, habs so net im kopf ... felix weiss es bestimmt ;)
Felix Kaiser
23.08.2002, 21:30
"Das Ereignis OnDrawCell tritt ein, wenn eine Gitterzelle gezeichnet werden muß.", nur so als Tipp :cool:
Mr. Boom
24.08.2002, 13:59
Ich hab noch probleme. Irgendwie passt was nicht.
Ich hab einen normalen StringGrid, der auf Button1 mit schwarzer Schrit und auf Button2 soll deer Rest mit roter Schrift gefüllt werden. Klappt aber noch nicht. Die Delphi Hilfe meinte auch das, das Event DrawCell schrittweise vorgeht. Dann müsste ACol und ARow doch nur die aktuelle Spalte bzw. Zeile wiedergeben? das gebrauche ich ja nicht umbedingt. nur ich bekomms noch nicht hin.
Wenn ich schreib: Sender as DrawGrid gehts auch nicht. die Schrift muss ich doch auch im StringGrid verändern können. DrawGrad ist doch noch für weitere Objekte gedacht, es hat doch nicht den Vorteil, das man hier die einzelnen Zellen formatieren kann, ausserdem weiss ich nicht wie man da was in die Zellen bekommt. Cells gibts da irgendwie nicht.
Aber erst mal zu meinen ersten Problem, ich bin ratlos. So kompliziert kann das doch nicht sein. Bei mir verändert sich die Schrift nicht. :mauer:
procedure TForm1.Button1Click(Sender: TObject);
var i,y:integer;
begin
Makierung:=0;
for i:=1 to 4 do
for y := 0 to 4 do
StringGrid2.Cells[y,i]:='Hallo';
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,y:integer;
begin
Makierung:=1;
for i:=5 to 9 do
for y := 0 to 4 do
StringGrid2.Cells[y,i]:='Hallo';
end;
procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with Sender as TStringGrid do
If Makierung=1 then
Canvas.Font.Color:=clRed
else
Canvas.Font.Color:=clBlack;
end;
end;
Felix Kaiser
24.08.2002, 15:16
So schwer ist das doch garnicht. Du weißt, zu welchem StringGrid der Event gehört. Dir wird gesagt, welche Zeile und welche Spalte sich die zu zeichnende Zelle befindent. Er sagt dir auch welchen Zustand die Zelle hat und die Koordinaten der Zelle in Pixel. Jetzt setz dich ran und zeichne deine Zelle über StringGrid.Canvas. Das ist dann doch wirklich nicht schwer. Zeichnest du nicht, greift automatisch der Standardhandler fürs Zeichnen.
Mr. Boom
27.08.2002, 20:49
Also ich hab das mal nen Kumpel gezeigt und wir haben es zusammen nochmal getestet, wir wissen immer noch nitcht wie das funktioniert.
Mach mal das einfache Beispiel, die erste Zeile eines Stringgrids soll fett und rot geschrieben werden. Die restlichen sollen normal bleiben.
Also mal ein ganz einfaches Codebsp.
Mr. Boom
13.09.2002, 21:39
hi,
so endlich habe ichs, mir fehlte auch nur die wichtigste Zeile. Das war ebend das Problem!!! Alles andere war klar!!!!!!!!!1
procedure TForm1.GridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
// if m=1 then
begin
if ARow=1 then
begin
Grid.Canvas.Brush.Color:=clred;
--->>> Grid.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Grid.Cells[ACol, ARow]);
end;
if ARow=3 then
begin
Grid.Canvas.Brush.Color:=clred;
--->>> Grid.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Grid.Cells[ACol, ARow]);
end;
end;
end;
--->>> Das sind die wichtigsten Zeilen, sonst funzt nix!!!
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.