MdProgr.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:3k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit MdProgr;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Controls, Forms,
  5.   ComCtrls, DB, DBCtrls;
  6. type
  7.   TMdDbProgress = class(TProgressBar)
  8.   private
  9.     FDataLink: TFieldDataLink;
  10.     function GetDataField: string;
  11.     procedure SetDataField (Value: string);
  12.     function GetDataSource: TDataSource;
  13.     procedure SetDataSource (Value: TDataSource);
  14.     function GetField: TField;
  15.   protected
  16.     // data link event handler
  17.     procedure DataChange (Sender: TObject);
  18.     // useless
  19.     {procedure Notification (AComponent: TComponent;
  20.       Operation: TOperation); override;}
  21.   public
  22.     constructor Create (AOwner: TComponent); override;
  23.     destructor Destroy; override;
  24.     property Field: TField read GetField;
  25.   published
  26.     property DataField: string
  27.       read GetDataField write SetDataField;
  28.     property DataSource: TDataSource
  29.       read GetDataSource write SetDataSource;
  30.   end;
  31. procedure Register;
  32. implementation
  33. uses
  34.   Dialogs, CommCtrl, DbCGrids;
  35. constructor TMdDbProgress.Create (AOwner: TComponent);
  36. begin
  37.   inherited Create (AOwner);
  38.   FDataLink := TFieldDataLink.Create;
  39.   FDataLink.Control := self;
  40.   FDataLink.OnDataChange := DataChange;
  41. end;
  42. destructor TMdDbProgress.Destroy;
  43. begin
  44.   FDataLink.Free;
  45.   FDataLink := nil;
  46.   inherited Destroy;
  47. end;
  48. function TMdDbProgress.GetDataField: string;
  49. begin
  50.   Result := FDataLink.FieldName;
  51. end;
  52. procedure TMdDbProgress.SetDataField (Value: string);
  53. begin
  54.   FDataLink.FieldName := Value;
  55. end;
  56. function TMdDbProgress.GetDataSource: TDataSource;
  57. begin
  58.   Result := FDataLink.DataSource;
  59. end;
  60. procedure TMdDbProgress.SetDataSource (Value: TDataSource);
  61. begin
  62.   FDataLink.DataSource := Value;
  63.   // useless
  64.   {if Value <> nil then
  65.     Value.FreeNotification (Value);}
  66. end;
  67. function TMdDbProgress.GetField: TField;
  68. begin
  69.   Result := FDataLink.Field;
  70. end;
  71. // data link event handler
  72. procedure TMdDbProgress.DataChange (Sender: TObject);
  73. begin
  74.   if (FDataLink.Field <> nil) and
  75.       (FDataLink.Field is TNumericField) then
  76.     Position := FDataLink.Field.AsInteger
  77.   else
  78.     Position := Min;
  79. end;
  80. // useless
  81. {procedure TMdDbProgress.Notification (AComponent: TComponent;
  82.   Operation: Toperation);
  83. begin
  84.   inherited Notification (AComponent, Operation);
  85.   if (Operation = opRemove) and (FDataLink <> nil) and
  86.     (AComponent = FDataLink.DataSource) then
  87.   begin
  88.     FDataLink.DataSource := nil;
  89.     ShowMessage ('Data source set to nil');
  90.   end
  91.   else if (Operation = opRemove) and (FDataLink <> nil) and
  92.     (FDataLink.DataSource = nil) then
  93.   begin
  94.     ShowMessage ('Data source was already nil');
  95.   end;
  96. end;}
  97. procedure Register;
  98. begin
  99.   RegisterComponents('Md', [TMdDbProgress]);
  100. end;
  101. end.