Q&A

  • 델파이 데모에 있는 도킹 예제에서요!!
도킹 폼에 다음과 같은 프로시져가 있습니다.
procedure CMDockClient(var Message: TCMDockClient); message CM_DOCKCLIENT;

CM_DOCKCLIENT 메시지를 받으면 실행 하는 프로시져 같은데 다음과 같습니다.

procedure TDockableForm.CMDockClient(var Message: TCMDockClient);
var
  ARect: TRect;
  DockType: TAlign;
  Host: TForm;
  Pt: TPoint;
begin
  //Overriding this message allows the dock form to create host forms
  //depending on the mouse position when docking occurs. If we don't override
  //this message, the form will use VCL's default DockManager.

  //NOTE: the only time ManualDock can be safely called during a drag
  //operation is we override processing of CM_DOCKCLIENT.

  if Message.DockSource.Control is TDockableForm then
  begin

    //Find out how to dock (Using a TAlign as the result of ComputeDockingRect)
    Pt.x := Message.MousePos.x;
    Pt.y := Message.MousePos.y;
    DockType := ComputeDockingRect(ARect, Pt);

    //if we are over a dockable form docked to a panel in the
    //main window, manually dock the dragged form to the panel with
    //the correct orientation.
    if (HostDockSite is TPanel) then
    begin
      Message.DockSource.Control.ManualDock(HostDockSite, nil, DockType);
      Exit;
    end;

    //alClient => Create a TabDockHost and manually dock both forms to the PageControl
    //owned by the TabDockHost.
    if DockType = alClient then
    begin
      Host := TTabDockHost.Create(Application);
      Host.BoundsRect := Self.BoundsRect;
      Self.ManualDock(TTabDockHost(Host).PageControl1, nil, alClient);
      Message.DockSource.Control.ManualDock(TTabDockHost(Host).PageControl1, nil, alClient);
      Host.Visible := True;
    end
    //if DockType <> alClient, create the ConjoinDockHost and manually dock both
    //forms to it. Be sure to make dockable forms non-dockable when hosted by
    // ConjoinDockForm, since it is using the VCL default DockManager.
    else begin
      Host := TConjoinDockHost.Create(Application);
      Host.BoundsRect := Self.BoundsRect;
      Self.ManualDock(Host, nil, alNone);
      Self.DockSite := False;
      Message.DockSource.Control.ManualDock(Host, nil, DockType);
      TDockableForm(Message.DockSource.Control).DockSite := False;
      Host.Visible := True;
    end;
  end;
end;

코드가 이해가 잘 되지 않아 그대로 따라 했는데 안 되는군요.
CM_DOCKCLIENT 메시지가 언제 어디서 날라 오는지 정말 모르겠군요.

