掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
QuickReportで枠内に入るように文字の大きさ調整 (ID:29011)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
beagleさん 「再生成」やら「生成」の単語の意味が、ちょっと理解しかねますが・・・ TQRDBText には、印刷直前(印刷はもちろんプレビュー時も)文字列を描画する 直前に発生するOnPrintイベントがあります。 このとき、メソッドの第二引数に 「var Text: String」があり、印刷(描画) すべき文字列を取得できます。 このとき、好きなだけ幅調整、文字列変更できます。 使用経験があるのでしたら、ご存知のハズ。 ジュウザさんが最初に提示したメソッド(QRTextAdjust)は、おそらくこの OnPrintで実行していると思ったわけですが、QRDBTextは、AutoSize=trueで あれば、テキストの変更、フォントの変更で、内部の文字列を再生成し (内部的には TStringListで保持しているため)自身の幅も変更します。 したがって、QRTextAdjust の処理中に、幅が変わらないのはおかしい話 ということなんでしょう。 もし、プレビューではなく印刷処理中は、幅変更されない仕様(バグ?)に なっているのであれば、おそらくPDFで出力しても同じでしょう。 ですが、PDF出力において、解像度を72dpi、96dpi等の通常の画面と同じ 程度で印刷したとき、正常動作するのであれば、QRDBText.Widthが、 印刷中は印刷対象の解像度によってWidthが変更になる、変なプロパティ なのかもしれません。 そのときは、解像度に影響されない通常のTLabelでサイズを計算するか、 beagleさんの > C.等幅フォントを使用して、文字数から最適なフォントサイズを割り出す。 が、問題回避方法になると思います。 QR2,QR3のソースを見る限り、印刷時にのみ怪しい動作になるようには見えませんが。 実際にフォント幅取得して計算すべきなんかな? procedure QRTextAdjust(Sender:TObject; dat:string; dfsize:word; maxwidth:integer); QRPrinter.Canvas.Font.Assign(TQRDBText(Sender).Font) textWidth := QRPrinter.Canvas.TextWidth(dat) while (textWidth > QRPrinter.XSize(maxwidth)) do begin QRPrinter.Canvas.Font.Size := QRPrinter.Canvas.Font.Size - 1; textWidth := QRPrinter.Canvas.TextWidth(dat); end; ・・・どっか単位違う気がする
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.