QuickReportで印刷時の文字幅を変えるには?

解決


ポン  2006-05-12 02:24:05  No: 21465

QuickReportで印刷される文字幅を変えたいんですがうまくいきません・・・
・フォントで・・・
QRLabelのフォントをTlogFontのlfWidthを使って変えて見たんですが、
プレビューでは幅が広がったのですが、印刷時には元に戻ってしまいました。
・イメージで・・・
TBitMapのCanvasに一度書き込んでQRImageで表示さえて見たんですが、
幅は広がったものの解像度が低くギザギザしてしまいます。
QRImageのStretchをTrueにして、数倍の大きさで書き込んで縮小させて見ましたが、まだスムーズになりませんでした。

イメージを使わない方法、使う方法、その他、印刷時の文字幅をうまく変更する方法があればご教授お願いいたします。m(__)m


  2006-05-12 03:40:20  No: 21466

> ・フォントで・・・
> QRLabelのフォントをTlogFontのlfWidthを使って変えて見たんですが、
> プレビューでは幅が広がったのですが、印刷時には元に戻ってしまいました。
どのタイミングで変更しているのかわかりませんが、
QRLabelのOnPrintで変更してもだめだったんですか?


ポン  2006-05-12 17:51:20  No: 21467

骨さんの返事遅れてすみません・・

説明のしかたがよくありませんでした、
変更したフォントのうちWidthで変更したものだけが、印刷時に反映されないんです。
たとえば↓のようにしたとき、Heightが30のイタリックで印字されるのですが、
横幅は通常(?)の幅になってしまいます。
プレビューでは横長に表示されているのですが・・・
procedure TForm2.QRLabel1Print(sender: TObject; var Value: String);
var
  lft : TLogFont;
begin
  GetObject(Font.Handle,SizeOf(LF),@LF);

  lft.lfHeight := 30;
  lft.lfWidth := 50;
  lft.lfItalic := 1;

  Font.Handle :=  CreateFontIndirect(LF);

end;


ポン  2006-05-12 18:22:24  No: 21468

修正
GetObject(Font.Handle,SizeOf(LF),@LF);

GetObject(Font.Handle,SizeOf(lft),@lft);
です


ポン  2006-05-12 19:53:22  No: 21469

イメージのほうですが、QRImageのサイズ * valueの大きさのBitMapを作成し、
StretchがTrueのQRImage.Pictureに入れています。
印刷時に、レーザーのプリンタですと細かい波がでますが、
インクのプリンタですと特にそのようなことはありませんでした。

valueの値が大きいとドットのカクカクがでないんですが、波がでてしまいます。
解像度の差が問題なのですかね・・・


  2006-05-12 23:02:36  No: 21470

>変更したフォントのうちWidthで変更したものだけが、印刷時に反映されないんです。

なるほど、再現できました。

TQRLabelで、Canvas.Font := {QRLabel1.}Font;
のように、フォントを設定している部分で、おかしくなる(元に戻る)のが原因かと。

うちでは、以下のようにしてうまく出ました(当方Ver2.0で確認)
QRのバージョンの違いは、なんとかカバーしてください(^^;
-------------------------------------
uses
  QRPrntr;

var
  lft : TLogFont;
begin
  GetObject(QRLabel1.Font.Handle,SizeOf(TLogFont),@lft);
  if QuickRep.QRPrinter.Destination = qrdPrinter then begin
  //プリンタでの印刷
    lft.lfHeight := 30 * プリンタDPI / 96{通常のPixelPerInch};
    lft.lfWidth := 50 * プリンタDPI / 96{通常のPixelPerInch};
  end
  else begin
  //プレビューイメージ作成
    lft.lfHeight := 30;
    lft.lfWidth := 50;
  end;
  lft.lfItalic := 1;

  QRLabel1.Font.Handle := CreateFontIndirect(lft);
  QuickRep1.QRPrinter.Canvas.Font.Handle := QRLabel1.Font.Handle;
  //こちらは×
  //QuickRep1.QRPrinter.Canvas.Font := QRLabel1.Font;
end;
-------------------------------------


ポン  2006-05-13 03:31:48  No: 21471

骨さん、お返事ありがとうございます。
上記のコードを参考に色々試してみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加