filtcomp.pas
来自「delphi编程控件」· PAS 代码 · 共 1,794 行 · 第 1/4 页
PAS
1,794 行
procedure TListBoxFilter.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 TListBoxFilter.SetItems(Value: TStrings);
begin
TStringList(Items).OnChange := nil;
Items.Assign(Value);
TStringList(Items).OnChange := ItemsChanged;
ItemsChanged(nil);
end;
procedure TListBoxFilter.ItemsChanged(Sender: TObject);
var
NewItems: TStringList;
i : Integer;
OldItem : Integer;
begin
NewItems := TStringList.Create;
OldItem := ItemIndex;
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(OldItem < Items.Count) then begin
OldItemIndex := -1;
ItemIndex := OldItem;
end;
end;
procedure TListBoxFilter.WndProc(var Message: TMessage);
begin
inherited;
if(Message.Msg = LB_SETCURSEL) then
ChangeAutoFilterValue;
end;
procedure TListBoxFilter.Click;
begin
inherited;
ChangeAutoFilterValue;
end;
procedure TListBoxFilter.KeyPress(var Key: Char);
begin
inherited;
ChangeAutoFilterValue;
end;
function TListBoxFilter.GetOnBeforeFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnBeforeChange;
end;
function TListBoxFilter.GetOnAfterFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnAfterChange;
end;
procedure TListBoxFilter.SetOnBeforeFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnBeforeChange := Value;
end;
procedure TListBoxFilter.SetOnAfterFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnAfterChange := Value;
end;
{TComboBoxFilter}
constructor TComboBoxFilter.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
parent := TWinControl(Aowner);
FItems := TStringList.Create;
TStringList(FItems).OnChange := ItemsChanged;
FAutoFilter := TAutoFilter.Create(self);
end;
destructor TComboBoxFilter.Destroy;
begin
FItems.Free;
FAutoFilter.Free;
inherited;
end;
procedure TComboBoxFilter.Loaded;
begin
inherited;
OldItemIndex := -2;
ChangeAutoFilterValue;
end;
procedure TComboBoxFilter.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 TComboBoxFilter.SetItems(Value: TStrings);
begin
TStringList(Items).OnChange := nil;
Items.Assign(Value);
TStringList(Items).OnChange := ItemsChanged;
ItemsChanged(nil);
end;
procedure TComboBoxFilter.ItemsChanged(Sender: TObject);
var
NewItems: TStringList;
i : Integer;
OldItem : Integer;
begin
NewItems := TStringList.Create;
OldItem := ItemIndex;
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(OldItem < Items.Count) then begin
OldItemIndex := -1;
ItemIndex := OldItem;
end;
end;
procedure TComboBoxFilter.WndProc(var Message: TMessage);
begin
inherited;
if(Message.Msg = CB_SETCURSEL) then
ChangeAutoFilterValue;
end;
procedure TComboBoxFilter.Click;
begin
inherited;
ChangeAutoFilterValue;
end;
procedure TComboBoxFilter.KeyPress(var Key: Char);
begin
inherited;
ChangeAutoFilterValue;
end;
function TComboBoxFilter.GetOnBeforeFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnBeforeChange;
end;
function TComboBoxFilter.GetOnAfterFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnAfterChange;
end;
procedure TComboBoxFilter.SetOnBeforeFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnBeforeChange := Value;
end;
procedure TComboBoxFilter.SetOnAfterFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnAfterChange := Value;
end;
{TMaskEditFilter}
constructor TMaskEditFilter.Create(AOwner : TComponent);
begin
inherited;
FAutoFilter := TAutoFilter.Create(self);
FRefreshType := rtOnChange;
end;
destructor TMaskEditFilter.Destroy;
begin
FAutoFilter.Free;
inherited;
end;
procedure TMaskEditFilter.Change;
begin
inherited;
if(FRefreshType = rtOnChange) And (Modified Or (csLoading in ComponentState)) then begin
Modified := False;
FAutoFilter.Value := Text;
end;
end;
function TMaskEditFilter.GetOnBeforeFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnBeforeChange;
end;
function TMaskEditFilter.GetOnAfterFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnAfterChange;
end;
procedure TMaskEditFilter.SetOnBeforeFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnBeforeChange := Value;
end;
procedure TMaskEditFilter.SetOnAfterFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnAfterChange := Value;
end;
procedure TMaskEditFilter.CMExit(var Message: TCMExit);
begin
inherited;
if(FRefreshType = rtOnExit) And Modified then begin
Modified := False;
FAutoFilter.Value := Text;
end;
end;
{TLookupListFilter}
constructor TLookupListFilter.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FAutoFilter := TAutoFilter.Create(self);
end;
destructor TLookupListFilter.Destroy;
begin
FAutoFilter.Free;
inherited;
end;
function TLookupListFilter.GetOnBeforeFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnBeforeChange;
end;
function TLookupListFilter.GetOnAfterFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnAfterChange;
end;
procedure TLookupListFilter.SetOnBeforeFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnBeforeChange := Value;
end;
procedure TLookupListFilter.SetOnAfterFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnAfterChange := Value;
end;
procedure TLookupListFilter.KeyValueChanged;
begin
inherited;
if VarIsNull(KeyValue) then
FAutoFilter.Value := ''
else FAutoFilter.Value := String(KeyValue);
end;
{TLookupComboFilter}
constructor TLookupComboFilter.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FAutoFilter := TAutoFilter.Create(self);
end;
destructor TLookupComboFilter.Destroy;
begin
FAutoFilter.Free;
inherited;
end;
function TLookupComboFilter.GetOnBeforeFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnBeforeChange;
end;
function TLookupComboFilter.GetOnAfterFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnAfterChange;
end;
procedure TLookupComboFilter.SetOnBeforeFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnBeforeChange := Value;
end;
procedure TLookupComboFilter.SetOnAfterFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnAfterChange := Value;
end;
procedure TLookupComboFilter.KeyValueChanged;
begin
inherited;
if VarIsNull(KeyValue) then
FAutoFilter.Value := ''
else FAutoFilter.Value := String(KeyValue);
end;
{TImageListBoxFilter}
constructor TImageListBoxFilter.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FAutoFilter := TAutoFilter.Create(self);
end;
destructor TImageListBoxFilter.Destroy;
begin
FAutoFilter.Free;
inherited;
end;
function TImageListBoxFilter.GetOnBeforeFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnBeforeChange;
end;
function TImageListBoxFilter.GetOnAfterFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnAfterChange;
end;
procedure TImageListBoxFilter.SetOnBeforeFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnBeforeChange := Value;
end;
procedure TImageListBoxFilter.SetOnAfterFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnAfterChange := Value;
end;
procedure TImageListBoxFilter.UpdateData;
begin
if ItemIndex >= 0 then begin
if Not FUseValues then
AutoFilter.Value := Items[ItemIndex]
else AutoFilter.Value := Values[ItemIndex];
end else AutoFilter.Value := '';
end;
procedure TImageListBoxFilter.Click;
begin
inherited Click;
UpdateData;
end;
procedure TImageListBoxFilter.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited KeyDown(Key, Shift);
if Key in [VK_PRIOR, VK_NEXT, VK_END, VK_HOME, VK_LEFT, VK_UP,
VK_RIGHT, VK_DOWN] then
UpdateData;
end;
procedure TImageListBoxFilter.KeyPress(var Key: Char);
begin
inherited KeyPress(Key);
UpdateData;
end;
procedure TImageListBoxFilter.CMExit(var Message: TCMExit);
begin
UpdateData;
inherited;
end;
procedure TImageListBoxFilter.SetItems(Value: TStrings);
begin
Items.Assign(Value);
UpdateData;
end;
procedure TImageListBoxFilter.SetUseValues(Value: Boolean);
begin
if(FUseValues <> Value)then begin
FUseValues := Value;
UpdateData;
end;
end;
{TImageComboBoxFilter}
constructor TImageComboBoxFilter.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FAutoFilter := TAutoFilter.Create(self);
end;
destructor TImageComboBoxFilter.Destroy;
begin
FAutoFilter.Free;
inherited;
end;
function TImageComboBoxFilter.GetOnBeforeFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnBeforeChange;
end;
function TImageComboBoxFilter.GetOnAfterFilterChange : TNotifyEvent;
begin
Result := FAutoFilter.OnAfterChange;
end;
procedure TImageComboBoxFilter.SetOnBeforeFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnBeforeChange := Value;
end;
procedure TImageComboBoxFilter.SetOnAfterFilterChange(Value : TNotifyEvent);
begin
FAutoFilter.OnAfterChange := Value;
end;
procedure TImageComboBoxFilter.UpdateData;
begin
if ItemIndex >= 0 then begin
if Not FUseValues then
AutoFilter.Value := Items[ItemIndex]
else AutoFilter.Value := Values[ItemIndex];
end else AutoFilter.Value := '';
end;
procedure TImageComboBoxFilter.Click;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?