Posted on 2008/12/03 21:21
Filed Under Programming/VB

DNS server, DNS service  

1.
fpSpread1.SearchCol(ByVal lCol As Long, ByVal lRowStart As Long, ByVal lRowEnd As Long, ByVal Text As String, ByVal SearchFlags As SearchFlagsConstants) As Long

Return = fpSpread1.SearchCol(검색할 컬럼, 시작Row, 끝Row, 검색어, 검색Flag)


2.
fpSpread1.SearchRow(ByVal lRow As Long, ByVal lColStart As Long, ByVal lColEnd As Long, ByVal Text As String, ByVal SearchFlags As SearchFlagsConstants) As Long

Return = fpSpread1.SearchRow(검색할 Row, 시작Col, 끝Col, 검색어, 검색Flag)

Return 값이 -1 이면, 검색어가 검색되지 않음.

-----------

Spread 6 의 샘플소스가 없어 해당 샘플소스에서 ActiveRow 나 ActiveCol 부터 검색하도록 코딩이 되어 있는지 모르지만, 이 메서드는 지정해준 범위내에서 검색을 하도록 되어 있습니다....

실제 많이 사용되는 메서드 입니다...

2008/12/03 21:21 2008/12/03 21:21

Posted on 2008/11/19 18:53
Filed Under Programming/VB

DNS server, DNS service  

비주얼 베이직 6.0에서 작업을 하다보면 뜻밖에도 이런 것이 안 되다니 하고 느끼는 것이 있다. 바로 마우스의 휠이 먹히지 않는다는 것이다. 마우스로 화면을 스크롤할 수 없다는 것은 정말이지 뜻밖의 복병이다. 윈도우에서 아무런 문제 없이 사용하던 것이 비주얼베이직에만 오면 딱 그 기능이 멎어버린다. (놀라운 MS사의 센스가 아닐 수 없다!)

이 문제를 해결하려고 하면 아래의 파일을 내려받아서 설치하면 간단하게 해결된다.(왜 이것은 VB6에 기본적으로 포함하지 않는 것도 이상하다. 더군다나 패치에서도 해결할 노력이 없다. SP6까지 오면서 개선된 것이 없다. 다행히도 VB.NET에서는 된다.)

1. 아래의 파일을 내려받는다.

http://download.microsoft.com/download/e/f/b/efb39198-7c59-4ace-a5c4-8f0f88e00d34/vb6mousewheel.exe

2. 내려 받은 실행 파일을 클릭하여 실행시킨다.
3. 압축을 풀 폴더를 임의로 선택한다. (단, 위치는 기억한다. 그리고 설치 폴더를 지우면 안 된다.)
4. 다음과 같이 명령어를 입력하여 등록한다.
regsvr32 <압축을 푼 폴더>\VB6IDEMouseWheelAddin.dll
등록되었다는 메시지가 나오면  OK버튼을 클릭한다.
5. Visual Basic 6.0를 실행한다.
6. 메뉴에서 '추가기능(Add-Ins)'->추가기능관리자(Add-in Manager)를 선택한다.
7. '사용가능한 추가기능'목록 중에서 'MouseWheel Fix'를 선택한다.
8. '로드 동작'에서 '로드/언로드'항목과 '시작할 때 로드'항목을 체크(선택)한다.
9. '확인' 버튼을 눌러서 종료한다.
2008/11/19 18:53 2008/11/19 18:53

Posted on 2008/10/21 18:24
Filed Under Programming

DNS server, DNS service  


순서도 종류 및 설명

도형 유형 및 설명
도형 모양 수행의 시작/종료: 처리 과정의 시작과 끝입니다.
도형 모양 처리: 처리 과정의 한 단계입니다.
도형 모양 종속 처리: 이미 알려졌거나 이해한 처리 과정으로 순서도에서는 자세히 설명하지 않았습니다.
도형 모양 판단: 처리 과정에서 판단을 내려야 하는 지점입니다.
도형 모양 연결자: 순서도 내에서 상호 참조하거나 다른 처리 과정으로 안내하는 선입니다.
도형 모양 데이터: 받는 정보나 유포하는 정보와 같은 모든 종류의 입력 또는 출력입니다.
도형 모양 문서: 인쇄물처럼 사람들이 읽을 수 있도록 만들어진 것을 의미합니다.
도형 모양 지연: 처리 과정에서 기다리는 것을 의미합니다.
도형 모양 준비: 준비 단계를 의미합니다.


1. 순서도 (flow chart) → 알고리즘 또는 문제해결의 절차를 그림으로 알기 쉽게 나타낸 것.

→ 설계한 알고리즘을 객관적이며 쉽게 표현, 이해하기 위하여 기호를 사용.

2. 순서도의 종류

① 시스템 순서도 : 일의 처리과정을 전체적으로 상세하게 표현한 순서도

② 프로그램 순서도 : 컴퓨터로 처리가 가능한 부분을 단계적으로 표현한 순서도

 

3. 순서도에 쓰이는 기호

1) 터미널 : 순서도의 시작과 끝을 나타내는 기호2) 처리기호 : 값을 지정하거나 변경 또는 계산을 나타내는 기호3) 판단기호 : 조건을 판단하여 경로를 택하는 기호4) 인쇄기호 : 처리된 값을 인쇄하는 것을 나타내는 기호

4 순서도 작성법

1) 순서도는 “시작 단말 기호”를 시작으로 “끝 단말 기호”로 마친다.2) 기호와 기호사이는 흐름선으로 연결한다.3) 흐름선의 방향은 ↓ 위에서 아래로, → 왼쪽에서 오른쪽 (단,↱ 순환기호(Loop)같은 특별한 경우는 예외)4) 작업과정이 길거나 복잡하면 나누어 작성하고 연결자로 연결5) 값을 보관, 처리하기 위하여 변수를 사용

5. 순서도 구성요소

1) 변수(Variable) : 데이터[상수,변수,수식]를 기억 할 수 있는 기억공간 → 문자변수, 수치변수(정수형,실수형,상수)2) 상수(Constant) → 문자상수, 수치상수(정수형,실수형,상수)2) 상수(Constant) → 산술연산자([], **, */, +-), 관계연산자(=, ≠, <, >, >=, <=), 논리연산자(NOT, AND, OR)

2008/10/21 18:24 2008/10/21 18:24
TAG :

Posted on 2008/10/13 22:42
Filed Under Programming/C#

DNS server, DNS service  

C#... 즉.. 닷넷... 이놈 참 대단한놈이다.. 왠만한 자료구조형이 다있다.. 큐!~ 도 있다 --^ 예전에 이걸 구현해서.. 사용했던 내가.. ㄷㄷㄷ....

CShop자료구조02_자료구조_큐.cs

/*
 C#자료구조02 : 자료구조_큐(Queue).
 .NET Class의 Stack 클래스 사용.
 2005년 12월 07일
 Choi Young Gyu

*/

using System;
using System.Collections;

public class 큐
{

 public static void Main()
 {

  //[1]큐 인스턴스 생성
  Queue queue = new Queue();
  //[2]큐에 데이터 입력
  Console.WriteLine("Enqueue : VC++");
  queue.Enqueue("VC++");
  Console.WriteLine("Enqueue : VB.NET");
  queue.Enqueue("VB.NET");
  //[3]큐에서 대이터 꺼내기
  Console.WriteLine("Dequeue : {0}",queue.Dequeue());
  Console.WriteLine("Dequeue : {0}",queue.Dequeue());
 }
}

결과

사용자 삽입 이미지

2008/10/13 22:42 2008/10/13 22:42
TAG : , ,

Posted on 2008/09/25 01:12
Filed Under Programming/C#

DNS server, DNS service  

// 프로그램 시작시간
DateTime startTime = DateTime.Now;

// 1. 현재시간
DateTime now;
now = DateTime.Now;

Console.WriteLine(now); // 현재시간 전체
Console.WriteLine(now.Year); // 현재 년도
Console.WriteLine(now.Month); // 현재 달
Console.WriteLine(now.Day); // 현재 일
Console.WriteLine(now.DayOfWeek); // 현재 주
Console.WriteLine(now.DayOfYear); // 1년중 몇일째인지
Console.WriteLine(now.TimeOfDay); // 금일 자정부터 몇시간
Console.WriteLine(now.Hour); // 시간
Console.WriteLine(now.Minute); // 분
Console.WriteLine(now.Second); // 초
Console.WriteLine(now.Millisecond); // 1000분의 1초

Console.WriteLine(now.Ticks); // 1000분의 1초

