initial commit
[rofl0r-KOL.git] / mckCtrlDraw.pas
blobaa5865ae66a8b5e5fa40299b555f6c51ebff02c5
2 by Roman Vorobets
4 Â mckCtrls y TKOLButton,TKOLLabel,TEditbox,TCheckBox è TRadioBox íyæíî
5 äîáàâèòü ìåòîä
7 TKOL#####=class(TKOLControl)
8 ...
9 protected
10 procedure Paint;override;
11 ...
12 end;
14 ...
16 procedure TKOL#####.Paint;
17 begin
18 Draw#####(self,canvas);
19 end;
21 unit mckCtrlDraw;
23 interface
25 uses
26 windows, graphics, mirror, mckctrls, extctrls, classes;
28 procedure DrawButton(_Button:TKOLButton; Canvas:TCanvas);
29 procedure DrawLabel(_Label:TKOLLabel; Canvas:TCanvas);
30 procedure DrawEditbox(_Editbox:TKOLEditbox; Canvas:TCanvas);
31 procedure DrawCheckbox(_Checkbox:TKOLCheckbox; Canvas:TCanvas);
32 procedure DrawRadiobox(_Radiobox:TKOLRadiobox; Canvas:TCanvas);
33 procedure DrawCombobox(_Combobox:TKOLCombobox; Canvas:TCanvas);
35 implementation
37 const
38 TextHFlags:array[TTextAlign] of dword=(DT_LEFT,DT_RIGHT,DT_CENTER);
39 TextVFlags:array[TVerticalAlign] of dword=(DT_TOP,DT_VCENTER,DT_BOTTOM);
40 WordWrapFlags:array[Boolean] of dword=(DT_SINGLELINE,0);
41 CheckFlags:array[Boolean] of dword=(0,DFCS_CHECKED);
43 procedure DrawButton(_Button:TKOLButton; Canvas:TCanvas);
44 var
45 r:trect;
46 s:string;
47 begin
48 with _button,canvas do
49 begin
50 r:=clientrect;
51 s:=caption;
52 drawframecontrol(handle,r,DFC_BUTTON,DFCS_BUTTONPUSH);
53 inflaterect(r,-1,-1);
54 setbkmode(handle,windows.TRANSPARENT);
55 drawtext(handle,pchar(s),length(s),r,texthflags[textalign] or
56 textvflags[verticalalign] or DT_SINGLELINE);
57 end;
58 end;
60 procedure DrawLabel(_Label:TKOLLabel; Canvas:TCanvas);
61 var
62 r:trect;
63 s:string;
64 begin
65 with _label,canvas do
66 begin
67 r:=clientrect;
68 s:=caption;
69 brush.color:=clbtnshadow;
70 framerect(r);
71 setbkmode(handle,windows.TRANSPARENT);
72 drawtext(handle,pchar(s),length(s),r,texthflags[textalign] or
73 textvflags[verticalalign] or wordwrapflags[wordwrap]);
74 end;
75 end;
77 procedure DrawEditbox(_Editbox:TKOLEditbox; Canvas:TCanvas);
78 var
79 r:trect;
80 s:string;
81 begin
82 with _editbox,canvas do
83 begin
84 r:=clientrect;
85 s:=caption;
86 if hasborder then
87 begin
88 frame3d(canvas,r,clbtnshadow,clbtnhighlight,1);
89 frame3d(canvas,r,clblack,cl3dlight,1);
90 end;
91 setbkmode(handle,windows.TRANSPARENT);
92 drawtext(handle,pchar(s),length(s),r,
93 texthflags[textalign] or DT_SINGLELINE);
94 end;
95 end;
97 procedure DrawCheckbox(_Checkbox:TKOLCheckbox; Canvas:TCanvas);
98 var
99 r,rr:trect;
100 s:string;
101 begin
102 with _checkbox,canvas do
103 begin
104 r:=clientrect;
105 s:=caption;
107 {brush.color:=clbtnshadow;
108 framerect(r);}
109 if _Checkbox.HasBorder then
110 DrawEdge( Canvas.Handle, r, EDGE_RAISED, BF_RECT or BF_MIDDLE );
112 rr:=bounds(r.left+2,(r.bottom+r.top-13) div 2,13,13);
113 drawframecontrol(handle,rr,DFC_BUTTON,
114 DFCS_BUTTONCHECK or checkflags[checked]);
115 inc(r.left,17);
116 setbkmode(handle,windows.TRANSPARENT);
117 drawtext(handle,pchar(s),length(s),r,DT_VCENTER or DT_SINGLELINE);
118 end;
119 end;
121 procedure DrawRadiobox(_Radiobox:TKOLRadiobox; Canvas:TCanvas);
123 r,rr:trect;
124 s:string;
125 begin
126 with _radiobox,canvas do
127 begin
128 r:=clientrect;
129 s:=caption;
131 {brush.color:=clbtnshadow;
132 framerect(r);}
133 if _Radiobox.HasBorder then
134 DrawEdge( Canvas.Handle, r, EDGE_RAISED, BF_RECT or BF_MIDDLE );
136 rr:=bounds(r.left+2,(r.bottom+r.top-13) div 2,13,13);
137 drawframecontrol(handle,rr,DFC_BUTTON,
138 DFCS_BUTTONRADIO or checkflags[checked]);
139 inc(r.left,17);
140 setbkmode(handle,windows.TRANSPARENT);
141 drawtext(handle,pchar(s),length(s),r,DT_VCENTER or DT_SINGLELINE);
142 end;
143 end;
145 procedure DrawCombobox1(_Combobox:TKOLCombobox; Canvas:TCanvas;
146 r: TRect);
148 w:integer;
149 s:string;
150 begin
151 with _Combobox,canvas do
152 begin
153 if (curindex>=0) and (curindex<items.count) then s:=items[curindex] else
154 s:='';
155 if hasborder then
156 begin
157 frame3d(canvas,r,clbtnshadow,clbtnhighlight,1);
158 frame3d(canvas,r,clblack,cl3dlight,1);
159 end;
160 if not( coSimple in _Combobox.Options) then
161 begin
162 w:=getsystemmetrics(SM_CXVSCROLL);
163 drawframecontrol(handle,rect(r.right-w,r.top,r.right,r.bottom),DFC_SCROLL,
164 DFCS_SCROLLCOMBOBOX);
165 dec(r.right,w);
166 end;
167 setbkmode(handle,windows.TRANSPARENT);
168 if s<>'' then drawtext(handle,pchar(s),length(s),r,DT_VCENTER or
169 DT_SINGLELINE);
170 end;
171 end;
173 procedure DrawCombobox(_Combobox:TKOLCombobox; Canvas:TCanvas);
174 var R, R1: TRect;
175 Bot: Integer;
176 I: Integer;
177 S: String;
178 begin
179 if coSimple in _Combobox.Options then
180 begin
181 R := _Combobox.ClientRect;
182 Bot := R.Bottom;
183 R.Bottom := R.Top + Canvas.TextHeight( 'A' ) + 8;
184 DrawCombobox1( _Combobox, Canvas, R );
185 R.Top := R.Bottom;
186 R.Bottom := Bot;
187 frame3d(Canvas,R,clbtnshadow,clbtnhighlight,1);
188 frame3d(Canvas,R,clblack,cl3dlight,1);
189 Inc( R.Left, 2 );
190 setbkmode(Canvas.Handle,windows.TRANSPARENT);
191 R1 := R;
192 for I := 0 to _Combobox.Items.Count-1 do
193 begin
194 S := _Combobox.Items[ I ];
195 R1.Bottom := R1.Top + Canvas.TextHeight( 'A' ) + 4;
196 if R1.Bottom > R.Bottom then
197 R1.Bottom := R.Bottom;
198 drawtext(Canvas.Handle,pchar(S),length(s),r1,
199 {DT_VCENTER or} DT_SINGLELINE);
200 R1.Top := R1.Bottom;
201 if R1.Top >= R.Bottom then
202 begin
203 R.Left := R.Right - getsystemmetrics( SM_CXVSCROLL );
204 //DrawScrollBar_Vertical( Canvas.Handle, R );
205 break;
206 end;
207 end;
209 else
210 begin
211 DrawCombobox1( _Combobox, Canvas, _Combobox.ClientRect );
212 end;
213 end;
215 end.