// 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;
|