2009. 6. 18. 13:53

VB 6.0에서 단축키로 리마크 하기


version 1.0


2004년 8월 6일 신주섭

http://www.linuxnara.org

joosub@linuxnara.org


예전 부터 알고 있는 꽁수였는데 지금에야 문서로 정리 하게 됩니다. 귀차니즘에 빠져서 정리 한다 한다 해놓고 상당한 시간이 

흘렀네요.. ㅋㅋ



그럼 지금부터 vb툴의 강력한 툴바 기능에 대해서 ^^); 설명해 드리도록 하겠습니다. (툴바에 대한 부분도 약간 들어 있으니깐요 ^^;)



vb툴바에서 오른쪽 마우스를 클릭하게 되면 위와 같은 메뉴가 나오는데 그곳에서 사용자 정의

메뉴를 클릭합니다.


클릭하게 되면 아래와 같은 화면이 나오면서 툴바를 사용자가 정의 할 수 있게끔 대화

상자가 뜨게 됩니다. 그곳에서 이제부터 툴바를 재정의 해야 합니다.



툴바를 재정의 하기 위해서 "새 도구 모음(N)" 을 클릭하고 원하는 새 도구 모음의 이름을 입력

합니다.



새로운 도구 모음의 이름을 정의 한 후 '확인' 버튼을 눌러 다음으로 진행합니다.



'확인' 버튼을 누른 후 명령 탭에 가서 '편집' 메뉴의 '주석 블록 설정' 과 '주석 블록 해제' 를 드래그 해서 새로 

생성한 툴바에 드래그 합니다.

정상적으로 드래그 했다면 아래와 같은 툴바가 만들어지게 됩니다.



다음으로 이 부분에서 가장 주의랄꺼까지는 없지만 중요한 부분입니다. ^^;



툴바에서 아이콘에 마우스를 대고 오른쪽 마우스 버튼을 누르게 되면 위와 같은 화면의 팝업 메뉴가 나타 납니다.

이 팝업 메뉴에서 '이름(N)'을 보게 되면 '주석 블록 설정' 이라고 처음에 정의 되어 있는데 이 부분을 수정하여 위와 

같은 화면으로 만들어 줍니다.



주석 블럭 해제도 마찬가지 겠죠..


다른 단축키로 정의하고 싶으신 분은 다른 것으로 하도 됩니다.

단 VB의 메뉴바에 있는 단축키와 충될이 되지 않는 것으로 설정 해야 합니다. 안그럼 메뉴가 우선순위를 가지고 있어서

단축키가 제대로 작동하지 않습니다.



해당 아이콘에서 다시 오른쪽 키를 누른 후 '이미지와 문자열(A)' 부분을 클릭합니다.

이 것을 선택하지 않으면 단축키가 안먹습니다. -_-); 저도 왜 그런지는 ;;; 그런데 이렇게 선택을 해주면 단축키를 

쓸 수 있습니다.


다른 아이콘도 이와 같은 설정 방법 대로 '이미지와 문자열(A)' 로 선택을 해주고 설정한 툴바를 아래 화면처럼 툴바의 다른곳에 

도킹 하시면 됩니다.



화면과 같이 막 편집하다가 ALT + K 키를 누르면 리마크가 되고 ALT+L 키를 누르면 리마크가 사라집니다. 


출처 : 데브피아
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=48&MAEULNO=19&no=2995

2009. 6. 18. 11:19
사용자 삽입 이미지
파일>새 프로젝트>ASP.NET 웹 응용 프로그램>확인
디버그>프로세스에 연결(원하는 프로세스 연결)
>스크립트 탐색기가 연결 안되어 있으면>디버그>창>스크립트 탐색기 클릭



2009. 5. 13. 11:35

win API

VB 2009. 5. 13. 11:35
2008. 12. 22. 13:10

각각 다른 프로젝트 간에 폼과 모듈 또는 폼과 폼 사이에서는 일정한 데이터 타입이 필요하다.
이때 구조체란 것을 사용하게 되는데 프로젝트안에 모듈로 선언하거나 DLL로 컴파일하여
프로젝트 참조를 하면 된다.

public type aaa
    첫번째내용 as String
    두번째내용 as String
end type

public bbb as aaa

str=bbb.첫번째내용

2008. 11. 4. 20:52

주소록 만들기(viewlist)

VB 2008. 11. 4. 20:52

[form1]
Option Explicit
Public i As Integer
Public gsSaveFileName As String


Private Sub Command1_Click() '추가 클릭시 이벤트
    Form2.Show
    Form2.Caption = "정보 추가"
End Sub

Private Sub Command4_Click() 'listview 초기화
   
    Dim a(), b(), c(), d(), e(), f() As String
       
        For i = 1 To ListView1.ListItems.Count
            ListView1.ListItems(i).SubItems(1) = ""
            ListView1.ListItems(i).SubItems(2) = ""
            ListView1.ListItems(i).SubItems(3) = ""
            ListView1.ListItems(i).SubItems(4) = ""
            ListView1.ListItems(i).SubItems(5) = ""
            ListView1.ListItems(i).SubItems(6) = ""
        Next i
    
End Sub

Private Sub Command5_Click() '선택삭제
    ListView1.ListItems.Remove ListView1.SelectedItem.Index
End Sub

Private Sub Command6_Click() '정보수정 form2로 이동
    Form2.Show
    Form2.Caption = "정보 수정"
End Sub

Private Sub ListView1_LostFocus()
   ' 컨트롤이 포커스를 잃은 후 각 ListItem의 선택된
   ' 속성을 False로 다시 설정합니다.
   Dim i As Integer
   For i = 1 To ListView1.ListItems.Count
      ListView1.ListItems.Item(i).Selected = False
   Next i
End Sub


Private Sub Command7_Click()
   
    Dim j, i As Integer
    Dim itmFound As ListItem
   
    Call ListView1_LostFocus
    For j = 1 To 6
        For i = 1 To ListView1.ListItems.Count
                 If ListView1.ListItems(i).SubItems(j) = Text1.Text Then
                    Set itmFound = ListView1.FindItem(i)
                    itmFound.EnsureVisible '찾는행으로 스크롤 옮김.
                    itmFound.Selected = True
                    ListView1.SetFocus      '포커스를 줌
   
                End If
        Next i
    Next j
   
    If itmFound Is Nothing Then  ' 찾는거 없다 -> 알려주고 끝냄.
        MsgBox "일치하는 정보가 없습니다."
        Text1.SetFocus
        Text1.SelStart = 0
        Text1.SelLength = Len(Text1.Text)
        Exit Sub
    End If
  
  
'    Dim strFindMe As String
'    Dim itmFound As ListItem   ' FoundItem 변수.
'
'    Call ListView1_LostFocus
'
'
'    Set itmFound = ListView1.FindItem(Text1.Text, lvwSubItem, , lvwPartial)
'    'lvwSubItem 자리에 들어갈 수 있는거는
'    'lvwSubItem 또는 lvwText 또는 lvwTag 가 있음. MSDN 참고
'    '마지막자리에 lvwPartial : Like % 검색...첫 번에 나온거에 멈춤.
'    'lvwWholeWord : 정확하게 맞는거 검색.
'
'    If itmFound Is Nothing Then  ' 찾는거 없다 -> 알려주고 끝냄.
'      MsgBox "일치하는 정보가 없습니다."
'      Exit Sub
'
'    Else
'       itmFound.EnsureVisible '찾는행으로 스크롤 옮김.
'       itmFound.Selected = True   ' 찾은행을 선택함.
'       ListView1.SetFocus      '포커스를 줌
'    End If

End Sub


Private Sub Form_Load() '컬럼 정의
    Dim COL(6) As ColumnHeader
    Set COL(0) = ListView1.ColumnHeaders.Add(, , " ", 0)
    Set COL(1) = ListView1.ColumnHeaders.Add(, , "학번", 1000)
    Set COL(2) = ListView1.ColumnHeaders.Add(, , "성명", 1000)
    Set COL(3) = ListView1.ColumnHeaders.Add(, , "영어", 700)
    Set COL(4) = ListView1.ColumnHeaders.Add(, , "국어", 700)
    Set COL(5) = ListView1.ColumnHeaders.Add(, , "수학", 700)
    Set COL(6) = ListView1.ColumnHeaders.Add(, , "평균", 700)

End Sub


