You've already forked lazarus-ccr
fpspreadsheet: Add dataset example
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8097 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -0,0 +1,83 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="12"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<General>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<Title Value="DatasetDemo"/>
|
||||||
|
<Scaled Value="True"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
<UseXPManifest Value="True"/>
|
||||||
|
<XPManifest>
|
||||||
|
<DpiAware Value="True"/>
|
||||||
|
</XPManifest>
|
||||||
|
<Icon Value="0"/>
|
||||||
|
</General>
|
||||||
|
<BuildModes>
|
||||||
|
<Item Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
<UseFileFilters Value="True"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<FormatVersion Value="2"/>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages>
|
||||||
|
<Item>
|
||||||
|
<PackageName Value="FCL"/>
|
||||||
|
</Item>
|
||||||
|
<Item>
|
||||||
|
<PackageName Value="laz_fpspreadsheet_dataset"/>
|
||||||
|
</Item>
|
||||||
|
<Item>
|
||||||
|
<PackageName Value="LCL"/>
|
||||||
|
</Item>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units>
|
||||||
|
<Unit>
|
||||||
|
<Filename Value="DatasetDemo.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit>
|
||||||
|
<Filename Value="main.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="MainForm"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
</Unit>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="DatasetDemo"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Linking>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions>
|
||||||
|
<Item>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item>
|
||||||
|
<Item>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item>
|
||||||
|
<Item>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
@ -0,0 +1,25 @@
|
|||||||
|
program DatasetDemo;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
cthreads,
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF HASAMIGA}
|
||||||
|
athreads,
|
||||||
|
{$ENDIF}
|
||||||
|
Interfaces, // this includes the LCL widgetset
|
||||||
|
Forms, main
|
||||||
|
{ you can add units after this };
|
||||||
|
|
||||||
|
{$R *.res}
|
||||||
|
|
||||||
|
begin
|
||||||
|
RequireDerivedFormResource:=True;
|
||||||
|
Application.Scaled:=True;
|
||||||
|
Application.Initialize;
|
||||||
|
Application.CreateForm(TMainForm, MainForm);
|
||||||
|
Application.Run;
|
||||||
|
end.
|
||||||
|
|
Binary file not shown.
@ -0,0 +1,451 @@
|
|||||||
|
object MainForm: TMainForm
|
||||||
|
Left = 285
|
||||||
|
Height = 542
|
||||||
|
Top = 131
|
||||||
|
Width = 1068
|
||||||
|
Caption = 'fpsWorksheet Demo: Filtering, Searching, Sorting, Bookmarks'
|
||||||
|
ClientHeight = 542
|
||||||
|
ClientWidth = 1068
|
||||||
|
OnCreate = FormCreate
|
||||||
|
LCLVersion = '2.3.0.0'
|
||||||
|
object DBGrid: TDBGrid
|
||||||
|
Left = 0
|
||||||
|
Height = 482
|
||||||
|
Top = 60
|
||||||
|
Width = 1068
|
||||||
|
Align = alClient
|
||||||
|
AlternateColor = clBtnFace
|
||||||
|
Color = clWindow
|
||||||
|
Columns = <>
|
||||||
|
DataSource = DataSource
|
||||||
|
Options = [dgTitles, dgIndicator, dgColumnResize, dgColumnMove, dgColLines, dgRowLines, dgTabs, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgAnyButtonCanSelect, dgTruncCellHints, dgThumbTracking]
|
||||||
|
PopupMenu = DBGridPopupMenu
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 0
|
||||||
|
TitleImageList = ImageList12
|
||||||
|
OnTitleClick = DBGridTitleClick
|
||||||
|
end
|
||||||
|
object ToolBar: TToolBar
|
||||||
|
Left = 0
|
||||||
|
Height = 26
|
||||||
|
Top = 34
|
||||||
|
Width = 1068
|
||||||
|
Caption = 'ToolBar'
|
||||||
|
Images = ImageList16
|
||||||
|
TabOrder = 1
|
||||||
|
object DBNavigator1: TDBNavigator
|
||||||
|
Left = 1
|
||||||
|
Height = 22
|
||||||
|
Top = 2
|
||||||
|
Width = 241
|
||||||
|
BevelOuter = bvNone
|
||||||
|
ChildSizing.EnlargeHorizontal = crsScaleChilds
|
||||||
|
ChildSizing.EnlargeVertical = crsScaleChilds
|
||||||
|
ChildSizing.ShrinkHorizontal = crsScaleChilds
|
||||||
|
ChildSizing.ShrinkVertical = crsScaleChilds
|
||||||
|
ChildSizing.Layout = cclLeftToRightThenTopToBottom
|
||||||
|
ChildSizing.ControlsPerLine = 100
|
||||||
|
ClientHeight = 22
|
||||||
|
ClientWidth = 241
|
||||||
|
DataSource = DataSource
|
||||||
|
Options = []
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object Panel2: TPanel
|
||||||
|
Left = 242
|
||||||
|
Height = 22
|
||||||
|
Top = 2
|
||||||
|
Width = 326
|
||||||
|
BevelOuter = bvNone
|
||||||
|
ClientHeight = 22
|
||||||
|
ClientWidth = 326
|
||||||
|
TabOrder = 1
|
||||||
|
object Label1: TLabel
|
||||||
|
AnchorSideLeft.Control = Panel2
|
||||||
|
AnchorSideTop.Control = Panel2
|
||||||
|
AnchorSideTop.Side = asrCenter
|
||||||
|
Left = 8
|
||||||
|
Height = 15
|
||||||
|
Top = 4
|
||||||
|
Width = 81
|
||||||
|
BorderSpacing.Left = 8
|
||||||
|
Caption = 'Filter countries:'
|
||||||
|
end
|
||||||
|
object cmbFilter: TComboBox
|
||||||
|
AnchorSideLeft.Control = Label1
|
||||||
|
AnchorSideLeft.Side = asrBottom
|
||||||
|
AnchorSideTop.Control = Panel2
|
||||||
|
AnchorSideTop.Side = asrCenter
|
||||||
|
AnchorSideRight.Control = Panel2
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 95
|
||||||
|
Height = 23
|
||||||
|
Top = 0
|
||||||
|
Width = 223
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
AutoComplete = True
|
||||||
|
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
|
||||||
|
BorderSpacing.Left = 6
|
||||||
|
BorderSpacing.Right = 8
|
||||||
|
DropDownCount = 40
|
||||||
|
ItemHeight = 15
|
||||||
|
OnEditingDone = cmbFilterEditingDone
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object ToolButton1: TToolButton
|
||||||
|
Left = 568
|
||||||
|
Top = 2
|
||||||
|
Action = acFilterByCountry
|
||||||
|
end
|
||||||
|
object ToolButton2: TToolButton
|
||||||
|
Left = 591
|
||||||
|
Top = 2
|
||||||
|
Action = acNoFilter
|
||||||
|
end
|
||||||
|
object ToolButton3: TToolButton
|
||||||
|
Left = 614
|
||||||
|
Height = 22
|
||||||
|
Top = 2
|
||||||
|
Caption = 'ToolButton3'
|
||||||
|
Style = tbsDivider
|
||||||
|
end
|
||||||
|
object ToolButton4: TToolButton
|
||||||
|
Left = 619
|
||||||
|
Top = 2
|
||||||
|
Action = acFindCity
|
||||||
|
end
|
||||||
|
object btnBookmark1: TToolButton
|
||||||
|
Tag = 1
|
||||||
|
Left = 647
|
||||||
|
Top = 2
|
||||||
|
Caption = 'btnBookmark1'
|
||||||
|
DropdownMenu = BookmarkDropdown
|
||||||
|
ImageIndex = 3
|
||||||
|
OnMouseMove = btnBookmark1MouseMove
|
||||||
|
Style = tbsButtonDrop
|
||||||
|
end
|
||||||
|
object ToolButton6: TToolButton
|
||||||
|
Left = 642
|
||||||
|
Height = 22
|
||||||
|
Top = 2
|
||||||
|
Caption = 'ToolButton6'
|
||||||
|
Style = tbsDivider
|
||||||
|
end
|
||||||
|
object btnBookmark2: TToolButton
|
||||||
|
Tag = 2
|
||||||
|
Left = 680
|
||||||
|
Top = 2
|
||||||
|
Caption = 'btnBookmark2'
|
||||||
|
DropdownMenu = BookmarkDropdown
|
||||||
|
ImageIndex = 4
|
||||||
|
OnMouseMove = btnBookmark1MouseMove
|
||||||
|
Style = tbsButtonDrop
|
||||||
|
end
|
||||||
|
object btnBookmark3: TToolButton
|
||||||
|
Tag = 3
|
||||||
|
Left = 713
|
||||||
|
Top = 2
|
||||||
|
Caption = 'btnBookmark3'
|
||||||
|
DropdownMenu = BookmarkDropdown
|
||||||
|
ImageIndex = 5
|
||||||
|
OnMouseMove = btnBookmark1MouseMove
|
||||||
|
Style = tbsButtonDrop
|
||||||
|
end
|
||||||
|
object ToolButton5: TToolButton
|
||||||
|
Left = 746
|
||||||
|
Height = 22
|
||||||
|
Top = 2
|
||||||
|
Caption = 'ToolButton5'
|
||||||
|
Style = tbsDivider
|
||||||
|
end
|
||||||
|
object ToolButton7: TToolButton
|
||||||
|
Left = 751
|
||||||
|
Top = 2
|
||||||
|
Action = acSortAsc
|
||||||
|
end
|
||||||
|
object ToolButton8: TToolButton
|
||||||
|
Left = 774
|
||||||
|
Top = 2
|
||||||
|
Action = acSortDesc
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object Panel1: TPanel
|
||||||
|
Left = 0
|
||||||
|
Height = 34
|
||||||
|
Top = 0
|
||||||
|
Width = 1068
|
||||||
|
Align = alTop
|
||||||
|
BevelOuter = bvNone
|
||||||
|
Caption = 'Average Temperatures in European Cities'
|
||||||
|
Color = clWindowText
|
||||||
|
Font.Color = clWindow
|
||||||
|
Font.Height = -19
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
object Dataset: TsWorksheetDataset
|
||||||
|
FieldDefs = <>
|
||||||
|
AfterOpen = DatasetAfterOpen
|
||||||
|
Left = 295
|
||||||
|
Top = 129
|
||||||
|
end
|
||||||
|
object DataSource: TDataSource
|
||||||
|
DataSet = Dataset
|
||||||
|
Left = 435
|
||||||
|
Top = 129
|
||||||
|
end
|
||||||
|
object DBGridPopupMenu: TPopupMenu
|
||||||
|
Images = ImageList16
|
||||||
|
OnPopup = DBGridPopupMenuPopup
|
||||||
|
Left = 296
|
||||||
|
Top = 208
|
||||||
|
object mnuSetBookmarkParent: TMenuItem
|
||||||
|
Caption = 'Set bookmarks'
|
||||||
|
object mnuSetBookmark1: TMenuItem
|
||||||
|
Tag = 1
|
||||||
|
Action = acSetBookmark
|
||||||
|
Caption = 'Bookmark 1'
|
||||||
|
ImageIndex = 3
|
||||||
|
ShortCut = 16433
|
||||||
|
end
|
||||||
|
object mnuSetBookmark2: TMenuItem
|
||||||
|
Tag = 2
|
||||||
|
Action = acSetBookmark
|
||||||
|
Caption = 'Bookmark 2'
|
||||||
|
ImageIndex = 4
|
||||||
|
ShortCut = 16434
|
||||||
|
end
|
||||||
|
object mnuSetBookmark3: TMenuItem
|
||||||
|
Tag = 3
|
||||||
|
Action = acSetBookmark
|
||||||
|
Caption = 'Bookmark 3'
|
||||||
|
ImageIndex = 5
|
||||||
|
ShortCut = 16435
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object mnuGotoBookmarkParent: TMenuItem
|
||||||
|
Caption = 'Go to bookmarks'
|
||||||
|
object mnuGotoBookmark1: TMenuItem
|
||||||
|
Tag = 1
|
||||||
|
Action = acGotoBookmark
|
||||||
|
Caption = 'Bookmark 1'
|
||||||
|
ImageIndex = 3
|
||||||
|
ShortCut = 24625
|
||||||
|
end
|
||||||
|
object mnuGotoBookmark2: TMenuItem
|
||||||
|
Tag = 2
|
||||||
|
Action = acGotoBookmark
|
||||||
|
Caption = 'Bookmark 2'
|
||||||
|
ImageIndex = 4
|
||||||
|
ShortCut = 24626
|
||||||
|
end
|
||||||
|
object mnuGotoBookmark3: TMenuItem
|
||||||
|
Tag = 3
|
||||||
|
Action = acGotoBookmark
|
||||||
|
Caption = 'Bookmark 3'
|
||||||
|
ImageIndex = 5
|
||||||
|
ShortCut = 24627
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object mnuClearBookmarkParent: TMenuItem
|
||||||
|
Caption = 'Clear bookmarks'
|
||||||
|
object mnuClearBookmark1: TMenuItem
|
||||||
|
Tag = 1
|
||||||
|
Action = acClearBookmark
|
||||||
|
Caption = 'Bookmark 1'
|
||||||
|
ImageIndex = 3
|
||||||
|
ShortCut = 49201
|
||||||
|
end
|
||||||
|
object mnuClearBookmark2: TMenuItem
|
||||||
|
Tag = 2
|
||||||
|
Action = acClearBookmark
|
||||||
|
Caption = 'Bookmark 2'
|
||||||
|
ImageIndex = 4
|
||||||
|
ShortCut = 49202
|
||||||
|
end
|
||||||
|
object mnuClearBookmark3: TMenuItem
|
||||||
|
Tag = 3
|
||||||
|
Action = acClearBookmark
|
||||||
|
Caption = 'Bookmark 3'
|
||||||
|
ImageIndex = 5
|
||||||
|
ShortCut = 49203
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object MenuItem3: TMenuItem
|
||||||
|
Caption = '-'
|
||||||
|
end
|
||||||
|
object mnuSortASC: TMenuItem
|
||||||
|
Action = acSortAsc
|
||||||
|
Caption = 'Sort by clicked column (ascending)'
|
||||||
|
end
|
||||||
|
object mnuSortDESC: TMenuItem
|
||||||
|
Action = acSortDesc
|
||||||
|
Caption = 'Sort by clicked column (descending)'
|
||||||
|
end
|
||||||
|
object MenuItem1: TMenuItem
|
||||||
|
Caption = '-'
|
||||||
|
end
|
||||||
|
object mnuFilterByCountry: TMenuItem
|
||||||
|
Caption = 'Filter by Country...'
|
||||||
|
ImageIndex = 0
|
||||||
|
object mnuNoFilter: TMenuItem
|
||||||
|
Action = acNoFilter
|
||||||
|
end
|
||||||
|
object N1: TMenuItem
|
||||||
|
Caption = '-'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object MenuItem5: TMenuItem
|
||||||
|
Caption = '-'
|
||||||
|
end
|
||||||
|
object mnuFindCity: TMenuItem
|
||||||
|
Action = acFindCity
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object ImageList12: TImageList
|
||||||
|
Height = 12
|
||||||
|
Width = 12
|
||||||
|
Left = 576
|
||||||
|
Top = 129
|
||||||
|
Bitmap = {
|
||||||
|
4C7A020000000C0000000C000000350100000000000078DA6360A03FD851E3EF
|
||||||
|
02C2C4A8DDDE10AC77A025E2E5BE96885720365E732BFC54F636863E7EBDA9ED
|
||||||
|
3F08EF6D0A7BB8BD2240019BDA6D959EA2BB1B43EEBD58DFFCFFC3F66E3006B1
|
||||||
|
773786DDDED1102A84AC7673832FD7EE86D04B4F56D6FD85A9856190D89EA6D0
|
||||||
|
73FB1B1C38406A5785863203CD3D706F69E54F74B5307C6F49C5CF3D0DA1BB1B
|
||||||
|
1A1A98B6D5F8776CAB0EF80574EB6B7C18A4666BA56F3BC328C00BB655FB4FDF
|
||||||
|
5113F0E3605BD40B7C18A4665B8DDFB4FF0C0C8CBB1A4236DE985FF215577C81
|
||||||
|
E4406A406AC171DC10CAB6B321F8C4FDA595BF30E2162806923B9396C68AE2AE
|
||||||
|
064FBEDD0DC1D79FAEAE87A721101B240692C3E6978D657E52C074F7F0E5FA96
|
||||||
|
FF20BCA731F401480C9FFF3797FBE8EF6D0A7FBAAF39FC09884D4C98EDACF273
|
||||||
|
25363F521B0000A4F50CFE
|
||||||
|
}
|
||||||
|
end
|
||||||
|
object ImageList16: TImageList
|
||||||
|
Left = 576
|
||||||
|
Top = 208
|
||||||
|
Bitmap = {
|
||||||
|
4C7A080000001000000010000000E00600000000000078DAED98094CD3571CC7
|
||||||
|
EB96399365993AA5B8796D3AA756C0A9E089E074EA747821A253173C824EE744
|
||||||
|
C503115A659924F3C01B10A55A0F2446D129010F8478206D055B5A74DE533715
|
||||||
|
01158BB4A2FDEEFDFE50A5E5DFF2AF336633BCE49BB6EFFF3EFFF73BDF4B2A12
|
||||||
|
FD37C6C2AC6BF831ED1226EC2FC0B09D5AF826E4A2EB3A25DC6372F0D57A153C
|
||||||
|
63D5E8C1E6FAC8CFC3678706B6FCFCAC6BA6463926785F04C26F03690F81D38F
|
||||||
|
815DC5C0F23BC0F43F81219701777539FAEED49A6CF90559D783C71FB96EE8A2
|
||||||
|
3363F64D606F09A032547EAEBC0B6E6EC425337A275D30F828B4C17C3E4C49BF
|
||||||
|
9232F0F89DF2C9D7017911A029030E3E00D6DD03E6DF02BE49BD69ECADD0A6DA
|
||||||
|
8B41C889EB0DC71DB870D75FFD886388273FE20B81E0DC87E8253F7FBF6782BE
|
||||||
|
B1A3387EBF5FEF352C49FF447ACDC4F99F510AACBF6542CF2D79653DE3F37A09
|
||||||
|
C9C5F05D9A8CFEBB2F3C0F3BF91742326FA3CF76DDF3EE71791942733972A76E
|
||||||
|
ACEFBE2BA5190FCD48BC0FF44DBE54EA197B2E50283F74BBA6533F85EE516669
|
||||||
|
651CBD1234A59EF14A89503E20595FDF3721AFE2D80333B6DC33A3CB7A7545DB
|
||||||
|
B597DF77A61E7DE59ADB7B6E3EC18A2B4FD03536F7B6B3F5EC2BD71E89D11623
|
||||||
|
4C5D8C6E7179E9CEF27DB7E64659EABFEB467594E82D1D9D569D8533B2E52531
|
||||||
|
39C6069965B5F6BD24BB0CB4B6267FD6BFFDBA73659DCF57D8ED7BBF820AB86D
|
||||||
|
C8354856E78CE3F341B24619D371ABCE30E9AAB946DF8732DE6B7B81A1135B63
|
||||||
|
370832BCD3718D2ACBE7C00DA36DDF0FFFFD86C97D9DEA4C4072F2BB8EE2E8B6
|
||||||
|
FC6423B7B5AA3BD3CE16992D7DBF38B7D8ECB15679AFDD0A751321B990ACCCF1
|
||||||
|
B08D37CD894498C3B4CA7A357E650AE3CBA7A56F5FE60B2B9850F559CFFAB710
|
||||||
|
DEEA1D6A7B6C2D3CEDABAA625595BF9DE205EF5FB35E85FBCF3F30AFE65AEE1D
|
||||||
|
F35E773F7A757387458EE61CF1FE81013578DBB9D7C9B379293DF3F6EEF142D5
|
||||||
|
6DB6C8665E6AEB1FED6151F5DF7CCFF8E253C707F0C6BDBA84F2F6EAB28E0F10
|
||||||
|
DC8BFFC771266A789B53CB862932A57E8547970C456AD890C294F983157BE70E
|
||||||
|
6C531B9B1D357C5076D430E3E9A57EC8920EC5B1F06F91BA70205242072039A4
|
||||||
|
BF71D7AC7E831CED4B6CF6323F9C920D81461E8EE7154F41637F880FF6CCF2C6
|
||||||
|
8E19DEC66DD37BF3DA4136D3BEC4E6CB1773AC7EDF6A8EDF3BB327764DEF8EED
|
||||||
|
C15E489CEAA5E0E3C95FB23973C9608E2D60ECA1D9BD383E29B80B14533A2331
|
||||||
|
C8035B823A17F2F1142BF2F7E8A201480BF5E1D8FD333C397E47900489133B20
|
||||||
|
614207C48FEFC85B3714678AD5A1D07E3818D207FB18BB67AA07C7CBC7B743C2
|
||||||
|
D836880B6C83D8C02F78F74F5930584171DEC76245FE92CDB42F8D84319F216E
|
||||||
|
742B6CF46F898DA35BF3FA4FF9A51C519C29569CBFCC661A1C3BAA05368C6C6E
|
||||||
|
DC30B285DD3AA0FC528EB838B35891BF6433ED4BECFA11CD07D55643945FCA51
|
||||||
|
028B33C58AFC259B1DED5B37DEAEFED72996E0A9E121577B26C3039C8E0D75AA
|
||||||
|
FF89556F9AC5F5E1C99869303E7EE054FF6784F5477A550F67FE3619C6D212A7
|
||||||
|
FB3F759E0F2E1CDECCCE12138EAF0876AAFFC966C3FD5B28BCA842CAFC414EF7
|
||||||
|
FFD3720394DB9672FDCFB14EF63FDFA8EBFFBAFEAFEB7FE7EE7FCBD0A66C7CE5
|
||||||
|
FB3F2D6A1CCA4B8B9DEA7FF2F7687410D7FF87656350FEA8D8A9FE3FB1F667B6
|
||||||
|
6709673BB187A326D6F5FF1B1A6AD927ED559162A8A4AE9B5E8567EC2F4C8F99
|
||||||
|
4A4EC85A37B0FAC7E2C48C2092DD7F3944A27A8CBBC63487DEA18E740D78F12C
|
||||||
|
63A60499330D9CD8773EFE5C44536FC63DD3C8C42E2AA97837FB7E8863D3277E
|
||||||
|
604A9BA4674295F43457C376A9388E314626B52AD2E516FBAC50CA9ABA96A604
|
||||||
|
2632C14689D5D9CBB3DABE4F3E33C5AA22C4C19C22C5C5EA0897B996354549DF
|
||||||
|
81C467BB52E6328AAD7F9A13F6E9C736F6E45B7EFF2DFF1AA457CDED8DD81E20
|
||||||
|
F13FCD6B2812E9C0237FCB8A3F62DC41E2E7E9FF496DD74AE93C99944C574522
|
||||||
|
8D8B65457E745B906AB754B78AA988B15F5AE557D60C24C7AC3E8CB1E54CBD6B
|
||||||
|
9CF18B3E02C93E9B3F81F1CFAAFB6C754687BC07123F5B308071158C8F6131F8
|
||||||
|
FCA528AE95E3F84F2290ECEC2DE38F7F7EF89BEB7EDD4D9EFD65C279ADDBCB1A
|
||||||
|
D02731FE11938730FFADECF881C9C4F61E283CFE2F58BFAA3C04399FFF821E8C
|
||||||
|
353045F09E2F0EEB4FDF9671254CA9D6F9175AFF5473BCFDB75B58FFFDDBFEAF
|
||||||
|
8A91AC796376E614AA23C5F1B6CF849C3FECBC9B5E75861A4E2D68F261F5678E
|
||||||
|
CEBF6AF7C729A668A62265842B974321E72F8DDCF066AD1867564788DD9452F1
|
||||||
|
66F63DC399F35F1DE91241673E53329392E979B6CCB5B5D0FB87DD1917D9B99F
|
||||||
|
5E657FB432527C8FDE29E4FE53C95CBDE8DE3D2B73ED582D16AB982ED3BD585B
|
||||||
|
6EE9FED12E6AD9C8AA226592FA34E788FF07815B405B
|
||||||
|
}
|
||||||
|
end
|
||||||
|
object ActionList: TActionList
|
||||||
|
Images = ImageList16
|
||||||
|
Left = 296
|
||||||
|
Top = 280
|
||||||
|
object acFindCity: TAction
|
||||||
|
Caption = 'Find city...'
|
||||||
|
Hint = 'Find a city'
|
||||||
|
ImageIndex = 2
|
||||||
|
OnExecute = acFindCityExecute
|
||||||
|
end
|
||||||
|
object acFilterByCountry: TAction
|
||||||
|
Caption = 'Filter by country'
|
||||||
|
Hint = 'Filter records by country'
|
||||||
|
ImageIndex = 0
|
||||||
|
OnExecute = acFilterByCountryExecute
|
||||||
|
end
|
||||||
|
object acNoFilter: TAction
|
||||||
|
Caption = 'All countries'
|
||||||
|
Hint = 'Remove filter'
|
||||||
|
ImageIndex = 1
|
||||||
|
OnExecute = acNoFilterExecute
|
||||||
|
end
|
||||||
|
object acSetBookmark: TAction
|
||||||
|
Caption = 'Set bookmark'
|
||||||
|
OnExecute = acSetBookmarkExecute
|
||||||
|
end
|
||||||
|
object acGotoBookmark: TAction
|
||||||
|
Caption = 'Go to bookmark'
|
||||||
|
OnExecute = acGotoBookmarkExecute
|
||||||
|
end
|
||||||
|
object acClearBookmark: TAction
|
||||||
|
Caption = 'Clear bookmark'
|
||||||
|
OnExecute = acClearBookmarkExecute
|
||||||
|
end
|
||||||
|
object acSortAsc: TAction
|
||||||
|
Caption = 'Sort ascending'
|
||||||
|
Hint = 'Sort by this column in ascending oder'
|
||||||
|
ImageIndex = 6
|
||||||
|
OnExecute = acSortAscExecute
|
||||||
|
end
|
||||||
|
object acSortDesc: TAction
|
||||||
|
Caption = 'Sort descending'
|
||||||
|
Hint = 'Sort by this column in descending order'
|
||||||
|
ImageIndex = 7
|
||||||
|
OnExecute = acSortDescExecute
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object BookmarkDropdown: TPopupMenu
|
||||||
|
Images = ImageList16
|
||||||
|
OnPopup = BookmarkDropdownPopup
|
||||||
|
Left = 435
|
||||||
|
Top = 208
|
||||||
|
object mnuSetBookmark: TMenuItem
|
||||||
|
Action = acSetBookmark
|
||||||
|
end
|
||||||
|
object mnuGotoBookmark: TMenuItem
|
||||||
|
Action = acGotoBookmark
|
||||||
|
end
|
||||||
|
object mnuClearBookmark: TMenuItem
|
||||||
|
Action = acClearBookmark
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,400 @@
|
|||||||
|
unit main;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, DB, Forms, Controls, Graphics, Dialogs, DBGrids, DBCtrls,
|
||||||
|
ExtCtrls, Menus, StdCtrls, Buttons, ActnList, ComCtrls, fpsDataset, Types;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TMainForm }
|
||||||
|
|
||||||
|
TMainForm = class(TForm)
|
||||||
|
acFindCity: TAction;
|
||||||
|
acFilterByCountry: TAction;
|
||||||
|
acNoFilter: TAction;
|
||||||
|
acSetBookmark: TAction;
|
||||||
|
acGotoBookmark: TAction;
|
||||||
|
acClearBookmark: TAction;
|
||||||
|
acSortAsc: TAction;
|
||||||
|
acSortDesc: TAction;
|
||||||
|
ActionList: TActionList;
|
||||||
|
cmbFilter: TComboBox;
|
||||||
|
DataSource: TDataSource;
|
||||||
|
DBGrid: TDBGrid;
|
||||||
|
Dataset: TsWorksheetDataset;
|
||||||
|
DBNavigator1: TDBNavigator;
|
||||||
|
ImageList16: TImageList;
|
||||||
|
ImageList12: TImageList;
|
||||||
|
Label1: TLabel;
|
||||||
|
MenuItem1: TMenuItem;
|
||||||
|
mnuClearBookmarkParent: TMenuItem;
|
||||||
|
MenuItem5: TMenuItem;
|
||||||
|
mnuSetBookmark: TMenuItem;
|
||||||
|
mnuGotoBookmark: TMenuItem;
|
||||||
|
mnuClearBookmark: TMenuItem;
|
||||||
|
mnuFindCity: TMenuItem;
|
||||||
|
mnuClearBookmark1: TMenuItem;
|
||||||
|
mnuClearBookmark2: TMenuItem;
|
||||||
|
mnuClearBookmark3: TMenuItem;
|
||||||
|
mnuSetBookmark3: TMenuItem;
|
||||||
|
mnuSetBookmark2: TMenuItem;
|
||||||
|
mnuSetBookmark1: TMenuItem;
|
||||||
|
mnuGotoBookmark3: TMenuItem;
|
||||||
|
mnuGotoBookmark2: TMenuItem;
|
||||||
|
mnuGotoBookmark1: TMenuItem;
|
||||||
|
mnuSetBookmarkParent: TMenuItem;
|
||||||
|
MenuItem3: TMenuItem;
|
||||||
|
mnuGotoBookmarkParent: TMenuItem;
|
||||||
|
N1: TMenuItem;
|
||||||
|
mnuNoFilter: TMenuItem;
|
||||||
|
mnuFilterByCountry: TMenuItem;
|
||||||
|
mnuSortASC: TMenuItem;
|
||||||
|
mnuSortDESC: TMenuItem;
|
||||||
|
DBGridPopupMenu: TPopupMenu;
|
||||||
|
Panel1: TPanel;
|
||||||
|
Panel2: TPanel;
|
||||||
|
BookmarkDropdown: TPopupMenu;
|
||||||
|
ToolBar: TToolBar;
|
||||||
|
ToolButton1: TToolButton;
|
||||||
|
ToolButton2: TToolButton;
|
||||||
|
ToolButton3: TToolButton;
|
||||||
|
ToolButton4: TToolButton;
|
||||||
|
btnBookmark1: TToolButton;
|
||||||
|
ToolButton5: TToolButton;
|
||||||
|
ToolButton6: TToolButton;
|
||||||
|
btnBookmark2: TToolButton;
|
||||||
|
btnBookmark3: TToolButton;
|
||||||
|
ToolButton7: TToolButton;
|
||||||
|
ToolButton8: TToolButton;
|
||||||
|
procedure acClearBookmarkExecute(Sender: TObject);
|
||||||
|
procedure acFilterByCountryExecute(Sender: TObject);
|
||||||
|
procedure acFindCityExecute(Sender: TObject);
|
||||||
|
procedure acGotoBookmarkExecute(Sender: TObject);
|
||||||
|
procedure acNoFilterExecute(Sender: TObject);
|
||||||
|
procedure acSetBookmarkExecute(Sender: TObject);
|
||||||
|
procedure acSortAscExecute(Sender: TObject);
|
||||||
|
procedure acSortDescExecute(Sender: TObject);
|
||||||
|
procedure BookmarkDropdownPopup(Sender: TObject);
|
||||||
|
procedure btnBookmark1MouseMove(Sender: TObject; Shift: TShiftState; X,
|
||||||
|
Y: Integer);
|
||||||
|
procedure cmbFilterEditingDone(Sender: TObject);
|
||||||
|
procedure DatasetAfterOpen(ADataSet: TDataSet);
|
||||||
|
procedure DBGridTitleClick(Column: TColumn);
|
||||||
|
procedure FormCreate(Sender: TObject);
|
||||||
|
procedure DBGridPopupMenuPopup(Sender: TObject);
|
||||||
|
procedure mnuFindCityClick(Sender: TObject);
|
||||||
|
private
|
||||||
|
FBookmarks: array[1..3] of TBookmark;
|
||||||
|
FSortColumn: TColumn;
|
||||||
|
procedure GetUniqueFieldValues(AField: TField; AList: TStrings);
|
||||||
|
procedure mnuFilterHandler(Sender: TObject);
|
||||||
|
procedure PrepareFilter;
|
||||||
|
|
||||||
|
public
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
MainForm: TMainForm;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$R *.lfm}
|
||||||
|
|
||||||
|
uses
|
||||||
|
StrUtils, fpsTypes;
|
||||||
|
|
||||||
|
|
||||||
|
{ TMainForm }
|
||||||
|
|
||||||
|
procedure TMainForm.acFilterByCountryExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
Dataset.Filtered := false;
|
||||||
|
if (cmbFilter.Text = '') or (cmbFilter.Text = 'all countries') then
|
||||||
|
cmbFilter.ItemIndex := 0
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Dataset.Filter := 'Country = "' + cmbFilter.Text + '"';
|
||||||
|
Dataset.Filtered := true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.acClearBookmarkExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
ac: TAction;
|
||||||
|
mnu: TComponent;
|
||||||
|
idx: Integer;
|
||||||
|
begin
|
||||||
|
if not (Sender is TAction) then
|
||||||
|
exit;
|
||||||
|
mnu := TAction(Sender).ActionComponent;
|
||||||
|
idx := mnu.Tag;
|
||||||
|
if idx <= 0 then
|
||||||
|
exit;
|
||||||
|
if Dataset.BookmarkValid(FBookmarks[idx]) then
|
||||||
|
begin
|
||||||
|
Dataset.FreeBookmark(FBookmarks[idx]);
|
||||||
|
FBookmarks[idx] := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.acFindCityExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
s := InputBox('Find city', 'City', '');
|
||||||
|
if s <> '' then
|
||||||
|
begin
|
||||||
|
if not Dataset.Locate('City', s, [loCaseInsensitive, loPartialKey]) then
|
||||||
|
ShowMessage('Not found.');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.acGotoBookmarkExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
ac: TAction;
|
||||||
|
mnu: TComponent;
|
||||||
|
idx: Integer;
|
||||||
|
begin
|
||||||
|
if not (Sender is TAction) then
|
||||||
|
exit;
|
||||||
|
mnu := TAction(Sender).ActionComponent;
|
||||||
|
idx := mnu.Tag;
|
||||||
|
if idx <= 0 then
|
||||||
|
exit;
|
||||||
|
if Dataset.BookmarkValid(FBookmarks[idx]) then
|
||||||
|
try
|
||||||
|
Dataset.GotoBookmark(FBookmarks[idx]);
|
||||||
|
except
|
||||||
|
MessageDlg('Bookmark not found (filtered?)', mtError, [mbOK], 0);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.acNoFilterExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
cmbFilter.ItemIndex := 0;
|
||||||
|
|
||||||
|
Dataset.Filtered := false;
|
||||||
|
Dataset.Filter := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.acSetBookmarkExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
ac: TAction;
|
||||||
|
mnu: TComponent;
|
||||||
|
idx: Integer;
|
||||||
|
begin
|
||||||
|
if not (Sender is TAction) then
|
||||||
|
exit;
|
||||||
|
mnu := TAction(Sender).ActionComponent;
|
||||||
|
idx := mnu.Tag;
|
||||||
|
if idx <= 0 then
|
||||||
|
exit;
|
||||||
|
FBookmarks[idx] := Dataset.Getbookmark;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.acSortAscExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if FSortColumn <> nil then FSortColumn.Title.ImageIndex := -1;
|
||||||
|
FSortColumn := DBGrid.SelectedColumn;
|
||||||
|
FSortColumn.Title.ImageIndex := 0;
|
||||||
|
Dataset.SortOnField(FSortColumn.FieldName);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.acSortDescExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if FSortColumn <> nil then FSortColumn.Title.ImageIndex := -1;
|
||||||
|
FSortColumn := DBGrid.SelectedColumn;
|
||||||
|
FSortColumn.Title.ImageIndex := 1;
|
||||||
|
Dataset.SortOnField(DBGrid.SelectedColumn.FieldName, [ssoDescending]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.BookmarkDropdownPopup(Sender: TObject);
|
||||||
|
var
|
||||||
|
idx: Integer;
|
||||||
|
dropdown: TPopupMenu;
|
||||||
|
btn: TToolButton;
|
||||||
|
begin
|
||||||
|
if not (Sender is TPopupMenu) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
dropdown := TPopupMenu(Sender);
|
||||||
|
idx := dropdown.Tag;
|
||||||
|
mnuSetBookmark.Tag := idx;
|
||||||
|
mnuGotoBookmark.Tag := idx;
|
||||||
|
mnuClearBookmark.Tag := idx;
|
||||||
|
|
||||||
|
acSetBookmark.Enabled := true;
|
||||||
|
acGotoBookmark.Enabled := Dataset.BookmarkValid(FBookmarks[idx]);
|
||||||
|
acClearBookmark.Enabled := Dataset.BookmarkValid(FBookmarks[idx]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.btnBookmark1MouseMove(Sender: TObject; Shift: TShiftState;
|
||||||
|
X, Y: Integer);
|
||||||
|
begin
|
||||||
|
with TToolButton(Sender) do
|
||||||
|
DropDownMenu.Tag := Tag;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.cmbFilterEditingDone(Sender: TObject);
|
||||||
|
begin
|
||||||
|
acFilterByCountryExecute(nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.FormCreate(Sender: TObject);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
// Open spreadsheet file as dataset
|
||||||
|
Dataset.FileName := 'Temperatures.xlsx';
|
||||||
|
Dataset.Open;
|
||||||
|
|
||||||
|
// Tailor the columns of the DBGrid
|
||||||
|
DBGrid.Columns[0].Width := 100;
|
||||||
|
DBGrid.Columns[1].Width := 100;
|
||||||
|
for i := 2 to DBGrid.Columns.Count-1 do
|
||||||
|
with DBGrid.Columns[i] do begin
|
||||||
|
Width := 64;
|
||||||
|
DisplayFormat := '0.0'; // Avoid too many decimal places in floating point fields.
|
||||||
|
Title.Alignment := taCenter;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Prepare bookmarks
|
||||||
|
FBookmarks[1] := nil;
|
||||||
|
FBookmarks[2] := nil;
|
||||||
|
FBookmarks[3] := nil;
|
||||||
|
|
||||||
|
// Narrower input box
|
||||||
|
cInputQueryEditSizePercents := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.DBGridPopupMenuPopup(Sender: TObject);
|
||||||
|
begin
|
||||||
|
mnuGotoBookmark1.Enabled := Dataset.BookmarkValid(FBookmarks[1]);
|
||||||
|
mnuGotoBookmark2.Enabled := Dataset.BookmarkValid(FBookmarks[2]);
|
||||||
|
mnuGotoBookmark3.Enabled := Dataset.BookmarkValid(FBookmarks[3]);
|
||||||
|
|
||||||
|
mnuClearBookmark1.Enabled := Dataset.BookmarkValid(FBookmarks[1]);
|
||||||
|
mnuClearBookmark2.Enabled := Dataset.BookmarkValid(FBookmarks[2]);
|
||||||
|
mnuClearBookmark3.Enabled := Dataset.BookmarkValid(FBookmarks[3]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ Sorts the grid (and worksheet) when a grid header is clicked. A sort indicator
|
||||||
|
image is displayed at the right of the column title. Requires an ImageList
|
||||||
|
assigned to the grid's TitleImageList having the image for ascending and
|
||||||
|
descending sorts at index 0 and 1, respectively. }
|
||||||
|
procedure TMainForm.DBGridTitleClick(Column: TColumn);
|
||||||
|
var
|
||||||
|
options: TsSortOptions;
|
||||||
|
begin
|
||||||
|
options := []; // [] --> ascending sort
|
||||||
|
|
||||||
|
if FSortColumn = Column then
|
||||||
|
// Previously selected sort column was clicked another time...
|
||||||
|
begin
|
||||||
|
// Toggle between ascending and descending sort images
|
||||||
|
FSortColumn.Title.ImageIndex := (FSortColumn.Title.ImageIndex + 1) mod 2;
|
||||||
|
if FSortColumn.Title.ImageIndex = 1 then
|
||||||
|
options := [ssoDescending];
|
||||||
|
end
|
||||||
|
else
|
||||||
|
// A previously unsorted column was clicked...
|
||||||
|
begin
|
||||||
|
// Remove sort image from old sort column
|
||||||
|
if FSortColumn <> nil then FSortColumn.Title.ImageIndex := -1;
|
||||||
|
// Store clicked column as new SortColumn
|
||||||
|
FSortColumn := Column;
|
||||||
|
// Set sort image index to "ascending sort"
|
||||||
|
FSortColumn.Title.ImageIndex := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Execute the sorting operation.
|
||||||
|
Dataset.SortOnField(FSortColumn.Field.FieldName, options);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.DatasetAfterOpen(ADataSet: TDataSet);
|
||||||
|
begin
|
||||||
|
PrepareFilter;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.GetUniqueFieldValues(AField: TField; AList: TStrings);
|
||||||
|
var
|
||||||
|
bm: TBookmark;
|
||||||
|
L: TStringList;
|
||||||
|
begin
|
||||||
|
bm := Dataset.GetBookmark;
|
||||||
|
Dataset.DisableControls;
|
||||||
|
L := TStringList.Create;
|
||||||
|
try
|
||||||
|
L.Sorted := true;
|
||||||
|
L.Duplicates := dupIgnore;
|
||||||
|
Dataset.First;
|
||||||
|
while not Dataset.EOF do
|
||||||
|
begin
|
||||||
|
L.Add(AField.AsString);
|
||||||
|
Dataset.Next;
|
||||||
|
end;
|
||||||
|
AList.Assign(L);
|
||||||
|
finally
|
||||||
|
L.Free;
|
||||||
|
if Dataset.BookmarkValid(bm) then
|
||||||
|
begin
|
||||||
|
Dataset.GotoBookmark(bm);
|
||||||
|
Dataset.FreeBookmark(bm);
|
||||||
|
end;
|
||||||
|
Dataset.EnableControls;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.mnuFindCityClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
s := InputBox('Find city', 'City', '');
|
||||||
|
if s <> '' then
|
||||||
|
begin
|
||||||
|
if not Dataset.Locate('City', s, [loCaseInsensitive, loPartialKey]) then
|
||||||
|
ShowMessage('Not found.');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.mnuFilterHandler(Sender: TObject);
|
||||||
|
begin
|
||||||
|
cmbFilter.Text := (Sender as TMenuItem).Caption;
|
||||||
|
|
||||||
|
Dataset.Filtered := false;
|
||||||
|
Dataset.Filter := 'Country = "' + (Sender as TMenuItem).Caption + '"';
|
||||||
|
Dataset.Filtered := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.PrepareFilter;
|
||||||
|
var
|
||||||
|
L: TStrings;
|
||||||
|
mnu: TMenuItem;
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
L := TStringList.Create;
|
||||||
|
try
|
||||||
|
GetUniqueFieldValues(DBGrid.SelectedColumn.Field, L);
|
||||||
|
for i := 0 to L.Count-1 do begin
|
||||||
|
mnu := TMenuItem.Create(mnuFilterByCountry);
|
||||||
|
mnu.Caption := L[i];
|
||||||
|
mnu.OnClick := @mnuFilterHandler;
|
||||||
|
MnuFilterByCountry.Add(mnu);
|
||||||
|
end;
|
||||||
|
|
||||||
|
cmbFilter.Items.Assign(L);
|
||||||
|
cmbFilter.Items.Insert(0, 'all countries');
|
||||||
|
cmbFilter.ItemIndex := 0;
|
||||||
|
|
||||||
|
finally
|
||||||
|
L.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
BIN
components/fpspreadsheet/images/demos/sort_asc.png
Normal file
BIN
components/fpspreadsheet/images/demos/sort_asc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 534 B |
BIN
components/fpspreadsheet/images/demos/sort_asc_150.png
Normal file
BIN
components/fpspreadsheet/images/demos/sort_asc_150.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 854 B |
BIN
components/fpspreadsheet/images/demos/sort_asc_200.png
Normal file
BIN
components/fpspreadsheet/images/demos/sort_asc_200.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 959 B |
BIN
components/fpspreadsheet/images/demos/sort_desc.png
Normal file
BIN
components/fpspreadsheet/images/demos/sort_desc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 567 B |
BIN
components/fpspreadsheet/images/demos/sort_desc_150.png
Normal file
BIN
components/fpspreadsheet/images/demos/sort_desc_150.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 859 B |
BIN
components/fpspreadsheet/images/demos/sort_desc_200.png
Normal file
BIN
components/fpspreadsheet/images/demos/sort_desc_200.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1002 B |
Reference in New Issue
Block a user