// 2. 임의시간 설정
DateTime birthday;
birthday = DateTime.Parse("2009년8월9일"); // 시분초 미지정시 자정으로
birthday = DateTime.Parse("2009/08/09");

Console.WriteLine(birthday);

DateTime xmas;
xmas = new DateTime(2008, 12, 25, 0, 0, 0);

Console.WriteLine(xmas);

// 3. 연산

// 3.1 오늘 + 100일
now = DateTime.Now;
DateTime result = now.AddDays(100); // 각 단위별 add메소드가 존재 MSDN참고

Console.WriteLine(result);

// 3.2 크리스마스까지 남은 날
TimeSpan result2 = xmas - now;
Console.WriteLine(result2);
Console.WriteLine(result2.Days); // NNN일 (내림표현)
Console.WriteLine(result2.TotalDays); // NNN.NNNNNNN일 (더정확)

// 3.3 오늘 - 100일
Console.WriteLine(now - TimeSpan.FromDays(100));
Console.WriteLine(now.AddDays(-100));

// 4. 날짜시간 출력형식 지정
Console.WriteLine(now.ToLocalTime()); // 2008-08-08 오전 10:31:25

Console.WriteLine(now.ToLongDateString()); // 2008년 8월 8일 금요일
Console.WriteLine(now.ToShortDateString()); // 2008-08-08

Console.WriteLine(now.ToLongTimeString()); // 오전 10:31:25
Console.WriteLine(now.ToShortTimeString());   // 오전 10:31

// 프로그램 종료시간
DateTime endTime = DateTime.Now;

Console.WriteLine("프로그램 수행시간 : {0}/ms", (double)(endTime - startTime).Ticks / 1000000.0F);
2008/09/25 01:12 2008/09/25 01:12

Posted on 2008/08/28 23:49
Filed Under Programming

DNS server, DNS service  

헝가리언 표기법

 

유래

10,15년 전 Microsoft의 개발자중 헝가리 사람의 프로그래머가 쓰던 변수 명명법.

MS 내부에서 따라 쓰기 시작하던 것이 점차 전세계의 프로그래머들에게 널리 퍼져 프로그램 코딩시 변수 명명의 표준적인 관례가 되었다. 그러나 실제로 현장에서 일하다 보면 헝가리안 표기법을 제대로 지키는 개발자는 그리 많지 않다. 어느 정도 개발 경험을 가지고 있는 프로그래머는 물론 심지어 시중의 프로그래밍 서적에서 조차 저자 마다 변수 명을 개인에 따라 가지 각색으로 짓고 있어서 처음프로그램을 배우는 입문자들이 변수 명명에 대한 기준을 제대로 잡지 못하고 있는 실정이다.

변수 명명에 관한 표준화된 관례를 지켜주면 코드의 가독성을 높여 줄뿐 아니라 어떤 변수 명을 지을지 고민하지 않아도 되는 편리함을 누릴 수 있다.

                         

 :Prefix     :Type                  :Description                                   :Example

:b          :bool                   :any boolean type                           :bool bTrue;

:c          :char                    :character type                              :char cLetter;

:i           :int                      :integer                                         :int iCars;

:l           :long                    :long type                                      :long lDistance;

:u          :unsigned             :unsigned type                            

:f           :float                   :floating point                                :float fPercent;

:d          :double                :double floating point                      :double dPercent;

:s           :static                  :a static variable                           :static short ssChoice;

:rg         :array                   :stands for range                            :float rgfTemp[16];

:p          :*                        :any pointer                                   :int *piAddr;

:sz         :*                       :null terminated string of characters   :char szText[16];

:pfn        :*                        :function pointer                            :int (*pifnFunc1)(int x, int y);

:t           :struct                 :a user defined type

:e          :enum                  :variable which takes enumerated values

:E          :enum                  :Enumerated type

:g_         :Global                 :Global Variable                               :String *g_psBuffer

:m_        :Member               :class private member variable           :

:k           :constant formal parameter                                        :void vFunc(const long klGalaxies)

:r           :reference formal parameter                                       :void vFunc(long&rlGalaxies)

:str        :String                  :string class(C )                          :String strName;

:prg       :dynamically allocated array                                       :char *prgGrades;

:h          :handle                :handle to something                     :hMenu

 

:n          :                           :number, quantity                          :int nNum;

:x/y        :                           :used as size                                 :int xWitdth, yHeight;

 

 

Example of type specific variable naming

unsigned char ucByte;              :한 바이트 데이타

         char cChar;               :한 문자

unsigned char rgucByte[10];           :바이트 데이타10개

         char rgcChar[10];                        :문자 데이터10개

         char szChar[16 1];     :문자16개를 저장할 수 있는 문자열 공간

 

:Data Type           :Description

BYTE               unsigned char type

WORD              unsigned short type

DWORD            unsigned long type



접두어

의미

a

배열

b 또는 f

