Window Programming 썸네일형 리스트형 비베로 제어판, 바탕화면 관리 1. 비베로 제어판 관리 'VB의 Shell함수를 하용하여 윈도우의 DLL을 직접실행하여 윈도우의 제어판을 호출할수 '할수있다 '먼저 폼하나를 만들고 거기에 listbox를 하나 추가한다음 '아래의 소스를 작성하여 실행하여 본다 Option Explicit Private Sub Form_Load() List1.AddItem " 시스탬등록정보" List1.AddItem " 새하드웨어 추가 마법사" List1.AddItem " 프린터추가 마법사" List1.AddItem " 프로그램 추가/삭제 마법사" List1.AddItem " 윈도우 설치 마법사" List1.AddItem " 시동디스크작성 마법사 " List1.AddItem " 날짜/시간" List1.AddItem " 표준시간" List1.AddItem.. 더보기 API함수를 이용하여 폼 move Windows API 함수를 이용하여, 제목표시줄에서 마우스왼쪽버튼을 누르고 있는것처럼 효과를 주어 Form Move를 할 수 있습니다. 소스는 아래와 같습니다. Private Const WM_NCLBUTTONDOWN = &HA1 Private Const HTCAPTION = 2 Private Declare Function ReleaseCapture Lib "user32" () As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As Long Private Sub Form.. 더보기 절삭하는 함수 Fix (버림하는 함수) / 절상(올림) 하는 방법 Dim a Dim b a = 403.6 b = 4536 a = CLng(a) b = Fix(b / 10) * 10 위에서 결과값으로 a=404, b=4530이 됩니다. 참고로 CInt 는 INT 데이타 값의 소수점을 반올림 한 결과를 리턴합니다. CLng 는 LONG 데이타 값의 소수점을 반올림 한 결과를 리턴합니다. Fix는 소수점을 절사한 결과 값을 리턴하고,, Int함수는 해당 값보다 작은 정수값을 리턴합니다.(??) ==> Int와 Fix는 모두 number의 분수 부분을 없애고 정수 부분만을 반환합니다. Int와 Fix의 차이점은, number가 음수이면, Int는 number보다 작거나 같은 최초의 음의 정수를 반환하는 반면에, Fix는 number보다 크거나 같은 최초의 음의 정수를 반환합니.. 더보기 콤보박스 관련 함수들 1) 클릭이벤트 없이 인덱스 바꾸기 Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Sub SetCboIndex(TgtComboBox As Object, ByVal ListIndex As Long) '설명: 콤보박스의 현재 인덱스를 클릭이벤트 없이 바꾸는 함수 Const CB_SETCURSEL = &H14E& '인덱스값을 바꿔준다.(Click이벤트가 발생하지 않는다.) SendMessage TgtComboBox.hWnd, CB_SETCURSEL, L.. 더보기 화면 해상도 구하기, 화면 캡쳐 1. 화면해상도 Screen 전역개체의 Width와 Height(Twip 단위) 픽셀로 바꾸려면 Screen 개체에 존재하는 TwipsPerPixelX, TwipsPerPixelY 속성을 이용. 한 픽셀당 트윕의 수. 즉, 픽셀값으로 변환되는 화면의 크기는 ... 화면의 넓이 : Screen.Width / Screen.TwipsPerPixelX 화면의 높이 : Screen.Heigth / Screen.TwipsPerPixelY 2. 화면 캡쳐 일단 픽쳐박스를 하나 만들어 놓고 아래와 같이 코딩 Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, _ ByVal y As Long, ByVal nWidth As.. 더보기 A Thread to Visual Basic Reprinted with Permission from Desaware Contents: Introduction. A quick Review of Multithreading. A multithreading Simulator. Avoiding Multithreading Problems. Visual Basic Service pack #2. Why Multithread? The Threading Contract. The CreateThread API. The Create Thread API Revisited. Conclusion. VB6 update. SpyWorks 6.2 update. For Further Reference. You can download the sample code from ftp.de.. 더보기 MMAP mmap란? #mmap(2)는 메모리의 내용을 파일이나 디바이스에 대응(mapping)하기 위해서 사용하는 시스템 호출이다. 여기에서는 mmap시스템 호출의 활용방안에 대해서 알아보도록 한다. 3.1 메모리관리와 mmap #각 각의 프로세스는 프로세스마다 다른 프로세스와 중복되지 않는 주소공간을 가지게 된다. 주소 공간은 최초 논리적인 3개의 세그먼트로 분할된다. 덱스트, 데이터와 스팩이 그것이다. 텍스트 세그먼트는 읽기전용으로 프로그램의 명령을 포함하고 있다. 데이터와 스택 세크먼트는 읽기,쓰기가 모두 가능한 영역이다. 차이점이라면 데이터 세그먼트에는 초기화 된 데이터와 그렇지 않은 데이터가 함께 있는데 반해, 스택 세그먼트는 실행시간에 초기화된 값들을 보관한다는 것이다. 대부분의 시스템에서는 프로세스.. 더보기 Sharing Files and Memory File mapping can be used to share a file or memory between two or more processes. To share a file or memory, all of the processes must use the name or the handle of the same file mapping object. To share a file, the first process creates or opens a file by using the CreateFile function. Next, it creates a file mapping object by using the CreateFileMapping function, specifying the file handle and.. 더보기 드라이브, 폴더, 파일처리 FSO(File System Object) visual basic6.0부터는 Open문을 사용해 파일만을 처리했던 구 버전과는 달리 파일은 물론, 드라이브, 폴더까지 다룰 수 있는 FSO(File System Object)모델을 소개하고 있다. FSO모델을 사용하면 폴더를 작성, 변경, 이동, 삭제뿐만 아니라 폴더에 대해 여러가지 정보를 얻을 수 있다. 또한 파일을 쉽게 처리할 수 있다. 파일을 처리하는 주요목표는 공간과 컴퓨터자원을 효율적으로 사용하고 접근하기 쉬운 데이터를 저장하는 것이다. 이러한 파일처리목표를 달성할 수 있는 것이 FSO모델이다. 파일시스템개체(FSO)구성 FSO모델의 개체구성원을 사용하려면 먼저 [프로젝트-참조]메뉴를 선택해 참조대화상자에서 "Microsoft Scripting Runtime"을 선택해야 한다. Script.. 더보기 파일처리 - 파일작업 FSO모델을 사용하여 순차텍스트파일을 만드는 방법에는 다음 3가지가 있다. createTextFile 파일이름을 작성하고 파일을 읽거나 쓰는데 사용되는 createTextFile메서드를 사용하는 것이다. object.createTextFile(파일명 [,파일작성 [,unicode작성]]) 구성요소 설명 object fileSystemObject나 folder개체의 이름 파일명 작성한 파일을 나타내는 문자식 파일 작성 false(기본값)는 새로운 파일작성, true는 존재하는 파일에 겹쳐쓴다. unicode false(기본값)는 ascii파일로 작성, true는 unicode로 작성한다. Private Sub Form_Load() Dim fs As New FileSystemObject 'Dim문 대신 se.. 더보기 파일처리 - 파일에 데이터추가 텍스트 파일이 작성된 뒤 파일에 데이터를 추가하려면 다음 단계를 밟으면 된다. 파일열기 file.openAsTextStream 또는 fileSystemObject.openTextFile 데이터추가 write 또는 writeLine과 writeBlankLines 모두 textStream개체로 writeLine메서드는 지정된 문자열 끝에 줄바꿈 문자를 추가하고 커서를 다음라인 첫칸으로 이동한다. writeBlankLines메서드는 새 줄을 텍스트파일에 추가하는 것이다. 파일닫기 textStream.close 아래 예제는 3개의 쓰기 메서드 모두를 사용하여 파일을 열고 데이터를 추가하고 파일을 닫도록 한다. Private Sub Command1_Click() Dim fso, txtfile Set fso = C.. 더보기 이진파일처리 이진파일 레코드 정의 랜덤처리를 위해 코드모듈에 사용자정의 데이터형을 지정하여 일정한 레코드 길이를 다음과 같이 지정했다. type person '사용자정의 데이터형 정의 number as integer name as string * 10 mark as integer end type person데이터형은 총 14바이트로 언제나 같은 길이를 가지게 된다. 즉, person.name에 영문 2문자만 할당해도 10바이트를 차지하기 때문에 디스크의 낭비를 초래한다. 그러므로 이진처리에서 사용자정의 데이터형을 다음과 같이 지정하도록 한다. type person number as integer name as string '알 수 없는 길이의 name필드정의 mark as integer end type 이진처리에서 .. 더보기 랜덤파일처리 랜덤파일 레코드의 정의 랜덤처리는 고정된 길이의 레코드(각 레코드는 필드로 구성됨)로 구성되어 있는 파일을 처리할 때 유용하다. 랜덤처리는 필요로 하는 특정데이터의 위치를 찾아서 데이터를 읽을 수 있으므로 순차파일 처리보다는 데이터베이스처럼 작업을 할 수 있다. 또한 파일의 특정위치만 읽기때문에 순차처리보다 빠르다. 랜덤데이터의 입력 일단 랜덤파일을 만들기 전에 고정된 길이의 레코드를 구성하기 위해서는 사용자정의 데이터형인 type .. end type문을 써야 한다. 이 사용자정의 데이터형은 반드시 코드모듈에 있어야 한다. 프로젝트 탐색기에서 모듈을 추가하여 해당코드모듈창에 코드를 입력한다. 사용자정의 데이터형을 만들고 사용자정의 데이터형을 전역변수로 선언한다. Type person '사용자정의 데이터.. 더보기 open문을 이용한 파일처리 - 순차처리 파일 역시 디스크상에 관련된 일련의 바이트로 구성된 것에 지나지 않기 때문에, 어플리케이션에서 파일에 접근할 때는 이들 바이트가 어떻게 구성되었는가를 (문자, 데이터 레코드, 정수, 문자열 등등)미리 알고 있어야 한다. 파일이 어떤 데이터를 갖고 있느냐에 따라서 적당한 파일액세스형식을 사용해야 한다. 비주얼베이직에는 다음과 같은 3가지형식의 파일액세스가 가능하다. 순차처리(Sequential Access) 이 방식은 평범한 텍스트파일을 처리하는데 사용된다. 파일의 각 문자는 개행문자(newline character)와 함께 텍스트의 문자나 텍스트 형식과 순서를 나타내는 것으로 가정한다. 또한 데이터는 ansi문자로 지정된다. 랜덤처리(Random Access) 이 방식은 고정길이의 레코드로 구성된 텍스트.. 더보기 탭 대화상자 ssTab컨트롤은 한 개의 탭이 다른 컨테이너로 작용할 뿐만 아니라, 화면공간을 최대한 절약할 수 있기 때문에 최근에 가장 유용하게 쓰이는 컨트롤 중의 하나이다. ssTab컨트롤의 추가 도구상자의 팝업메뉴를 호출, [구성요소]를 선택하거나 [프로젝트]메뉴의 [구성요소]를 선택한다. 구성요소 대화상자의 [컨트롤]탭 리스트에서 Microsoft Tabbed Dialog Control6.0항목을 체크하면 도구상자에 컨트롤이 추가된다. ssTab의 속성 [일반]탭에서는 다음과 같은 것들을 결정할 수 있다. Current Tab : 탭의 인덱스를 의미한다. 실제 탭을 구분할 때 쓰인다. 디폴트는 0이다. Tab Caption : 현재 탭(index)에 나타난 탭의 제목을 설정한다. Tab Count : 탭의 갯수.. 더보기 보고서 작성 - DataView Visual Basic에서 보고서를 만드는 방법은 data report로 만드는 방법과 crystal report로 만드는 방법이 있다. 보고서를 만드는 작업을 하기 이전에 data view와 data environment에 대한 이해가 필요하기 때문에 우선적으로 data view에 대해서 설명하도록 한다. data view소개 data view창을 이용하여 데이터베이스 구조를 엑세스하고 조작할 수 있다. data view는 다음과 같은 작업을 가능한게 한다. 테이블과 뷰를 작성/수정 데이터베이스 다이어그램을 작성/수정 저장 프로시저와 트리거를 작성/수정 프로젝트에서는 data environment를 사용하여 응용프로그램의 데이터를 엑세스한다. data view창은 프로젝트에 추가된 모든 data env.. 더보기 Crystal Report 이 장에서는 Crystal Report 4.6이라는 좀 더 섬세한 도구를 사용해 보고서를 만들어 본다. 보고서 디자인 주 화면의 메뉴에서 [파일-새 파일]을 선택하면, 다음과 같은 새 보고서 작성선택 대화상자를 볼 수 있다. 보고서디자인은 화면에 보이는 것처럼 유형별로 다양한 보고서를 작성할 수 있도록 지원하고 있다. 예를 들어. 표준형을 선택하게되면 데이터가 그룹으로 나뉘고. 각 그룹안의 값들이 합산되어 있는 정렬과 합계보고서를 작성할 수 있다. 이런 종류의 보고서의 예로 고객별 주문 보고서, 영업 사원별 판매 보고서, 판매 업체별 구입보고서 등을 들 수 있다. 또한 크로스탭형을 선택하게 되면 요약된 데이터가 스프레드시트와 유사한 행렬구조로 표현되어 있는 보고서를 작성할 수 있다. 즉, 이 보고서는 읽.. 더보기 Crystal Report - 수식작업/그래프/차트삽입 위의 결과만으로는 완전한 보고서라고 할 수 없다. true와 false중 어느 것이 남자인지도 모르고 또한 상세정보로서 전체적인 평균과 개인별 평균이 추가되어 있지 않다. 이러한 기능을 추가시키려면, 수식을 이용해야 한다. 먼저, true를 '남자'로 false를 '여자'로 전환시키기 위해 수식을 작성하여 본다. 수식을 만들기위해 [보고서 디자인]의 메인메뉴인 [삽입-수식필드]를 선택하고 다음 과정을 따라한다. 수식삽입 대화상자가 나오면, 수식 이름란에 MorF를 입력하고 [확인]버튼을 누른다. 1단계에서 지정한 MorF수식에 대한 공식을 입력할 수 있도록 수식편집 대화상자가 나타난다. 상단의 리스트상자에는 보고서에 사용할 수 있는 필드, 함수, 연산자 리스트를 제공하고 하단에는 수식테스트 상자를 제공하.. 더보기 Registry Access 레지스트리 건드릴때.. API함수 많이 쓰는데... Getsetting, Savesetting를 이용하면 쉽게 접근할수 있습니다. 구조는 아래와 같구요... Gettsetting [APP.NAME],[SECTION],[KEY] 이렇게 하면 키값 불러오구... Savesettin [APP.NAME],[SECTION],[KEY],[저장할 값] 이러면 됩니다. 더보기 Registry Access 레지스트리 건드릴때.. API함수 많이 쓰는데... Getsetting, Savesetting를 이용하면 쉽게 접근할수 있습니다. 구조는 아래와 같구요... Gettsetting [APP.NAME],[SECTION],[KEY] 이렇게 하면 키값 불러오구... Savesettin [APP.NAME],[SECTION],[KEY],[저장할 값] 이러면 됩니다. 더보기 [펌] VC에서 VB DLL사용방법 [출처] http://tong.nate.com/endlessyoung/30149204 VB DLL은 액티브엑스 방식이어서 일반 VC에서 사용하는 DLL호출방법은 쓸 수가 없습니다. 여기 VB DLL을 불러서 사용하는 괜찮은 방법을 소개할 까 합니다. 제가 지금 사용중인데 매우 잘 돌아갑니 다. 1. VB으로 MurickCom이라는 프로젝트에 clsMurick라는 클래스를 만들어서 함수를 등록시킵니다. 2. 주의사항은 될 수 있는데로 함수에서 사용하는 리턴형과 아규먼트의 타입을 정확히 기재합니다.이것을 안해주게 되면 나중에 C에서 Variant라는 잡변수형태로 나타나게 됩니다. 이거 처리하는거 어렵습니다. 예를 들어 Public Function CountStringLength(ByVal strValue A.. 더보기 shared memory 여러개의 프로세서끼리 통신 그래서 shared memory를 사용 각기의 memorymap을 생성한 후에 그쪽 memory를 참조해서 read/write 할 수 있는 방법 우선 선언부의 lstrcpy와 copymemory를 다음과 같이 선언 하신후 read/wrie private declare sub copymemory lib "kernel32" alias "rtlmovememory" (destination as any, source as any, byval length as long) private declare function lstrcpy lib "kernel32" alias "lstrcpya" (lpstring1 as any, lpstring2 as any) as long 다음 read/write.. 더보기 VB :: ActiveX 구성요소의 작성 http://yatoyato.tistory.com/235 클래스와 개체 모든 개체는 각각의 클래스로부터 생성된다. 우리가 사용하는 command1개체는 commandButton클래스로부터 만들어지고, text1개체는 textBox클래스로부터 만들어진다. 이와 같이 컨트롤형태로 제공되는 개체를 컨트롤개체라고 한다. 그리고 visual basic에서는 컨트롤들을 그려넣는 것만으로도 개체의 생성이 가능하다. 클래스는 개체를 나타내는 설계도라고 할 수 있다. 누구든 클래스모듈을 사용해서 클래스를 설계하면 자신만의 개체를 생성할 수 있다. 생성된 개체는 property와 method를 가지고 있으며, 이를 통해서 맡은 업무를 수행하게 된다. 클래스모듈 사용 visual basic에서는 클래스모듈을 사용하면 다음과.. 더보기 ■ ActiveX DLL 프로그래밍하기 (3.3 ASP에서 ActiveX DLL 사용하기 ) ■ ActiveX DLL 프로그래밍하기 3.3 ASP에서 ActiveX DLL 사용하기 비주얼 베이직에서 만든 ActiveX DLL 컴포넌트를 ASP에서 사용하여 보자. 처음에는 간단한 덧셈 연산을 수행하는 컴포넌트 제작 과정에 대해 알아볼 것이며, 이후에는 ASP 소스에 직접 사용할 수 있는 컴포넌트 제작에 대해서 알아보겠다. 1) 덧셈 컴포넌트 만들기 두 개의 수를 입력하면 덧셈을 수행하는 컴포넌트를 만들어보자. 우선 ActiveX DLL 프로젝트를 새롭게 만든 다음 프로젝트의 이름과 클래스 모듈의 이름을 prjCalc와 Calc로 변경하자. 프로젝트의 이름과 클래스의 이름은 이후에 컴포넌트를 생성하는 기준이 되는 이름이 되므로 주의하여야 한다. 이름의 변경이 정상적으로 완료되면 클래스 모듈의 코드 .. 더보기 ■ ActiveX DLL 프로그래밍하기 (3.2 ActiveX DLL 작성하기 ) ■ ActiveX DLL 프로그래밍하기 3.2 ActiveX DLL 작성하기 비주얼 베이직 6.0의 프로젝트 메뉴에서 새로운 메뉴가 ActiveX DLL와 ActiveX EXE이다. 4.0부터 있었던 기능이지만 OLE 자동화 서버를 구체적으로 제작할 수 있도록 새롭게 추가된 것이다. 지금부터 ActiveX DLL에 대해서 알아보기로 하자. 1) OLE 자동화 서버(Automation Server) OLE 자동화 서버는 윈도우의 레지스트리에 등록된 DLL이나 EXE 파일들을 가리킨다. 이들은 앞서 설명한 것과 같이 COM 오브젝트 서버로 기능을 수행한다. 이와같은 COM 컴포넌트들을 비주얼 베이직에서 ActiveX DLL과 ActiveX EXE를 통해 제작이 가능하다. ActiveX DLL이나 Active.. 더보기 클래스의 인스턴싱 속성 이해하기 ■ ActiveX DLL 프로그래밍하기 비주얼 베이직을 이용한 ActiveX 프로그래밍의 여러 가지 기초에 대해서 알아보았다. 지금부터는 ActiveX 프로그래밍의 가장 첫 부분인 ActiveX DLL을 제작하는 방법에 대해서 알아보겠다. ActiveX DLL을 이용하여 제작한 컴포넌트들을 어떻게 다른 응용 프로그램에서 사용하는지, 인터넷에서의 이런 DLL 파일을 어떻게 사용하는지 앞으로의 설명들을 주의 깊게 살펴보자. 3.1 클래스의 인스턴싱(Instancing) 속성 이해하기 비주얼 베이직의 클래스 모듈로 작성된 하나의 클래스는 C++이나 Java 언어에서의 클래스와 동일한 기능을 수행할 수 있다. 클래스를 이용한 상속작업을 통한 다른 클래스를 만들 수도 있고, 클래스로부터 새로운 객체를 만들 수도 .. 더보기 ActiveX와 COM의 이해 ■ ActiveX와 COM의 이해 프로그래머라는 직업은 끊임없이 자기 개발과 새로운 기술에 대한 습득을 하여야 하는 직업일 것이다. 이처럼 프로그래머의 세계에서의 개념의 변화는 너무 자주 일어나는 것이다. 근래의 모든 프로그래밍의 추세는 인터넷이라는 거대한 네트워크 망에서 동작하는 여러 가지 기법들이 소개되고, 구현되고 있는 실정이다. 예전에는 자기 컴퓨터에서 현재의 네트워크까지 프로그래밍의 기법이 변화되면서 여러 가지 개념들이 생겨나고 없어졌다. 이번 장에서는 인터넷 프로그래밍 기법의 기본 개념이 되는 ActiveX와 COM에 대해서 알아보도록 하겠다. 인터넷을 사용하고 인터넷에서 동작하는 프로그래밍을 하기를 원한다면 본 장의 기본 개념에 대한 이해를 하여야만 할 것이다. 그럼 지금부터 인터넷 프로그래.. 더보기 클래스와 이벤트 ■ 클래스와 이벤트 비주얼 베이직을 이용한 ActiveX 프로그래밍에서 빠지지 않는 요소가 클래스 모듈이다. 이 클래스 모듈의 C++이나 Java에서의 클래스와 같은 객체를 생성하는 역할을 수행하는 부분으로 인터넷 프로그래밍에 빠져서는 안돼는 요소이다. 지금부터 비주얼 베이직에 있는 여러 가지 모듈들의 기능의 차이와 클래스 모듈의 세부 사항에 대해서 알아보도록 하자. 2.1 클래스모듈과 기타모듈의 비교 비주얼 베이직에서 제공하는 모듈로는 표준 모듈, 폼 모듈, 클래스 모듈 등이 있다. 이들 각각의 모듈들이 하는 역할이 다르고 프로그램에서 사용되는 곳들도 다르다. 지금부터 각각의 모듈들의 특징과 여러 가지 이벤트들에 대해서 알아보자. 1) 폼 모듈 비주얼 베이직의 가장 기본이 되는 대화상자이자 모듈이다. .. 더보기 비베에서 서브클래스 안전하게 사용하기 서브클래싱을 사용해 제가 수많은 기능을 구현해본결과 서브클래스를 사용하는 법을 나름대로는 알 것 같습니다. 비베에서 서브클래스 사용시 주의점을 몇개 말씀드리겠습니다. 1. 아래 형식을 꼭 준수해주시기 바랍니다. Private Function WindowProc(ByVal hWnd&, ByVal iMsg&, ByVal wParam&, ByVal lParam&) As Long '이 줄 잘못 쓰면 비베 강제 종료 '추천 메시지 처리 형식 '리턴값 반환을 MSDN에서 정해준 방식으로 해줄것을 권함 Select Case iMsg Case Else WindowProc = CallWindowProc(defWindowProc, hWnd, iMsg, wParam, lParam) End Select End Function.. 더보기 VB에서 VC callback 함수 사용 VC에서 작성한 DLL에는 다음과 같은 함수가 export되어 있고 extern "C" __declspec(dllexport) void __stdcall DLLInit(void (*pCallback)(int result)) { pCallback(10); } 다음과 같이 VB에서 콜백함수의 주소를 넘긴다. DLLInit AddressOf MyCallback 그러나 VB에서의 함수는 __stdcall 호출규약을 따르는데 위와 같이 인자를 선언하면 VC에서는 기본으로 __cdecl 호출규약을 따르는 함수로 판단하므로 런타임시 에러가 발생한다. 따라서 다음과 같이 수정하면 해결된다. extern "C" __declspec(dllexport) void __stdcall DLLInit(void (__stdcall .. 더보기 이전 1 2 3 4 다음