Q&A

  • Re: MDIForm에서 이미지띠우는 법?..[급함]
MDIClient 윈도우에 그리기를 하고 싶으신 것 같군요.



이 윈도우는 Delphi에서도 그렇고, MFC에서도 기본적으로는 잡아 주지를 않습니다.

이 윈도우는 MDIForm을 생성하면 그 클라이언트 영역과 동일하게 Windows에서

자동적으로 만들어주는 윈도우입니다.



그런 고로, 그리기를 하기 위해서는 WM_PAINT 메시지 핸들러에서 그려야 하는데

직접 만든 윈도우가 아니므로 그냥 델파이에서 OnPaint 이벤트로 잡아주지 못합니다.



그러나 MDIClient의 핸들은 얻을 수 있습니다.

MDIForm에 ClientHandle이라는 프로퍼티를 이용하시면 됩니다.



MDIClient의 핸들은 얻었지만 이것은 핸들일 뿐이므로 OnPaint 이벤트 핸들러같은

형식으로 바로 접근할 수는 없고, 이걸 이용하여 MDIClient윈도우의 윈도우 프로시저

자체를 치환하여야 합니다.



치환할 윈도우 프로시저는 다음과 같은 방법으로 만들 수 있습니다.

참고로 이 내용들은 모두 Power of Delphi 제 6권의 내용을 거의 그대로 인용한 것입니다.

(나이렉스 인터내셔날 여러분께 진심으로 감사드립니다.)



TMDIForm = class(TForm)

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private

{ Private declarations }

FPOldWndProc: Pointer;

FPNewWndProc: Pointer;

procedure NewWndProc(var Msg: TMessage);

public

{ Public declarations }

end;



...



procedure TMDIForm.NewWndProc(var Msg: TMessage);

begin

case Msg.Msg of

WM_PAINT: begin

... // 그리기함... API로만 하지 않아도 됨. 일반적인 코딩 가능함

end;

end;

with Msg do begin

Result := CallWindowProc(FPOldWndProc, ClientHandle, Msg, wParam, lParam);

end; // 원래의 윈도우 프로시져를 호출해준다.

end;



procedure TMDIForm.FormCreate(Sender: TObject);

begin

FPNewWndProc := MakeObjectInstance(NewWndProc);

