Mega Code Archive

 
Categories / Delphi / Graphic
 

To create disabled bitmap

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...