1. 설명
WM_COPYDATA메시지를 이용해 다른 프로그램에 데이터를 전달한다.
단순 스트링 전달과 레코드 전달 예제로 구분했음

2. 소스

--단순 String 전달--

1. lParam에 사용할 데이터 레코드 타입
pCopyDataStruct = ^TCopyDataStruct;
 TCopyDataStruct = record
   dwData: DWORD;
   cbData: DWORD;
   lpData: Pointer;
 end;


2. lParam으로 전달된 데이터 읽기
strReceive := pChar(pCopyDataStruct(lParam)^.lpData);

3. 데이터 보내기
procedure TCommWndThread.SendData(AData: string);
var
  CopyData: TCopyDataStruct;
  nLen: integer;
begin
  nLen := Length(AData) + 1;
  AData := AData + #0;

  with CopyData do
  begin
    cbData := nLen;
    lpData := pChar(AData);
  end;

  SendMessage(FWnd, WM_COPYDATA, 0, LongInt(@CopyData));
end;

--레코드 전달--

1. 전달할 레코드 타입
  pMemoDataStruct = ^TMemoDataStruct;
 TMemoDataStruct = packed record
   FSenderID: String[50];
    FIP: String[20];
   FPort: String[10];
   MemoContent : array[1..1024] of char;
 end;

2. 데이터 보내기
var
 CopyData: TCopyDataStruct;
 nLen: integer;
 memoinfo : TMemoDataStruct;
