Componentes.Terceros.DevExp.../official/x.30/ExpressMasterView/Demos/Delphi/MasterViewStyles/main.pas
2007-12-16 17:06:54 +00:00

396 lines
13 KiB
ObjectPascal

unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ColorGrd, StdCtrls, dxMasterView, ExtCtrls, Buttons, Db, DBTables;
type
TfmMain = class(TForm)
pnBottom: TPanel;
MasterView: TdxMasterView;
ColorDialog: TColorDialog;
FontDialog: TFontDialog;
tbCustomer: TTable;
dsCustomer: TDataSource;
tbOrders: TTable;
dsOrders: TDataSource;
Level1: TdxMasterViewLevel;
CustNo: TdxMasterViewColumn;
Company: TdxMasterViewColumn;
Addr1: TdxMasterViewColumn;
Addr2: TdxMasterViewColumn;
City: TdxMasterViewColumn;
State: TdxMasterViewColumn;
Zip: TdxMasterViewColumn;
Country: TdxMasterViewColumn;
Phone: TdxMasterViewColumn;
FAX: TdxMasterViewColumn;
TaxRate: TdxMasterViewColumn;
Contact: TdxMasterViewColumn;
LastInvoiceDate: TdxMasterViewColumn;
Level2: TdxMasterViewLevel;
OrderNo: TdxMasterViewColumn;
CustNoL2: TdxMasterViewColumn;
SaleDate: TdxMasterViewColumn;
ShipDate: TdxMasterViewColumn;
EmpNo: TdxMasterViewColumn;
ShipToContact: TdxMasterViewColumn;
ShipToAddr1: TdxMasterViewColumn;
ShipToAddr2: TdxMasterViewColumn;
ShipToCity: TdxMasterViewColumn;
ShipToState: TdxMasterViewColumn;
ShipToZip: TdxMasterViewColumn;
ShipToCountry: TdxMasterViewColumn;
ShipToPhone: TdxMasterViewColumn;
ShipVIA: TdxMasterViewColumn;
PO: TdxMasterViewColumn;
Terms: TdxMasterViewColumn;
PaymentMethod: TdxMasterViewColumn;
ItemsTotal: TdxMasterViewColumn;
TaxRateL2: TdxMasterViewColumn;
Freight: TdxMasterViewColumn;
AmountPaid: TdxMasterViewColumn;
Style1: TdxMasterViewStyle;
Style2: TdxMasterViewStyle;
pnLeft: TPanel;
GroupBox1: TGroupBox;
btnNew: TButton;
btnDelete: TButton;
btnColor: TButton;
plColor: TPanel;
plAnotherColor: TPanel;
btnAnotherColor: TButton;
btnFont: TButton;
cmbLevels: TComboBox;
cmbLevelElements: TComboBox;
cmbLevelStyle: TComboBox;
cmbColumns: TComboBox;
cmbColumnElements: TComboBox;
cmbColumnStyle: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
btnCustomize: TButton;
cmbStyles: TListBox;
procedure btnColorClick(Sender: TObject);
procedure btnFontClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure cmbStylesChange(Sender: TObject);
procedure btnAnotherColorClick(Sender: TObject);
procedure btnNewClick(Sender: TObject);
procedure cmbLevelsChange(Sender: TObject);
procedure cmbColumnsChange(Sender: TObject);
procedure cmbLevelElementsChange(Sender: TObject);
procedure cmbColumnElementsChange(Sender: TObject);
procedure cmbLevelStyleChange(Sender: TObject);
procedure cmbColumnStyleChange(Sender: TObject);
procedure btnCustomizeClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
private
procedure StyleControlsUpdate;
procedure FillColumnsCombos(Level: TdxMasterViewLevel);
procedure AssignStyles;
public
CurrentStyle: TdxMasterViewStyle;
CurrentLevel: TdxMasterViewLevel;
CurrentColumn: TdxMasterViewColumn;
end;
var
fmMain: TfmMain;
implementation
{$R *.DFM}
//set color for style
procedure TfmMain.btnColorClick(Sender: TObject);
begin
if CurrentStyle <> nil then
begin
ColorDialog.Color := CurrentStyle.Color;
if ColorDialog.Execute then
begin
CurrentStyle.Color := ColorDialog.Color;
StyleControlsUpdate;
end;
end;
end;
//set font for style
procedure TfmMain.btnFontClick(Sender: TObject);
begin
if CurrentStyle <> nil then
begin
FontDialog.Font := CurrentStyle.Font;
if FontDialog.Execute then
begin
CurrentStyle.Font := FontDialog.Font;
StyleControlsUpdate;
end;
end;
end;
procedure TfmMain.FormCreate(Sender: TObject);
var
i: Integer;
S: TdxMasterViewStyle;
begin
//fill the cmbStyle
for i := 0 to MasterView.StyleCount - 1 do
begin
S := MasterView.Styles[i];
cmbStyles.Items.addObject(S.Name, S);
end;
cmbStyles.ItemIndex := 0;
cmbStylesChange(nil);
//assign cmbStyles with
AssignStyles;
//Set the current level
cmbLevels.ItemIndex := 0;
cmbLevelsChange(cmbLevels);
end;
procedure TfmMain.cmbStylesChange(Sender: TObject);
begin
if cmbStyles.Items.Count > 0 then
CurrentStyle := TdxMasterviewStyle(cmbStyles.Items.Objects[cmbStyles.ItemIndex])
else
CurrentStyle := nil;
StyleControlsUpdate;
end;
//update visual controls tied to the current style
procedure TfmMain.StyleControlsUpdate;
begin
plColor.Color := clBtnFace;
plAnotherColor.Color := clBtnFace;
plColor.Caption := '';
plAnotherColor.Caption := '';
if CurrentStyle <> nil then
begin
//set another color, if it was assigned
if svAnotherColor in CurrentStyle.AssignedValues then
plAnotherColor.Color := CurrentStyle.AnotherColor;
//set a color, if it was assigned
if svColor in CurrentStyle.AssignedValues then
begin
plColor.Color := CurrentStyle.Color;
end;
//set a font, if it was assigned
if svFont in CurrentStyle.AssignedValues then
begin
plColor.Font := CurrentStyle.Font;
plColor.Caption := 'Font';
plAnotherColor.Font := CurrentStyle.Font;
plAnotherColor.Caption := 'Font';
end;
end
else
cmbStyles.Items.Clear;
end;
procedure TfmMain.btnAnotherColorClick(Sender: TObject);
begin
if CurrentStyle <> nil then
begin
ColorDialog.Color := CurrentStyle.AnotherColor;
if ColorDialog.Execute then
begin
CurrentStyle.AnotherColor := ColorDialog.Color;
StyleControlsUpdate;
end;
end;
end;
//create a new style
procedure TfmMain.btnNewClick(Sender: TObject);
var
LevelItemIndex, ColumnItemIndex: Integer;
begin
CurrentStyle := TdxMasterViewStyle.Create(MasterView);
CurrentStyle.Name := 'Style'+IntToStr(cmbStyles.Items.Count + 1);
cmbStyles.Items.AddObject(CurrentStyle.Name,CurrentStyle);
cmbStyles.ItemIndex := cmbStyles.Items.Count - 1;
cmbStylesChange(nil);
if cmbLevelStyle.Items.Strings[cmbLevelStyle.ItemIndex] <> 'None' then
LevelItemIndex := cmbLevelStyle.ItemIndex
else
LevelItemIndex := cmbLevelStyle.ItemIndex + 1;
if cmbColumnStyle.Items.Strings[cmbColumnStyle.ItemIndex] <> 'None' then
ColumnItemIndex := cmbColumnStyle.ItemIndex
else
ColumnItemIndex := cmbColumnStyle.ItemIndex + 1;
AssignStyles;
cmbLevelStyle.ItemIndex := LevelItemIndex;
cmbColumnStyle.ItemIndex := ColumnItemIndex;
end;
//delete the current style
procedure TfmMain.btnDeleteClick(Sender: TObject);
var
LevelItemIndex, ColumnItemIndex: Integer;
begin
cmbStyles.Items.Delete(cmbStyles.ItemIndex);
CurrentStyle.Free;
CurrentStyle := nil;
cmbStyles.ItemIndex := cmbStyles.Items.Count - 1;
cmbStylesChange(cmbStyles);
if cmbLevelStyle.Items.Strings[cmbLevelStyle.ItemIndex] <> 'None' then
LevelItemIndex := cmbLevelStyle.ItemIndex
else
LevelItemIndex := cmbLevelStyle.ItemIndex - 1;
if cmbColumnStyle.Items.Strings[cmbColumnStyle.ItemIndex] <> 'None' then
ColumnItemIndex := cmbColumnStyle.ItemIndex
else
ColumnItemIndex := cmbColumnStyle.ItemIndex - 1;
AssignStyles;
cmbLevelStyle.ItemIndex := LevelItemIndex;
cmbColumnStyle.ItemIndex := ColumnItemIndex;
end;
procedure TfmMain.cmbLevelsChange(Sender: TObject);
begin
case TComboBox(Sender).ItemIndex of
0 : CurrentLevel := Level1;
1 : CurrentLevel := Level2;
end;
//fill cmbColumns
FillColumnsCombos(CurrentLevel);
cmbColumnsChange(cmbColumns);
//set the cmbLevelElements value
cmbLevelElements.ItemIndex := 0;
cmbLevelElementsChange(cmbLevelElements);
end;
procedure TfmMain.FillColumnsCombos(Level: TdxMasterViewLevel);
var
i: Integer;
begin
if Level <> nil then
begin
//Fill the cmbColumns
cmbColumns.Clear;
for i := 0 to Level.ColumnCount - 1 do
cmbColumns.Items.AddObject(Level.Columns[i].Name,Level.Columns[i]);
cmbColumns.ItemIndex := 0;
end;
end;
procedure TfmMain.cmbColumnsChange(Sender: TObject);
var
Index: Integer;
ComboBox: TComboBox;
begin
ComboBox := TCombobox(Sender);
Index := Combobox.ItemIndex;
//Set current column
CurrentColumn := Combobox.Items.Objects[Index] as TdxMasterViewColumn;
//set the cmbColumnElements value
cmbColumnElements.ItemIndex := 0;
cmbColumnElementsChange(cmbColumnElements);
end;
procedure TfmMain.cmbLevelElementsChange(Sender: TObject);
begin
case cmbLevelElements.ItemIndex of
0 : if CurrentLevel.CaptionStyle <> nil then
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf(CurrentLevel.CaptionStyle.Name)
else
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf('None');
1 : if CurrentLevel.ContentStyle <> nil then
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf(CurrentLevel.ContentStyle.Name)
else
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf('None');
2 : if CurrentLevel.FooterStyle <> nil then
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf(CurrentLevel.FooterStyle.Name)
else
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf('None');
3 : if CurrentLevel.GroupByBoxStyle <> nil then
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf(CurrentLevel.GroupByBoxStyle.Name)
else
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf('None');
4 : if CurrentLevel.GroupStyle <> nil then
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf(CurrentLevel.GroupStyle.Name)
else
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf('None');
5 : if CurrentLevel.HeaderStyle <> nil then
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf(CurrentLevel.HeaderStyle.Name)
else
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf('None');
6 : if CurrentLevel.PreviewStyle <> nil then
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf(CurrentLevel.PreviewStyle.Name)
else
cmbLevelStyle.ItemIndex := cmbLevelStyle.Items.IndexOf('None');
end;
end;
procedure TfmMain.cmbColumnElementsChange(Sender: TObject);
begin
case cmbColumnElements.ItemIndex of
0 : if CurrentColumn.ContentStyle <> nil then
cmbColumnStyle.ItemIndex := cmbColumnStyle.Items.IndexOf(CurrentColumn.ContentStyle.Name)
else
cmbColumnStyle.ItemIndex := cmbColumnStyle.Items.IndexOf('None');
1 : if CurrentColumn.FooterStyle <> nil then
cmbColumnStyle.ItemIndex := cmbColumnStyle.Items.IndexOf(CurrentColumn.FooterStyle.Name)
else
cmbColumnStyle.ItemIndex := cmbColumnStyle.Items.IndexOf('None');
2 : if CurrentColumn.HeaderStyle <> nil then
cmbColumnStyle.ItemIndex := cmbColumnStyle.Items.IndexOf(CurrentColumn.HeaderStyle.Name)
else
cmbColumnStyle.ItemIndex := cmbColumnStyle.Items.IndexOf('None');
end;
end;
procedure TfmMain.cmbLevelStyleChange(Sender: TObject);
begin
case cmbLevelElements.ItemIndex of
0 : CurrentLevel.CaptionStyle := TdxMasterViewStyle(cmbLevelStyle.Items.Objects[cmbLevelStyle.ItemIndex]);
1 : CurrentLevel.ContentStyle := TdxMasterViewStyle(cmbLevelStyle.Items.Objects[cmbLevelStyle.ItemIndex]);
2 : CurrentLevel.FooterStyle := TdxMasterViewStyle(cmbLevelStyle.Items.Objects[cmbLevelStyle.ItemIndex]);
3 : CurrentLevel.GroupByBoxStyle := TdxMasterViewStyle(cmbLevelStyle.Items.Objects[cmbLevelStyle.ItemIndex]);
4 : CurrentLevel.GroupStyle := TdxMasterViewStyle(cmbLevelStyle.Items.Objects[cmbLevelStyle.ItemIndex]);
5 : CurrentLevel.HeaderStyle := TdxMasterViewStyle(cmbLevelStyle.Items.Objects[cmbLevelStyle.ItemIndex]);
6 : CurrentLevel.PreviewStyle := TdxMasterViewStyle(cmbLevelStyle.Items.Objects[cmbLevelStyle.ItemIndex]);
end;
end;
procedure TfmMain.cmbColumnStyleChange(Sender: TObject);
begin
case cmbColumnElements.ItemIndex of
0 : CurrentColumn.ContentStyle := TdxMasterViewStyle(cmbColumnStyle.Items.Objects[cmbColumnStyle.ItemIndex]);
1 : CurrentColumn.FooterStyle := TdxMasterViewStyle(cmbColumnStyle.Items.Objects[cmbColumnStyle.ItemIndex]);
2 : CurrentColumn.HeaderStyle := TdxMasterViewStyle(cmbColumnStyle.Items.Objects[cmbColumnStyle.ItemIndex]);
end;
end;
procedure TfmMain.btnCustomizeClick(Sender: TObject);
begin
MasterView.Customizing := not MasterView.Customizing;
end;
procedure TfmMain.AssignStyles;
begin
cmbLevelStyle.Items.Assign(cmbStyles.Items);
cmbLevelStyle.Items.Add('None');
cmbColumnStyle.Items.Assign(cmbStyles.Items);
cmbColumnStyle.Items.Add('None');
end;
end.