📄 teeflexcanvas.pas
字号:
end;
FStrings.Insert(IScript+1,' '+Entity+'.toolTip = "'+ToolTip+'";');
Inc(IScript);
end;
{ TFlexExportFormat }
function TFlexExportFormat.Compile(const TargetFile:String):Boolean;
begin
CheckProperties;
result:=FProperties.Compile(TargetFile);
end;
function TFlexExportFormat.Description: String;
begin
result:=TeeMsg_AsFlex;
end;
procedure TFlexExportFormat.DoCopyToClipboard;
begin
with FlexMXML do
try
Clipboard.AsText:=Text;
finally
Free;
end;
end;
function TFlexExportFormat.FileExtension: String;
begin
result:='mxml'; // Do not localize
end;
function TFlexExportFormat.FileFilter: String;
begin
result:=TeeMsg_FlexFilter;
end;
type
TTeePanelAccess=class(TCustomTeePanel);
function TFlexExportFormat.FlexMXML: TStringList;
var tmp : TCanvas3D;
begin
CheckSize;
result:=TStringList.Create;
Panel.AutoRepaint:=False;
try
{$IFNDEF CLR} // Protected across assemblies
tmp:=TTeePanelAccess(Panel).InternalCanvas;
TTeePanelAccess(Panel).InternalCanvas:=nil;
{$ENDIF}
Panel.Canvas:=TFlexCanvas.Create(Panel, result);
TFlexCanvas(Panel.Canvas).ImagePath:=ImagePath;
TFlexCanvas(Panel.Canvas).EmbeddImages:=EmbeddImages;
if not Assigned(Panel.Parent) then
Panel.BufferedDisplay:=True; // 7.01
try
Panel.Draw(Panel.Canvas.ReferenceCanvas,TeeRect(0,0,Width,Height));
finally
{$IFNDEF CLR} // Protected across assemblies
Panel.Canvas:=tmp;
{$ENDIF}
end;
finally
Panel.AutoRepaint:=True;
Panel.Invalidate;
end;
end;
Procedure TFlexExportFormat.CheckProperties;
begin
if not Assigned(FProperties) then
begin
FProperties:=TFlexOptions.Create(nil);
FProperties.Panel:=Panel;
end;
end;
function TFlexExportFormat.Options(Check: Boolean): TForm;
begin
if Check then
CheckProperties;
result:=FProperties;
end;
procedure TFlexExportFormat.SaveToStream(Stream: TStream);
begin
with FlexMXML do
try
SaveToStream(Stream);
finally
Free;
end;
end;
procedure TFlexOptions.FormCreate(Sender: TObject);
begin
Align:=alClient;
ReadOptions;
end;
{$IFNDEF CLR}
function WindowsMajorVersion:Integer;
var
OSVI: TOSVersionInfo;
begin
FillChar(OSVI, SizeOf(OSVI), 0);
OSVI.dwOSVersionInfoSize := SizeOf(OSVI);
if not GetVersionEx(OSVI) then
raise Exception.Create('Error calling Windows GetVersionEx to obtain version number.');
result:=OSVI.dwMajorVersion;
end;
var
GetLongPathName:function(lpszShortPath: PChar; lpszLongPath: PChar;
cchBuffer: DWORD): DWORD; stdcall;
TeeKernel32:THandle=0;
function LongPathName(const FileName:String):String;
var
BufferSize: DWord;
begin
// "GetLongPathNameA" available only for Win2000, WinXP or Win2003, or newer !
if (Win32Platform=VER_PLATFORM_WIN32_NT) and (WindowsMajorVersion>=5) then
begin
if TeeKernel32=0 then
begin
TeeKernel32:=TeeLoadLibrary(kernel32);
if TeeKernel32<>0 then
@GetLongPathName:=GetProcAddress(TeeKernel32,'GetLongPathNameA');
end;
BufferSize := GetLongPathName(PChar(FileName), nil, 0);
SetLength(Result, BufferSize - 1);
GetLongPathName(PChar(FileName), PChar(Result), BufferSize);
end
else
result:=FileName;
end;
{$ELSE}
function LongPathName(const FileName:String):String;
begin
result:=FileName;
end;
{$ENDIF}
type
TPathName={$IFDEF CLR}String{$ELSE}Array[0..MAX_PATH] of Char{$ENDIF};
procedure TFlexOptions.ReadOptions;
var tmpPath : {$IFDEF CLR}StringBuilder{$ELSE}TPathName{$ENDIF};
tmpName : TPathName;
begin
ETemp.Text:=TeeReadStringOption('FlexCanvas_Temp','');
if ETemp.Text='' then
begin
{$IFDEF CLR}
tmpPath:=StringBuilder.Create;
{$ENDIF}
if GetTempPath(MAX_PATH,tmpPath)=0 then
Raise Exception.Create(TeeMsg_CanNotFindTempPath);
{$IFDEF CLR}
tmpName:=tmpPath.ToString;
{$ELSE}
StrPCopy(tmpName,StrPas(tmpPath));
{$ENDIF}
ETemp.Text:=LongPathName(tmpName);
end;
EFlex.Text:=TeeReadStringOption('FlexCanvas_Compiler','');
end;
procedure TeeSaveToFlexFile( APanel:TCustomTeePanel; const FileName: WideString;
AWidth:Integer=0; AHeight:Integer=0;
EmbededImages:Boolean=True);
begin
with TFlexExportFormat.Create do
try
Panel:=APanel;
Height:=AHeight;
Width:=AWidth;
ImagePath:=ExtractFilePath(FileName);
EmbeddImages:=EmbededImages;
SaveToFile(FileName);
finally
Free;
end;
end;
function TFlexOptions.Compile(const TargetFile:String):Boolean;
{$IFDEF CLR}
begin
ShowMessageUser('Compiling Flex from .NET platform not available.');
{$ELSE}
var d : TDosCommand;
tmpPath : String;
begin
d:=TDosCommand.Create(Self);
try
tmpPath:=ExtractFilePath(TargetFile);
d.CommandLine:='"'+EFlex.Text+'\mxmlc.exe" -use-network=false -library-path+="'+tmpPath+'\tee.swc" "'+TargetFile+'"';
Screen.Cursor:=crHourGlass;
try
d.Execute;
while not d.Terminated do
Sleep(1);
finally
Screen.Cursor:=crDefault;
end;
result:=d.DosExitCode=0;
if not result then
begin
d.Lines.Insert(0,'');
d.Lines.Insert(0,d.CommandLine);
d.Lines.Insert(0,'Compiling:');
TeeEditStrings(Self, d.Lines);
end;
finally
d.Free;
end;
{$ENDIF}
end;
Function GetFilesFromDir(const PathAndWildcards:String):TStringList;
var f:TSearchRec;
begin
result:=TStringList.Create;
if FindFirst(PathAndWildcards,faAnyFile,f)=0 then
begin
Repeat
if (f.Attr and faDirectory)=faDirectory then
else
result.Add(f.Name);
Until FindNext(f)<>0;
FindClose(f);
end;
end;
procedure DeleteFiles(const Path,Wildcards:String);
var tmp : TStrings;
t : Integer;
begin
tmp:=GetFilesFromDir(Path+'\'+Wildcards);
try
for t:=0 to tmp.Count-1 do
DeleteFile(Path+'\'+tmp[t]);
finally
tmp.Free;
end;
end;
procedure TFlexOptions.BCompileClick(Sender: TObject);
function ResourceHandle(const AName:String):THandle;
begin
if FindResource(MainInstance, {$IFNDEF CLR}PAnsiChar{$ENDIF}(AName),
RT_RCDATA) <> 0 then
result:=MainInstance
else
result:=HInstance;
end;
procedure GenerateHTML(const Path,Movie:String);
var tmp : TStrings;
t : Integer;
begin
// Create FileName.html with Flash movie: FileName.swf
// Also AC_OETags.js Flash ActiveX detector script.
if not FileExists(Path+'\AC_OETags.js') then
AC_OETags_js.Lines.SaveToFile(Path+'\AC_OETags.js');
tmp:=TStringList.Create;
try
{$IFDEF D6}
tmp.AddStrings(Chart1_html.Lines);
{$ELSE}
tmp.Text:=Chart1_html.Lines.Text;
{$ENDIF}
for t:=0 to tmp.Count-1 do
if Pos('%MOVIE%',tmp[t])>0 then
tmp[t]:=StringReplace(tmp[t],'%MOVIE%',Movie,[rfReplaceAll,rfIgnoreCase]);
tmp.SaveToFile(Path+'\'+Movie+'.html');
finally
tmp.Free;
end;
end;
procedure Preview(const Target:String);
begin
TeeGotoURL(Handle, Target);
end;
procedure Check_TeeSWC_Library(const TeeSWC:String);
var swc : TResourceStream;
begin
if not FileExists(TeeSWC) then
begin
swc:=TResourceStream.Create(ResourceHandle('TEEFLEXSWC'),'TEEFLEXSWC',RT_RCDATA);
try
swc.SaveToFile(TeeSWC);
finally
swc.Free;
end;
end;
end;
var tmpName : String;
tmpDest : String;
tmpRes : Boolean;
tmpWidth : Integer;
tmpHeight : Integer;
begin
tmpDest:=ETemp.Text;
if not DirectoryExists(tmpDest) then
if TeeYesNo('Folder "'+tmpDest+'" does not exist.'#13+
'Do you want to create it?') then
ForceDirectories(tmpDest);
tmpName:=Panel.Name;
if tmpName='' then tmpName:='Chart1';
if Copy(tmpDest,Length(tmpDest),1)='\' then
tmpDest:=tmpDest+tmpName+'.mxml'
else
tmpDest:=tmpDest+'\'+tmpName+'.mxml';
if Assigned(Parent) and (Parent.Owner is TTeeExportFormBase) then
begin
tmpWidth:=TTeeExportFormBase(Parent.Owner).UDWidth.Position;
tmpHeight:=TTeeExportFormBase(Parent.Owner).UDHeight.Position;
end
else
begin
tmpWidth:=Panel.Width;
tmpHeight:=Panel.Height;
end;
TeeSaveToFlexFile(Panel,tmpDest,tmpWidth,tmpHeight,CBEmbedd.Checked);
Check_TeeSWC_Library(ETemp.Text+'\tee.swc');
tmpRes:=Compile(tmpDest);
if CBDelete.Checked then
begin
if FileExists(ETemp.Text+'\tee.swc') then
DeleteFile(ETemp.Text+'\tee.swc');
if FileExists(tmpDest) then
DeleteFile(tmpDest);
// Delete images only if they have been embedd inside the *.swf movie:
if CBEmbedd.Checked then
DeleteFiles(ETemp.Text,'TeeChart_Flex_Temp_*');
end;
if tmpRes and CBPreview.Checked then
begin
GenerateHTML(ETemp.Text,tmpName);
Preview(ETemp.Text+'\'+tmpName+'.html');
end;
end;
procedure TFlexOptions.SpeedButton1Click(Sender: TObject);
Var tmpDir : {$IFDEF K3}WideString
{$ELSE}
{$IFDEF D7}
{$IFDEF CLX}WideString
{$ELSE}String
{$ENDIF}
{$ELSE}String
{$ENDIF}
{$ENDIF};
begin
tmpDir:=ETemp.Text;
if SelectDirectory('Select temporary folder','',tmpDir) then
ETemp.Text:=tmpDir;
end;
procedure TFlexOptions.SpeedButton2Click(Sender: TObject);
Var tmpDir : {$IFDEF K3}WideString
{$ELSE}
{$IFDEF D7}
{$IFDEF CLX}WideString
{$ELSE}String
{$ENDIF}
{$ELSE}String
{$ENDIF}
{$ENDIF};
begin
tmpDir:=EFlex.Text;
if SelectDirectory('Select folder with Adobe Flex mxmlc.exe compiler','',tmpDir) then
EFlex.Text:=tmpDir;
end;
procedure TFlexOptions.ETempChange(Sender: TObject);
begin
CheckCompile;
TeeSaveStringOption('FlexCanvas_Temp',ETemp.Text);
end;
procedure TFlexOptions.CheckCompile;
begin
BCompile.Enabled:=Assigned(Panel) and (ETemp.Text<>'') and (EFlex.Text<>'');
end;
procedure TFlexOptions.EFlexChange(Sender: TObject);
begin
if FileExists(EFlex.Text+'\mxmlc.exe') then
begin
CheckCompile;
TeeSaveStringOption('FlexCanvas_Compiler',EFlex.Text);
end
else
ShowMessageUser('Cannot find Flex compiler mxmlc.exe in folder: '#13+EFlex.Text);
end;
procedure TFlexOptions.FormShow(Sender: TObject);
begin
CheckCompile;
end;
initialization
RegisterTeeExportFormat(TFlexExportFormat);
RegisterClass(TFlexOptions);
finalization
UnRegisterTeeExportFormat(TFlexExportFormat);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -