喫茶XRAYトップページ

[スレッド全体
]

[9753] 記事の修正更新返信 削除
2016/4/14 (木) 09:40:15 Mr.XRAY
印刷プレビュー制御コンポーネント [イメージの描画]
http://mrxray.on.coocan.jp/Delphi/plPrev/M_Images.htm

に,以下の文章を追加しました.

DrawPict(X1, Y1, FileName)

ただし,TplPrev では 1 ドットが 0.1 mm であることに注意して下さい.
これは,同じ画像でも,プリンタの印刷の解像度 (DPI) が異なると,印刷結果
の画像の大きさが異なることを意味します.

StretchDrawBitmap(ARect, Pict)
StretchDrawMetaFile(ARect, Pict)

元の画像の縦横比を保ったまま,指定した枠 (四角の領域) に合わせて画像を描画
するには,画像の縦横比を計算して,その値を元にして ARect の各メンバの値を
計算する必要があります.

[画像の縦横比を保ったまま領域に合わせて画像を描画する例]
http://mrxray.on.coocan.jp/Delphi/plPrev/M_Images.htm#05


いろいろな質問があるということです.ハイ (涙汗)
これでも,当サイトの記事は「難解」でしょうか ?


[9755] 質問の仕方の例返信 削除
2016/4/14 (木) 14:54:23 Mr.XRAY
例えば,印刷プレビュー制御コンポーネント (以後,TplPrev) の印刷のコード
関係でトラブルがあったとします.

そのような場合,新規にプロジェクトを作成し,問題となる現象が発生する最低限
のコードを作成します.
この新規のプロジェクトが重要です.
新規であれば,他の影響を考えなくて済みます.
新規にプロジェクトを作成するのは面倒だと思うかも知れません.
しかし,それが結局は解決への早道なのです.

例えば以下のようにします.
このコードは,描画ルーチンを別としています.
別にしておくと,問題が発生した時に,この描画ルーチンを実行しないように
して,実行します.それで問題がなければ,描画ルーチン関係に問題があることが
分かります.つまり,デバッグしやすいコーディングということになります.

このようなコードを提示して頂ければ,このコードをコピペして,
実際に動作を確認することができます.
(注: このコードは正常に動作します)

//================================================================
//  新規のプロジェクトに
//  TButtonと拙作のTplPrevコンポを配置
//
//  動作確認 Widnows 7 U64(SP1) + Delphi XE(UP1) Pro
//================================================================
procedure TForm1.Button1Click(Sender: TObject); begin
   //印刷用のコードを書く
   plPrev1.BeginDoc;
   try
     //自作のルーチンを実行
     //引数にTplPrevのCanvasを渡す
     HogeHoge(plPrev1.Canvas);
   finally
     plPrev1.EndDoc;
   end;
   //プレビュー表示開始
   plPrev1.ShowModal;
end;

//----------------------------------------------------------------
//  自作のルーチン? の例
//----------------------------------------------------------------
procedure TForm1.HogeHoge(ACanvas: TCanvas); begin
  ACanvas.Pen.Color := clRed;
  ACanvas.Pen.Width := 50;
  ACanvas.MoveTo(0, 0);
  ACanvas.LineTo(500, 500);
end;


これを,コードは何も示さずに,印刷のコードを実行したのですが,
うまくいきませんとか,

  ACanvas.Pen.Color := clRed;
  ACanvas.Pen.Width := 50;
  ACanvas.MoveTo(0, 0);
  ACanvas.LineTo(500, 500);

と実行したのですが,うまくいきません.
と言われても,このコードをどこで実行しているのか,
ACanvas が何を指しているのかは分かりません.
どのようにテストしていいのか悩んでしまいます.

また,うまくいかないというのが,どういう状況なのかも分かりません.
エラーが発生するのか,そのエラーはどんな内容なのか ?
印刷のプレビュー画面が表示されないのか ? 等々...
更に,問題解決のためには,このような文章も書かなければなりません.
これは,ある程度の労力が必要で,かなりの時間の無駄になります.

最初のコードのようになっていれば,質問された方のコードのどこが問題なのか
を,おおよそ推測することができます.
また,どこで間違い,ミスや勘違いしているかの判断材料にもなります.

私はエスパーではありません !! (キッパリ)
こんなことを書いても,必要な方には読んでいただけない,
ということが分かっていながら書いてしまう私,
『私ってバカよね.ホントにバカよね』

えっ !? 何ですか ?
喫茶XRAY にこれだけいろいろ書く暇があるんだから,考えてやれば,ですか ?
ほっといてくれます ?


[9762] Re:質問の仕方の例返信 削除
2016/4/15 (金) 10:15:24 Mr.XRAY
> 例えば以下のようにします.

このようなコードを頂ければいくらでもテストします.
文章でいろいろ書いていただいても,変数の定義等を,私がやらなれば
ならないのや,どんな場所でどのように,文章中のコード実行しているのかを
推測しながらテストプログラムを作成しなければならないのは苦痛です.
くどいようですが,私は Delphi のサポートセンターの要員ではありません.

プリンタ関係で問題があれば,できれば,そのプリンタの名前も教えて
頂ければ幸いです
プリンタ関係の時は,実際にプリンタドライバをダウンロードしてテスト
しています.もちろん,プリンタドライバの入手先も示していただければ
もっと嬉しいです.

それから,メールの返信の文章は是非お読みになってください.
反応がないと,理解していただこうと,返信の文章が長くなります.
益々難解になり,読みたくなくなると思います.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82