// Mit diesem Code
kann man für "TSpeedButton" oder "TBitBtn" Bitmaps für
// den Zustand "disabled" erstellen, falls einem die automatisch erzeugten
// Bilder nicht gefallen. Bedingung ist, dass das Pixel links unten zum
// Untergrund und nicht zur Abbildung zählt.
// Getestet mit D4 unter XP
|
> |
|
|
|
|
> |
|
> |
|
|
Bitmap |
|
automatisch |
|
Bitmap |
|
DisabledPic() |
|
Ergebnis |
var
schwelle: byte = 96;
procedure DisabledPic(src, dst: TBitmap);
var
hlp: TBitmap;
x, y: integer;
c, h, d: TColor;
function grau(f: TColor): byte;
begin
f := ColorToRGB(f);
result := (f and $FF + f and $FF00 shr 8 + f and $FF0000 shr 20) div 3;
end;
function prf(f: TColor): TColor;
begin
f := ColorToRGB(f);
if f = c then begin
if f and $FF < $FF then
Result := f + 1 else Result := f - 1;
end else Result := f;
end;
begin
c := src.canvas.pixels[src.width - 1, src.height - 1];
h := prf(clBtnHighLight);
d := prf(clBtnShadow);
hlp := TBitmap.create;
hlp.width := src.width + 1;
hlp.height := src.height + 1;
hlp.canvas.brush.color := c;
hlp.canvas.fillrect(hlp.canvas.cliprect);
for x := 0 to src.width - 1 do
for y := 0 to src.height - 1 do
if (src.canvas.pixels[x, y] <> c) and
(grau(src.canvas.pixels[x, y]) < schwelle) then begin
hlp.canvas.Pixels[x + 1, y + 1] := h;
hlp.canvas.Pixels[x, y] := d;
end;
dst.height := src.height;
dst.width := src.width * 2;
dst.canvas.draw(0, 0, src);
dst.canvas.draw(src.width, 0, hlp);
hlp.free;
end;
// Beispielaufruf
procedure TForm1.Button2Click(Sender: TObject);
var bm, bm2: TBitmap;
begin
if SpeedButton1.NumGlyphs = 1 then begin
bm := TBitmap.create;
bm2 := TBitmap.create;
bm.assign(SpeedButton1.Glyph);
DisabledPic(bm, bm2);
SpeedButton1.Glyph.assign(bm2);
SpeedButton1.NumGlyphs := 2;
// SpeedButton1.enabled := false;
bm.free;
bm2.free;
end;
end;
|