//
unit ads_DlgDBFilter; {Copyright(c)2016 Advanced Delphi Systems Richard Maley Advanced Delphi Systems 12613 Maidens Bower Drive Potomac, MD 20854 USA phone 301-840-1554 dickmaley@advdelphisys.com The code herein can be used or modified by anyone. Please retain references to Richard Maley at Advanced Delphi Systems. If you make improvements to the code please send your improvements to dickmaley@advdelphisys.com so that the entire Delphi community can benefit. All comments are welcome. } (* Description: ads_DlgDBFilter.pas.pas This unit contains *) (*UnitIndex Master Index Implementation Section Download Units
Description: ads_DlgDBFilter.pas This unit contains the following routines.
ButtonReSizer CenterChildren_H DlgDBFilter_ads GetCenterFormLeft GetCenterFormTop SetChildWidths TDBTableFilterDlg_ads.Append_cbChange TDBTableFilterDlg_ads.ButtonAddClick TDBTableFilterDlg_ads.ButtonCancelClick TDBTableFilterDlg_ads.ButtonClearClick TDBTableFilterDlg_ads.ButtonOKClick TDBTableFilterDlg_ads.Case_cbClick TDBTableFilterDlg_ads.ComboBoxOperatorChange TDBTableFilterDlg_ads.EditFilterChange TDBTableFilterDlg_ads.Exact_cbClick TDBTableFilterDlg_ads.FilterButtonsEnabled TDBTableFilterDlg_ads.FormActivate TDBTableFilterDlg_ads.FormCreate TDBTableFilterDlg_ads.FormResize TDBTableFilterDlg_ads.lb_FieldNameChange TDBTableFilterDlg_ads.lb_FieldNameClick TDBTableFilterDlg_ads.MakeBeveled TDBTableFilterDlg_ads.RemoveFilter TDBTableFilterDlg_ads.ResizeAll TDBTableFilterDlg_ads.SetBevel TDBTableFilterDlg_ads.SetBeveled TDBTableFilterDlg_ads.SetColorOfComboBoxs TDBTableFilterDlg_ads.SetColorOfFilterEdit TDBTableFilterDlg_ads.SetColorOfMemo TDBTableFilterDlg_ads.SetComboBoxColor TDBTableFilterDlg_ads.SetFilter TDBTableFilterDlg_ads.SetMinFormHeight TDBTableFilterDlg_ads.SetMinFormWidth TDBTableFilterDlg_ads.SetReSizeNow TDBTableFilterDlg_ads.TypeFieldFromDataSet
*) interface Uses DB; {!~DlgDBFilter_ads Presents a Dataset Filter dialog } Function DlgDBFilter_ads(DataSet: TDataSet): Boolean; implementation Uses ads_Exception, SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls ; Var UnitName : String; ProcName : String; //Unit Description UnitIndex Master Index
procedure ButtonReSizer( ButtonBase : TPanel; ButtonSlider : TPanel; ButtonWidth : Integer; ButtonSpacer : Integer; ButtonsReSize : Boolean; ButtonsAlignment: TAlignment; Beveled : Boolean); Var MinFormWidth : Integer; NButtons : Integer; i : Integer; NSpacers : Integer; SpacerWidth : Integer; SpacersWidth : Integer; W : Integer; LeftPos : Integer; Begin NButtons := ButtonSlider.ControlCount; If ButtonSpacer > 0 Then Begin SpacerWidth := ButtonSpacer; NSpacers := NButtons +1; SpacersWidth := ButtonSpacer * NSpacers; End Else Begin SpacerWidth := 0; SpacersWidth:= 0; End; MinFormWidth := SpacersWidth + (NButtons * ButtonWidth) + (ButtonBase.BorderWidth * 2) + (ButtonBase.BevelWidth * 4) + 25; Try If ButtonBase.Parent is TForm Then Begin If ButtonBase.Parent.Width < MinFormWidth Then Begin ButtonBase.Parent.Width := MinFormWidth; End; End Else Begin Try If ButtonBase.Parent.Parent is TForm Then Begin If ButtonBase.Parent.Parent.Width < MinFormWidth Then Begin ButtonBase.Parent.Parent.Width := MinFormWidth; End; End Else Begin Try If ButtonBase.Parent.Parent.Parent is TForm Then Begin If ButtonBase.Parent.Parent.Parent.Width < MinFormWidth Then Begin ButtonBase.Parent.Parent.Parent.Width := MinFormWidth; End; End Else Begin Try If ButtonBase.Parent.Parent.Parent.Parent is TForm Then Begin If ButtonBase.Parent.Parent.Parent.Parent.Width < MinFormWidth Then Begin ButtonBase.Parent.Parent.Parent.Parent.Width := MinFormWidth; End; End Else Begin {Not going to set a minimum form width} End; Except End; End; Except End; End; Except End; End; Except End; If Beveled Then Begin ButtonBase.Height := (ButtonBase.BorderWidth * 2) + (ButtonBase.BevelWidth * 4) + 2 {for borderStyle} + 25 {for standard button height} + 3; End else Begin ButtonBase.Height := (ButtonBase.BorderWidth * 2) + 25 {for standard button height} + 4; End; If ButtonsReSize Then Begin Buttonslider.Align := alClient; W := (Buttonslider.Width - SpacersWidth) div NButtons; LeftPos := SpacerWidth; For i := 0 To NButtons - 1 Do Begin ButtonSlider.Controls[i].Align := alNone; ButtonSlider.Controls[i].Top := 0; ButtonSlider.Controls[i].Height := 25; ButtonSlider.Controls[i].Width := W; ButtonSlider.Controls[i].Left := LeftPos; LeftPos := LeftPos + W + SpacerWidth; End; End Else Begin ButtonSlider.Align := alNone; If Beveled Then Begin ButtonSlider.Top := ButtonBase.BorderWidth + (ButtonBase.BevelWidth * 2)+ 1 + {For BorderStyle} 0; {For Margin} End Else Begin ButtonSlider.Top := ButtonBase.BorderWidth + 1; {For Margin} End; ButtonSlider.Height := 25; ButtonSlider.Width := SpacersWidth + (NButtons * ButtonWidth); If (Not Beveled) Then Begin {Align totally left with not leftmost spacer} If ButtonsAlignment = taLeftJustify Then Begin LeftPos := 0; End Else Begin If ButtonsAlignment = taRightJustify Then Begin {Align totally Right with not rightmost spacer} LeftPos := 2 * SpacerWidth; End Else Begin LeftPos := SpacerWidth; End; End; End Else Begin LeftPos := SpacerWidth; End; For i := 0 To NButtons - 1 Do Begin ButtonSlider.Controls[i].Align := alNone; ButtonSlider.Controls[i].Top := 0; ButtonSlider.Controls[i].Height := 25; ButtonSlider.Controls[i].Width := ButtonWidth; ButtonSlider.Controls[i].Left := LeftPos; LeftPos := LeftPos + ButtonWidth+ SpacerWidth; End; If ButtonsAlignment = taLeftJustify Then ButtonSlider.Align := alLeft; If ButtonsAlignment = taRightJustify Then ButtonSlider.Align := alRight; If ButtonsAlignment = taCenter Then Begin ButtonSlider.Align := alNone; ButtonSlider.Left := (ButtonBase.Width - ButtonSlider.Width) div 2; End; End; ButtonBase.Refresh; End; //Unit Description UnitIndex Master Index
procedure SetChildWidths(Panel : TPanel); Var i : Integer; Width : Integer; Begin Width := (Panel.Width - (Panel.BorderWidth * 2) - (Panel.BevelWidth * 4)) div Panel.ControlCount; For i := 0 To Panel.ControlCount - 1 Do Begin Panel.Controls[i].Width := Width; End; End; //Unit Description UnitIndex Master Index
procedure CenterChildren_H(Panel : TPanel); Var i : Integer; Begin For i := 0 To Panel.ControlCount - 1 Do Begin Panel.Controls[i].Left := (Panel.Width - Panel.Controls[i].Width) div 2; End; End; //Unit Description UnitIndex Master Index
Function GetCenterFormLeft(FormWidth : Integer): Integer; Begin If Screen.Width < FormWidth Then Begin Result := Screen.Width-26; End Else Begin Result := (Screen.Width - FormWidth) div 2; End; End; //Unit Description UnitIndex Master Index
Function GetCenterFormTop(FormHeight : Integer): Integer; Begin If Screen.Height < FormHeight Then Begin Result := Screen.Height-26; End Else Begin Result := (Screen.Height - FormHeight) div 2; End; End; type {custom type - enumerated type representing the operator to use in the filter} TFilterOperator = (foEqual,foNotEqual,foGreaterThan,foLessThan,foGreaterEqualThan,foLessEqualThan); type TDBTableFilterDlg_ads = Class(TScrollingWinControl) Public Constructor Create(AOwner: TComponent); Override; Destructor Destroy; Override; Public pnl_base: TPanel; PanelButtons: TPanel; PanelFilterTop: TPanel; PanelFilter: TPanel; FiltersOld: TMemo; FiltersNew: TMemo; PanelAddFilter: TPanel; Field_Name_Base: TPanel; L_FieldName: TPanel; Filter_Base: TPanel; Panel7: TPanel; GroupBox1: TGroupBox; Panel1: TPanel; EditFilter: TEdit; Panel2: TPanel; Panel3: TPanel; Case_cb: TCheckBox; Exact_cb: TCheckBox; Append_Base: TPanel; Append_Label: TPanel; Append_cb: TComboBox; PanelTopMiddle: TPanel; Panel4: TPanel; Panel5: TPanel; ComboBoxOperator: TComboBox; PanelButtonSlider: TPanel; ButtonOK: TBitBtn; ButtonCancel: TBitBtn; lb_FieldName: TListBox; GroupBox2: TGroupBox; PanelActions: TPanel; ButtonAdd: TBitBtn; ButtonClear: TBitBtn; procedure FormCreate(Sender: TObject); procedure FormResize(Sender: TObject); procedure EditFilterChange(Sender: TObject); procedure ComboBoxOperatorChange(Sender: TObject); procedure lb_FieldNameChange(Sender: TObject); procedure ButtonAddClick(Sender: TObject); procedure ButtonClearClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure ButtonCancelClick(Sender: TObject); procedure Exact_cbClick(Sender: TObject); procedure Case_cbClick(Sender: TObject); procedure Append_cbChange(Sender: TObject); procedure ButtonOKClick(Sender: TObject); procedure lb_FieldNameClick(Sender: TObject); private { Private declarations } FDataSet:{$IFDEF WIN32} TDataSet {$ELSE} TTable {$ENDIF}; FField: string; {stores fieldname} FFilter : string; {stores filter} {$IFDEF WIN32} FFilterOperator : string; {stores filter-operator} {$ELSE} fFilterOperator : TFilterOperator; {$ENDIF} FFilters : String; FAppend : String; FCaseInsensitive : Boolean; FExactMatch : Boolean; FFiltered : Boolean; FWildCard : Boolean; FColorOfComboBoxs : TColor; FColorOfFilterEdit : TColor; FColorOfMemo : TColor; FTitle : String; {stores the Dialog Title} FBeveled : Boolean; {Selected panels have beveling if true} FButtonsReSize : Boolean; {Buttons resize if true} FButtonsAlignment : TAlignment; {taLeftJustify, taCenter, taRightJustify} FButtonWidth : Integer; {Sets Button Widths} FButtonSpacer : Integer; {Sets Button Spacer Width} FApplyChanges : Boolean; {True if changes should be made. = mrOk} FModal : Boolean; {True if Form is being shown modal} FIsComponent : Boolean; {True if Form is part of a component, False if Form is a standalone form, Default is False} FReSizeNow : Boolean; {Causes the form to resize when the property is set} FMinFormWidth : Integer; {Sets a Minimum FormWidth} FMinFormHeight : Integer; {Sets a Minimum FormHeight} FDialogComponentName : String; {$IFNDEF WIN32} FTable : TTable; {$ENDIF} procedure SetReSizeNow(Value : Boolean); procedure SetMinFormWidth(Value : Integer); procedure SetMinFormHeight(Value : Integer); procedure SetBeveled(Value : Boolean); Procedure SetColorOfMemo(Value : TColor); Procedure SetColorOfFilterEdit(Value : TColor); Procedure SetColorOfComboBoxs(Value : TColor); public { Public declarations } procedure ReSizeAll; procedure SetBevel; property IsComponent : Boolean Read FIsComponent Write FIsComponent; property ReSizeNow : Boolean Read FReSizeNow Write SetReSizeNow; Procedure FilterButtonsEnabled; Function TypeFieldFromDataSet(DataSet: TDataSet; FieldName: String): String; Procedure MakeBeveled(B : Boolean); Procedure SetComboBoxColor(C : TColor); {$IFNDEF WIN32} procedure SetFilter; {set filter on table} procedure RemoveFilter; {remove filter from table} property Table : TTable Read FTable Write FTable; {$ENDIF} published { Published declarations } property DataSet: {$IFDEF WIN32} TDataSet {$ELSE} TTable {$ENDIF} read FDataSet write FDataSet; property Field: string read FField write FField; property Filter: string read FFilter write FFilter; {$IFDEF WIN32} property FilterOperator: string read FFilterOperator write FFilterOperator; {$ELSE} property FilterOperator: TFilterOperator read FFilterOperator write FFilterOperator; {$ENDIF} property Filters: String read FFilters write FFilters; property Append: String read FAppend write FAppend; property CaseInsensitive : Boolean Read FCaseInsensitive Write FCaseInsensitive; property ExactMatch : Boolean Read FExactMatch Write FExactMatch; property Filtered : Boolean Read FFiltered Write FFiltered; property WildCard : Boolean Read FWildCard Write FWildCard; property ColorOfComboBoxs : TColor Read FColorOfComboBoxs Write SetColorOfComboBoxs; property ColorOfFilterEdit : TColor Read FColorOfFilterEdit Write SetColorOfFilterEdit; property ColorOfMemo : TColor Read FColorOfMemo Write SetColorOfMemo; property Title : String {stores the Dialog Title} read FTitle write FTitle; property Beveled : Boolean {Selected panels have beveling if true} Read FBeveled Write SetBeveled; property ButtonsReSize : Boolean {Buttons resize if true} Read FButtonsReSize Write FButtonsReSize; property ButtonsAlignment : TAlignment {taLeftJustify, taCenter, taRightJustify} Read FButtonsAlignment Write FButtonsAlignment; property ButtonWidth : Integer {Sets Button Widths} Read FButtonWidth Write FButtonWidth; property ButtonSpacer : Integer {Sets Button Spacer Width} Read FButtonSpacer Write FButtonSpacer; property ApplyChanges: Boolean {True if changes should be made. = mrOk} Read FApplyChanges Write FApplyChanges; property Modal : Boolean {True if Form is being shown modal} Read FModal Write FModal; property MinFormWidth : Integer {Sets the form's Minimum Width} Read FMinFormWidth Write SetMinFormWidth; property MinFormHeight : Integer {Sets the form's Minimum Height} Read FMinFormHeight Write SetMinFormHeight; property DialogComponentName : String {Used in messages to display the } Read FDialogComponentName {dialog component name} Write FDialogComponentName; end; //Unit Description UnitIndex Master Index
Procedure TDBTableFilterDlg_ads.ResizeAll; Begin If Width < MinFormWidth Then Width := MinFormWidth; If Height < MinFormHeight Then Height := MinFormHeight; ButtonReSizer( PanelButtons, {ButtonBase} PanelButtonSlider, {ButtonSlider} ButtonWidth, {ButtonWidth} ButtonSpacer, {ButtonSpacer} ButtonsReSize, {ButtonsReSize} ButtonsAlignment, {ButtonsAlignment} Beveled); {Beveled} SetChildWidths(PanelAddFilter); CenterChildren_H(PanelActions); End; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.FormResize(Sender: TObject); begin ResizeAll; end; //Unit Description UnitIndex Master Index
Procedure TDBTableFilterDlg_ads.FilterButtonsEnabled; Begin If (lb_FieldName.ItemIndex = -1) Or (ComboBoxOperator.Text = '') Or (EditFilter.Text = '') Or (DataSet = nil) Then Begin {$IFDEF WIN32} ButtonAdd.Enabled := False; ButtonAdd.Default := False; {$ENDIF} ButtonOK.Enabled := False; ButtonOK.Default := True; End Else Begin {$IFDEF WIN32} ButtonAdd.Enabled := True; ButtonAdd.Default := True; {$ENDIF} ButtonOK.Enabled := True; ButtonOK.Default := False; End; {$IFDEF WIN32} ButtonOK.Enabled := Not (FiltersNew.Lines[0] = ''); Append_cb.Enabled := Not (FiltersNew.Lines[0] = ''); {$ELSE} Append_cb.Enabled := False; {$ENDIF} End; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.EditFilterChange(Sender: TObject); begin FilterButtonsEnabled; Filter := EditFilter.Text; { If EditFilter.Text = '' Then Begin Filter := ''; End Else Begin Filter := EditFilter.Text; End; } end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.ComboBoxOperatorChange(Sender: TObject); begin FilterButtonsEnabled; {$IFDEF WIN32} FilterOperator := ComboBoxOperator.Text; {$ELSE} FilterOperator := TFilterOperator(ComboBoxOperator.ItemIndex); {$ENDIF} end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.lb_FieldNameChange(Sender: TObject); begin FilterButtonsEnabled; Field := lb_FieldName.Items[lb_FieldName.ItemIndex]; end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.ButtonAddClick(Sender: TObject); Var TempFilter : String; WildAfter : String; QuoteString: String; FieldType : String; begin {$IFDEF WIN32} FieldType := ''; Field := lb_FieldName.Items[lb_FieldName.ItemIndex]; FilterOperator := ComboBoxOperator.Text; Filter := EditFilter.Text; Append := Append_cb.Text; FieldType := UpperCase(TypeFieldFromDataSet(DataSet,Field)); If (FieldType = 'STRING') Or (FieldType = 'DATE') Or (FieldType = 'DATETIME') Or (FieldType = 'TIME') Or (FieldType = 'MEMO') Then Begin QuoteString := ''''; If WildCard Then Begin WildAfter := '*'; Exact_cb.Checked := False; ExactMatch := False; CaseInsensitive := True; Case_cb.Checked := Not CaseInsensitive; End Else Begin WildAfter := ''; End; End Else Begin QuoteString := ''; WildAfter := ''; End; TempFilter := '(['+Field + '] '+FilterOperator+ ' ('+ QuoteString+ Filter+ WildAfter+ QuoteString+ '))'; If FiltersNew.Lines[0] = '' Then Begin FiltersNew.Lines[0] := TempFilter; End Else Begin FiltersNew.Lines.Add(' '+Append+' '); FiltersNew.Lines.Add(TempFilter); End; Filter := ''; EditFilter.Text:= ''; FilterButtonsEnabled; {$ENDIF} end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.ButtonClearClick(Sender: TObject); begin {$IFDEF WIN32} FiltersNew.Lines.Clear; {$ELSE} RemoveFilter; {$ENDIF} end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.FormCreate(Sender: TObject); begin ColorOfMemo := clWindow; ColorOfFilterEdit := clWindow; ColorOfComboBoxs := clWindow; {$IFDEF WIN32} Height := 422; {$ELSE} Height := 422 - PanelFilterHeight; {$ENDIF} Width := 495; EditFilter.Text := ''; ButtonAdd.Enabled := False; ButtonClear.Enabled := True; ComboBoxOperator.Align := alTop; EditFilter.Align := alTop; FiltersNew.Align := alClient; Append_cb.Align := alTop; WildCard := True; Title := 'Table Filter Dialog';{stores the Dialog Title} Beveled := False; {Selected panels have beveling if true} ButtonsReSize := False; {Buttons resize if true} ButtonsAlignment := taCenter; {taLeftJustify, taCenter, taRightJustify} ButtonWidth := 75; {Sets Button Widths} ButtonSpacer := 10; {Sets Button Spacer Width} ApplyChanges := False; {True if changes should be made. = mrOk} Modal := True; {True if Form is being shown modal} IsComponent := False; {True if Form is part of a component, False if Form is a standalone form, Default is False} FMinFormWidth := 435; {Sets a Minimum FormWidth} {$IFDEF WIN32} FMinFormHeight := 422; {Sets a Minimum FormHeight} {$ELSE} FMinFormHeight := 422 - {Sets a Minimum FormHeight} PanelFilterHeight; {$ENDIF} FDialogComponentName := 'TDBTableFilterDialog_ads'; {Set bevel prior to resizing} SetBevel; {ReSize at the end of the create} {$IFNDEF WIN32} GroupBox1.Caption := ''; GroupBox2.Caption := ''; ButtonAdd.Visible := False; PanelFilter.Visible := False; Append_cb.Visible := False; Case_cb.Visible := False; Exact_cb.Visible := False; PanelAddFilter.Align := alClient; ButtonClear.ModalResult := mrOK; {$ENDIF} ReSizeAll; end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.ButtonCancelClick(Sender: TObject); begin ApplyChanges := False; end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.FormActivate(Sender: TObject); Var i : Integer; begin If IsComponent Then Begin {} End Else Begin Caption := Title; {stores the Dialog Title} SetBevel; Left := GetCenterFormLeft(Width); Top := GetCenterFormTop(Height); End; WildCard := True; If Not (DataSet = nil) Then Begin lb_FieldName.Items.Clear; For i := 0 to (DataSet.FieldCount -1) Do Begin lb_FieldName.Items.Add(DataSet.Fields[i].FieldName); End; lb_FieldName.ItemIndex := 0; {$IFDEF WIN32} FiltersOld.Lines.Clear; If DataSet.Filter = '' Then Begin FiltersOld.Lines.Add(''); End Else Begin FiltersOld.Lines.Add(DataSet.Filter); End; FiltersNew.Lines.Clear; If DataSet.Filter = '' Then Begin FiltersNew.Lines.Add(''); End Else Begin FiltersNew.Lines.Add(DataSet.Filter); End; Filtered := True; If DataSet.FilterOptions = [foCaseInsensitive] Then Begin CaseInsensitive := True; ExactMatch := False; WildCard := True; End; If DataSet.FilterOptions = [foNoPartialCompare] Then Begin CaseInsensitive := False; ExactMatch := True; WildCard := False; End; If DataSet.FilterOptions = [foCaseInsensitive,foNoPartialCompare] Then Begin CaseInsensitive := True; ExactMatch := True; WildCard := False; End; If DataSet.FilterOptions = [] Then Begin CaseInsensitive := True; ExactMatch := False; WildCard := True; End; Case_cb.Checked := Not CaseInsensitive; Exact_cb.Checked := ExactMatch; {$ENDIF} End; {$IFNDEF WIN32} Table := DataSet; {$ENDIF} ComboBoxOperator.ItemIndex := 0; EditFilter.Text := ''; FilterButtonsEnabled; end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.Exact_cbClick(Sender: TObject); begin ExactMatch := Exact_cb.Checked; If ExactMatch Then Begin WildCard := False; End Else Begin WildCard := True; End; end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.Case_cbClick(Sender: TObject); begin CaseInsensitive := Not Case_cb.Checked; If Not CaseInsensitive Then Begin WildCard := False; End Else Begin WildCard := True; End; end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.Append_cbChange(Sender: TObject); begin FilterButtonsEnabled; Append := Append_cb.Text; end; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.ButtonOKClick(Sender: TObject); Var i : Integer; begin {$IFDEF WIN32} //ModalResult := mrOK; If Not (EditFilter.Text = '') Then Begin If MessageDlg('Data in the Value field has'+ ' not been added to the filters! Continue?', mtInformation, [mbYes, mbNo], 0) = mrNo Then Begin //ModalResult := mrNone; Exit; End; End; DataSet.Active := False; If CaseInsensitive Then Begin If ExactMatch Then Begin DataSet.FilterOptions := [foCaseInsensitive,foNoPartialCompare]; End Else Begin DataSet.FilterOptions := [foCaseInsensitive]; End; End Else Begin If ExactMatch Then Begin DataSet.FilterOptions := [foNoPartialCompare]; End Else Begin DataSet.FilterOptions := []; End; End; DataSet.Filtered := Filtered; DataSet.Filter := ''; For i := 0 To FiltersNew.Lines.Count -1 Do Begin DataSet.Filter := DataSet.Filter + FiltersNew.Lines[i]; End; Try DataSet.Active := True; Except DataSet.Active := False; DataSet.Filter := ''; For i := 0 To FiltersOld.Lines.Count -1 Do Begin DataSet.Filter := DataSet.Filter + FiltersOld.Lines[i]; End; Try DataSet.Active := True; Except DataSet.Filter := ''; DataSet.Filtered := False; End; End; {$ELSE} Field := lb_FieldName.Items[lb_FieldName.ItemIndex]; FilterOperator := TFilterOperator(ComboBoxOperator.ItemIndex); Filter := EditFilter.Text; SetFilter; {$ENDIF} ApplyChanges := True; end; {Returns the database field type as a string. If there is an error a null string is returned.} //Unit Description UnitIndex Master Index
Function TDBTableFilterDlg_ads.TypeFieldFromDataSet(DataSet: TDataSet; FieldName: String): String; Var FieldIndex : Integer; FieldType : TFieldType; Begin Try DataSet.Active := True; FieldIndex := DataSet.FieldDefs.IndexOf(FieldName); FieldType := DataSet.FieldDefs[FieldIndex].DataType; {TFieldType Possible values are ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftBlob, ftMemo or ftGraphic} If FieldType=ftUnknown Then Result := 'Unknown'; If FieldType=ftString Then Result := 'String'; If FieldType=ftSmallInt Then Result := 'SmallInt'; If FieldType=ftInteger Then Result := 'Integer'; If FieldType=ftWord Then Result := 'Word'; If FieldType=ftBoolean Then Result := 'Boolean'; If FieldType=ftFloat Then Result := 'Float'; If FieldType=ftCurrency Then Result := 'Currency'; If FieldType=ftBCD Then Result := 'BCD'; If FieldType=ftDate Then Result := 'Date'; If FieldType=ftTime Then Result := 'Time'; If FieldType=ftDateTime Then Result := 'DateTime'; If FieldType=ftBytes Then Result := 'Bytes'; If FieldType=ftVarBytes Then Result := 'VarBytes'; If FieldType=ftBlob Then Result := 'Blob'; If FieldType=ftMemo Then Result := 'Memo'; If FieldType=ftGraphic Then Result := 'Graphic'; Except End; End; //Unit Description UnitIndex Master Index
Procedure TDBTableFilterDlg_ads.MakeBeveled(B : Boolean); Var i : Integer; Begin If Not B Then Begin For I := 0 to ComponentCount -1 Do Begin If Components[I] is TPanel Then Begin TPanel(Components[I]).BevelOuter := bvNone; TPanel(Components[I]).BevelInner := bvNone; End; End; End Else Begin For I := 0 to PanelFilterTop.ComponentCount -1 Do Begin If PanelFilterTop.Components[I] is TPanel Then Begin TPanel(Components[I]).BevelOuter := bvRaised; TPanel(Components[I]).BevelInner := bvLowered; End; End; End; End; //Unit Description UnitIndex Master Index
Procedure TDBTableFilterDlg_ads.SetComboBoxColor(C : TColor); Var I : Integer; Begin For I := 0 to ComponentCount -1 Do Begin If Components[I] is TComboBox Then Begin TComboBox(Components[I]).Color := C; TComboBox(Components[I]).ParentColor := False; End; End; End; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.lb_FieldNameClick(Sender: TObject); Var FieldType : String; begin FieldType := ''; FilterButtonsEnabled; Field := lb_FieldName.Items[lb_FieldName.ItemIndex]; If Not (Field = '') Then Begin FieldType := UpperCase(TypeFieldFromDataSet(DataSet,Field)); If (FieldType = 'STRING') Or (FieldType = 'MEMO') Then Begin WildCard := True; ComboBoxOperator.Items.Clear; ComboBoxOperator.Items.Clear; ComboBoxOperator.Items.Add('='); ComboBoxOperator.ItemIndex := 0; ComboBoxOperator.Text := '='; End Else Begin WildCard := False; ComboBoxOperator.Items.Clear; ComboBoxOperator.Items.Add('='); ComboBoxOperator.Items.Add('<>'); ComboBoxOperator.Items.Add('>'); ComboBoxOperator.Items.Add('<'); ComboBoxOperator.Items.Add('>='); ComboBoxOperator.Items.Add('<='); ComboBoxOperator.ItemIndex := 0; ComboBoxOperator.Text := '='; End; End Else Begin WildCard := False; ComboBoxOperator.Items.Clear; ComboBoxOperator.Items.Add('='); ComboBoxOperator.Items.Add('<>'); ComboBoxOperator.Items.Add('>'); ComboBoxOperator.Items.Add('<'); ComboBoxOperator.Items.Add('>='); ComboBoxOperator.Items.Add('<='); End; end; //Unit Description UnitIndex Master Index
Procedure TDBTableFilterDlg_ads.SetColorOfMemo(Value : TColor); Begin FColorOfMemo := Value; FiltersNew.Color := Value; End; //Unit Description UnitIndex Master Index
Procedure TDBTableFilterDlg_ads.SetColorOfFilterEdit(Value : TColor); Begin FColorOfFilterEdit := Value; EditFilter.Color := Value; End; //Unit Description UnitIndex Master Index
Procedure TDBTableFilterDlg_ads.SetColorOfComboBoxs(Value : TColor); Begin FColorOfComboBoxs := Value; SetComboBoxColor(Value); End; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.SetBeveled(Value : Boolean); Begin FBeveled := Value; SetBevel; End; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.SetReSizeNow(Value : Boolean); Begin ReSizeAll; FReSizeNow := Value; End; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.SetMinFormWidth(Value : Integer); Begin If FMinFormWidth <> Value Then FMinFormWidth := Value; End; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.SetMinFormHeight(Value : Integer); Begin If FMinFormHeight <> Value Then FMinFormHeight := Value; End; //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.SetBevel; Begin MakeBeveled(Beveled); End; {$IFNDEF WIN32} {***BDE Routines***************************************************************} {set filter on table} //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.SetFilter; {custom type - stores filter expression and components} type TmyFilter = record Expr: CANExpr; Nodes: array[0..2] of CANNode; literals: array[0..276] of char; end; {******************************************************} var Table : TTable; myFilter: TmyFilter; {instance of custom type} fldName, fldFilter: pChar; {fieldname and filter char's} dbResult: DBiResult; {result from BDE} hFilter: hDBiFilter; {handle to filter} si: integer; {stores filter for smallint field type} li, liT: longint; {stores filter for longint field type} ex: extended; {stores filter for date,time,float and currency fields} dt: TDateTime; {used in date\time fields} dl: double; {used for timeStamp fields} yr, mh, dy, hr, mn, sc, ms: word; {used for date\time fields} {******************************************************} begin {exit if fields not set} if Table = nil then exit; if Field = '' then exit; if Filter = '' then exit; {find field type} case FTable.FieldByName(FField).DataType of ftString: myFilter.nodes[2].canConst.iType := fldZSTRING; ftCurrency: myFilter.nodes[2].canConst.iType := fldstMONEY; ftDate: myFilter.nodes[2].canConst.iType := fldDATE; ftTime: myFilter.nodes[2].canConst.iType := fldTIME; ftFloat: myFilter.nodes[2].canConst.iType := fldFLOAT; ftInteger: myFilter.nodes[2].canConst.iType := fldINT32; ftSmallInt: myFilter.nodes[2].canConst.iType := fldINT16; ftDateTime: myFilter.nodes[2].canConst.iType := fldTIMESTAMP; ftBoolean: myFilter.nodes[2].canConst.iType := fldBool; end; {******************************************************} fldName := StrAlloc(DBiMAXNAMELEN+1); {allocate space for field name} try {allocate resources and copy} StrPCopy(fldName,FField); StrCopy(myFilter.Literals,fldName); {*****************************************************} {switch to account for field type - setting filter} case FTable.FieldByName(FField).DataType of {string} ftString: begin fldFilter := StrAlloc(sizeOf(FFilter)+1); try {the literals must contain the fieldname (terminated by a null) followed by the filter expression (terminated by a null)} StrPCopy(fldFilter,FFilter); StrCat(myFilter.Literals,'Z'); {catenate temp char value} StrCat(myFilter.Literals,fldFilter); {add filter to literals} myFilter.Literals[StrLen(fldName)] := #0; {replace temp with null} StrCat(myFilter.Literals,#0); {add null to end of filter} finally StrDispose(fldFilter); end; end; {long int} ftInteger: begin try li := StrToInt(FFilter); move(li,myFilter.Literals[StrLen(fldName)+1],sizeOf(li)); except on EConvertError do begin messageDlg('Please enter an integer value',mtError,[mbOK],0); exit; end; end; end; {small int} ftSmallInt: begin try si := StrToInt(FFilter); move(si,myFilter.Literals[StrLen(fldName)+1],sizeOf(si)); except on EConvertError do begin messageDlg('Please enter an integer value',mtError,[mbOK],0); exit; end; end; end; {float} ftFloat: begin try dl := StrToFloat(FFilter); move(dl,myFilter.Literals[StrLen(fldName)+1],sizeOf(dl)); except on EConvertError do begin messageDlg('Please enter a valid value',mtError,[mbOK],0); exit; end; end; end; {date} ftDate: begin try dt := StrToDate(FFilter); DecodeDate(dt,yr,mh,dy); dbResult := DBiDateEncode(mh,dy,integer(yr),li); if dbResult = DBIERR_NONE then move(li,myFilter.Literals[StrLen(fldName)+1],sizeOf(li)) else begin messageDlg('Could not encode date.',mtError,[mbOK],0); exit; end; except on EConvertError do begin messageDlg('Please enter a date value',mtError,[mbOK],0); exit; end; end; end; {logical} ftBoolean: begin fldFilter := StrAlloc(sizeOf(FFilter)+1); try {the literals must contain the fieldname (terminated by a null) followed by the filter expression (terminated by a null)} StrPCopy(fldFilter,FFilter); StrCat(myFilter.Literals,'Z'); {catenate temp char value} StrCat(myFilter.Literals,fldFilter); {add filter to literals} myFilter.Literals[StrLen(fldName)] := #0; {replace temp with null} StrCat(myFilter.Literals,#0); {add null to end of filter} finally StrDispose(fldFilter); end; end; {time} ftTime: begin messageDlg('Can not place filters on time fields',mtError,[mbOK],0); exit; {dt := StrToTime(FFilter); DecodeTime(dt,hr,mn,sc,ms); dbResult := DBiTimeEncode(hr,mn,ms,li); if dbResult = DBiERR_NONE then move(li,myFilter.Literals[StrLen(fldName)+1],sizeOf(li)) else begin messageDlg('Could not encode time.',mtError,[mbOK],0); exit; end;} end; ftDateTime: begin messageDlg('Can not place filters on TimeStamp fields',mtError,[mbOK],0); exit; {dt := StrToDateTime(FFilter); li := trunc(dt); DecodeTime(dt,hr,mn,sc,ms); dbResult := DBiTimeEncode(hr,mn,ms,liT); dbResult := DBiTimeStampEncode(li,liT,dl); move(dl,myFilter.Literals[StrLen(fldName)+1],sizeOf(dl));} end; {money} ftCurrency: begin messageDlg('Can not place filters on currency fields.',mtError,[mbOK],0); exit; {dl := StrToFloat(FFilter); move(dl,myFilter.Literals[StrLen(fldName)+1],sizeOf(dl));} end; end; {*****************************************************} {set the CANExpr field of the filter expression} myFilter.Expr.iVer := 1; myFilter.Expr.iTotalSize := sizeOf(myFilter); myFilter.Expr.iNodes := 3; myFilter.Expr.iNodeStart := sizeOf(CANExpr); myFilter.Expr.iLiteralStart := sizeOf(CANExpr) + 3 * sizeOf(CANNode); {set the Nodes field of the filter expression} {first part of array} myFilter.nodes[0].canBinary.NodeClass := nodeBinary; {switch on filter operator} case FFilterOperator of foEqual: myFilter.nodes[0].canBinary.canOP := canEQ; foNotEqual: myFilter.nodes[0].canBinary.canOP := canNE; foGreaterThan: myFilter.nodes[0].canBinary.canOP := canGT; foLessThan: myFilter.nodes[0].canBinary.canOP := canLT; foGreaterEqualThan: myFilter.nodes[0].canBinary.canOP := canGE; foLessEqualThan: myFilter.nodes[0].canBinary.canOP := canLE; end; myFilter.nodes[0].canBinary.iOperand1 := sizeOf(CANNode); myFilter.nodes[0].canBinary.iOperand2 := 2 * sizeOf(CANNode); {second part of array} myFilter.nodes[1].canField.nodeClass := nodeField; myFilter.nodes[1].canField.canOP := canField2; myFilter.nodes[1].canField.iFieldNum := 0; myFilter.nodes[1].canField.iNameOffset := 0; {third part of array} myFilter.nodes[2].canConst.nodeClass := nodeConst; myFilter.nodes[2].canConst.canOP := canCONST2; myFilter.nodes[2].canConst.iSize := 3; myFilter.nodes[2].canConst.iOffset := StrLen(fldName) + 1; {run filter} dbResult := DBiAddFilter(FTable.handle,1,1,False,addr(myFilter),nil,hFilter); if dbResult = DBIERR_NONE then begin dbResult := DBiActivateFilter(FTable.handle,hFilter); if dbResult = DBIERR_NONE then FTable.first else messageDlg('Could not activate filter',mtError,[mbOK],0); end else messageDlg('Could not set filter',mtError,[mbOK],0); finally StrDispose(fldName); {free resources allocated to fieldname} end; end; {remove filter} //Unit Description UnitIndex Master Index
procedure TDBTableFilterDlg_ads.RemoveFilter; var dbResult: DBiResult; {result from BDE} hFilter: hDBiFilter; {handle to filter} begin {exit if fields not set} if Table = nil then exit; dbResult := DBiDeactivateFilter(FTable.handle,nil); {if filter handle is null, then all table filters are deactivated} if dbResult = DBIERR_NONE then begin dbResult := DBiDropFilter(FTable.handle,nil); {if filter handle is null, then all table filters are dropped} if dbResult = DBIERR_NONE then begin FTable.First; end else messageDlg('Could not dispose of filter',mtError,[mbOK],0); end else messageDlg('Could not deactivate filter',mtError,[mbOK],0); end; {$ENDIF} Constructor TDBTableFilterDlg_ads.Create(AOwner: TComponent); Begin ProcName := 'TDBTableFilterDlg_ads.Create'; Try inherited; Self.Parent := TWincontrol(AOwner); pnl_base := TPanel.Create(AOwner); With pnl_base Do Begin Parent := Self; Left := 0; Top := 0; Width := 476; Height := 395; Align := alClient; BevelOuter := bvNone; Caption := ' '; ParentColor := True; TabOrder := 0; End; PanelButtons := TPanel.Create(AOwner); With PanelButtons Do Begin Parent := pnl_base; Left := 0; Top := 346; Width := 476; Height := 49; Align := alBottom; BevelInner := bvNone; BorderWidth := 10; Caption := ' '; Ctl3D := False; ParentColor := True; ParentCtl3D := False; TabOrder := 1; End; PanelButtonSlider := TPanel.Create(AOwner); With PanelButtonSlider Do Begin Parent := PanelButtons; Left := 12; Top := 12; Width := 453; Height := 25; BevelOuter := bvNone; Caption := ' '; ParentColor := True; TabOrder := 0; End; ButtonOK := TBitBtn.Create(AOwner); With ButtonOK Do Begin Parent := PanelButtonSlider; Left := 233; Top := 0; Width := 108; Height := 25; Hint := 'Execute the filter changes.'; Caption := 'Apply'; TabOrder := 0; OnClick := ButtonOKClick; Kind := bkOK; End; ButtonCancel := TBitBtn.Create(AOwner); With ButtonCancel Do Begin Parent := PanelButtonSlider; Left := 345; Top := 0; Width := 108; Height := 25; Hint := 'Close this dialog and make no changes.'; TabOrder := 1; OnClick := ButtonCancelClick; Kind := bkCancel; End; PanelFilterTop := TPanel.Create(AOwner); With PanelFilterTop Do Begin Parent := pnl_base; Left := 0; Top := 0; Width := 476; Height := 346; Align := alClient; BevelOuter := bvNone; Caption := ' '; ParentColor := True; TabOrder := 0; End; PanelFilter := TPanel.Create(AOwner); With PanelFilter Do Begin Parent := PanelFilterTop; Left := 0; Top := 205; Width := 476; Height := 141; Align := alClient; BevelInner := bvNone; BorderWidth := 10; Caption := ' '; ParentColor := True; TabOrder := 1; End; FiltersOld := TMemo.Create(AOwner); With FiltersOld Do Begin Parent := PanelFilter; Left := 12; Top := 12; Width := 452; Height := 117; TabStop := False; Align := alClient; ScrollBars := ssVertical; TabOrder := 0; Visible := False; Lines.Clear; With Lines Do Begin Try Add('FiltersOld'); Except End; End; End; FiltersNew := TMemo.Create(AOwner); With FiltersNew Do Begin Parent := PanelFilter; Left := 12; Top := 12; Width := 452; Height := 117; Hint := 'You can edit the filters.'; Align := alClient; ScrollBars := ssVertical; TabOrder := 1; End; PanelAddFilter := TPanel.Create(AOwner); With PanelAddFilter Do Begin Parent := PanelFilterTop; Left := 0; Top := 0; Width := 476; Height := 205; Align := alTop; BevelInner := bvNone; BorderWidth := 10; Caption := ' '; ParentColor := True; TabOrder := 0; End; Field_Name_Base := TPanel.Create(AOwner); With Field_Name_Base Do Begin Parent := PanelAddFilter; Left := 12; Top := 12; Width := 144; Height := 181; Align := alLeft; BevelOuter := bvNone; BorderWidth := 5; Caption := ' '; ParentColor := True; TabOrder := 0; End; L_FieldName := TPanel.Create(AOwner); With L_FieldName Do Begin Parent := Field_Name_Base; Left := 5; Top := 5; Width := 134; Height := 18; Align := alTop; Alignment := taLeftJustify; BevelOuter := bvNone; Caption := 'Field Name'; ParentColor := True; TabOrder := 0; End; lb_FieldName := TListBox.Create(AOwner); With lb_FieldName Do Begin Parent := Field_Name_Base; Left := 5; Top := 23; Width := 134; Height := 153; Hint := 'Select a field.'; Align := alClient; ItemHeight := 16; TabOrder := 1; OnClick := lb_FieldNameClick; End; Filter_Base := TPanel.Create(AOwner); With Filter_Base Do Begin Parent := PanelAddFilter; Left := 300; Top := 12; Width := 164; Height := 181; Align := alRight; BevelOuter := bvNone; BorderWidth := 5; Caption := ' '; ParentColor := True; TabOrder := 1; End; Panel7 := TPanel.Create(AOwner); With Panel7 Do Begin Parent := Filter_Base; Left := 5; Top := 5; Width := 154; Height := 18; Align := alTop; Alignment := taLeftJustify; BevelOuter := bvNone; Caption := 'Value'; ParentColor := True; TabOrder := 0; End; GroupBox1 := TGroupBox.Create(AOwner); With GroupBox1 Do Begin Parent := Filter_Base; Left := 5; Top := 53; Width := 154; Height := 123; Align := alClient; Caption := 'Options'; TabOrder := 1; End; Panel2 := TPanel.Create(AOwner); With Panel2 Do Begin Parent := GroupBox1; Left := 2; Top := 18; Width := 15; Height := 103; Align := alLeft; BevelOuter := bvNone; Caption := ' '; ParentColor := True; TabOrder := 0; End; Panel3 := TPanel.Create(AOwner); With Panel3 Do Begin Parent := GroupBox1; Left := 17; Top := 18; Width := 135; Height := 103; Align := alClient; BevelOuter := bvNone; Caption := ' '; ParentColor := True; TabOrder := 1; End; Case_cb := TCheckBox.Create(AOwner); With Case_cb Do Begin Parent := Panel3; Left := 10; Top := 48; Width := 111; Height := 25; Hint := 'Check if the filter is case sensitive.'; Caption := 'Case'; Ctl3D := True; ParentCtl3D := False; TabOrder := 0; OnClick := Case_cbClick; End; Exact_cb := TCheckBox.Create(AOwner); With Exact_cb Do Begin Parent := Panel3; Left := 10; Top := 72; Width := 119; Height := 33; Hint := 'Check if the filter should use only exact matches.'; Caption := 'Exact'; Ctl3D := True; ParentCtl3D := False; TabOrder := 1; OnClick := Exact_cbClick; End; Append_Base := TPanel.Create(AOwner); With Append_Base Do Begin Parent := Panel3; Left := 0; Top := 0; Width := 135; Height := 51; Align := alTop; BevelOuter := bvNone; BorderWidth := 5; Caption := ' '; ParentColor := True; TabOrder := 2; End; Append_Label := TPanel.Create(AOwner); With Append_Label Do Begin Parent := Append_Base; Left := 5; Top := 5; Width := 125; Height := 14; Align := alTop; Alignment := taLeftJustify; BevelOuter := bvNone; Caption := 'Append'; ParentColor := True; TabOrder := 0; End; Append_cb := TComboBox.Create(AOwner); With Append_cb Do Begin Parent := Append_Base; Left := 8; Top := 21; Width := 116; Height := 24; Hint := 'Select whether AND or OR should separate this from previous fil' + 'ters.'; Ctl3D := True; DropDownCount := 2; ItemHeight := 16; ParentCtl3D := False; TabOrder := 1; Text := 'And'; OnChange := Append_cbChange; Items.Clear; With Items Do Begin Try Add('And'); Except End; Try Add('And Not'); Except End; Try Add('Or'); Except End; Try Add('Or Not'); Except End; End; End; Panel1 := TPanel.Create(AOwner); With Panel1 Do Begin Parent := Filter_Base; Left := 5; Top := 23; Width := 154; Height := 30; Align := alTop; BevelOuter := bvNone; Caption := ' '; ParentColor := True; TabOrder := 2; End; EditFilter := TEdit.Create(AOwner); With EditFilter Do Begin Parent := Panel1; Left := 5; Top := 1; Width := 146; Height := 24; Hint := 'Enter a value for the field selected.'; Ctl3D := True; ParentCtl3D := False; TabOrder := 0; OnChange := EditFilterChange; End; PanelTopMiddle := TPanel.Create(AOwner); With PanelTopMiddle Do Begin Parent := PanelAddFilter; Left := 156; Top := 12; Width := 144; Height := 181; Align := alClient; BevelOuter := bvNone; BorderWidth := 5; Caption := ' '; ParentColor := True; TabOrder := 2; End; Panel4 := TPanel.Create(AOwner); With Panel4 Do Begin Parent := PanelTopMiddle; Left := 5; Top := 5; Width := 134; Height := 48; Align := alTop; BevelOuter := bvNone; Caption := ' '; ParentColor := True; TabOrder := 0; End; Panel5 := TPanel.Create(AOwner); With Panel5 Do Begin Parent := Panel4; Left := 0; Top := 0; Width := 134; Height := 18; Align := alTop; Alignment := taLeftJustify; BevelOuter := bvNone; Caption := 'Operator'; ParentColor := True; TabOrder := 0; End; ComboBoxOperator := TComboBox.Create(AOwner); With ComboBoxOperator Do Begin Parent := Panel4; Left := 3; Top := 20; Width := 126; Height := 24; Hint := 'Select the filter operator.'; Style := csDropDownList; Ctl3D := True; ItemHeight := 16; ParentCtl3D := False; TabOrder := 1; OnChange := ComboBoxOperatorChange; Items.Clear; With Items Do Begin Try Add('='); Except End; Try Add('<>'); Except End; Try Add('>'); Except End; Try Add('<'); Except End; Try Add('>='); Except End; Try Add('<='); Except End; End; End; GroupBox2 := TGroupBox.Create(AOwner); With GroupBox2 Do Begin Parent := PanelTopMiddle; Left := 5; Top := 53; Width := 134; Height := 123; Align := alClient; Caption := 'Actions'; TabOrder := 1; End; PanelActions := TPanel.Create(AOwner); With PanelActions Do Begin Parent := GroupBox2; Left := 2; Top := 18; Width := 130; Height := 103; Align := alClient; BevelOuter := bvNone; Caption := ' '; ParentColor := True; TabOrder := 0; End; ButtonAdd := TBitBtn.Create(AOwner); With ButtonAdd Do Begin Parent := PanelActions; Left := 29; Top := 14; Width := 75; Height := 25; Hint := 'Add a filter to the current filter.'; Caption := 'Add'; ParentShowHint := False; ShowHint := True; TabOrder := 0; OnClick := ButtonAddClick; End; ButtonClear := TBitBtn.Create(AOwner); With ButtonClear Do Begin Parent := PanelActions; Left := 30; Top := 54; Width := 75; Height := 25; Hint := 'Clear all filters.'; Caption := 'Clear'; TabOrder := 1; OnClick := ButtonClearClick; End; Except On E : Exception Do RaiseError(UnitName,ProcName,E); End; End; Destructor TDBTableFilterDlg_ads.Destroy; Begin ProcName := 'TDBTableFilterDlg_ads.Destroy'; Try ButtonClear .Free; ButtonAdd .Free; PanelActions .Free; GroupBox2 .Free; ComboBoxOperator .Free; Panel5 .Free; Panel4 .Free; PanelTopMiddle .Free; EditFilter .Free; Panel1 .Free; Append_cb .Free; Append_Label .Free; Append_Base .Free; Exact_cb .Free; Case_cb .Free; Panel3 .Free; Panel2 .Free; GroupBox1 .Free; Panel7 .Free; Filter_Base .Free; lb_FieldName .Free; L_FieldName .Free; Field_Name_Base .Free; PanelAddFilter .Free; FiltersNew .Free; FiltersOld .Free; PanelFilter .Free; PanelFilterTop .Free; ButtonCancel .Free; ButtonOK .Free; PanelButtonSlider .Free; PanelButtons .Free; pnl_base .Free; inherited Destroy; Except On E : Exception Do RaiseError(UnitName,ProcName,E); End; End; {!~DlgDBFilter_ads } //Unit Description UnitIndex Master Index
Function DlgDBFilter_ads(DataSet: TDataSet): Boolean; Var Dialog : TForm; Form : TDBTableFilterDlg_ads; Begin Result := False; Dialog := nil; ProcName := 'DlgDBFilter_ads'; Try Try Dialog := TForm.Create(nil); Form := TDBTableFilterDlg_ads.Create(Dialog); Form.Parent:= Dialog; Form.Align := alClient; With Dialog Do Begin Left := 245; Top := 89; Width := 484; Height := 422; BorderIcons := [biSystemMenu, biMaximize]; Caption := 'Table Filter Dialog'; Color := clBtnFace; Font.Color := clWindowText; Font.Height := -14; Font.Name := 'System'; Font.Style := []; OldCreateOrder := True; Position := poScreenCenter; OnActivate := Form.FormActivate; OnCreate := Form.FormCreate; OnResize := Form.FormResize; PixelsPerInch := 96; End; Form.FormCreate(Dialog); Form.DataSet := Dataset; Form.Case_cb.Checked := False; Dialog.ShowModal; If Dialog.ModalResult = mrOK Then Begin //Do Something here Result := True; End; Finally Dialog.Free; End; Except On E : Exception Do RaiseError(UnitName,ProcName,E); End; End; Initialization UnitName := 'ads_DlgDBFilter'; ProcName := 'Unknown'; End. //