1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| procedure TRtfFile.AddBitmap(Bitmap : TBitmap; ScaleValue : integer);
var
HMF : TMetaFile;
MFC : TMetaFileCanvas;
HRect : TRect;
begin
HMF:=TMetafile.Create;
try
HMF.Width:=Bitmap.Width;
HMF.Height:=Bitmap.Height;
MFC:=TMetafileCanvas.Create(HMF,0);
try
HRect.Top:=0;
HRect.Left:=0;
HRect.Right:=1200;
HRect.Bottom:=1200;
MFC.Draw(0,0,Bitmap);
finally
MFC.Free;
end;
HMF.SaveToFile('Temp.wmf');
try
AddMetaFile('Temp.wmf',ScaleValue);
finally
DeleteFile('Temp.wmf');
end;
finally
HMF.Free;
end;
end;
procedure TRtfFile.AddMetaFile(wmfname: string; ScaleValue: single);
var
wmf: file;
PString : Pchar;
ByteStr: array[1..3] of byte;
i, numread: integer;
block: array[1..128] of byte;
dummy1: array[1..6] of byte;
dummy2: array[1..8] of byte;
x, y: word;
x1, y1: word;
WOverH : double;
DoelW, DoelH : double;
begin
assign(wmf, wmfname);
PString := StrAlloc(256);
try
reset(wmf, 1);
{ header lesen }
blockread(wmf, dummy1, 6);
blockread(wmf, x1, 2); { obere, linke Ecke, immer 0 }
blockread(wmf, y1, 2);
blockread(wmf, x, 2); { untere, rechte Ecke, immer 0 }
blockread(wmf, y, 2);
blockread(wmf, dummy2, 8);
WriteText('{\pict\wmetafile8');
if Word2000Rtf then
begin
if ScaleValue < 0 then
begin
DoelW := x * 5.67 * abs(ScaleValue) / 300;
DoelH := y * 5.67 * abs(ScaleValue) / 300;
end
else
begin
WOverH := x / y;
DoelW := fWidth - fLeftMargin - fRightMargin - 0.5;
DoelH := DoelW / WOverH;
if DoelH > fHeight - fUpperMargin - fLowerMargin - 3 then
begin
DoelH := fHeight - fUpperMargin - fLowerMargin - 3;
DoelW := DoelH * WoverH;
end;
end;
if (DoelW > 31.5) then
begin
WOverH := DoelW / DoelH;
DoelW := 31.5;
DoelH := DoelW / WOverH;
end;
if (DoelH > 31.5) then
begin
WOverH := DoelW / DoelH;
DoelH := 31.5;
DoelW := DoelH * WOverH;
end;
WriteText('\picw' + IntToStr(round(DoelW * 1000)));
WriteText('\pich' + IntToStr(round(DoelH * 1000)));
end
else
begin
WriteText('\picwgoal' + IntToStr(round(x * 5.67 * abs(ScaleValue))));
WriteText('\pichgoal' + IntToStr(round(y * 5.67 * abs(ScaleValue))));
end;
WriteTextLn('');
repeat
blockread(wmf, block, 127, Numread);
StrCopy(PString, '');
for i := 1 to numread do
begin
StrPCopy(@ByteStr, DecToHex(block[i]));
StrCat(PString, @ByteStr);
end;
WriteTextLn(StrPas(PString));
until eof(wmf) or (Numread < 127);
except
on exception do
ShowMessage('WMF-bestand kan niet worden ingelezen.');
end;
close(wmf);
StrDispose(PString);
WriteTextLn('}');
end; |
Partager