Home » Tipps & Tricks » Komponenten » TStringGrid » Äquivalent zu ColSpan in HTML in TStringGrid

Äquivalent zu ColSpan in HTML in TStringGrid

In HTML verbindet das Attribut ColSpan in einer Tabelle mehrere Zellen in einer Zeile zu einer Zelle. Folgender Quellcode, der im OnDrawCell-Ereignis eines TStringGrids abgearbeitet wird, erreicht ähnliches:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  I, X, Y: Integer;
begin
  If (gdFixed In State) or (ARow <> StringGrid1.FixedRows) Then
    Exit;

  If aCol < Pred(StringGrid1.ColCount) then
    Rect.Right := Rect.Right + StringGrid1.GridlineWidth;

  X := Rect.Left + 2;
  Y := Rect.Top + 2;

  for I := StringGrid1.FixedCols to ACol-1 do
    X := X - StringGrid1.ColWidths[I] - StringGrid1.GridlineWidth;

  StringGrid1.Canvas.Brush.Color := clYellow;
  StringGrid1.Canvas.Brush.Style := bsSolid;
  StringGrid1.Canvas.FillRect(Rect);

  StringGrid1.Canvas.TextRect(Rect, X, Y, StringGrid1.Cells[StringGrid1.FixedCols,
    StringGrid1.FixedRows]);
end;

In dem obigen Beispiel werden alle Zellen der erste Zeile nach den festen Zeilen und ab der letzten festen Spalte zu einer Zelle zusammengefasst. Dabei wird der Text ausgegeben, der in der linken, oberen Zelle (+ die festen Zellen) steht.Hat Ihr StringGrid beispielsweise zwei feste Zeilen und eine feste Spalte, wird die dritte Zeile ab der zweiten Spalte zu einer Zelle zusammengefasst. Es wird dabei der Text aus der Zelle mit den Koordinaten (1,2) genommen.Der Fokus dieser zusammengelegten Zellen wird allerdings nach wie vor getrennt behandelt.Bis Delphi 3 heißen die Parameter ACol und ARow noch Col bzw. Row.