source: trunk/Packages/CevoComponents/EOTButton.pas

Last change on this file was 554, checked in by chronos, 3 weeks ago
  • Added: TButtonG class as a button class component referencing TGraphicSet item.
  • Modified: Code cleanup.
File size: 2.5 KB
Line 
1unit EOTButton;
2
3interface
4
5uses
6 ButtonBase, Classes, SysUtils, LCLIntf, LCLType,
7 {$IFDEF DPI}Dpi.Graphics{$ELSE}Graphics{$ENDIF};
8
9const
10 eotBlinkOff = -1;
11 eotCancel = 0;
12 eotGray = 1;
13 eotBlinkOn = 2;
14 eotBackToNego = 3;
15
16type
17 // EndOfTurn button
18 TEOTButton = class(TButtonBase)
19 private
20 FTemplate: TBitmap;
21 FIndex: Integer;
22 procedure SetIndex(X: Integer);
23 protected
24 Buffer, Back: TBitmap;
25 procedure Paint; override;
26 public
27 constructor Create(AOwner: TComponent); override;
28 destructor Destroy; override;
29 procedure SetButtonIndexFast(X: Integer);
30 procedure SetBack(Canvas: TCanvas; X, Y: Integer);
31 property Template: TBitmap read FTemplate write FTemplate;
32 published
33 property Visible;
34 property ButtonIndex: Integer read FIndex write SetIndex;
35 property OnClick;
36 end;
37
38procedure Register;
39
40
41implementation
42
43uses
44 ScreenTools;
45
46procedure Register;
47begin
48 RegisterComponents('C-evo', [TEOTButton]);
49end;
50
51constructor TEOTButton.Create;
52begin
53 inherited;
54 Buffer := TBitmap.Create;
55 Buffer.PixelFormat := TPixelFormat.pf24bit;
56 Buffer.SetSize(48, 48);
57 Buffer.Canvas.FillRect(0, 0, Buffer.Width, Buffer.Height);
58 Back := TBitmap.Create;
59 Back.PixelFormat := TPixelFormat.pf24bit;
60 Back.SetSize(48, 48);
61 Back.Canvas.FillRect(0, 0, Back.Width, Back.Height);
62 ShowHint := True;
63 SetBounds(0, 0, 48, 48);
64end;
65
66destructor TEOTButton.Destroy;
67begin
68 FreeAndNil(Buffer);
69 FreeAndNil(Back);
70 inherited;
71end;
72
73procedure TEOTButton.Paint;
74begin
75 with Canvas do
76 if FGraphic <> nil then begin
77 UnshareBitmap(Buffer);
78 BitBltBitmap(Buffer, 0, 0, 48, 48, Back, 0, 0);
79 ImageOp_CBC(Buffer, Template, 0, 0, 133, 149 + 48 * Byte(FDown), 48, 48,
80 $000000, $FFFFFF);
81 if FIndex >= 0 then
82 ImageOp_CBC(Buffer, Template, 8, 8, 1 + 32 * Byte(FIndex), 246, 32, 32,
83 $000000, $FFFFFF);
84 BitBltCanvas(Canvas, 0, 0, 48, 48, Buffer.Canvas, 0, 0);
85 end else begin
86 Brush.Color := $0000FF;
87 FrameRect(Rect(0, 0, 48, 48));
88 end;
89end;
90
91procedure TEOTButton.SetIndex(X: Integer);
92begin
93 if X <> FIndex then begin
94 FIndex := X;
95 Invalidate;
96 end;
97end;
98
99procedure TEOTButton.SetButtonIndexFast(X: Integer);
100begin
101 if Visible and (X <> FIndex) then begin
102 FIndex := X;
103 try
104 Paint;
105 except
106 end;
107 end;
108end;
109
110procedure TEOTButton.SetBack(Canvas: TCanvas; X, Y: Integer);
111begin
112 BitBltCanvas(Back.Canvas, 0, 0, 48, 48, Canvas, X, Y);
113end;
114
115end.
Note: See TracBrowser for help on using the repository browser.