DLL问题---!!!(100分)

  • 主题发起人 主题发起人 delphifaq
  • 开始时间 开始时间
D

delphifaq

Unregistered / Unconfirmed
GUEST, unregistred user!
可否将主程序窗体中的TPanel对象,作为参数传入DLL中,再将DLL中Form中的TPanel对象
的Parent设为传入的TPanel对象??
怎么实现???
 
怎么做??好像没有碰过。。
 
总是出错
 
是不是通过DLL给TPanel 添加控件。
 
是的,请赐教
 
都回家了??
 
在dll中对调用它的程序的一个panel里添加一个按钮,试过可以的
在dll中这样做
procedure addBotton(PanelInt: longint); stdcall;
var
Button1: TButton;
begin
Application.Handle := THandle(PanelInt);
Button1 := TButton.Create(Application);
Button1.ParentWindow:=Application.Handle;
Button1.Visible := true;
end;
//在调用的程序里这样做
procedure addBotton(PanelInt: longint); stdCall; external 'PDll.dll';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
addBotton(longint(panel1.Handle));
end;

请给分

 
可以试试用句柄,但要先保留句柄,过后复原
 
我用过的.记住一点有借有还,用完还回去就不出错.
 
to esuper 我在DLL中动态创建窗体,然后将窗体上的Panel上的所有控件显示在调用程序
窗体的Panel上
??
 
最好不要在DLL中创建窗体
那样会占用很多系统资源的
特别是窗体上的Combobox比较多的时候
 
to delphifaq
你是不是这个意思:
1.调用程序一个窗体,而且窗体里有一个panel;
2.Dll内动态创建一个窗体,再在这个窗体里创建一个panel,然后在这个panel上创建一些控件
最后把这些控件搬到调用程序中的窗体里的panel上。
如果是这个样子的话:
没必要在dll中创建窗体和panel,直接用我上面提供的方法,在调用程序中创建控件就得了。
这样子又不会浪费资源,又快
如果是其它情况,请说清楚
 
在DLL中创建窗体,然后将DLL窗体上包含的控件显示到应用程序里,从而完成
DLL中的功能
 
可以的。在Delphi里面,对象名实际上是一个指向对象代表的类实例的指针。明白了这
一点后你可以按下面这种方法来实现你的要求:
你可以将主窗体的TPanel强制转换为一个integer型的参数,然后将这个参数传入DLL中。
在DLL里面接收的时候再通过TPanel(AIntVAlue)将其转换出来。
 
没事作了吗?
 
To delphifaq:
你的问题我遇到过,我是把外部的ADOConnection传递给DLL中的ADOConnection(DLL
中的ADOConnection是给DLL中的ADOTable用的,不过是象征性的。它没有连接)。结果老是
报错。可是如果用代码在DLL中创建ADOConnection,就可以付了。
 
esuper
的方法可以,但是如果在dll中给控件添加事件处理,
却总响应不到消息
解决一下呀
 
后退
顶部