Title: to create disabled bitmap
Question: How can I create a disabled bitmap from original?
Answer:
Everyone from you saw that standard TSpeedButton allow to show a loaded glyph in "disabled" state when your original glyph will be converted into gray-scheme.
Sometimes to create similar bitmap is useful not only for TSpeedButton.
You can use the next my CreateDisabledBitmap procedure where such "disabled" bitmap (Destination parameter) will be created from your original bitmap (Source).
procedure CreateDisabledBitmap(Source, Destination: TBitmap);
const
ROP_DSPDxax = $00E20746;
var
DDB, MonoBmp: TBitmap;
IWidth, IHeight: Integer;
IRect: TRect;
begin
IWidth := Source.Width;
IHeight := Source.Height;
Destination.Width := IWidth;
Destination.Height := IHeight;
IRect := Rect(0, 0, IWidth, IHeight);
Destination.Canvas.Brush.Color := clBtnFace;
Destination.Palette := CopyPalette(Source.Palette);
MonoBmp := nil;
DDB := nil;
try
MonoBmp := TBitmap.Create;
DDB := TBitmap.Create;
DDB.Assign(Source);
DDB.HandleType := bmDDB;
{ Create a disabled version }
with MonoBmp do
begin
Assign(Source);
HandleType := bmDDB;
Canvas.Brush.Color := clBlack;
Width := IWidth;
if Monochrome then
begin
Canvas.Font.Color := clWhite;
Monochrome := False;
Canvas.Brush.Color := clWhite;
end;
Monochrome := True;
end;
with Destination.Canvas do
begin
Brush.Color := clBtnFace;
FillRect(IRect);
Brush.Color := clBtnHighlight;
SetTextColor(Handle, clBlack);
SetBkColor(Handle, clWhite);
BitBlt(Handle, 1, 1, IWidth, IHeight,
MonoBmp.Canvas.Handle, 0, 0, ROP_DSPDxax);
Brush.Color := clBtnShadow;
SetTextColor(Handle, clBlack);
SetBkColor(Handle, clWhite);
BitBlt(Handle, 0, 0, IWidth, IHeight,
MonoBmp.Canvas.Handle, 0, 0, ROP_DSPDxax);
end;
finally
DDB.Free;
MonoBmp.Free;
end;
Source.Dormant;
end;
Sample of use:
procedure TfrmMain.ButtonClick(Sender: TObject);
var
Destination: TBitmap;
begin
Destination := TBitmap.Create;
try
CreateDisabledBitmap(Image1.Picture.Bitmap, Destination);
Image2.Picture.Bitmap.Assign(Destination);
finally
Destination.Free
end
end;
where Image1 is TImage where you have an original bitmap and
TImage2 will a container for created disabled bitmap.
Hope this tip will be useful for someone from you...