1 | unit CustomBGRAImageButton;
|
---|
2 |
|
---|
3 | {$mode objfpc}{$H+}
|
---|
4 |
|
---|
5 | interface
|
---|
6 |
|
---|
7 | uses
|
---|
8 | Classes, Controls, Graphics{, Buttons}, Forms, LMessages, BGRABitmap, BGRABitmapTypes,
|
---|
9 | BGRATextFXTypes, types, ExtCtrls;
|
---|
10 |
|
---|
11 | {off $DEFINE DEBUG}
|
---|
12 |
|
---|
13 | type
|
---|
14 |
|
---|
15 | TButtonState =
|
---|
16 | (
|
---|
17 | bsUp, // button is up
|
---|
18 | bsDisabled, // button disabled (grayed)
|
---|
19 | bsDown, // button is down
|
---|
20 | bsExclusive,// button is the only down in his group
|
---|
21 | bsHot // button is under mouse
|
---|
22 | );
|
---|
23 |
|
---|
24 | TCustomBGRAImageButtonRedraw = procedure(Sender: TObject;
|
---|
25 | const ABGRA: TBGRABitmap; AState: TButtonState) of object;
|
---|
26 |
|
---|
27 | TCustomBGRAImageButtonPlaySound = procedure(Sender: TObject;
|
---|
28 | const AFileName: string; AState: TButtonState) of object;
|
---|
29 |
|
---|
30 | { TCustomResizeBitmap }
|
---|
31 |
|
---|
32 | TCustomResizeBitmap = class(TPersistent)
|
---|
33 | protected
|
---|
34 | FOwner: TControl;
|
---|
35 | FBorderWidth: integer;
|
---|
36 | FBorderHeight: integer;
|
---|
37 | FDrawMode: TDrawMode;
|
---|
38 | FResampleMode: TResampleMode;
|
---|
39 | FResampleFilter: TResampleFilter;
|
---|
40 | FEnable: boolean deprecated;
|
---|
41 | FFillLeft: boolean;
|
---|
42 | FFillTop: boolean;
|
---|
43 | FFillRight: boolean;
|
---|
44 | FFillBottom: boolean;
|
---|
45 | FFillCenter: boolean;
|
---|
46 | procedure SetFBorderHeight(AValue: integer);
|
---|
47 | procedure SetFBorderWidth(AValue: integer);
|
---|
48 | procedure SetFDrawMode(AValue: TDrawMode);
|
---|
49 | procedure SetFEnable(AValue: boolean);
|
---|
50 | procedure SetFFillBottom(AValue: boolean);
|
---|
51 | procedure SetFFillCenter(AValue: boolean);
|
---|
52 | procedure SetFFillLeft(AValue: boolean);
|
---|
53 | procedure SetFFillRight(AValue: boolean);
|
---|
54 | procedure SetFFillTop(AValue: boolean);
|
---|
55 | procedure SetFResampleFilter(AValue: TResampleFilter);
|
---|
56 | procedure SetFResampleMode(AValue: TResampleMode);
|
---|
57 | public
|
---|
58 | constructor Create(AOwner: TControl);
|
---|
59 | destructor Destroy; override;
|
---|
60 | published
|
---|
61 | property BorderWidth: integer read FBorderWidth write SetFBorderWidth;
|
---|
62 | property BorderHeight: integer read FBorderHeight write SetFBorderHeight;
|
---|
63 | property DrawMode: TDrawMode read FDrawMode write SetFDrawMode;
|
---|
64 | property ResampleMode: TResampleMode read FResampleMode write SetFResampleMode;
|
---|
65 | property ResampleFilter: TResampleFilter read FResampleFilter
|
---|
66 | write SetFResampleFilter;
|
---|
67 | property Enable: boolean read FEnable write SetFEnable;
|
---|
68 | property FillLeft: boolean read FFillLeft write SetFFillLeft;
|
---|
69 | property FillTop: boolean read FFillTop write SetFFillTop;
|
---|
70 | property FillRight: boolean read FFillRight write SetFFillRight;
|
---|
71 | property FillBottom: boolean read FFillBottom write SetFFillBottom;
|
---|
72 | property FillCenter: boolean read FFillCenter write SetFFillCenter;
|
---|
73 | end;
|
---|
74 |
|
---|
75 | { TCustomBGRAImageButton }
|
---|
76 |
|
---|
77 | TCustomBGRAImageButton = class(TGraphicControl)
|
---|
78 | protected
|
---|
79 | FAnimation: boolean;
|
---|
80 | FAutoSizeExtraX: integer;
|
---|
81 | FAutoSizeExtraY: integer;
|
---|
82 | FBGRA: TBGRABitmap;
|
---|
83 | FBGRADisabled: TBGRABitmap;
|
---|
84 | FBGRADown: TBGRABitmap;
|
---|
85 | FBGRAHot: TBGRABitmap;
|
---|
86 | FBGRAText: TBGRABitmap;
|
---|
87 | FBGRAUp: TBGRABitmap;
|
---|
88 | FBitmapFile: string;
|
---|
89 | FBitmapOptions: TCustomResizeBitmap;
|
---|
90 | FBmp: TBitmap;
|
---|
91 | FBmpState: TButtonState;
|
---|
92 | FChecked: boolean;
|
---|
93 | FCheckedState: TButtonState;
|
---|
94 | FModalResult: TModalResult;
|
---|
95 | FOnPlaySound: TCustomBGRAImageButtonPlaySound;
|
---|
96 | FOnRedraw: TCustomBGRAImageButtonRedraw;
|
---|
97 | FShadow: TBGRATextEffectShadow;
|
---|
98 | FSound: boolean;
|
---|
99 | FSoundEnter, FSoundClick: string;
|
---|
100 | FTextVisible: boolean;
|
---|
101 | FTimer: TTimer;
|
---|
102 | FTimerIncreasing: boolean;
|
---|
103 | FTimerStep: integer;
|
---|
104 | FToggle: boolean;
|
---|
105 | {$IFDEF DEBUG}
|
---|
106 | FInvalidateCount, FUpdateCount, FUpdateCountTxt: integer;
|
---|
107 | {$ENDIF}
|
---|
108 | protected
|
---|
109 | procedure SetFAnimation(AValue: boolean); virtual;
|
---|
110 | procedure SetFAutoSizeExtraX(AValue: integer); virtual;
|
---|
111 | procedure SetFAutoSizeExtraY(AValue: integer); virtual;
|
---|
112 | procedure SetFBitmapFile(AValue: string); virtual;
|
---|
113 | procedure SetFBitmapOptions(AValue: TCustomResizeBitmap); virtual;
|
---|
114 | procedure SetFBmp(const AValue: TBitmap); virtual;
|
---|
115 | procedure SetFChecked(AValue: boolean); virtual;
|
---|
116 | procedure SetFTextVisible(AValue: boolean); virtual;
|
---|
117 | protected
|
---|
118 | procedure DoButtonDown; virtual;
|
---|
119 | procedure DoButtonEnter; virtual;
|
---|
120 | procedure DoButtonLeave; virtual;
|
---|
121 | procedure DoButtonUp; virtual;
|
---|
122 | protected
|
---|
123 | procedure Click; override;
|
---|
124 | procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
|
---|
125 | X, Y: integer); override;
|
---|
126 | procedure MouseEnter; override;
|
---|
127 | procedure MouseLeave; override;
|
---|
128 | procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: integer); override;
|
---|
129 | protected
|
---|
130 | procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer;
|
---|
131 | WithThemeSpace: boolean); override;
|
---|
132 | protected
|
---|
133 | procedure Animate(Sender: TObject); virtual;
|
---|
134 | procedure CMChanged(var Message: TLMessage); message CM_CHANGED; virtual;
|
---|
135 | procedure CMFontChanged(var Message: TLMessage); message CM_FONTCHANGED; virtual;
|
---|
136 | procedure DoPlaySound(AFileName: string); virtual;
|
---|
137 | procedure Paint; override;
|
---|
138 | procedure RealSetText(const Value: TCaption); override;
|
---|
139 | procedure UpdateBmp(Sender: TObject); virtual;
|
---|
140 | procedure UpdateTxt; virtual;
|
---|
141 | protected
|
---|
142 | property ABGRA: TBGRABitmap read FBGRA write FBGRA;
|
---|
143 | property ABGRADisabled: TBGRABitmap read FBGRADisabled write FBGRADisabled;
|
---|
144 | property ABGRADown: TBGRABitmap read FBGRADown write FBGRADown;
|
---|
145 | property ABGRAHot: TBGRABitmap read FBGRAHot write FBGRAHot;
|
---|
146 | property ABGRAText: TBGRABitmap read FBGRAText write FBGRA;
|
---|
147 | property ABGRAUp: TBGRABitmap read FBGRAUp write FBGRAUp;
|
---|
148 | property ABmpState: TButtonState read FBmpState write FBmpState;
|
---|
149 | property ACheckedState: TButtonState read FCheckedState write FCheckedState;
|
---|
150 | property ATimer: TTimer read FTimer write FTimer;
|
---|
151 | property ATimerIncreasing: boolean read FTimerIncreasing write FTimerIncreasing;
|
---|
152 | property ATimerStep: integer read FTimerStep write FTimerStep;
|
---|
153 | public
|
---|
154 | constructor Create(AOwner: TComponent); override;
|
---|
155 | destructor Destroy; override;
|
---|
156 | function BitmapLoadFromFile(AFileName: string): boolean; virtual;
|
---|
157 | function LoadFromFile(AFileName: string): boolean; virtual;
|
---|
158 | function SaveToFile(AFileName: string): boolean; virtual;
|
---|
159 | procedure Assign(Source: TPersistent); override;
|
---|
160 | public
|
---|
161 | property Animation: boolean read FAnimation write SetFAnimation default False;
|
---|
162 | property AutoSizeExtraHorizontal: integer
|
---|
163 | read FAutoSizeExtraX write SetFAutoSizeExtraX default 24;
|
---|
164 | property AutoSizeExtraVertical: integer read FAutoSizeExtraY
|
---|
165 | write SetFAutoSizeExtraY default 8;
|
---|
166 | property Bitmap: TBitmap read FBmp write SetFBmp;
|
---|
167 | property BitmapFile: string read FBitmapFile write SetFBitmapFile;
|
---|
168 | property BitmapOptions: TCustomResizeBitmap
|
---|
169 | read FBitmapOptions write SetFBitmapOptions;
|
---|
170 | property Checked: boolean read FChecked write SetFChecked default False;
|
---|
171 | property ModalResult: TModalResult
|
---|
172 | read FModalResult write FModalResult default mrNone;
|
---|
173 | property OnPlaySound: TCustomBGRAImageButtonPlaySound
|
---|
174 | read FOnPlaySound write FOnPlaySound;
|
---|
175 | property OnRedraw: TCustomBGRAImageButtonRedraw read FOnRedraw write FOnRedraw;
|
---|
176 | property Shadow: TBGRATextEffectShadow read FShadow write FShadow;
|
---|
177 | property Sound: boolean read FSound write FSound default False;
|
---|
178 | property SoundClick: string read FSoundClick write FSoundClick;
|
---|
179 | property SoundEnter: string read FSoundEnter write FSoundEnter;
|
---|
180 | property TextVisible: boolean read FTextVisible write SetFTextVisible default True;
|
---|
181 | property Toggle: boolean read FToggle write FToggle default False;
|
---|
182 | end;
|
---|
183 |
|
---|
184 | implementation
|
---|
185 |
|
---|
186 | {$I custombgraimagebutton.inc}
|
---|
187 |
|
---|
188 | end.
|
---|
189 |
|
---|