📄 teeexport.pas
字号:
{**********************************************}
{ 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 + -