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

📄 cxbaredititemreg.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
字号:
{*******************************************************************}
{                                                                   }
{       Developer Express Visual Component Library                  }
{       ExpressBars components                                      }
{                                                                   }
{       Copyright (c) 1998-2008 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 EXPRESSBARS 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 cxBarEditItemReg;

{$I cxVer.inc}

interface

procedure Register;

implementation

uses
{$IFDEF DELPHI6}
  DesignConst, DesignEditors, DesignIntf, Variants,
{$ELSE}
  DsgnIntf, OCXReg,
{$ENDIF}
  Classes, TypInfo, cxBarEditItem, cxBarEditItemValueEditor, cxEdit,
  cxPropEditors, dxBarStrs;

type
  TcxCustomBarEditItemAccess = class(TcxCustomBarEditItem);

  { TcxBarEditItemPropertiesProperty }

  TcxBarEditItemPropertiesProperty = class(TClassProperty)
  private
    function HasSubProperties: Boolean;
  public
    function GetAttributes: TPropertyAttributes; override;
    function GetValue: string; override;
    procedure GetValues(Proc: TGetStrProc); override;
    procedure SetValue(const Value: string); override;
  end;

  { TcxBarEditItemPropertiesEventsProperty }

  TcxBarEditItemPropertiesEventsProperty = class(TcxNestedEventProperty)
  protected
    function GetInstance: TPersistent; override;
  end;

{$IFDEF DELPHI6}
  { TcxBarEditItemSelectionEditor }

  TcxBarEditItemSelectionEditor = class(TSelectionEditor)
  private
    FProc: TGetStrProc;
    procedure GetBarEditItem(const S: string);
  public
    procedure RequiresUnits(Proc: TGetStrProc); override;
  end;
{$ENDIF}

  { TcxBarEditItemEditValueProperty }

  TcxBarEditItemEditValueProperty = class({$IFDEF DELPHI6}TVariantProperty{$ELSE}TOleObjectProperty{$ENDIF})
  private
    function CanShowDialog: Boolean;
    function IsBlobEditValue: Boolean;
  public
    function AllEqual: Boolean; override;
    procedure Edit; override;
    function GetAttributes: TPropertyAttributes; override;
    function GetValue: string; override;
    procedure SetValue(const Value: string); override;
  end;

{ TcxBarEditItemPropertiesProperty }

function TcxBarEditItemPropertiesProperty.GetAttributes: TPropertyAttributes;
begin
  Result := inherited GetAttributes;
  if not HasSubProperties then
    Exclude(Result, paSubProperties);
  Result := Result - [paReadOnly] +
    [paValueList, paSortList, paRevertable{$IFDEF DELPHI6}, paVolatileSubProperties{$ENDIF}];
end;

function TcxBarEditItemPropertiesProperty.GetValue: string;
begin
  if HasSubProperties then
    Result := GetRegisteredEditProperties.GetDescriptionByClass(
      TcxCustomBarEditItem(GetComponent(0)).PropertiesClass)
  else
    Result := '';
end;

procedure TcxBarEditItemPropertiesProperty.GetValues(Proc: TGetStrProc);
var
  I: Integer;
begin
  for I := 0 to GetRegisteredEditProperties.Count - 1 do
    Proc(GetRegisteredEditProperties.Descriptions[I]);
end;

procedure TcxBarEditItemPropertiesProperty.SetValue(const Value: string);
var
  APropertiesClass: TcxCustomEditPropertiesClass;
  I: Integer;
begin
  APropertiesClass := TcxCustomEditPropertiesClass(GetRegisteredEditProperties.FindByClassName(Value));
  if APropertiesClass = nil then
    APropertiesClass := TcxCustomEditPropertiesClass(GetRegisteredEditProperties.FindByDescription(Value));
{$IFNDEF DELPHI7}
  if GetValue <> Value then
    ObjectInspectorCollapseProperty;
{$ENDIF}
  for I := 0 to PropCount - 1 do
    TcxCustomBarEditItem(GetComponent(I)).PropertiesClass := APropertiesClass;
  Modified;
end;

function TcxBarEditItemPropertiesProperty.HasSubProperties: Boolean;
var
  I: Integer;
begin
  Result := True;
  for I := 0 to PropCount - 1 do
    if TcxCustomBarEditItem(GetComponent(I)).Properties = nil then
    begin
      Result := False;
      Break;
    end;
end;

{ TcxBarEditItemPropertiesEventsProperty }

function TcxBarEditItemPropertiesEventsProperty.GetInstance: TPersistent;
begin
  Result := TcxCustomBarEditItem(GetComponent(0)).Properties;
end;

{$IFDEF DELPHI6}
{ TcxBarEditItemSelectionEditor }

procedure TcxBarEditItemSelectionEditor.RequiresUnits(
  Proc: TGetStrProc);
begin
  FProc := Proc;
  Designer.GetComponentNames(GetTypeData(TcxCustomBarEditItem.ClassInfo), GetBarEditItem);
end;

procedure TcxBarEditItemSelectionEditor.GetBarEditItem(const S: string);
var
  AItem: TcxCustomBarEditItem;
begin
  AItem := TcxCustomBarEditItem(Designer.GetComponent(S));
  if AItem.Properties <> nil then
    FProc(GetTypeData(AItem.Properties.ClassType.ClassInfo).UnitName);
end;
{$ENDIF}

{ TcxBarEditItemEditValueProperty }

function TcxBarEditItemEditValueProperty.AllEqual: Boolean;
var
  I: Integer;
begin
  if IsBlobEditValue then
  begin
    Result := PropCount = 1;
    if not Result then
      for I := 0 to PropCount - 1 do
      begin
        Result := VarIsNull(TcxCustomBarEditItem(GetComponent(I)).EditValue);
        if not Result then
          Break;
      end;
  end
  else
    Result := inherited AllEqual;
end;

procedure TcxBarEditItemEditValueProperty.Edit;
var
  AItem: TcxCustomBarEditItem;
  I: Integer;
begin
  if CanShowDialog then
  begin
    AItem := TcxCustomBarEditItem(GetComponent(0));
    if ShowValueEditor(AItem) then
    begin
      for I := 1 to PropCount - 1 do
        TcxCustomBarEditItem(GetComponent(I)).EditValue := AItem.EditValue;
      Modified;
    end;
  end;
end;

function TcxBarEditItemEditValueProperty.GetAttributes: TPropertyAttributes;
begin
  Result := inherited GetAttributes;
  if CanShowDialog then
    Include(Result, paDialog);
end;

function TcxBarEditItemEditValueProperty.GetValue: string;
begin
  if IsBlobEditValue then
    if VarIsNull(TcxCustomBarEditItem(GetComponent(0)).EditValue) then
      Result := SNull
    else
      Result := SBlob
  else
    Result := inherited GetValue;
end;

procedure TcxBarEditItemEditValueProperty.SetValue(const Value: string);
begin
  if not IsBlobEditValue then
    inherited SetValue(Value);
end;

function TcxBarEditItemEditValueProperty.CanShowDialog: Boolean;
var
  ABlobEditValue: Boolean;
  AProperties, ATempProperties: TcxCustomEditProperties;
  I: Integer;
begin
  Result := not TcxCustomBarEditItemAccess(GetComponent(0)).CaptionIsEditValue;
  if not Result then
    Exit;
  AProperties := TcxCustomBarEditItem(GetComponent(0)).GetProperties;
  ABlobEditValue := esfBlobEditValue in AProperties.GetSpecialFeatures;
  for I := 1 to PropCount - 1 do
  begin
    ATempProperties := TcxCustomBarEditItem(GetComponent(I)).GetProperties;
    if (ATempProperties.ClassType <> AProperties.ClassType) or
      (esfBlobEditValue in ATempProperties.GetSpecialFeatures <> ABlobEditValue) then
    begin
      Result := False;
      Break;
    end;
  end;
end;

function TcxBarEditItemEditValueProperty.IsBlobEditValue: Boolean;
begin
  Result := CanShowDialog and
    (esfBlobEditValue in TcxCustomBarEditItem(GetComponent(0)).GetProperties.GetSpecialFeatures);
end;

procedure Register;
begin
{$IFDEF DELPHI9}
  ForceDemandLoadState(dlDisable);
{$ENDIF}

  RegisterNoIcon([TcxBarEditItem]);
  RegisterPropertyEditor(TypeInfo(TcxEditValue), TcxCustomBarEditItem,
    'EditValue', TcxBarEditItemEditValueProperty);
  RegisterPropertyEditor(TypeInfo(TcxCustomEditProperties), TcxCustomBarEditItem,
    'Properties', TcxBarEditItemPropertiesProperty);
  RegisterPropertyEditor(TypeInfo(string), TcxCustomBarEditItem, 'PropertiesClassName', nil);
  RegisterPropertyEditor(TypeInfo(TNotifyEvent), TcxCustomBarEditItem, 'PropertiesEvents',
    TcxBarEditItemPropertiesEventsProperty);
  RegisterPropertyEditor(TypeInfo(string), TcxCustomBarEditItem, 'Text', nil);
{$IFDEF DELPHI6}
  RegisterSelectionEditor(TcxCustomBarEditItem, TcxBarEditItemSelectionEditor);
{$ENDIF}  
end;

end.

⌨️ 快捷键说明

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