Печать картинки в FastReport

r77
Дата: 10.05.2011 15:51:29
r77
Соколинский Борис
с077,
Используй метафайл.


Спасибо, попробую.


И все же не то, что мне нужно...у меня есть точки в БД, по которым я рисую фигуру, мне хранить ее нигде не нужно, мне нужно чтоб для пользователя она отрисовалась, а потом то что отрисовалось - распечатать...
или я вас не понимаю...
DimaBr
Дата: 10.05.2011 15:52:39
Покажите код наконец-то
r77
Дата: 10.05.2011 16:01:28
DimaBr
Покажите код наконец-то


Та показывать-то нечего....

var
frPicture:TfrxPictureView;

.............................................
frPicture:= frxReport1.FindObject('Picture3') as TfrxPictureView; //Picture3 - компонет Picture в FastReport
frPicture.Picture.Assign(ImObjM.Picture); // ImObjM - Image
DimaBr
Дата: 10.05.2011 16:07:55
Ну а координаты вашего треугольника и картинку что получатеся
Соколинский Борис
Дата: 10.05.2011 16:15:02
r77
И все же не то, что мне нужно...у меня есть точки в БД, по которым я рисую фигуру, мне хранить ее нигде не нужно, мне нужно чтоб для пользователя она отрисовалась, а потом то что отрисовалось - распечатать...
или я вас не понимаю...

Похоже, что не понимаете.
Рисовать нужно не в растре (Image.Canvas или Image.Picture.Bitmap.Canvas) а в метафайле.
Что-то типа:
var
  MF: TMetafile;

  MF:=TMetaFile.Create;

  //Задаем ширину-высоту

  With TMetafileCanvas.Create(MF, 0)  do
  try
    //рисуем
  finally
    Free;
  end;
  Image.Picture.Graphic:=Mf;
Кроик Семён
Дата: 10.05.2011 16:15:09
r77,

>> Соколинский Борис:
>> Используй метафайл.

как оказалось, замечательный способ.
лови код

procedure PrintPicture(APicture: TPicture;
                       AOrientation: TPrinterOrientation;
                       AWithPreview: boolean);
var
   Rep   : TfrxReport;
   Page  : TfrxReportPage;
   Pict  : TfrxPictureView;
begin
   Rep:=TfrxReport.Create(nil);
   try
      Rep.Clear();

      Page:=TfrxReportPage.Create(Rep);
      Page.CreateUniqueName();
      Page.SetDefaults();
      Page.Orientation:=AOrientation;


      Pict:=TfrxPictureView.Create(Page);
      Pict.CreateUniqueName();
      Pict.Align:=baClient;

      Pict.Picture.Assign(APicture);

      if AWithPreview then
         Rep.ShowReport(true)
      else
      begin
         Rep.PrepareReport(true);
         Rep.Print();
      end;
   finally
      Rep.Free();
   end;
end;
//------------------------------------------------------------------------------
procedure TForm1.btnTestPrintClick(Sender: TObject);
var
   Pict     : TPicture;
   MetaFile : TMetaFile;
   Canv     : TMetafileCanvas;
begin
   Pict:=TPicture.Create();
   try
      MetaFile:=Pict.Metafile;
      MetaFile.Width:=100;
      MetaFile.Height:=100;

      Canv:=TMetafileCanvas.Create(MetaFile, 0);
      try
         Canv.MoveTo(0,0);
         Canv.LineTo(100,100);

         Canv.Ellipse(10,10,90,90);
      finally
         FreeAndNil(Canv);
      end;

      PrintPicture(Pict,poLandscape,true);
   finally
      FreeAndNil(Pict);
   end;
end;

Соколинский Борис
Дата: 10.05.2011 16:18:11
Кроик Семён
как оказалось, замечательный способ.

Ну дык!
Правда, есть один нюанс: если рисунок сложный, то драйвер принтера проглючить может (HP особенно).
Но с треугольниками все должно быть нормально.
r77
Дата: 10.05.2011 16:20:05
DimaBr
Ну а координаты вашего треугольника и картинку что получатеся


Ну,это я как пример треугольник указываю, а так там фигура сложнее...координаты берутся из БД,на экране получаются стороны фигуры лесенкой и на печати также (просто под рукой сейчас нет, чтоб картинку прикрепить...)
r77
Дата: 10.05.2011 16:22:16
Соколинский Борис
Кроик Семён
как оказалось, замечательный способ.

Ну дык!
Правда, есть один нюанс: если рисунок сложный, то драйвер принтера проглючить может (HP особенно).
Но с треугольниками все должно быть нормально.


Вот в том то и дело что это к примеру привожу треугольник,а фигуры разные могут быть, но все-таки не супер сложные, спасибо огромное за помощь буду пробовать!!!
r77
Дата: 10.05.2011 16:23:06
Кроик Семён
r77,

>> Соколинский Борис:
>> Используй метафайл.

как оказалось, замечательный способ.
лови код

procedure PrintPicture(APicture: TPicture;
                       AOrientation: TPrinterOrientation;
                       AWithPreview: boolean);
var
   Rep   : TfrxReport;
   Page  : TfrxReportPage;
   Pict  : TfrxPictureView;
begin
   Rep:=TfrxReport.Create(nil);
   try
      Rep.Clear();

      Page:=TfrxReportPage.Create(Rep);
      Page.CreateUniqueName();
      Page.SetDefaults();
      Page.Orientation:=AOrientation;


      Pict:=TfrxPictureView.Create(Page);
      Pict.CreateUniqueName();
      Pict.Align:=baClient;

      Pict.Picture.Assign(APicture);

      if AWithPreview then
         Rep.ShowReport(true)
      else
      begin
         Rep.PrepareReport(true);
         Rep.Print();
      end;
   finally
      Rep.Free();
   end;
end;
//------------------------------------------------------------------------------
procedure TForm1.btnTestPrintClick(Sender: TObject);
var
   Pict     : TPicture;
   MetaFile : TMetaFile;
   Canv     : TMetafileCanvas;
begin
   Pict:=TPicture.Create();
   try
      MetaFile:=Pict.Metafile;
      MetaFile.Width:=100;
      MetaFile.Height:=100;

      Canv:=TMetafileCanvas.Create(MetaFile, 0);
      try
         Canv.MoveTo(0,0);
         Canv.LineTo(100,100);

         Canv.Ellipse(10,10,90,90);
      finally
         FreeAndNil(Canv);
      end;

      PrintPicture(Pict,poLandscape,true);
   finally
      FreeAndNil(Pict);
   end;
end;



Спасибо!!!