BOOL형 변수(b는 bool, f는 flag의 약자

by

BYTE(unsigned char)형 변수

c

카운터로 사용되는 변수

ch

Char 형 변수

cx, cy

X, Y 길이를 나타내기 위해 사용되는 변수

d

날짜형 변수

dbl

Double형 변수

h

핸들(HANDLE)형 변수

n는 i

Int형 변수

l

Long형 변수

p

포인터변수

lp

Long(far)포인터 변수(32비트 프로그래밍에서는 일반 포인터와 같음)

s

문자열

sz

(NULL)문자로 끝나는 문자열

u

Unsigned int형 변수

w

WORD(unsigned short)형 변수

dw

DWORD(unsigned long)형 변수

str

Cstring 형 변수

2008/08/28 23:49 2008/08/28 23:49

Posted on 2008/08/26 22:32
Filed Under Programming/C#

DNS server, DNS service  

DirectX Software Develpment Kit

http://www.microsoft.com/downloads/details.aspx?FamilyID=86cf7fa2-e953-475c-abde-f016e4f7b61a&displaylang=en&Hash=qeJBP6Uksx0zY%2btLhcKYj%2fx4PDbDDOI%2btC%2bsa73SX4pkMysJCEnMU48j49VRn6%2fbDsK5k8OfHBLz%2fe9FNHN8hg%3d%3d

위 SDK를 설치한 후에

using Microsoft.DirectX.AudioVideoPlayback;

를 이용하여~ 딱 3줄로.. 동영상 재생가능~~

1. 무작정 Visual Studio 2008을 띄우고 C# WinForm 프로젝트 생성
2. [Add Reference]에서 Microsoft.DirectX.AudioVideoPlayback를 추가해주고(DirectX는 깔려 있어야 함)
3. Form을 더블 클릭하고 다음과 같이 쳐준다.

using Microsoft.DirectX.AudioVideoPlayback;
private void Form1_Load(object sender, EventArgs e){
    Video v = Video.FromFile(@"c:\test.avi");
    v.Owner = this;
    v.Play();
}

4. F5를 누른다.

근데 안된다.

[Debug]-[Exceptions]-[LoaderLock]의 Thrown 항목을 꺼준다.

사용자 삽입 이미지

5. F5를 누른다.

사용자 삽입 이미지

ㅋㅋㅋ 성공 ….

[잡설]
이번 일주일간 WDM 디바이스 드라이버 프로그래밍 교육중이다.
Kernel Mode 프로그램에서는 좀만 잘못하면 블루 스크린…
오랜만에 보는 VisualStudio… 안보던 사이 많이 바뀌었었네…

2008/08/26 22:32 2008/08/26 22:32

Posted on 2008/08/12 00:03
Filed Under Programming/VB

DNS server, DNS service  

winsock1.senddata 이부분 밑에는
winsock1.listindex = winsock1.listcount - 1
이렇게 써주시면 스크롤이 자동으로 내려갑니다.^^




-----*추가내용*-----

가로 스크롤 생성

''''''''''''''일반프로시저 에 넣을곳
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 Const LB_SETHORIZONTALEXTENT = &H194
Dim LV As String
''''''''''''''여기서부터 폼의 속성으로넣어주세요
Private Sub AddScroll(List As ListBox)
Dim i As Integer, intGreatestLen As Integer, lngGreatestWidth As Long
For i = 0 To List.ListCount - 1


If Len(List.List(i)) > Len(List.List(intGreatestLen)) Then
intGreatestLen = i
End If
Next i
lngGreatestWidth = List.Parent.TextWidth(List.List(intGreatestLen) + Space(1))
'Space(1)은 문자열의 짤림방지용입니다.
lngGreatestWidth = lngGreatestWidth \ Screen.TwipsPerPixelX
'스크롤바를 추가한다.
SendMessage List.hwnd, LB_SETHORIZONTALEXTENT, lngGreatestWidth, 0

End Sub
'그다음 스크롤을 생성하는것..
'이건 아무데나 해도됩니다.
Private Sub Form_Load()
Call AddScroll(List1)
End Sub
'저는 폼이 켜질때로 하겠습니다.
'이렇게 해주시면 길게 된 문자가 쓰여지면 가로스크롤이 생성됩니다.
2008/08/12 00:03 2008/08/12 00:03

Posted on 2008/07/16 00:44
Filed Under Programming/PHP

DNS server, DNS service  

사용자 삽입 이미지

3번 주제가 무척 땡김;
그래서 참석! 결정..

사실 몇몇 홈페이지를 ZBXe를 써서 만들어봤는데... 기존의 보던 PHP 소스와는 많이 달라 약간 헤맨다는 ㅠㅠ 그래서 2번도 궁굼~~
2008/07/16 00:44 2008/07/16 00:44

Posted on 2008/07/14 02:23
Filed Under Programming/MFC

DNS server, DNS service  

질문: 비트필드 구조체란? nasanjin / 2007-10-18 18:24

비트필드 구조체란 무엇이며?
어떠한 형태로 사용하며????
사용예제 하나 보여주시고요;;;
사용하는 경우는 어떤 경우인지??
사용하게 되면 좋은 이점은 무엇이며? 단점은 무엇입니가?
메모리 공간은 어떤방식으로 할당하는지???

답변: re: 비트필드 구조체란? keyseek / 2007-10-18 22:41

구조체 멤버를 비트단위로 선언할 수 있는 구조체 입니다.

struct st
{
   unsigned int a : 2;
   unsigned int b : 3;
};

이런 식으로 표현합니다. 즉 일반 구조체의 멤버 산언과 동일하나 멤버명뒤에 : n 으로 비트수를 지정합니다.
예제? 위에 선언한 구조체를 이용하겠습니다.

struct st x = {1,5};

이렇게 하면 x.a는 1, x.b는 5 가 들어갑니다.
즉, a는 2비트인데 1이 들어가므로 2진수로 보면 01 이 들어가게 됩니다.
b는 3비트인데 5가 들어 가므로 2진수로 보면 101 이 들어가게 됩니다
즉, 일반 구조체 사용하듯이 사용하면 되는 겁니다.
사용하는 경우? 뭐 다양하게 사용되겠지만
flag선언때 많이 사용합니다. (이걸 어떻게 설명드리지요?)
또한 어떤 데이터 스트림(헤더정도 등)의 parsing에도 많이 쓰입니다.
예를들어 총 4바이트 헤더에서 처음 3비트는 어떤 정보이고 다음 8비트는 뭐고
그다음 몇비트는 뭐고 하는 식으로 비트들로 필드가 구분되어 있다면
이들 필드들만 억세스 하기 위하여 비트필드를 선언하여 사용합니다.

장점? 아무래도 변수를 비트로 사용하니까 메모리가 줄어들겠죠
예를들어 int a = YES; a = NO; (여기서 YES, NO는 1과 0으로 사전 define된것으로 가정)
이렇게 a가 사용된다면 a는 4바이트 변수인데 실제 저장하는 값은 0 아니면 1 혹은
YES, NO 등 입니다. 따라서 이런 경우는 1비트면 충분하지요
만약 이런식의 변수들이 여러개 있다면 이들을 묶어서 하나의 구조체로 만들고
그 내부 필드를 비트필드로 하는 거지요 그럼 메모리 총량이 감소되어 절약이 가능합니다.

단점? 전체 32비트 메모리(비트필드 이지만 구조체의 최소크기는 int가 됨)에서
특정 비트들만 값을 변경하면 즉 위의 구조체에서 x.a = 1을 하면 실제 이 코드는
1을 그냥 a에 대입하는 것이 아니라 실제 코드는 (x & 3  | 1) 로 처리되어 비트 연산을
수행하게 됩니다. 결국 메모리는 아끼지만 속도는 느려지는 거지요

메모리는 먼저 선언된 멤버가 낮은비트(0번지크)부터 채워집니다.
위의 구조체는 32비트(int)로 총 사이즈가 잡힙니다.

그 32비트에서 하위 두비트 0,1 비트는 a가 그 위의 3비트 3,4,5 비트는 b가 위치합니다.
나머지 비트들은 사용되지 않습니다.

이해 되실런지요?

2008/07/14 02:23 2008/07/14 02:23

Posted on 2008/07/14 02:20
Filed Under Programming/VB

DNS server, DNS service  

Winsock 컨트롤 사용

WinSock 컨트롤은 UDP(User Datagram Protocol)TCP(Transmission Control Protocol)을 사용하여 원격 장비에 연결하여 데이터를 교환할 수 있게 해줍니다. 이 두 프로토콜을 사용하여 클라이언트와 서버 응용 프로그램을 만들 수 있습니다. Timer 컨트롤과 마찬가지로 WinSock 컨트롤은 실행 모드에서 눈에 보이는 인터페이스를 가지고 있지 않습니다.

 

가능한 용도

중앙 서버로 보내기 전에 사용자 정보를 모으는 클라이언트 응용 프로그램을 작성합니다.

여러 사용자로부터의 데이터를 중앙으로 모으는 기능을 가진 서버 응용 프로그램을 작성합니다.

"chat" 응용 프로그램을 작성합니다.

 

프로토콜 선택

WinSock 컨트롤을 사용할 때 먼저 고려해야 할 것은 TCP를 사용할 것인지 UDP 프로토콜을 사용할 것인지를 결정하는 것입니다. 이 두 프로토콜의 가장 큰 차이점은 연결 상태입니다.

TCP 프로토콜 컨트롤은 연결에 기반을 둔 프로토콜이고 전화와 비슷합니다. 사용자는 진행을 하기 전에 반드시 연결을 수행해야 합니다.

UDP 프로토콜은 연결이 필요 없는 프로토콜이고 두 시스템간의 트랜잭션은 메모를 전달하는 것과 비슷합니다. 메시지는 한 시스템에서 다른 시스템으로 보내지지만 두 시스템 사이의 직접적인 연결은 없습니다. 나아가 개인이 보내는 최대 데이터 크기는 네트워크에 따라 정해집니다.

만드는 응용 프로그램의 특성은 일반적으로 어느 프로토콜을 선택해야 할지를 결정합니다. 다음은 적절한 프로토콜을 선택하는 것을 도와주는 몇 가지 질문이 있습니다.

데이터를 보내거나 받을 때 응용 프로그램이 서버나 클라이언트의 승인을 필요로 합니까? 그렇다면 TCP 프로토콜은 데이터를 보내거나 받기 전에 직접적인 연결을 필요로 합니다.

데이터가 이미지나 사운드 파일과 같이 아주 큽니까? 연결이 만들어지면 TCP 프로토콜은 이 연결을 유지하고 데이터의 통합성을 보장합니다. 그러나 이 연결은 더 많은 컴퓨터 자원을 사용하고 이것은 컴퓨터의 가격을 "비싸게" 합니다.

데이터가 간격을 두고 보내집니까 아니면 한번에 보냅니까? 예를 들어, 특정 작업이 완료되었을 때 지정한 컴퓨터에 알려주는 응용 프로그램을 만들 때는 UDP 프로토콜이 더 적절합니다. 또한 UDP 프로토콜은 작은 양의 데이터를 보내는데 더 적절합니다.

 

프로토콜 설정

응용 프로그램이 사용할 프로토콜을 설정하려면 속성 창의 디자인 모드에서 프로토콜을 누르고 sckTCPProtocol이나 sckUDPProtocol을 선택합니다. 또한 다음과 같이 코드에서 Protocol 속성을 설정할 수 있습니다.

Winsock1.Protocol = sckTCPProtocol

 

컴퓨터의 이름 결정

원격 시스템에 연결하려면 시스템의 IP 주소나 "친숙한 이름"을 알아야 합니다. IP 주소는 마침표로 구분된 세 자리 숫자의 시리즈입니다(xxx.xxx.xxx.xxx). 일반적으로 시스템의 친숙한 이름을 기억하는 것이 훨씬 쉽습니다.

 

내 컴퓨터 이름을 찾으려면

[작업 표시줄]에서 [시작]을 누릅니다.

[설정] 항목에서 [제어판]을 누릅니다.

[네트워크] 아이콘을 두 번 누릅니다.

[컴퓨터 확인] 탭을 누릅니다.

사용자 컴퓨터 이름은 [컴퓨터 이름] 상자에서 찾을 수 있습니다.

사용자 컴퓨터 이름을 찾았으면 RemoteHost 속성의 값으로 사용할 수 있습니다.

 

TCP 연결 기초

TCP 프로토콜을 사용하는 응용 프로그램을 작성할 때 먼저 응용 프로그램이 서버가 될지 클라이언트가 될지를 결정해야 합니다. 서버를 만드는 것은 지정한 포트에서 응용 프로그램이 "응답"하는 것을 의미합니다. 클라이언트가 연결 요청을 만들 때 서버는 요청을 받아들여서 연결을 완료할 수 있습니다. 연결이 완료되면 클라이언트와 서버는 서로 자유롭게 통신할 수 있습니다.

다음 단계를 실행하여 기본 서버를 만듭니다.

 

TCP 서버를 작성하려면

새 표준 EXE 프로젝트를 만듭니다.

기본 폼의 이름을 frmServer로 바꿉니다.

폼의 캡션을 "TCP 서버"로 바꿉니다.

폼에 Winsock 컨트롤을 만들고 그 이름을 tcpServer로 바꿉니다.

폼에 두 개의 TextBox 컨트롤을 추가합니다. 첫째 컨트롤의 이름은 txtSendData, 그리고 둘째 컨트롤의 이름은 txtOutput으로 정합니다.

아래 코드를 폼에 추가합니다.

 

Private Sub Form_Load()

' LocalPort 속성을 정수로 설정합니다.

' Listen 메서드를 불러옵니다.

tcpServer.LocalPort = 1001

tcpServer.Listen

frmClient.Show ' 클라이언트 폼을 보여줍니다.

End Sub

 

Private Sub tcpServer_ConnectionRequest _

(ByVal requestID As Long)

' 컨트롤의 상태가 닫혔는지 확인합니다. 닫히지 않았으면

' 새 연결을 받아들이기 전에 연결을 종료합니다.

If tcpServer.State <> sckClosed Then tcpServer.Close

' requestID 매개 변수를 사용하여 요청을 받아들입니다

tcpServer.Accept requestID

End Sub

 

Private Sub txtSendData_Change()

' txtSendData로 이름 지정된 TextBox 컨트롤은 전송할 데이터를 포함합니다. _

사용자가 입력란에 입력할 때마다 문자열이 SendData 메서드를 사용하여

전송됩니다.

tcpServer.SendData txtSendData.Text

End Sub

 

Private Sub tcpServer_DataArrival _

(ByVal bytesTotal As Long)

' 들어오는 데이터에 대한 변수를 선언합니다.

' GetData 메서드를 불러오고 txtOutput으로 이름이 지정된 TextBox Text _

속성을 데이터에 설정합니다.

Dim strData As String

tcpServer.GetData strData

txtOutput.Text = strData

End Sub

 

위의 프로서저는 간단한 서버 응용 프로그램을 작성합니다. 그러나 이 시나리오를 완성하려면 클라이언트 응용 프로그램도 만들어야 합니다.

 

TCP 클라이언트를 만드려면

프로젝트에 새 폼을 추가하고 이름을 frmClient로 정합니다.

폼의 캡션을 TCP 클라이언트로 변경합니다.

폼에 Winsock 컨트롤을 추가하고 그 이름을 tcpClient로 정합니다.

frmClient에 두 개의 TextBox 컨트롤을 추가합니다. 첫째 컨트롤의 이름은 txtSend, 그리고 둘째 컨트롤의 이름은 txtOutput로 정합니다.

폼에 CommandButton 컨트롤을 만들고 그 이름을 cmdConnect로 정합니다.

CommandButton 컨트롤의 캡션을 연결로 바꿉니다.

아래 코드를 폼에 추가합니다.

 

중요   RemoteHost 속성의 값을 사용자 컴퓨터에 친숙한 이름으로 꼭 바꾸어야 합니다.

 

Private Sub Form_Load()

   ' Winsock 컨트롤의 이름은 tcpClient입니다.

   ' 메모: 원격 호스트를 지정하려면 IP 주소나(: "121.111.1.1") 컴퓨터의 "친숙한" _

이름을 사용할 수 있습니다, 여기에 보여지는 것과 같습니다.

   tcpClient.RemoteHost = "RemoteComputerName"

   tcpClient.RemotePort = 1001

End Sub

 

Private Sub cmdConnect_Click()

   ' Connect 메서드를 불러와서 연결을 시작합니다.

   tcpClient.Connect

End Sub

 

Private Sub txtSendData_Change()

   tcpClient.SendData txtSend.Text

End Sub

 

Private Sub tcpClient_DataArrival _

(ByVal bytesTotal As Long)

Dim strData As String

  tcpClient.GetData strData

  txtOutput.Text = strData

End Sub

 

위의 코드는 간단한 클라이언트-서버 응용 프로그램을 만듭니다. 이 둘을 함께 사용하려면 해당 프로젝트를 실행하고 [연결]을 누릅니다. 그런 다음 한 폼의 txtSendData 입력란에 텍스트를 입력하면 다른 폼의 txtOutput 입력란에 같은 텍스트가 나타납니다.

 

하나 이상의 연결 요청 적용

위에 설명된 기본 서버는 하나의 연결 요청만 받아들입니다. 그러나 컨트롤 배열을 만들어서 같은 컨트롤을 사용하는 여러 개의 연결 요청을 받아들일 수 있습니다. 이런 경우 연결을 종료할 필요 없이 Index 속성을 설정하여 컨트롤의 새 인스턴스를 만들고 새 인스턴스에서 Accept 메서드를 불러냅니다.

아래 코드는 폼에 sckServer로 명명된 Winsock 컨트롤이 있고 그 Index 속성이 0으로 설정되어 있는 것으로 가정합니다. 그러므로 그 컨트롤은 컨트롤 배열의 부분입니다. 선언 영역에서 모듈 수준 변수 intMax가 선언됩니다. 폼의 Load 이벤트에서 intMax 0으로 설정되고 배열에 있는 첫째 컨트롤의 LocalPort 속성이 1001로 설정됩니다. 그리고 나면 컨트롤에 "응답" 컨트롤을 작성하는 Listen 메서드를 불러옵니다. 각 연결 요청이 도착하면 코드는 인덱스가 0("응답" 컨트롤의 값)인지를 확인하기 위해 테스트를 합니다. 인덱스가 0이면 응답 컨트롤은 intMax가 증가하고 그 수를 새 컨트롤 인스턴스를 작성하는 데 사용합니다. 이 새 컨트롤 인스턴스는 연결 요청을 받아들이는 데 사용됩니다.

 

Private intMax As Long

 

Private Sub Form_Load()

   intMax = 0

   sckServer(0).LocalPort = 1001

   sckServer(0).Listen

End Sub

 

Private Sub sckServer_ConnectionRequest _

(Index As Integer, ByVal requestID As Long)

   If Index = 0 Then

      intMax = intMax + 1

      Load sckServer(intMax)

      sckServer(intMax).LocalPort = 0

      sckServer(intMax).Accept requestID

      Load txtData(intMax)

   End If

End Sub

 

 

주요 속성

1. BytesReceived 속성 

받은(현재 수신 버퍼에 있는) 데이터의 양을 반환합니다. GetData 메서드를 사용하여 데이터를 검색합니다.

읽기 전용이며 디자인 모드에서는 사용할 수 없습니다

 

2. State 속성(Winsock 컨트롤)

컨트롤의 상태를 열거 형식으로 반환합니다. 읽기 전용이며 디자인 모드에서는 사용할 수 없습니다.

구문

object.State

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

데이터 형식

Integer

설정

State 속성에 대한 설정은 다음과 같습니다.

상수

설명

sckClosed

0

기본 값. 닫혀 있음

sckOpen

1

열려 있음

sckListening

2

수신 대기 중

sckConnectionPending

3

연결 보류 중

sckResolvingHost

4

호스트 고정 중

sckHostResolved

5

호스트 고정 완료

sckConnecting

6

연결 중

sckConnected

7

연결 완료

sckClosing

8

피어가 연결을 닫고 있음

sckError

9

오류

 

3. RemoteHostIP 속성

원격 컴퓨터의 IP 주소를 반환합니다.

  • 클라이언트 응용 프로그램에서는, Connect 메서드로 연결이 이루어진 후 원격 컴퓨터의 IP 문자열이 이 속성에 포함됩니다.
  • 서버 응용 프로그램에서는 연결 요청(ConnectionRequest 이벤트)이 들어온 뒤 연결을 시작한 원격 컴퓨터의 IP 문자열이 이 속성에 포함됩니다.
  • UDP 프로토콜을 사용할 때는 DataArrival 이벤트가 발생한 후에 UDP 데이터를 보내는 컴퓨터의 IP 주소가 이 속성에 포함됩니다.

구문

object.RemoteHostIP

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

데이터 형식

string

 

4. LocalIP 속성

지역 컴퓨터의 IP 주소를 IP 주소 점선 유형(xxx.xxx.xxx.xxx)으로 반환합니다. 읽기 전용이며 디자인 모드에서는 사용할 수 없습니다.

구문

object.LocalIP

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

데이터 형식

문자열

 

5. Protocol 속성(Winsock 컨트롤)

Winsock 컨트롤에서 사용되는 TCP 또는 UDP 프로토콜을 설정하거나 반환합니다.

구문

object.Protocol [=protocol]

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

설정

protocol 설정은 다음과 같습니다.

상수

설명

sckTCPProtocol

0

기본값. TCP 프로토콜

sckUDPProtocol

1

UDP 프로토콜

 

참고

이 속성을 재설정하기 전에 Close 메서드를 사용하여 컨트롤을 반드시 닫아야 합니다.

 

주요 메소드

1. Accept 메서드

TCP 서버 응용 프로그램에서만 사용됩니다. 이 메서드는 ConnectionRequest 이벤트를 처리할 때 들어오는 연결을 받기 위해 사용됩니다.

구문

object.Accept requestID

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

데이터 형식

Long

참고

Accept 메서드는 ConnectionRequest 이벤트에서 사용됩니다. ConnectionRequest 이벤트는 Accept 메서드로 전달되어야 하는 대응 인수, RequestID 매개 변수를 가지고 있습니다. 다음은 그 예제입니다.

Private Sub Winsock1_ConnectionRequest _
(ByVal requestID As Long)
   ' State 속성을 검사하여 연결이 현재 열려 있으면
   ' 연결을 닫습니다.
   If Winsock1.State <> sckClosed Then Winsock1.Close
   ' requestID 매개 변수 값을 Accept 메서드에 전달합니다.
   Winsock1.Accept requestID
End Sub

 Accept 메서드는 수신 대기 상태가 아닌 새 컨트롤 인스턴스에 사용해야 합니다.

 

2. Bind 메서드

TCP 연결에 사용되는 LocalPort LocalIP를 지정합니다. 여러 프로토콜 어댑터가 있을 경우에 이 메서드를 사용합니다.

구문

object.Bind LocalPort, LocalIP

Bind 메서드 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

Object

적용 대상 목록에 있는 개체로 평가되는 개체식

LocalPort

연결할 때 사용된 포트

LocalIP

연결할 때 사용된 지역 인터넷 주소

 

참고

Listen 메서드를 호출하기 전에 Bind 메서드를 호출해야 합니다.

 

3. Close 메서드(Winsock 컨트롤)

클라이언트와 서버 응용 프로그램에 모두 사용되는 TCP 연결 또는 수신 대기 소켓을 닫습니다.

 

4. GetData 메서드(Winsock 컨트롤)

현재 데이터 블록을 검색하여 variant 형식 변수에 저장합니다.

반환값

Void

구문

object.GetData data, [type,] [maxLen]

GetData 메서드 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

Object

적용 대상 목록에 있는 개체로 평가되는 개체식

data

메서드가 성공적으로 반환된 후에 검색 데이터가 저장될 장소. 요구된 형식에 사용 가능한 데이터가 충분히 없으면 data Empty로 설정됩니다.

Type

선택적. 설정에 나타난 것 같이 검색될 데이터 형식

MaxLen

선택적. 바이트 배열이나 문자열을 받을 때 원하는 길이를 지정합니다. 바이트 배열이나 문자열에 이 인수를 생략하면, 사용 가능한 모든 데이터가 검색됩니다. 바이트 배열이나 문자열이 아닌 데이터에 이 인수를 설정하면 무시됩니다.

 

설정

type 설정은 다음과 같습니다.

설명

상수

Byte

vbByte

Integer

vbInteger

Long

vbLong

Single

vbSingle

Double

vbDouble

Currency

vbCurrency

Date

vbDate

Boolean

vbBoolean

SCODE

vbError

String

vbString

Byte Array

vbArray + vbByte

 

참고

DataArrival 이벤트에는 totalBytes 인수를 가진 GetData 메서드를 사용하는 것이 일반적입니다. maxlentotalBytes 인수보다 적게 지정하면 남은 바이트는 분실된다는 10040 경고 메시지를 받게 됩니다.

 

5. Listen 메서드

소켓을 만들어 수신 모드로 설정합니다. 이 메서드는 TCP 연결에서만 작동합니다.

구문

object.Listen

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

참고

ConnectionRequest 이벤트는 연결 요청이 들어왔을 때 발생합니다. ConnectionRequest를 처리할 때 응용 프로그램은(새 컨트롤 인스턴스에) Accept 메서드를 사용하여 연결을 받아들여야 합니다.

 

6. PeekData 메서드

GetData와 유사하지만 PeekData는 입력 대기열에서 데이터를 삭제하지 않습니다. 이 메서드는 TCP 연결에서만 작동합니다.

구문

object.PeekData data, [type,] [maxLen]

PeekData 메서드 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

object

적용 대상 목록에 있는 개체로 평가되는 개체식

data

메서드가 성공적으로 반환된 다음 검색된 데이터를 저장합니다. 요구한 형식으로 사용할 수 있는 데이터가 없으면 data Empty로 설정됩니다.

Type

선택. 설정에 설명된 것과 같이 검색되는 데이터의 형식. 기본값: vbArray + vbByte.

maxLen

선택. 바이트 배열이나 문자열을 받을 때 원하는 길이를 지정합니다. 바이트 배열이나 문자열에 대해 이 인수를 생략하면 사용할 수 있는 모든 데이터가 검색됩니다. 바이트 배열이나 문자열이 아닌 데이터 형식에 이 인수를 설정하면 무시됩니다.

 

설정

type 설정은 다음과 같습니다.

형식

상수

Byte

vbByte

Integer

vbInteger

Long

vbLong

Single

vbSingle

Double

vbDouble

Currency

vbCurrency

Date

vbDate

Boolean

vbBoolean

SCODE

vbError

String

vbString

Byte Array

vbArray + vbByte

 

참고

형식이 vbString으로 지정되면 문자열 데이터는 사용자에게 반환되기 전에 UNICODE로 전환됩니다.

 

7. SendData 메서드

원격 컴퓨터에 데이터를 보냅니다.

구문

object.SendData data

SendData 메서드 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

object

적용 대상 목록에 있는 개체로 평가되는 개체식

data

보낼 데이터. 이진 데이터에는 바이트 배열이 사용되어야 합니다.

 

참고

UNICODE 문자열이 전달되면 네트워크로 보내기 전에 ANSI 문자열로 전환됩니다.

 

주요 이벤트

1. Close 이벤트

원격 컴퓨터가 연결을 닫을 때 발생합니다. 응용 프로그램은 Close 메서드를 사용해야 TCP 연결을 올바르게 닫아야 합니다.

 

2. Connect 이벤트(Winsock 컨트롤)

Connect 작업이 완료되었을 때 발생합니다.

구문

object.Connect()

object 자리 표시자는 Winsock 컨트롤로 평가되는 개체식을 나타냅니다.

참고

Connect 이벤트를 사용하면 연결이 성공적으로 수행된 때가 언제인지 확인할 수 있습니다.

 

3. ConnectionRequest 이벤트

원격 컴퓨터가 연결을 요청할 때 발생합니다.

  • TCP 서버 응용 프로그램에서만 사용됩니다. 이 이벤트는 연결 요청이 들어올 때 발생합니다. 이벤트가 활성화된 후 클라이언트 정보가 RemoteHostIPRemotePort 속성에 저장됩니다.

구문

object_ConnectionRequest (requestID As Long)

ConnectionRequest 이벤트 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

object

적용 대상 목록에 있는 개체로 평가되는개체식.

requestID

들어오는 연결 요청 식별자. 이 인수는 둘째 컨트롤 인스턴스의 Accept 메서드에 전달되어야 합니다.

 

참고

서버는 연결을 받아들일지 여부를 결정할 수 있습니다. 들어오는 연결 요청이 거부되면 피어(클라이언트) Close 이벤트를 받게 됩니다. 새 컨트롤 인스턴스에 Accept 메서드를 사용하여 들어오는 연결을 받아들입니다.

 

4. DataArrival 이벤트

새 데이터가 도착할 때 발생합니다.

구문

object_DataArrival (bytesTotal As Long)

DataArrival 이벤트 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

Object

적용 대상 목록에 있는 개체로 평가되는 개체식

bytesTotal

Long. 검색 가능한 데이터의 전체 길이

 

참고

한번의 GetData 호출로 모든 데이터를 검색해야 이 이벤트가 발생합니다. 새 데이터가 있을 때만 이벤트가 활성화됩니다. BytesReceived 속성을 사용하면 사용할 수 있는 데이터의 양을 언제든지 확인할 수 있습니다.

 

5. Error 이벤트 (Winsock 컨트롤)

배경 프로세스(예를 들면 연결 실패, 배경에서 보내기 또는 받기 실패 등)에서 오류가 발생할 때마다 발생합니다.

구문

object_Error(number As Integer, Description As String, Scode As Long, Source As String, HelpFile as String, HelpContext As Long, CancelDisplay As Boolean)

Error 이벤트 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

object

적용 대상 목록에 있는 개체로 평가되는 개체식

number

오류 코드를 정의하는 정수. 상수는 아래 설정을 참조합니다.

description

오류 정보를 포함하는 문자열

Scode

long SCODE

Source

오류 원인을 설명하는 문자열

HelpFile

도움말 파일 이름을 포함하는 문자열

HelpContext

도움말 파일 구문

CancelDisplay

표시 취소 여부를 지정합니다. 기본 값은 False이며, 기본값 오류 메시지 상자를 표시하게 됩니다. 기본값 메시지 상자를 사용하지 않으려면 CancelDisplayTrue로 설정합니다.

 

설정

number 설정은 다음과 같습니다.

상수

설명

sckOutOfMemory

7

메모리가 부족합니다.

SckInvalidPropertyValue

380

속성값이 잘못되었습니다.

SckGetNotSupported

394

속성을 읽을 수 없습니다.

SckSetNotSupported

383

읽기 전용 속성입니다.

SckBadState

40006

요청한 트랜잭션이나 요청에 대한 프로토콜 또는 연결 상태가 잘못되었습니다.

SckInvalidArg

40014

함수에 전달된 인수의 유형 또는 지정 범위가 잘못되었습니다.

SckSuccess

40017

성공적으로 수행되었습니다.

SckUnsupported

40018

지원하지 않는 변수 형식입니다.

SckInvalidOp

40020

현재 상태에서 작업이 잘못되었습니다.

SckOutOfRange

40021

인수가 범위를 벗어났습니다.

SckWrongProtocol

40026

요청한 트랜잭션 또는 요청에 대한 프로토콜이 잘못되었습니다.

SckOpCanceled

1004

작업이 취소되었습니다.

SckInvalidArgument

10014

요청된 주소는 동시 전송 주소이지만 플래그가 설정되지 않았습니다.

SckWouldBlock

10035

블록화되지 않은 소켓입니다. 지정된 작업은 블록화되어 있습니다.

SckInProgress

10036

Winsock 블록화 작업이 진행 중입니다.

SckAlreadyComplete

10037

작업이 완료되었습니다. 진행 중인 블록화 작업이 없습니다.

SckNotSocket

10038

설명자가 소켓이 아닙니다.

SckMsgTooBig

10040

버퍼에 맞추기에는 데이터그램이 너무 커서 잘렸습니다.

SckPortNotSupported

10043

지정된 포트는 지원되지 않습니다.

SckAddressInUse

10048

사용 중인 주소입니다.

SckAddressNotAvailable

10049

지역 컴퓨터에서 사용 가능한 주소가 아닙니다.

SckNetworkSubsystemFailed

10050

네트워크 서브 시스템이 실패하였습니다.

SckNetworkUnreachable

10051

지금 이 호스트에서 네트워크 액세스를 할 수 없습니다.

SckNetReset

10052

SO_KEEPALIVE가 설정되었을 때 연결 시간이 초과되었습니다.

SckConnectAborted

11053

시간 초과 또는 다른 실패로 인하여 연결이 취소되었습니다.

SckConnectionReset

10054

원격 컴퓨터에 의해 연결이 재설정 되었습니다.

SckNoBufferSpace

10055

사용 가능한 버퍼 공간이 없습니다.

SckAlreadyConnected

10056

이미 연결된 소켓입니다.

SckNotConnected

10057

소켓이 연결되지 않았습니다.

SckSocketShutdown

10058

소켓이 종료되었습니다.

SckTimedout

10060

소켓이 종료되었습니다.

SckConnectionRefused

10061

연결이 강제로 거부되었습니다.

SckNotInitialized

10093

WinsockInit를 먼저 호출해야 합니다.

SckHostNotFound

11001

귄위있는 대답: 호스트 컴퓨터를 찾을 수 없습니다.

SckHostNotFoundTryAgain

11002

귄위없는 대답: 호스트 컴퓨터를 찾을 수 없습니다.

SckNonRecoverableError

11003

회복 불가능한 오류입니다.

SckNoData

11004

유효한 이름입니다. 요청한 형식의 데이터 레코드가 없습니다.

 

6. SendComplete 이벤트

전송 작업이 완료된 후에 발생합니다.

 

7. SendProgress 이벤트

데이터가 전송되는 중에 발생합니다.

구문

object_SendProgress (bytesSent As Long, bytesRemaining As Long)

SendProgress 이벤트 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

object

적용 대상 목록에 있는 개체로 평가되는 개체식

BytesSent

이 이벤트가 마지막으로 활성화된 이후 전송된 바이트 수

BytesRemaining

보내기 위해 전송 버퍼에 대기 중인 바이트 수

 
2008/07/14 02:20 2008/07/14 02:20
TAG : ,

Posted on 2008/07/14 02:18
Filed Under Programming

DNS server, DNS service  

테스트를 하다 보면 너무 많은 양의 데이터가 들어가서 행을 삭제한 후 다시 작업을 해야할 경우가 있습니다. 개발 단계에서 테스트 데이터를 집어넣어 놓고 실제로 유효한 데이터를 입력할 경우 seq가 1부터 시작하질 않죠-_-;;

 

    DBCC CHECKIDENT(테이블명, reseed, 초기값);

 

를 사용하면 행을 삭제 후 seq값을 초기화 시킬 수 있습니다.

초기값은 0을 지정한 후 insert 해보면 1부터 증가하는것을 볼 수 있습니다.

2008/07/14 02:18 2008/07/14 02:18

Posted on 2008/06/01 20:58
Filed Under Programming/JavaScript

DNS server, DNS service  

자주 안쓰다보니 잊어먹어서;;;;

<script type='text/javascript'>
 function delconfirm(){
  del_con = confirm('정말 삭제하시겠습니까? \\n삭제하시면 모든 기록이 함께 삭제됩니다.\\n[확인] 버튼을 누르시면 삭제됩니다.');
  if (del_con) {
   return true;
  } else {
   return false;
  }
 }
</script>


   <a href='URL' onclick='return delconfirm();'>삭제

확인 누르면 이동~~~ 취소는 이동 안함~
2008/06/01 20:58 2008/06/01 20:58

Posted on 2008/04/28 11:31
Filed Under Programming/VB

DNS server, DNS service  

질문 :
실행이 된상태에서 어떤폼이 실행(로드)되어 있는지 아니면 로드되어 있지 않은지를 알수는 없나여.?

답변:
for i =0 to forms.count -1
    debug.print Forms(i).Namenext i

원문 :
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=47&MAEULNo=19&no=211281&ref=211281

2008/04/28 11:31 2008/04/28 11:31

Posted on 2008/04/20 19:19
Filed Under Programming/VB

DNS server, DNS service  

질문&답변 
Modal로 띄운폼 하이드시...  | etc 2006-08-29 오후 7:59:25
조동진 (dj62745923)    번호: 248824   / 평점:  (-)  / 읽음:44
Modal로 띄운폼을 하이드 했다 Modal로 다시 띄우면

프로그램이 종료가 되지 않네요;
첨부파일 확인해주세요..
Modal로 띄웠다가 하이드 했다가 두번이상하면 종료가 안돼요..
물론.. Unload 이벤트로 안일어나구요..
왜그런지 해결해주세요!!


[답변]맞을라나 몰겟슴당.. 2006-08-30 오전 1:56:03
이석재 (foxmotor)    번호: 248845   / 평점:  (-)  
Modal루 띄우신것과는 문제가 아닌듯 싶은데요,.,,
문제는
Private Sub Form_Unload(Cancel As Integer)
       Cancel = 1
End Sub

폼의 종료를 취소한다는 뜻입니다...
 
종료가 아니된 폼이 있으므로 프로그램의 종료가 아니되는 것 아닐지요?


[답변]Cancel=1은 폼2 종료를 막기위해... 2006-08-30 오전 6:42:13
조동진 (dj62745923)    번호: 248848   / 평점:  (-)  
Cancel=1은 폼2 종료를 막기위해 해놓은거구요

폼1버튼 클릭 -> 폼2로드 -> 폼2하이드버튼 클릭 -> 폼1버튼 클릭 -> 폼2하이드버튼클릭 -> 그다음에 폼 1번 오른쪽 위 X(종료) 버튼을 누르면
버튼이 눌리지도 않고 종료에 관한 Unload 이벤트도 안일어나요..
다시한번 확인해주세요..
폼2의 Cancel=1은 단순히 로드된 폼2를 종료시키지 못하게 하는건데..
 
 
[답변]모달폼이 종료해야 Form1이 활성화됩니다. 2006-08-30 오전 7:25:11
고배영 (topkoh)    번호: 248850   / 평점:  (-)  
Modal로 띄운폼이 종료해야 Form1이 실행 됩니다.
Form2를 히든으로 감췄다해도 Form2는 실행되고 있죠..
Form1은 종료뿐만 아니라 어떤컨트롤을 누르드라도 응답을 하지 않습니다.
왜냐하면 Form2가 모달로 띄워졌기 때문이죠..
참고하세요..
 
 
[답변]이런 경우도 있군요.. 종료 방법론입니다.  2006-08-30 오전 9:03:12
신종흔 (chiuoo)    번호: 248854   / 평점:  (-)  
모듈하나 만들고

public g_ForcedEND as boolean
Form1 폼 이벤트 중
Form_QueryUnload 에서 g_ForcedEND를 True 합니다.
(쿼리언로드는 폼에서 종료(X)버튼을 누를때 발생됩니다. 이거 발생된후에 Unload이벤트가 발생되죠)
Form2 폼 이벤트 중
Form_Unload에서 cancel = 1위에다가 if g_ForcedEND = true then exit sub 를 추가해보세요.
자 끝났습니다.
Form1의 종료(x)버튼을 누를 경우 플래그가 True가 되어 Form2가 먼저종료가 되고 Form1이 종료가 됩니다.
종료가 안되는 이유를 들자면 vbmodal이라는 것은 시스템 모달로서 이것이외의 모든 윈도우들의 이벤트를 모조리 이 모달폼이
받게 됩니다.
위에 소스 적용전에 확인 해보시면 알겠지만 form2를 hide시킨 후에 form1을 종료시키려할 때 발생되는 이벤트는
form2의 Unload이벤트입니다. 브레이크 포인트(F9)를 해보시면 쉽게 알게 될겁니다. 그럼 즐프! ^^/

2008/04/20 19:19 2008/04/20 19:19

Posted on 2008/04/09 17:31
Filed Under Programming/VB

DNS server, DNS service  

픽쳐박스에서 픽쳐를 스크롤하는 방법은 크게 두가지 가 있습니다.
가장 용이하지만 단점이 있는 방법은
피쳐 박스에 이미지박스와 수직, 수평 스크롤바를 삽입합니다.
밖에 있는 픽쳐박스는 화면에 배치할 크기로 지정합니다.
스크롤바는 Visible=False로 합니다.
이미지 파일 로드시 스크롤바를 설정합니다.

sub LoadImage(filename as string)
hscroll1.visible = false
vscroll1.visible = false
on error resume next
set image1.picture = LoadPicture(filename)
if err then
    msgbox error
    exit sub
elseif image1.picture = nothing then
    exit sub
endif

image1.move 0,0
hscroll1.visible = image1.Width > picture1.scalewidth
vscroll1.visible = image1.height > picture1.scaleheight
if hscroll1.visible then
    vscroll1.visible = image1.height > picture1.scaleheight-hscroll1.width
endif
if vscroll1.visible then
    hscroll1.visible = image1.Width > picture1.scalewidth - vscroll1.height
endif

hscroll1.move 0, picture1.scaleheight - hscroll1.height, picture1.scalewidth - iif( vscroll1.visible, vscroll1.width,0)
vscroll1.move picture1.scalewidth - vscroll1.width, 0, vscroll1.width, picture1.scaleheight - iif( hscroll1.visible, hscroll1.height,0)

if hscroll1.visible then
    hscroll1.value = 0
    hscroll1.min = picture1.scalewidth - image1.width - iif( vscroll1.visible, vscroll1.width,0)
    hscroll1.max = 0
    hscroll1.largechange =( picture1.scalewidth- iif( vscroll1.visible, vscroll1.width,0))/2
endif

if vscroll1.visible then
    vscroll1.value = 0
    vscroll1.min = picture1.scaleheight - image1.height - iif( hscroll1.visible, hscroll1.height,0)
    vscroll1.max = 0
    vscroll1.largechange =( picture1.scaleheight- iif( hscroll1.visible, hscroll1.height,0))/2
endif
end sub

sub hscroll1_change() ' scroll 에도 필요시 call hscroll1_change
    image1.move hscroll1.value, vscroll1.value
end sub

sub hscroll1_change() ' scroll 에도 필요시 call hscroll1_change
    hscroll1_change
end sub

아마 이미지가 깜빡 거릴 겁니다.
이를 방지하려면 이미지 대신에 픽쳐박스를 넣으시고
이미지를 로드한 후에 픽쳐박스의 크기를 그림에 맟추어 주세요

picture2.move 0, 0, scalex(picture2.picture.width,,picture1.scalemode),  scaley(picture2.picture.height,,picture1.scalemode)

다만 이 방법은 큰 이미지의 경우 리소스의 문제가 나타나겠습니다. 또한 축소/확대의 문제가 있겠습니다.

이미지를 이용하여 축소/확대의 경우는
image1.stretch = true
image1.move 0, 0, scalex(image1.picture.width,,picture1.scalemode) * zoom , _
                      scaley(image1.picture.height,,picture1.scalemode) * zoom

다른 방법은 추가의 이미지박스나 픽쳐박스를 사용치 않고
보이는 부분만 연산하여 paintpicture 또는 API의 StretchBlt를 이용하여 축소/확대로 그려주는 방법임.

 

2008/04/09 17:31 2008/04/09 17:31

Posted on 2008/04/09 03:52
Filed Under Programming/VB

DNS server, DNS service  

[질문]픽쳐박스(picturebox),이미지(image) 이동 방법좀 봐주세요.  | etc 2006-07-31 오후 2:22:30
 
용대건 (sunny)    번호: 246824   / 평점:  (-)  / 읽음:342

하다가 잘 안되는게 있어서 고수님들 도움좀 받을려고 올립니다.
픽쳐박스 안에 이미지 개체를 놓았구요..
픽쳐박스 안에서 이미지 개체를 드래그해서 미세하게 이동 시킬려고 합니다.

Private Sub img1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    vSavedMousePointX = X
    vSavedMousePointY = Y
   img1.Drag 1
End Sub

그래서 픽쳐박스 DragDrop 이벤트안에..

Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)
   img1.Move X - vSavedMousePointX, Y - vSavedMousePointY, img1.Width, img1.Height
   img1.Drag 2  
