#351 | 透けるフォームの作り方 | フォーム、API | |
あまり実用性があるとはいえませんが、Accessのフォームの一部をくり抜いて、背景が透けて見えるフォームの作り方を紹介します。 ここでは「リージョン」を操作するWindows APIを用いて、ある領域をくり抜きます。リージョンとはいくつかの点から構成される領域のことで、くり抜きや塗りつぶしなどの設定、あるいは領域の判定に使ったりするものです。 透けるフォームを作るには、次のようなコードをそのフォームのモジュールに記述します。 Option Compare Database Option Explicit Private Declare Function CreateRectRgn Lib "GDI32" _ (ByVal X1 As Long, ByVal Y1 As Long, _ ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CombineRgn Lib "GDI32" _ (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, _ ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long Private Declare Function SetWindowRgn Lib "USER32" _ (ByVal hWnd As Long, ByVal hRgn As Long, _ ByVal bRedraw As Long) As Long Private Declare Function DeleteObject Lib "GDI32" _ (ByVal hObject As Long) As Long Private Const RGN_AND = 1 Private Const RGN_OR = 2 Private Const RGN_XOR = 3 Private Const RGN_DIFF = 4 Private Const RGN_COPY = 5 Private Sub Form_Load() 'フォーム読み込み時 Dim lngFrmRgnhWnd As Long Dim lngRgnhWnd As Long Dim lngCombineRgn As Long 'フォーム全体のリージョンを作成 lngFrmRgnhWnd = CreateRectRgn(0, 0, Me.InsideWidth / 12, Me.InsideHeight / 12) '四角形のリージョンを作成 lngRgnhWnd = CreateRectRgn(50, 50, 230, 200) '描画用リージョンを作成 lngCombineRgn = CreateRectRgn(0, 0, 0, 0) 'リージョンを結合(フォームから四角形エリアをくり抜き) CombineRgn lngCombineRgn, lngFrmRgnhWnd, lngRgnhWnd, RGN_DIFF 'リージョンを再描画 SetWindowRgn Me.hWnd, lngCombineRgn, True 'リージョンの削除 DeleteObject lngFrmRgnhWnd DeleteObject lngRgnhWnd DeleteObject lngCombineRgn End Sub 実行画面: ※ここでは(知識不足もあって)かなり簡便な方法で例示しています。"こんなこともできる"といった程度のサンプルとしてご覧ください。
|
|||
|
Copyright © T'sWare All rights reserved |