我的目的是,在dll中建立一个FORM,包含Timer,image。(100分)

  • 主题发起人 主题发起人 gst
  • 开始时间 开始时间
G

gst

Unregistered / Unconfirmed
GUEST, unregistred user!
我的目的是,在dll中建立一个FORM,包含Timer,image。用Bitmap控件调用一个图片,
time的interval为10,每次Timer1Timer中step减一,在image 中在(10,step)位置
显示这个图,用户按BUTTON后关闭FORM。运行后点击BUTTON后系统提示错误。
去掉Timer后,利用Bitmap控件调用一个图片,也不行。
如果在image的属性中选则图片则可以。
错误的形式为不断出现FORM,应该只出现一个。
请问为什么。dll中的这个单元如下:
unit DllFormUnit;

interface

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

type
TDllForm = class(TForm)
Bevel1: TBevel;
Image1: TImage;
Bevel2: TBevel;
Button1: TButton;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
step:integer;
public
{ Public declarations }
end;

var
DllForm: TDllForm;

implementation

{$R *.DFM}

procedure TDllForm.Timer1Timer(Sender: TObject);
begin
step:=step-1;
DllForm.Paint;
end;

procedure TDllForm.FormShow(Sender: TObject);
var Bitmap:TBitMap;
begin
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('about.bmp');
DllForm.Image1.Canvas.Brush.Color:=clBlack;
DllForm.Image1.Canvas.Rectangle(DllForm.Image1.ClientRect);
DllForm.Image1.Canvas.Draw(10,step,BitMap);
end;

end.
 
1、在 FormShow 中,创建的 Bitmap 没有调用 Free 去释放资源。
2、不用在 Form 的 OnShow 事件绘图,该事件只在 Form 的 Visible 属性由 False 变为 True
时触发,Form 显示后你调用 Form.Paint 不会触发 OnShow 事件的。你可以在 Form 的
OnPaint 事件中绘图,那样,每次 Form 重绘时都会调用你的处理过程,就不用在 OnTimer
中调用 Form.Paint 了,但可能造成闪烁,因为 Form 的重绘可能很频繁。
 
可是我在Form.Paint 中试了也是同样的错误。
 
此人对WINODWS下APP运行机制不了解
 
请说明出错的提示信息或现象。出现了多个 DLLForm?另外还要改一下:
procedure TDllForm.Timer1Timer(Sender: TObject);
begin
step:=step-1;
end;

procedure TDllForm.FormShow(Sender: TObject);
var Bitmap:TBitMap;
begin
Bitmap:=TBitmap.Create;
try
Bitmap.LoadFromFile('about.bmp');
Image1.Canvas.Brush.Color:=clBlack;
Image1.Canvas.Rectangle(Image1.ClientRect);
Image1.Canvas.Draw(10,step,BitMap);
finally
Bitmap.Free;
end;
end;
去掉对 DLLForm 对象的引用。如果你 LoadFromFile 的文件是固定的,可以在 OnCreate 事件
中就加载文件,在 Paint 事件中画出来,那样效率较高。
 
to bbkxjy还是不行,你能否把我给的代码运行一下就知道问题了.
按照我的目的是,在dll中建立一个FORM,包含Timer,image。用Bitmap控件调用一个图片,
time的interval为10,每次Timer1Timer中step减一,在image 中在(10,step)位置
显示这个图,用户按BUTTON后关闭FORM。运行后点击BUTTON后系统提示错误。

我用的是delphi 5.0 ,各位是否可以按我的目的试着做一个,
让我看看你门是如何实现它的.我将非常感谢
 
你在 Button 的OnClick 事件中先 disable Timer 试试:
procedure TDLLForm.Button1Click(Sender: TObject);
begin
Timer1.Enabled := False; //禁止 OnTimer 事件
... //做你的处理
Close; //关闭窗体
end;
 
接受答案了.
 
后退
顶部