C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[6513] Re:[질문]DDE에 관련해서요 ...
성낙현 [pasil] 3473 읽음    2001-04-03 10:41
당연히 엑셀은 클라이언트가 될수 있습니다.

또한 빌더역시 DDE서버가 될수 있구요..

DDE서버를 만드는 방법은 무척 간단합니다.

새로운 폼에다가 DDEServerConv와 DDESeverItem을 하나씩 떨궈놓고.. 각각 이름을 부여해줍니다.
편의상 ServerConv, ServerItem이라 하죠..

이렇게 설절하면 클라이언트 프로그램에서는 Topic이름은 ServerConv, Item이름은 ServerItem으로 사용할수 있게 됩니다. DDE를 사용하기 위해선 System이름도 필요하는데 이건 통상적으로 프로그램의 실행파일 이름하고 같습니다.

계속해서

ServerItem의 ServerConv속성을 DDEServerConv로 설정합니다.

이렇게 되면 기본적으로 DDE를 사용할수 있게 됩니다.

자.. 그럼 이걸 엑셀로 연결해 봅시다..

엑셀에서 읽을수 있는 아이템 데이타는 ServerItem의 Text속성입니다.
즉 ServerItem->Text 에다 값을 주면 자동으로 엑셀에서 바뀌게 됩니다.
테스트를 위해서 프로그램에 타이머 컴퍼넌트와 라벨을 떨구고 다음과 같이 입력합시다.

Form1클래스 정의하는 부분에다 Count를 선언 합니다.

private:    // User declarations
    int Count;


초기화를 시켜주고..
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    Count = 0;
}

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    ServerItem->Text = IntToStr(Count);
    Label1->Caption = ServerItem->Text;
    Count++;
}

이렇게 하면 ServerItem의 값이 타이머에 의해 자동으로 1씩 증가가 됩니다.

실행을 시켜봅시다.. 실행화일 이름은 Project1이고 서버 토픽은 ServerConv, 서버 아이템은 ServerItem입니다.

서버 프로그램이 실행된 상태에서 엑셀을 실행 시키고 아무셀에다가 다음과 같이 입력합니다.

=Project1|ServerConv!ServerItem

그리고 엔터를 치면 동적 데이타 교환이랑 창이 뜨면서 데이타를 선택할수 있게 나옵니다.
데이타를 선택하게 되면 드디어 값이 올라올겁니다. 물론 실시간으로 계속 변하면서..

만약 값이 안올라 온다면 서비스네임, 토픽, 아이템 네임이 잘못되었거나 ServerItem의 ServerConv속성이 지정되어 있지 않아서 입니다.

자.. 실시간 감시는 되는것을 확인 했으니 그렇다면 엑셀에서 서버 아이템값을 변경해 봅시다.

엑셀에서 Poke명령을 주어야 하는데.. 조금 복잡합니다..

우선 엑셀에서 명령단추를 선택한후 셀의 아무데나 넣습니다.

그리고 그 명령단출를 더블 클릭 하면 편집 할수 있게 되는데.. 다음과 같이 입력해 봅시다..

Private Sub CommandButton1_Click()

    Dim chan As Long

    ' Initiate DDE on topic
    chan = DDEInitiate("Project1", "ServerConv")
   
    DDEPoke chan, "ServerItem", Sheet1.Cells(1, 1)
   
    DDETerminate (chan)


End Sub

엑셀의 셀 1,1항에 있는 값을 서버에다가 전송해 주는 함수를 만들었습니다.

이렇게 하고 실행 시키면.. 셀 1, 1항에나 임의의 숫자를 입력하고 커멘드 버튼을 눌러 보세요..

그럼 서버의 값이 변경되는 것을 볼수 있습니다.

음.. 쓰다보니 무지 길어 졌네요..

암튼 그리 어려운것들이 아니니 차근차근 해보시고.. 만약 예제가 필요하시면 메일주세요...


박남영 님이 쓰신 글 :
:
: 아무래도 DDE에 관한 질문좀 올려야 겠네요 ~~
:
: 실시간으로 주식의 변동을 액셀에서 보게 할려구 하거든요 ~~
:
: 빌더의 컴포넌트를 사용하면 주어진 여건상 엑셀이 서버가 될수 밖에 없겠든데
:
: 그게 문젭니다 엑셀은 클라이언트가 되야 하는데,
:
: 엑셀에 뿌려주는 개념이 아니라,
:
: 엑셀을 초기화 시켜놓구 엑셀의 어떤 버튼이 눌려지면
:
: 값을 가지고 있는 서버에서 연결을 통해서 보내주는 형태거든요
:
:
: 일일이 코딩을 다할려구 해도 소스가 비.베 밖에 없네요 ~~
:
: 혹 엑셀이 서버가 아닌 클라이언트가 될수 있는 방법이나
:
: 아님 기본적인 DDE연결이 아니라 좀 자세한 코딩 소스가 있나 해서요?
:
: 님들 부탁 드릴께요 ~~
:
: 아무쪼록 부탁 드릴께요 ~~
:
: 수고하세요....

+ -

관련 글 리스트
6501 [질문]DDE에 관련해서요 ... 박남영 2519 2001/04/02
6513     Re:[질문]DDE에 관련해서요 ... 성낙현 3473 2001/04/03
6518         Re:Re:[질문]DDE에 관련해서요 ... 박남영 2429 2001/04/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.