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

📄 teeflexcanvas.pas

📁 BCB第三方组件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  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 + -