| 12
 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