喫茶XRAYトップページ

[スレッド全体
]

[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"なるメソッドがありましたが、横線は引かれません。

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


[9760] Re:質問の仕方の例返信 削除
2016/4/14 (木) 21:07:41 Mr.XRAY
>   ACanvas.Pen.Color := clRed;
>   ACanvas.Pen.Width := 50;
>   ACanvas.MoveTo(0, 0);
>   ACanvas.LineTo(500, 500);
>
> と実行したのですが,うまくいきません.
> と言われても,このコードをどこで実行しているのか,


印刷プレビュー制御コンポーネントを使用された方は,
そんなことは分かるじゃぁないですか ?
印刷コードを書くべきところに書いているでしょう.普通.
と思うかも知れません.

そんなことがあるんです.
以下は,本当にあった質問の例です.
Form2 が印刷プレビューのフォームだと思ってください.
もちろん,最初の質問の時は,コードの提示はありませんでした.

最初のは,

   Form2.Image1.Canvas.Pen.Color := clRed;
   Form2.Image1.Canvas.Pen.Width := 20;
   Form2.Image1.Canvas.MoveTo(0, 0);
   Form2.Image1.Canvas.LineTo(200, 200);

『というコードが実行されないようです.
TplPrev で線を引くにはどうしたらいいのでしょうか』
という質問でした.

次のは,
『クエリの結果を印刷するコードを書いたのですが,何も表示されません』

というものでした.


//=============================================================================
//  質問の内容は
//  「線が引かれません.実行されていないようですが」
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
   Form2.Image1.Canvas.Font.Size := 50;
   Form2.Image1.Canvas.TextOut(10, 10, '印刷テスト');

   Form2.ShowModal;

   Form2.Image1.Canvas.Pen.Color := clRed;
   Form2.Image1.Canvas.Pen.Width := 20;
   Form2.Image1.Canvas.MoveTo(0, 0);
   Form2.Image1.Canvas.LineTo(200, 200);
end;

//=============================================================================
//  Form2にはQuer1の結果セットを表示するコードがある
//
//  質問の内容は
//  「何も表示されません」
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
  Query1.Close;

  Query1.SQL.Clear;
  Query1.SQL.Add('SELECT * FROM TEST.DB');
  Query1.Open;

  Form2.Show;

  Query1.Close;
end;




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

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

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

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


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