喫茶XRAYトップページ

[スレッド全体
]

[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