つい先日にModalにする際に上手く実行されないということで質問させて
頂きました。
Bitmapの定義をあちこちにしていて、重なっていたのを修正し、エラー自体は出なくなったのですがBitmapが全く描かれない状態となっています。
単独のソースだけを用いて行ったときにはできるのですが、複数のソースを用いて行うと上手くいきません。
BitmapをCreateする際に Graphics.TBitmap.Createとするのがよいとアドバイスを頂き試してみたのですが上手くいきません。
procedure TTOPOGRAPHIC.LINE;
var i,j:Integer;
begin Bitmap3 := Graphics.TBitmap.Create;
Bitmap3.Width := 600;
Bitmap3.Height := 330;
Bitmap3.Canvas.Pen.Color := clWhite;
Bitmap3.Canvas.MoveTo(16,80);Bitmap3.Canvas.LineTo(616,80);
Bitmap3.Canvas.MoveTo(616,80);Bitmap3.Canvas.LineT(616,410);
Bitmap3.Canvas.MoveTo(16,80);Bitmap3.Canvas.LineTo(16,410);
Bitmap3.Canvas.MoveTo(16,410);Bitmap3.Canvas.LineT(616,410);
//途中省略 ほぼ同じ内容が続きます
Canvas.Draw(0,0,Bitmap3);
Bitmap3.Free;
end;
このprocedureの宣言はprivateで行い、Bitmapはpublic宣言をしています。
他のソースでもBitmapの宣言をしていますが、いずれもpublic宣言です。
ペンの色が背景色とかぶって、見えなくなっているということはないでしょうか?
ペンで線を書く前に、FillRectで背景を別の色で塗りつぶす処理をしておいたらどうでしょう?
それと、BitmapをSaveToFileで適当な場所に保存し、
どうなってるか調べるというのもいい方法だと思います。
わたしはいつも、こまったときにはBMP.SaveToFile('C:\Bmp.bmp');とかやって調べてみてます。
キャンバスへコピーするときにミスしただけとか、そういう理由もありますから。
それから、おせっかいかもしれませんけど、
あんまりBitmap?といった、ぱっと見て用途がわからない変数は作らないほうがいいかと…。
Forループのカウンタ専用変数とかは、iとかlとか、適当でいいと思いますけど、
長いこと使うつもりの変数には、ある程度意味のある名前をつけておいたほうが、
わかりやすいと思いますよ。
(辞書を引いてまで…っていう必要はないですけど)
長い名前でも、コード補完を使えば一発ですから♪
たかちみえさんありがとうございます。
SaveToFileを試したところ大きさを指定しているのにも
かかわらず非常に小さいBitmapしか作成されていません。
背景色もなぜか黒になっていました。
変数名確かにBitmap?よりも意味ある名前を付けた方がいいですね。
アドバイスありがとうございます。
つじ「BitmapのHeightやWidthの指定したのとLineToの座標系の指定違ってるよね〜!」
かご「うんうん、HeightとWidthの範囲超えてるね〜!」
つじ「きちんと指定したものが合ってるか確認しないとね!」
なるほど!Bitterさんどうもありがとうございました。
無事解決しました。
ツイート | ![]() |