VB] SendKeys

P/L/Visual Basic 2013. 3. 5. 10:03


VB에 키 입력을 강제로 보내는 함수가 존재하였다..



Sub SendKeys(String As String, [Wait])

 VBA.Interaction 구성원

키 입력을 활성 창에 보냅니다.




Ex)

SendKeys "{TAB}"


탭키를 활성창에 보냄.

Posted by 야동우
,

RecordSet Display


rs의 내용을 스프레드에 뿌려줄때...
(1)스프레드의 표현형식이 rs의 각 필드 형식과 맞게 뿌려주는 방법
형식이 numeric인데도 오른쪽 정렬되는 군요...

'''*** (1)
.Col = llngCol '''*** 작업대상 컬럼 지정
.Row = -1 '''*** 전체 Row 지정
.CellType = CellTypeFloat '''*** Cell 타입을 Float 타입으로 설정
.TypeFloatDecimalPlaces = 0 '''*** 소숫점 이하 자리수
.TypeFloatMax = "99999999999999" '''*** 최대값 설정


(2)셀너비를 자동으로 맞추는 함수를 사용했는데..
유독 한글이 포함된 필드는 거의 반까지만 너비를 잡는군요..

'''*** (2)
.Visible = False '''*** 셀의 폭을 정렬할때 데이타의 양에 따라 속도가 느려집니다. 너무느릴경우 사용하세여.
.ColWidth(llngCol) = 1000 '''*** 이줄을 넣었을때와 않넣었을때의 차이점은 직접판단하시길...
.ColWidth(llngCol) = .MaxTextColWidth(llngCol) '''*** 해당 컬럼을 최적의 폭으로 정렬.
.Visible = True


(3)rs의 필드명을 헤드명으로 올리는 방법은 없나요..

'''*** (3)
.Col = llngCol
.Row = 0
.Value = ladoRST.Fields(llngCol - 1).Name


(4)스프레드의 필드 숫자와 rs의 필드숫자와 일치시키는 방법은 없나요..

'''*** (4)
.MaxCols = ladoRST.Fields.Count

[출처] RecordSet Display|작성자 눈꽃

Posted by 야동우
,

 

 

 

Sub Test_Sub(Optional ByVal val1 As Long = 1)

 

End Sub 

 

 

 

젊은 나이에 벌써 가물가물해져서.. 좀 써놔야겠다 ㅠ

Posted by 야동우
,

 

아이콘 컬러에 따른 프로그래밍 툴 호환여부

- 사이즈는 관계가 없으나 컬러비트수에 따라서 호환 안되는 아이콘이 있었다.

 

(Test Icon Tool : Articons_Pro_v5.exe)

(Test Programming Tool : Microsoft Visual Basic 6.0)

종류

Bit

호환가능 여부

오류 메세지

MonoChrome

1

가능

 

16 colors

4

가능

 

256 colors

8

가능

 

True Colors

24

가능

 

True Colors

32

불가능

그림이 잘못되었습니다.

 

 

아이콘 사이즈에 따른 OS 호환 여부

- 아이콘 컬러에 따른 제한은 위에서 확인했으나, 아이콘 사이즈에 따라서 호환되는 OS와 되지 않는 OS가 있었다.

- 위의 테스트로 만든 exe 파일로 실험하였음.


  (Test OS : Windows XP-32bit, Windows 7-64bit)

사이즈

WinXP(32bit)

Win 7(64bit)

오류 메세지

16 x 16

실행가능

실행가능

 

24 x 24

실행가능

실행가능

 

32 x 32

실행가능

실행가능

 

48 x 48

실행가능

실행가능

 

256 x 256

실행가능

실행불가능

‘50003’ 런타임 오류가 발생하였습니다.

예기치 않은 오류가 발생하였습니다.

custom

되겠지 0-;

사이즈에 따라서..

 

 

나름대로 결론 : Microsoft Visual Basic 6.0 으로 프로그래밍할 때, 64bit OS와의 호환성을 고려한다면,
                                   
실행아이콘의 사이즈는 최대 48 x 48, 컬러는 최대 24bit 로 만들어서 사용해야지 ㅎㅎ

 

Posted by 야동우
,

i = i And (Not 3)               ' 4의 배수로 만든다.
Posted by 야동우
,
Rnd() 함수의 강의
↓↓↓↓↓↓↓↓↓↓↓
http://blog.naver.com/pok_nso?Redirect=Log&logNo=70098090252


