Componentes.Terceros.DevExp.../official/x.26/ExpressQuantumGrid 6/Demos/Delphi/UnboundExternalDataDemo/UnboundExternalDataDemoMain.pas
2007-09-09 11:27:27 +00:00

255 lines
6.7 KiB
ObjectPascal

unit UnboundExternalDataDemoMain;
interface
uses
Windows,Forms, Dialogs, SysUtils, cxStyles, Classes, ActnList, ImgList, Controls, Menus,
ComCtrls, StdCtrls, cxGridLevel, cxClasses, cxControls, cxGridCustomView,
cxGridCustomTableView, cxGridTableView, cxGrid, cxDataStorage,
cxCustomData, cxGraphics, cxFilter, cxData, cxEdit, cxLookAndFeels;
type
TUnboundExternalDataDemoMainForm = class(TForm)
mmMain: TMainMenu;
miAbout: TMenuItem;
miFile: TMenuItem;
Exit1: TMenuItem;
sbMain: TStatusBar;
lbDescription: TLabel;
StyleRepository: TcxStyleRepository;
stBlueDarkBold: TcxStyle;
stBlueLight: TcxStyle;
stBlueBright: TcxStyle;
stYellowLight: TcxStyle;
stGreyLight: TcxStyle;
stBlueSky: TcxStyle;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
cxGrid: TcxGrid;
tvSections: TcxGridTableView;
tvValues: TcxGridTableView;
SectionLevel: TcxGridLevel;
DetailLevel: TcxGridLevel;
N1: TMenuItem;
miOpen: TMenuItem;
miSave: TMenuItem;
miSaveAs: TMenuItem;
Edit1: TMenuItem;
miInsertSection: TMenuItem;
miDeleteSection: TMenuItem;
stBlueDark: TcxStyle;
stGold: TcxStyle;
LookAndFeelController: TcxLookAndFeelController;
procedure miAboutClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure miOpenClick(Sender: TObject);
procedure miSaveClick(Sender: TObject);
procedure miSaveAsClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure miExitClick(Sender: TObject);
procedure miInsertSectionClick(Sender: TObject);
procedure miDeleteSectionClick(Sender: TObject);
procedure sbMainResize(Sender: TObject);
private
FChangesCount: Integer;
procedure DoSmthOnModify(Sender: TObject);
procedure CustomizeGrid;
procedure GenerateColumns;
procedure LoadData;
procedure Load(const AFileName: string);
procedure UpdateFileInfo(const AFileName: string);
procedure ResetChanges;
public
{ Public declarations }
end;
var
UnboundExternalDataDemoMainForm: TUnboundExternalDataDemoMainForm;
implementation
{$R *.dfm}
uses
UnboundExternalDataDemoClasses, AboutDemoForm;
resourcestring
rsIniFileName = 'odbcinst_test.ini';
var
IniFile: TUserIniFile;
UserDataSource: TUserDataSource;
UserDetailDataSource: TUserDetailDataSource;
procedure TUnboundExternalDataDemoMainForm.miAboutClick(Sender: TObject);
begin
ShowAboutDemoForm;
end;
procedure TUnboundExternalDataDemoMainForm.FormCreate(Sender: TObject);
begin
IniFile := TUserIniFile.Create(ExtractFilePath(Application.ExeName) + rsIniFileName);
UpdateFileInfo(IniFile.FileName);
IniFile.OnModify := DoSmthOnModify;
UserDataSource := TUserDataSource.Create(IniFile);
UserDetailDataSource := TUserDetailDataSource.Create(UserDataSource);
CustomizeGrid;
end;
procedure TUnboundExternalDataDemoMainForm.CustomizeGrid;
begin
GenerateColumns;
LoadData;
end;
procedure TUnboundExternalDataDemoMainForm.DoSmthOnModify(Sender: TObject);
begin
Inc(FChangesCount);
sbMain.Panels[2].Text := Format('Changes Count: %d', [FChangesCount]);
end;
procedure TUnboundExternalDataDemoMainForm.GenerateColumns;
begin
with tvSections do
begin
with CreateColumn as TcxGridColumn do
begin
Caption := 'Section Name';
DataBinding.ValueTypeClass := TcxStringValueType;
Width := 600;
end;
DataController.CustomDataSource := UserDataSource;
end;
with tvValues do
begin
with CreateColumn as TcxGridColumn do
begin
Caption := 'Parameter Name';
DataBinding.ValueTypeClass := TcxStringValueType;
DataBinding.Data := Pointer(0);
Width := 300;
end;
with CreateColumn as TcxGridColumn do
begin
Caption := 'Parameter Value';
DataBinding.ValueTypeClass := TcxStringValueType;
DataBinding.Data := Pointer(1);
Width := 300;
end;
DataController.CustomDataSource := UserDetailDataSource;
end;
end;
procedure TUnboundExternalDataDemoMainForm.Load(const AFileName: string);
begin
IniFile.Rename(AFileName, True);
UserDataSource.DataChanged;
end;
procedure TUnboundExternalDataDemoMainForm.LoadData;
begin
Load(IniFile.FileName);
end;
procedure TUnboundExternalDataDemoMainForm.UpdateFileInfo(
const AFileName: string);
begin
sbMain.Panels[1].Text := ExtractFileName(AFileName);
end;
procedure TUnboundExternalDataDemoMainForm.FormDestroy(Sender: TObject);
begin
FreeAndNil(UserDetailDataSource);
FreeAndNil(UserDataSource);
FreeAndNil(IniFile);
end;
procedure TUnboundExternalDataDemoMainForm.miOpenClick(Sender: TObject);
var
I: Integer;
begin
if IniFile.Modified then
begin
I := MessageDlg('Do you want to save the changes ?', mtConfirmation, [mbYes, mbNo, mbCancel], 0);
case I of
mrYes: IniFile.SaveValues;
mrCancel: Exit;
end;
end;
OpenDialog.InitialDir := ExtractFilePath(Application.ExeName);
with OpenDialog do
if Execute then
begin
Load(FileName);
UpdateFileInfo(FileName);
ResetChanges;
end;
end;
procedure TUnboundExternalDataDemoMainForm.miSaveClick(Sender: TObject);
begin
IniFile.SaveValues;
ResetChanges;
end;
procedure TUnboundExternalDataDemoMainForm.miSaveAsClick(Sender: TObject);
begin
with SaveDialog do
if Execute then
begin
IniFile.SaveAs(FileName);
UpdateFileInfo(FileName);
ResetChanges;
end;
end;
procedure TUnboundExternalDataDemoMainForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
var
I: Integer;
begin
I := -1;
if IniFile.Modified then
I := MessageDlg('Do you want to save the changes ?', mtConfirmation, [mbYes, mbNo, mbCancel], 0);
case I of
mrYes: IniFile.SaveValues;
mrCancel: CanClose := False;
end;
end;
procedure TUnboundExternalDataDemoMainForm.miExitClick(Sender: TObject);
begin
Close;
end;
procedure TUnboundExternalDataDemoMainForm.miInsertSectionClick(
Sender: TObject);
begin
cxGrid.FocusedView.DataController.Insert;
end;
procedure TUnboundExternalDataDemoMainForm.miDeleteSectionClick(
Sender: TObject );
begin
cxGrid.FocusedView.DataController.DeleteFocused;
end;
procedure TUnboundExternalDataDemoMainForm.sbMainResize(Sender: TObject);
begin
with TStatusBar(Sender) do
Panels[0].Width := Width - (Panels[1].Width + Panels[2].Width)
end;
procedure TUnboundExternalDataDemoMainForm.ResetChanges;
begin
FChangesCount := 0;
sbMain.Panels[2].Text := 'Changes Count: 0';
end;
end.