canvasにLineToやrectとかellipseで描画し、その図形にプロパティを持たせるにはどうすれば良いんでしょうか。
図形をポイントしたら座標や図形名をtip表示させたり、プロパティをDBと連動させたりしたいのですが。
代わりにリージョンで描画するのはどうでしょうか?
リージョンだとAPI関数のPtinRegionを使用すれば,
マウスポインタがどの図形を選択しているか特定が容易と思います。
リージョンはハンドルで管理されているので,
グローバル変数で配列化してしまえば複数管理は可能かな。
あと図形にプロパティを持たせたいということは
,何かしら値を保持したいということかな?
だったら自作の型を宣言してリージョンと連携させればいいかと思います。
私はこれぐらいしか案が浮かびません。
昔,日本地図の都道府県をクリックしてレスポンスを返すプログラムを作ったのですが今見返すと結構複雑・・・。
他に良い手法あればソースを見直す際に私も参考にしたいと思います。よろしくお願いします。
リージョン扱う関数を紹介しているHP貼り忘れ
http://www.geocities.jp/asumaroyuumaro/program/winapi/region.html
その描いた図形の用途や,どんな状況で使用するかにもよりますが,
一つの方法として,クラスにしてしまうことが考えられます.
線のクラス
四角形のクラス
円(楕円)のクラス
等など.
クラスにすれば,色,座標,線の太さなどのプロパティもメソッドやイベントも
定義できます.
必要に応じて,これらのクラスを定義したコンポーネントにしてもよいかと.
[Additional]タブのTShapeがそんな感じですね.TShapeのようなものを実行時に
生成するイメージでしょうか.
TShapeから派生してもいいかも...
皆さん、ありがとうございます。
まさにRuさんが言われるように、地図と連動して、ブックマークやメモを残したり、ブックマーク間に経路を残したりということを実現したいのです。
Mr.Xrayさんがおっしゃるようにクラス化も考えたのですが、なかなか容易には行きそうにありませんね。
地図を色塗りしてもいいのでしたら
MouseDownで
そのキャンバスの色を取得して
..Canvas.Pixels[x,y];
図形を特定するのはどうでしょうか。
図形の重なりがあるくらい、複雑に図形を配置するなら、それぞれを
コンポーネント化して重ね合わせるより、Canvasに描画するだけのクラス化を
したほうがいいのかな。
地図の上にTImageやTPaintBoxを一枚重ねるだけで描画できる。
拡大・縮小を考えるなら、実寸<=>描画スケールの座標変換を追加。
Ruさんのようにリージョンを使うのではないため、図形のヒットは全部自力計算。
などと難しそうな意見を提出してみる。
ツイート | ![]() |