倾家荡产 192分 求一个简单完整的DLL源程序! (100分)

D

Dinky

Unregistered / Unconfirmed
GUEST, unregistred user!
Requires:
1、主窗体:有一主窗体调用DLL里的子窗体,在主窗体上,可以得到子窗体的个数(MDIChildCount)。
2、DLL子窗体:显示数据库里的数据(随便什么数据)
3、调用不出错。
谢谢!如果你愿意帮我请将程序发到我的邮箱
<a href='mailto:DinkySoft@163.com'>DinkySoft@163.com</a>
收到后,满意后给分,不满意分要少一点!还有要留下你的一句话在这里,到时不能给分的
还有92分没有加上去,不知道怎么加
 
我这有一个,或许对你有用,拿箱子过来
 
to jsxjd,谢谢你来Up
我收到,发一个给你
 
to王公子,
你发给我吧!dinkysoft163.com
 
我有一个。。找不要。。。
要不什么写一个。。
 
to youou也可以啊!
 
我也要一个。谢谢
ty_unix@163.com
 
可以给我一个吗?
xuxincheng@sina.com
 
贴出来吧,大家共享一下:)
 
我已经找到了一个方法,是用Delphi中的包技术

同时使主程序变得很小,
还可以动态加载包,运行也不出错

如果需要,给我50分,将实现方法发送
 
实现的思路是将基础的包,重新封装成一个独立的大包,
然后你的程序,和另一个动态链接库(最好做成包),
都使用这个大包,你的程序和动态库会很小,
但是这个大包,就很大了,
不过对于做大型程序,这样反而更能节省内存
和减小EXE的体积
 
to LiChaoHui
发过来,一定有分的
 
先开帖子吧,要留下信箱,我好发送全部源代码(共10k)
 
LiChaoHui, 来这里拿分
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1525301
我的邮箱 sunny_sh@163.net
 
///////////////// DLL /////////////////////
library FormDll;

uses
SysUtils,
windows,
Classes,
forms,
MyForm in 'MyForm.pas' {ChildForm};

{$R *.RES}
var
DLLApp: TApplication;
OldSc:TScreen;
procedure DLLUnloadProc(Reason : Integer);
begin
if Reason = DLL_PROCESS_DETACH then begin
Application := DLLApp;
Screen:=OldSc;
end;
end;

function ShowForm(App:TApplication;sc:TScreen): integer;
var
i:integer;
begin
application:=App;
Screen:=sc;
for i:=0 to N do
if ch=nil then
begin
ch:=TChildForm.Create(nil);
// ch.parent:=application.mainform;
ch.tag:=i;
break;
end;
Result:=0;
end;

exports ShowForm;

var
i:integer;
begin
for i:=0 to N do ch:=nil;

DLLApp := Application;
OldSc:=Screen;
DLLProc := @DLLUnloadProc;
end.

/////////// mdiform unit //////////////////

unit MyForm;

interface

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

type
TChildForm = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const N=100;

var
ch:array[0..N] of TChildForm;

implementation

{$R *.DFM}

procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
ch[tag]:=nil;
end;

procedure TChildForm.FormCreate(Sender: TObject);
begin
inherited;
FormStyle := fsMDIChild;
end;

end.



////////////// 调用程序 //////////////////////////
unit Unit1;

interface

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

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

var
Form1: TForm1;

implementation

{$R *.DFM}
// 创建动态按钮,第一排一个,第十排十个
var
b:array of array of TButton;
procedure TForm1.FormCreate(Sender: TObject);

var
i,j:integer;
begin
SetLength(b,10);
for i:=low(b) to high(b) do
SetLength(b,i+1);

for i:=low(b) to high(b) do
for j:=low(b) to high(b) do
begin
b[i,j]:=TButton.Create(self);
with b[i,j] do
begin
parent:=self;
left:=j*30;
top:=i*30;
width:=20;
height:=20;
visible:=true;

end;
end;

end;
function ShowForm(App:TApplication;sc:TScreen): integer;external 'formdll.dll'

procedure TForm1.Button1Click(Sender: TObject);
begin
showform(application,screen);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage(inttostr(MDIChildCount));
end;

end.
 
to: brianyu
程序已发送,附上一些其它的技巧:

还有一些其它的问题,就是控制Delphi程序的运行时信息

譬如,我知道某个类的类名和属性的名称,
我也可以创建这个类并修改它的属性,
我的演示程序里有根据类名称创建类实例的方法,
下面写出访问知道名字的属性的方法
需引用 TypInfo 单元
假设 MyObj 是通过上面的方法创建的对象
他的两个字符串类型的属性分别为 MyProperty1 和 MyProperty2
下面读取MyProperty1 并设置 MyProperty2
SetStrProp(MyObj, 'MyProperty1', 'test1');
vStr := GetStrProp(MyObj, 'MyProperty2');

要修改的属性只能是Published的属性
只有Published的属性才有类似的运行时信息
对于不同的数据类型
TypInfo单元提供了不同的方法


 
to LiChaoHui:
你的源代码是什么程序, 若合适我也另开贴
 
to: 楼主,
我的方法完全不同于楼上的方法,
使用包来实现,透明性好,代码很少,没有副作用
(据我以前的研究,楼上的方法有很大的缺陷,虽然能够显示窗口,
退出的时候,也可以不出错,但是如果在MDI子窗口上加一个弹出菜单,
你再看看,就惨了)

如果需要,说一声,我好发给你
我只要50分,如果硬要多给,我只好领受
 
顶部