[delphi-users:2179] XE2 FireMonkeyの基本的な動きについて

179 views
Skip to first unread message

Gracix [takefumi-o]

unread,
Sep 7, 2011, 8:31:40 PM9/7/11
to delphi...@freeml.com
太田です。


さっそく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]--

Gracix [takefumi-o]

unread,
Sep 7, 2011, 8:53:53 PM9/7/11
to delphi...@freeml.com
太田です。


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

unread,
Sep 9, 2011, 3:15:38 AM9/9/11
to delphi...@freeml.com
[delphi-users:2179] XE2 FireMonkeyの基本的な動きについて へのレスです.

こんにちは.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

Gracix [takefumi-o]

unread,
Sep 9, 2011, 5:44:20 AM9/9/11
to delphi...@freeml.com
太田です。


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

Reply all
Reply to author
Forward
0 new messages