Einzelnen Beitrag anzeigen

Herbie

Registriert seit: 23. Jul 2004
Ort: Augsburg
14 Beiträge
 
Delphi 6 Enterprise
 
#1

FlowChart-Inhalt in ein Metafile (EMF)...

  Alt 21. Apr 2005, 08:39
Hallo zusammen,

benutze die FlowChart-Komponente von DevExpress. Möchte nun den Inhalt einer FlowChart-Ansicht in eine EMF-Datei exportieren. Benutze hierzu folgende Funktion:

Delphi-Quellcode:
function GetFlowChartMetaFile(FC: TdxFlowChart): TMetafile;
var
  H, W, NewW: Integer;
  AAlign: TAlign;
  ABorder: TBorderStyle;
  SInfo: TScrollInfo;
  R: TRect;
  mCanvas: TMetaFileCanvas;
begin
  Result := TMetaFile.Create;
  try
    H := FC.Height;
    W := FC.Width;
    AAlign := FC.Align;
    ABorder := FC.BorderStyle;
    SendMessage(FC.Parent.Handle, WM_SETREDRAW, 0, 0);
    SendMessage(FC.Handle, WM_SETREDRAW, 0, 0);
    FC.Align := alNone;
    FC.BorderStyle := bsNone;
    SInfo.cbSize := SizeOf(SInfo);
    SInfo.fMask := SIF_RANGE;
    if GetScrollInfo(FC.Handle, SB_HORZ, SInfo) then
      NewW := SInfo.nMax - SInfo.nMin + 1
    else
      NewW := 0;
    if GetScrollInfo(FC.Handle, SB_VERT, SInfo) then
      FC.ClientHeight := SInfo.nMax - SInfo.nMin + 1;
    if NewW > 0 then
      FC.ClientWidth := NewW;
    Result.mmWidth := FC.ClientWidth;
    Result.mmHeight := FC.ClientHeight;
    mCanvas := TMetaFileCanvas.Create(Result,0);
    mCanvas.Brush := FC.Brush;
    mCanvas.FillRect(FC.ClientRect);
    mCanvas.Lock;
    try
      FC.PaintTo(mCanvas.Handle, 0, 0);
    finally
      mCanvas.Unlock;
      FC.Width := W;
      FC.Height := H;
      FC.BorderStyle := ABorder;
      FC.Align := AAlign;
      SendMessage(FC.Parent.Handle, WM_SETREDRAW, 1, 0);
      SendMessage(FC.Handle, WM_SETREDRAW, 1, 0);
      R := FC.Parent.ClientRect;
      Windows.InvalidateRect(FC.Parent.Handle, @R, FALSE);
      R := FC.ClientRect;
      Windows.InvalidateRect(FC.Handle, @R, FALSE);
    end;
  except
    Result.Free;
    raise;
  end;
end;

//Aufruf der Funktion
procedure...
var
  MImage: TMetafile;
begin
  mImage := GetFlowChartMetafile(dxFlowChartGraphic);
  mImage.SaveToFile('c:\Temp\test3.emf');
end;
Leider ist die EMF-Datei immer leer. Rufe ich die gleiche Funktion auf, angepasst auf ein TBitmap, dann funktioniert das Ganze.

Kann mir bitte jemand sagen, was ich falsch mache, oder ob es einen anderen Weg gibt aus
einer Chart-Komponente ein Metafile zu erzeugen?

Bin für jede Hilfe sehr dankbar!

Gruss
Jan (Herbie)
Jan Herbert
  Mit Zitat antworten Zitat