MDI方式dll调用窗体。 (20分)

  • 主题发起人 主题发起人 Nizvoo
  • 开始时间 开始时间
N

Nizvoo

Unregistered / Unconfirmed
GUEST, unregistred user!
我的主窗体想调用DLL,,,调用的是窗体。这样可以成功,但我把FormStyle
设为fsMDIChild之后照理应当是调用的MDI方式,为什么不成功,有啥诀窍。
 
是主窗口的FormStyle
设为fsMDIChild??
 
dll里头的窗体,是作子窗体用的。
主窗体只是一个空壳,上头几个按钮
 
如果你再加点分的话,就会告诉你!
 
onlyonekgx你先说说,如今世道不好,我分没有了,明天就会的。谢谢
 
帮我一把吧
 
dll自已有个Application,但你要把程序的Application传入替换才能使用子窗体用完后换回原来的。
 
我不想把我的代码告诉你,但你可以把你的代码(DLL)贴出来,我帮你论断一下!
 
调用时,将主程序的Application作为参数传递过去,取代DLL的Application。
 
onlyonekgx好,兄弟真够哥们!

分两部分:
dll部分。
新建一dll文件,添入一form,设form1,这个form1的FormStyle设为fsMDIChild。
在dll文件中写入调用显示函数代码如下
function FormFuncution: Boolean; stdcall;
begin
; frmMain1 := TfrmMain1.Create(nil);
; frmMain1.Show;
end;
exports FormFunction;

即输出函数FormFunction
在主界面调用中,设主窗体FormStyle为fsMDIMain,调用方式采用
如下是pas内容。
unit call;

interface

uses
; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
; Dialogs, StdCtrls;

type
; TForm1 = class(TForm)
; ; Button1: TButton;
; ; procedure Button1Click(Sender: TObject);
; private
; ; { Private declarations }
; public
; ; { Public declarations }
; end;

var
; Form1: TForm1;

implementation
function FormFunction: Boolean; stdcall;external 'formfunc.dll';
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
; FormFunction;
end;

end.

就是这个样子,你帮看看,指点一下
 
你还需要把Library单元贴出来!
 
library formfunc;


uses
; SysUtils,
; Classes,
; Forms,
; frmMain in 'frmMain.pas' {frmMain1};


{$R *.res}

function FormFunction(aHandle: THandle): Boolean; stdcall;
begin
; frmMain1 := TfrmMain1.Create(nil);
; frmMain1.Show;
end;
exports
; FormFunction;

begin
end.
 
你至少有两个参数没有传递,Application,Screen!,另外如果用动态调用DLL的方法占用的
资源会少一此!
 
打五笔啊,,,兄弟,,,呵呵,,这是个例子,我就卡壳了,以前我是做成dll窗体在
工程中,和主界面一起的,非dll窗体,采用内嵌窗体式,但苦于滚动条水平的有时候无缘
消失,,,于是采用dll窗体调用,哪知世事难,弄了两天,,不过我还是信心百倍可以做
出,感谢各位,我试试。动态调用当然好些,,呵呵,这个例子就免了吧。。。。
 
这大概已经明白了!
 
说当前没有ChildForm激化是啥意思。
函数处理处。
function FormFunction(aHandle: THandle; aScreen: TScreen): Boolean; stdcall;
begin
; Application.Handle := aHandle;
; Screen := aScreen;
; frmMain1 := TfrmMain1.Create(nil);
; frmMain1.Show;
end;
exports
; FormFunction;

函数调用处

FormFunction(Application.Handle, Screen);
多谢
 
function FormFunction(App:TApplication; aScreen: TScreen): Boolean; stdcall;
begin
; Application :=App;
; Screen := aScreen;
; frmMain1 := TfrmMain1.Create(Application);
; frmMain1.Show;
end;
exports
; FormFunction;

函数调用处

FormFunction(Application, Screen);

单传一个Application.Handle很容易出错,
看看你ChildForm的FormStyle----fsMDIChild
 
我再试试。我的formstyle是正确的
 
成了,,,但有时候出莫名错误,,,,
 
后退
顶部