본문 바로가기

Window Programming/VB

Object Pointer varptr은 워낙에 많이 사용하셔서 사용법을 잘 아실텐데요 그에 비해 objptr은 사용할 필요성을 많이 못느끼기 때문에(상대적으로) 사용하시는 분도 별로 없고, 필요성도 별로 없게 느껴져서 사용법 찾기가 쉽진않습니다. objptr이란 말 그대로 Object(범위가 꽤 넓죠? -_-;;)의 포인터를 받아올 수 있습니다. 이 포인터를 가지고 어따쓰냐.. 다시 그 개체를 그대로 사용할 수 있습니다 (속성,메소드등) 간단히 표현해 보겠습니다. lngobjptr = ObjPtr(Text1) ' 더보기
함수 인자 순서에 상관 없이 대입하기(:= 사용) 강좌는 아니구여...그렇다구 뭐 유용한 팁도 아니지만....혹시나마 한 명이라도...필요한 사람이 있을지도 몰라서....ㅡㅡ; 그냥 한 번 올려봅니다... 보통 우리가 생각할 때 함수에 인자값을 넘길 때에는 정의된 순서대로 넘기는 것으로 알고 있습니다. 하지만 ---> ": =" 를 사용하면 순서에 상관없이 인자값을 넘길 수 있습니다. 예를 들어, Private Sub Test() Call Operator(1,2,"func test") End Sub Private Sub Operator(oa As Integer, ob As Integer, oc As String) Debug.Print oa Debug.Print ob Debug.Print oc End Sub 위와 같이 하면 디버그 창에 1 2 func t.. 더보기
ScriptControl 응용 우연히 ScriptControl 이란 넘을 알게되서 테스트해봤는데 쓸만하네요... 자바스크립트에는 있는 eval() 함수가 없어 불편할 때가 간혹 있었는데, 스크립트 컨트롤을 이용하면 어느정도 eval() 함수의 효과를 볼 수 있습니다. 아래는 간단히 맛배기로 만들어본 샘플 입니다. [실행화면] [소스] Private Sub Command2_Click() On Error Resume Next Err.Clear ScriptControl1.Reset ScriptControl1.AddObject "frm", Me MsgBox ScriptControl1.Eval("frm." & Combo1.Text) If Err.Number 0 Then MsgBox Err.Description End If End Sub Pri.. 더보기
효율적인 코딩 기법 (초급) 1. Choose문에 대해서 알아보자 Function Choose(Index As Single, ParamArray Choice() As Variant) 위와 같이 부서를 선택 할경우 메시지박스 출력 프로그램을 코딩 한다고 과정 해보자 select문 또는 if문으로 코딩을 할수 있다 여기서 한번 Select 문으로 코딩을 해보겠다. Private Sub optC_Click(Index As Integer) Dim dVal As String Select Case Index Case 0 dVal = "개발" Case 1 dVal = "홍보" Case 2 dVal = "영업" Case 3 dVal = "전산" End Select MsgBox dVal & " 선택하였습니다.", vbOKOnly, "예제1" End.. 더보기
실행 파일에 디지털 서명 넣기 (Ver 0.1) ▣ 실행 파일에 디지털 서명 넣기 (Ver 0.1) ▷ 준비물 - 개인 키 파일(mycert.pvk) 및 PKCS #7 인증서 파일(mycert.spc) - 인증서 작업을 위한 프로그램 (signcode.exe) - 인증서 확인을 위한 프로그램 (chktrust.exe) ▷ 개인 키 파일(*.pvk) 및 PKCS #7 인증서 파일(*.spc) - 정식 인증서를 이용하는 경우 인증 기관을 통해 개인 키 파일과 PKCS #7 인증서를 발급 받는다. - 테스트 인증서를 이용하는 경우에는 makecert.exe, cert2spc.exe 프로그램을 이용해서 직접 만들어 사용한다. - [ActiveX] 테스트 인증서 만들기 내용 참고 (http://www.enjoydev.com/blog/70) ▷ 참고 - 아래에서.. 더보기
자주 사용하는 VB 기본 함수 자주사용하는 함수 일반적으로 많이 아는 함수 특수한 경우에 사용하는 함수 ◈ 함수명 : Abs ◈ 함수명 : Array 형식 : Abs(number) 형식 : Array(arglist) 설명 : 가로안의 수치에 대한 절대값을 구합니다. 설명 : 배열이 포함된 값을 반환합니다. 예제 : Abs(21.7) ☞ 21.7을 반환합니다. Abs(-21.7) ☞ 21.7을 반환합니다. 예제 : m=Array("월","화","수","목","금","토","일") d=m(2) ☞ d에는 "화"가 들어갑니다. ◈ 함수명 : Asc ◈ 함수명 : Atn 형식 : Asc(string) 형식 : Atn(number) 설명 : 문자열의 첫 글자에 해당하는 문자 코드를 나타내는 integer 값을 반환합니다. 설명 : 가로안의 수.. 더보기
프로세스 강제종료 하는 함수 (Script Runtime 이용) ========================================================================================= 본 팁&트릭은 EnjoyDEV.NET에서 나온 것이며 재배포시 이 문구는 포함시켜주시기 바랍니다. ========================================================================================= Script를 사용하여 만들었습니다. 프로젝트->참조에서 Microsoft Scripting Runtime 을 추가하시면 됩니다. 이 참조파일(Scrrun.dll)은 시스템 파일이기 때문에 모든 OS에 존재하는 파일이니 따로 배포할 필요가 없습니다. Public Sub KillProcess(.. 더보기
동적 컨트롤 생성 및 이벤트 처리 방법 1. 동적으로 컨트롤을 생성하는 방법폼위에 동적으로 컨트롤을 생성하여 사용하는 방법을 알고 싶습니다. Controls 컬렉션의 Add, Remove 등의 메소드 이용. CreateObject 를 사용해 생성할 수도 있지만 ActiveX 컨트롤의 경우에는 이를 사용해서 생성할 경우에 모양이 보이지 않음. 1. ActiveX 컨트롤' WithEvents를 써주면 이벤트도 받아서 처리할 수 있습니다. Dim WithEvents gCtObj As VBControlExtender ' Content 컨트롤을 가리키는 객체 ' Add의 첫번째 인자는 생성하려는 컨트롤의 ProgID ' 두번째 인자는 생성하려는 컨트롤의 이름 ' 세번째 인자는 생성되는 컨트롤이 올라갈 폼 Set gCtObj = Controls.Add(.. 더보기
CreateObject() 함수를 이용하여 동적으로 ActiveX Object를 생성 ▣ CreateObject() 함수를 이용하면 쉽게 동적으로 ActiveX Object를 생성할 수 있는데, VC에서 ActiveX Object를 사용하기 위해서는 다소 복잡한 과정을 거쳐야만 한다. 아래 소스는 MS 기술자료 194873 (Visual C++ 6.0 실행 파일에서 Visual Basic ActiveX DLL에 액세스하는 방법) 내용을 기준으로 VB 문법에 맞게 수정한 내용이다. ▣ CreateObject() 함수 소스 Public Function CreateObjectAPI(ByVal Class As String) As Object Dim clsid As String Dim rclsid As GUID Dim riid As GUID Dim hr As Long Dim pClass As Lo.. 더보기
[Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6) ▣ [Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6) ==> 이 글을 작성할 때의 개발 환경은 Windows XP(SP2) + VB6 이었습니다. 그런데 이 방법대로 Vista + VB6 개발 환경에서 컴파일 하고 실행해보니 에러가 발생하더군요. 이렇게 컴파일된 실행 파일은 Vista 뿐만 아니라 XP에서 실행시켜도 에러가 발생합니다. Vista + VB6 + RC.EXE + VB 리소스 편집기 ... 뭔가 문제가 있는 듯 한데 추가적인 테스트는 시간 관계상 다음으로 미룹니다. ^^ ▣ 이 글에서는 Vista + VB6 개발 환경에서 위 에러를 피할 수 있는 두 가지 방법을 설명합니다. [1] manifest 정보를 별도 파일로 관리. manifest 정보는 실행 파일에 리소스로 포함.. 더보기
엑셀파일을 그리드에 넣는 방법 1. 엑셀파일을 그리드에 넣는 방법은 여러가지가 있지만 (1) 파일의 모든 시트까지 한꺼번에 TEXT 파일로 저장한 후 (2) open 명령어로 TEXT파일을 한꺼번에 그리드로 불러오면 속도가 매우 빠르다. 2. TEXT 파일로 저장할때 엑셀2000과 엑셀2002/2003 버전때문에 많이 고민을 하였는데... 아래의 소스를 참조하시기 바랍니다. 3. 필요사항 (1) MSFlesGrid의 이름을 FG_execl로 변경 (2) CommonDialog Dim xlapp As New Excel.Application Dim xlapp_worksheet As Worksheet Dim sheet_count As Long Dim sheet_col_count(100) As Long Dim i,j,k As Long Dim.. 더보기
화면 해상도 조정 API 사용법입니다. Dim screen_Width As Integer Dim screen_Height As Integer '현재 화면 해상도 알기 Private sub get_screen() screen_Width = Screen.Width / Screen.TwipsPerPixelX screen_Height = Screen.Height / Screen.TwipsPerPixelY End sub '해상도 지정하기 Private sub set_screen() i = SetDisplayMode(screen_Width, screen_Height, 32) End Sub API부분================================================================================.. 더보기
Win 32 Message 관련 API 함수 윈도우상에서 서로 다른 장치간의 명령을 전달하는 메시지에 관련된 API 함수 [메시지 관련함수] BroadcastSystemMessage - 현재 실행중인 모든 응용 프로그램이나 드라이버로 메시지를 보낸다. CallMsgFilter - 메시지를 전달하고 훅 프로시저에 훅 코드를 전달한다. CallNextHookEx - 현재 훅 Chain상의 다음 훅 프로시저에 정보를 전달한다. DefWindowProc - 메시지 인자값을 정상적인 처리를 위해 메시지 프로시저로 전달한다. DispatchMessage - 응용 프로그램의 메시지 루프에서 처리하기에 적절한 윈도우 프로시저로 메시지를 보 낸다. GetMessage - 어플리케이션의 메시지 큐에서 메시지를 취득한다. GetMessageExtraInfo - 마지막.. 더보기
Debug 특권 얻기 주요 API 함수는 다음과 같습니다. (MSDN참고) OpenProcessToken Function LookupPrivilegeValue Function AdjustTokenPrivileges Function 우선 OpenProcessToken로 특권설정가능한 토큰핸들을 얻으신후. LookupPrivilegeValue로 원하는 특권의 특권값을 LUID구조체로 얻습니다. 그리고 TOKEN_PRIVILEGES에 값을 채우시고 그것을 AdjustTokenPrivileges로 넘기셔서 적용하면 끝~ 입니다. ^^ 디버그특권(E_DEBUG_NAME) 외에도 시스템종료 특권(SE_SHUTDOWN_NAME)나 보안특권(SE_SECURITY_NAME)과 같은 다양한 특권을 얻을수있는데.. 그건 winnt.h파일을 읽어.. 더보기
Pattern 문자열 사용(Like) 예) dim s as string dim b as boolean s = "FMS16 Program" if s like "F[L-N]?#*ra*" then msgbox "OK" 위와 같이 사용할 수 있습니다. Like이후의 설명을 하면 다음과 같습니다. 처음은 대문자 'F'로 시작해야 하며 두번째 문자는 L,M,N 사이의 문자중 하나여야 하며 세번째 문자는 1개문자가 어떤 문자여도 관계가 없고 네번째 문자는 반드시 숫자여야 하며 이후의 문자는 ra 를 포함 하고 있어야 한다 입니다. 더보기
파일 이름 추출 InStrRev()를 이용한 간단한 방법 '경로 구하기 filePath = Left(orgFileName, InStrRev(orgFileName, "\")) '파일명 구하기 fileName = Mid(orgFileName, InStrRev(orgFileName, "\") + 1) '확장자 구하기 fileExt = Mid(orgFileName, InStrRev(orgFileName, ".") + 1) 더보기
csv 파일을 DB처럼 사용하기 1. 프로젝트의 참조에 Microsoft DAO X.X Object Libray 를 체크한다. 2. Form 내에 CommandButton(Command1)과 ListBox(List1)을 생성한다. 3. Command1 의 Click 이벤트 함수를 생성한다. Private Sub Command1_Click() Dim ws As DAO.Workspace Dim db As DAO.Database Dim rs As DAO.Recordset Dim strPath As String Dim strSQL As String ' 파일 패스 지정 strPath = App.Path & "\list.csv" ' DB 오픈 Set ws = DBEngine.Workspaces(0) Set db = OpenDatabase(Stri.. 더보기
VB 속도 올리기 1. 프로젝트를 컴파일하기 전에, 베이직을 종료하고, 컴퓨터를 재시작하라. 그리고, 프로젝트를 컴파일하게 되면, 메모리에 남아 있는 자질구레한 변수들이 사라 지게 되고, 파일 사이즈를 줄일 수도 있다. 2. 프로젝트를 컴파일하기 전에 사용하지 않는 변수와 서브 프로시져, 선언문, 컨트 롤 같은것을 제거하라. 이것은 파일크기를 상당히 줄여줄 것이다. 3. 프로그램을 종료할 때는 END문을 사용하라. 프로그램의 종료코드나 QueryUnload이벤트에 End문을 사용하면 프로그램이 메모리에 남아 있지 않도록 해 준다. 4. Variant 변수 사용을 자제하라. 변수를 선언할 때 형식을 지정해 주지 않으면 베이직은 자동으로 그 변수를 Variant형 식으로 지정하게 되는데, Variant형식의 변수는 매우 느리.. 더보기
모듈과 클래스 모듈과의 차이점 VB에서 Form내에서 함수 만들어 보셨나요? 아무 이벤트나 하나 삽입해도 함수가 만들어지는데요, 이런 함수들은 다 폼 안에 들어있는 식구입니다. 즉 옆집 식구가 우리집 식구보고 어째라 명령을 못내린다는 겁니다. (물론 Public으로 준비되어 있다면 가능하지만..그 옆집 자체가 사라졌다면 호출이 안되죠.) 모듈이란 글로벌 함수, 즉 전세계 어디서나 부를 수 있는 식구입니다. 모듈이라는 파일 내에 만든 모든 함수는 정말 어디서나 다 호출이 가능합니다. 그러니까 님이 사용하시는 print, mid, left, right와 같은 함수도 글로벌 함수 즉 모듈에 담겨있는겁니다. 언제나 누구나 불러 쓸 수 있습니다. 모듈이 많아지면 모두 글로벌, 즉 전체영역에서 통용되기 때문에 서로 이름이 충돌되지 않도록 신경써.. 더보기
VB에서 다른 윈도우에 메시지 줘서 실행시키기 Option Explicit Public Const WM_COMMAND = &H111 Public Const WM_SETTEXT = &HC Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Declare .. 더보기
Form상에서 콘트롤 이동 / Title 바 없는 폼 이동 Public globalX As Integer Public globalY As Integer Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) Source.Move X - globalX, Y - globalY End Sub Private Sub Frame1_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) Frame1.Drag vbBeginDrag globalX = X globalY = Y End Sub Private Sub Label1_MouseDown(Button As Integer, _ Shift As Integer, X As Single,.. 더보기
[Tool] CodeSmart 설치해서 VB 편하게 쓰기 VB는 VC처럼 프로젝트 탐색창에서 하위 멤버들을 보여주지 못하는데 여간 불편한게 아니다. CodeSmart를 설치해서 편리하게 코딩하자. 위치 : EDU\01 SW\07 VB\04 Tool\CodeSmart\Axtools Codesmart 2005 Vb6 Retail Winall-Haze VB 프로젝트 탐색창 CodeSmart 설치 후 프로젝트 탐색창그외에도 여러가지 기능들이 추가된다 더보기
[Tool] VB에서 마우스 휠 되도록 하기 Visual Basic 6.0 에서는 기본적으로 마우스 스크롤이 안된다. 이 기능은 추가기능으로 설치하여 사용해야 한다. 위치 : EDU\01 SW\07 VB\04 Tool\vb addin\vba_mouse_wheel 압축을 풀고, VBA Mouse Wheel Fix.reg 파일을 더블클릭하여 레지스트리에 등록한다. VB6IDEMouseWheelAddin.dll 파일은 적당한 위치에 복사하여 둔다. (이러한 파일은 c:\windows\system32 에 넣어두는 것이 좋다) '시작'->'실행' 창에서 아래와 같이 입력한다. regsvr32 (복사해둔경로)\VB6IDEMouseWheelAdin.dll 예) c:\windows\system32\VB6IDEMouseWheelAddin.dll (또는 regsvr.. 더보기
VB] 조건부 컴파일 상기 "조건부 컴파일 인수" 란에 있는 Release 변수가 1이면 하기 조건부 컴파일 문법이 성립 #if Release = 1 then ' 여기가 실행 #else #endif 더보기
왜 비베를 하는가? 비베를 하면 무엇을 할 수 있을까? 실로 용도는 꽤 무궁합니다. 1. 일반적으로 알고 있는 윈도우 프로그래밍 - 유틸, 게임, 툴 등을 제작 - ex) 아빠가 만들어주는 가족 게임, 네트웍 윳놀이로 점심시간에 하드내기 게임 삼부 빨간 전화, 등... 아이디어 내주세요. 2. 저희 회사에서는 장비 프로그램 - 삼성전기 LED 검사장비에서 작성했던 검사 프로그램으로 교육을 진행합니다. 추후 비슷한 장비 등을 제작 시 코드를 재사용할 수 있읍니다. - PLC 연동 교육 자료는 교육 폴더의 "book"란에 잡지연재를 저장해놓았읍니다. 3. 요즘에는 거의 모든 덩치 큰 프로그램들은 VB매크로를 지원하고 있읍니다. 매크로란 한마디로 "동작 레코딩"이라고 생각하면 됩니다. 엑셀 등에서 반복 작업하는 것들을 매크로로 .. 더보기
교육 폴더 공지 및 교육 스터디 계획 공지 네트워크 상의 다음 폴더에 비베 관련 교육 자료를 모아놓았읍니다. 1. 경로 : file://\\psm\edu\01 sw\07 vb 2. 내용 : [CD] Digital Book kor - 한글로 된 교육 CD를 copy해놓은 것입니다. - Good [CD] VB4 Lesson - 비베 4.0 버전 때의 영어로 된 교육 CD [CD] VB Edu 따라하기 - 한글 실전 CD인데 마우스 누르는 곳 까지 따라하도록 되어 있읍니다. Good 01 동영상 [GDB] VB6.0 (문경화): 인터넷 한글 + 음성 강의 파일 [GDB]VB Game 제작 [GVA] 비베 정보처리 [GVA] VB 고급 강좌 (정현정) [GVA] VB DB Programming 02 Book : 대부분 외국 서적이지만 한글판도 하나 있음.. 더보기