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

📄 cxpcreg.pas

📁 PageControl 2.0 与1.0兼营版控件 ,TPageControl的扩展。增强了一些功能。
💻 PAS
字号:

{********************************************************************}
{                                                                    }
{       Developer Express Visual Component Library                   }
{       ExpressPageControl                                           }
{                                                                    }
{       Copyright (c) 1998-2004 Developer Express Inc.               }
{       ALL RIGHTS RESERVED                                          }
{                                                                    }
{   The entire contents of this file is protected by U.S. and        }
{   International Copyright Laws. Unauthorized reproduction,         }
{   reverse-engineering, and distribution of all or any portion of   }
{   the code contained in this file is strictly prohibited and may   }
{   result in severe civil and criminal penalties and will be        }
{   prosecuted to the maximum extent possible under the law.         }
{                                                                    }
{   RESTRICTIONS                                                     }
{                                                                    }
{   THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES            }
{   (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE     }
{   SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS    }
{   LICENSED TO DISTRIBUTE THE EXPRESSPAGECONTROL AND ALL            }
{   ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
{                                                                    }
{   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED       }
{   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE         }
{   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE        }
{   AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT   }
{   AND PERMISSION FROM DEVELOPER EXPRESS INC.                       }
{                                                                    }
{   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON        }
{   ADDITIONAL RESTRICTIONS.                                         }
{                                                                    }
{********************************************************************}

unit cxPCReg;

{$I cxPCVer.inc}

interface

procedure Register;

implementation

uses
{$IFDEF DELPHI6}
  DesignEditors, DesignIntf, DesignMenus,
{$ELSE}
  DsgnIntf, Menus,
{$ENDIF}
  Classes, Forms, SysUtils, dxPageControl, cxPCConsts, cxPCPaintersFactory;

const
  cxTabControlComponentEditorVerbA: array[0 .. 1] of string = (
    'ExpressPageControl Suite v2.1.2',
    'www.devexpress.com'
  );
  cxPageControlComponentEditorVerbA: array[0 .. 6] of string = (
    'New Page',
    'Next Page',
    'Previous Page',
    'Delete Page',
    '-',
    'ExpressPageControl Suite v2.1.2',
    'www.devexpress.com'
  );

type
  { TcxPCStyleProperty }

  TcxPCStyleProperty = class(TOrdinalProperty)
  private
    class procedure OutError(SourceMethodName, Msg: string);
  public
    function GetAttributes: TPropertyAttributes; override;
    function GetValue: string; override;
    procedure GetValues(Proc: TGetStrProc); override;
    procedure SetValue(const Value: string); override;
  end;

  { TcxTabControlComponentEditor }

  TcxTabControlComponentEditor = class(TComponentEditor)
    function GetVerb(Index: Integer): string; override;
    function GetVerbCount: Integer; override;
  end;

  { TdxPageControlActivePageProperty }

  TdxPageControlActivePageProperty = class(TComponentProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure GetValues(Proc: TGetStrProc); override;
  end;

  { TdxPageControlComponentEditor }

  TdxPageControlComponentEditor = class(TComponentEditor)
  private
    function GetPageControl: TdxPageControl;
  protected
    procedure AddPage;
    procedure NextPage(GoForward: Boolean);
{$IFDEF DELPHI5}
    procedure PrepareItem(Index: Integer; const AItem: {$IFDEF DELPHI6}IMenuItem{$ELSE}TMenuItem{$ENDIF}); override;
{$ENDIF}
    property PageControl: TdxPageControl read GetPageControl;
  public
    procedure ExecuteVerb(Index: Integer); override;
    function GetVerb(Index: Integer): string; override;
    function GetVerbCount: Integer; override;
    procedure Edit; override;
  end;

{ TcxPCStyleProperty }

function TcxPCStyleProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paMultiSelect, paRevertable, paSortList, paValueList];
end;

function TcxPCStyleProperty.GetValue: string;
var
  PainterClass: TcxPCPainterClass;
begin
  if GetOrdValue = cxPCDefaultStyle then
    Result := cxPCDefaultStyleName
  else
  begin
    PainterClass := PaintersFactory.GetPainterClass(GetOrdValue);
    if PainterClass = nil then
      Result := ''
    else
     Result := PainterClass.GetStyleName;
  end;
end;

procedure TcxPCStyleProperty.GetValues(Proc: TGetStrProc);
var
  I: Integer;
begin
  Proc(cxPCDefaultStyleName);
  for I := 0 to PaintersFactory.PainterClassCount - 1 do
    Proc(PaintersFactory.PainterClasses[I].GetStyleName);
end;

class procedure TcxPCStyleProperty.OutError(SourceMethodName, Msg: string);
begin
  raise Exception.Create('TcxPCStyleProperty.' + SourceMethodName + ': ' + Msg);
end;

procedure TcxPCStyleProperty.SetValue(const Value: string);
var
  PainterClass: TcxPCPainterClass;
begin
  if Value = cxPCDefaultStyleName then
    SetOrdValue(cxPCDefaultStyle)
  else
  begin
    PainterClass := PaintersFactory.GetPainterClass(Value);
    if PainterClass = nil then
      OutError('SetValue', Format(scxPCStyleNameError, [Value]))
    else
      SetOrdValue(PainterClass.GetStyleID);
  end;
end;

{ TcxTabControlComponentEditor }

function TcxTabControlComponentEditor.GetVerb(Index: Integer): string;
begin
  Result := cxTabControlComponentEditorVerbA[Index];
end;

function TcxTabControlComponentEditor.GetVerbCount: Integer;
begin
  Result := Length(cxTabControlComponentEditorVerbA);
end;

{ TdxPageControlActivePageProperty }

function TdxPageControlActivePageProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paValueList];
end;

procedure TdxPageControlActivePageProperty.GetValues(Proc: TGetStrProc);
var
  I: Integer;
  Component: TComponent;
begin
  for I := 0 to Designer.GetRoot.ComponentCount - 1 do
  begin
    Component := Designer.GetRoot.Components[I];
    if (Component.Name <> '') and (Component is TdxTabSheet) and
       (TdxTabSheet(Component).PageControl = GetComponent(0)) then
      Proc(Component.Name);
  end;
end;

{ TdxPageControlComponentEditor }

procedure TdxPageControlComponentEditor.AddPage;
var
  Page: TdxTabSheet;
begin
  Page := TdxTabSheet.Create(Designer.GetRoot);
  Page.Name := Designer.UniqueName(TdxTabSheet.ClassName);
  Page.PageControl := PageControl;
  Page.ImageIndex := Page.TabIndex;
  PageControl.ActivePage := Page;
  Designer.SelectComponent(Page);
end;

procedure TdxPageControlComponentEditor.Edit;
begin
end;

procedure TdxPageControlComponentEditor.ExecuteVerb(Index: Integer);
begin
  case Index of
    0: AddPage;
    1: NextPage(True);
    2: NextPage(False);
    3: if (PageControl.ActivePage <> nil) then
       begin
         Designer.SelectComponent(PageControl);
         PageControl.ActivePage.Free;
       end;
  end;
end;

function TdxPageControlComponentEditor.GetPageControl: TdxPageControl;
begin
  if Component is TdxPageControl then
    Result := TdxPageControl(Component)
  else
    Result := TdxTabSheet(Component).PageControl;
end;

function TdxPageControlComponentEditor.GetVerb(Index: Integer): string;
begin
  Result := cxPageControlComponentEditorVerbA[Index];
end;

function TdxPageControlComponentEditor.GetVerbCount: Integer;
begin
  Result := Length(cxPageControlComponentEditorVerbA);
end;

procedure TdxPageControlComponentEditor.NextPage(GoForward: Boolean);
var
  APrevActivePage: TdxTabSheet;
begin
  APrevActivePage := PageControl.ActivePage;
  PageControl.SelectNextPage(GoForward, False);
  if PageControl.ActivePage <> APrevActivePage then
    Designer.SelectComponent(PageControl.ActivePage);
end;

{$IFDEF DELPHI5}
procedure TdxPageControlComponentEditor.PrepareItem(Index: Integer;
  const AItem: {$IFDEF DELPHI6}IMenuItem{$ELSE}TMenuItem{$ENDIF});
begin
  inherited PrepareItem(Index, AItem);
  if (Index > 0) and (Index < GetVerbCount - 3) then
    if Index < 3 then
      AItem.Enabled := PageControl.PageCount > 1
    else
      AItem.Enabled := Component is TdxTabSheet;
end;
{$ENDIF}

procedure Register;
begin
  RegisterComponents('Dev', [TcxTabControl, TdxPageControl]);

  RegisterComponentEditor(TcxTabControl, TcxTabControlComponentEditor);
  RegisterComponentEditor(TdxPageControl, TdxPageControlComponentEditor);
  RegisterComponentEditor(TdxTabSheet, TdxPageControlComponentEditor);

  RegisterPropertyEditor(TypeInfo(TcxPCStyleID), TcxCustomTabControl, 'Style', TcxPCStyleProperty);
  RegisterPropertyEditor(TypeInfo(TdxTabSheet), TdxPageControl, 'ActivePage', TdxPageControlActivePageProperty);

  RegisterClass(TdxTabSheet);
end;

end.

⌨️ 快捷键说明

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