예전부터 VB에 있던 Me가 Delphi에서는 무엇일까 궁금해서
검색도 나름대로 하고 그랬는데 찾지 못했었다.

그런데 오늘 알았다.
VB의 Me는 Delphi에서는 Self였다.

알고나니까 이렇게 쉬운데 이걸 알기까지 너무 오랜 시간이 지난 것 같다.
Posted by 띠리
클래스 라이브러리는

클래스 라이브러리는 같은 클래스를 여러 프로젝트에서 유용할 수 있게한 것이다.
클래스 라이브러리를 이용하면 한번 만든 클래스는 다른 프로젝트에서
간단하게 불러 쓸수있기 때문에 클래스를 만들어두면 만들어 둘 수록
비슷한 프로젝트를 할 경우 개발이 편하게 된다.

  • 클래스 라이브러리의 확장자는 dll.
  • 한번 작성한 클래스 라이브러리는 다른 프로젝트에서 간단하게 이용할 수 있다.
  • 프로젝트에서 클래스 라이브러리를 쓰기 위해서는 참조 설정을 해야된다.
  • 클래스 라이브러리를 디버그하기 위해서는 프로젝트 참조를 해야된다.
  • 네임스페이스를 작성하기 위해서는 Namespace ~ End Namespace를 사용한다.

클래스 라이브러리 프로젝트와
클래스 라이브러리를 참조한 프로젝트의 간단한 예제

클래스 라이브러리 프로젝트에서 먼저 빌드를 해서
클래스 라이브러리를 만든후

클래스 라이브러리를 참조한 프로젝트에서
그 클래스 라이브러리를 참조한 후 실행해야 됨

invalid-file

클래스 라이브러리 예제

Posted by 띠리
VB.NET 클래스 라이브러리 디버그할때는
클래스 라이브러리를 참조하는 프로젝트에서
클래스 라이브러리 프로젝트를 추가하면 된다.

방법은 파일 메뉴에서 추가를 선택하고
추가에서 기존 프로젝트를 선택하면
기존 프로젝트 추가 화면이 나온다.
기존 프로젝트를 선택하여 열기를 누르면
클래스 라이브러리 프로젝트가 추가된다.

사용자 삽입 이미지


추가된 클래스 라이브러리 프로젝트에서
디버그 할 파일에 브레이크 포인트를 설정하고
디버그를 하면된다.
Posted by 띠리

클래스 라이브러리 VB.NET에서 사용하기

새 프로젝트를 만들어서 Visual Basic에서 Windows 응용 프로그램을 선택하여
새로운 프로젝트를 만든다.

사용자 삽입 이미지


메뉴의 프로젝트에서 참조 추가를 선택한다.

사용자 삽입 이미지


참조 추가의 화면에서 참조 탭을 선택한다.

만들어둔 클래스 라이브러리를 찾아선 선택하고 OK를 누른다.

사용자 삽입 이미지


이렇게 하면 클래스 라이브러리를 참조할 수 있다.

참조한 클래스 라이브러리를 선언한다.

아래 소스와 같이 클래스 라이브러리의 메서드와 프로퍼티를 사용한다.

Public Class frmMain


    ' 클래스 라이브러리 선언

    ' [클래스 라이브러리명].[클래스 라이브러리에 선언한 클래스명]

    Private Score As New clTest.clsListTest


    Private Sub btnAdd_Click(ByVal sender As System.Object, _

            ByVal e As System.EventArgs) Handles btnAdd.Click


        ' 리스트 추가

        Score.Add(Val(txtList.Text))

        txtList.Text = ""


    End Sub


    Private Sub btnTotal_Click(ByVal sender As System.Object, _

            ByVal e As System.EventArgs) Handles btnTotal.Click


        ' 추가된 리스트 합계

        lblTotal.Text = Score.Total


    End Sub


    Private Sub btnAvg_Click(ByVal sender As System.Object, _

            ByVal e As System.EventArgs) Handles btnAvg.Click


        ' 추가된 리스트 평균

        lblAvg.Text = Score.Average


    End Sub


    Private Sub btnCls_Click(ByVal sender As System.Object, _

            ByVal e As System.EventArgs) Handles btnCls.Click


        lblTotal.Text = ""

        lblAvg.Text = ""

        ' 추가된 리스트 초기화

        Score.Clear()


    End Sub


    Private Sub btnEnd_Click(ByVal sender As System.Object, _

            ByVal e As System.EventArgs) Handles btnEnd.Click


        End


    End Sub


End Class





Posted by 띠리

