描いた折れ線のクリックイベント

解決


ピコ  2013-03-13 03:28:52  No: 44028

こんにちは。
ひとつ教えて下さい。

フォーム上(TImage上?)に折れ線を描き、
その折れ線をクリックしたらShowMessageしたいのですが、
どういう方法がありますか?

例えば、TLabelを動的生成した場合での、
Clickイベントの取り方は理解できたのですが、
斜め線とかもあるのでTLabelでは描けず、
どうするのか、わかりません。

どなたか教えて下さい。
よろしくお願いします。

//線を描く(のみ)
  Image1.Picture.Assign(nil);
  Image1.Transparent := True;
  Image1.Picture.Bitmap.Canvas.Brush.Style := bsClear;
  Image1.Picture.Bitmap.SetSize(Image1.Width,Image1.Height);
  Image1.Picture.Bitmap.Canvas.Pen.Width :=3;
  Image1.Picture.Bitmap.Canvas.Pen.Color :=clRed;
  Image1.Picture.Bitmap.Canvas.MoveTo(100,100);
  Image1.Picture.Bitmap.Canvas.LineTo(200,200);
  Image1.Picture.Bitmap.Canvas.LineTo(300,100);


ピコ  2013-03-13 03:30:13  No: 44029

開発環境は、Delphi XE3、Windows7  です。


Mr.XRAY  2013-03-13 04:40:44  No: 44030

>どうするのか、わかりません。

ネット上とか,参考書で調べました ?

>その折れ線をクリックしたらShowMessageしたいのですが、

これには,いろいろな方法というか,アルゴリズムがあります.
画像処理や図形処理等で検索すると情報があるかも知れません.
その折れ線が,どのようなアプリケーションで,どのような位置付けかにもよります.

こういったアルゴリズムは,昔からあり,確定されているのもあります.
ネット上よりも,参考書を漁ったほうがいいのかも知れません.
と,書くと,お金はかけたくない,と言う方がいますが,そうなると何とも.... (^^;

>どういう方法がありますか?

あくまでも,1つの例です.こんな方法もあります.

[R170_ZLine 図形描画とマウスイベントの透過]
http://mrxray.on.coocan.jp/Delphi/ResizeSamples/R170_ResizeZLine.htm


Mr.XRAY  2013-03-13 04:47:36  No: 44031

[追記]
Delphi XE3 でしたら,GDI+ のライブラリが最初からあります.
ダウンロードする必要はありません.


ピコ  2013-03-14 19:24:45  No: 44032

>Mr.XRAY さん

すみません。
読み直しましたが「どうするのか、わかりません」という表現は不適切でした。
折れ線を描いたけどクリック判定の取り方がわからず、
(脱線して)TLabelで擬似的に折れ線できないか、とまで考えてしまいました・・・
というお話でした。

>参考書
最近、ネットで買うようになってから書店に行く機会が減ってしまいましたが、
たまには行って見てみないといけませんね。

>GDI+
ありがとうございました。
これを使うと簡単に判定できるのですね。

ただ、背景透過ができなくて困りました。
Imageコンポーネントを2つ重ねて、下に画像・上に折れ線、としたいので、
透過する方法がないか調べてみます。

できなかったらGDI+は諦めて、「マウス位置と折れ線との距離を算出して判定」
という方法をとってみようと思います。

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


Mr.XRAY  2013-03-14 23:24:07  No: 44033

解決済ということてすので,この掲示板をご覧になっている方への
当サイトの宣伝です.

>ただ、背景透過ができなくて困りました。

本題とは違いますが,これは,おそらく,TImage の背景が透過されない.
ということだと思います.

提示したページの記事中に [156][02_ビットマップの透過色の設定] へのリンクがあります.
このページの
http://mrxray.on.coocan.jp/Delphi/plSamples/156_BitmapOverlayDraw.htm#fig4

に 図4 と 図5 があります.
図4  TImage の背景は「白」です.
図5  TImage の背景は透過してフォームの背景色となっています.

TImage が内部で描画しているのは,全てビットマップです(表示の画像の種類とは関係なく),
ということは,TBitmap の背景透過と同じ方法が使えます.
Tmage1.Picture.Bitmap の,あるピクセルの色を透過色にすることで透過することができます.

同じページの説明にも書いておきましたが,Delphi 2009 以降であれば,
アルファチャンネルが使えます.すると,透過色の「色」を気にする必要はありません.
そのサンプルが,同じページの

http://mrxray.on.coocan.jp/Delphi/plSamples/156_BitmapOverlayDraw.htm#03

です,
当サイトの記事は「何回」読んでも「難解」という評判ですが,
もし,興味がありましたら,お読み頂ければ幸いです.


Mr.XRAY  2013-03-14 23:36:54  No: 44034

追加の宣伝です.

当サイトのサンプルは,全てプロジェクトのソースコードがダウンロードできます.
各ページの先頭を表示すると,フォルダのアイコンがあります.
これをクリックすると,ダウンロードできます.
実行ファイルである EXE ファイルも入っていますから,すぐテストできます.


Mr.XRAY  2013-03-15 02:39:39  No: 44035

>に 図4 と 図5 があります.
>図4  TImage の背景は「白」です.
>図5  TImage の背景は透過してフォームの背景色となっています.

スミマセン.間違えていました.

図3 ではTImage の背景は「白」
http://mrxray.on.coocan.jp/Delphi/plSamples/156_BitmapOverlayDraw.htm#fig3

図4 と 図5 ではTImage の背景は透過
http://mrxray.on.coocan.jp/Delphi/plSamples/156_BitmapOverlayDraw.htm#fig4


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

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






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