Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
메시지 트랩핑시 다른유닛에서
아 안녕하세요. 여기에 질문올리는게 첨 이거든요..
잘알고 있는 고수님들 잘 부탁합니다.
질문은요 메시지 트랩핑시에 메시지가 발생하는 폼이 아닌 다른 유닛에서 그 폼의 메시지를 이용할려고 하는데 컴파일이 안되는 군요..
방법이 없는가요. 그폼이 있는 유닛에서 폼의 타입선언에 선언하지 않고는 사용할수 없나요?
제발 알려주셔요..
그럼 욜심히...
1
COMMENTS
민성기
•
2000.01.23 02:01
안녕하세요~ 민성기 입니다.
제가 질문을 잘 이해하지 못해서 이 답변이 정확할지 별루 자신은 없지만... 폼 없는 유니트에서 프로젝트 내의 다른 윈도컨트롤을 서브클래싱 하려 하시는 것 아닐까 싶네요. 메시지 트래핑 등의 델파이 스타일의 서브클래싱 기법들은 서브클래스 프로시저가 오브젝트 내에 선언되어야 하기 때문에... 귀찮을 때가 많습니다... 이 경우 써먹을 수 있는 한가지 방법을 소개하죠. 다음 소스를 보세요.
var
OldWinProc: Integer;
function NewWinProc(hWnd: HWND; Msg: WORD; wParam: WORD; lParam: LONGINT): LONGINT; StdCall;
begin
case Msg of
WM_USER+1818 : ShowMessage('1818 메시지가 왔군!!');
end; {end of case Msg }
Result := CallWindowProc(Pointer(OldWinProc), hWnd, Msg, wParam, lParam)
end;
procedure SubClassWin(hWnd: HWND);
begin
OldWinProc := SetWindowLong(hWnd, GWL_WNDPROC, LongInt(@NewWinProc));
end;
procedure UnSubClassWin(hWnd: HWND);
begin
SetWindowLong(hWnd, GWL_WNDPROC, OldWinProc);
end;
만약 Form1을 서브클래싱 하구 싶다면 다음과 같이 하시면 됩니다.
SubClassWin(Form1.Handle);
이렇게 하면, Form1으로 전달되는 메시지들은 NewWinProc를 지나가게 되죠. 마지막에 해제하시는 거 잊지 마시구요~
SubClassWin(Form1.Handle);
객체형 프로시저를 선언하기가 아주 묘한 상황에서는 위의 방법을 알아두심 많은 도움이 될 껍니다. 참, 노파심으로 말씀 드리는 거지만... 위의 코드는 32비트 윈도 환경에서는 같은 쓰레드 내에서만 동작합니다요~ ^^;
ps. 똑같은 글을 두 번... 음... "원래대로" 버튼... 너무 무섭당~ ^^;
--------------------------------------------------------------------
델파이의 모든 것... 델파이 코리아. http://www.delphikorea.com
--------------------------------------------------------------------
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
산아래
•
2000.01.24 05:13
1
COMMENTS
/
0
LIKES
DBgrid에서 레코드지시자에 변화에 따라,,,,
이영수
•
2000.01.25 06:10
산아래 wrote: > DBgrid에서 레코드 지시자의 변화에 따라 event 처리를 하고 싶은데 > 잘 않되고 있어요...
궁금함
•
2000.01.24 05:01
1
COMMENTS
/
0
LIKES
편법이 아닌 Query 검색 방법
유효종
•
2000.01.24 22:05
궁금함 wrote: > 안녕하세요. > > 일전(1911)에 이와 같은 방법으로 질문을 올려 유호종분께 해답을 ...
김성훈
2000.01.24 02:30
0
COMMENTS
/
0
LIKES
alias 자동 생성(access이용)문제
박병희
2000.01.23 23:17
0
COMMENTS
/
0
LIKES
데이타베이스
김문석
2000.01.23 22:50
0
COMMENTS
/
0
LIKES
DB gridef를 한글 표처럼 상세히
파이공주
•
2000.01.23 13:29
2
COMMENTS
/
0
LIKES
Query와 DBgrid 연결하는데 그리드상의 내용이 이상해요..
김주석
•
2000.01.25 00:27
파이공주 wrote: > 데이터 소스와 쿼리 객체와 연결하면.. > insert한 후 그리드 상에 나타는 > record...
파이공주
•
2000.01.25 00:35
아닙니다... 그런 코딩은 한적이 없는데요... 제발 갈켜줘요.. 심각합니다.. 김주석 wrote: > 파...
박영미
•
2000.01.23 02:46
1
COMMENTS
/
0
LIKES
콤포넌트 아이콘들이 이상해요
박성훈
•
2000.01.24 19:54
박영미 wrote: > 콤포넌트의 아이콘이 이상합니다. > 콤포넌트의 기능과 이름은 그래로인데 아이콘은 전...
맨발의청춘
2000.01.23 01:15
0
COMMENTS
/
0
LIKES
DBGrid1DrawDataCell에 대해서..
lee
•
2000.01.22 22:47
1
COMMENTS
/
0
LIKES
첨부된 파일 실행하기
민성기
•
2000.01.23 04:11
lee wrote: > 간단하게 만든 폼에서 버튼클릭시 첨부된 hwp나 워드문서를 실행시키는 소스코드를 좀 알고 ...
임형준
2000.01.22 21:55
0
COMMENTS
/
0
LIKES
QReport를 사용하데 문제발생
윤티
•
2000.01.22 21:29
1
COMMENTS
/
0
LIKES
api - wndproc의 자세한 사용법을
구창민
•
2000.01.22 21:32
윤티 wrote: > wndproc의 사용법을 알고싶어요 unit Unit1; interface uses // Windows, Messa...
김종근
2000.01.22 20:46
0
COMMENTS
/
0
LIKES
자신의 컴퓨터 날짜가 바뀔때를 체크할수 있는 법????
델왕초보
•
2000.01.22 19:36
1
COMMENTS
/
0
LIKES
[급질문] 시스템 시간, 날짜 가져오는거....
오기주
•
2000.01.22 19:45
델왕초보 wrote: > 안녕하십니까... > > 또 물으러 왔습다...^^ > > 시스템의 시간과 날짜를 각각 ...
최미정
•
2000.01.22 19:10
3
COMMENTS
/
0
LIKES
DBCheckBox에 대한 질문
오기주
•
2000.01.22 19:43
최미정 wrote: > DBcheck 버튼을 사용하고 싶은데, 해당 button을 선택후, 그 값을 DB에 저장하여 > 그 ...
최미정
•
2000.01.22 20:39
오기주 wrote: > 최미정 wrote: > > DBcheck 버튼을 사용하고 싶은데, 해당 button을 선택후, 그 값을 DB...
오기주
•
2000.01.23 23:23
최미정 wrote: > 오기주 wrote: > > 최미정 wrote: > > > DBcheck 버튼을 사용하고 싶은데, 해당 button...
최태수
2000.01.22 17:50
0
COMMENTS
/
0
LIKES
[QueryExcel]설치시 오류 발생???
sinzi
2000.01.22 13:54
0
COMMENTS
/
0
LIKES
[급질문]쿼리사용할때.. 제발...
bdt
•
2000.01.22 12:01
1
COMMENTS
/
0
LIKES
메시지 트랩핑시 다른유닛에서
아 안녕하세요. 여기에 질문올리는게 첨 이거든요.. 잘알고 있는 고수님들 잘 부탁합니다. 질문은요 메시지 트랩핑시에 메시지가 발생하는 폼이 아닌 다른 유닛에서 그 폼의 메시지를 이용할려고 하는데 컴파일이 안되는 군요.. 방법이 없...
민성기
•
2000.01.23 02:01
안녕하세요~ 민성기 입니다. 제가 질문을 잘 이해하지 못해서 이 답변이 정확할지 별루 자신은 없지만....
안장근
•
2000.01.22 10:54
1
COMMENTS
/
0
LIKES
리포트에서 원하는 페이지에만 문자출력
이재식
•
2000.01.22 13:21
안장근 wrote: > 안녕하세요 > 저가 지금 처한 상황은 QuickReport에서 > DataBase를 detailBand에 연결...
정경호
•
2000.01.22 10:17
1
COMMENTS
/
0
LIKES
오라클에서 두테이블 조인...
정재헌
•
2000.01.22 19:17
중복된 로우의 Count 조금이나마 도움이 되었으면 합니다. SELECT COUNT(*) FROM EMP A WHERE ROWID > (...
정경호
•
2000.01.22 08:39
1
COMMENTS
/
0
LIKES
오라클 outer join
정재헌
•
2000.01.22 19:14
정확한 답변에는 조금 벗어나지만 도움이 되실겁니다. 상위 14개까지 로우를 출력 SELECT ROWNUM AS RA...
bdt
2000/01/22 12:01
Views
201
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
제가 질문을 잘 이해하지 못해서 이 답변이 정확할지 별루 자신은 없지만... 폼 없는 유니트에서 프로젝트 내의 다른 윈도컨트롤을 서브클래싱 하려 하시는 것 아닐까 싶네요. 메시지 트래핑 등의 델파이 스타일의 서브클래싱 기법들은 서브클래스 프로시저가 오브젝트 내에 선언되어야 하기 때문에... 귀찮을 때가 많습니다... 이 경우 써먹을 수 있는 한가지 방법을 소개하죠. 다음 소스를 보세요.
var
OldWinProc: Integer;
function NewWinProc(hWnd: HWND; Msg: WORD; wParam: WORD; lParam: LONGINT): LONGINT; StdCall;
begin
case Msg of
WM_USER+1818 : ShowMessage('1818 메시지가 왔군!!');
end; {end of case Msg }
Result := CallWindowProc(Pointer(OldWinProc), hWnd, Msg, wParam, lParam)
end;
procedure SubClassWin(hWnd: HWND);
begin
OldWinProc := SetWindowLong(hWnd, GWL_WNDPROC, LongInt(@NewWinProc));
end;
procedure UnSubClassWin(hWnd: HWND);
begin
SetWindowLong(hWnd, GWL_WNDPROC, OldWinProc);
end;
만약 Form1을 서브클래싱 하구 싶다면 다음과 같이 하시면 됩니다.
SubClassWin(Form1.Handle);
이렇게 하면, Form1으로 전달되는 메시지들은 NewWinProc를 지나가게 되죠. 마지막에 해제하시는 거 잊지 마시구요~
SubClassWin(Form1.Handle);
객체형 프로시저를 선언하기가 아주 묘한 상황에서는 위의 방법을 알아두심 많은 도움이 될 껍니다. 참, 노파심으로 말씀 드리는 거지만... 위의 코드는 32비트 윈도 환경에서는 같은 쓰레드 내에서만 동작합니다요~ ^^;
ps. 똑같은 글을 두 번... 음... "원래대로" 버튼... 너무 무섭당~ ^^;
--------------------------------------------------------------------
델파이의 모든 것... 델파이 코리아. http://www.delphikorea.com
--------------------------------------------------------------------