FPOldWndProc := Pointer(SetWindowLong(ClientHandle, GWL_WNDPROC,

Longint(FPNewWndProc));

end;



procedure TMDIForm.FormDestroy(Sender: TObject);

begin

SetWindowLong(ClientHandle, GWL_WNDPROC, Longint(FPOldWndProc));

FreeObjectInstance(FPNewWndProc);

end;



휴~

이상입니다.

수고하세요.

================================================================================

유동훈 wrote:

> Mdiform에서 한가운데 이미지를 띠우려고 하는데 어떻게 해야 할지 잘 모르겠네요..

>

> 처음에 Normal 로 변경했다가 실행하면 보이는데 클릭시 다시 MDIForm으로 변경해서

> MDIChild폼을 띠워다가 종료하면서 다시 Normal로 변경하는데 잘 안되네요,..

>

> 이미지 띠우는 법좀 가르쳐 주시면 감사하게 습니다..

0  COMMENTS
    • 레마
    • 2000.05.06 17:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • nilriri
      2000.05.06 20:12
      var mydate :TDateTime begin try myDate := StrToDateTime(FormatMaskText(em_birthday.text,'####-...
    • SerVing
      2000.05.07 00:34
      별로 힘든일이 아닌것 같은데요? 우선 status bar밑에 판넬을 깔고, Align=None으로, image를 놓을곳에 ...
    • 김일영
      2000.05.06 19:35
      '원도'라고 하신 내용은 아마도 하나의 윈도우만이 아니라 Windows 전체를 뜻하시는 내용 같은데 그렇다면...
    • 홍세비
    • 2000.05.06 12:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재원
      2000.05.06 18:35
      소스를 못봐서 잘은 모르겠는데요. inherited Create(AOwner); Parent:=AOwner; 우선 위에있는 데로...
    • 신소연
    • 2000.05.06 11:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영해
      2000.05.06 21:42
      신소연 wrote: > 델파이 팁에 있는것 처럼 아래와 같이 코딩 했습니다.. > 그런데도 a4크기만큼만 인쇄...
    • 김일영
    • 2000.05.06 10:46
    • 0 COMMENTS
    • /
    • 1 LIKES
    • Mr.Q
    • 2000.05.06 09:34
    • 4 COMMENTS
    • /
    • 0 LIKES
    • etraze.com
      2000.05.09 06:18
      select k.a_amount, k.b_amount, k.a_amount+ k.b_amount sum from ktabke a, ptable p > ...
    • Mr.Q
      2000.05.07 11:02
      Mr.Q wrote: > [ktable] > 필드명 형태 크기 > a_amount integer > b_amount integer > l...
    • 정용진
      2000.05.06 10:36
      select k.a_amount, k.b_amount, k.a_amount + k.b_amount sum, k.lcode + k.gcode l...
    • SerVing
      2000.05.07 00:35
      해보지는 않았는데, SubString()의 help를 보심이... 정용진 wrote: > select k.a_amount, k.b_amount...
    • Perl
    • 2000.05.06 05:24
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.07 03:35
      안녕하세요. 최용일입니다. 말씀하신 에러가 발생하는 주된 이유는 폼파일이 손상되어 델파이가 폼에 있...
    • Perl
      2000.05.08 04:10
      fileferret 으로 6개를 받아 모두 설치를 해 보았는데...어디서 잘 못된건지..무지 답답하네요...답변을 하...
    • 최용일
      2000.05.08 09:28
      안녕하세요. 최용일입니다. 저도 SkinForm컴포넌트를 설치해본 경험이 있는데 이상없이 잘 설치가 됐었...
    • 한석희
      2000.05.09 00:17
      문보석 wrote: >안녕하세요... 먼저 답변에 감사드립니다...... >그리고 또 궁금한게 있어서 이렇게 메일...
    • 한석희
      2000.05.08 19:16
      김종근 wrote: > 안녕하세요... > 질문은요... 도스용 프로그램을 shellexecute로 실행시켰는데 그 도스...
    • 양병규
      2000.05.06 10:58
      Keybd_Event를 사용하시면 가능합니다. Keybd_Event는 말그대로 키보드를 눌러주는 함수인디 도스모드에서...
    • 윤광희
      2000.06.10 09:26
      Active Form에서 다른 폼을 띄우는것 가능합니다. 에러가 나는 이유는... DPR 파일에서 FORM을 Create해...
    • 김영대
      2000.05.13 23:33
      이수정 wrote: > 안녕하세요.. > > File -> New 했을때... ActiveX Form 으로 생성해서 만들구요.. ...
    • 김영대
      2000.05.13 23:33
      이수정 wrote: > 안녕하세요.. > > File -> New 했을때... ActiveX Form 으로 생성해서 만들구요.. ...
    • 최용일
      2000.05.06 23:47
      안녕하세요. 최용일입니다. 아마도 엑티브폼에서 일반폼을 띄우는 것은 안될것입니다. 대부분은 엑티브...
    • Mr.Q
      2000.05.07 11:43
      톰과 제리 wrote: > 원도우를 확실하게 종료 할수 있는 방법을
    • Mr.Q
      2000.05.05 12:14
      톰과 제리 wrote: > 원도우를 확실하게 종료 할수 있는 방법을
    • 강민주
    • 2000.05.05 09:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2000.05.10 20:39
      direct show 컴포넌트는 딱 1개가 있습니다. 그러나 전혀 쓸모가 없어서리 만약 com을 잘다루신다면 직...
    • 잔상
    • 2000.05.05 07:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.06 23:00
      안녕하세요. 서버에다가 마우스 훅킹 핸들러를 하나 작성하여 놓고 클라이언트에서 요청이 있을때마...
    • 이창영
    • 2000.05.05 07:05
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 윤석천
      2000.05.05 17:51
      이창영 wrote: > 소문에는 mssql db를 사용하면 가격이 장난아니라고 하던데 아시는지요? 가격이 장난...
    • cos
      2000.05.05 09:21
      이창영 wrote: > 소문에는 mssql db를 사용하면 가격이 장난아니라고 하던데 아시는지요? > > 그와 비...
    • 권원재
    • 2000.05.05 07:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.06 22:48
      안녕하세요. 최용일입니다. 이건 API를 쓰는것이아니라 Shell Extension을 사용하셔야 합니다. 컨택스트...
    • 이창영
    • 2000.05.05 06:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.06 22:44
      안녕하세요. 최용일입니다. cfg파일이란 아마도 환경설정을 저장하는 파일을 말하는것 같은데 이것을 만...
    • 답답이
    • 2000.05.05 06:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.05.06 22:57
      안녕하세요. 최용일입니다. 유닉스계열의 OS를 사용하시는 것이 나을듯 하네요. 현제 윈도우계열을 이러...
    • 조유정
    • 2000.05.05 05:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • cos
      2000.05.05 09:16
      > 파라독스 DB를 사용하고 있는데 현제 날짜를 구하는 방법좀 알려 두세요... > > SELECT 문에 현재 날...