filtcomp.pas

来自「delphi编程控件」· PAS 代码 · 共 1,794 行 · 第 1/4 页

PAS
1,794
字号
  property OnKeyDown;
  property OnKeyPress;
  property OnKeyUp;
  property OnMouseDown;
  property OnMouseMove;
  property OnMouseUp;
  property OnStartDrag;
end;

TDateFilter = class(TCustomAutoDateEdit)
private
  FDateFilter : TAutoFilter;
  FBeginDateFilter : TAutoFilter;
  FEndDateFilter : TAutoFilter;

  function GetOnBeforeDateFilterChange : TNotifyEvent;
  function GetOnAfterDateFilterChange : TNotifyEvent;
  function GetOnBeforeBeginDateFilterChange : TNotifyEvent;
  function GetOnAfterBeginDateFilterChange : TNotifyEvent;
  function GetOnBeforeEndDateFilterChange : TNotifyEvent;
  function GetOnAfterEndDateFilterChange : TNotifyEvent;
  procedure SetOnBeforeDateFilterChange(Value : TNotifyEvent);
  procedure SetOnAfterDateFilterChange(Value : TNotifyEvent);
  procedure SetOnBeforeBeginDateFilterChange(Value : TNotifyEvent);
  procedure SetOnAfterBeginDateFilterChange(Value : TNotifyEvent);
  procedure SetOnBeforeEndDateFilterChange(Value : TNotifyEvent);
  procedure SetOnAfterEndDateFilterChange(Value : TNotifyEvent);
protected
  procedure DoDateChange; override;
  procedure DoBeginDateChange; override;
  procedure DoEndDateChange; override;
public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
published
  property DateFilter : TAutoFilter read FDateFilter write FDateFilter;
  property BeginDateFilter : TAutoFilter read FBeginDateFilter write FBeginDateFilter;
  property EndDateFilter : TAutoFilter read FEndDateFilter write FEndDateFilter;
  property OnBeforeDateFilterChange: TNotifyEvent read GetOnBeforeDateFilterChange
     write SetOnBeforeDateFilterChange;
  property OnAfterDateFilterChange: TNotifyEvent read GetOnAfterDateFilterChange
     write SetOnAfterDateFilterChange;
  property OnBeforeBeginDateFilterChange: TNotifyEvent read GetOnBeforeBeginDateFilterChange
     write SetOnBeforeBeginDateFilterChange;
  property OnAfterBeginDateFilterChange: TNotifyEvent read GetOnAfterBeginDateFilterChange
     write SetOnAfterBeginDateFilterChange;
  property OnBeforeEndDateFilterChange: TNotifyEvent read GetOnBeforeEndDateFilterChange
     write SetOnBeforeEndDateFilterChange;
  property OnEndAfterDateFilterChange: TNotifyEvent read GetOnAfterEndDateFilterChange
     write SetOnAfterEndDateFilterChange;
  { Property SelectPeriod must be first. }
  property SelectPeriod;
  property AutoSelect;
  property AutoSize;
  property BeginDate;
  property BorderStyle;
  property Color;
  property Ctl3D;
  property Date;
  property DragCursor;
  property DragMode;
  property Enabled;
  property EndDate;
  property Font;
{$IFDEF DELPHI3_0}
  property ImeMode;
  property ImeName;
{$ENDIF}
  property ParentColor;
  property ParentCtl3D;
  property ParentFont;
  property ParentShowHint;
  property PopupMenu;
  property ReadOnly;
  property ShowHint;
  property TabOrder;
  property TabStop;
  property Visible;
  property OnDateChange;
  property OnBeginDateChange;
  property OnEndDateChange;
  property OnChange;
  property OnClick;
  property OnDblClick;
  property OnDragDrop;
  property OnDragOver;
  property OnEndDrag;
  property OnEnter;
  property OnExit;
  property OnKeyDown;
  property OnKeyPress;
  property OnKeyUp;
  property OnMouseDown;
  property OnMouseMove;
  property OnMouseUp;
  property OnStartDrag;
end;

TTimeControlFilter = class(TCustomAutoTimeControl)
private
  FAutoFilter : TAutoFilter;

  function GetOnBeforeFilterChange : TNotifyEvent;
  function GetOnAfterFilterChange : TNotifyEvent;
  procedure SetOnBeforeFilterChange(Value : TNotifyEvent);
  procedure SetOnAfterFilterChange(Value : TNotifyEvent);
protected
  procedure DoTimeChange; override;
public
  constructor Create(AOwner : TComponent); override;
  destructor Destroy; override;
