이건 좀 이상하다 싶어서 질문 드립니다. 제가 아무리 해도 풀 수 없는 문제 같거든요.
도전해 봅시다...우리 모두....하하
한 어플리 케이션에서 어느 콤포넌트든지 상관 없는지는 잘 모르겠지만...
제가 테스트 한 것은 트리 뷰 입니다. 드래그 모드와는 상관 없이 트리뷰의
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.