⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unboundexternaldatademomain.pas

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 PAS
字号:
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.  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -