EXAMPLE 69
TAdvStringGrid
example 69 : Using Windows Vista style column header dropdown menus
The Windows Vista file explorer introduces interesting and user friendly
filtering & sorting capabilities via column headers. By using TAdvStringGrid and
TAdvStickyPopupMenu (available in the TMS Component Pack) it is possible to add
a similar interface to your applications.
To achieve this, set grid.Look = glVista. This will change the fixed cell colors to appear with mirrored gradients as well as hover & down colors. To have a dropdown button on fixed cells, set grid.ControlLook.FixedDropDownButton to true.
Drop a TAdvStickyPopupMenu on the form. The menu items are set to allow to configure a filter for values 0..25, 26..50, 51..75 and 76..100. Two items are added to invoke ascending or descending sorting.
The grid is initialized with values between 0 and 100 with code:
procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin advstringgrid1.RandomFill(false,100); advstringgrid1.SortSettings.Show := true; advstringgrid1.FixedRowAlways := true; for i := 1 to advstringgrid1.ColCount - 1 do advstringgrid1.Cells[i,0] := 'Col ' + inttostr(i); end;When the dropdown button on a fixed cell is clicked the event OnFixedDropDownClicked is triggered and from this event handler the AdvStickyPopupMenu is shown:
procedure TForm1.AdvStringGrid1FixedDropDownClick(Sender: TObject; ACol, ARow: Integer; var AMenu: TPopupMenu; var KeepFixedCellHighlighted: boolean); var r: TRect; pt: TPoint; begin r := advstringgrid1.CellRect(ACol,ARow); pt := Advstringgrid1.ClientToScreen(Point(r.Right - 16, r.Bottom)); FilterColumn := ACol; AdvStickyPopupMenu1.ShowMenu(pt.X,pt.y); KeepFixedCellHighlighted := true; end;Until the menu hides, the fixed cell highlighting is forced by setting the parameter KeepFixedCellHighlighted to true. When the menu is hidden, this fixed cell highlighting is removed again with code:
procedure TForm1.AdvStickyPopupMenu1MenuHide(Sender: TObject); begin advstringgrid1.ResetFixedCellHighlight; end;
Handling the sorting is done from the MenuItemClick event:
procedure TForm1.AdvStickyPopupMenu1ItemClick(Sender: TObject; Index: Integer); begin if Index = 5 then advstringgrid1.Sort(FilterColumn, sdAscending); if Index = 6 then advstringgrid1.Sort(FilterColumn, sdDescending); end;
and the filtering is invoked from the MenuItemCheck event:
procedure TForm1.AdvStickyPopupMenu1CheckClick(Sender: TObject; Index: Integer; Checked:
boolean);
var
fltr: string;
function AppendFilter(s:string): string;
begin
if fltr = '' then
fltr := s
else
fltr := fltr + ' | ' + s;
end;
begin
if Index in [0..3] then // filter checkbox is choosen
begin
fltr := '';
advstringgrid1.FilterActive := false; // remove
filtering
AdvStringGrid1.Filter.Clear;
// build new filter
if AdvStickyPopupMenu1.MenuItems[0].Checked then
AppendFilter('(<=25)');
if AdvStickyPopupMenu1.MenuItems[1].Checked then
AppendFilter('(>25 & <=50)');
if AdvStickyPopupMenu1.MenuItems[2].Checked then
AppendFilter('(>50 & <=75)');
if AdvStickyPopupMenu1.MenuItems[3].Checked then
AppendFilter('(>75 & <=100)');
if fltr <> '' then // apply new filter
begin
with advstringgrid1.Filter.Add do
begin
condition := fltr;
column := FilterColumn;
end;
AdvStringGrid1.FilterActive := true;
end;
end;
end;
Delphi project & source files for downloading included in the main demos distribution for Delphi.
The project and source files have been written with Delphi 6,7. To use these files in other versions of Delphi, ignore any remarks when opening the form files and save the files. After this, compilation can be done. The error messages are due to properties included in the Delphi 6 form file, but not available in lower versions of Delphi.


ONLINE ORDERS
Subscribe to RSS Feed