diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.lpi b/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.lpi
index b98305288..58fc4da7d 100644
--- a/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.lpi
+++ b/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.lpi
@@ -55,13 +55,13 @@
-
+
-
+
@@ -70,9 +70,9 @@
-
-
-
+
+
+
@@ -407,12 +407,10 @@
-
-
+
-
@@ -447,10 +445,11 @@
-
-
-
-
+
+
+
+
+
@@ -468,129 +467,163 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
-
-
+
+
-
-
+
+
-
+
+
-
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
+
@@ -615,4 +648,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.res b/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.res
index 6d5b2ae4e..c51fa0c8d 100644
Binary files a/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.res and b/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.res differ
diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid/rxdbgridmainunit.lfm b/components/rx/trunk/demos/rxdbgrid/RxDBGrid/rxdbgridmainunit.lfm
index 184d44000..9b0ac1674 100644
--- a/components/rx/trunk/demos/rxdbgrid/RxDBGrid/rxdbgridmainunit.lfm
+++ b/components/rx/trunk/demos/rxdbgrid/RxDBGrid/rxdbgridmainunit.lfm
@@ -11,7 +11,7 @@ object RxDBGridMainForm: TRxDBGridMainForm
OnCreate = FormCreate
SessionProperties = 'RxDBGridExportSpreadSheet1.FileName;RxDBGridExportSpreadSheet1.OpenAfterExport;RxDBGridExportSpreadSheet1.Options;RxDBGridExportSpreadSheet1.PageName;RxDBGridPrint1.Options;RxDBGridPrint1.Orientation;RxDBGridPrint1.PageMargin;RxDBGridPrint1.ReportTitle;RxDBGridPrint1.ShowColumnHeaderOnAllPage'
ShowHint = True
- LCLVersion = '1.7'
+ LCLVersion = '1.9.0.0'
object RxDBGrid1: TRxDBGrid
Left = 0
Height = 627
@@ -33,8 +33,6 @@ object RxDBGridMainForm: TRxDBGridMainForm
Constraints.MinWidth = 50
Constraints.MaxWidth = 150
EditButtons = <>
- Filter.IsNull = False
- Filter.IsAll = True
Filter.Font.Style = [fsItalic]
Filter.DropDownRows = 0
Filter.EmptyValue = '(Нет)'
@@ -59,8 +57,6 @@ object RxDBGridMainForm: TRxDBGridMainForm
Width = 100
FieldName = 'ID'
EditButtons = <>
- Filter.IsNull = False
- Filter.IsAll = True
Filter.Font.Style = [fsItalic]
Filter.DropDownRows = 0
Filter.Color = clLime
@@ -83,8 +79,6 @@ object RxDBGridMainForm: TRxDBGridMainForm
FieldName = 'Developer'
Constraints.MinWidth = 10
EditButtons = <>
- Filter.IsNull = False
- Filter.IsAll = True
Filter.Font.Style = [fsItalic]
Filter.DropDownRows = 0
Filter.Color = clLime
@@ -92,6 +86,7 @@ object RxDBGridMainForm: TRxDBGridMainForm
Filter.AllValue = '(All values)'
Filter.EmptyFont.Style = [fsItalic]
Filter.ItemIndex = -1
+ Filter.Style = rxfstDialog
Footer.Value = 'This is test'
Footer.ValueType = fvtStaticText
Footer.Font.Color = clRed
@@ -111,8 +106,6 @@ object RxDBGridMainForm: TRxDBGridMainForm
Width = 110
FieldName = 'NAME'
EditButtons = <>
- Filter.IsNull = False
- Filter.IsAll = True
Filter.Font.Style = [fsItalic]
Filter.DropDownRows = 0
Filter.Color = clLime
@@ -120,6 +113,7 @@ object RxDBGridMainForm: TRxDBGridMainForm
Filter.AllValue = '(All values)'
Filter.EmptyFont.Style = [fsItalic]
Filter.ItemIndex = -1
+ Filter.Style = rxfstManualEdit
Footers = <>
WordWrap = True
end
@@ -146,8 +140,6 @@ object RxDBGridMainForm: TRxDBGridMainForm
Hint = 'Clear value'
OnClick = TRxColumnEditButtons2Click
end>
- Filter.IsNull = False
- Filter.IsAll = True
Filter.Font.Style = [fsItalic]
Filter.DropDownRows = 0
Filter.Color = clLime
@@ -182,8 +174,6 @@ object RxDBGridMainForm: TRxDBGridMainForm
Width = 136
FieldName = 'Date_Present'
EditButtons = <>
- Filter.IsNull = False
- Filter.IsAll = True
Filter.Font.Style = [fsItalic]
Filter.DropDownRows = 0
Filter.EmptyValue = '(Нет)'
@@ -201,8 +191,6 @@ object RxDBGridMainForm: TRxDBGridMainForm
Width = 141
FieldName = 'DEVELOPER_ID'
EditButtons = <>
- Filter.IsNull = False
- Filter.IsAll = True
Filter.Font.Style = [fsItalic]
Filter.DropDownRows = 0
Filter.EmptyValue = '(Нет)'
@@ -364,8 +352,6 @@ object RxDBGridMainForm: TRxDBGridMainForm
Hint = 'Style "UpDownRx"'
Style = ebsUpDownRx
end>
- Filter.IsNull = False
- Filter.IsAll = True
Filter.Font.Style = [fsItalic]
Filter.DropDownRows = 0
Filter.EmptyValue = '(Нет)'
@@ -450,7 +436,6 @@ object RxDBGridMainForm: TRxDBGridMainForm
GridLineStyle = psSolid
DataSource = Datasource1
Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColumnMove, dgColLines, dgRowLines, dgTabs, dgAlwaysShowSelection, dgConfirmDelete, dgMultiselect, dgHeaderPushedLook]
- ParentColor = False
PopupMenu = PopupMenu1
TabOrder = 0
TitleStyle = tsNative
diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid/rxdbgridmainunit.pas b/components/rx/trunk/demos/rxdbgrid/RxDBGrid/rxdbgridmainunit.pas
index db9695a6a..a7674e032 100644
--- a/components/rx/trunk/demos/rxdbgrid/RxDBGrid/rxdbgridmainunit.pas
+++ b/components/rx/trunk/demos/rxdbgrid/RxDBGrid/rxdbgridmainunit.pas
@@ -131,7 +131,7 @@ begin
RxMemoryData2.AppendRecord([3, 'Microsoft']);
RxMemoryData1.Open;
- RxMemoryData1.AppendRecord([1, 'Lazarus 0.9.23', 0, 'Open source', EncodeDate(2006, 1, 1), 1]);
+ RxMemoryData1.AppendRecord([1, 'Lazarus', 0, 'Open source', EncodeDate(2006, 1, 1), 1]);
RxMemoryData1.AppendRecord([2, 'Delphi 7.0 Prof', 990, 'Borland', EncodeDate(2002, 1, 1), 2]);
RxMemoryData1.AppendRecord([3, 'Open Office 2.2.0', 0, 'Open source', EncodeDate(2006, 10, 1), 1]);
RxMemoryData1.AppendRecord([4, 'Microsoft Office', 150, 'Microsoft', EncodeDate(1997, 8, 12), 3]);
@@ -147,6 +147,8 @@ begin
RxMemoryData1.AppendRecord([14, 'Бух. комплекс "45-я Параллель"', 180, 'ООО "Boot"', EncodeDate(2007, 2, 1), 3]);
RxMemoryData1.AppendRecord([15, 'Консультант+', 380, 'Консультант+', EncodeDate(2007, 2, 1), 3]);
RxMemoryData1.AppendRecord([16, 'Гарант', 480, 'Гарант', EncodeDate(2007, 2, 1), 3]);
+ RxMemoryData1.AppendRecord([17, 'Fedora Linux', 0, 'Open source', EncodeDate(2007, 2, 1), 3]);
+ RxMemoryData1.AppendRecord([17, 'Ubuntu Linux', 0, 'Open source', EncodeDate(2007, 2, 1), 3]);
RxMemoryData1.First;
@@ -234,22 +236,20 @@ end;
procedure TRxDBGridMainForm.DoFillFilters;
var
- C:TRxColumn;
- i:integer;
+ C: TRxColumn;
begin
- for i:=0 to RxDBGrid1.Columns.Count-1 do
+ for C in RxDBGrid1.Columns do
begin
- C:=TRxColumn(RxDBGrid1.Columns[i]);
C.Filter.EmptyValue:='None...';
C.Filter.ValueList.Add(C.Filter.EmptyValue);
+// C.Filter.Style:=;
end;
RxMemoryData1.First;
while not RxMemoryData1.EOF do
begin
- for i:=0 to RxDBGrid1.Columns.Count-1 do
+ for C in RxDBGrid1.Columns do
begin
- C:=TRxColumn(RxDBGrid1.Columns[i]);
if C.Filter.ValueList.IndexOf(C.Field.AsString)<0 then
C.Filter.ValueList.Add(C.Field.AsString);
end;
diff --git a/components/rx/trunk/rxdb/rxdbgrid.pas b/components/rx/trunk/rxdb/rxdbgrid.pas
index 6b4ed5285..22a397d9c 100644
--- a/components/rx/trunk/rxdb/rxdbgrid.pas
+++ b/components/rx/trunk/rxdb/rxdbgrid.pas
@@ -384,7 +384,7 @@ type
{ TRxColumnFilter }
TRxFilterState = (rxfsAll, rxfsEmpty, rxfsNonEmpty, rxfsFilter{, rxfsTopXXXX});
- TRxFilterStyle = (rxfstSimple, rxfstDialog);
+ TRxFilterStyle = (rxfstSimple, rxfstDialog, rxfstManualEdit);
TRxColumnFilter = class(TPersistent)
private
@@ -710,6 +710,23 @@ type
property Col: integer read FCol;
end;
+ { TFilterSimpleEdit }
+
+ TFilterSimpleEdit = class(TEdit)
+ private
+ FGrid: TCustomGrid;
+ FCol: integer;
+ FMouseFlag: boolean;
+ protected
+ procedure WndProc(var TheMessage: TLMessage); override;
+ procedure KeyDown(var Key: word; Shift: TShiftState); override;
+ public
+ procedure Show(Grid: TCustomGrid; Col: integer);
+ property Grid: TCustomGrid read FGrid;
+ property Col: integer read FCol;
+ property MouseFlag: boolean read FMouseFlag write FMouseFlag;
+ end;
+
{ TRxDBGrid }
TRxDBGrid = class(TCustomDBGrid)
@@ -763,6 +780,7 @@ type
FFilterListEditor: TFilterListCellEditor;
FFilterColDlgButton: TFilterColDlgButton;
+ FFilterSimpleEdit:TFilterSimpleEdit;
// FOldPosition: Integer;
FVersion: integer;
@@ -892,6 +910,7 @@ type
procedure FFilterListEditorOnChange(Sender: TObject);
procedure FFilterListEditorOnCloseUp(Sender: TObject);
procedure FFilterColDlgButtonOnClick(Sender: TObject);
+ procedure FFilterSimpleEditOnChange(Sender: TObject);
procedure InternalOptimizeColumnsWidth(AColList: TList);
procedure VisualChange; override;
@@ -1245,6 +1264,45 @@ type
procedure EditingDone; override;
end;
+{ TFilterSimpleEdit }
+
+procedure TFilterSimpleEdit.WndProc(var TheMessage: TLMessage);
+begin
+ if TheMessage.msg = LM_KILLFOCUS then
+ begin
+ Change;
+ Hide;
+ if HWND(TheMessage.WParam) = HWND(Handle) then
+ begin
+ // lost the focus but it returns to ourselves
+ // eat the message.
+ TheMessage.Result := 0;
+ exit;
+ end;
+ end;
+ inherited WndProc(TheMessage);
+end;
+
+procedure TFilterSimpleEdit.KeyDown(var Key: word; Shift: TShiftState);
+begin
+ inherited KeyDown(Key, Shift);
+ case Key of
+ VK_RETURN:
+ begin
+ Change;
+ Hide;
+ end;
+ end;
+end;
+
+procedure TFilterSimpleEdit.Show(Grid: TCustomGrid; Col: integer);
+begin
+ FGrid := Grid;
+ FCol := Col;
+ Visible := True;
+ SetFocus;
+end;
+
{ TRxColumnGroupParam }
procedure TRxColumnGroupParam.FontChanged(Sender: TObject);
@@ -3155,6 +3213,7 @@ begin
begin
FFilterListEditor.Hide;
FFilterColDlgButton.Hide;
+ FFilterSimpleEdit.Hide;
LayoutChanged;
end;
@@ -3390,6 +3449,11 @@ begin
RowHeights[0] := RowHeights[0] + FFilterListEditor.Height
end
else
+ if Assigned(FFilterSimpleEdit) then
+ begin
+ RowHeights[0] := RowHeights[0] + FFilterSimpleEdit.Height
+ end
+ else
begin
RowHeights[0] := RowHeights[0] + FDefRowH;
end;
@@ -4858,6 +4922,11 @@ begin
begin
if C.Filter.Style = rxfstSimple then
begin
+ if FFilterSimpleEdit.Visible then
+ FFilterSimpleEdit.Hide;
+ if FFilterColDlgButton.Visible then
+ FFilterColDlgButton.Hide;
+
FFilterListEditor.Style := csDropDownList;
if C.Filter.DropDownRows>0 then
FFilterListEditor.DropDownCount := C.Filter.DropDownRows;
@@ -4876,10 +4945,32 @@ begin
FFilterListEditor.Show(Self, Cell.x - 1);
end
else
+ if C.Filter.Style = rxfstManualEdit then
begin
if FFilterListEditor.Visible then
FFilterListEditor.Hide;
+ if FFilterColDlgButton.Visible then
+ FFilterColDlgButton.Hide;
+
+ FFilterSimpleEdit.Parent := Self;
+ FFilterSimpleEdit.Width := Rect.Right - Rect.Left;
+ FFilterSimpleEdit.Height := Rect.Bottom - Rect.Top;
+ FFilterSimpleEdit.BoundsRect := Rect;
+ if C.Filter.CurrentValues.Count>0 then
+ FFilterSimpleEdit.Text := C.Filter.CurrentValues[0]
+ else
+ FFilterSimpleEdit.Text := '';
+ FFilterSimpleEdit.Show(Self, Cell.x - 1);
+ end
+ else
+ begin
+ if FFilterListEditor.Visible then
+ FFilterListEditor.Hide;
+
+ if FFilterSimpleEdit.Visible then
+ FFilterSimpleEdit.Hide;
+
FFilterColDlgButton.Parent:=Self;
FFilterColDlgButton.Width := 32;
FFilterColDlgButton.Height := Rect.Bottom - Rect.Top;
@@ -5391,6 +5482,24 @@ begin
RxDBGrid_PopUpFilterForm.Free;
end;
+procedure TRxDBGrid.FFilterSimpleEditOnChange(Sender: TObject);
+begin
+ with TRxColumn(Columns[Columns.RealIndex(FFilterSimpleEdit.Col)]).Filter do
+ begin
+ CurrentValues.Text:=FFilterSimpleEdit.Text;
+ State:=rxfsFilter;
+ end;
+
+ DataSource.DataSet.DisableControls;
+ DataSource.DataSet.Filtered:=false;
+ DataSource.DataSet.Filtered:=true;
+ CalcStatTotals;
+ DataSource.DataSet.EnableControls;
+
+ if Assigned(FOnFiltred) then
+ FOnFiltred(Self);
+end;
+
procedure TRxDBGrid.InternalOptimizeColumnsWidth(AColList: TList);
var
P: TBookmark;
@@ -5485,9 +5594,16 @@ begin
FFilterListEditor.Left:=R.Left;
end
else
+ if FFilterSimpleEdit.Visible then
+ begin
+ R:=CellRect(FFilterSimpleEdit.Col+1,0);
+ FFilterSimpleEdit.Width:=Columns[FFilterSimpleEdit.Col].Width;
+ FFilterSimpleEdit.Left:=R.Left;
+ end
+ else
if FFilterColDlgButton.Visible then
begin
- R:=CellRect(FFilterListEditor.Col+1,0);
+ R:=CellRect(FFilterColDlgButton.Col+1,0);
FFilterColDlgButton.Left := R.Right - FFilterColDlgButton.Width;
end;
end;
@@ -5834,6 +5950,15 @@ begin
else}
if Filter.CurrentValues.Count > 0 then
begin
+ if Filter.Style = rxfstManualEdit then
+ begin
+ if UTF8Pos(UTF8UpperCase(Filter.CurrentValues[0]), UTF8UpperCase(Field.DisplayText)) < 1 then
+ begin
+ Accept := False;
+ break;
+ end;
+ end
+ else
if Filter.CurrentValues.IndexOf(Field.DisplayText) < 0 then
begin
Accept := False;
@@ -6690,6 +6815,12 @@ begin
FFilterColDlgButton.OnClick := @FFilterColDlgButtonOnClick;
FFilterColDlgButton.Glyph.Assign(FEllipsisRxBMP);
+
+ FFilterSimpleEdit:=TFilterSimpleEdit.Create(nil);
+ FFilterSimpleEdit.Name := 'FFilterSimpleEdit';
+ FFilterSimpleEdit.Visible := False;
+ FFilterSimpleEdit.OnChange := @FFilterSimpleEditOnChange;
+
FColumnResizing := False;
FRxDbGridLookupComboEditor := TRxDBGridLookupComboEditor.Create(nil);
@@ -7070,7 +7201,6 @@ end;
procedure TFilterListCellEditor.WndProc(var TheMessage: TLMessage);
begin
-
if TheMessage.msg = LM_KILLFOCUS then
begin
Change;
diff --git a/components/rx/trunk/rxdb/rxmemds.pas b/components/rx/trunk/rxdb/rxmemds.pas
index 4f4cd53be..b453f6bad 100644
--- a/components/rx/trunk/rxdb/rxmemds.pas
+++ b/components/rx/trunk/rxdb/rxmemds.pas
@@ -1082,7 +1082,7 @@ begin
Result := FActive and (TBookmarkData(ABookmark^) > Low(Integer)) and
(TBookmarkData(ABookmark^) <= FLastID);
{$ELSE}
- Result := FActive and (TBookmarkData(pointer(ABookmark)^) > Low(Integer)) and
+ Result := FActive and Assigned(ABookmark) and (TBookmarkData(pointer(ABookmark)^) > Low(Integer)) and
(TBookmarkData(pointer(ABookmark)^) <= FLastID);
{$ENDIF}
end;