さっそくXE2でFireMonkeyなどを試していますが、ごくごく基本的な
Canvasの使い方がわかりません。
Delphi XE2 Pro.
Windows 7 Pro.
新規作成 > FireMonkey HDアプリケーション を作成
フォームにTImage、TButtonを設置。
以下のページを参考に描画を試しました。
http://docwiki.embarcadero.com/CodeExamples/XE2/en/FMXTCanvasDrawFunctions_(Delphi)
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Bitmap.Create(400, 400);
Image1.Bitmap.Clear(clawhite); //
<ここがすでにヘルプではclWhiteとなっていて通らない。今度はアルファ値を標準で持っているようです。
end;
procedure TForm1.Button1Click(Sender: TObject);
var
p1, p2: TPointF;
begin
p1.Create(20, 2);
p2.Create(350, 400);
Image1.Bitmap.Canvas.DrawLine(p1, p2, 100);
Image1.Bitmap.BitmapChanged;
end;
とほとんどページそのままにイベントを作りました。
いくらなんでもこんな基本的なコードは動くだろう・・・
と思っていましたが、ぜんぜん描画されません(; ;
Image1は真っ白のまま。
エラーも警告もまったく出ません。
真っ白ということは「Image1.Bitmap.Clear(clawhite)」のコードは
正常に動いていると推測できます。(TImageは白い四角となっている)
ですがCanvasのその他のどの命令を使っても何も描画されません。
なにかヒントをお持ちの方はいらっしゃいますか?
太田剛文
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
練習や試合の予定調整は「とっとと決め太郎」におまかせ!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hnxY2
-----------------------------------------------------[freeml by GMO]--
Canvasの描画をやめてScanLineに変えてみましたが、
やはりTImageは真っ白のままでした。
ためしに以下のようにして画像をファイルに保存してみました。
var
s: PAlphaColorArray;
i: Integer;
begin
s := Image1.Bitmap.ScanLine[10];
for i := 0 to 30 do
s[i] := claBlack;
Image1.Bitmap.SaveToFile('a.bmp');
すると保存された画像には正常に黒い短い線が描かれました。
どうも画面表示部分にまだ不明な処理があるようです。
引き続きヒントがありましたらお待ちしています。
太田剛文
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
クーポンサイトを選んで検索♪一番おトクなクーポンをGET!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hnyqK
こんにちは.Mr.XRAYです.
procedure TForm1.Button1Click(Sender: TObject);
var
p1, p2: TPointF;
begin
p1.Create(20, 2);
p2.Create(350, 400);
Image1.Bitmap.Canvas.BeginScene;
Image1.Bitmap.Canvas.DrawLine(p1, p2, 100);
Image1.Bitmap.BitmapChanged;
Image1.Bitmap.Canvas.EndScene;
end;
でどうでしょうか.
動作確認環境は,Windows 7 U64 + Delphi XE2 FMX-32bit です.
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
メンバーで使える掲示板を活用しよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hnJn2
Mr.XRAYさんありがとうございます。
> procedure TForm1.Button1Click(Sender: TObject);
> var
> p1, p2: TPointF;
> begin
> p1.Create(20, 2);
> p2.Create(350, 400);
>
> Image1.Bitmap.Canvas.BeginScene;
> Image1.Bitmap.Canvas.DrawLine(p1, p2, 100);
> Image1.Bitmap.BitmapChanged;
> Image1.Bitmap.Canvas.EndScene;
> end;
ナイスです!
これで描画ができました!
まったく新しい命令ですね。
描画前後に必ず必要になるんでしょうか?
Sceneというものがどこかにあるのかな?
DirectXっぽいですね。
ただScanLineからの描画は上記では動きませんでした。
ScanLineで描いた後、フォームごとリフレッシュ
(Refreshメソッドがなかったので、Form.Hide、Form.Showと
かなり適当にやりました)
でも描画は真っ白のままです。
なかなか一筋縄ではいかないですね。
(ヘルプがあればまだ先に進めそうですが・・・ね
エンバカデロさんお願いします)
太田剛文
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
練習や試合の予定調整は「とっとと決め太郎」におまかせ!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hnLC0