End Sub

문제는 픽쳐박스내에서 드래그해서 움직이는 마우스위치값 (X,Y)이  이미지개체의 위치값 보다 크면 
--( 이미지 개체 사이즈값 보다 크면 ) -- 잘 되는데 ( 마우스를 드롭한 위치에 잘 놓이게 되는데) --
값이 이미지 개체 값보다 작거나 같으면--( 조금 밖에 안움직이면)--  안 움직이고 원재 자리로 되돌아 간다는 것입니다.
그래서  이미지개체 선택후 마우스 드래그 하면서 값을 보니.. 포인터가 이미지 개체를 벗어난 이후 부터 x, y 값을
인식하는 것 같더라고요...저는 약간 만 움직여도 정확한 위치에 놓이게 하고 싶은데...
어떻게 방법이 없을 까요?  도와 주세요..

 
 
[답변]DragDrop 이벤트가 자기 자신에게 일어나서 그렇습니다. 2006-07-31 오후 2:41:23
 
홍인천 (rhdgj)    번호: 246831   / 평점:  (-)  

놓은 위치가 자신의 위치라면...
DragDrop 이벤트는 컨테이너인 Picture1에서 일어나는게 아니라..
자기 자신...즉 image1 에서 일어납니다...
아래...코드를 약간 변경했습니다...
님과는....img1 이 image1으로 변경된거 외에는 바뀔게 없으니...복사해다가 고쳐서 사용하세요...^^

