掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TImageのようにオブジェクト別にクリックを取得でき、透明な背景に線を引けるクラスは? (ID:20685)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
すこし考えてみました。 デル太さんがどのような図形を想定してるのか、いまいち分かりません ので、線は線分、四角は枠だけ、楕円はわっかだけ、として厳密に描かれている ピクセルをクリックしたときだけ、「手をあげる」簡単な方法を思いつき ました。 PaintBox と同じサイズの Bitmap を用意して、PixelFormat を pf24bit にして ObjectList と同様に、どこかにしまっておきます。そして、TZukei の protected フィールドに FColor:TColor をもうけ、派生クラスの TLine や TEllipse を動的に作成するときに、順番に色を設定します。 予め ColorCounter: integer; としておいて FColor := TColor(ColorCounter); Inc(ColorCounter); とすると、個々のオブジェクトは違った色を持つことになります。そして、 PaintBox に自分を描くのと全く同様にしてしまってある Bitmap にも 一度だけ描きます。ただし、そのときは、自分の色で描きます。ユーザが PaintBox をクリックしたとき、その座標で Bitmap の Pixels[] で色を調べると 背景色(デフォルトのビットマップは白 = $FFFFFF)と違う場合、どのオブジェクトが クリックされたのか色を比較して分かると言うわけです。 TColor は integer にキャストできますので、if で簡単に一致が確認できます。 枠や輪っかではなく、領域としたい場合は、ビットマップの Canvas のブラシに も同じ色を設定する(bsSolid で)といいです。もちろん、輪っかのときは bsClear で。 図形が重なっていると、最後に描かれた図形だけが手をあげます。これはユーザの 感覚と一致するのではないでしょうか。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.