Q&A

  • [고급질문?] 드래그&드롭에 관해서......
이건 좀 이상하다 싶어서 질문 드립니다. 제가 아무리 해도 풀 수 없는 문제 같거든요.

도전해 봅시다...우리 모두....하하



한 어플리 케이션에서 어느 콤포넌트든지 상관 없는지는 잘 모르겠지만...

제가 테스트 한 것은 트리 뷰 입니다. 드래그 모드와는 상관 없이 트리뷰의

BeginDrag 함수를 호출한 후(즉, 마우스로 드래그&드롭을 한 번이라도 한 후)..

어플리케이션 내부에서 폼이 있는 DLL을 호출하여

그 DLL 의 폼에서 드래그 가능한 아무 것이나 드래그 하여 DLL을 호출한

폼 위로 드래그 오버 하는 순간.... "Invalid Class TypeCast" 에러가 납니다.

호출된 DLL 에서는 자신의 폼을 Create(Application) 으로 생성 시키며

그리고 나서 생성한 DLL 폼을 ShowModal로 보여 준 상태입니다.



정말이지 이해가 가지 않는 군요....

제 말이 이해가 가지 않으실수도 있으니 아래에 그 코드를 첨부 합니다.

제발...도사님들... "도아" 주세요.







[ DLL 을 호출하는 메인 폼 - TreeView의 드래그 모드는 dmAutomatic 입니다]



unit MouseDragMove;

interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ComCtrls, StdCtrls, UnitUDS;



type

TForm1 = class(TForm)

TreeView1: TTreeView;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

FX, FY : Integer;

mDown : Boolean;

public

{ Public declarations }

end;



var

Form1: TForm1;

Procedure ShowForm; StdCall; External 'C:temp32d4outputProject2.dll';

implementation



{$R *.DFM}



procedure TForm1.Button1Click(Sender: TObject);

begin

ShowForm;

end;



end.



[ DLL 의 소스]



unit Unit2;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;



type

TForm2 = class(TForm)

ComboBox1: TComboBox;

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form2: TForm2;



Procedure ShowForm; StdCall;



implementation



{$R *.DFM}

Procedure ShowForm;

begin

Form2 := TForm2.Create(Application);

Try

Form2.ShowModal;

Finally

Form2.Free;

End;

end;

end.





0  COMMENTS