Dim vSavedMousePointX As Single, vSavedMousePointY As Single
Dim nOrgLeft As Long, nOrgTop As Long
Private Sub Image1_DragDrop(Source As Control, X As Single, Y As Single)
   Image1.Move nOrgLeft + X - vSavedMousePointX, nOrgTop + Y - vSavedMousePointY, Image1.Width, Image1.Height
   Image1.Drag 2
End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    vSavedMousePointX = X
    vSavedMousePointY = Y
    nOrgLeft = Image1.Left
    nOrgTop = Image1.Top
   Image1.Drag 1
End Sub

Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)
   Image1.Move X - vSavedMousePointX, Y - vSavedMousePointY, Image1.Width, Image1.Height
   Image1.Drag 2
End Sub

 
 
[답변]윗분말이 마자요 2006-07-31 오후 2:47:50
 
이명하 (mhlee36)    번호: 246833   / 평점:  (-)  
 Private Sub Img1_DragDrop(Source As Control, X As Single, Y As Single)
     Img1.Move Image1.Left + (X - vSavedMousePointX), Img1.Top + (Y - vSavedMousePointY), Img1.Width, Img1.Height
   Img1.Drag 2
End Sub
이거 추가히시면 될듯
 

2008/04/09 03:52 2008/04/09 03:52

