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



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke