Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


61365 / 76738 ←次へ | 前へ→

【19993】Re:背景の透明化(?)
回答  ちん  - 04/11/22(月) 18:06 -

引用なし
パスワード
   ▼ケン坊 さん:
>ありがとうございます!
>自分はこれで思った通りのプログラムを書くことができると思います!!
>
>でも参考までに聞きたいのですがサイクロトロンは
>移動させるために四角が上に表示されていたはずですが、
>あのように丸と四角や丸と丸など、二つ以上の形にすることはできますか?
 こんばんは、ちんといいます。
API関数の本を持っていないので、IEから関数を検索した結果で、お答えします。
リージョンの結合(CombineRgn関数)という関数を使用し、形を変えるまたは、
別な場所を切り抜いたりするようです。
http://www5d.biglobe.ne.jp/~tomoya03/shtml/vbapi/Region2.htm

(1)標準モジュール
Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function CreateRoundRectRgn Lib "gdi32" ( _
    ByVal X1 As Long, ByVal Y1 As Long, _
    ByVal X2 As Long, ByVal Y2 As Long, _
    ByVal X3 As Long, ByVal Y3 As Long) As Long

Private hRgn  As Long
Declare Function GetActiveWindow Lib "user32" () As Long
Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

*** 今回追加。
Declare Function CombineRgn Lib "gdi32" ( _
  ByVal hDestRgn As Long, _
  ByVal hSrcRgn1 As Long, _
  ByVal hSrcRgn2 As Long, _
  ByVal CombineMode As Long) As Long

Declare Function CreateEllipticRgn Lib "gdi32" ( _
  ByVal LeftRect As Long, _
  ByVal TopRect As Long, _
  ByVal RightRect As Long, _
  ByVal BottomRect As Long) As Long


  Public Const RGN_AND = 1& 'リージョン同士のAND結合
  Public Const RGN_OR = 2& 'リージョン同士のOR結合
  Public Const RGN_XOR = 3& 'リージョン同士のXOR結合
  Public Const RGN_DIFF = 4& 'hSrcRgn1から、hSrcRgn2を除いた領域
  Public Const RGN_COPY = 5& 'hSrcRgn1のコピーを作成
  Public Const RGN_MIN = RGN_AND
  Public Const RGN_MAX = RGN_COPY
  '------------------戻り値-------------------
  '関数が終了すると、リージョンの複雑度が返る
  '次の値のいずれかになる
  Public Const ERRORAPI = 0& 'リージョンは作成されていない
  Public Const NULLREGION = 1& 'リージョンは空
  Public Const SIMPLEREGION = 2& 'リージョンは単一の長方形
  Public Const COMPLEXREGION = 3& 'リージョンは単一の長方形よりも複雑な形


Public Function xGetActiveWindow() As Long
  xGetActiveWindow = GetActiveWindow
End Function

(2)Form
Private Sub CommandButton4_Click()
  Dim wRgn1 As Long '結合リージョンサンプル
  Dim wRgn2 As Long
  Dim wRgn As Long '結合後のリージョン
Dim hwnd As Long
hwnd = xGetActiveWindow

  '角の丸い長方形のリージョンを作る
  wRgn1 = CreateRoundRectRgn(0, 0, 300, _
                300, 320, 320)
  '楕円のリージョンを作る
  wRgn2 = CreateEllipticRgn(0, 0, _
               200, 200)
  '長方形のリージョンを作る
  wRgn = CreateRectRgn(0, 0, 400, _
             400)

  'リージョンを結合して新しいリージョンをwRgnに格納
  CombineRgn wRgn, wRgn1, wRgn2, RGN_XOR
  SetWindowRgn hwnd, wRgn, True
End Sub

Private Sub CommandButton5_Click()
  Dim wRgn1 As Long '結合リージョンサンプル
  Dim wRgn2 As Long
  Dim wRgn As Long '結合後のリージョン
Dim hwnd As Long
hwnd = xGetActiveWindow

  '角の丸い長方形のリージョンを作る
  wRgn1 = CreateRoundRectRgn(0, 0, 300, _
                300, 320, 320)
  '長方形のリージョンを作る
  wRgn = CreateRectRgn(0, 0, 400, _
             400)

  'リージョンを結合して新しいリージョンをwRgnに格納
  CombineRgn wRgn, wRgn1, wRgn, RGN_XOR
  SetWindowRgn hwnd, wRgn, True

End Sub

こんな感じでイメージわきますでしょうか?
以上、参考までに・・・
3 hits

【19764】背景の透明化(?) ケン坊 04/11/16(火) 16:26 質問
【19768】Re:背景の透明化(?) 角田 04/11/16(火) 16:39 発言
【19842】Re:背景の透明化(?) ni 04/11/17(水) 19:03 発言
【19864】Re:背景の透明化(?) ちん 04/11/18(木) 9:46 回答
【19969】Re:背景の透明化(?) ケン坊 04/11/21(日) 0:57 質問
【19993】Re:背景の透明化(?) ちん 04/11/22(月) 18:06 回答

61365 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free