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

📄 editorsstylesdemobase.pas

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 PAS
字号:
unit EditorsStylesDemoBase;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, cxContainer, cxEdit, cxHint, StdCtrls, cxPropertiesStore, Menus,
  cxControls, cxTextEdit, cxMemo, ExtCtrls, cxButtons;

type
  TcxExtEditorType = (eetLabel, eetProgressBar, eetTrackBar, eetCheckListBox,
    eetColorComboBox, eetFontNameComboBox, eetCheckComboBox, eetTreeView,
    eetShellTreeView, eetShellComboEdit, eetSplitter, eetGroupBox,
    eetSpinButton, eetHintStyleController, eetMCListBox, eetListView,
    eetHeader, eetShellListView, eetDBColorComboBox, eetDBLabel,
    eetDBProgressBar, eetDBTrackBar, eetDBCheckListBox, eetDBCheckComboBox,
    eetDBFontNameComboBox, eetDBShellComboEdit, eetMaskEdit, eetCheckBox,
    eetComboBox, eetButton, eetImage, eetDBTextEdit, eetDBSpinEdit,
    eetDBNavigator, eetDBDateEdit, eetDBLookupComboBox, eetDBMemo, eetGrid,
    eetCalcEdit, eetDateEdit, eetTextEdit, eetRichEdit);

  TcxExtEditorTypes = set of TcxExtEditorType;

  TcxHintType = (hcstLightInfo, hcstLightSlideLeft, hcstBlueSlideUp,
    hcstRoundedInfo, hcstStandard, hcstNoHint);

  TcxStyleSheetType = (shtLightBlue, shtLightGray, shtWood, shtRainyDay,
    shtBrick, shtDeepSea);

  TcxFileNameChangedEvent = procedure (AFileName: string) of object;

  TWinControlAccess = class(TWinControl);

  TEditorsStylesDemoBaseFrame = class(TForm)
    cxEditStyleController: TcxEditStyleController;
    cxPropertiesStore: TcxPropertiesStore;
    cxLabelStyleController: TcxEditStyleController;
    memDescrip: TcxMemo;
    FlickerTimer: TTimer;
    pnlDescription: TPanel;
    procedure FlickerTimerTimer(Sender: TObject);
    procedure FrameResize(Sender: TObject);
  private
    FOnFileNameChanged: TcxFileNameChangedEvent;
    FHintStyle: TcxHintType;
    FFlickeringClassName: string;
    FFrameControls: TList;
    procedure SetDisplayStyle(const Value: TcxStyleSheetType);
    function GetFlickering: Boolean;
    procedure SetFlickering(const Value: Boolean);
  protected
    FFileName: string;
    FDisplayStyle: TcxStyleSheetType;
    FTempDisplayStyle: TcxStyleSheetType;
    FStyleBackgroundColor: TColor;
    FTempFlickering: Boolean;
    procedure DoOnFileNameChanged;
    procedure ClearFrameControls;
    procedure cxSplitterCanResize(Sender: TObject; var NewSize: Integer;
      var Accept: Boolean);
    procedure cxSplitterMoved(Sender: TObject);
    property FlickeringClassName: string read FFlickeringClassName
      write FFlickeringClassName;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function Description: String; virtual;
    function GetExtEditorTypes(AControl: TWinControl): TcxExtEditorTypes; //virtual;
    function Name: string; virtual;
    function BriefName: string; virtual;
    function StylesIniPath: string; virtual;
    procedure ChangeDisplayStyle(ADisplayStyle: TcxStyleSheetType); virtual;
    procedure OpenFile(Sender: TObject); virtual;
    function MenuOpenFileVisible: Boolean; virtual;
    procedure SaveFile(Sender: TObject); virtual;
    function MenuSaveFileVisible: Boolean; virtual;
    function GetStyleBackgroundColor: TColor; virtual;
    procedure FlickerControls(AControlClassName: string); virtual;
    function ShowControlsAboveDescription: Boolean; virtual;
    function StyleMenuVisible: Boolean; virtual;
    property HintStyle: TcxHintType read FHintStyle write FHintStyle;
    property DisplayStyle: TcxStyleSheetType read FDisplayStyle write SetDisplayStyle;
    property FileName: string read FFileName;
    property OnFileNameChanged: TcxFileNameChangedEvent read FOnFileNameChanged write FOnFileNameChanged;
    property Flickering: Boolean read GetFlickering write SetFlickering;
  end;

  TEditorsStylesDemoBaseFrameClass = class of TEditorsStylesDemoBaseFrame;

  TEditorsStylesDemoFrameManager = class
  private
    FFrameList: TList;
    function GetFrame(AIndex: Integer): TEditorsStylesDemoBaseFrame;
    function GetFramesCount: Integer;
  public
    constructor Create; virtual;
    destructor Destroy; override;
    procedure RegisterFrameClass(AFrameClass: TEditorsStylesDemoBaseFrameClass);
    property FramesCount: Integer read GetFramesCount;
    property Frames[AIndex: Integer]: TEditorsStylesDemoBaseFrame read GetFrame; default;
  end;

  procedure cxGetEditorsNamesListByTypes(AEditorsNames: TStrings;
    AExtEditorTypes: TcxExtEditorTypes);

var
  EditorsStylesDemoFrameManager: TEditorsStylesDemoFrameManager;

const
  StyleSheetIniFiles: array[TcxStyleSheetType] of string = (
    'StyleLightBlue.ini',
    'StyleLightGray.ini',
    'StyleWood.ini',
    'StyleRainyDay.ini',
    'StyleBrick.ini',
    'StyleDeepSea.ini');

implementation

uses
  EditorsStylesDemoFrameControl, cxSplitter, cxClasses;

{$R *.dfm}

const
  AExtEditorNames: array[TcxExtEditorType] of string = ('TcxLabel',
    'TcxProgressBar', 'TcxTrackBar', 'TcxCheckListBox', 'TcxColorComboBox',
    'TcxFontNameComboBox', 'TcxCheckComboBox', 'TcxTreeView',
    'TcxShellTreeView', 'TcxShellComboEdit', 'TcxSplitter', 'TcxGroupBox',
    'TcxSpinButton', 'TcxHintStyleController', 'TcxMCListBox', 'TcxListView',
    'TcxHeader', 'TcxShellListView', 'TcxDBColorComboBox', 'TcxDBLabel',
    'TcxDBProgressBar', 'TcxDBTrackBar', 'TcxDBCheckListBox',
    'TcxDBCheckComboBox', 'TcxDBFontNameComboBox', 'TcxDBShellComboEdit', 'TcxMaskEdit', 'TcxCheckBox',
    'TcxComboBox', 'TcxButton', 'TcxImage', 'TcxDBTextEdit', 'TcxDBSpinEdit',
    'TcxDBNavigator', 'TcxDBDateEdit', 'TcxDBLookupComboBox', 'TcxDBMemo',
    'TcxGrid', 'TcxCalcEdit', 'TcxDateEdit', 'TcxTextEdit', 'TcxRichEdit');

procedure cxGetEditorsNamesListByTypes(AEditorsNames: TStrings;
    AExtEditorTypes: TcxExtEditorTypes);
var
  I: TcxExtEditorType;
begin
  if not Assigned(AEditorsNames) then Exit;
  AEditorsNames.Clear;
  for I := Low(AExtEditorNames) to High(AExtEditorNames) do
    if I in AExtEditorTypes then
      AEditorsNames.Add(AExtEditorNames[I]);
end;

{ TEditorsStylesDemoFrameManager }

constructor TEditorsStylesDemoFrameManager.Create;
begin
  inherited Create;
  FFrameList := TList.Create;
end;

destructor TEditorsStylesDemoFrameManager.Destroy;
var
  I: Integer;
  AFrame: TEditorsStylesDemoBaseFrame;
begin
  for I := 0 to FFrameList.Count - 1 do
  begin
    AFrame := TEditorsStylesDemoBaseFrame(FFrameList[I]);
    FreeAndNil(AFrame);
  end;
  FreeAndNil(FFrameList);
  inherited Destroy;
end;

function TEditorsStylesDemoFrameManager.GetFrame(
  AIndex: Integer): TEditorsStylesDemoBaseFrame;
begin
  Result := TEditorsStylesDemoBaseFrame(FFrameList[AIndex]);
end;

function TEditorsStylesDemoFrameManager.GetFramesCount: Integer;
begin
  Result := FFrameList.Count;
end;

procedure TEditorsStylesDemoFrameManager.RegisterFrameClass(
  AFrameClass: TEditorsStylesDemoBaseFrameClass);
var
  AFrame: TEditorsStylesDemoBaseFrame;
begin
  AFrame := AFrameClass.Create(nil);
  FFrameList.Add(AFrame);
end;

{ TEditorsStylesDemoBaseFrame }

constructor TEditorsStylesDemoBaseFrame.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FFileName := '';
  FHintStyle := hcstLightInfo;
  FDisplayStyle := shtLightBlue;
  FTempDisplayStyle := shtLightBlue;
  FFrameControls := TList.Create;
  FTempFlickering := False;
end;

destructor TEditorsStylesDemoBaseFrame.Destroy;
begin
  ClearFrameControls;
  FreeAndNil(FFrameControls);
  inherited Destroy;
end;

function TEditorsStylesDemoBaseFrame.GetExtEditorTypes(AControl: TWinControl): TcxExtEditorTypes;

  function GetcxControlType(AcxControlName: String): TcxExtEditorTypes;
  var
    I: Integer;
  begin
    Result := [];
    for I:=0 to Integer(High(AExtEditorNames)) do
      if AExtEditorNames[TcxExtEditorType(I)] = AcxControlName then
      begin
        Result := [TcxExtEditorType(I)];
        Break;
      end;
  end;

var
  I: Integer;
begin
  Result := [];
  for i:=0 to AControl.ControlCount - 1 do
  begin
    if AControl.Controls[I] is TWinControl then
      Result := Result + GetExtEditorTypes(AControl.Controls[I] as TWinControl);
    if ((AControl.Controls[I] is TcxControl) or (AControl.Controls[I] is TcxCustomButton)) and
      TControl(AControl.Controls[I]).Visible then
      Result := Result + GetcxControlType(AControl.Controls[I].ClassName);
  end;
end;

function TEditorsStylesDemoBaseFrame.Name: string;
begin
  Result := '';
end;

function TEditorsStylesDemoBaseFrame.StylesIniPath: string;
begin
  Result := '';
end;

procedure TEditorsStylesDemoBaseFrame.ChangeDisplayStyle(
  ADisplayStyle: TcxStyleSheetType);
var
  AIniFileName: string;
begin
  if (ADisplayStyle <> FTempDisplayStyle) then
  begin
    FTempDisplayStyle := ADisplayStyle;
    AIniFileName := StylesIniPath + StyleSheetIniFiles[ADisplayStyle];
    if  FileExists(AIniFileName) then
    begin
      cxPropertiesStore.Active := True;
      cxPropertiesStore.StorageName := AIniFileName;

      cxPropertiesStore.RestoreFrom;

      cxPropertiesStore.Active := False;
    end;
  end;
end;

procedure TEditorsStylesDemoBaseFrame.SetDisplayStyle(
  const Value: TcxStyleSheetType);
begin
  if (FDisplayStyle <> Value) or
    (FDisplayStyle <> FTempDisplayStyle) then
  begin
    FDisplayStyle := Value;
    ChangeDisplayStyle(FDisplayStyle)
  end;
end;

function TEditorsStylesDemoBaseFrame.MenuOpenFileVisible: Boolean;
begin
  Result := False;
end;

function TEditorsStylesDemoBaseFrame.MenuSaveFileVisible: Boolean;
begin
  Result := False;
end;

procedure TEditorsStylesDemoBaseFrame.OpenFile(Sender: TObject);
begin
end;

procedure TEditorsStylesDemoBaseFrame.SaveFile(Sender: TObject);
begin
end;

procedure TEditorsStylesDemoBaseFrame.DoOnFileNameChanged;
begin
  if Assigned(FOnFileNameChanged) then
    FOnFileNameChanged(FFileName);
end;

function TEditorsStylesDemoBaseFrame.GetStyleBackgroundColor: TColor;
begin
  Result := Color;
end;

function TEditorsStylesDemoBaseFrame.Description: String;
begin
  Result := 'Brief Description';
end;

procedure TEditorsStylesDemoBaseFrame.SetFlickering(const Value: Boolean);
  procedure CreateFrameControls(AControl: TWinControl);
  var
    I: Integer;
    AFrameControl: TcxFrameControl;
  begin
    for I := 0 to AControl.ControlCount - 1 do
    begin
      if (AControl.Controls[I].ClassName = FFlickeringClassName) then
      begin
        if (AControl.Controls[I] is TcxSplitter) then
        begin
          TcxSplitter(AControl.Controls[I]).OnMoved := cxSplitterMoved;
          TcxSplitter(AControl.Controls[I]).OnCanResize := cxSplitterCanResize;
        end;
        AFrameControl := TcxFrameControl.Create(Self);
        AFrameControl.Parent := Self;
        AFrameControl.FrameControl(AControl.Controls[I]);
        FFrameControls.Add(AFrameControl);
      end;
      if (AControl.Controls[I] is TWinControl) then
        CreateFrameControls(TWinControl(AControl.Controls[I]));
    end;
  end;

  procedure AdjustFlickeringShapes(AIsFlickerRun: Boolean);
  begin
    ClearFrameControls;
    if AIsFlickerRun then
      CreateFrameControls(Self);
  end;
begin
  if Value <> FlickerTimer.Enabled then
  begin
    AdjustFlickeringShapes(Value);
    FlickerTimer.Enabled := Value;
  end;
end;

procedure TEditorsStylesDemoBaseFrame.FlickerControls(
  AControlClassName: string);
begin
  FFlickeringClassName := AControlClassName;
  Flickering := True;
end;

procedure TEditorsStylesDemoBaseFrame.ClearFrameControls;
begin
  while FFrameControls.Count > 0 do
  begin
    TcxFrameControl(FFrameControls[0]).Free;
    FFrameControls.Delete(0);
  end;
end;

procedure TEditorsStylesDemoBaseFrame.FlickerTimerTimer(Sender: TObject);
var
 I: Integer;
begin
  for I := 0 to FFrameControls.Count - 1 do
  begin
    TcxFrameControl(FFrameControls[I]).Visible :=
      not TcxFrameControl(FFrameControls[I]).Visible;
    TcxFrameControl(FFrameControls[I]).UpdateFrameControlPos;
  end;
end;

function TEditorsStylesDemoBaseFrame.GetFlickering: Boolean;
begin
  Result := FlickerTimer.Enabled;
end;

procedure TEditorsStylesDemoBaseFrame.cxSplitterCanResize(Sender: TObject;
  var NewSize: Integer; var Accept: Boolean);
begin
  if (FlickeringClassName = 'TcxSplitter') and not FTempFlickering then
  begin
    FTempFlickering := Flickering;
    Flickering := False;
  end;
end;

procedure TEditorsStylesDemoBaseFrame.cxSplitterMoved(Sender: TObject);
begin
  if (FlickeringClassName = 'TcxSplitter') then
    Flickering := FTempFlickering;
  FTempFlickering := False;
  if Flickering then FlickerTimerTimer(FlickerTimer);
end;

function TEditorsStylesDemoBaseFrame.ShowControlsAboveDescription: Boolean;
begin
  Result := False;
end;

function TEditorsStylesDemoBaseFrame.StyleMenuVisible: Boolean;
begin
  Result := True;
end;

procedure TEditorsStylesDemoBaseFrame.FrameResize(Sender: TObject);
begin
  if Flickering then FlickerTimerTimer(FlickerTimer);
end;

function TEditorsStylesDemoBaseFrame.BriefName: string;
begin
  Result := 'Base';
end;

initialization
  EditorsStylesDemoFrameManager := TEditorsStylesDemoFrameManager.Create;

finalization
  FreeAndNil(EditorsStylesDemoFrameManager);
end.

⌨️ 快捷键说明

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