VB.NET에서 클래스 라이브러리를 첨 만들어봤다.
뭐가 뭔지도 모르는체...
내가 하고 싶었던 것은 VB에서 DLL을 만들어서 VC에서 써보고 싶었는데
VB.NET에서 DLL을 만들면 일반 DLL이랑 좀 틀린 것같다.
VB.NET에서 DLL을 만들려면 클래스 라이브러리를 만들어야 된다.
(여기서 사용하고 있는 개발툴은 비주얼 스투디오2005이다.)

클래스 라이브러리 만들기

VS에서 새로 만들기에서 프로젝트를 선택한다.
새 프로젝트 화면에서 Visual Basic에서 Windows를 선택하고
클래스 라이브러리를 선택한다.

사용자 삽입 이미지


클래스 라이브러리의 이름을 입력하고 확인을 누른다.

Class1.vb라는 클래스 파일이 자동으로 만들어진다.
Class1.vb파일은 선택하고 속성에서 적당한 이름(clsTest.vb)을 붙여준다.

clsTest.vb에 메서드와 프로퍼티를 정의한다.

숫자의 합계와 평균을 내는 간단한 프로그램을 만든다.

Public Class clsListTest

    ' 리스트 형식

    Dim ListVal As New List(Of Decimal)


    ' 메서드 : 리스트에 항목 추가

    Public Sub Add(ByVal Value As Decimal)


        ListVal.Add(Value)


    End Sub


    ' 메서드 : 모든 리스트 삭제

    Public Sub Clear()


        ListVal.Clear()


    End Sub


    ' 프로퍼티 : 입력된 리스트의 합

    Public ReadOnly Property Total() As Decimal


        Get

            Dim dTotal As Decimal


            If ListVal.Count = 0 Then

                Return 0

            End If


            For Each Value As Decimal In ListVal

                dTotal += Value

            Next


            Return dTotal

        End Get


    End Property


    ' 프로퍼티 : 입력된 리스트의 평균

    Public ReadOnly Property Average() As Decimal


        Get

            Dim dAvg As Decimal


            If ListVal.Count = 0 Then

                Return 0

            End If


            For Each Value As Decimal In ListVal

                dAvg += Value

            Next


            Return dAvg / ListVal.Count

        End Get


    End Property



End Class

빌드를 선택하여 솔루션 빌드를 실행시키면 프로젝트의 폴더 밑에
클래스 라이브러리가 만들어진다.


 


Posted by 띠리

VB.NET에서 시리얼 통신하는 정말 간단한 예제
VB.NET은 해본적이 없어서 아직 아는게 별로 없다.
오늘 처음으로 Delgate라는 것을 봤다.
Invoke도 그렇고...

잘은 모르겠지만 예전에 VB6에서는 메세지 박스가 떠있으면
컨트롤은 다른 이벤트가 발생하지 않았다.
그런데 Delgate와 Invoke를 쓰면 메세지 박스가 떠있더라도
메세지를 받을 수 있다.


Imports System.IO.Ports    ' Serial 통신용

Imports System.Threading    ' 쓰레드용