좋은 답변 부탁드릴께요.
그럼 수고하세요.
1  COMMENTS
  • Profile
    김영민 2004.08.21 00:05
    Controls.pas에 이렇게 되어 있군요...

    메시지 정의
    CM_DOCKCLIENT             = CM_BASE + 56;

    메시지 내용
    TCMDockClient = packed record
        Msg: Cardinal;
        DockSource: TDragDockObject;
        MousePos: TSmallPoint;
        Result: Integer;
      end;

    그리고 메시지 hook을 해 보니...
    DockOver -> CMDockclient -> DockDrop 순으로 메시지가
    전달되는군요...

    그리구 override 를 명시하지 않으면 기존 메서드를 완전히 대체하네요.

    허접 자답이었습니다. 꾸벅...

    • 임병설
    • 2004.08.20 20:28
    • 3 COMMENTS
    • /
    • 0 LIKES
    • srookie
      2004.08.21 01:05
      안녕하세요. 그 프로그램 자체가 멀티랭귀지가 고려되지 않고 Compile되었다면 단순한 방법으로는 한글로 ...
    • 꿈의대화
      2004.08.21 00:13
      .
    • 퇴프
      2004.08.21 06:43
      크랙하면 코드에서 글자가 어떤 형태로 나오지요? 문자 그대로 나오지는 않을것 같은데요.. 델파이 폼스...
    • 오재열
    • 2004.08.20 19:52
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 서기원
      2004.08.20 20:16
      1. 저도 그 문서보고 따라 한거라서 뭐가 정답인지는 모르겠지만 두 개중에 어떤 걸 설치해도 괜찮을 것 같...
    • 노상협
      2004.09.22 02:49
      -_-);; 죄송한데요..저두 받으신 문서 받을수없을까여?? 저두 ACTIVEX 로 해보구 싶은데.... uses 절에 C...
    • 오재열
      2004.08.20 20:29
      죄송합니다. 자꾸만 여쭤 보네요.. TCrystalActiveXReportViewer  //<----- 이녀석은 어디...
    • 서기원
      2004.08.21 00:37
      앗.. 죄송.. 제가 크리스탈 리포트 10을 설치해서 그런가 봅니다. 문서를 보니 CRViewer9이랑 같은 놈입...
    • 오재열
      2004.08.21 01:45
      정말 죄송한데요.. TApplication 이라는 녀석 어떤 유닛에서 나오는 거죠? 자꾸 에러가 나서 따라 가보...
    • 서기원
      2004.08.21 02:16
      제 소스에서는 CRAXDRT_TLB.pas로 가는데요..^^ 이렇게 써도 되는지는 모르겠지만, Application1 : CR...
    • 김영민
    • 2004.08.20 19:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영민
      2004.08.21 00:05
      Controls.pas에 이렇게 되어 있군요... 메시지 정의 CM_DOCKCLIENT     &nbs...
    • 김길현
    • 2004.08.20 15:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김길현
      2004.08.27 01:13
      안녕하세요.   일단 프로그램밍하다 보니, 막히더군요.   여러 소스를 다운 받...
    • 이태형
      2004.08.20 23:06
      저도 전에 에러가 나서 텍스트 파일로 가지고 있던건데요 에러코드 내용은 다음과 같습니다. 응답 ...
    • 김회석
    • 2004.08.20 07:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김기원
      2004.08.20 18:38
      안녕하세요.. Unit2가 그냥 Unit이라면... Uni2에 전역변수를 설정 후 사용 하시면 됩니다. Unit1 에...
    • 문의득
    • 2004.08.20 05:02
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김영민
    • 2004.08.19 22:29
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 오철환
    • 2004.08.19 20:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2004.08.19 22:57
      님의 말씀이 맞고요 만약 전송속도 제한이 있을경우에는 틀리겠지만 그렇게 전송제한을 둔것 같지않...
    • 이중철
      2004.08.19 23:03
      내용파학하기가 무지 어렵거든요 파일생성후 업데이트 <- 무슨파일인지? 가지고 온데이타들을 일...
    • 임병설
    • 2004.08.19 06:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • help me
    • 2004.08.19 00:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이태형
      2004.08.19 01:16
      델파이에서 Porject/Options 선택해서 Directory/Conditionals 탭에 BlowFishEncryption를 입력하면, 1번...
    • 徐永努
    • 2004.08.19 00:07
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 데빠이
      2004.08.24 19:47
      저두 FB(IB) 사용하지만 굳이 BDE 연결해서 사용하지는 않기때문에 몇자 올립니다. 저 같은 경우 BDE 사용...
    • 장태원
      2004.08.19 01:24
      BDE 와 상관없이 서버에서 접속을 거부를 하는듯 합니다.
    • 허성준
    • 2004.08.18 22:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 유정헌
    • 2004.08.18 20:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • srookie
      2004.08.19 01:01
      안녕하세요. 제가 보기에는 ClientSocket이 ServerSocket에 Connect 되기 전에 Send가 되었을 가능성이 있...
    • 이창우
    • 2004.08.18 20:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장철만
      2004.08.18 20:19
          DateSeparator := '.';     ShortDateFormat := 'yyy...
    • 이중철
      2004.08.19 04:43
      메인과 DLL의 Memory Heap이 틀린것으로 알고 있습니다. 즉, 메인의 어떤 포인터 변수를 가지고 DLL에서...
    • 신강섭
      2004.08.20 23:46
      음.. DLL 작성하실때 하나 주의점이 있습니다. DLL 생성시 기본적으로 생긴 주석문을 보시면 String 형을...
    • srookie
      2004.08.18 02:57
      안녕하세요. 원하시는 답변이 맞는지 모르겠습니다만, SUM에 FF를 AND 연산 하면 될것 같네요. SUM :...
    • 박태선
    • 2004.08.17 21:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 데빠이
      2004.08.24 19:36
      Application.ProcessMessages; 를 사용해보심이...^^ 원하시는 답변이 아니었다면 죄송하구염...