Posted on 2008/03/31 18:14
Filed Under Programming/VB

DNS server, DNS service  

CommonDialog Box컨트롤과 MSFlexGrid컨트롤, File명을
인자로 넘겨주면 해당 MSFlexGrid의 내용을 Excel에서 읽을 수 있는
파일 형태로 저장하는 프로시저 입니다.

Public Sub FileSave(dlgSaveAs As CommonDialog, ByVal TableHFGrid As MSHFlexGrid, ByVal FName As String)
   
    Dim OneRec As String
    Dim i As Integer
    Dim Cnt As Long
   
    ' Cancel을 True로 설정합니다.
    dlgSaveAs.CancelError = True
    On Error GoTo ErrHandler
   
    dlgSaveAs.Flags = cdlOFNOverwritePrompt Or cdlOFNExplorer Or cdlOFNLongNames
    dlgSaveAs.Filter = "Comma separated values(CSV)|*.csv|모든 파일 (*.*)|*.*"
    dlgSaveAs.DialogTitle = FName & " 자료 저장"
    dlgSaveAs.InitDir = App.Path & "\Data"
    dlgSaveAs.FileName = FName
    dlgSaveAs.ShowSave
   
    If Len(dlgSaveAs.FileName) = 0 Then Exit Sub
   
    Open dlgSaveAs.FileName For Output As #1    ' Open file for output.
       
        '/ Header(Record Field명)를 출력함  /
        OneRec = TableHFGrid.TextMatrix(0, 1)
        For i = 2 To TableHFGrid.Cols - 1
            OneRec = OneRec & "," & TableHFGrid.TextMatrix(0, i)
        Next i
        Print #1, OneRec
   
        '/ Data를 출력함    /
        For Cnt = 1 To TableHFGrid.Rows - 1
            DoEvents
            OneRec = TableHFGrid.TextMatrix(Cnt, 1)
            For i = 2 To TableHFGrid.Cols - 1
                OneRec = OneRec & "," & TableHFGrid.TextMatrix(Cnt, i)
            Next i
            Print #1, OneRec
        Next Cnt
       
    Close #1
   
    Exit Sub
   
