投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/5/26 18:01:33
VB のバージョンも明記しましょう。

> テキストボックスにある都道府県に
TextBox に入力させるよりも、
ComboBox から選択させる方が良い気がします。

以下、開発環境が何であるかわからないので、具体的なコードの提示は避けて方法論だけ:

> 色を塗りたいです。
(案1) 黄色と透明色の 2 色だけの画像(各県の形のもの)を重ねて描画する。
(案2) 塗りつぶし箇所に対するマスクを用意し、それを使って塗りつぶす。
(案3) ExtFloodFill API を使って、閉じた領域を塗りつぶす。
(案4) 塗りつぶし領域に対する Region を作成しておき、それを使って塗りつぶす。
(案5) 県境の輪郭部分の座標を調べておき、それを使って塗りつぶす。


1 はセル画のイメージ。VB6 では透過画像の扱いに制限があるため使いにくいですが、
 VB.NET では png 画像を描画する事で、比較的簡単に実装できます。
 都道府県分の画像数を保持しておくことになるため、データサイズが増加するのが難点です。

2 はスプライト処理。これも、マスク画像を都道府県の数だけ用意する必要があります。
 VB6 の場合は PaintPicture を使います。あるいは ImageList コントロールを使う手も。
 http://homepage1.nifty.com/rucio/main/technique/teq_13.htm
 http://rucio.cloudapp.net/CommentDetail.aspx?ThreadId=9641&CommentId=15402

3 は VB6 のヘルプ「hDC プロパティの使用例」に載っています。
  VB.NET なら過去ログにサンプルがあります。API を使う事になりますが、
 各都道府県内の座標 1 つを用意するだけなので、必要なデータ量はもっとも少なくて済みます。
 http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9715

4 は私が良く使う手法です。リージョン情報を RegionData のバイナリとして保持しておき、
 それを Region クラスに復元してから FillRegion メソッドで塗りつぶします。
 http://dobon.net/vb/dotnet/graphics/fillregion.html
 http://dobon.net/vb/dotnet/graphics/setclip.html

5 は、下記の VB.NET 向けサンプルが参考になるかも。
 http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=10147#CommentId20330