Public Class frmMain


    Private WithEvents ComPort As New System.IO.Ports.SerialPort


    ' Delegate : 대리자를 선언하는 데 사용한다.

    ' 대리자는 형식의 Shared 메서드 또는 개체의 인스턴스 메서드를

    ' 참조하는 참조 형식이다.

    ' 이 대리자 클래스의 인스턴스를 만들기 위해 매개 변수 형식 및

    ' 반환 형식이 일치하는 모든 프로시저를 사용할 수 있다.

    ' 이러한 프로시저는 대리자 인스턴스를 통해 나중에 호출될 수 있다.


    Delegate Sub AddMessageDelegate(ByVal str As String)


    ' 컴포트 열기

    Private Sub cmdConnect_Click(ByVal sender As System.Object, _

                                ByVal e As System.EventArgs) _

                                Handles btnConnect.Click


        Try

            ComPort.PortName = "COM" & Trim(txtPort.Text)

            ComPort.BaudRate = 9600

            ComPort.Parity = Parity.None

            ComPort.DataBits = 8

            ComPort.StopBits = StopBits.One


            If (ComPort.IsOpen = True) Then

                MessageBox.Show(ComPort.PortName & "는 벌써 열려져 있는데...", "에러야", _

                MessageBoxButtons.OK, MessageBoxIcon.Error)

                Exit Sub

            End If


            Call ComPort.Open()


            btnConnect.Enabled = False

            btnDisconnect.Enabled = True


        Catch ErrEx As Exception


            MessageBox.Show(ErrEx.Message, "에러야", MessageBoxButtons.OK, MessageBoxIcon.Error)


        End Try

    End Sub


    ' 데이터 수신 이벤트

    Private Sub ComPort_DataReceived(ByVal sender As Object, _

                                ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _

                                Handles ComPort.DataReceived


        Dim addmsg As New AddMessageDelegate(AddressOf AddMessage)

        Dim strDataReceived As String


        Try

            ' 시리얼 통신으로 데이터 수신

            strDataReceived = ComPort.ReadLine


        Catch ex As Exception


            strDataReceived = ex.Message


        End Try


        ' Control.Invoke (Delegate)

        ' 컨트롤의 내부 창 핸들이 들어 있는 스레드에서

        ' 지정된 대리자를 실행한다.

        ' .NET Compact Framework에서 지원된다.


        txtRecv.Invoke(addmsg, New Object() {"RCV>" + strDataReceived})


    End Sub


    ' 텍스트박스 메시지 표시

    Private Sub AddMessage(ByVal str As String)


        txtSend.Text = ""

        txtRecv.Text = DateTime.Now.ToString("HH:mm:ss") + " " + _

                          str + ControlChars.CrLf + _

                          txtRecv.Text

    End Sub


    ' 문자열 송신

    Private Sub btnSend_Click(ByVal sender As System.Object, _

                                ByVal e As System.EventArgs) _

                                Handles btnSend.Click


        If (txtSend.Text.Length = 0) Then

            MessageBox.Show("송신 문자열을 입력해 줘", "에러야", _

                            MessageBoxButtons.OK, MessageBoxIcon.Error)

            txtSend.Focus()

            Exit Sub

        End If


        Try

            ' 시리얼 통신으로 데이터 송신

            ComPort.WriteLine(txtSend.Text)

            Call AddMessage("SND>" + txtSend.Text)


        Catch ErrEx As Exception


            MessageBox.Show(ErrEx.Message, "에러", _

                            MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try


    End Sub


    ' 컴포트 닫기

    Private Sub btnDisconnect_Click(ByVal sender As System.Object, _

                                ByVal e As System.EventArgs) _

                                Handles btnDisconnect.Click


        btnConnect.Enabled = True

        btnDisconnect.Enabled = False

        Call ComPort.Close()


    End Sub


    Private Sub lblTitle_DoubleClick(ByVal sender As Object, _

                                ByVal e As System.EventArgs) _

                                Handles lblTitle.DoubleClick


        MsgBox("나 메세지 박스야")


    End Sub


End Class



VB8 소스
Posted by 띠리
VB6에서는 버튼의 프러퍼티에서 OK버튼과 Cancel버튼을 지정했는데
VB.NET에서는 폼 프러퍼티에서 설정한다.

사용자 삽입 이미지

위의 크림에서 AcceptButton에서 버튼 컨트롤을 선택하면 OK버튼으로 지정되고
CancelButton을 지정하면 Cancel버튼으로 지정된다.
Posted by 띠리

사용자 삽입 이미지
위의 그림과 같이 윈도우즈XP에서 폼(윈도우즈)에 그림자를 지게하는 법은 간단하다.
밑의 코드를 긁어 붙이기만 하면 된다.

Public Class Form1


    Protected Overrides ReadOnly Property CreateParams() _

                        As System.Windows.Forms.CreateParams

        Get

            ' 폼에 그림자 띄우기

            Const CS_DROPSHADOW = &H20000

            Dim cParam As CreateParams = MyBase.CreateParams

            cParam.ClassStyle = cParam.ClassStyle Or CS_DROPSHADOW

            Return cParam

        End Get

    End Property


End Class







 

Posted by 띠리
BLOG main image
프로그래밍 공부하면서 써가는 개인 노트 (따라서 여기에 씌여있는 소스의 신빙성을 보장 못함 -.-;;) 이 블로그 보면서 틀린 점이 있으면 꼬옥 알려주세요. by 띠리

공지사항

카테고리

분류 전체보기 (323)
Win32 SDK 초보 (27)
통신관련 (11)
MFC TIP (20)
C/C++ TIP (10)
개발기타 (10)
링크 (2)
견물생심 (24)
이것저것 (8)
용어메모 (3)
데이터베이스 (32)
비주얼 베이직 (10)
하드웨어 (3)
C# (42)
Xcode (3)
델파이 (82)
홈페이지 (5)
MindStorm (0)
낙서 (5)
스크래치 (0)
기타 (6)
아두이노 (1)
라즈베리파이 (2)
안드로이드 (6)
파이썬 (0)
WEB (2)
Total : 944,292
Today : 19 Yesterday : 397