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)