Hallo nochmal.
@sakura
Also das eingetliche Zeichnen läuft natürlich in der OnDraw-Cell-Methode ab (wie in dem Eröffnungsbeitrag beschrieben). Diese funktion wird ja auch am Ende das abgebildeten Quellcodes aufgerufen. Diese Methode an sich werde ich im Anschluß gleich nochmal mitschicken.
@eddy
Die FList (Variable vom Typ List) und TItem (selbstdefinierter Typ) sind eigentlich nicht notwendig. Da sie aber noch ne Menge Informationen beinhalten die speziell für meine Verwendung interessant sind habe ich diese beiden Komponenten genutzt. Im Grunde kannst Du Dir das wie ein Array vorstellen, der boolsche Variablen enthält ob das entsprechende Feld angehalt ist oder nicht. Die OnDraw-Methode kommt im Anschluß.
Code:
procedure TBewegungenFormular.BewegungStringGridDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
AOffSet : TPoint;
AHaken1 : TPoint;
AHaken2 : TPoint;
AHaken3 : TPoint;
ARect : TRect;
begin
with BewegungStringGrid.Canvas do
begin
if Rect.Top = 0 then
begin
Brush.Color := clBtnFace;
FillRect(Rect);
Pen.Color := clWhite;
Rectangle(Rect);
TextOut(Rect.Left, Rect.Top, BewegungStringGrid.Cells[ACol, ARow]);
Exit;
end;
Brush.Color := clWhite;
FillRect(Rect);
if (ARow > 0) and
(ACol = 0) then
begin
//Kasten zeichnen
AOffSet.X := (Rect.Right - Rect.Left - 11) div 2;
AOffSet.Y := (Rect.Bottom - Rect.Top - 11) div 2;
ARect.Left := AOffSet.X + Rect.Left;
ARect.Top := AOffSet.Y + Rect.Top;
ARect.Right := AOffSet.X + Rect.Left + 11;
ARect.Bottom := AOffSet.Y + Rect.Top + 11;
Pen.Color := clGray;
Rectangle(ARect);
if TItem(FList.Items[Pred(ARow)]).Checked then
begin
//Haken zeichnen
AHaken1.X := ARect.Left + 2;
AHaken1.Y := ARect.Top + 6;
AHaken2.X := ARect.Left + 4;
AHaken2.Y := ARect.Top + 8;
AHaken3.X := ARect.Left + 9;
AHaken3.Y := ARect.Top + 3;
Pen.Color := clGreen;
MoveTo(AHaken1.X, AHaken1.Y - 0);
LineTo(AHaken2.X, AHaken2.Y - 0);
LineTo(AHaken3.X, AHaken3.Y - 0);
MoveTo(AHaken1.X, AHaken1.Y - 1);
LineTo(AHaken2.X, AHaken2.Y - 1);
LineTo(AHaken3.X, AHaken3.Y - 1);
MoveTo(AHaken1.X, AHaken1.Y - 2);
LineTo(AHaken2.X, AHaken2.Y - 2);
LineTo(AHaken3.X, AHaken3.Y - 2);
end;
end;
TextOut(Rect.Left, Rect.Top, BewegungStringGrid.Cells[ACol, ARow]);
end;
end;
Ich hoffe jetzt sind alle notwendigen Informationen vorhanden.