But, 위의 Rnd 함수만 이용을 하게 될 경우 매 프로그램 시작시 같은 값을 생성하게 됩니다.
그래서는 Rnd() 를 쓰는 의미가 없겠지요.

이 경우 Randomize  라는 구문을 사용하면 됩니다.
Rnd 함수를 쓰기 전 한번만 사용해 주면 되는거죠.


학창시절에 C로 랜덤함수 구현할때도 시드머시기로 난수를 제대로 발생시킬 수 있게 만들어줬던 기억이... (그건 시간값을 가져왔던거 같은데...)
Posted by 야동우
,
[Reference] : 진진, 「비주얼 베이직 개발 - 반투명 처리 퍼옴」 http://antidebug.coolsoft2.com/?mid=vb_dev&document_srl=747530.


Option Explicit
Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Declare Function GetForegroundWindow Lib "user32" () As Long
Declare Function BitBlt Lib "GDI32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Public Const SRCCOPY = &HCC0020
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Const HTCAPTION = 2
Public iRecursion As Boolean
Public Hcolor As Long

'반투명
Public Sub T_P(T_Pic As PictureBox, Optional Hcolor As Long)
On Local Error Resume Next
Dim HW As Long
Dim HA As Long
Dim iLeft As Integer
Dim iTop As Integer
Dim iWidth As Integer
Dim iHeight As Integer
If IsMissing(Hcolor) Or Hcolor = 0 Then
Hcolor = RGB(1, 255, 185) '원하는 색 지정
'Hcolor = RGB(0, 0, 0) 'GetForegroundWindow()
End If
T_Pic.AutoRedraw = True
T_Pic.Visible = False
DoEvents
HW = GetForegroundWindow()
HA = GetDC(HW)
iLeft = T_Pic.Left / Screen.TwipsPerPixelX
iTop = T_Pic.Top / Screen.TwipsPerPixelY
iWidth = T_Pic.ScaleWidth
iHeight = T_Pic.ScaleHeight
'Call BitBlt(T_Pic.hdc, 0, 0, iWidth, iHeight, HA, iLeft + 1, iTop + 1, SRCCOPY)
Call BitBlt(T_Pic.hdc, 0, 0, iWidth, iHeight, HA, T_Pic.Left, T_Pic.Top, SRCCOPY)
Call ReleaseDC(HW, HA)
T_Pic.DrawMode = 9
T_Pic.ForeColor = Hcolor
T_Pic.Line (0, 0)-(iWidth, iHeight), , BF
T_Pic.Visible = True
End Sub

'사용

Call T_P(Me.Car_Detect, Hcolor)





흠..... 해보니 반투명 안되는데.....-_-;;;;;;

'P/L > Visual Basic' 카테고리의 다른 글

정수를 4의 배수로 만들기  (0) 2011.12.18
Visual Basic] 랜덤함수 Rnd() 와 Randomize  (0) 2011.12.15
MsgBox  (0) 2011.12.13
KeyDown(KeyUP)과 KeyPress의 차이점  (0) 2011.12.08
[Visual Basic] WindowState 속성  (0) 2011.12.07
Posted by 야동우
,

MsgBox

P/L/Visual Basic 2011. 12. 13. 16:47
[출처] 21. MsgBox|작성자 쟈드


MsgBox의 깊은 곳

지금까지의 강좌들 중에서 MsgBox를 사용했던 부분이 몇 군데 있었다. 그때는 이 MsgBox에 대해 자세히 설명하지 않고 넘어갔었는데 이제 이 함수에 대해 알아볼 때가 된 것 같다. 비베는 두 개의 대화상자 함수를 제공한다. 그 중 하나는 이 MsgBox이고 다른 하나는 InputBox이다. 먼저 MsgBox에 대해 알아보자. 아래는 지금까지 강좌에서 사용했던 MsgBox의 사용법이다.

MsgBox "어쩌구 저쩌구" 비베는 이 문장을 만나면 아래처럼 대화상자를 보여주게 된다.

그러나 이것만이 MsgBox의 전부는 아니다. 좀 더 완전한 MsgBox의 형식은 아래와 같다.

