source: tags/1.3.1/Packages/CevoComponents/ButtonBase.pas

Last change on this file was 431, checked in by chronos, 2 years ago
  • Modified: Changed WindowMode numerical constants to enumeration.
File size: 3.3 KB
Line 
1unit ButtonBase;
2
3interface
4
5uses
6 Classes, Graphics, Controls;
7
8type
9 TButtonBase = class(TGraphicControl)
10 protected
11 FDown: Boolean;
12 FPermanent: Boolean;
13 FGraphic: TBitmap;
14 // FDownSound, FUpSound: string;
15 ClickProc: TNotifyEvent;
16 DownChangedProc: TNotifyEvent;
17 procedure SetDown(x: boolean);
18 // procedure PlayDownSound;
19 // procedure PlayUpSound;
20 procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
21 x, y: integer); override;
22 procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
23 x, y: integer); override;
24 procedure MouseMove(Shift: TShiftState; x, y: integer); override;
25 private
26 Active: boolean;
27 public
28 constructor Create(aOwner: TComponent); override;
29 property Graphic: TBitmap read FGraphic write FGraphic;
30 // property DownSound: string read FDownSound write FDownSound;
31 // property UpSound: string read FUpSound write FUpSound;
32 published
33 property Visible;
34 property Down: boolean read FDown write SetDown;
35 property Permanent: boolean read FPermanent write FPermanent;
36 property OnClick: TNotifyEvent read ClickProc write ClickProc;
37 property OnDownChanged: TNotifyEvent read DownChangedProc
38 write DownChangedProc;
39 end;
40
41implementation
42
43// uses
44// MMSystem;
45
46constructor TButtonBase.Create(aOwner: TComponent);
47begin
48 inherited;
49 // FDownSound:='';
50 // FUpSound:='';
51 FGraphic := nil;
52 Active := false;
53 FDown := false;
54 FPermanent := false;
55 ClickProc := nil;
56end;
57
58procedure TButtonBase.MouseDown(Button: TMouseButton; Shift: TShiftState;
59 x, y: integer);
60begin
61 Active := true;
62 MouseMove(Shift, x, y);
63end;
64
65procedure TButtonBase.MouseUp(Button: TMouseButton; Shift: TShiftState;
66 x, y: integer);
67begin
68 if ssLeft in Shift then
69 exit;
70 MouseMove(Shift, x, y);
71 if Active and FDown then
72 begin
73 // PlayUpSound;
74 Active := false;
75 if FDown <> FPermanent then
76 begin
77 FDown := FPermanent;
78 Invalidate;
79 if @DownChangedProc <> nil then
80 DownChangedProc(self);
81 end;
82 if (Button = mbLeft) and (@ClickProc <> nil) then
83 ClickProc(self);
84 end
85 else
86 begin
87 // if FDown then PlayUpSound;
88 Active := false;
89 if FDown then
90 begin
91 FDown := false;
92 Invalidate;
93 if @DownChangedProc <> nil then
94 DownChangedProc(self);
95 end;
96 end;
97end;
98
99procedure TButtonBase.MouseMove(Shift: TShiftState; x, y: integer);
100begin
101 if Active then
102 if (x >= 0) and (x < Width) and (y >= 0) and (y < Height) then
103 if (ssLeft in Shift) and not FDown then
104 begin
105 { PlayDownSound; }
106 FDown := true;
107 Paint;
108 if @DownChangedProc <> nil then
109 DownChangedProc(self);
110 end
111 else
112 else if FDown and not FPermanent then
113 begin
114 { PlayUpSound; }
115 FDown := false;
116 Paint;
117 if @DownChangedProc <> nil then
118 DownChangedProc(self);
119 end;
120end;
121
122procedure TButtonBase.SetDown(x: boolean);
123begin
124 FDown := x;
125 Invalidate;
126end;
127
128// procedure TButtonBase.PlayDownSound;
129// begin
130// if DownSound<>'' then SndPlaySound(pchar(DownSound),SND_ASYNC)
131// end;
132
133// procedure TButtonBase.PlayUpSound;
134// begin
135// if UpSound<>'' then SndPlaySound(pchar(UpSound),SND_ASYNC)
136// end;
137
138end.
Note: See TracBrowser for help on using the repository browser.