Zitat von
shmia:
Also mal grundsätzlich gilt: gezeichnet wird nur im Event OnDrawCell!...
Als Tipp habe ich deine Routine mal etwas abgeändert und flotter gemacht
Delphi-Quellcode:
procedure TfrmZaehlerStaende.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
Var sgc: TCanvas;
begin
//--nicht unbedingt notwendig, aber wenn man Schreibfaul ist,nimmt man halt ne sinnvolle Abkürzung ;)
sgc := StringGrid1.Canvas;
if Label3.Caption = 'Arbeitszeit' then
//Linien zwischen Zellen erzeugen
if (ARow mod 4 = 0) and (ACol >= StringGrid1.FixedCols) then
begin
sgc.Pen.Color := clred; // Linienfarbe
sgc.Pen.Width := 2; // Stärkt der Linie
sgc.MoveTo(Rect.Left,Rect.Bottom);
sgc.LineTo(Rect.Right,Rect.Bottom);
end;
// zellen verbinden für Spalte 0
if (ACol = 0) And not (ARow In [4,8,12,16,20,24]) then
begin
sgc.Pen.Color := clgreen;
sgc.Pen.Width := 2;
sgc.MoveTo(Rect.Left, Rect.Bottom);
sgc.LineTo(Rect.Right, Rect.Bottom);
end;
// Linie neben der klasse erzeugen
if (ACol = 1) And (ARow In [1..23]) then
begin
sgc.Pen.Color := clfuchsia;
sgc.Pen.Width := 1;
sgc.MoveTo(Rect.Right, Rect.Top);
sgc.LineTo(Rect.Right, Rect.Bottom);
end;
end;
Okay, die merkwürdigen Farben hab ich nur für mich zum Test und besseren Erkennen eingesetzt.
Zitat:
repeat
n:= n + 4;
if (StringGrid1.Row = n) and (StringGrid1.Col >= StringGrid1.FixedCols) then
begin
...
end;
until n= 24;
ist gaaaaanz schlecht(er Stil), weil: diese Schleife wird beim Zeichnen JEDER(!!) Zelle durchlaufen und verlangsamt das Ganze und kann auch teilweise zu merkwürdigen Zeichenverhalten beim Scrollen führen.
ARow mod 4 = 0
heisst vereinfacht: wenn die Zeilennummer glatt durch 4 teilbar ist (also Rest=0) dann pinsel den entsprechenden Strich...(also Zeilennr 4,8,12,...)
und das hier
not (ARow In [4,8,12,16,20,24])
ist eine andere Möglichkeit, alle 4-er-Zeilen entsprechend zu behandeln
(in diesem Fall eben diese Zeilen überspringen...)
wenn man das Ganze noch mehr vereinfachen will kann man statt dessen auch diese beiden Möglichkeiten nehmen:
not (ARow mod 4 = 0) oder (ARow mod 4 <> 0)
Das nur so als gut gemeinter Tipp am Rande