// Es wird gezeigt, wie man bei einem TStringGrid komplette Spalten
// und/oder Zeilen ein- und ausblenden bzw. löschen und einfügen kann.



// Getestet mit D4 unter XP


// 1. Spalten ein- und ausblenden:
//    Ist eine Spalte sichtbar, wird sie ausgeblendet. Ist sie bereits
//    ausgeblendet, dann wird sie
(in Standard-Breite) wieder eingeblendet.

procedure SpalteBlenden(sg: TStringgrid; Spalte: integer); 
begin 
  if (spalte < sg.colcount) and (spalte >= 0) 
    then begin 
    if sg.colwidths[Spalte] <= abs(sg.GridlineWidth) then 
      sg.colwidths[Spalte] := sg.DefaultColWidth 
    else sg.colwidths[Spalte] := -sg.GridlineWidth; 
  end; 
end; 


// Beispielaufruf 
procedure TForm1.Button15Click(Sender: TObject); 
begin 
  SpalteBlenden(StringGrid1, 2); 
end; 

// ----------------------------------------------------------

// 2. Zeilen ein- und ausblenden:
//   
(Etwas aufwendiger als bei Spalten)
//    Ist eine Zeile sichtbar, wird sie ausgeblendet. Ist sie bereits
//    ausgeblendet, dann wird sie
(in Standard-Höhe) wieder eingeblendet.

procedure ZeileBlenden(sg: TStringgrid; Zeile: integer); 
begin 
  if (Zeile < sg.rowcount) and (Zeile >= 0) 
    then begin 
    if sg.rowheights[Zeile] <= abs(sg.GridlineWidth) then 
      sg.rowheights[Zeile] := sg.DefaultRowHeight 
    else sg.rowheights[Zeile] := -sg.GridlineWidth; 
  end; 
end; 
 
// (Doppelklick im Objektinspektor)
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
  Rect: TRect; State: TGridDrawState); 
var diff: integer; 
begin 
  with TStringGrid(Sender) do begin 
    if (GridlineWidth > 0) and (ARow > 0) and 
      (RowHeights[ARow - 1] <= GridlineWidth) 
      then begin 
      diff := (GridlineWidth + 1) div 2; 
      if ACol < FixedCols then 
        canvas.pen.color := clblack else 
        canvas.pen.color := clsilver; 
      canvas.pen.width := GridlineWidth; 
      canvas.moveto(rect.left, rect.top - diff); 
      canvas.lineto(rect.right, rect.top - diff); 
    end; 
  end; 
end; 
 
 
// Beispielaufruf 
procedure TForm1.Button16Click(Sender: TObject); 
begin 
  ZeileBlenden(StringGrid1, 3); 
end; 

// ----------------------------------------------------------

// 3. Spalten löschen:

procedure SpalteWeg(sg: TStringgrid; Spalte: integer); 
var 
  x, y: integer; 
begin 
  if (spalte < sg.colcount) and (spalte >= 0) 
    then begin 
    for y := 0 to sg.rowcount - 1 do 
      for x := Spalte to sg.colcount - 2 do 
        sg.cells[x, y] := sg.cells[x + 1, y]; 
    sg.colcount := sg.colcount - 1; 
  end; 
end; 
 
 
// Beispielaufruf 
procedure TForm1.Button15Click(Sender: TObject); 
begin 
  SpalteWeg(StringGrid1, 1); 
end; 

// ----------------------------------------------------------

// 3. Spalten einfügen:

procedure LeereSpalte(sg: TStringgrid; Spalte: integer); 
var 
  x, y: integer; 
begin 
  if (spalte <= sg.colcount) and (spalte >= 0) 
    then begin 
    sg.colcount := sg.colcount + 1; 
    for y := 0 to sg.rowcount - 1 do 
      for x := sg.colcount - 1 downto Spalte + 1 do 
        sg.cells[x, y] := sg.cells[x - 1, y]; 
    sg.cols[Spalte].text := ''; 
  end; 
end; 
 
 
// Beispielaufruf 
procedure TForm1.Button15Click(Sender: TObject); 
begin 
  leereSpalte(StringGrid1, 1); 
end; 

// ----------------------------------------------------------

// 4. Zeilen löschen:

procedure ZeileWeg(sg: TStringgrid; Zeile: integer); 
var 
  x, y: integer; 
begin 
  if (Zeile < sg.rowcount) and (Zeile >= 0) 
    then begin 
    for x := 0 to sg.colcount - 1 do 
      for y := Zeile to sg.rowcount - 2 do 
        sg.cells[x, y] := sg.cells[x, y + 1]; 
    sg.rowcount := sg.rowcount - 1; 
  end; 
end; 
 
 
// Beispielaufruf 
procedure TForm1.Button15Click(Sender: TObject); 
begin 
  ZeileWeg(StringGrid1, 4); 
end; 

// ----------------------------------------------------------

// 4. Zeilen einfügen:

procedure LeereZeile(sg: TStringgrid; Zeile: integer); 
var 
  x, y: integer; 
begin 
  if (Zeile <= sg.rowcount) and (Zeile >= 0) 
    then begin 
    sg.rowcount := sg.rowcount + 1; 
    for x := 0 to sg.colcount - 1 do 
      for y := sg.rowcount - 1 downto Zeile + 1 do 
        sg.cells[x, y] := sg.cells[x, y - 1]; 
    sg.rows[Zeile].text := ''; 
  end; 
end; 
  
 
// Beispielaufruf
procedure TForm1.Button15Click(Sender: TObject); 
begin 
  LeereZeile(StringGrid1, 3); 
end; 
 



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke