スマホで線を描画するには?

解決


かんとく  2014-08-22 09:42:53  No: 46625

お世話になっております。

Windows7,DelphiXE6,Mobile Add-On Packです。

FireMonkeyで、スマホ用のアプリを作ろうとしています。

まず、新規作成で、「FireMonkeyモバイルアプリケーション」→「空のアプリケーション」を選択します。

デザイン画面で
Button1
PaintBox1
を配置して、コードを

procedure TForm2.Button1Click(Sender: TObject);
begin

  PaintBox1.Canvas.BeginScene ;
  PaintBox1.Canvas.Stroke.Kind := TBrushKind.bkSolid ;
  PaintBox1.Canvas.Stroke.Color := $FF000000;
  PaintBox1.Canvas.DrawLine(PointF(0,0),PointF(100,100),1.0) ;
  PaintBox1.Canvas.EndScene ;

end;

としました。

開発画面右上のファイルの部分の「ターゲットプラットフォーム」を「32ビットWindows」にすると、パソコンの画面上でアプリが実行され、直線が描画されます。

しかし、ファイルの部分の「ターゲットプラットフォーム」を「Android SDK 22.3 32bit」の下にある「P-06D」(わたしがテストに使っているスマホの機種)にすると、スマホの画面上でアプリが実行されますが、直線が描画されません。

色を変えたり、座標を変えたりしてみましたが、まったく描画されません。

スマホの画面上で線を描画するには、どうしたらよいでしょうか。

よろしくお願いします。

ちなみに、テストに使っているスマホの機種は、パナソニック P-06Dです。


DEKO  2014-08-22 10:43:17  No: 46626

TPaintBox であれば、VCL の時と同様
OnPaint イベントハンドラ内で描画するのが筋かと思います。

[TPaintBox (FireMonkey Tips)]
http://ht-deko.minim.ne.jp/techf001_shapes.html#TPaintBox


かんとく  2014-08-22 22:42:50  No: 46627

いつも、ありがとうございます。

ただ、うまくいきませんでした。

PaintBoxをImageに変えて試してみましたが、それでも同じです。

(「ターゲットプラットフォーム」を「32ビットWindows」にすると、パソコンの画面上で直線が描画されますが、
「ターゲットプラットフォーム」を「Android SDK 22.3 32bit」にすると、スマホの画面上で直線が描画されません。)

すみません。
よろしくお願いします。


DEKO  2014-08-23 05:06:22  No: 46628

おろ?
比較的構成の似ている HTC J ISW13H ではちゃんと描画されました。

> スマホの画面上でアプリが実行されますが

真っ黒な画面ですか?それとも貼り付けた
ボタン (TButton) とかはちゃんと表示されるのですか?


かんとく  2014-08-23 07:07:23  No: 46629

ありがとうございます。

DEKOさんのところでは、うまくいくんですね。

わたしのところでは、ボタンは見えます。
ボタン以外の部分は、灰色っぽいです。
ボタンをクリックすると、ボタンの色が変わるので、クリックはできていると思います。

試しに、デザイン画面で、
Image1のMultiResBitmapをクリックして、JPGファイルを選択すると、
スマホの画面でそのJPG画像が表示されました。

でも、やっぱりボタンをクリックしても、線は描画されません。

よろしくお願いします。


助監督  2014-08-26 23:13:07  No: 46630

>やっぱりボタンをクリックしても、線は描画されません

そりゃあそうでしょうね…。
せっかくDEKOさんがクリックイベントではなくOnPaintで描画せよと仰っているのに、
そう言ってるということは助言を無視してクリックイベント内で描画したままということでしょうから…。


かんとく  2014-08-27 08:32:13  No: 46631

ありがとうございました。

助監督さんの言うとおりですね。
DEKOさんの助言を無視してしまっていたみたいです。

procedure TForm2.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
にコードを書いたら、線が描画されました。

ただ、正直、DEKOさんのサイトに記載されている、「OnPaint イベントにて自前で描画する必要があります。」と言うのが、具体的にどうしたらよいのかが、分かりませんでした。
決して、無視しようとして無視したわけではありません。

せっかく教えていただいたのに、すみませんでした。

ほんとに、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加