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 + -
显示快捷键?