begin
 FillChar(memoinfo, sizeof(TMemoDataStruct), #0);
 memoinfo.FSenderID := FSenderID;
 memoinfo.FIP := FIP;
 memoinfo.FPort := FPort;

 Move(FMemo^,memoinfo.MemoContent,FMemoSize);

 nLen := SizeOf(memoinfo);

 with CopyData do
 begin
   cbData := nLen;
   lpData := @memoinfo;
 end;
 SendMessage(wnd, WM_COPYDATA, LongInt(msgType), @CopyData);
end;

3. 데이터 받기
var
  memoinfo : TMemoDataStruct;
begin
   memoinfo :=  pMemoDataStruct( PCopyDataStruct(msg.LParam)^.lpData)^;
end;
Posted by Gu Youn
,
1. 설명
C++ 빌더에서는 메시지 맵을 이용하지만 델파이에서는 message라는 키 워드를 이용해서 프로시져를 선언한다.
WM_TEST 메시지가 발생하면 OnWmTest 프로시져가 호출된다.

2. 소스
const
 WM_TEST = WM_USER + 9999;

procedure OnWmTest(var Msg: TMessage); message WM_TEST;

procedure OnWmTest(var Msg: TMessage);
begin
 Application.MessageBox('WM_TEST','',MB_OK);
end;
Posted by Gu Youn
,
개념 : 프로그램 전역으로 뮤텍스를 생성해서 이후에 다시 뮤텍스를 생성하면 에러가 발생하는 것을 이용해서 프로그램을 한번만 실행되게 제어한다.

소스 :

어플리케이션의 메인 유닛에서 다음과 같이 작업한다.
windows유닛 추가

var
  Mutex : THandle;
begin

  Mutex := CreateMutex(nil, True, 'NoDuplicate');
  //GetLastError : 이미 이 프로그램의 뮤텍스가 존재하면 183 리턴
  if (Mutex <> 0 ) and (GetLastError = 0) then
  begin
    //프로그램 처음 시작되는 경우 코드
    Application.CreateForm(TSendMemoForm, SendMemoForm);
    Application.Run;
    if Mutex <> 0 then CloseHandle(Mutex);
  end
  else
  begin
    //이미 프로그램이 실행되있는데 다시 실행하는 경우.
    Application.MessageBox('프로그램이 이미 실행 중입니다.','경고',MB_OK);
  end;
Posted by Gu Youn
,
1. 설명
종료할 프로그램의 Handle을 얻고 그것을 이용해서 프로세스ID를 얻어서 프로그램을 종료 시킨다.

2. 소스
var
ProcessHandle: THandle;

ProcessId: Integer;

Wnd: HWND;

begin

Wnd := FindWindow('KMUtilWndClass',nil);

// 윈도우 핸들로 부터 프로세스 ID를 얻습니다.

GetWindowThreadProcessId(Wnd, @ProcessId);

// 얻어진 ID로 부터 프로세스 핸들을 얻습니다.

ProcessHandle := OpenProcess(PROCESS_TERMINATE, False, ProcessId);



// 죽여 버립니다...

TerminateProcess(ProcessHandle, 4);
Posted by Gu Youn
,
1. 설명
메인폼 이전에 출력할 폼을 먼저 모달로 보여준후 모달 폼에서 mrOk, mrCancel에 따라서 그 이후 메인폼 보여줄지 말지를 결정한다.

2. 소스
    Loginform := TLoginForm.Create(Application);

   try
     if LoginForm.ShowModal = mrCancel then
       Exit;
   finally
     LoginForm.Free;
   end;

   Application.CreateForm(TKomarooForm, KomarooForm);
   Application.CreateForm(TSendMemoForm, SendMemoForm);
   Application.Run;


Posted by Gu Youn
,
1. C++ Tutorial
www.cs.uregina.ca/dept/manuals/C++/tutorial.html
Online documentation which accompanies Coronado Enterprises C++ Tutor version 2.2.

 
2. C++ Tutorials: Learn C Language Today
www.gustavo.net/programming/c.shtml
Contains C, C++, and OOP tutorials, software and programming tools, routines and source code.

 
3. DevX -- C++ Zone
www.cplus-zone.com
Specialized part of the Development Exchange containing C++ links, FAQs, discussions, news, and tutorials.

 
4. From the Ground Up: A Guide to C++
http://library.advanced.org/3074
Personalized C++ tutorial in HTML format specifically created for users with knowledge of the Pascal programming language.

 
5. MSDN Online Voices: Deep C++
http://msdn.microsoft.com/voices/deep.asp
Monthly C++ column from Microsoft.

 
6. "Thinking in C++ 2nd Edition" by Bruce Eckel
www.mindview.net/ThinkingInCPP2e.html
Free electronic version of Bruce Eckel's book, "Thinking in C++ 2nd Edition", along with source code.

7. C/C++ Users Journal Web Site
www.cuj.com
This monthly magazine is available in-print, and several articles each month are made available on-line.


8. Dr. Dobb's Journal C/C++ Discussion Forum
www.ddj.com/topics/cpp
This site has reasonable activity, with roughly 1 message posted per day.

 
9. PrestoNet C/C++ Discussion Group
www.prestwood.com/forums/c
This site hosts several forums, one of them C++Builder specific. It is fairly active, with a message posted every two or three days.

 
10. Programmer's Archive C++ Discussion Board
http://pa.pulze.com/cppdir/wwwboard
One of many discussion lists created by The Programmer's Archive.

 
11. The Bits C++Builder Discussion List
www.topica.com/lists/cbuilder/subscribe
An extremely active C++Builder discussion list where initial discussions were held on the creation of the C++Builder Developer's Guide.
Posted by Gu Youn
,
1. ActiveX Type Library의 IActiveFormXEvents에 추가하고자 하는 이벤트 이름으로 메소드(method)를 추가한다.
에를 들어 OnTestEvent를 추가한 경우 ActiveFormProj1_TLB.pas 파일에 자동으로 다음과 같은 항목이 추가된다.

    procedure OnTestEvent; dispid 209;
    FOnTestEvent: TNotifyEvent;
    property OnTestEvent: TNotifyEvent read FOnTestEvent write FOnTestEvent;

2. ActiveFormImpl1.pas에 Event Triger 함수를 작성한다.
procedure TrigerOnTestEvent(Sender: TObject);

procedure TActiveFormX.TrigerOnTestEvent(Sender: TObject);
begin
   if FEvents <> nil then FEvents.OnTestEvent;
end;

3. 이벤트 발생 시켜야 할 시점에 TgigerOnTestEvent함수를 호출하면 이벤트가 발생하게 된다.

4. html에서 이벤트 핸들러 작성하는 방법
<script language="vbscript">
  sub Form1_OnTestEvent()
    //이벤트발생할떄 처리할 내용 구현
  End Sub
</script>
Posted by Gu Youn
,
Sun ONE Web Server 가 iPlanet 서버 임.
Java Servlet 2.2 specification and JavaServer Pages 1.1 components
자세한 내용은 아래 페이지 참고
http://wwws.sun.com/software/products/web_srvr/ds_web_srvr.html


서버별 서블릿 지원하는 스펙에 대한 내용은
http://java.sun.com/products/servlet/industry.html 페이지 참고


http://docs.sun.com/source/816-5742-10/index.html

http://docs.sun.com/db/prod/s1.entconn60#hic
Posted by Gu Youn
,