diff --git a/components/rx/Demos/RxHistoryNavigator/project1.ico b/components/rx/Demos/RxHistoryNavigator/project1.ico
new file mode 100644
index 000000000..0341321b5
Binary files /dev/null and b/components/rx/Demos/RxHistoryNavigator/project1.ico differ
diff --git a/components/rx/Demos/RxHistoryNavigator/project1.lpi b/components/rx/Demos/RxHistoryNavigator/project1.lpi
new file mode 100644
index 000000000..4332c1686
--- /dev/null
+++ b/components/rx/Demos/RxHistoryNavigator/project1.lpi
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/rx/Demos/RxHistoryNavigator/project1.lpr b/components/rx/Demos/RxHistoryNavigator/project1.lpr
new file mode 100644
index 000000000..2eea9e5ee
--- /dev/null
+++ b/components/rx/Demos/RxHistoryNavigator/project1.lpr
@@ -0,0 +1,21 @@
+program project1;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Interfaces, // this includes the LCL widgetset
+ Forms, Unit1, rxnew
+ { you can add units after this };
+
+{$R *.res}
+
+begin
+ RequireDerivedFormResource := True;
+ Application.Initialize;
+ Application.CreateForm(TForm1, Form1);
+ Application.Run;
+end.
+
diff --git a/components/rx/Demos/RxHistoryNavigator/project1.lps b/components/rx/Demos/RxHistoryNavigator/project1.lps
new file mode 100644
index 000000000..f121fa033
--- /dev/null
+++ b/components/rx/Demos/RxHistoryNavigator/project1.lps
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/rx/Demos/RxHistoryNavigator/project1.res b/components/rx/Demos/RxHistoryNavigator/project1.res
new file mode 100644
index 000000000..7c6cf3e4b
Binary files /dev/null and b/components/rx/Demos/RxHistoryNavigator/project1.res differ
diff --git a/components/rx/Demos/RxHistoryNavigator/unit1.lfm b/components/rx/Demos/RxHistoryNavigator/unit1.lfm
new file mode 100644
index 000000000..f8663f511
--- /dev/null
+++ b/components/rx/Demos/RxHistoryNavigator/unit1.lfm
@@ -0,0 +1,387 @@
+object Form1: TForm1
+ Left = 484
+ Height = 397
+ Top = 317
+ Width = 552
+ Caption = 'Find form'
+ ClientHeight = 397
+ ClientWidth = 552
+ Position = poScreenCenter
+ ShowHint = True
+ LCLVersion = '0.9.31'
+ object ToolPanel1: TToolPanel
+ Left = 0
+ Height = 34
+ Top = 0
+ Width = 552
+ Items = <
+ item
+ Action = actExit
+ Visible = True
+ Left = 5
+ Height = 24
+ Top = 5
+ Width = 53
+ ShowCaption = True
+ end
+ item
+ Visible = True
+ Left = 58
+ Height = 24
+ Top = 5
+ Width = 7
+ ShowCaption = False
+ ButtonStyle = tbrSeparator
+ end
+ item
+ Action = actBack
+ Visible = True
+ Left = 65
+ Height = 24
+ Top = 5
+ Width = 76
+ ShowCaption = True
+ ButtonStyle = tbrDropDownExtra
+ end
+ item
+ Action = actForward
+ Visible = True
+ Left = 141
+ Height = 24
+ Top = 5
+ Width = 89
+ ShowCaption = True
+ ButtonStyle = tbrDropDownExtra
+ end>
+ ImageList = ImageList1
+ ToolBarStyle = tbsWindowsXP
+ Options = [tpFlatBtns]
+ Align = alTop
+ BorderWidth = 4
+ ClientHeight = 34
+ ClientWidth = 552
+ TabOrder = 0
+ end
+ object Label1: TLabel
+ AnchorSideLeft.Control = Owner
+ AnchorSideTop.Control = ToolPanel1
+ AnchorSideTop.Side = asrBottom
+ Left = 6
+ Height = 18
+ Top = 40
+ Width = 99
+ BorderSpacing.Around = 6
+ Caption = 'Enter finde text'
+ ParentColor = False
+ end
+ object Edit1: TEdit
+ AnchorSideLeft.Control = Owner
+ AnchorSideTop.Control = Label1
+ AnchorSideTop.Side = asrBottom
+ AnchorSideRight.Control = BitBtn1
+ Left = 6
+ Height = 27
+ Top = 64
+ Width = 476
+ Anchors = [akTop, akLeft, akRight]
+ BorderSpacing.Around = 6
+ TabOrder = 1
+ Text = 'text to find'
+ end
+ object Memo1: TMemo
+ AnchorSideLeft.Control = Owner
+ AnchorSideTop.Control = Edit1
+ AnchorSideTop.Side = asrBottom
+ AnchorSideRight.Control = Owner
+ AnchorSideRight.Side = asrBottom
+ AnchorSideBottom.Control = StatusBar1
+ Left = 6
+ Height = 273
+ Top = 97
+ Width = 540
+ Anchors = [akTop, akLeft, akRight, akBottom]
+ BorderSpacing.Around = 6
+ TabOrder = 2
+ end
+ object BitBtn1: TBitBtn
+ AnchorSideTop.Control = Edit1
+ AnchorSideTop.Side = asrCenter
+ AnchorSideRight.Control = Owner
+ AnchorSideRight.Side = asrBottom
+ Left = 488
+ Height = 30
+ Top = 62
+ Width = 58
+ Action = actFind
+ Anchors = [akTop, akRight]
+ AutoSize = True
+ BorderSpacing.Left = 6
+ BorderSpacing.Right = 6
+ Glyph.Data = {
+ 46050000424D4605000000000000360000002800000012000000120000000100
+ 2000000000001005000064000000640000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF003E39
+ 34FF393430FF332F2BFF2C2925FF272421FF201D1BFF1716141A110F0EDB0B0A
+ 09FF070706FF040403FF000000FF000000FFFFFFFF00FFFFFF00000000000000
+ 0000FFFFFF0046413BFF857A70FFC3B8AEFF7C7268FF7F756BFF36322DFF1E1C
+ 190F282522D495897DFFBAAEA2FF7C7268FF7F756BFF010101FFFFFFFF00FFFF
+ FF000000000000000000FFFFFF004D4741FF83786FFFCCC3BAFF786F65FF7B71
+ 67FF2F2B28F9272421011D1B18EE95897DFFC2B8ADFF786F65FF7C7268FF0605
+ 05FFFFFFFF00FFFFFF000000000000000000FFFFFF00534C46FC83786FFFCCC3
+ BAFF797066FF71685FFF37332ED5FFFFFF00252220D5857A70FFC2B8ADFF786F
+ 65FF7B7167FF0A0908FCFFFFFF00FFFFFF000000000000000000FFFFFF005A52
+ 4CC39F9286FFCCC3BAFFC0B4AAFFA6988BFF3E3934A8FFFFFF002C2925A89084
+ 79FFC2B8ADFFC0B4AAFFA89B8EFF110F0EC3FFFFFF00FFFFFF00000000000000
+ 0000797066055C554EF9423D38FF58514AFF3D3833FF332F2BFF23201DE51716
+ 14301E1C19B51A1816FF252220FF191715FF0F0E0DFF010101EE00000002FFFF
+ FF0000000000000000009F9286059D9185FFB1A396FF7F756BFF7C7268FF776D
+ 64FF6C635BFF2E2A26FF564F48FF80766CFF7C7268FF776D64FF70675EFF0000
+ 00FE00000005FFFFFF000000000000000000AB9D9004AFA194E1BAAEA2FF8277
+ 6DFF82776DFFAA917BFFBAA794FFB7A48EFAB09781FF9F8D7DFF836D5BFF7163
+ 57FF95897DFF040403E000000003FFFFFF000000000000000000B9ACA008877D
+ 72489B8E82FF9D9185FF867B71FF564F48FF504A44FF80766CFF6E665DFF826C
+ 58FFA6917DFF948474FF564F48FF0C0B0B7A07070601FFFFFF00000000000000
+ 0000FFFFFF00FFFFFF00746B62FFA4978AFF95897DFF9F9286FF3E3934FFFFFF
+ FF004C4640FF7E746AFF857A70FF3E3934FF453F3AA72522200C15131102FFFF
+ FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008E8378E2C3B8
+ AEFF655D55FFFFFFFF007C7268FFA89B8EFF9C8F83E4FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF009C8F83E2BCB0A4FF9D9185FFFFFFFF00AEA093FF9D9185FF655D55DAFFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF000000000000000000
+ }
+ TabOrder = 3
+ end
+ object StatusBar1: TStatusBar
+ Left = 0
+ Height = 21
+ Top = 376
+ Width = 552
+ Panels = <>
+ end
+ object ActionList1: TActionList
+ Images = ImageList1
+ left = 264
+ top = 200
+ object actExit: TAction
+ Caption = 'Exit'
+ ImageIndex = 0
+ OnExecute = actExitExecute
+ end
+ object actFind: TAction
+ Caption = 'Find'
+ ImageIndex = 1
+ OnExecute = actFindExecute
+ end
+ object actBack: TAction
+ Caption = 'Back'
+ Enabled = False
+ ImageIndex = 2
+ end
+ object actForward: TAction
+ Caption = 'Repeat'
+ Enabled = False
+ ImageIndex = 3
+ end
+ end
+ object ImageList1: TImageList
+ Height = 18
+ Width = 18
+ left = 320
+ top = 200
+ Bitmap = {
+ 4C69040000001200000012000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF006D9CD4896A9AD2FB6697CFEE0000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00709ED6DB6D9CD4FF85B1DAFF5A91B9FF6093CBEA0000000000000000FFFF
+ FF00FFFFFF00808080FF7E7E7EFF7C7C7CFF7A7A7AFF777777FF757575FF7272
+ 72FF719ED4FF6F9ED6FF87B2DCFFABD3E8FFA9D0E6FF5890B8FF598EC6EA0000
+ 000000000000FFFFFF00FFFFFF007D7D7DFF999999FF999999FF9A9A9AFF9A9A
+ 9AFF9B9B9BFF9B9B9BFF6F9DD3FFAAD1E7FFABD1E7FF98C7E1FF91C2DEFF568F
+ B7FF5289C1EA0000000000000000FFFFFF00FFFFFF007A7A7AFF999999FF5291
+ 59FF999A99FF9B9B9BFF9C9C9CFF9C9C9CFF6C9AD0FFA7CEE5FF8FC1DFFF89BD
+ DCFF8BBDDCFF538DB6FF4B84BCEA0000000000000000FFFFFF00FFFFFF007777
+ 77FF9A9A9AFF3D8A45FF498A4FFF9C9C9CFF9D9D9DFF9D9D9DFF6696CCFFA2CB
+ E3FF89BDDCFF83B9DAFF84B9DAFF518BB5FF437EB6EA00000000000000004494
+ 4DFF42914BFF3F8D48FF3D8945FF5DA465FF5AA061FF45834BFF9E9E9EFF9E9E
+ 9EFF6092C9FF9EC7E2FF83B8DAFF7DB4D7FF7EB3D7FF4F89B4FF3B79B1EA0000
+ 00000000000041904AFF94D29FFF91D09AFF8DCD96FF89CB92FF84C88DFF5198
+ 58FF417C46FF9F9F9FFF5A8EC4FF98C3E0FF7CB3D7FF74AFD6FF5EC4EDFF4B88
+ B3FF3473ABEA00000000000000003E8B46FF8FCE99FF7DC687FF78C381FF73C0
+ 7CFF74C07CFF79C281FF49904FFF547F57FF5489BFFF94BFDDFF75ADD4FF63B8
+ E1FF4BD4FFFF428BB8FF2C6EA6EA00000000000000003B8742FF89CB92FF84C8
+ 8DFF80C688FF7BC383FF77C17FFF478F4DFF3B743FFFA1A1A1FF4C84BAFF8DBB
+ DBFF6EA8D1FF66A6D1FF5FB4DFFF4785B1FF2569A1EA00000000000000003782
+ 3EFF347E3BFF317937FF2E7534FF499150FF468F4CFF39733DFFA1A1A1FFA2A2
+ A2FF457EB4FF88B7D9FF67A3CFFF619ECCFF639FCCFF4583B1FF1F649CEA0000
+ 000000000000FFFFFF00FFFFFF00606060FFA0A0A0FF3D7641FF367139FFA2A2
+ A2FFA2A2A2FFA3A3A3FF3D79B0FF82B3D7FF629FCCFF5A9AC9FF5E9BCAFF4381
+ AFFF196098EA0000000000000000FFFFFF00FFFFFF005C5C5CFFA1A1A1FF3C73
+ 40FFA0A1A1FFA3A3A3FFA3A3A3FFA4A4A4FF3674AAFF7DAFD4FF5B9AC9FF5495
+ C7FF5896C8FF4180AEFF135C94EA0000000000000000FFFFFF00FFFFFF005858
+ 58FFA2A2A2FFA2A2A2FFA3A3A3FFA4A4A4FFA4A4A4FFA5A5A5FF2F6FA5FF78AB
+ D2FF78ABD3FF73A7D1FF69A0CDFF407FAEFF0F5991EA00000000000000009999
+ 99FF717171FF545454FF515151FF4F4F4FFF4C4C4CFF4A4A4AFF474747FF4545
+ 45FF25679DFF3274A8FF3D7CAFFF4784B5FF4E8ABAFF3E7EADFF0C578FEA0000
+ 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF001D639B1619609839145D9562105A92880D5890A4135C
+ 92FC0C578FED0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF009C8F
+ 83E2BCB0A4FF9D9185FFFFFFFF00AEA093FF9D9185FF655D55DAFFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF008E8378E2C3B8AEFF655D55FFFFFFFF007C7268FFA89B8EFF9C8F
+ 83E4FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF
+ FF00FFFFFF00746B62FFA4978AFF95897DFF9F9286FF3E3934FFFFFFFF004C46
+ 40FF7E746AFF857A70FF3E3934FF453F3AA72522200C15131102FFFFFF000000
+ 000000000000B9ACA008877D72489B8E82FF9D9185FF867B71FF564F48FF504A
+ 44FF80766CFF6E665DFF826C58FFA6917DFF948474FF564F48FF0C0B0B7A0707
+ 0601FFFFFF000000000000000000AB9D9004AFA194E1BAAEA2FF82776DFF8277
+ 6DFFAA917BFFBAA794FFB7A48EFAB09781FF9F8D7DFF836D5BFF716357FF9589
+ 7DFF040403E000000003FFFFFF0000000000000000009F9286059D9185FFB1A3
+ 96FF7F756BFF7C7268FF776D64FF6C635BFF2E2A26FF564F48FF80766CFF7C72
+ 68FF776D64FF70675EFF000000FE00000005FFFFFF0000000000000000007970
+ 66055C554EF9423D38FF58514AFF3D3833FF332F2BFF23201DE5171614301E1C
+ 19B51A1816FF252220FF191715FF0F0E0DFF010101EE00000002FFFFFF000000
+ 000000000000FFFFFF005A524CC39F9286FFCCC3BAFFC0B4AAFFA6988BFF3E39
+ 34A8FFFFFF002C2925A8908479FFC2B8ADFFC0B4AAFFA89B8EFF110F0EC3FFFF
+ FF00FFFFFF000000000000000000FFFFFF00534C46FC83786FFFCCC3BAFF7970
+ 66FF71685FFF37332ED5FFFFFF00252220D5857A70FFC2B8ADFF786F65FF7B71
+ 67FF0A0908FCFFFFFF00FFFFFF000000000000000000FFFFFF004D4741FF8378
+ 6FFFCCC3BAFF786F65FF7B7167FF2F2B28F9272421011D1B18EE95897DFFC2B8
+ ADFF786F65FF7C7268FF060505FFFFFFFF00FFFFFF000000000000000000FFFF
+ FF0046413BFF857A70FFC3B8AEFF7C7268FF7F756BFF36322DFF1E1C190F2825
+ 22D495897DFFBAAEA2FF7C7268FF7F756BFF010101FFFFFFFF00FFFFFF000000
+ 000000000000FFFFFF003E3934FF393430FF332F2BFF2C2925FF272421FF201D
+ 1BFF1716141A110F0EDB0B0A09FF070706FF040403FF000000FF000000FFFFFF
+ FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00DFDBD7FFB3A79CFFA5998DFFFFFF
+ FF00AC9F92FF94897FFFB8B4B0FFFFFFFF00FFFFFF000000000000000000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5E3E1FFCFC9C4FFACA2
+ 97FF776F66FFFFFFFF00776D64FFA09488FFBAB3ADFFE2E1E0FFFFFFFF000000
+ 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00897E
+ 73FF9B8E82FF887D72FF564F48FFC0BCB8FF5D564EFF857668FF7C6F63FF6C65
+ 5FFFBBBAB9FF0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00C8BFB7FFA89B90FF897E74FF86786AFF8E7F70FFA19181FF958372FF937F
+ 6DFF897666FF7D7166FF555351FF0000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00A3978BFFA99D90FF7F756BFF7F7469FF7D7267FF4E47
+ 3FFF6B6056FF84786DFF7A6E64FF776D63FF1C1A18FF0000000000000000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00605953FF46413BFF4E4842FF3833
+ 2FFF383532FFC6C6C5FF5A5856FF1D1B19FF201D1BFF131110FF111111FF0000
+ 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0078726EFFA397
+ 8CFFC2B9AFFFA6998EFF827C76FFFFFFFF006F6C69FF9C9186FFBBB0A5FFA69A
+ 8EFF4F4C49FF0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00524C46FF90867DFFAEA59BFF776D64FF55504CFFFFFFFF0045423FFF9A8F
+ 84FFA0978CFF7A7167FF1F1C1AFF0000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0049433DFF90857CFFABA197FF7C7268FF49433EFFFFFF
+ FF00484441FFA09488FF9F9489FF7D7369FF191715FF0000000000000000FFFF
+ FF00FFFFFF00FFFFFF003BA8DBFFFFFFFF00403B35FF4A443EFF49443EFF3A36
+ 31FF2A2623FFFFFFFF00373434FF282522FF24221FFF1A1816FF050404FF0000
+ 000000000000FFFFFF00FFFFFF003BA8DBFF3BA8DBFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000FFFFFF003BA8DBFF3BA8DBFF3BA8DBFF3BA8
+ DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8
+ DBFF3BA8DBFFFFFFFF00FFFFFF000000000000000000FFFFFF003BA8DBFF3BA8
+ DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8
+ DBFF3BA8DBFF3BA8DBFF3BA8DBFFFFFFFF00FFFFFF000000000000000000FFFF
+ FF00FFFFFF003BA8DBFF3BA8DBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 000000000000FFFFFF00FFFFFF00FFFFFF003BA8DBFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 000000000000FFFFFF00FFFFFF00B8B4B0FF94897FFFAC9F92FFFFFFFF00A599
+ 8DFFB3A79CFFDFDBD7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000FFFFFF00E2E1E0FFBAB3ADFFA09488FF776D
+ 64FFFFFFFF00776F66FFACA297FFCFC9C4FFE5E3E1FFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000BBBAB9FF6C655FFF7C6F
+ 63FF857668FF5D564EFFC0BCB8FF564F48FF887D72FF9B8E82FF897E73FFFFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000005553
+ 51FF7D7166FF897666FF937F6DFF958372FFA19181FF8E7F70FF86786AFF897E
+ 74FFA89B90FFC8BFB7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 0000000000001C1A18FF776D63FF7A6E64FF84786DFF6B6056FF4E473FFF7D72
+ 67FF7F7469FF7F756BFFA99D90FFA3978BFFFFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000111111FF131110FF201D1BFF1D1B19FF5A58
+ 56FFC6C6C5FF383532FF38332FFF4E4842FF46413BFF605953FFFFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF0000000000000000004F4C49FFA69A8EFFBBB0
+ A5FF9C9186FF6F6C69FFFFFFFF00827C76FFA6998EFFC2B9AFFFA3978CFF7872
+ 6EFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000001F1C
+ 1AFF7A7167FFA0978CFF9A8F84FF45423FFFFFFFFF0055504CFF776D64FFAEA5
+ 9BFF90867DFF524C46FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 000000000000191715FF7D7369FF9F9489FFA09488FF484441FFFFFFFF004943
+ 3EFF7C7268FFABA197FF90857CFF49433DFFFFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000050404FF1A1816FF24221FFF282522FF3734
+ 34FFFFFFFF002A2623FF3A3631FF49443EFF4A443EFF403B35FFFFFFFF003BA8
+ DBFFFFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF003BA8DBFF3BA8DBFFFFFFFF00FFFFFF000000000000000000FFFF
+ FF00FFFFFF003BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8
+ DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFFFFFFFF000000
+ 000000000000FFFFFF00FFFFFF003BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8
+ DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8
+ DBFFFFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003BA8
+ DBFF3BA8DBFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF003BA8DBFFFFFFFF00FFFFFF00FFFFFF0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000
+ }
+ end
+ object PopupMenu1: TPopupMenu
+ left = 120
+ top = 136
+ end
+ object RxHistoryNavigator1: TRxHistoryNavigator
+ ToolPanel = ToolPanel1
+ BackBtn = 'actBack'
+ ForwardBtn = 'actForward'
+ OnHistoryNavigate = RxHistoryNavigator1HistoryNavigate
+ left = 441
+ top = 48
+ end
+ object ApplicationProperties1: TApplicationProperties
+ OnHint = ApplicationProperties1Hint
+ left = 360
+ top = 200
+ end
+end
diff --git a/components/rx/Demos/RxHistoryNavigator/unit1.pas b/components/rx/Demos/RxHistoryNavigator/unit1.pas
new file mode 100644
index 000000000..6c426dd1d
--- /dev/null
+++ b/components/rx/Demos/RxHistoryNavigator/unit1.pas
@@ -0,0 +1,82 @@
+unit Unit1;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, RxHistoryNavigator, rxtoolbar, Forms, Controls,
+ Graphics, Dialogs, ActnList, StdCtrls, Buttons, ComCtrls, Menus;
+
+type
+
+ { TForm1 }
+
+ TForm1 = class(TForm)
+ actExit: TAction;
+ actFind: TAction;
+ actBack: TAction;
+ ActionList1: TActionList;
+ actForward: TAction;
+ ApplicationProperties1: TApplicationProperties;
+ BitBtn1: TBitBtn;
+ Edit1: TEdit;
+ ImageList1: TImageList;
+ Label1: TLabel;
+ Memo1: TMemo;
+ PopupMenu1: TPopupMenu;
+ RxHistoryNavigator1: TRxHistoryNavigator;
+ StatusBar1: TStatusBar;
+ ToolPanel1: TToolPanel;
+ procedure actExitExecute(Sender: TObject);
+ procedure actFindExecute(Sender: TObject);
+ procedure ApplicationProperties1Hint(Sender: TObject);
+ procedure RxHistoryNavigator1HistoryNavigate(Sender: TRxHistoryNavigator;
+ AInfo: string; AProcessed: boolean);
+ private
+ procedure DoFind(S:string);
+ public
+ { public declarations }
+ end;
+
+var
+ Form1: TForm1;
+
+implementation
+
+{$R *.lfm}
+
+{ TForm1 }
+
+procedure TForm1.actExitExecute(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TForm1.actFindExecute(Sender: TObject);
+begin
+ RxHistoryNavigator1.AddToHistory('Find text', Edit1.Text);
+ DoFind(Edit1.Text);
+ Edit1.Text:='';
+ Edit1.SetFocus;
+end;
+
+procedure TForm1.ApplicationProperties1Hint(Sender: TObject);
+begin
+ StatusBar1.SimpleText:=Application.Hint;
+end;
+
+procedure TForm1.RxHistoryNavigator1HistoryNavigate(
+ Sender: TRxHistoryNavigator; AInfo: string; AProcessed: boolean);
+begin
+ Memo1.Lines.Add('History Find text ' + AInfo);
+end;
+
+procedure TForm1.DoFind(S: string);
+begin
+ //Что-то ищем - имитация бурной деятельности
+ Memo1.Lines.Add('Find text ' + S);
+end;
+
+end.
+
diff --git a/components/rx/images/TRxHistoryNavigator.png b/components/rx/images/TRxHistoryNavigator.png
new file mode 100644
index 000000000..ceced4ac1
Binary files /dev/null and b/components/rx/images/TRxHistoryNavigator.png differ
diff --git a/components/rx/images/mk_res.bat b/components/rx/images/mk_res.bat
index 165f68221..4abfb615c 100644
--- a/components/rx/images/mk_res.bat
+++ b/components/rx/images/mk_res.bat
@@ -1,2 +1,2 @@
del rx.lrs
-c:\lazarus\tools\lazres.exe rx.lrs TDBDateEdit.xpm TRXLookUpEdit.xpm TRxDBCalcEdit.xpm TRxDBLookupCombo.xpm TRxDBGrid.xpm TDualListDialog.xpm TFolderLister.xpm TRxMemoryData.xpm TCURRENCYEDIT.xpm TRXSWITCH.xpm TRXDICE.xpm TRXDBCOMBOBOX.xpm ttoolpanel.xpm trxxpmanifest.xpm TPAGEMANAGER.xpm TRXAPPICON.xpm TSECRETPANEL.xpm TRXLABEL.xpm tautopanel.xpm TRxCalendarGrid.xpm TRxDateEdit.png TRxClock.png TRxSpeedButton.png TRxSpinButton.png TRxSpinEdit.png TRXDBSpinEdit.png TRxTimeEdit.png TRxDBTimeEdit.png TRxDBProgressBar.png TRxDBTrackBar.png TRxLoginDialog.png TRxVersionInfo.png TRxAboutDialog.png TRxDBCurrEdit.png TRxViewsPanel.png TRxDBColorBox.png TRxRadioGroup.png TRxDBRadioGroup.png
+c:\lazarus\tools\lazres.exe rx.lrs TDBDateEdit.xpm TRXLookUpEdit.xpm TRxDBCalcEdit.xpm TRxDBLookupCombo.xpm TRxDBGrid.xpm TDualListDialog.xpm TFolderLister.xpm TRxMemoryData.xpm TCURRENCYEDIT.xpm TRXSWITCH.xpm TRXDICE.xpm TRXDBCOMBOBOX.xpm ttoolpanel.xpm trxxpmanifest.xpm TPAGEMANAGER.xpm TRXAPPICON.xpm TSECRETPANEL.xpm TRXLABEL.xpm tautopanel.xpm TRxCalendarGrid.xpm TRxDateEdit.png TRxClock.png TRxSpeedButton.png TRxSpinButton.png TRxSpinEdit.png TRXDBSpinEdit.png TRxTimeEdit.png TRxDBTimeEdit.png TRxDBProgressBar.png TRxDBTrackBar.png TRxLoginDialog.png TRxVersionInfo.png TRxAboutDialog.png TRxDBCurrEdit.png TRxViewsPanel.png TRxDBColorBox.png TRxRadioGroup.png TRxDBRadioGroup.png TRxHistoryNavigator.png
diff --git a/components/rx/images/mk_res.sh b/components/rx/images/mk_res.sh
index 75a70b243..8f0cd948c 100755
--- a/components/rx/images/mk_res.sh
+++ b/components/rx/images/mk_res.sh
@@ -1,2 +1,2 @@
rm rx.lrs
-/usr/local/share/lazarus/tools/lazres rx.lrs TDBDateEdit.xpm TRXLookUpEdit.xpm TRxDBCalcEdit.xpm TRxDBLookupCombo.xpm TRxDBGrid.xpm TDualListDialog.xpm TFolderLister.xpm TRxMemoryData.xpm TCURRENCYEDIT.xpm TRXSWITCH.xpm TRXDICE.xpm TRXDBCOMBOBOX.xpm ttoolpanel.xpm trxxpmanifest.xpm TPAGEMANAGER.xpm TRXAPPICON.xpm TSECRETPANEL.xpm TRXLABEL.xpm tautopanel.xpm TRxCalendarGrid.xpm TRxDateEdit.png TRxClock.png TRxSpeedButton.png TRxSpinButton.png TRxSpinEdit.png TRXDBSpinEdit.png TRxTimeEdit.png TRxDBTimeEdit.png TRxDBProgressBar.png TRxDBTrackBar.png TRxLoginDialog.png TRxVersionInfo.png TRxAboutDialog.png TRxDBCurrEdit.png TRxViewsPanel.png TRxDBColorBox.png TRxRadioGroup.png TRxDBRadioGroup.png
\ No newline at end of file
+/usr/local/share/lazarus/tools/lazres rx.lrs TDBDateEdit.xpm TRXLookUpEdit.xpm TRxDBCalcEdit.xpm TRxDBLookupCombo.xpm TRxDBGrid.xpm TDualListDialog.xpm TFolderLister.xpm TRxMemoryData.xpm TCURRENCYEDIT.xpm TRXSWITCH.xpm TRXDICE.xpm TRXDBCOMBOBOX.xpm ttoolpanel.xpm trxxpmanifest.xpm TPAGEMANAGER.xpm TRXAPPICON.xpm TSECRETPANEL.xpm TRXLABEL.xpm tautopanel.xpm TRxCalendarGrid.xpm TRxDateEdit.png TRxClock.png TRxSpeedButton.png TRxSpinButton.png TRxSpinEdit.png TRXDBSpinEdit.png TRxTimeEdit.png TRxDBTimeEdit.png TRxDBProgressBar.png TRxDBTrackBar.png TRxLoginDialog.png TRxVersionInfo.png TRxAboutDialog.png TRxDBCurrEdit.png TRxViewsPanel.png TRxDBColorBox.png TRxRadioGroup.png TRxDBRadioGroup.png TRxHistoryNavigator.png
\ No newline at end of file
diff --git a/components/rx/images/rx.lrs b/components/rx/images/rx.lrs
index 9699eb6a6..40f41db02 100644
--- a/components/rx/images/rx.lrs
+++ b/components/rx/images/rx.lrs
@@ -729,3 +729,21 @@ LazarusResources.Add('TRxDBRadioGroup','PNG',[
+#20'e'#166#229'y'#11'('#174#150'V'#153#183#194#255#198#31'Mv'#189#134#210#214
+'J$'#0#0#0#0'IEND'#174'B`'#130
]);
+LazarusResources.Add('TRxHistoryNavigator','PNG',[
+ #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0
+ +#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149'+'#14#27#0#0#1'8IDATH'#137#213#148
+ +'=K'#195'@'#24#199#127#23'\'#130#171'T'#4#191'D'#171#224#224#160#163'[p'#236
+ +#152#15#144#174#151'1'#163'Y'#147#221#184#245'k'#232#224' H)'#157':'#10'N'#1
+ +#199'B'#198#199'!MLL'#140#205'K'#135#254#225#184'7'#238#255'r'#207'qP'#128
+ +#128'00'#140'}'#146#3#168#174#228'j{'#246'?'#24'}'#201'E'#164't'#222#243#202
+ +#243#214#9'\'#29'4'#238#155#166#3'@'#146#132#248#254'L)'#173#3#241#31#28'D'
+ +#165#166#148'T'#181'>>'#191#242#241#211#227#201#174'^H'#146#240#167#200#147
+ +#241#5#0#227#201'e'#222'gc'#128'{'#235#174#21'9'#164'i'#140#226'B&R'#7#203'z'
+ +'oE'#14'i'#2#180#14#4#145#198#214#6#158#151'6'#17#17#173#3'Q'#176#21#25#8#166
+ +#233#164#206#1#223#159#165#133#213':'#144#245'r%'#235#229'J6q,'#155'8'#174'u'
+ +#215#197#200'Qq2'#181#237#210#230'b'#209#254#222#27#5#230'Q'#196#249#217')'#0
+ +#199#163'Qo'#242#138#192#239#4#208'?'#197'^'#18#188#188#190#201#205#245#149
+ +#170#8#20#19#244'q'#158#145'W'#4#138#9#134#194'a'#214#160'V '#154'?'#15'B'
+ +#248#167#128'='#189#5'hL'#224#186'aw'#1'8'#208#26#228#239'u'#151#143','#255
+ +#29'['#224#27#254'('#218'x|2'#20#20#0#0#0#0'IEND'#174'B`'#130
+]);
diff --git a/components/rx/registerrx.pas b/components/rx/registerrx.pas
index 44715fe90..fe85925b8 100644
--- a/components/rx/registerrx.pas
+++ b/components/rx/registerrx.pas
@@ -42,7 +42,7 @@ procedure Register;
implementation
uses
- PropEdits, folderlister, duallist,
+ PropEdits, folderlister, duallist, RxHistoryNavigator,
curredit, rxswitch, rxdice, rxtoolbar, rxxpman, PageMngr, RxAppIcon,
Dialogs, ComponentEditors, DBPropEdits, DB, rxctrls,
RxCustomChartPanel, AutoPanel, pickdate, rxconst, tooledit, rxclock,
@@ -73,6 +73,43 @@ begin
DataSource.DataSet.GetFieldNames(Values);
end;
+type
+
+ { THistoryButtonProperty }
+
+ THistoryButtonProperty = class(TStringPropertyEditor)
+ public
+ function GetAttributes: TPropertyAttributes; override;
+ procedure GetValues(Proc: TGetStrProc); override;
+ end;
+
+
+
+{ THistoryButtonProperty }
+
+function THistoryButtonProperty.GetAttributes: TPropertyAttributes;
+begin
+ Result:= [paValueList, paSortList, paMultiSelect];
+end;
+
+procedure THistoryButtonProperty.GetValues(Proc: TGetStrProc);
+var
+ I: Integer;
+ Navigator:TRxHistoryNavigator;
+begin
+ Navigator:=TRxHistoryNavigator(GetComponent(0));
+ if Assigned(Navigator) then
+ begin
+ if Assigned(Navigator.ToolPanel) then
+ begin
+ for i:=0 to Navigator.ToolPanel.Items.Count - 1 do
+ begin
+ if Assigned(Navigator.ToolPanel.Items[i].Action) then
+ Proc(Navigator.ToolPanel.Items[i].Action.Name);
+ end;
+ end;
+ end;
+end;
{$IFDEF USE_TRxAppIcon}
procedure RegisterRxAppIcon;
@@ -174,6 +211,11 @@ begin
RegisterComponents('RX',[TRxViewsPanel]);
end;
+procedure RegisterRxHistoryNavigator;
+begin
+ RegisterComponents('RX Tools',[TRxHistoryNavigator]);
+end;
+
procedure Register;
begin
//RX
@@ -200,9 +242,13 @@ begin
RegisterUnit('RxTimeEdit', @RegisterRxTimeEdit);
RegisterUnit('RxAboutDialog', @RegisterRxAboutDialog);
RegisterUnit('RxViewsPanel', @RegisterRxViewsPanel);
+ RegisterUnit('RxHistoryNavigator', @RegisterRxHistoryNavigator);
+
//
RegisterPropertyEditor(TypeInfo(string), TPopUpColumn, 'FieldName', TPopUpColumnFieldProperty);
+ RegisterPropertyEditor(TypeInfo(string), TRxHistoryNavigator, 'BackBtn', THistoryButtonProperty);
+ RegisterPropertyEditor(TypeInfo(string), TRxHistoryNavigator, 'ForwardBtn', THistoryButtonProperty);
RegisterCEEditLookupFields;
end;