📄 fcimager.new
字号:
unit fcImager;
{
//
// Components : TfcImager
//
// Copyright (c) 1999 by Woll2Woll Software
// 4/21/99 - RSW - Added CopyToClipboard method
// 8/2/99 - Check if parent is nil in BitmapChange event.
}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
fcCommon, fcBitmap, fcChangeLink, db, dbctrls, stdctrls;
{$i fcIfDef.pas}
type
TfcImagerDrawStyle = (dsNormal, dsCenter, dsStretch, dsTile, dsProportional);
TfcBitmapOptions = class;
TfcRotate = class(TPersistent)
private
FBitmapOptions: TfcBitmapOptions;
FCenterX: Integer;
FCenterY: Integer;
FAngle: Integer;
procedure SetAngle(Value: Integer);
procedure SetCenterX(Value: Integer);
procedure SetCenterY(Value: Integer);
public
constructor Create(BitmapOptions: TfcBitmapOptions);
published
property CenterX: Integer read FCenterX write SetCenterX;
property CenterY: Integer read FCenterY write SetCenterY;
property Angle: Integer read FAngle write SetAngle;
end;
TfcAlphaBlend = class(TPersistent)
private
FBitmapOptions: TfcBitmapOptions;
FAmount: Byte;
FBitmap: TfcBitmap;
FChanging: Boolean;
function GetTransparent: Boolean;
procedure SetAmount(Value: Byte);
procedure SetBitmap(Value: TfcBitmap);
procedure SetTransparent(Value: Boolean);
protected
procedure BitmapChanged(Sender: TObject); virtual;
public
constructor Create(BitmapOptions: TfcBitmapOptions);
destructor Destroy; override;
published
property Amount: Byte read FAmount write SetAmount;
property Bitmap: TfcBitmap read FBitmap write SetBitmap;
property Transparent: Boolean read GetTransparent write SetTransparent;
end;
TfcWave = class(TPersistent)
private
FBitmapOptions: TfcBitmapOptions;
FXDiv, FYDiv, FRatio: Integer;
FWrap: Boolean;
procedure SetXDiv(Value: Integer);
procedure SetYDiv(Value: Integer);
procedure SetRatio(Value: Integer);
procedure SetWrap(Value: Boolean);
public
constructor Create(BitmapOptions: TfcBitmapOptions);
published
property XDiv: Integer read FXDiv write SetXDiv;
property YDiv: Integer read FYDiv write SetYDiv;
property Ratio: Integer read FRatio write SetRatio;
property Wrap: Boolean read FWrap write SetWrap;
end;
TfcBitmapOptions = class(TPersistent)
private
FComponent: TComponent;
FAlphaBlend: TfcAlphaBlend;
FColor: TColor;
FContrast: Integer;
FEmbossed: Boolean;
FTintColor: TColor;
FGaussianBlur: Integer;
FGrayScale: Boolean;
FHorizontallyFlipped: Boolean;
FInverted: Boolean;
FLightness: Integer;
FRotation: TfcRotate;
FSaturation: Integer;
FSharpen: Integer;
FSponge: Integer;
FTile: Boolean;
FVerticallyFlipped: Boolean;
FWave: TfcWave;
FOnChange: TNotifyEvent;
FOrigPicture: TPicture;
FDestBitmap: TfcBitmap;
FUpdateLock: Integer;
// Property Access methods;
procedure SetColor(Value: TColor);
procedure SetBooleanProperty(Index: Integer; Value: Boolean);
procedure SetTintColor(Value: TColor);
procedure SetIntegralProperty(Index: Integer; Value: Integer);
public
constructor Create(AComponent: TComponent);
destructor Destroy; override;
procedure BeginUpdate; virtual;
procedure Changed; virtual;
procedure EndUpdate;
property DestBitmap: TfcBitmap read FDestBitmap write FDestBitmap;
property OrigPicture: TPicture read FOrigPicture write FOrigPicture;
property Tile: Boolean read FTile write FTile;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
published
property AlphaBlend: TfcAlphaBlend read FAlphaBlend write FAlphaBlend;
property Color: TColor read FColor write SetColor;
property Contrast: Integer index 4 read FContrast write SetIntegralProperty;
property Embossed: Boolean index 0 read FEmbossed write SetBooleanProperty;
property TintColor: TColor read FTintColor write SetTintColor;
property GaussianBlur: Integer index 3 read FGaussianBlur write SetIntegralProperty;
property GrayScale: Boolean index 2 read FGrayScale write SetBooleanProperty;
property HorizontallyFlipped: Boolean index 3 read FHorizontallyFlipped write SetBooleanProperty;
property Inverted: Boolean index 1 read FInverted write SetBooleanProperty;
property Lightness: Integer index 0 read FLightness write SetIntegralProperty;
property Rotation: TfcRotate read FRotation write FRotation;
property Saturation: Integer index 1 read FSaturation write SetIntegralProperty;
property Sharpen: Integer index 5 read FSharpen write SetIntegralProperty;
property Sponge: Integer index 2 read FSponge write SetIntegralProperty;
property VerticallyFlipped: Boolean index 4 read FVerticallyFlipped write SetBooleanProperty;
property Wave: TfcWave read FWave write FWave;
end;
TfcCustomImager = class(TCustomControl)
private
{ Private declarations }
FAutoSize: Boolean;
FBitmapOptions: TfcBitmapOptions;
FDrawStyle: TfcImagerDrawStyle;
FEraseBackground: Boolean;
FPreProcess: Boolean;
FWorkBitmap: TfcBitmap;
FPicture: TPicture;
FChangeLinks: TList;
FRespectPalette: boolean;
FTransparent: boolean; // Keep track in component instead of in picture
// This helps databound case support transparency
FWinControl: TWinControl;
// FFocusable: boolean;
FOnKeyPress: TKeyPressEvent;
FOnKeyDown, FOnKeyUp: TKeyEvent;
// FTabStop: boolean;
// procedure SetTabStop(value: boolean);
function GetRespectPalette: Boolean;
function GetSmoothStretching: Boolean;
function GetTransparent: Boolean;
function GetTransparentColor: TColor;
procedure SetAutoSize(Value: Boolean);
procedure SetDrawStyle(Value: TfcImagerDrawStyle);
procedure SetEraseBackground(Value: Boolean);
procedure SetPreProcess(Value: Boolean);
procedure SetPicture(Value: TPicture);
procedure SetRespectPalette(Value: Boolean);
procedure SetSmoothStretching(Value: Boolean);
procedure SetTransparent(Value: Boolean);
procedure SetTransparentColor(Value: TColor);
function GetDrawRect: TRect;
procedure NotifyChanges;
// procedure SetFocusable(Value: boolean);
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBkgnd;
protected
// Function CreateImagerWinControl: TWinControl; virtual;
procedure SetParent(Value: TWinControl); override;
procedure BitmapOptionsChange(Sender: TObject); virtual;
procedure BitmapChange(Sender: TObject); virtual;
procedure UpdateAutoSize; virtual;
procedure Loaded; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure Paint; override;
procedure WndProc(var Message: TMessage); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure KeyUp(var Key: Word; Shift: TShiftState); virtual;
procedure KeyDown(var Key: Word; Shift: TShiftState); virtual;
procedure KeyPress(var Key: Char); virtual;
procedure DoEnter; virtual;
procedure DoExit; virtual;
property EraseBackground: Boolean read FEraseBackground write SetEraseBackground default True;
public
UpdatingAutoSize: Boolean;
InSetBounds: boolean;
Patch: Variant;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function PictureEmpty: Boolean; virtual;
procedure Invalidate; override;
procedure RegisterChanges(ChangeLink: TfcChangeLink); virtual;
procedure Resized; virtual;
procedure UpdateWorkBitmap; virtual;
procedure UnRegisterChanges(ChangeLink: TfcChangeLink); virtual;
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
procedure CopyToClipboard; virtual;
procedure PasteFromClipboard; virtual;
procedure CutToClipboard; virtual;
property Align;
property AutoSize: Boolean read FAutoSize write SetAutoSize;
property BitmapOptions: TfcBitmapOptions read FBitmapOptions write FBitmapOptions;
property DrawStyle: TfcImagerDrawStyle read FDrawStyle write SetDrawStyle;
property PreProcess: Boolean read FPreProcess write SetPreProcess;
property Picture: TPicture read FPicture write SetPicture;
property RespectPalette: Boolean read GetRespectPalette write SetRespectPalette default True;
property SmoothStretching: Boolean read GetSmoothStretching write SetSmoothStretching;
property Transparent: Boolean read GetTransparent write SetTransparent;
property TransparentColor: TColor read GetTransparentColor write SetTransparentColor;
property WorkBitmap: TfcBitmap read FWorkBitmap;
// property Focusable: boolean read FFocusable write SetFocusable;
// property TabStop: boolean read FTabStop write SetTabStop;
property OnKeyPress : TKeyPressEvent read FOnKeyPress write FOnKeyPress;
property OnKeyDown : TKeyEvent read FOnKeyDown write FOnKeyDown;
property OnKeyUp : TKeyEvent read FOnKeyUp write FOnKeyUp;
end;
TfcImager = class(TfcCustomImager)
published
{ Published declarations }
property Align;
property AutoSize;
property BitmapOptions;
property DrawStyle;
property Picture;
property PreProcess;
property RespectPalette;
property SmoothStretching;
property Transparent;
property TransparentColor;
property Visible;
// property Focusable;
property Anchors;
property Constraints;
property OnEndDock;
property OnStartDock;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
property TabStop;
property OnKeyPress;
property OnKeyDown;
property OnKeyUp;
end;
TfcDBImager = class(TfcCustomImager)
private
FDataLink: TFieldDataLink;
FPictureLoaded: boolean;
FAutoDisplay: Boolean;
procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
procedure DataChange(Sender: TObject);
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
function GetReadOnly: Boolean;
procedure SetReadOnly(Value: Boolean);
procedure UpdateData(Sender: TObject);
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure SetAutoDisplay(Value: Boolean);
protected
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure LoadPicture; virtual;
procedure KeyPress(var Key: Char); override;
procedure DoExit; override;
procedure Paint; override;
procedure BitmapChange(Sender: TObject); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure CopyToClipboard; override;
procedure PasteFromClipboard; override;
procedure CutToClipboard; override;
published
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property AutoDisplay: Boolean read FAutoDisplay write SetAutoDisplay default True;
published
{ Published declarations }
property Align;
property AutoSize;
property BitmapOptions;
property DrawStyle;
property Picture;
property PreProcess;
property RespectPalette;
property SmoothStretching;
property TabStop;
property Transparent;
property TransparentColor;
property Visible;
property Enabled;
// property Focusable;
property Anchors;
property Constraints;
property OnEndDock;
property OnStartDock;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
property OnKeyPress;
property OnKeyDown;
property OnKeyUp;
end;
implementation
uses clipbrd;
constructor TfcRotate.Create(BitmapOptions: TfcBitmapOptions);
begin
inherited Create;
FCenterX := -1;
FCenterY := -1;
FBitmapOptions := BitmapOptions;
end;
procedure TfcRotate.SetCenterX(Value: Integer);
begin
if FCenterX <> Value then
begin
FCenterX := Value;
FBitmapOptions.Changed;
end;
end;
procedure TfcRotate.SetCenterY(Value: Integer);
begin
if FCenterY <> Value then
begin
FCenterY := Value;
FBitmapOptions.Changed;
end;
end;
procedure TfcRotate.SetAngle(Value: Integer);
begin
if FAngle <> Value then
begin
FAngle := Value;
FBitmapOptions.Changed;
end;
end;
constructor TfcAlphaBlend.Create(BitmapOptions: TfcBitmapOptions);
begin
inherited Create;
FBitmapOptions := BitmapOptions;
FBitmap := TfcBitmap.Create;
// FBitmap.OnChange := BitmapChanged;
end;
destructor TfcAlphaBlend.Destroy;
begin
FBitmap.Free;
inherited;
end;
procedure TfcAlphaBlend.BitmapChanged(Sender: TObject);
begin
if FChanging then Exit;
FChanging := True;
FBitmapOptions.Changed;
FChanging := False;
end;
function TfcAlphaBlend.GetTransparent: Boolean;
begin
result := Bitmap.Transparent;
end;
procedure TfcAlphaBlend.SetTransparent(Value: Boolean);
begin
Bitmap.Transparent := Value;
end;
procedure TfcAlphaBlend.SetAmount(Value: Byte);
begin
if FAmount <> Value then
begin
FAmount := Value;
FBitmapOptions.Changed;
end;
end;
procedure TfcAlphaBlend.SetBitmap(Value: TfcBitmap);
begin
FBitmap.Assign(Value);
end;
constructor TfcWave.Create(BitmapOptions: TfcBitmapOptions);
begin
inherited Create;
FBitmapOptions := BitmapOptions;
end;
procedure TfcWave.SetXDiv(Value: Integer);
begin
if FXDiv <> Value then
begin
FXDiv := Value;
FBitmapOptions.Changed;
end;
end;
procedure TfcWave.SetYDiv(Value: Integer);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -