Scalabium Software |
|
Knowledge for your independence'. | |
Home Delphi and C++Builder tips |
#137: How can I create a disabled bitmap from original? |
|
After some delay when I released a lot of new versions/components I want to post a new tip:-) 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. 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...
|
|
Copyright© 1998-2024, Scalabium
Software. All rights reserved. |