조회 수 202 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

본 내용은 엑달넷의 귀중한 자료입니다.

 VBA로 생성된 일반 유저폼은 닫기버튼만 활성화 되어 있습니다.

 

ScreenHunter_143 May. 10 21.01.jpg

 

 

 이러한 불편한점을 보완한 엑달유저폼은

 크기조절 및 최소화 버튼, 최대화 버튼이 추가되어 있습니다.

 

ScreenHunter_144 May. 10 21.02.jpg

 

 이외에도 아래 코드를 활용하여 기본폼의 기능추가가 가능합니다.

 

 

<<코드공개>>

 

Option Explicit

Private Const LWA_COLORKEY = &H1  ''' 색상지정값 확정
Private Const LWA_ALPHA = &H2  ''' 투명도 확정
Private Const GWL_EXSTYLE = (-20)  ''' // 확장형윈도우 스타일
Private Const WS_EX_LAYERED = &H80000  ''' // 계층형 윈도우 생성

'############################# SetLayeredWindowAttributes #############################
' 윈도우의 투명도를 조절하는 함수(.NET에서는 기본으루 지원되는..)
' hWnd : 해당 윈도우 핸들
' crKey : 색상값
' bAlpha : 두명도(0~255)
' dwFlags : 상수값(LWA_COLORKEY,LWA_ALPHA) 결정
Private Declare Function SetLayeredWindowAttributes Lib "user32" ( _
 ByVal hWnd As Long, _
 ByVal crKey As Long, _
 ByVal bAlpha As Byte, _
 ByVal dwFlags As Long) As Long


Private Const GWL_STYLE = (-16)  ''' // 윈도우 스타일
Private Const WS_OVERLAPPED = &H0&    ''' // 기본윈도우값
Private Const WS_POPUP = &H80000000  ''' 팝업윈도우로 생성 (차일드랑 함께 사용불가)
Private Const WS_CHILD = &H40000000   ''' // 자식윈도우로 생성
Private Const WS_MINIMIZE = &H20000000  ''' // 최소화 상태로 생성
Private Const WS_VISIBLE = &H10000000  ''' // 생성과 동시에 화면에 출력
Private Const WS_DISABLED = &H8000000  ''' // 사용금지된 상태로 생성
Private Const WS_CLIPSIBLINGS = &H4000000
Private Const WS_CLIPCHILDREN = &H2000000
Private Const WS_MAXIMIZE = &H1000000   ''' // 최대화 상태로 생성
Private Const WS_CAPTION = &HC00000  ''' // 타이틀바를 가진윈도우 생성
Private Const WS_BORDER = &H800000  ''' // 단선으로 된 경계선 생성 (크기조정 불가)
Private Const WS_DLGFRAME = &H400000  ''' // 두꺼운경계선을 생성 (타이틀 바 비생성)
Private Const WS_VSCROLL = &H200000  ''' // 수직스크롤바 생성
Private Const WS_HSCROLL = &H100000  ''' // 수평스크롤바 생성
Private Const WS_SYSMENU = &H80000  ''' // 시스템메뉴 생성
Private Const WS_THICKFRAME = &H40000  ''' // 크기조정이 가능하게 생성
Private Const WS_GROUP = &H20000
Private Const WS_TABSTOP = &H10000  ''' // 탭키 사용가능
Private Const WS_MINIMIZEBOX = &H20000   ''' // 최소화버튼 생성
Private Const WS_MAXIMIZEBOX = &H10000  ''' // 최대화버튼 생성
Private Const WS_TILED = WS_OVERLAPPED  ''' // 타이틀바(캡션) 생성
Private Const WS_ICONIC = WS_MINIMIZE  ''' // 최소화 상태로 생성
Private Const WS_SIZEBOX = WS_THICKFRAME  ''' // 크기조정이 가능하게 생성
Private Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Private Const WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
Private Const WS_POPUPWINDOW = (WS_POPUP Or WS_BORDER Or WS_SYSMENU)
Private Const WS_CHILDWINDOW = (WS_CHILD)  ''' 자식윈도우
Private Const WS_EX_DLGMODALFRAME = &H1&  ''' // 드래그 되는 파일을 받을수 있도록 생성
Private Const WS_EX_NOPARENTNOTIFY = &H4&
Private Const WS_EX_TOPMOST = &H8&  ''' /// 다른윈도우에 가려지지 않는 윈도우 생성(최상위)
Private Const WS_EX_ACCEPTFILES = &H10&  ''' // 드래그 되는 파일을 받을수 있도록 생성
Private Const WS_EX_TRANSPARENT = &H20&  ''' // 투명한 윈도우 생성
Private Const WS_EX_MDICHILD = 40   ' - MDI 차일드 윈도우 생성
Private Const WS_EX_CONTROLPARENT = (WS_OVERLAPPED Or WS_TABSTOP)


'############################# GetWindowLong #############################
' 윈도우의 속성값 알기
' HWnd : 윈도우 핸들
' nIndex : 윈도우 속성값
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
 ByVal hWnd As Long, _
 ByVal nIndex As Long) As Long

'############################# SetWindowLong #############################
' 윈도우의 속성지정
' HWnd : 윈도우 핸들
' nIndex : 윈도우 속성값
' dwNewLong : 새로운 윈도우 속성값
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
 ByVal hWnd As Long, _
 ByVal nIndex As Long, _
 ByVal dwNewLong As Long) As Long

'########################## FindWindow ############################
'           윈도우핸들값 알기(캡션명 혹은 클래스명으로)
' lpClassName : 검색할 윈도우의 클래스명(Null값 허용)
' lpWindowName : 검색할 윈도우의 타이틀(캡션)명(Null값 허용)
'##################################################################
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
 ByVal lpClassName As String, _
 ByVal lpWindowName As String) As Long


'################################# Sleep ################################
' 지정 시간만큼 잠시 멈춘다
' dwMilliseconds :사용자 시간 지정 (1000 - > 1초)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Private Sub UserForm_Activate()
  Dim hWnd As Long, Ret As Long
  Dim i As Integer
 
  hWnd = FindWindow("ThunderDFrame", Me.Caption)     '## 현재유저폼의 핸들값을 얻어온다(유저폼이믄서 캡션값두 동일한)
  Ret = GetWindowLong(hWnd, GWL_STYLE)            '## 현재 생성된 윈도우 속성을 얻어온다
  Ret = Ret Or (WS_MINIMIZEBOX) '''// 최소화버튼 생성
  Ret = Ret Or (WS_MAXIMIZEBOX) '''// 최대화버튼 생성
  Ret = Ret Or (WS_SIZEBOX) '''// 크기조정이 가능하게 생성
  Call SetWindowLong(hWnd, GWL_STYLE, Ret)        '## 윈도우 속성변경
 
End Sub


List of Articles
번호 제목 글쓴이 날짜 조회 수
» 자유롭게 조절가능한 엑달유저폼 file 엑셀의달인 2017.05.10 202
1 엑셀의달인 기본 베이직양식 v1.0 file 엑셀의달인 2017.05.08 92
Board Pagination Prev 1 Next
/ 1

엑셀의달인
email:osk81@naver.com | 주소:경기도 파주시 후곡로 50 | Phone:010-0000-0000
All Right Reserved www.exdal.net

LOGIN INFORMATION

로그인
loginbox