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

📄 teeexport.pas

📁 Delphi TeeChartPro.6.01的源代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{**********************************************}
{   TeeChart and TeeTree Common Export Dialog  }
{   Copyright (c) 1996-2003 by David Berneda   }
{**********************************************}
unit TeeExport;
{$I TeeDefs.inc}

interface

uses
  {$IFNDEF LINUX}
  Windows, Messages,
  {$ENDIF}
  SysUtils, Classes,
  {$IFDEF CLX}
  QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls, QComCtrls,
  TeePenDlg,
  {$ELSE}
  Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls,
  {$ENDIF}
  TeCanvas, TeeProcs, TeeConst;

type
  TeeSeparatorChar={$IFDEF CLX}WideChar{$ELSE}Char{$ENDIF};

  TTeeExportFormat=class
  protected
    FFilterIndex : Integer;
    Procedure CheckSize;
    Procedure DoCopyToClipboard; virtual; abstract;
    function FileFilterIndex:Integer; virtual;
    Procedure IncFileFilterIndex(Var FilterIndex:Integer); virtual;
  public
    Height : Integer;
    Panel  : TCustomTeePanel;
    Width  : Integer;
    Constructor Create; virtual;
    Destructor Destroy; override;

    Procedure CopyToClipboard;
    function Description:String; virtual; abstract;
    function FileExtension:String; virtual; abstract;
    function FileFilter:String; virtual; abstract;
    Procedure SaveToFile(Const FileName:String);
    Procedure SaveToStream(Stream:TStream); virtual; abstract;
    Function Options(Check:Boolean=True):TForm; virtual;
  end;

  TTeeExportFormBase = class(TForm)
    SaveDialogPicture: TSaveDialog;
    PageControl1: TPageControl;
    TabPicture: TTabSheet;
    TabData: TTabSheet;
    RGFormat: TGroupBox;
    Label3: TLabel;
    CBSeries: TComboFlat;
    SaveDialogData: TSaveDialog;
    RGText: TRadioGroup;
    TabNative: TTabSheet;
    CBNativeData: TCheckBox;
    SaveDialogNative: TSaveDialog;
    LabelSize: TLabel;
    CBFileSize: TCheckBox;
    CBDelim: TComboFlat;
    ECustom: TEdit;
    GroupBox1: TGroupBox;
    CBLabels: TCheckBox;
    CBIndex: TCheckBox;
    Label4: TLabel;
    CBHeader: TCheckBox;
    PageOptions: TPageControl;
    TabOptions: TTabSheet;
    TabSize: TTabSheet;
    Label1: TLabel;
    EWidth: TEdit;
    UDWidth: TUpDown;
    Label2: TLabel;
    EHeight: TEdit;
    UDHeight: TUpDown;
    CBAspect: TCheckBox;
    Panel1: TPanel;
    BCopy: TButton;
    BSave: TButton;
    BSend: TButton;
    BClose: TButton;
    LBFormat: TListBox;
    CBColors: TCheckBox;
    Label5: TLabel;
    CBNativeFormat: TComboFlat;
    procedure BCopyClick(Sender: TObject);
    procedure BSaveClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RGFormatClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure EWidthChange(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure RGTextClick(Sender: TObject);
    procedure CBFileSizeClick(Sender: TObject);
    procedure CBNativeDataClick(Sender: TObject);
    procedure CBDelimChange(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure BSendClick(Sender: TObject);
    procedure CBNativeFormatChange(Sender: TObject);
  private
    { Private declarations }
    IAspect      : Double;
    ChangingSize : Boolean;
    Function CanChangeSize:Boolean;

    Function GetDataFilterIndex:Integer;
    Procedure FreeExportFormats;
    Function PictureFormat:TTeeExportFormat;
    Procedure SaveNativeToFile(Const FileName:String);
    Procedure SavePictureToFile(Const FileName:String);
  protected
    Function CreateData:TTeeExportData; virtual;
    Procedure DoSaveNativeToFile( Const FileName:String;
                                  IncludeData:Boolean); virtual;
    Function ExistData:Boolean; virtual;
    Function CreateNativeStream:TStream; virtual;
    Function GetSeparator:TeeSeparatorChar;
    Function NativeAsText:Boolean;
    Procedure PrepareOnShow; virtual;
    Procedure SaveDataToFile(Const FileName:String);
  public
    { Public declarations }
    ExportPanel     : TCustomTeePanel;
    EmailName       : String; { 5.03 }
    NativeFilter    : String; { 5.03 }
    NativeExtension : String; { 5.03 }
    procedure EnableButtons;
  end;

{ Retrieves a native "*.tee" file }
Procedure LoadTeeFromFile(Var APanel:TCustomTeePanel; Const AName:String);
Procedure LoadTeeFromStream(Var APanel:TCustomTeePanel; AStream:TStream);

{ Saves a Chart or TeePanel to a native "*.tee" file format }
Procedure SaveTeeToFile(APanel:TCustomTeePanel; Const AName:String);
Procedure SaveTeeToStream(APanel:TCustomTeePanel; AStream:TStream);

{ "Tee export formats" }
type TTeeExportFormatClass=class of TTeeExportFormat;

Procedure RegisterTeeExportFormat(AFormat:TTeeExportFormatClass);
Procedure UnRegisterTeeExportFormat(AFormat:TTeeExportFormatClass);

{ Show the Save dialog and save to AFormat export format }
{ example: TeeExportSavePanel(TGIFExportFormat,Chart1); }
Procedure TeeExportSavePanel(AFormat:TTeeExportFormatClass; APanel:TCustomTeePanel);

procedure TeeFillPictureDialog(ADialog:TSaveDialog; APanel:TCustomTeePanel; AItems:TStrings);

type
  TTeeExportFormats=class(TList)
  private
    Function Get(Index:Integer):TTeeExportFormatClass;
  public
    property Format[Index:Integer]:TTeeExportFormatClass read Get; default;
  end;

var TeeExportFormats : TTeeExportFormats=nil;

{ starts the MAPI (eg: Outlook) application with an empty new email
  message with the attachment file "FileName" }
Procedure InternalTeeEmailFile(Const FileName:String; Const Subject:String='TeeChart');

Function GetRegistryHelpPath(Const HelpFile:String):String;

implementation

{$IFNDEF CLX}
{$R *.DFM}
{$ELSE}
{$R *.xfm}
{$ENDIF}

Uses {$IFDEF CLX}
     QClipbrd,
     {$ELSE}
     Clipbrd, ExtDlgs, TeePenDlg, TeeEMFOptions,
     {$ENDIF}
     {$IFNDEF LINUX}
     MAPI, Registry,
     {$ENDIF}
     TeeBmpOptions;

Procedure SaveTeeToStream(APanel:TCustomTeePanel; AStream:TStream);
begin
  AStream.WriteComponent(APanel);
end;

Procedure SaveTeeToFile(APanel:TCustomTeePanel; Const AName:String);
Var tmp        : TFileStream;
    OldVisible : Boolean;
begin
  tmp:=TFileStream.Create(AName,fmCreate);
  try
    OldVisible:=APanel.Visible;
    APanel.Visible:=True;
    try
      SaveTeeToStream(APanel,tmp);
    finally
      APanel.Visible:=OldVisible;
    end;
  finally
    tmp.Free;
  end;
end;

Procedure LoadTeeFromStream(Var APanel:TCustomTeePanel; AStream:TStream);
begin
  AStream.ReadComponent(APanel);
end;

Procedure LoadTeeFromFile(Var APanel:TCustomTeePanel; Const AName:String);
Var tmp : TFileStream;
begin
  tmp:=TFileStream.Create(AName,fmOpenRead);
  try
    LoadTeeFromStream(APanel,tmp);
  finally
    tmp.Free;
  end;
end;

{ Export Dialog }
procedure TTeeExportFormBase.BCopyClick(Sender: TObject);
var s   : TStringStream;
    tmp : TStream;
begin
  if PageControl1.ActivePage=TabPicture then
  with PictureFormat do
  begin
    Width:=UDWidth.Position;
    Height:=UDHeight.Position;
    CopyToClipboard;
  end
  else
  if PageControl1.ActivePage=TabData then
  begin
    Screen.Cursor:=crHourGlass;
    try
      With CreateData do
      try
        CopyToClipboard;
      finally
        Free;
      end;
    finally
      Screen.Cursor:=crDefault;
    end;
  end
  else
  if (PageControl1.ActivePage=TabNative) and NativeAsText then
  begin
    s:=TStringStream.Create('');
    try
      tmp:=CreateNativeStream;
      try
        tmp.Position:=0;
        s.CopyFrom(tmp,tmp.Size);
        Clipboard.AsText:=s.DataString;
      finally
        tmp.Free;
      end;
    finally
      s.Free;
    end;
  end;
end;

Procedure TTeeExportFormBase.SaveDataToFile(Const FileName:String);
begin
  Screen.Cursor:=crHourGlass;
  try
    With CreateData do
    try
      SaveToFile(FileName);
    finally
      Free;
    end;
  finally
    Screen.Cursor:=crDefault;
  end;
end;

Function TTeeExportFormBase.CreateData:TTeeExportData;
begin
  result:=nil;
end;

Function TTeeExportFormBase.GetSeparator:TeeSeparatorChar;
begin
  Case CBDelim.ItemIndex of
    0: result:=' ';
    1: result:=TeeTabDelimiter;
    2: result:=',';
    3: result:=';';
  else if ECustom.Text='' then result:=' ' else result:=ECustom.Text[1];
  end;
end;

Function TTeeExportFormBase.GetDataFilterIndex:Integer;
begin
  if RGText.ItemIndex=0 then result:=CBDelim.ItemIndex+1
                        else result:=4+RGText.ItemIndex;
end;

Procedure TTeeExportFormBase.DoSaveNativeToFile( Const FileName:String;
                                                 IncludeData:Boolean);
begin
  SaveTeeToFile(ExportPanel,FileName);
end;

Procedure TTeeExportFormBase.SaveNativeToFile(Const FileName:String);
var tmp : String;
begin
  Screen.Cursor:=crHourGlass;
  try
    tmp:=ChangeFileExt(FileName,'.'+NativeExtension);
    DoSaveNativeToFile(tmp,CBNativeData.Checked);
  finally
    Screen.Cursor:=crDefault;
  end;
end;

Procedure TTeeExportFormBase.SavePictureToFile(Const FileName:String);
begin
  Screen.Cursor:=crHourGlass;
  try
    With PictureFormat do
    begin
      Width:=UDWidth.Position;
      Height:=UDHeight.Position;
      SaveToFile(FileName);
    end;
  finally
    Screen.Cursor:=crDefault;
  end;
end;

procedure TTeeExportFormBase.BSaveClick(Sender: TObject);
begin
  if PageControl1.ActivePage=TabPicture then  { as picture... }
  With SaveDialogPicture do
  begin
    With PictureFormat do
    begin
      DefaultExt:=FileExtension;
      FilterIndex:=FileFilterIndex;
    end;
    FileName:='';
    if Execute then SavePictureToFile(FileName);
  end
  else
  if PageControl1.ActivePage=TabNative then   { as native *.tee file... }
  With SaveDialogNative do
  begin
    FileName:='';
    DefaultExt:=NativeExtension;
    Filter:=NativeFilter;
    if Execute then SaveNativeToFile(FileName);
  end
  else
  if PageControl1.ActivePage=TabData then    { series data... }
  With SaveDialogData do
  begin
    FileName:='';
    FilterIndex:=GetDataFilterIndex;
    if Execute then
    begin
      if FilterIndex<=4 then RGText.ItemIndex:=0
                        else RGText.ItemIndex:=FilterIndex-4;
      SaveDataToFile(FileName);
    end;
  end;
end;

procedure TTeeExportFormBase.FormCreate(Sender: TObject);
Const DialogOptions : TOpenOptions =
          [ ofOverwritePrompt
            {$IFNDEF CLX}
            , ofHideReadOnly
            {$ENDIF}
          ]; // K3?
begin
  BorderStyle:=TeeBorderStyle;
  ChangingSize:=False;
  NativeExtension:=TeeMsg_TeeExtension; { default extension is *.tee }
  NativeFilter:=TeeMsg_NativeFilter;  { default "TeeChart files (*.tee)|*.tee" }
  EmailName:=TeeMsg_TeeChartPalette;
  PageControl1.ActivePage:=TabPicture;

  CBNativeFormat.ItemIndex:=0;
  
  // For Kylix compatibility:  ("Options" cannot reside in DFM/XFM)
  SaveDialogPicture.Options:=DialogOptions;
  SaveDialogData.Options:=DialogOptions;
  SaveDialogNative.Options:=DialogOptions;
end;

procedure TTeeExportFormBase.RGFormatClick(Sender: TObject);
var tmp : TForm;
    t   : Integer;
begin
  With TabOptions do
  for t:=0 to ControlCount-1 do Controls[t].Hide;
  With PictureFormat do
  begin
    tmp:=Options;
    TabOptions.TabVisible:=Assigned(tmp) and (tmp.ControlCount>0);
    if TabOptions.TabVisible then
    begin
      PageOptions.ActivePage:=TabOptions;
      AddFormTo(tmp,TabOptions,0);
    end
    else PageOptions.ActivePage:=TabSize;
  end;
end;

procedure TeeFillPictureDialog(ADialog:TSaveDialog; APanel:TCustomTeePanel; AItems:TStrings);
var t   : Integer;
    tmp : TTeeExportFormat;
    tmpFilter : Integer;
    {$IFDEF CLX}
    i   : Integer;
    {$ENDIF}
begin
  if TeeExportFormats<>nil then
  begin
    if ADialog.Filter='' then tmpFilter:=0
                         else tmpFilter:=1;

    for t:=0 to TeeExportFormats.Count-1 do
    begin
      tmp:=TeeExportFormats[t].Create;
      tmp.Panel:=APanel;

⌨️ 快捷键说明

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