MsgBox {prompt}[, {button}[, {title}] 이 외에도 도움말과 관련된 인수가 2개 더 있는데 그것들은 설명하지 않기로 하겠다. 지금까지 사용해왔던 사항에서도 알 수 있겠지만 위에서 MsgBox를 호출하면서 건네주었던 인수인 "어쩌구 저쩌구"는 {prompt}에 해당되며 이것은 MsgBox가 보여지면서 표시할 내용이다. 이것은 MsgBox에게 꼭 넘겨야 하는 인수이다.

다음의 {button}은 MsgBox에게 어떤 버튼들을 나타내라고 지시하게 된다. 아무것도 지정하지 않으면 기본적으로 "확인" 버튼이 나타나도록 설정되어 있다. 나머지 {title}은 타이틀바에 나타낼 MsgBox의 캡션이다. 이제 원시적인 MsgBox의 사용에서 벗어나 아래처럼 지정해 보았다.

MsgBox "어쩌구 저쩌구", vbOKCancel, "MsgBox 연습" 결과는 아래와 같다.

MsgBox의 버튼 설정

다른 것은 다 이해가 되었을테고 문제는 아마도 {button} 부분일 것이다. 위에서는 vbOK를 지정했는데 이러한 상수는 미리 정의되어 제공된다. 버튼의 종류를 설정해주는 상수의 종류는 아래와 같다.

    상수

    버튼

    vbOkOnly

    0

    vbOkCancel

    1

    vbAbortRetryIgnore

    2

    vbYesNoCancel

    3

    vbYesNo

    4

    vbRetryCancel

    5

위의 표에서 값이란 상수 대신 그 숫자를 사용해도 된다는 뜻이다. 상수는 그 값에 해당하는 또 다른 이름일 뿐이다. 즉 아래의 두 경우는 완전히 같다고 볼 수 있다.

MsgBox "Test", vbOkOnly MsgBox "Test", 0 여기까지, 여러분은 MsgBox를 호출하면서 어떻게 메세지를 지정하는지, 어떻게 타이틀을 지정하는지, 어떻게 버튼을 지정하는지 알 수 있게 되었다. 그럼 이것을 어디에 사용할 것인가?

MsgBox의 리턴값

기억하겠지만 앞에서 MsgBox에 대해 말하기 시작하면서 MsgBox가 함수라고 했었다. MsgBox는 단순히 사용자에게 어떤 정보를 알려주면서 주의를 환기시키는데 사용될 수도 있지만(가령 파일관리 프로그램에서 몇개의 파일이 지워졌다는 것을 출력) 대개는 다시 프로그램에서 쓰여지기 위해 MsgBox가 되돌려주는 값을 필요로 한다. 그렇다면 먼저 MsgBox가 어떤 값을 리턴하는지 알아보도록 하자.

    상수

    vbOK

    1

    vbCancel

    2

    vbAbort

    3

    vbRetry

    4

    vbIgnore

    5

    vbYes

    6

    vbNo

    7

대충 짐작이 갈 것이다. 아래처럼 MsgBox를 호출하고 MsgBox가 되돌려주는 값을 변수 x에 넣는다고 가정하자('='의 좌변에 다른 항이 있으므로 MsgBox의 인수들은 괄호로 둘러싸여야 한다).

Dim x As Integer x = MsgBox("두 버튼 중 하나를 선택하세요.", vbYesNo, "Test") MsgBox는

의 버튼을 보여줄 것이고 이 중에 하나를 선택하게 될 것이다. 그럼 MsgBox가 리턴하는 값은 분명히 vbYes나 vbNo 중 하나가 된다. vbAbort 등의 값은 나올 수 없다. 이렇듯 MsgBox가 리턴하게 되는 값은 MsgBox를 호출하면서 {button}을 어떻게 지정했느냐에 달려 있다. 만약 {button}에 vbRetryCancel을 지정했다면

의 버튼이 보여지고 이번에는 MsgBox가 리턴하게 될 값은 vbRetry나 vbCancel, 둘 중의 하나가 된다. 덧붙여서 MsgBox는 Esc 키에 의해서도 동작하는데 위와 같은 경우 Esc 키가 눌리게 되면 '취소' 버튼을 누른것과 같은 결과를 가져온다. 즉, MsgBox는 vbCancel을 리턴한다.

그렇다면 MsgBox의 일반적인 사용예를 들어보도록 하겠다. 우리는 흔히 어떤 파일을 지울 때 정말 지울 것인지 확인하는 절차를 거치게 된다. 이것은 주로 MsgBox를 이용해 구현되게 된다. 아래의 코드를 보자.

Dim r As Integer r = MsgBox("이 파일을 정말 지울건가요?", vbYesNo, "파일 삭제 확인") If r = vbYes Then {파일을 지우는 루틴} End if 여기에서 MsgBox를 통해 사용자의 마지막 의견을 물어본 다음 r이 vbYes이면(사용자는 '예' 버튼을 눌렀음) 파일을 지우고 끝낸다. r이 vbNo일 경우에는 파일을 지우지 않고 아무일도 없었던 것 처럼 지나가면 그 뿐이다. 아래는 실제로 실행시킨 그림이다.

디폴트 버튼

앞의 예제에서 버튼을 잘 살펴보자. '예' 버튼은 점선으로 둘러싸여 있다. 이것은 바로 '예' 버튼이 디폴트 버튼으로 엔터키를 눌렀을 때 자동으로 '예' 버튼이 선택되는 것을 뜻한다. 문제는 바로 여기에 있다. 어떤 사용자들은 아무 생각없이 엔터키를 누르기도 하는데 내용을 확인해 보지도 않고 엔터키를 눌러버리면 파일이 지워져 버리는 것이다. 실수였다고 안타까워 하기에는 시간이 이미 늦은 경우가 많다. 물론 코드를 아래처럼 변경해서 이 문제를 해결할 수는 있다.

Dim r As Integer r = MsgBox("이 파일을 지울지 않을거죠?", vbYesNo, "파일 삭제 확인") If r = vbNo Then {파일을 지우는 루틴} End if 문제는 해결되었지만 어딘가 석연치 않은 느낌이다. 이것은 MsgBox에서 첫번째 버튼이 디폴트 버튼이 되기 때문에 생기는 문제로 더 유연한 문제해결 방법으로는 디폴트 버튼을 바꿔주면 된다. 아래의 유연한 코드를 보라. Dim r As Integer r = MsgBox("이 파일을 정말 지울건가요?", vbYesNo + vbDefaultButton2, "파일 삭제 확인") If r = vbYes Then {파일을 지우는 루틴} End if 이렇게 디폴트 버튼을 변경하게 하는 상수는 아래와 같다.

    상수

    의미

    vbDefaultButton1

    0

    첫번째 버튼

    vbDefaultButton2

    256

    두번째 버튼

    vbDefaultButton3

    512

    세번째 버튼

아이콘

이번에 말하려는 것은 버튼과는 상관이 없다. 어떤 MsgBox는 왼쪽 구석탱이에 작은 아이콘을 달고 나오기도 하는데 바로 그것에 관한 이야기이다. 이것 또한 상수로 제공되며 버튼과 관련은 없지만 위의 디폴트 버튼을 변경하는 예제와 마찬가지로 버튼의 설정값에 그 값을 더해 구현된다. 종류는 다음과 같다.

    상수

    아이콘

    의미

    vbCritical

    16

    치명적인 오류

    vbQuestion

    32

    경고 또는 질문

    vbExclamation

    48

    경고

    vbInformation

    64

    참고 사항이나 정보

이러한 아이콘에 특별한 기능이 있는 것은 아니다. 다만 사용자의 주의를 끌기 위한 방법이며 만약 제어판의 소리에서 몇몇 항목에 지정해 놓은 소리가 관련된 아이콘이 나타날 때 들리게 될 뿐이다. 하지만 밋밋한 MsgBox 보다는 이 편이 좀 더 세련된 편이다.

이렇게 해서 MsgBox에 대해 알아 보았다. 무슨 특별한 것도 없는 것인데, 설명하다보니 생각보다 길어지게 되었다. 다음은 InputBox에 대해서 알아보도록 하자.

InputBox

InputBox는 MsgBox와 비슷하지만 사용자로부터 어떤 내용을 입력받기 위해 쓰인다. 아래는 InputBox의 형식이다.

InputBox {prompt}[, {title}][, {default}][, {xpos}][, {ypos}] 실제로는 두 개의 인수가 더 있지만 그것들은 설명하지 않기로 하겠다. {prompt}와 {title}은 MsgBox와 같은 역할을 하므로 설명은 생략하겠다.
  • {xpos}, {ypos}:

    나타나는 InputBox의 x좌표와 y좌표의 픽셀 단위 좌표이다.

  • {default}:

    문자열 상자에 기본적으로 나타날 문자열이다.

그렇다면 다음과 같은 형식으로 명령해보자.

InputBox "아무런 문자나 입력하세요.", "InputBox Test", "아무런" 결과는 아래와 같다.

특별히 어려운 것은 없을 것이다. 그런데 InputBox는 어떤 문자열을 입력받기 위한 것이므로 위와 같이 해주는 것은 아무짝에도 쓸모없는 무용지물일 뿐이다. 위의 코드는 아래와 같은 형식으로 바뀌어야 한다.

Dim r As String r = InputBox("아무런 문자나 입력하세요.", "InputBox Test", "아무런") 변수 r에는 어떤 값이 들어갈까? InputBox에서 '확인'을 누르면 텍스트박스에 입력된 내용이, '취소'를 누르거나 Esc 키를 누르면 길이가 0인 문자열("")이 리턴되어 r에 저장된다.

이렇게 해서 MsgBox와 InputBox에 대해 알아보았다. 특히 MsgBox는 예제에서 가끔 사용될 예정이므로 어느정도는 익혀두도록 하자.


[출처]
21. MsgBox|작성자 쟈드

Posted by 야동우
,

윈도우에서 키보드가 눌려졌을때 먼저 발생하는 메시지는
WM_KEY_DOWN로 빌더의 OnKeyDown이벤트입니다.

이 메시지가 TranslateMessage에 의해 처리되어서 발생하는 메시지가
WM_CHAR 인데.. 이것이 빌더의 OnKeyPress 이벤트죠.

따라서 키보드를 누르게 되면 두개의 이벤트가 차례대로 발생합니다.

차이점은 KeyDown에서의 Key는 버추얼키 코드를 가지고
KeyPress에서 Key값은 아스키 값을 가지고 있기때문에
캡스락이 꺼진 상태에 쉬프트를 누르고 A를 누르게 되면 다음과 같은순서로 이벤트가 발생합니다.

1.쉬프트 누를때 KeyDown
2. A누를때 KeyDown
3. 대문자 'A'대한 KeyPress

그러니까 TEdit콤포넌트는 쉬프트 상태에따라 대소문자가 자동으로 바뀌기때문에
KeyPress이벤트에서 문자를 입력 받는것이고
그것을 제어하기 위해서는 KeyPress이벤트에서 처리해야 하는것이죠.

참고로 KeyDown은 마우스 버튼을 눌렀을때도 발생합니다.
이벤트함수에서 TShiftState Shift를 확인해 보면 마우스 버튼이 눌렸는지 알수 있죠.

[출처] KeyDown과 KeyPress의 차이점|작성자 내꺼야



비주얼 베이직에서 KeyDown과 KeyPress의 차이

    KeyDown(KeyUp)  KeyPress
 누른 값  Shift + a  Shift + a
 인자1  Keycode = 65 Ascii = 97 
 인자2  Shift = 1  
부가 설명 Shift 인자 값
Shift = 1
Ctrl = 2
Alt = 4
CapsLock을 이 켜져있어도 대문자로 인식 안됨.
 Ctrl, Alt 인식 못함
CapsLock이 켜져있거나
쉬프트 + 문자 눌렀을 시
대.소문자 변환하여 인식

'P/L > Visual Basic' 카테고리의 다른 글

Visual Basic] 랜덤함수 Rnd() 와 Randomize  (0) 2011.12.15
Visual Basic] 반투명 처리 (펌)  (0) 2011.12.14
MsgBox  (0) 2011.12.13
[Visual Basic] WindowState 속성  (0) 2011.12.07
[Spread] OperationMode, Single과 Row의 차이점.  (1) 2011.12.07
Posted by 야동우
,


현재 활성화 폼의 WindowState 속성

Ex)
Me.WindowState = 0           '기본 크기
Me.WindowState = 1           '윈도우 최소화
Me.WindowState = 2           '전체화면(작업표시줄, 타이틀 바를 제외하고)




>> Question : 그럼 타이틀바랑 작업표시줄까지 모두 없애려면 어떻게 해야 하나요?

번호: 144962 / 평점: (9.0)

안녕하세요?
프로퍼티에서 Border Style 을 '없음' 으로 하세요..
주절주절이었습니다..

출처 : 데브피아

'P/L > Visual Basic' 카테고리의 다른 글

Visual Basic] 랜덤함수 Rnd() 와 Randomize  (0) 2011.12.15
Visual Basic] 반투명 처리 (펌)  (0) 2011.12.14
MsgBox  (0) 2011.12.13
KeyDown(KeyUP)과 KeyPress의 차이점  (0) 2011.12.08
[Spread] OperationMode, Single과 Row의 차이점.  (1) 2011.12.07
Posted by 야동우
,