首先是login登入窗体登入的时候。。先检查数据库的Sy表是否存在注册码。。如果不存在弹出软件注册的窗口。如果存在。。进行校对。。如果错误。弹出软件注册的窗口。如果对。。那么就可以登入login窗体的代码procedure TFlogin.FormCreate(Sender: TObject);
var
 a,b:string;
begin
a:=NBGetAdapterAddress(0);         {获得机器码}
 with dm.aq_1 do
  begin
   close;
   sql.Clear;
   sql.Add('select * from Sy where S_Jname='''+a+'''');
   open;
   if eof then
    begin
     fregister:=Tfregister.create(application);
     fregister.ShowModal;
     Flogin.Hide;
    end
   else
    begin
     b:=fieldbyname('S_key').AsString;
     if GenRegCode(a)<>b then                     {这是校对保存的注册码是否和现在的机器码产生的注册码一样}
      begin
       application.MessageBox('注册码不正确','提示信息');
       fregister:=Tfregister.create(application);
       fregister.ShowModal;
       Flogin.Hide;
      end
    end;
  end;
end;以上貌似可以运行
下面是注册窗体的代码procedure TFregister.SpeedButton2Click(Sender: TObject);
begin
 Fregister2.Show;
 Fregister.close;
end;
就是这里。。当按这个按钮的时候。。就出错。。
access violation at address 00459F92 in module 'shop.exe'.read of address 000002f4delphi所指向错误的地方确实login窗体的Flogin.Hide; 说明下:我数据库是空的

解决方案 »

  1.   

    是否是:窗体还没创建,就show?
      

  2.   


    现在改成
    procedure TFregister.SpeedButton2Click(Sender: TObject);
    begin
     Fregister2:=Tfregister2.create(application);
     Fregister2.ShowModal;
     Fregister.Close;
    end;又出现一个新的问题。。就是Fregister窗体不关闭。。而且当弹出新的窗体关闭后。。无法对这个窗口就像操作。。
      

  3.   

    procedure TFregister.SpeedButton2Click(Sender: TObject);
    begin
     Fregister2:=Tfregister2.create(Self);
     Fregister2.ShowModal;
     Fregister2.free;
    end;
      

  4.   

    你好。。这样写了后Fregister 也关不掉= =! 无法操作
      

  5.   

      你注册的时候 分为会弹出注册窗口和不弹出注册窗口两种情况,
      你的SPEEDBUTTON,是显示注册窗口,
      你在什么情况下你点击Speedbutton的? 
      

  6.   

     补充:并且你注册窗口在显示的情况下你才能点击SPEEDBUTTON ,那你点击SPEEDBUTTON再显示本窗口干嘛?
      

  7.   

    什麼時候執行的Speedbutton事件/.