업데이트 JVCL이 내장 된이 기능을 포함하도록 수정되었습니다! TForm의 내장 이벤트는 이제 폼을 도킹 할 때 시작됩니다. JEDI JVCL에서 DockingInCode 데모를 확인하십시오. 2012 년 3 월 27 일 현재 Docking 및 Undocking 이벤트 발생 샘플이 포함되어 있습니다. 도킹 할 때 TDD.OnEndDock이 실행 중입니다 (도킹 해제시 TForm.OnUnDock
). 이름에 관해서 유감스럽게 생각한다면, 그 지역은 이미 TForm
에 있고 나는 그들을 선택하지 않았습니다! 역사적인 이유로
OLD 답변 :
당신은 양식이 부유하게되었다는 통지를하고 싶습니다. TForm은 이미 OnUnDock
과 OnEndDock
입니다.하지만 Jedi VCL Dock Manager를 사용하여 도킹하거나 도킹 해제 할 때 (슬프게도) 실행되지 않습니다.
내가 생각하는 가장 좋은 방법은 JVCL을 수정하는 것입니다.
은 수정 JvDockSupportControl.pas, 방법 TJvDockCustomControl.WndProc :
procedure TJvDockCustomControl.WndProc(var Msg: TMessage);
var
CMUnDockClient: TCMUnDockClient;
DockableForm: TJvDockableForm;
allow:Boolean;
begin
if Msg.Msg = CM_UNDOCKCLIENT then
begin
CMUnDockClient := TCMUnDockClient(Msg);
// new code starts here
if CMUnDockClient.Client is TForm then begin
allow := true;
if Assigned(TForm(CMUnDockClient.Client).OnUnDock) then
TForm(CMUnDockClient.Client).OnUnDock(Self,CMUnDockClient.Client,TWinControl(nil),allow);
// if not allow then
// exit; // currently JvDocking has already deleted you from the dock tree, so we can't honor this.
end;
// new code ends here
if CMUnDockClient.Client is TJvDockableForm then
begin
...
불행하게도이 구성 요소의 디자인의 감독, 그리고 당신이 Jedi Bug Tracker에 로그하고, 여기에 링크를 게시합니다. JvDocking 내부 구조는 복잡하고 슬프게도 위와 같은 해킹으로 인해 현재로 갈 수 있습니다.
JVCL을 편집하는 대신 사용할 독 스타일을 기반으로 자신 만의 스타일을 만들고 OnDock 및 OnFloat 이벤트를 추가하십시오. 예를 들어, VID (Visual Interdev) 도크 스타일을 사용하는 경우 JvDockVIDStyle.pas를 자신의 장치로 복사하고 다른 이름으로 바꿉니다.
코드에서이 절차 찾기 :
procedure TJvDockVIDTree.WindowProc(var Msg: TMessage);
가 그 함수에서 기존 코드를 그대로두고 맨 아래에 다음을 추가합니다
if (Msg.msg =CM_UNDOCKCLIENT)and Assigned(FOnUndock) then
FOnUndock(TObject(Msg.Client))
은 내가 더 나은 버전을 작성해야한다는 생각을 위의 내용을 직관적 인 방식으로 JVCL JvDocking에 넣으십시오. 또한 OnEndDock이 기능하도록 만들어야합니다. OnStartDock은 JvDocking과 호환되지 않으므로 추가 할 수 없습니다.
감사합니다. –
개선 사항이 작업을 포함하여 이후에 JVCL을 확인하고 이미 수정되었을 수 있습니다. JVCL에 이러한 기능이 포함되어있을 때 답변을 업데이트하겠습니다. –