Delphi Programming / Object Pascal
[掲載 2012年08月01日] [更新 各項目を参照] 印刷プレビュー制御コンポーネント |
印刷プレビュー制御コンポーネント
ヒント・検討事項・バグ等 |
動作確認等 |
- |
このページは,主に,コンポーネントを利用された方からの情報等も掲載しています.
掲載記事は順不同です.更新日のもっとも古いのは,このページの作成日となっています.各項目の記事は予告なしに変更,削除する場合があります. |
[掲載 2012年08月01日] [更新 2012年08月01日] |
プレビュー画面の操作,表示ページの移動や印刷等を,ボタンクリックだけでなく,キーボードのキーで行う場合の参考コードです. |
//=============================================================================
// Keyによって操作 A 2012/07/31
//=============================================================================
procedure TplPrevForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_F10 then
begin
if PrintBtn.Enabled = True then
PrintBtnClick( Sender );
end;
if Key = VK_F9 then
if CloseBtn.Enabled = True then
CloseBtnClick( Sender );
if Key = VK_HOME then
if FirstPageBtn.Enabled = True then
FirstPageBtnClick( Sender );
if Key = VK_END then
if LastPageBtn.Enabled = True then
LastPageBtnClick( Sender );
if Key = VK_PRIOR then
if PriorPageBtn.Enabled = True then
PriorPageBtnClick( Sender );
if Key = VK_NEXT then
if NextPageBtn.Enabled = True then
NextPageBtnClick( Sender );
end;
システムにインストールされているプリンタの台数との関係 |
[掲載 2012年08月02日] [更新 2012年08月16日] |
システムにインストールされているプリンタの台数が多いと,印刷プレビューコンポーネントの初期化に失敗する現象とその対応策です.
現在,約 30 近くのプリンタドライバをインストールしていますが,筆者のところでは,この現象は確認できていません.ドライバーだけと,実プリンタの台数との違いがあるのかも知れません.
例えば,以下のようなコードで対処して頂ければ,と思います. |
procedure TplSetPrinter.ChangeCurrentPrinter;
begin
FPrinterNumber := GetPrinterIndexFromString(FPrinterName);
if (0 <= FPrinterNumber)
and (FPrinterNumber < Printer.Printers.Count) then begin
Printer.PrinterIndex := FPrinterNumber;
end else begin
Printer.PrinterIndex := -1;
end;
[掲載 2012年08月02日] [更新 2012年08月02日] |
文字列の描画関係の関数では,背景を透過するようにしています.
これは,文字列を描画する前の背景を有効にするためですが,文字列の実際の描画領域だけの背景を指定したい場合もあるかも知れません.今後のバージョンアップで対応したいと考えています. |
TplPrev の Pen ( ペン ) プロパティと Line ( 線 ) プロパティの違い |
[掲載 2012年08月02日] [更新 2012年08月02日] |
実を言うと,同じです.では何故両方あるのかは,喫茶XRAYの記事へのリンクで確認してください. |
[掲載 2012年08月04日] [更新 2012年08月04日] |
バーコードや QR コードの印刷の参考となる書込みがあります.
その他に,株式会社 テクニカルが提供している バーコードフォントがあります.
これを使用するテストコードが 喫茶XRAY にあります.また,[QR コード表示コンポーネント]の修正版もダウンロード可能です.
有限会社 サイテックが提供している,Barode Label Control というバーコードの ActiveX コントロールは,拙作の TplPrev では描画できません.
この ActiveX コントロールは,インストールした後,[コンポーネントのインポート] [ActiveX コントロールの取り込み]で,登録済みの ActiveX コントロールから,
[Psytec Barcode Label Control 1.1]
をインストールすると,Delphi で利用可能となります. |
[掲載 2016年04月17日] [更新 2016年04月17日] |
バーコードの描画に,seizo さんのバーコード表示コンポ TBarImage を使用する例です.
印刷プレビュー制御コンポーネントは,描画の単位が 0.1 mm です.バーコードのナロー幅とワイド幅が描画できることを確認する必要があります.
ナロー幅は最低でも 0.19 mm, ワイド幅はナロー幅の 2.25 ~ 2.5 倍必要です.
この幅は,TBarImage.Scale または T plPrev.StretchDrawMetaFile で調整することができます.
CODE39 では,左右に,ナロースペース (細い空白) の 10 倍以上のスペースが必要です. |
//=============================================================================
// seizoさんのバーコード表示コンポーネント TBarImageを使用する例
//
// CODE39では左右にナロースペース(細い空白)の10倍以上のスペースが必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
BarImage1 : TBarImage;
LRect : TRect;
LTextHeight : Integer;
begin
plPrev1.BeginDoc;
BarImage1 := TBarImage.Create(Self);
try
BarImage1.BarEnabled := False; //表示を一時的に禁止
BarImage1.BarType := cbarCODE39; //CODE39を選択
BarImage1.Scale := 3; //倍率指定
BarImage1.SymbolDisp := False; //シンボル文字列は非表示
BarImage1.Match := True; //バーコードのサイズに合わせて表示
BarImage1.BarPicture := picEMF; //メタファイル(EMF)表示を選択
BarImage1.BarColor := clBlack; //バーコードの色を黒色に指定
BarImage1.BackColor := clWhite; //背景色指定
BarImage1.BarHeight := 105; //高さ指定
BarImage1.BarLeft := 0; //表示位置指定(X座標)
BarImage1.BarTop := 0; //表示位置指定(Y座標)
BarImage1.BarSpaceUp := 10; //上方向の余白のサイズを指定
BarImage1.BarSpaceDown := 0; //下方向の余白のサイズを指定
BarImage1.BarSpaceLeft := 10; //左方向の余白のサイズを指定
BarImage1.BarSpaceRight := 10; //右方向の余白のサイズを指定
BarImage1.Code := '0123456789ABC'; //Codeプロパティ
BarImage1.BarEnabled := True; //この時点でバーコードが描画される
LRect.Left := 100;
LRect.Top := 100;
LRect.Right := LRect.Left + BarImage1.BarWidth;
LRect.Bottom := LRect.Top + BarImage1.BarHeight;
//バーコードを描画
//plPrev1.Canvas.Draw(LRect.Left, LRect.Top, BarImage1.Picture.Metafile);
//でも描画可能であるが,StretchDrawMetaFileならサイズ調整が可能なので
plPrev1.StretchDrawMetaFile(LRect, BarImage1.Picture.Metafile);
//バーコードにした文字列を描画
plPrev1.FontSize(10.5);
plPrev1.FontName('MS Pゴシック');
LTextHeight := plPrev1.Canvas.TextHeight(BarImage1.Code);
plPrev1.TextRectCT(LRect.Left,
LRect.Right,
LRect.Bottom,
LRect.Bottom + LTextHeight,
BarImage1.Code);
finally
FreeAndNil(BarImage1);
plPrev1.EndDoc;
end;
plPrev1.ShowModal;
end;
[掲載 2012年12月02日] [更新 2012年12月02日] |
この問題は,今回のメールだけでなく,以前から複数の方から指摘されています.また喫茶 XRAY にも書き込みがあります.現在まだ解決に至っていません.ご迷惑をおかけしています.現象は,例えば以下のようなものです.
- Delphi 2007 でコンパイルした EXE は正常に印刷されるが,Delphi 2009 以降ではエラーが発生する.印刷プレビューはできるが印刷の際にエラーとなる.
- この現象は,プリンタの用紙設定等が正常に行われていなようである
- 複合機では,印刷プレビューあるいは,プリンタ設定コンポーネントの用紙設定等が反映されないことがある
プリンタ設定コンポーネントのバグ関係記事も参考にしてください. |
[掲載 2010年03月25日] [更新 2010年03月25日] |
メモリリークが発生するバグの報告があります.お手数ですが修正してご利用ください. |
印刷後にアプリを終了すると 'ms3XXX.dll で...' のエラー |
[掲載 2015年03月17日] [更新 2015年03月17日] |
プリンタ HP Officejet H470 で印刷後にアプリを終了すると 'ms3XXX.dll で...' のエラーが発生する報告です.[OK] をクリックすると次々にエラー表示します.
印刷しなければ問題ないそうです.喫茶XRAY で報告がありました. |
プリンタが Microsoft PrintTo PDF の時の不具合 |
[掲載 2023年04月05日] [更新 2023年04月05日] |
プリンタが Microsoft PrintTo PDF の時の不具合の報告を頂きました.
印刷プレビューが描画されず,印刷も正常に行われないという内容です.報告をくださった方が対処方法について調べてくださいました.参考にしてください. |
|