VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 フォーム関係のメニュー
1.表示しているフォームを一度に閉じる
2.フォームの背景にグラデーションを描く
3.メニューの下に3Dラインを引く
4.アクティブなウィンドウだけをタスクバーに表示する
5. フォームを常に手前に表示する
6.フォームの最大化・最小化を取得及び設定・画面の中央に表示する
7.システムメニュー(フォームの左上)を操作する
8.タイトルバーなしウィンドウの作成
9.円形・多角形のフォーム及びコントロールを作成する
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、当サイト内に掲載のフォームに関するサンプル


9.円形・多角形のフォーム及びコントロールを作成する
1.円形のフォームを作成する
2.多角形のフォーム及びコントロールを作成する
3.
4. 
5. 
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:                  参照設定方法参照
使用 API:SetWindowRgn / CreateEllipticRgn / DeleteObject / CreatePolygonRgn
その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。
    :
このページのトップへ移動します。 1.円形のフォームを作成する

Option Explicit   'SampleNo:026  2002.04.27

'指定の領域をウィンドウ領域として設定する(P335)
Private Declare Function SetWindowRgn Lib "user32" _
  (ByVal hWnd As Long, ByVal hRgn As Long, _
  ByVal bRedraw As Boolean) As Long

'円形・楕円形の領域を作成する(P321)
'X1=左上隅のX座標 Y1=同Y座標 X2=右下隅のX座標 Y2=同Y座標
Private Declare Function CreateEllipticRgn Lib "gdi32" _
  (ByVal X1 As Long, ByVal Y1 As Long, _
  ByVal X2 As Long, ByVal Y2 As Long) As Long

'グラフィックオブジェクトを削除しシステムリソースを解放する(P261)
Private Declare Function DeleteObject Lib "gdi32" _
  (ByVal hObject As Long) As Long

Private Sub Form_Load()
  Dim MaruSet As Long
  Dim Result As Long
  Form1.Move 700, 1000, 6000, 6000
  Set Me.Picture = LoadPicture("c:\VBRescu1\Image.jpg")

  '丸い領域を作る()内の数値を変えると楕円や円の大きさが変わります
  MaruSet = CreateEllipticRgn(20, 20, 290, 290)
  Result = SetWindowRgn(Me.hWnd, MaruSet, True)
  'オブジェクトを削除しシステムリソースを解放する
  Result = DeleteObject(MaruSet)
End Sub


 図1.上記実行結果
 form09_01.gif

このページのトップへ移動します。 2.多角形のフォーム及びコントロールを作成する

Option Explicit   'SampleNo:026  2002.04.27  @ 2006.12.28

'指定の領域をウィンドウ領域として設定する(P335)
Private Declare Function SetWindowRgn Lib "user32" _
  (ByVal hWnd As Long, ByVal hRgn As Long, _
  ByVal bRedraw As Boolean) As Long

'円形・楕円形の領域を作成する(P321)
'X1=左上隅のX座標 Y1=同Y座標 X2=右下隅のX座標 Y2=同Y座標
Private Declare Function CreateEllipticRgn Lib "gdi32" _
  (ByVal X1 As Long, ByVal Y1 As Long, _
  ByVal X2 As Long, ByVal Y2 As Long) As Long

'多角形の領域を作成する(P322)
Private Declare Function CreatePolygonRgn Lib "gdi32" _
  (lpPoint As POINTAPI, ByVal nCount As Long, _
  ByVal nPolyFillMode As Long) As Long

'グラフィックオブジェクトを削除しシステムリソースを解放する(P261)
Private Declare Function DeleteObject Lib "gdi32" _
  (ByVal hObject As Long) As Long

Private Type POINTAPI
  X As Long  '多角形の頂点のx座標
  Y As Long  '  同    y座標
End Type
Private Const WINDING = 2  '全域塗りつぶしモード

Private Sub Form_Load()
  Dim hRgn  As Long
  Dim lppt(4) As POINTAPI
  Dim nCount As Long
  Dim Result As Long
  Me.Move 0, 1000, 6000, 6000
  Command1.Move 0, 0, 6000, 6000
  'Command1.Style =1    'プロパティで設定して下さい
  Command1.BackColor = vbRed
  nCount = 5 '多角形の頂点の数
  '星形の頂点の座標
  lppt(0).X = 100: lppt(0).Y = 180
  lppt(1).X = 380: lppt(1).Y = 180
  lppt(2).X = 150: lppt(2).Y = 350
  lppt(3).X = 240: lppt(3).Y = 80
  lppt(4).X = 330: lppt(4).Y = 350
  '関数を実行して領域のハンドルを取得
  hRgn = CreatePolygonRgn(lppt(0), nCount, WINDING)
  'ウィンドウ領域として設定する
  Result = SetWindowRgn(Me.hWnd, hRgn, True)
  'オブジェクトを削除しシステムリソースを解放する
  Result = DeleteObject(hRgn)
End Sub

Private Sub Command1_Click()
  Command1.Visible = False
  Me.BackColor = vbBlue
End Sub

Private Sub Form_Click()
  Unload Me
End Sub


 図2.Command1 に描画した場合         図3.Form1 に描画した場合
 form09_02.gif  form09_03.gif
このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
円形のフォームを作成する  多角形のフォームを作成する  円形のコントロールを作成する  多角形のコントロールを作成する  円形のピクチャーコントロールを表示する




このページのトップへ移動します。