Registriert seit: 23. Jul 2004
Ort: Augsburg
14 Beiträge
Delphi 6 Enterprise
|
Re: FlowChart-Inhalt in ein Metafile (EMF)...
22. Apr 2005, 12:23
Habs jetzt mit dem weiter unten angegebenen Code hinbekommen - mit dem Problem, das die Grafik das erzeugte Metafile nicht komplett ausfüllt. Die Grafik "hängt" links oben in dem Metafile, aber rechts und unten ist ein größerer Bereich nicht belegt. Was muss ich denn einstellen/berechnen, damit die Grafik das Metafile komplett ausfüllt?
Vielen Dank für eure Hilfe!
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;
mCanvas := TMetaFileCanvas.Create(Result,0);
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.Width := FC.ClientWidth;
Result.Height := FC.ClientHeight;
//Result.mmWidth := FC.ClientWidth;
//Result.mmHeight := FC.ClientHeight;
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);
mCanvas.Free;
end;
except
Result.Free;
end;
end;
Gruss
Jan (Herbie)
Jan Herbert
|
|
Zitat
|