home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 February / Chip_2002-02_cd1.bin / zkuste / delphi / kolekce / d45 / delfi_components.exe / Delfi_gauge.pas < prev    next >
Pascal/Delphi Source File  |  2001-11-20  |  8KB  |  318 lines

  1. // unit Delfi_gauge
  2. //
  3. // new gauge with more properties, styles and events ...
  4. //
  5. //
  6. // version 1.0  2001 Delfi
  7. //
  8. // this component is freeware for non-commercial applications you use it on your own responsibility !
  9. // you may modify this unit only for non-commercial applications
  10. // you may not change the AUTHOR you must leave this comment here !
  11. //
  12. // if you improved this component add your comment after this line
  13.  
  14. unit Delfi_gauge;
  15.  
  16. interface
  17.  
  18. uses
  19.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
  20.  
  21. type
  22.   tKind_ = (Text, Bar, VerticalBar, Line, VerticalLine, pie_);
  23.   tstyle_ = (_3d, flat, none);
  24.   TDelfi_gauge = class(TCustomControl)
  25.   private
  26.     { Private declarations }
  27.     fkind:tKind_;
  28.     fstyle_:tstyle_;
  29.     ftext:boolean;
  30.     freverse:boolean;
  31.     fposition:integer;
  32.     fmax:integer;
  33.     fmin:integer;
  34.     fcolor:tcolor;
  35.     fbarcolor:tcolor;
  36.     fbitmap:tbitmap;
  37.     procedure SetKind(Value: tKind_);
  38.     procedure Setstyle(Value: tstyle_);
  39.     procedure Settext(Value: boolean);
  40.     procedure Setreverse(Value: boolean);
  41.     procedure Setposition(Value: integer);
  42.     procedure Setmax(Value: integer);
  43.     procedure Setmin(Value: integer);
  44.     procedure Setcolor(Value: tcolor);
  45.     procedure Setbarcolor(Value: tcolor);
  46.     procedure Setbitmap(Value: tbitmap);
  47.     function GetPercentDone: Longint;
  48.   protected
  49.     { Protected declarations }
  50.     procedure CreateParams(var Params: TCreateParams); override;
  51.     procedure Paint; override;
  52.   public
  53.     { Public declarations }
  54.     constructor Create(AOwner: TComponent); override;
  55.     property PercentDone: Longint read GetPercentDone;
  56.   published
  57.     { Published declarations }
  58.     property align;
  59.     property Kind: tkind_ read FKind write SetKind;
  60.     property style: tstyle_ read fstyle_ write Setstyle;
  61.     property text: boolean read ftext write Settext;
  62.     property reverse: boolean read freverse write Setreverse;
  63.     property position: integer read fposition write Setposition;
  64.     property color: tcolor read fcolor write Setcolor;
  65.     property barcolor: tcolor read fbarcolor write Setbarcolor;
  66.     property bitmap: tbitmap read fbitmap write Setbitmap;
  67.     property max: integer read fmax write Setmax;
  68.     property min: integer read fmin write Setmin;
  69.     property ShowHint;
  70.     property ParentShowHint;
  71.     property Onclick;
  72.     property OnMouseDown;
  73.     property OnMouseUp;
  74.     property OnMouseMove;
  75.     property OnDragDrop;
  76.     property OnDragOver;
  77.     property OnEndDock;
  78.     property OnEndDrag;
  79.     property OnExit;
  80.     property OnEnter;
  81.     property OnKeyDown;
  82.     property OnKeyPress;
  83.     property OnKeyUp;
  84.     property TabOrder;
  85.     property TabStop;
  86.     property OnstartDock;
  87.     property OnstartDrag;
  88.     property Visible;
  89.     property Popupmenu;
  90.     property helpcontext;
  91.     property cursor;
  92.     property dragkind;
  93.     property dragmode;
  94.     property dragcursor;
  95.   end;
  96.  
  97. procedure Register;
  98.  
  99. implementation
  100.  
  101. procedure TDelfi_gauge.SetKind(Value: tkind_);
  102. begin
  103. FKind := Value;
  104. RecreateWnd;
  105. end;
  106.  
  107. procedure TDelfi_gauge.setstyle(Value: tstyle_);
  108. begin
  109. fstyle_ := Value;
  110. RecreateWnd;
  111. end;
  112.  
  113. procedure TDelfi_gauge.Settext(Value: boolean);
  114. begin
  115. ftext:=value;
  116. RecreateWnd;
  117. end;
  118.  
  119. procedure TDelfi_gauge.setreverse(Value: boolean);
  120. begin
  121. freverse:=value;
  122. RecreateWnd;
  123. end;
  124.  
  125. procedure TDelfi_gauge.Setposition(Value: integer);
  126. begin
  127. fposition:=value;
  128. RecreateWnd;
  129. end;
  130.  
  131. procedure TDelfi_gauge.Setmax(Value: integer);
  132. begin
  133. fmax:=value;
  134. RecreateWnd;
  135. end;
  136.  
  137. procedure TDelfi_gauge.Setmin(Value: integer);
  138. begin
  139. fmin:=value;
  140. RecreateWnd;
  141. end;
  142.  
  143. function SolveForX(Y, Z: Longint): Longint;
  144. begin
  145. Result := Longint(Trunc( Z * (Y * 0.01) ));
  146. end;
  147.  
  148. function SolveForY(X, Z: Longint): Longint;
  149. begin
  150. if Z = 0 then Result := 0
  151. else Result := Longint(Trunc( (X * 100.0) / Z ));
  152. end;
  153.  
  154. function TDelfi_gauge.GetPercentDone: Longint;
  155. begin
  156. Result :=SolveForY(fposition - fmin, FMax - FMin);
  157. end;
  158.  
  159. procedure TDelfi_gauge.Setcolor(value : tcolor);
  160. begin
  161. fcolor:=value;
  162. Paint;
  163. end;
  164.  
  165. procedure TDelfi_gauge.Setbarcolor(value : tcolor);
  166. begin
  167. fbarcolor:=value;
  168. Paint;
  169. end;
  170.  
  171. procedure TDelfi_gauge.setbitmap(value : tbitmap);
  172. begin
  173. fbitmap.Assign(value);
  174. Paint;
  175. end;
  176.  
  177. constructor TDelfi_gauge.Create(AOwner: TComponent);
  178. begin
  179. inherited Create(AOwner);
  180. controlstyle:=controlstyle + [csOpaque];
  181. Width := 80;
  182. Height := 23;
  183. ftext:=true;
  184. fcolor:=clwhite;
  185. fbarcolor:=clblack;
  186. fbitmap:=tbitmap.Create;
  187. fkind:=bar;
  188. fmax:=100;
  189. end;
  190.  
  191. procedure TDelfi_gauge.Paint;
  192. var
  193. String_: string;
  194. bank:tbitmap;
  195. MiddleX, MiddleY: Integer;
  196. Angle: Double;
  197. painter:integer;
  198. piepainter:integer;
  199. Style_:TBrushStyle;
  200. begin
  201. with Canvas do
  202. begin
  203. Brush.Color := fcolor;
  204. FillRect(clientrect);
  205.  
  206. Style_:=Brush.Style;
  207. Brush.Style := bsClear;
  208. Brush.Style := Style_;
  209.  
  210. Canvas.CopyMode := cmSrcCopy    ;
  211. draw(0,0,fbitmap);
  212.  
  213. pen.color := fbarcolor;
  214. Brush.Color := fbarcolor;
  215.  
  216. if fstyle_ = _3d then piepainter:=4;
  217. if fstyle_ = flat then piepainter:=2;
  218. if fstyle_ = none then piepainter:=0;
  219.  
  220. if fstyle_ = _3d then painter:=3;
  221. if fstyle_ = flat then painter:=2;
  222. if fstyle_ = none then painter:=0;
  223.  
  224. if freverse = false then begin;
  225. if fkind = Bar then FillRect(Rect(0,0,SolveForX(PercentDone,width)-painter, Height));
  226. if fkind = VerticalBar then FillRect(Rect(0,0,width, SolveForX(PercentDone,height)-painter));
  227. if fkind = Line then begin
  228. canvas.MoveTo(SolveForX(PercentDone,width)-painter,0);
  229. canvas.LineTo(SolveForX(PercentDone,width)-painter,Height);
  230. end;
  231. if fkind = VerticalLine then begin
  232. canvas.MoveTo(0,SolveForX(PercentDone,height)-painter);
  233. canvas.LineTo(width,SolveForX(PercentDone,height)-painter);
  234. end;
  235.  
  236. if fkind = pie_ then begin
  237. Brush.Color := Color;
  238. Pen.Width := 1;
  239. Ellipse(0, 0, Width-piepainter, Height-piepainter);
  240. if PercentDone > 0 then begin
  241. MiddleX := Width div 2;
  242. MiddleY := width div 2;
  243. Angle := (Pi * ((PercentDone / 50) + 0.5));
  244. Brush.Color := fbarcolor;
  245. Pie(0, 0, Width-piepainter, Height-piepainter,
  246. Integer(Round(MiddleX * (1 - Cos(Angle)))),
  247. Integer(Round(MiddleY * (1 - Sin(Angle)))), MiddleX, 0);
  248. end;
  249. end;
  250. end;
  251.  
  252. if freverse = true then begin;
  253. if fkind = Bar then FillRect(Rect(width - SolveForX(PercentDone,width),0,width-painter,height-painter));
  254.  
  255. if fkind = VerticalBar then FillRect(Rect(0,height - SolveForX(PercentDone,height)-painter,width,height));
  256.  
  257. if fkind = Line then begin
  258. canvas.MoveTo(width - SolveForX(PercentDone,width)-painter,0);
  259. canvas.LineTo(width - SolveForX(PercentDone,width)-painter,Height);
  260. end;
  261. if fkind = VerticalLine then begin
  262. canvas.MoveTo(0,height - SolveForX(PercentDone,height)-painter);
  263. canvas.LineTo(width,height - SolveForX(PercentDone,height)-painter);
  264. end;
  265.  
  266. if fkind = pie_ then begin
  267. Brush.Color := Color;
  268. Pen.Width := 1;
  269. Ellipse(0, 0, Width-piepainter, Height-piepainter);
  270. if PercentDone > 0 then begin
  271. MiddleX := Width div 2;
  272. MiddleY := width div 2;
  273. Angle := (Pi * ((PercentDone / 50) + 0.5));
  274. Brush.Color := fbarcolor;
  275. Pie(0, 0, Width-piepainter, Height-piepainter,
  276. Integer(Round(MiddleX * (1 - Cos(Angle)))),
  277. Integer(Round(MiddleY * (1 - Sin(Angle)))), MiddleX, 0);
  278. end;
  279. end;
  280. end;
  281.  
  282. end;
  283.  
  284. String_:=inttostr(PercentDone)+ ' %';
  285.  
  286. bank:=tbitmap.create;
  287. bank.canvas.Brush.Style := bsClear;
  288. bank.canvas.Font.Color := clwhite;
  289.  
  290. bank.canvas.Brush.Color := clblack;
  291. bank.canvas.FillRect(clientrect);
  292. bank.Width:=bank.canvas.TextWidth(String_);
  293. bank.height:=bank.canvas.Textheight(String_);
  294.  
  295. if ftext = true then bank.Canvas.textout(0,0,string_);
  296.  
  297. Canvas.CopyMode := cmSrcInvert;
  298. Canvas.Draw(width div 2 - bank.canvas.TextWidth(String_) div 2 , height div 2 - bank.canvas.Textheight(String_) div 2 - painter div 2 , bank);
  299. bank.Free;
  300. end;
  301.  
  302. procedure TDelfi_gauge.CreateParams(var Params: TCreateParams);
  303. begin
  304. inherited;
  305. if fstyle_ = flat then params.ExStyle:=params.ExStyle OR ws_ex_staticedge;
  306. if fstyle_ <> flat then params.ExStyle:=params.ExStyle and not ws_ex_staticedge;
  307.  
  308. if fstyle_ = _3d then params.ExStyle:=params.ExStyle or ws_ex_clientedge;
  309. if fstyle_ <> _3d then params.ExStyle:=params.ExStyle and not ws_ex_clientedge;
  310. end;
  311.  
  312. procedure Register;
  313. begin
  314. RegisterComponents('Delfi', [TDelfi_gauge]);
  315. end;
  316.  
  317. end.
  318.