pQRDBBarcode.pas
上传用户:xdwang_66
上传日期:2016-04-26
资源大小:1726k
文件大小:4k
源码类别:

Static控件

开发平台:

Delphi

  1. // =============================================================================
  2. //
  3. // Barcode VCL Component for Quick Report
  4. //
  5. // For Delphi 4/5/6/7, C++ Builder 4/5/6, BDS 2005/2005, Turbo Delphi 2006
  6. //
  7. // Copyright (c) 2001, 2007  Han-soft Software, all rights reserved.
  8. //
  9. // $Rev: 44 $   $Id: pQRDBBarcode.pas 44 2007-01-16 01:16:04Z hanjy $
  10. //
  11. // =============================================================================
  12. unit pQRDBBarcode;
  13. interface
  14. uses
  15.   SysUtils, Classes, Controls, ExtCtrls, pBarCode, DBCtrls, DB, Messages,
  16.   {DBTables,} pQRBarcode;
  17. type
  18.   TQRDBBarcode = class(TQRBarCode)
  19.   private
  20.     { Private declarations }
  21.     FDataLink: TFieldDataLink;
  22.     procedure DataChange(Sender: TObject);
  23.     function  GetDataField: string;
  24.     function  GetDataSource: TDataSource;
  25.     function  GetField: TField;
  26.     function  GetReadOnly: Boolean;
  27.     procedure SetDataField(const Value: string);
  28.     procedure SetDataSource(Value: TDataSource);
  29.     procedure SetReadOnly(Value: Boolean);
  30.     procedure UpdateData(Sender: TObject);
  31.     procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
  32.   protected
  33.     { Protected declarations }
  34.     procedure SetBarcode(const Value: string); override;
  35.     procedure Notification(AComponent: TComponent;
  36.       Operation: TOperation); override;
  37.   public
  38.     { Public declarations }
  39.     constructor Create(AOwner: TComponent); override;
  40.     destructor  Destroy; override;
  41.     function  ExecuteAction(Action: TBasicAction): Boolean; override;
  42.     function  UpdateAction(Action: TBasicAction): Boolean; override;
  43.     property  Field: TField read GetField;
  44.   published
  45.     { Published declarations }
  46.     property DataField: string read GetDataField write SetDataField;
  47.     property DataSource: TDataSource read GetDataSource write SetDataSource;
  48.     property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
  49.   end;
  50. implementation
  51. constructor TQRDBBarcode.Create(AOwner: TComponent);
  52. begin
  53.   inherited Create(AOwner);
  54.   ControlStyle := ControlStyle + [csReplicatable];
  55.   FDataLink := TFieldDataLink.Create;
  56.   FDataLink.Control := Self;
  57.   FDataLink.OnDataChange := DataChange;
  58.   FDataLink.OnUpdateData := UpdateData;
  59. end;
  60. destructor TQRDBBarcode.Destroy;
  61. begin
  62.   FDataLink.Free;
  63.   FDataLink := nil;
  64.   inherited Destroy;
  65. end;
  66. procedure TQRDBBarcode.DataChange(Sender: TObject);
  67. begin
  68.   if FDataLink.Field <> nil then
  69.     Barcode := FDataLink.Field.Text
  70.   else
  71.     Barcode := '';
  72. end;
  73. procedure TQRDBBarcode.SetBarcode(const Value: string);
  74. begin
  75.   if csDesigning in ComponentState then
  76.     inherited
  77.   else
  78.     if not ((FDataLink.Field = nil) or FDataLink.Field.ReadOnly or
  79.       FDataLink.ReadOnly) then
  80.     begin
  81.       if FDataLink.Field.Text <> Value then FDataLink.Field.Text := Value;
  82.       inherited;
  83.     end;
  84. end;
  85. procedure TQRDBBarcode.UpdateData(Sender: TObject);
  86. begin
  87.   FDataLink.Field.Text := Barcode;
  88. end;
  89. function TQRDBBarcode.GetDataSource: TDataSource;
  90. begin
  91.   Result := FDataLink.DataSource;
  92. end;
  93. procedure TQRDBBarcode.SetDataSource(Value: TDataSource);
  94. begin
  95.   if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then
  96.     FDataLink.DataSource := Value;
  97.   if Value <> nil then Value.FreeNotification(Self);
  98. end;
  99. function TQRDBBarcode.GetDataField: string;
  100. begin
  101.   Result := FDataLink.FieldName;
  102. end;
  103. procedure TQRDBBarcode.SetDataField(const Value: string);
  104. begin
  105.   FDataLink.FieldName := Value;
  106. end;
  107. function TQRDBBarcode.GetReadOnly: Boolean;
  108. begin
  109.   Result := FDataLink.ReadOnly;
  110. end;
  111. procedure TQRDBBarcode.SetReadOnly(Value: Boolean);
  112. begin
  113.   FDataLink.ReadOnly := Value;
  114. end;
  115. function TQRDBBarcode.GetField: TField;
  116. begin
  117.   Result := FDataLink.Field;
  118. end;
  119. procedure TQRDBBarcode.CMGetDataLink(var Message: TMessage);
  120. begin
  121.   Message.Result := Integer(FDataLink);
  122. end;
  123. procedure TQRDBBarcode.Notification(AComponent: TComponent;
  124.   Operation: TOperation);
  125. begin
  126.   inherited Notification(AComponent, Operation);
  127.   if (Operation = opRemove) and (FDataLink <> nil) and
  128.     (AComponent = DataSource) then DataSource := nil;
  129. end;
  130. function TQRDBBarcode.ExecuteAction(Action: TBasicAction): Boolean;
  131. begin
  132.   Result := inherited ExecuteAction(Action) or (FDataLink <> nil) and
  133.     FDataLink.ExecuteAction(Action);
  134. end;
  135. function TQRDBBarcode.UpdateAction(Action: TBasicAction): Boolean;
  136. begin
  137.   Result := inherited UpdateAction(Action) or (FDataLink <> nil) and
  138.     FDataLink.UpdateAction(Action);
  139. end;
  140. end.