Private Sub Command2_Click()
'커먼다이얼로그에 지정된 경로로 입시정보목록을 저장하는 소스

    On Error Resume Next

    Dim a(), b(), c(), d(), e(), f() As String
    com.Filter = "텍스트파일 (*.txt)|*.txt"
    com.ShowSave

    For i = 1 To ListView1.ListItems.Count

        ReDim Preserve a(i), b(i), c(i), d(i), e(i), f(i)
        '변수 a(i)와 b(i), c(i), d(i), e(i)를 선언함.

         a(i) = ListView1.ListItems(i).SubItems(1)
         b(i) = ListView1.ListItems(i).SubItems(2)
         c(i) = ListView1.ListItems(i).SubItems(3)
         d(i) = ListView1.ListItems(i).SubItems(4)
         e(i) = ListView1.ListItems(i).SubItems(5)
         f(i) = ListView1.ListItems(i).SubItems(6)
        
    Next i
' 리스트뷰에 입력되어 있는 내용을 각각 변수 a(i)와 b(i), c(i), d(i), e(i)에 대입 시킴.

    Open com.filename For Output As 1
        For i = 1 To ListView1.ListItems.Count
            Write #1, a(i), b(i), c(i), d(i), e(i), f(i)
        Next i
    Close #1
      ' 위의 경로에 변수 a(i)와 b(i), c(i), d(i), e(i)에 대입된 내용을 저장함.
     
End Sub


Private Sub Command3_Click()
''커먼다이얼로그에 지정된 경로에서 입시정보목록을 불러오는 소스

    On Error GoTo er
    Dim itm As ListItem       ' 변수 itm을 ListItem형으로 선언함.
    Dim a, b, c, d, e, f As String
   
    com.Filter = "텍스트파일 (*.txt)|*.txt"
    com.ShowOpen
    ListView1.ListItems.Clear

    Open com.filename For Input As #1
        Do Until EOF(1) ' 위의 경로에 있는 내용을
            Input #1, a, b, c, d, e, f ' 변수 a와b, c, d, e 에 대입해서
                Set itm = ListView1.ListItems.Add()
                itm.SubItems(1) = a
                itm.SubItems(2) = b
                itm.SubItems(3) = c
                itm.SubItems(4) = d
                itm.SubItems(5) = e
                itm.SubItems(6) = f
        Loop            ' ListView1에 입력함.
    Close #1

    For i = 1 To ListView1.ListItems.Count
       Set itm = ListView1.ListItems(i)
           itm.Text = i
    Next i
    Me.Caption = Left(com.FileTitle, Len(com.FileTitle) - 4)
Exit Sub
er:
End Sub

Private Sub ListView1_DblClick() 'listview 더블클릭시 수정
    Command6_Click
End Sub

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) '컬럼정렬
    If ListView1.SortOrder = 0 Then
        ListView1.SortOrder = 1
        ListView1.SortKey = ColumnHeader.Index - 1
    Else
        ListView1.SortOrder = 0
    End If
    ListView1.Sorted = True
End Sub

Private Sub openExcel_Click()
    Dim objExcel As Excel.Application
    Dim ObjWorksheet As Excel.Worksheet
    Dim xlWorkbook As Excel.Workbook
    Dim filename As String
    Dim i As Integer
    Dim itm As ListItem
   
    ListView1.ListItems.Clear
   
    com.CancelError = True
    com.Flags = cdlOFNHideReadOnly
    com.Filter = "Excel Files (*.xls)|*.xls"
    com.FilterIndex = 2
    com.ShowOpen
    filename = com.filename
   
    Set objExcel = CreateObject("Excel.Application")
    Set xlWorkbook = objExcel.Workbooks.Open(filename, ReadOnly:=True)
    Set ObjWorksheet = xlWorkbook.Worksheets("성적")
    objExcel.Visible = False
   
    i = 1
            Do While Not ObjWorksheet.Cells(i + 1, 1) = ""
           
                Set itm = ListView1.ListItems.Add()
                itm.SubItems(1) = ObjWorksheet.Cells(i + 1, 1)
                itm.SubItems(2) = ObjWorksheet.Cells(i + 1, 2)
                itm.SubItems(3) = ObjWorksheet.Cells(i + 1, 3)
                itm.SubItems(4) = ObjWorksheet.Cells(i + 1, 4)
                itm.SubItems(5) = ObjWorksheet.Cells(i + 1, 5)
                itm.SubItems(6) = ObjWorksheet.Cells(i + 1, 6)
            i = i + 1
            Loop
   
    Me.Caption = Left(com.FileTitle, Len(com.FileTitle) - 4)
           
    Set objExcel = Nothing
    Set ObjWorksheet = Nothing
    Set xlWorkbook = Nothing
   

   
