Einzelnen Beitrag anzeigen

VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#4
  Alt 7. Jan 2003, 15:04
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.
  Mit Zitat antworten Zitat