published
  property AutoFilter : TAutoFilter read FAutoFilter write FAutoFilter;
  property OnBeforeFilterChange: TNotifyEvent read GetOnBeforeFilterChange write SetOnBeforeFilterChange;
  property OnAfterFilterChange: TNotifyEvent read GetOnAfterFilterChange write SetOnAfterFilterChange;
  property Align;
  property DragCursor;
  property DragMode;
  property Enabled;
  property ParentShowHint;
  property PopupMenu;
  property ShowHint;
  property TabOrder;
  property TabStop;
  property Time;
  property Visible;
  property OnClick;
  property OnDblClick;
  property OnDragDrop;
  property OnDragOver;
  property OnEndDrag;
  property OnEnter;
  property OnExit;
  property OnKeyDown;
  property OnKeyPress;
  property OnKeyUp;
  property OnMouseDown;
  property OnMouseMove;
  property OnMouseUp;
  property OnStartDrag;
  property OnTimeChange;
end;

TTimeEditFilter = class(TCustomAutoTimeEdit)
private
  FAutoFilter : TAutoFilter;

  function GetOnBeforeFilterChange : TNotifyEvent;
  function GetOnAfterFilterChange : TNotifyEvent;
  procedure SetOnBeforeFilterChange(Value : TNotifyEvent);
  procedure SetOnAfterFilterChange(Value : TNotifyEvent);
protected
  procedure DoTimeChange; override;
public
  constructor Create(AOwner : TComponent); override;
  destructor Destroy; override;
published
  property AutoFilter : TAutoFilter read FAutoFilter write FAutoFilter;
  property OnBeforeFilterChange: TNotifyEvent read GetOnBeforeFilterChange write SetOnBeforeFilterChange;
  property OnAfterFilterChange: TNotifyEvent read GetOnAfterFilterChange write SetOnAfterFilterChange;
  property AutoSelect;
  property AutoSize;
  property BorderStyle;
  property Color;
  property Ctl3D;
  property DragCursor;
  property DragMode;
  property DropDownWidth;
  property Enabled;
  property Font;
 {$IFDEF DELPHI3_0}
  property ImeMode;
  property ImeName;
 {$ENDIF}
  property ParentColor;
  property ParentCtl3D;
  property ParentFont;
  property ParentShowHint;
  property PopupMenu;
  property ReadOnly;
  property ShowHint;
  property TabOrder;
  property TabStop;
  property Time;
  property Visible;
  property OnChange;
  property OnClick;
  property OnDblClick;
  property OnDragDrop;
  property OnDragOver;
  property OnEndDrag;
  property OnEnter;
  property OnExit;
  property OnKeyDown;
  property OnKeyPress;
  property OnKeyUp;
  property OnMouseDown;
  property OnMouseMove;
  property OnMouseUp;
  property OnStartDrag;
  property OnTimeChange;
end;


implementation

{TEasyFilter}
constructor TEasyFilter.Create(AOwner : TComponent);
begin
  inherited;
  FAutoFilter := TAutoFilter.Create(self);
end;

destructor TEasyFilter.Destroy;
begin
  FAutoFilter.Free;
  inherited;
end;

function TEasyFilter.GetOnBeforeFilterChange : TNotifyEvent;
begin
  Result := FAutoFilter.OnBeforeChange;
end;

function TEasyFilter.GetOnAfterFilterChange : TNotifyEvent;
begin
  Result := FAutoFilter.OnAfterChange;
end;

procedure TEasyFilter.SetOnBeforeFilterChange(Value : TNotifyEvent);
begin
  FAutoFilter.OnBeforeChange := Value;
end;

procedure TEasyFilter.SetOnAfterFilterChange(Value : TNotifyEvent);
begin
  FAutoFilter.OnAfterChange := Value;
end;

procedure TEasyFilter.SetValue(Value : String);
begin
  FValue  := Value;
  FAutoFilter.Value := Value;
end;

{TCheckBoxFilter}
constructor TCheckBoxFilter.Create(AOwner: TComponent);
begin
  inherited;
  FAutoFilter := TAutoFilter.Create(self);
end;

destructor TCheckBoxFilter.Destroy;
begin
  FAutoFilter.Free;
  inherited;
end;

procedure TCheckBoxFilter.Loaded;
begin
  inherited;
  Checked := SaveChecked;
  if(Checked) then
    FAutoFilter.Value := FValueChecked
  else FAutoFilter.Value := FValueUnChecked;
end;

procedure TCheckBoxFilter.DefineProperties(Filer: TFiler);
begin
  inherited DefineProperties(Filer);
  Filer.DefineProperty('SaveChecked', ReadSaveChecked, WriteSaveChecked, True);
end;

procedure TCheckBoxFilter.ReadSaveChecked(Reader: TReader);
begin
  SaveChecked := Reader.ReadBoolean;
end;

procedure TCheckBoxFilter.WriteSaveChecked(Writer: TWriter);
begin
  Writer.WriteBoolean(Checked);
end;

