cxblobedit.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,542 行 · 第 1/4 页

PAS
1,542
字号

{********************************************************************}
{                                                                    }
{       Developer Express Visual Component Library                   }
{       ExpressEditors                                               }
{                                                                    }
{       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 EXPRESSEDITORS 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 cxBlobEdit;

{$I cxVer.inc}

interface

uses
  Windows, Messages, ExtDlgs,
{$IFDEF DELPHI6}
  Types,
{$ENDIF}
  SysUtils, Classes, Graphics, Controls, Forms, ExtCtrls,
  Dialogs, StdCtrls, ImgList, Clipbrd,
  cxClasses, cxControls, cxContainer, cxGraphics, cxDataStorage, cxDataUtils,
  cxEdit, cxDropDownEdit, cxEditConsts, cxTextEdit, cxButtons, cxImage, cxMemo, 
  cxFilterControlUtils;

type
  TcxBlobPaintStyle = (bpsDefault, bpsIcon, bpsText);
  TcxBlobEditKind = (bekAuto, bekMemo, bekPict, bekOle, bekBlob);

  { TcxBlobEditViewData }

  TcxBlobEditViewData = class(TcxCustomDropDownEditViewData)
  protected
    function InternalGetEditConstantPartSize(ACanvas: TcxCanvas; AIsInplace: Boolean;
      AEditSizeProperties: TcxEditSizeProperties; var MinContentSize: TSize;
      AViewInfo: TcxCustomEditViewInfo): TSize; override;
    function InternalEditValueToDisplayText(AEditValue: TcxEditValue): string; override;
    procedure PrepareDrawTextFlags(ACanvas: TcxCanvas;
      AViewInfo: TcxCustomEditViewInfo); override;
  public
    procedure Calculate(ACanvas: TcxCanvas; const ABounds: TRect; const P: TPoint;
      Button: TcxMouseButton; Shift: TShiftState;
      AViewInfo: TcxCustomEditViewInfo; AIsMouseEvent: Boolean); override;
    procedure EditValueToDrawValue(ACanvas: TcxCanvas; const AEditValue: TcxEditValue;
      AViewInfo: TcxCustomEditViewInfo); override;
  end;

  { TcxBlobEditViewInfo }

  TcxBlobEditViewInfo = class(TcxCustomTextEditViewInfo)
  protected
    procedure InternalPaint(ACanvas: TcxCanvas); override;
  public
    IconRect: TRect;
    ImageIndex: TImageIndex;
    function NeedShowHint(ACanvas: TcxCanvas; const P: TPoint; out AText: TCaption;
      out AIsMultiLine: Boolean; out ATextRect: TRect): Boolean; override;
    procedure Offset(DX, DY: Integer); override;
  end;

  { TcxCustomBlobEditProperties }

  TcxCustomBlobEditProperties = class(TcxCustomPopupEditProperties)
  private
    // common
    FAlwaysSaveData: Boolean;
    FBlobEditKind: TcxBlobEditKind;
    FBlobPaintStyle: TcxBlobPaintStyle;
    // memo
    FMemoAutoReplace: Boolean;
    FMemoWantReturns: Boolean;
    FMemoWantTabs: Boolean;
    FMemoOEMConvert: Boolean;
    FMemoWordWrap: Boolean;
    FMemoMaxLength: Integer;
    FMemoCharCase: TEditCharCase;
    FMemoScrollBars: TScrollStyle;
    // picture
    FPictureAutoSize: Boolean;
    FPictureClipboardFormat: Word;
    FPictureFilter: string;
    FPictureGraphicClass: TGraphicClass;
    FPictureTransparency: TcxImageTransparency;
    FShowExPopupItems: Boolean;
    FShowPicturePopup: Boolean;

    FOnAssignPicture: TcxImageAssignPictureEvent;
    FOnGetGraphicClass: TcxImageGraphicClassEvent;
    function GetPictureGraphicClassName: string;
    function IsPictureGraphicClassNameStored: Boolean;
    procedure ReadIsPictureGraphicClassNameEmpty(Reader: TReader);
    procedure SetBlobEditKind(const Value: TcxBlobEditKind);
    procedure SetBlobPaintStyle(const Value: TcxBlobPaintStyle);
    procedure SetPictureGraphicClass(Value: TGraphicClass);
    procedure SetPictureGraphicClassName(const Value: string);
    procedure WriteIsPictureGraphicClassNameEmpty(Writer: TWriter);
  protected
    function CanValidate: Boolean; override;
    procedure DefineProperties(Filer: TFiler); override;
    function DropDownOnClick: Boolean; override;
    function GetDisplayFormatOptions: TcxEditDisplayFormatOptions; override;
    class function GetPopupWindowClass: TcxCustomEditPopupWindowClass; override;
    class function GetViewDataClass: TcxCustomEditViewDataClass; override;
    function HasDisplayValue: Boolean; override;
    procedure CorrectBlobEditKind;
    function GetDefaultPictureGraphicClass: TGraphicClass; virtual;
    function GetPictureGraphicClass(AItem: TObject; ARecordIndex: Integer;
      APastingFromClipboard: Boolean = False): TGraphicClass;
    // Picture
    property PictureClipboardFormat: Word
        read FPictureClipboardFormat write FPictureClipboardFormat;
  public
    constructor Create(AOwner: TPersistent); override;
    procedure Assign(Source: TPersistent); override;
    function CompareDisplayValues(
      const AEditValue1, AEditValue2: TcxEditValue): Boolean; override;
    class function GetContainerClass: TcxContainerClass; override;
    function GetDisplayText(const AEditValue: TcxEditValue;
      AFullText: Boolean = False; AIsInplace: Boolean = True): WideString; override;
    function GetEditValueSource(AEditFocused: Boolean): TcxDataEditValueSource; override;
    function GetSpecialFeatures: TcxEditSpecialFeatures; override;
    function GetSupportedOperations: TcxEditSupportedOperations; override;
    class function GetViewInfoClass: TcxContainerViewInfoClass; override;
    function IsEditValueValid(var AEditValue: TcxEditValue; AEditFocused: Boolean): Boolean; override;
    property PictureGraphicClass: TGraphicClass
      read FPictureGraphicClass write SetPictureGraphicClass;
    // !!!
    // Common
    property AlwaysSaveData: Boolean
      read FAlwaysSaveData write FAlwaysSaveData default True;
    property BlobEditKind: TcxBlobEditKind
      read FBlobEditKind write SetBlobEditKind default bekAuto;
    property BlobPaintStyle: TcxBlobPaintStyle
      read FBlobPaintStyle write SetBlobPaintStyle default bpsIcon;
    property ImmediatePopup default True;
    // Memo
    property MemoAutoReplace: Boolean
      read FMemoAutoReplace write FMemoAutoReplace default False;
    property MemoCharCase: TEditCharCase
      read FMemoCharCase write FMemoCharCase default ecNormal;
    property MemoMaxLength: Integer
      read FMemoMaxLength write FMemoMaxLength default 0;
    property MemoOEMConvert: Boolean
      read FMemoOEMConvert write FMemoOEMConvert default False;
    property MemoScrollBars: TScrollStyle
      read FMemoScrollBars write FMemoScrollBars default ssNone;
    property MemoWantReturns: Boolean
      read FMemoWantReturns write FMemoWantReturns default True;
    property MemoWantTabs: Boolean
      read FMemoWantTabs write FMemoWantTabs default True;
    property MemoWordWrap: Boolean
      read FMemoWordWrap write FMemoWordWrap default True;
    // Picture
    property PictureAutoSize: Boolean
      read FPictureAutoSize write FPictureAutoSize default True;
    property PictureFilter: string
      read FPictureFilter write FPictureFilter;
    property PictureGraphicClassName: string
      read GetPictureGraphicClassName write SetPictureGraphicClassName
      stored IsPictureGraphicClassNameStored;
    property PictureTransparency: TcxImageTransparency
      read FPictureTransparency write FPictureTransparency default gtDefault;
    property ShowExPopupItems: Boolean
      read FShowExPopupItems write FShowExPopupItems default True;
    property ShowPicturePopup: Boolean
      read FShowPicturePopup write FShowPicturePopup default True;
    property OnAssignPicture: TcxImageAssignPictureEvent
      read FOnAssignPicture write FOnAssignPicture;
    property OnGetGraphicClass: TcxImageGraphicClassEvent
      read FOnGetGraphicClass write FOnGetGraphicClass;
  end;

  { TcxBlobEditProperties }

  TcxBlobEditProperties = class(TcxCustomBlobEditProperties)
  published
    property AlwaysSaveData;
    property AssignedValues;
    property BlobEditKind;
    property BlobPaintStyle;
    property ClearKey;
    property ImeMode;
    property ImeName;
    property ImmediatePopup;
    property ImmediatePost;
    property MemoAutoReplace;
    property MemoCharCase;
    property MemoMaxLength;
    property MemoOEMConvert;
    property MemoScrollBars;
    property MemoWantReturns;
    property MemoWantTabs;
    property MemoWordWrap;
    property PictureAutoSize;
    property PictureFilter;
    property PictureGraphicClassName;
    property PictureTransparency;
    property PopupHeight;
    property PopupWidth;
    property ReadOnly;
    property ShowExPopupItems;
    property ShowPicturePopup;
    property OnAssignPicture;
    property OnButtonClick;
    property OnChange;
    property OnCloseQuery;
    property OnCloseUp;
    property OnEditValueChanged;
    property OnGetGraphicClass;
    property OnInitPopup;
    property OnPopup;
    property OnValidate;
  end;

  { TcxCustomBlobEdit }

  TcxCustomBlobEdit = class(TcxCustomPopupEdit)
  private
    FButtonWidth: Integer;
    FCancelButton: TcxButton;
    FGraphicClass: TGraphicClass;
    FOkButton: TcxButton;
    FStorage: TcxCustomEdit;
    FOnGetGraphicClass: TcxImageEditGraphicClassEvent;
    procedure DoPopupImageGetGraphicClass(Sender: TObject;
      APastingFromClipboard: Boolean; var AGraphicClass: TGraphicClass);
    procedure DoPopupImagePropertiesGetGraphicClass(AItem: TObject;
      ARecordIndex: Integer; APastingFromClipboard: Boolean;
      var AGraphicClass: TGraphicClass);
    function GetActiveProperties: TcxCustomBlobEditProperties;
    function GetProperties: TcxCustomBlobEditProperties;
    procedure InternalChanged(Sender: TObject);
    procedure PictureClosePopup(Sender: TcxControl; AReason: TcxEditCloseUpReason);
    procedure SaveStorage;
    procedure SetProperties(Value: TcxCustomBlobEditProperties);
  protected
    procedure ColorChanged; override;
    procedure CreatePopupControls; virtual;
    procedure DoAssignPicture;
    procedure DoEditKeyPress(var Key: Char); override;
    procedure DoOnAssignPicture(APicture: TPicture);
    procedure FontChanged; override;
    function GetDisplayValue: string; override;
    function GetEditingValue: TcxEditValue; override;
    function GetPopupFocusedControl: TWinControl; override;
    function GetPopupWindowClientPreferredSize: TSize; override;
    procedure InternalValidateDisplayValue(const ADisplayValue: TcxEditValue); override;

    procedure DestroyPopupControls; virtual;
    procedure DoInitPopup; override;
    function GetPictureGraphicClass(APastingFromClipboard: Boolean = False): TGraphicClass;
    procedure Initialize; override;
    function InternalGetText: string; override;
    function InternalSetText(const Value: string): Boolean; override;
    procedure PopupWindowClosed(Sender: TObject); override;
    procedure PropertiesChanged(Sender: TObject); override;
    procedure SetEditingText(const Value: TCaption); override;
    procedure SetupPopupWindow; override;
    procedure StorageEditingHandler(Sender: TObject; var CanEdit: Boolean); virtual;
    procedure SynchronizeDisplayValue; override;
    procedure SynchronizeEditValue; override;
    property TabStop default True;
    property OnGetGraphicClass: TcxImageEditGraphicClassEvent
      read FOnGetGraphicClass write FOnGetGraphicClass;
  public
    destructor Destroy; override;
    class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
    function IsEditClass: Boolean; override;
    property ActiveProperties: TcxCustomBlobEditProperties
      read GetActiveProperties;
    property Properties: TcxCustomBlobEditProperties read GetProperties
      write SetProperties;
  end;

  { TcxBlobEdit }

  TcxBlobEdit = class(TcxCustomBlobEdit)
  private
    function GetActiveProperties: TcxBlobEditProperties;
    function GetProperties: TcxBlobEditProperties;
    procedure SetProperties(Value: TcxBlobEditProperties);
  public
    class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
    property ActiveProperties: TcxBlobEditProperties read GetActiveProperties;
  published
    property Anchors;
    property AutoSize;
    property BeepOnEnter;
    property Constraints;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property ImeMode;
    property ImeName;
    property ParentColor;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property Properties: TcxBlobEditProperties read GetProperties
      write SetProperties;
    property ShowHint;
    property Style;
    property StyleDisabled;
    property StyleFocused;
    property StyleHot;
    property TabOrder;
    property TabStop;
    property Text;
    property Visible;
    property OnClick;
{$IFDEF DELPHI5}
    property OnContextPopup;
{$ENDIF}
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEditing;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnStartDrag;
    property BiDiMode;
    property ParentBiDiMode;
    property OnEndDock;
    property OnStartDock;
  end;

  { TcxFilterBlobEditHelper }

  TcxFilterBlobEditHelper = class(TcxFilterTextEditHelper)
  public
    class function GetSupportedFilterOperators(
      AProperties: TcxCustomEditProperties;
      AValueTypeClass: TcxValueTypeClass;
      AExtendedSet: Boolean = False): TcxFilterControlOperators; override;
  end;

  { TcxBlobEditPopupWindow }

  TcxBlobEditPopupWindow = class(TcxPopupEditPopupWindow)
  protected
    procedure DoPopupControlKey(Key: Char); override;
  end;

function GetBlobText(const Value: TcxEditValue;
  AProperties: TcxCustomBlobEditProperties; AFullText: Boolean): WideString;

var
  imgBlobImages: TImageList = nil;

implementation

⌨️ 快捷键说明

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