喫茶XRAYトップページ


[12196] 印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/27 (月) 16:29:14 Sara
マスター ご無沙汰でございます。

題名通りですが、印刷プレビュー制御コンポーネントにて

全体を左90度回転して印刷したいのですが、可能でしょうか?


御教示いただけると幸いです。


[12197] Re:印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/27 (月) 16:37:40 Mr.XRAY
▼ Saraさん

> 全体を左90度回転して印刷したいのですが、可能でしょうか?

90 度ですか...
できるかなぁ〜
できないのが仕様ということで (笑)


[12198] Re2:印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/27 (月) 17:33:04 Sara
▼ Mr.XRAYさん
> ▼ Saraさん
>
> > 全体を左90度回転して印刷したいのですが、可能でしょうか?
>
> 90 度ですか...
> できるかなぁ〜
> できないのが仕様ということで (笑)



やっぱり、TLogFontで自力で回転するしか無いですかね・・・(^^;

プリンタードライバーが90度回転に対応していれば簡単なのに・・・

ドットプリンターで複写紙(単票)を連続で印刷したいのですが、

当然閉じてある方を下にして入れないとジャムるので・・・回転したい・・

あぁ、位置合わせが面倒・・・(^^;

[12199] Re3:印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/27 (月) 17:42:11 SO
▼ Saraさん

適当ですが。。。
TCanvasなので、画像として回転させればどうでしょう?

[12200] Re4:印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/27 (月) 19:33:51 Mr.XRAY
> TCanvasなので、画像として回転させればどうでしょう?

なんですけど.どのタイミングで可能なのか調べてみますが,
プレビューの前で可能なのか,印刷の時なのか.
う〜ん.


[12201] Re5:印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/27 (月) 20:46:35 Sara
▼ Mr.XRAYさん
> > TCanvasなので、画像として回転させればどうでしょう?
>
> なんですけど.どのタイミングで可能なのか調べてみますが,
> プレビューの前で可能なのか,印刷の時なのか.
> う〜ん.



複数ページの印刷がメインになるので、タイミングやページ数によっては、

メモリー不足になりそうなのと、上手く複数ページのプレビューが

作れるのかを考えると...結構面倒そうで、文字を回転するのと

どっちが簡単かと言うと文字を回転する方が簡単だったり...

位置合わせが面倒なだけで、考えなくても作れるくらいには...

技術的には、面白そうですが余り時間が取れないので...

マスターが作ってくれる分には、待ちます(笑)




[12202] Re6:印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/28 (火) 11:38:52 Sara
> 複数ページの印刷がメインになるので、タイミングやページ数によっては、
>
> メモリー不足になりそうなのと、上手く複数ページのプレビューが
>
> 作れるのかを考えると...結構面倒そうで、文字を回転するのと


  ・・・・
一晩寝ながら考えたところ、そんなに難しく考えなくてもできそうな

気がしてきました・・・ちょっとやってみます。



[12203] Re7:印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/28 (火) 12:20:35 Mr.XRAY
▼ Saraさん

プレビューで回転するのはなしですね.
プレビューが 90 度回転の表示だったら用紙の向きの変更になってしまいます.ハハハッ

TplPrev.Print メソッドに以下の部分があります.
GetMetaImage(i) で i 頁目のメタファイルが取得できます.
90 度回転をやるとすると,このメタファイルのビットマップを取得して,
それを 90 度回転したビットマップを Printer.Canvas に描画すれば OK だと思います.
ただ,この機能をどのように実装するかですね.
私だと GDI+ を使ってしまうかも知れません.

      if FInversePrint then begin
        Printer.Canvas.StretchDraw(Rect(FViewWidth, FViewHeight, 0, 0), GetMetaImage(i));
      end else begin
        //この部分を改造する
        //プロパティを追加して分岐するようにしてもいいかも知れない
        Printer.Canvas.StretchDraw(Rect(0, 0, FViewWidth, FViewHeight), GetMetaImage(i));
      end;

もう 1 つ問題があります.
印刷開始の前に用紙の向きを変える必要があると思います.


[12204] Re8:印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/28 (火) 12:50:28 Mr.XRAY
> 私だと GDI+ を使ってしまうかも知れません.

「Delphi 画像 90度回転」
でググってみると GDI+ を使うまでもなさそうです.
やはり問題は印刷開始前の用紙の向きの設定かな ?
常に 90 度回転が必要というわけではないので,
TplPrev コンポに実装するか,Sara さんが独自で実装するかですね.
う〜ん.


[12206] Re9:印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/29 (水) 09:55:49 Sara
▼ Mr.XRAYさん
> > 私だと GDI+ を使ってしまうかも知れません.
>
> 「Delphi 画像 90度回転」
> でググってみると GDI+ を使うまでもなさそうです.
> やはり問題は印刷開始前の用紙の向きの設定かな ?
> 常に 90 度回転が必要というわけではないので,
> TplPrev コンポに実装するか,Sara さんが独自で実装するかですね.
> う〜ん.


とりあえず、今回はこーんな感じにしてみました。

Bmpの回転処理をしなければ、通常印刷もこれを使えそうですが、
今回は、回転処理専用として書いています。

Bmp := TBitmap.Create;
try


  w := plPrev1.ViewWidth; h := plPrev1.ViewHeight;
  r := Rect(0,0,w,h);
  Bmp.SetSize(h,w);//用紙向きが縦になっているので、横向きのサイズにする
  for page1 := 0 to PageList.Count - 1 do begin //複数ページ分のループ
    line1 := LineMax;
    for ln := 0 to LineList.Count - 1 do begin //複数行印刷ループ
      1行分のデータ取り出し;
      if line1 = LineMax then begin //改ページ処理
        if ln <> 1 then begin //初回でなければ、ページ印刷処理
           RotateBitmap(Bmp);
           plPrev1.Canvas.StretchDraw(r.Bmp);
           Bmp.SetSize(h,w);
           plPrev1.NewPage;
        end;
        line1 := 0;
        ヘッダー印刷処理;//Bmpの初期かも実施
      end;
      Bmpに対する項目印刷処理[ln];
      inc(line1);
    end;
    RotateBitmap(Bmp);//回転処理
    plPrev1.Canvas.StretchDraw(r,Bmp);// 最後のページ印刷
  end;
finally
 Bmp.Free;
end;


[12207] Re10:印刷プレビュー制御コンポーネントで左90度回転印刷返信 削除
2018/8/29 (水) 19:21:12 Mr.XRAY
▼ Saraさんどうもです.

> とりあえず、今回はこーんな感じにしてみました。

すみませんね.今回はそれで,ということで m(_ _)m


INCM/CMT
Cyclamen v3.82