怎样在dll文件中创建窗体(50分)

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

delphi5lee

Unregistered / Unconfirmed
GUEST, unregistred user!
;在delphi中一个copyhook的例子,我想修改一下这个例子。
就是当用户修改文件夹时,出现一个对话框,要求输入密码,只有
正确输入密码才能对文件夹进行一些操作。我试过在设计阶段创建了一个窗体
可是当我显示这个窗口时系统提示该程序执行了非法操作。不知是不是不能
在设计阶段静态地创建窗体,但是要动态创建窗体该如何实现呢?
 
Dll中创建窗体和普通应用程序一样:
frmTest := TfrmTest.create(nil);

try
frmTest.showModal;
...
finaly
frmTest.free
end;
 
; 如果要在窗体加edit控件怎么加呢?
 
动态创建edit
myedit:=Edit.create(frmtest);
myedit.parent:=frmtest;
.....
 
窗体是动态创建的,但还和普通窗体一样设计就行了。比如Tedit什么的,
要是什么都动态创建岂不是很累。
 
;to Rozan:
你的意思先在设计阶段就新建一个窗体,但是你试过怎样去改它成为
一个在运行时才去创建。当然在普通的一个应用程序下我知道怎样去实现。
可是现在我使用的delphi中自带的copyhook例子,我不知怎么去实现。
 
to dvecom and rozan:
我使用了你们两的方法成功地创建了窗体。可是又一个问题来了
我怎样响应edit控件的keypress事件?(不知如何定义这个事件)
因为我要在该事件中处理一些东东
 
我写过DLL的程序,除了调用的方法外与普通程序的设计是一样的。
你不能执行可能是其他方面的错误。可以试试下面的代码:
library ShareFaxCnv;
uses
SysUtils,
Classes,
uTest in 'uTest.pas' {frmTest},

procedure ShowTest;stdcall;export;
var f : TfrmTest;
begin
f:=TfrmTest.Create(nil);
try
f.ShowModal;
finally
f.Free;
end;
end;

{$R *.RES}
exports
ShowTest;
begin
end.
然后你把uTest.pas是任意一个form,这样就可以了。
从其他程序调这个DLL时,就显示form了。
声明:procedure ShowTest;stdcall;external 'Test.DLL';//your Dll file name
调用:ShowTest;
或动态装载
 
to :delphi5lee
TEdit.OnKeyPress is a property ,you can assign a procedure to it.
But you must notice its declare has something differ.
 
;to rozan:
谢谢你的代码,我试一下,可是我还想知道如果我不是在设计阶段创建可视化
控件,我怎么才能响应他们的事件呢?
 
;to BillMicky:
请问怎样分配我定义的过程给tedit.onkeypress呢?
我这样做不行:tedit.onkeypress:+myprocess;
 
可以赋一个过程给它:
//先定义一个过程,和其它的OnKeyPress一样
procedure MyEditKeyPress(sender:TObject;Var Key:Char);
begin
//your code
end;
myEdit.OnKeyPress:=MyEditKeyPress
 
;请问过程在什么地方定义啊
我定义过程后,老是提示这样的错误
,[Error] Unit1.pas(36): Incompatible types: method pointer and regular procedure
 
和定义普通的KeyPress事件一样先在form的类中定义好过程
TForm1=class(TForm)
...
procedure MyeditKeyPress(Sender:Tobject;var key:char);
...
end;
//实现部分
procedue TForm1.MyeditKeyPress(Sender:TObject;var key:char);
begin
// your code
end;
// 再调用就行了

兄弟,给点分吧,我昨天晚上回答了可惜没贴上,真7,今天才发现,没功劳也有苦功呀~~~~~
 
多人接受答案了。
 
to delphi5lee:

try this:
type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
procedure MyKeyPress(Sender:TObject;var Key:Char);
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
procedure TForm1.MyKeyPress(Sender:TObject;var Key:Char);
begin
ShowMessage('the key is:'+key);
end;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.OnKeyPress:=MyKeyPress;
end;

end.
 
后退
顶部