// Es werden verschiedene Spalten in einem Stringgrid rechtsbündig
// ausgerichtet. Zusätzlich werden diese auch noch in einer anderen
// Farbe dargestellt.


// Getestet mit D4 unter WinME

Varinate 1: Fixe Spalten und Zeilen werden standardmäßig gezeichnet

var 
  spalten: set of 1..5; // z.B. 
 
const 
  farbe1: TColor = clwhite; 
  farbe2: TColor = $DDEEFF; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  stringgrid1.defaultdrawing := true; 
  spalten := [1, 4]; // Spalte 1 und 4 wird jeweils rechtsbündig 
end; 
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
  Rect: TRect; State: TGridDrawState); 
  procedure zelle(f: TColor; ausr: uint); 
  begin 
    with stringgrid1 do begin 
      canvas.brush.color := f; 
      canvas.fillrect(rect); 
      inc(rect.left, 2); dec(rect.right, 2); 
      drawtext(canvas.handle, pchar(cells[acol, arow]), length(cells[acol, arow]), 
        rect, DT_SINGLELINE or DT_VCENTER or ausr); 
    end; 
  end; 
begin 
  if (arow >= StringGrid1.Fixedrows) and (acol >= StringGrid1.Fixedcols) 
    then begin 
    if acol in spalten then zelle(farbe2, DT_RIGHT) 
    else zelle(farbe1, DT_LEFT) 
  end; 
end;


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

Varinate 2: Fixe Spalten und Zeilen werden selbst gezeichnet (schneller)

const 
  farbe1: TColor = clwhite; 
  farbe2: TColor = $AACCFF; 
  farbe3: TColor = clBtnFace; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  stringgrid1.defaultdrawing := false; 
end; 
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
  Rect: TRect; State: TGridDrawState); 
  procedure zelle(f: TColor; ausr: uint); 
  begin 
    with stringgrid1 do begin 
      canvas.brush.color := f; 
      canvas.fillrect(rect); 
      inc(rect.left, 2); dec(rect.right, 2); 
      drawtext(canvas.handle, pchar(cells[acol, arow]), length(cells[acol, arow]), 
        rect, DT_SINGLELINE or ausr); 
    end; 
  end; 
begin 
  if (arow < StringGrid1.Fixedrows) or (acol < StringGrid1.Fixedcols) 
    then zelle(farbe3, DT_LEFT or DT_TOP) else begin 
    if acol in [1, 4] then zelle(farbe2, DT_RIGHT or DT_VCENTER) 
    else zelle(farbe1, DT_LEFT or DT_VCENTER) 
  end; 
end; 


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke