喫茶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 にこれだけいろいろ書く暇があるんだから,考えてやれば,ですか ?
ほっといてくれます ?


[9756] Re:質問の仕方の例返信 削除
2016/4/14 (木) 15:04:10 Mr.XRAY
> と言われても,このコードをどこで実行しているのか,

最近,某掲示板にありましたね.

http://hpcgi3.nifty.com/e-papy/DelphiBBS/wwwlng.cgi?print+201604/16040007.txt

>"DoHorizLine"なるメソッドがありましたが、横線は引かれません。

これをどこで実行したが書いてありません.
というより,コードの提示が全くありません.
結局,「横線が引かれない」のではなく,実行する場所が間違っていたわけです.


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