读书人

每次RUN后点关闭会卡住

发布时间: 2012-10-19 16:53:35 作者: rapoo

求救,每次RUN后点关闭会卡住
以下是代码


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
with adoquery1 do
begin
close;
SQL.Clear;
Sql.Add('select * from test where (id=:a) and (code=:b) ');
parameters.ParamByName('a').Value:=Trim(edit1.Text);
parameters.ParamByName('b').Value:=Trim(edit2.Text);
open;
end;
if adoquery1.RecordCount>0 then
application.MessageBox('登录成功!','提示',0+64)
else
application.MessageBox('用户名或密码不正确,请重新输入!','提示',0+64);
end;

end.







unit Unit2;

interface

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

type
TForm2 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
Edit1: TEdit;
Button1: TButton;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
ComboBox1: TComboBox;
Button2: TButton;
Button3: TButton;
procedure N1DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
Selected: Boolean);
procedure BANGZHU1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
procedure FormPaint(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.N1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
ACanvas.FillRect(ARect);
ACanvas.Font.Size:=10; //设置为足够大的字号
ACanvas.Font.Name:= '新宋体 '; //设置为你喜欢的字体
//输出菜单项
ACanvas.TextOut(ARect.Left,ARect.Top,(Sender as TMenuItem).Caption);

end;

procedure TForm2.BANGZHU1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
ACanvas.FillRect(ARect);
ACanvas.Font.Size:=10; //设置为足够大的字号
ACanvas.Font.Name:= '新宋体 '; //设置为你喜欢的字体
//输出菜单项
ACanvas.TextOut(ARect.Left,ARect.Top,(Sender as TMenuItem).Caption);
end;



procedure TForm2.FormPaint(Sender: TObject);
var
pic:TBitmap;
pic2:TBitmap;

begin
pic:=TBitmap.Create;


pic.LoadFromFile('b.bmp');
Canvas.Draw(0,450,pic);
pic.Free ;


pic2:=TBitmap.Create;
pic2.LoadFromFile('2.bmp');
Canvas.Draw(270,80,pic2);
pic2.Free ;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Form1.Show;
end;

procedure TForm2.N2Click(Sender: TObject);
begin
Form1.Show ;
end;

end.


[解决办法]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Free;
end;
应该是这句的问题,应改成
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
Form1:=nil;
end;
[解决办法]
普通窗体onClose事件不用写代码,或者写上一些释放资源的代码,但你这里的Free明显是错的

如果是MDI,在onClose就用Action:=caFree;
再在onDestroy加上Form1:=nil;

读书人网 >.NET

热点推荐