End Sub

Private Sub saveExcel_Click() '엑셀 저장
    On Error GoTo er
    Dim objExcel As Excel.Application
    Dim objWorkbook As Excel.Workbook
    Dim ObjWorksheet As Excel.Worksheet
    Dim idx As Integer
    Dim filename As String
   
    com.CancelError = True
    '플래그를 설정합니다.(읽기전용)
    com.Flags = cdlOFNHideReadOnly
    '필터를 설정합니다.
    com.Filter = "Excel Files (*.xls)|*.xls"
    '기본 필터를 지정합니다.
    com.FilterIndex = 2
    '[다른 이름으로 저장] 대화 상자를 표시합니다.
    com.ShowSave
    '선택된 파일 이름을 표시합니다.
    filename = com.filename
 
   
   
    Set objExcel = CreateObject("excel.application")
    objExcel.Visible = False
     Set objWorkbook = objExcel.Workbooks.Add
    objExcel.DisplayAlerts = False
   
    Do While objWorkbook.Worksheets.Count > 1
        Set ObjWorksheet = objWorkbook.Worksheets.Item(objWorkbook.Worksheets.Count)
        ObjWorksheet.Delete
    Loop
   
    objWorkbook.Worksheets("sheet1").Activate
    Set ObjWorksheet = objWorkbook.ActiveSheet
    ObjWorksheet.Name = "성적"

    idx = 1
    '제목달기
   
    ObjWorksheet.Cells(idx, 1) = "학번"
    ObjWorksheet.Cells(idx, 2) = "성명"
    ObjWorksheet.Cells(idx, 3) = "영어"
    ObjWorksheet.Cells(idx, 4) = "국어"
    ObjWorksheet.Cells(idx, 5) = "수학"
    ObjWorksheet.Cells(idx, 6) = "평균"

    '칼럼포맷 설정
    ObjWorksheet.Rows(idx).Font.Bold = True
    ObjWorksheet.Rows(idx).HorizontalAlignment = 3

    idx = idx + 1
    ObjWorksheet.Cells.ColumnWidth = 12

    '셀에 데이터 쓰기
    For idx = idx To ListView1.ListItems.Count
        ObjWorksheet.Cells(idx, 1) = ListView1.ListItems(idx - 1).SubItems(1)
        ObjWorksheet.Cells(idx, 2) = ListView1.ListItems(idx - 1).SubItems(2)
        ObjWorksheet.Cells(idx, 3) = ListView1.ListItems(idx - 1).SubItems(3)
        ObjWorksheet.Cells(idx, 4) = ListView1.ListItems(idx - 1).SubItems(4)
        ObjWorksheet.Cells(idx, 5) = ListView1.ListItems(idx - 1).SubItems(5)
        ObjWorksheet.Cells(idx, 6) = ListView1.ListItems(idx - 1).SubItems(6)
    Next idx


    objExcel.ActiveWorkbook.SaveAs filename
    objExcel.ActiveWorkbook.Close
Exit Sub
er:
End Sub

Private Sub search_Click()
    Form4.Show
    Form4.Caption = "검색"
End Sub


Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Then Command7.Value = True
 End Sub

===========================================================================================================
[form2]
 Option Explicit
Public i As Integer
Private Sub text1_gotfocus() '텍스트 창에 커서 위치시에 글자길이만큼 블럭화
    Text1.SelStart = 0
    Text1.SelLength = Len(Text1.Text)
End Sub

Private Sub text2_gotfocus()
    Text2.SelStart = 0
    Text2.SelLength = Len(Text2.Text)
End Sub

Private Sub text3_gotfocus()
    Text3.SelStart = 0
    Text3.SelLength = Len(Text3.Text)
End Sub

Private Sub text4_gotfocus()
    Text4.SelStart = 0
    Text4.SelLength = Len(Text4.Text)
End Sub

Private Sub text5_gotfocus()
    Text5.SelStart = 0
    Text5.SelLength = Len(Text5.Text)
End Sub


