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

📄 flexfileformats.int

📁 FlexGraphics是一套创建矢量图形的VCL组件
💻 INT
字号:
/////////////////////////////////////////////////////////
//                                                     //
//    FlexGraphics library                             //
//    Copyright (c) 2002-2009, FlexGraphics software.  //
//                                                     //
//    FlexGraphics library file formats support        //
//    Base classes                                     //
//                                                     //
/////////////////////////////////////////////////////////

unit FlexFileFormats;

{$I FlexDefs.inc}

interface

uses
  Classes, SysUtils, FlexBase;

resourcestring
  sUnsupportedFormat = 'Unsupported format %s';
  sImportError       = 'Import error: %s';
  sExportError       = 'Export error: %s';
  sNotImplemented    = 'Not implemented';

type
  TFlexFileFormat = class;
  TFlexFileFormatClass = class of TFlexFileFormat;
  TFlexFileExtensions = class;

  TFlexFileSupportKind = (
    skImport,
    skExport
  );

  TFlexFileSupportKinds = set of TFlexFileSupportKind;

  TFlexFileExtension = class
  public
    FormatClass: TFlexFileFormatClass;
    Extension: string;
    Description: string;
    Kinds: TFlexFileSupportKinds;
    Tag: integer;
  end;

  TFlexFileFormat = class
  protected
    // FOwner initialized only when constructed via Create()
    FOwner: TObject;
    // Determines is the class supports streams. If False then class can
    // operate with AFilename parameter only (caller should set AStream to Nil).
    // True by default.
    FStreamSupport: boolean;
    // FExtensions initialized only when constructed via CreateAndRegister()
    FExtensions: TFlexFileExtensions;
    function RegisterExtension(const AExtension, ADescription: string;
      AKinds: TFlexFileSupportKinds; ATag: integer = 0): integer; virtual;
    procedure RegisterSupportedExtensions; virtual; abstract;
  public
    constructor Create(AOwner: TObject); virtual;
    constructor CreateForRegister(AExtensions: TFlexFileExtensions);
    destructor Destroy; override;
    procedure ImportFromStream(AStream: TStream; AFlexPanel: TFlexPanel;
      const Extension: TFlexFileExtension; const AFileName: string); virtual;
    procedure ExportToStream(AStream: TStream; AFlexPanel: TFlexPanel;
      const Extension: TFlexFileExtension; const AFileName: string); virtual;
    property Owner: TObject read FOwner;
    property StreamSupport: boolean read FStreamSupport;
  end;

  TFlexFileExtensions = class
  private
    FItems: TList;
    function GetCount: integer;
    function GetItem(Index: integer): TFlexFileExtension;
  protected
    function RegisterExtension(Extension: TFlexFileExtension): integer;
  public
    constructor Create;
    destructor Destroy; override;
    function  RegisterFormat(AFormat: TFlexFileFormatClass): boolean;
    procedure UnregisterFormat(AFormat: TFlexFileFormatClass);
    procedure Delete(Index: integer);
    procedure Clear;
    function IndexOf(AClass: TFlexFileFormatClass): integer;
    procedure ImportFromStream(ItemIndex: integer; AFlexPanel: TFlexPanel;
      AStream: TStream; AFileName: string = '');
    procedure ExportToStream(ItemIndex: integer; AFlexPanel: TFlexPanel;
      AStream: TStream; AFileName: string = '');
    procedure ImportFromFile(ItemIndex: integer; AFlexPanel: TFlexPanel;
      AFilename: string);
    procedure ExportToFile(ItemIndex: integer; AFlexPanel: TFlexPanel;
      AFilename: string);
    property Count: integer read GetCount;
    property Items[Index: integer]: TFlexFileExtension read GetItem; default;
  end;

function RegisteredFlexFileFormats: TFlexFileExtensions;

implementation

⌨️ 快捷键说明

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