procedure TCheckBoxFilter.WndProc(var Message: TMessage);
begin
  inherited;
   if(SaveChecked <> Checked) And Not (csLoading in ComponentState) then begin
     SaveChecked := Checked;
     if(Checked) then begin
       FAutoFilter.Value := FValueChecked;
       State := cbChecked;
     end else  begin
       FAutoFilter.Value := FValueUnChecked;
       State := cbUnChecked;
     end;
   end;
end;

function TCheckBoxFilter.GetOnBeforeFilterChange : TNotifyEvent;
begin
  Result := FAutoFilter.OnBeforeChange;
end;

function TCheckBoxFilter.GetOnAfterFilterChange : TNotifyEvent;
begin
  Result := FAutoFilter.OnAfterChange;
end;

procedure TCheckBoxFilter.SetOnBeforeFilterChange(Value : TNotifyEvent);
begin
  FAutoFilter.OnBeforeChange := Value;
end;

procedure TCheckBoxFilter.SetOnAfterFilterChange(Value : TNotifyEvent);
begin
  FAutoFilter.OnAfterChange := Value;
end;

procedure TCheckBoxFilter.SetValueChecked(Value : String);
begin
  FValueChecked := Value;
  if(Checked) And Not (csLoading in ComponentState) then
    FAutoFilter.Value := Value;
end;

procedure TCheckBoxFilter.SetValueUnChecked(Value : String);
begin
  FValueUnChecked := Value;
  if Not (Checked) And Not (csLoading in ComponentState) then
    FAutoFilter.Value := Value;
end;

{TRadioGroupFilter}
constructor TRadioGroupFilter.Create(AOwner: TComponent);
begin
  inherited;
  FItems := TStringList.Create;
  TStringList(FItems).OnChange := ItemsChanged;

  FAutoFilter := TAutoFilter.Create(self);
end;

destructor TRadioGroupFilter.Destroy;
begin
  FItems.Free;
  FAutoFilter.Free;
  inherited;
end;

procedure TRadioGroupFilter.Loaded;
begin
  inherited;
  OldItemIndex := -2;
  ChangeAutoFilterValue;
end;

procedure TRadioGroupFilter.ChangeAutoFilterValue;
begin
  if(OldItemIndex <> ItemIndex) And Not (csLoading in ComponentState) then begin
    OldItemIndex := ItemIndex;
    if(ItemIndex <> -1) then begin
      if(Pos(',', Items[ItemIndex]) > 0) then
        FAutoFilter.Value := Copy(Items[ItemIndex], Pos(',', Items[ItemIndex]) + 1, 1000)
      else FAutoFilter.Value := Items[ItemIndex];
    end;
  end;
end;

procedure TRadioGroupFilter.WndProc(var Message: TMessage);
begin
  inherited;
  ChangeAutoFilterValue;
end;

procedure TRadioGroupFilter.SetItems(Value: TStrings);
begin
  TStringList(Items).OnChange := nil;
  Items.Assign(Value);
  TStringList(Items).OnChange := ItemsChanged;
  ItemsChanged(nil);
end;

procedure TRadioGroupFilter.ItemsChanged(Sender: TObject);
var
  NewItems: TStringList;
  i : Integer;
begin
  NewItems := TStringList.Create;
  try
    for i := 0 to Items.Count - 1 do
      if(Pos(',', Items[i]) > 0) then
        NewItems.Add(Copy(Items[i], 1, Pos(',', Items[i]) - 1))
      else NewItems.Add(Items[i]);
    inherited Items := NewItems;
  finally
    NewItems.Free;
  end;
  if(ItemIndex <> -1 ) then begin
     OldItemIndex := -1;
     ChangeAutoFilterValue;
  end;
end;

function TRadioGroupFilter.GetOnBeforeFilterChange : TNotifyEvent;
begin
  Result := FAutoFilter.OnBeforeChange;
end;

function TRadioGroupFilter.GetOnAfterFilterChange : TNotifyEvent;
begin
  Result := FAutoFilter.OnAfterChange;
end;

procedure TRadioGroupFilter.SetOnBeforeFilterChange(Value : TNotifyEvent);
begin
  FAutoFilter.OnBeforeChange := Value;
end;

procedure TRadioGroupFilter.SetOnAfterFilterChange(Value : TNotifyEvent);
begin
  FAutoFilter.OnAfterChange := Value;
end;

{TListBoxFilter}
constructor TListBoxFilter.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  parent := TWinControl(Aowner);
  FItems := TStringList.Create;
  TStringList(FItems).OnChange := ItemsChanged;

  FAutoFilter := TAutoFilter.Create(self);
end;

destructor TListBoxFilter.Destroy;
begin
  FItems.Free;
  FAutoFilter.Free;
  inherited;
end;

procedure TListBoxFilter.Loaded;
begin
  inherited;
  OldItemIndex := -2;
  ChangeAutoFilterValue;
end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?