Private Sub Command1_Click() '등록, 수정
    Dim itm As ListItem
             
      If Command1.Caption = "등록" Then
          Set itm = Form1.ListView1.ListItems.Add()
        itm.SubItems(1) = Text1
        itm.SubItems(2) = Text2
        itm.SubItems(3) = Text3
        itm.SubItems(4) = Text4
        itm.SubItems(5) = Text5
        itm.SubItems(6) = (Val(Text3.Text) + Val(Text4.Text) + Val(Text5.Text)) / 3
    Else
          Set itm = Form1.ListView1.ListItems.Add()
        itm.SubItems(1) = Text1
        itm.SubItems(2) = Text2
        itm.SubItems(3) = Text3
        itm.SubItems(4) = Text4
        itm.SubItems(5) = Text5
        itm.SubItems(6) = (Val(Text3.Text) + Val(Text4.Text) + Val(Text5.Text)) / 3
        Form1.ListView1.ListItems.Remove Form1.ListView1.SelectedItem.Index
   End If


    For i = 1 To Form1.ListView1.ListItems.Count
        Set itm = Form1.ListView1.ListItems(i)
        itm.Text = i
    Next i

    Unload Me

End Sub

Private Sub Command2_Click() '취소->창닫기
    Unload Me
End Sub

Private Sub Command3_Click() '초기화
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Text5 = ""

End Sub

Private Sub Form_Activate() 'form1에서 form2창 오픈시에 정보추가 caption이면 버튼caption을 등록으로
    If Me.Caption = "정보 추가" Then
        Command1.Caption = "등록"
    Else
        Command1.Caption = "수정"
        '수정할 입시정보 내용을 표시함
        Text1 = Form1.ListView1.SelectedItem.SubItems(1)
        Text2 = Form1.ListView1.SelectedItem.SubItems(2)
        Text3 = Form1.ListView1.SelectedItem.SubItems(3)
        Text4 = Form1.ListView1.SelectedItem.SubItems(4)
        Text5 = Form1.ListView1.SelectedItem.SubItems(5)
       
    End If
End Sub

===================================================================================================
[form4]
Option Explicit
Private Sub ListView1_LostFocus()
   ' 컨트롤이 포커스를 잃은 후 각 ListItem의 선택된
   ' 속성을 False로 다시 설정합니다.
   Dim i As Integer
   For i = 1 To Form1.ListView1.ListItems.Count
      Form1.ListView1.ListItems.Item(i).Selected = False
   Next i
End Sub

Private Sub Command1_Click()
    Dim strFindMe As String
    Dim itmFound As ListItem   ' FoundItem 변수.

    Call ListView1_LostFocus


    Set itmFound = Form1.ListView1.FindItem(Text1.Text, lvwSubItem, , lvwPartial)
    'lvwSubItem 자리에 들어갈 수 있는거는
    'lvwSubItem 또는 lvwText 또는 lvwTag 가 있음. MSDN 참고
    '마지막자리에 lvwPartial : Like % 검색...첫 번에 나온거에 멈춤.
    'lvwWholeWord : 정확하게 맞는거 검색.

    If itmFound Is Nothing Then  ' 찾는거 없다 -> 알려주고 끝냄.
      MsgBox "일치하는 정보가 없습니다."
      Text1.SetFocus
      Text1.SelStart = 0
      Text1.SelLength = Len(Text1.Text)
      Exit Sub

    Else
       itmFound.EnsureVisible '찾는행으로 스크롤 옮김.
       itmFound.Selected = True   ' 찾은행을 선택함.
       Form1.ListView1.SetFocus      '포커스를 줌
    End If
    Unload Me
End Sub


Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Then Command1.Value = True
End Sub



2008. 11. 4. 20:48

with 사용법

VB 2008. 11. 4. 20:48

개체에서 여러 작업 수행

한 개체에서 여러 작업을 수행해야 하는 경우가 있습니다. 예를 들어 한 개체에 여러 속성을 설정해야 하는 경우입니다. 이와 같은 경우 필요한 수만큼 문을 사용합니다.

Private Sub Form_Load()
   Command1.Caption = "확인"
   Command1.Visible = True
   Command1.Top = 200
   Command1.Left = 5000
   Command1.Enabled = True
End Sub

모든 문에서 같은 개체 변수 Command1을 사용한다는 것에 주목하기 바랍니다. With...End With 문을 사용하면 이 코드를 읽고 쓰기 쉬울 뿐만 아니라 더욱 효과적으로 실행할 수 있습니다.

Private Sub Form_Load()
   With Command1
      .Caption = "확인"
      .Visible = True
      .Top = 200
      .Left = 5000
      .Enabled = True
   End With
End Sub

With...End With 문을 With...End With 내에 포함시켜 중첩된 With 문을 만들 수도 있습니다.