ErrHandler:
   
    If ERR.Number = cdlCancel Then  '/ 취소버튼(32755)이 눌려진경우
        ' 취소 단추를 눌렀습니다.
    Else
        MsgBox ERR.Number & ":" & ERR.Description, vbQuestion
    End If
   
    Exit Sub

End Sub

2008/03/31 18:14 2008/03/31 18:14

Posted on 2008/03/31 01:12
Filed Under Programming/VB

DNS server, DNS service  

기존파일에 넣는 방법이나 새파일 열어서 하는 방법이나 별로 차이점이 없으니까
엑셀의 새파일을 열어서 데이터를 넣는 소스를 만들어 봤습니다.
커멘드버튼 하나와 플렉스그리드 하나를 그리고 엑셀 오브젝트를 참조하시고
다음을 실행시켜보세요. 즐프하시고 다 주석달기가 모해서 모르는 것 있으시면 재질문 해주시길...

Option Explicit

Private Sub Command1_Click()
    Dim i As Integer
    With MSFlexGrid1
        .FixedRows = 0
        .FixedCols = 0
        .Rows = 0
        .Cols = 5
        .AddItem "aaa" & vbTab & "bbb" & vbTab & "ccc" & vbTab & "ddd" & vbTab & "eee"
        .AddItem "ggg" & vbTab & "hhh" & vbTab & "kkk" & vbTab & "eee" & vbTab & "www"
        .AddItem "ddd" & vbTab & "ooo" & vbTab & "www" & vbTab & "qqq" & vbTab & "ddd"
    End With
    Call GridToExcel
End Sub
Private Sub GridToExcel()
    Dim Xl As New Excel.Application
    Dim GridRow As Long
    Dim GridCol As Long
   
    With Xl
        .Workbooks.Add
        .Worksheets("Sheet2").Select
       
        For GridRow = 0 To MSFlexGrid1.Rows - 1
       
            For GridCol = 0 To MSFlexGrid1.Cols - 1
                .Cells(GridRow + 5, GridCol + 1) = MSFlexGrid1.TextMatrix(GridRow, GridCol)
            Next GridCol
           
        Next GridRow
       
        .Visible = True
    End With
   
End Sub
2008/03/31 01:12 2008/03/31 01:12

Posted on 2008/03/26 19:12
Filed Under Programming/VB

DNS server, DNS service  

 밑에서 제가 답변한 내용인데요.

참조하세요.


    Dim aconn As ADODB.Connection

    Dim ars As ADODB.Recordset

   

    '>>> 1. DB 연결

    Set aconn = New ADODB.Connection

    aconn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data source=" & App.Path & "\MainDB.mdb"

    aconn.Open

   

    '>>> 2. RecordSet 설정

    Set ars = New ADODB.Recordset

    ars.CursorLocation = adUseClient

    ars.CursorType = adOpenKeyset

    ars.LockType = adLockOptimistic

   

    Dim sqlGrid As String

    '>>> 3. 쿼리문 생성

    sqlGrid = "select ID,시작날짜,시작시간,종료날짜,종료시간 from 접속자관리"

   

    '>>> 4. 쿼리 실행

    ars.Open sqlGrid, aconn

   

    '>>> 5. Grid 컬럼 헤드 출력

    MSFlexGrid1.TextMatrix(0, 0) = "ID"

    MSFlexGrid1.TextMatrix(0, 1) = "시작날짜"

    MSFlexGrid1.TextMatrix(0, 2) = "시작시간"

    MSFlexGrid1.TextMatrix(0, 3) = "종료날짜"

    MSFlexGrid1.TextMatrix(0, 4) = "종료시간"

   

    '>> 6. RecordSet 결과값 Grid 출력    

    If ars.RecordCount > 0 Then

        ars.MoveFirst

        For i = 1 To ars.RecordCount

            MSFlexGrid1.TextMatrix(i, 0) = ars!ID

            MSFlexGrid1.TextMatrix(i, 1) = ars!시작날짜

            MSFlexGrid1.TextMatrix(i, 2) = ars!시작시간

            MSFlexGrid1.TextMatrix(i, 3) = IIf(IsNull(ars!종료날짜), "", ars!종료날짜)

            MSFlexGrid1.TextMatrix(i, 4) = IIf(IsNull(ars!종료시간), "", ars!종료시간)

            ars.MoveNext

        Next i

    End If

   

    '>>> 7. 닫기

    ars.close

    aconn.close



간단 샘플이었습니다.

자료실이나 질문&답변 검색 하시면 많이 나올겁니다.

2008/03/26 19:12 2008/03/26 19:12

About

by CoCo

Notice

Counter

· Total
: 878907
· Today
: 45
· Yesterday
: 47