我的想法:
第一次运行程序时产生mainForm前产生一个Form用来配置数据库服务器链接,以后运行就不产生这个Form直接出现mainForm,而且程序的数据库链接到前面配置的数据库服务器.

解决方案 »

  1.   

    那你要用ini文件或其他方式来保存值了,判断是否已配置过数据库
      

  2.   

    在MainForm显示前显示一个手动创建的Form好象还有个技巧。
      

  3.   

    //判断是否注册软件,没有则继续弹出提示窗口
    function Wsz_IfFirst:Boolean;
    var
        sPass:string;
        RegF:TRegistry;
    begin
        result := false;
        RegF:=TRegistry.Create;
        RegF.RootKey :=HKEY_LOCAL_MACHINE;
        RegF.OpenKey('SOFTWARE\MicroSoft\systemho\tool',TRUE);
        sPass := RegF.ReadString('code');
        if (length(spass)>0) then
        result := true ;
        RegF.Free;
    end;
    登陆时验证
    if   not Wsz_IfFirst then
         begin
               bsSkinMessage1.MessageDlg('软件尚未注册,你有30次试用次数,请及时注册!',mtInformation,[mbOK],0);
         //注册表中存在该建,没有则添加
         if not RegF.keyexists('SOFTWARE\MicroSoft\systemshf\tool') then
               begin
                    RegF.OpenKey('SOFTWARE\MicroSoft\systemshf\tool',TRUE);
                    RegF.WriteString('code','30');
                    RegF.Free;
               end
               else
               //是否试用过期
               begin
                    RegF.OpenKey('SOFTWARE\MicroSoft\systemshf\tool',TRUE);
                    str :=RegF.ReadString('code');                RegF.WriteString('code',inttostr(strtoint(str)-1));                RegF.Free;
                    if (strtoint(str)<=0) then
                    begin
                       bsSkinMessage1.MessageDlg('您的使用期限已到,请与软件供应商联系!',mtInformation,[mbOK],0);
                       exit;
                    end;
                 
               end;
    else
              ..进入Mainform
      

  4.   

    可以通过注册表或者INI文件的读写来判断。非常简单。
    三楼 hellolongbin(一个人[.net学习中……]) 就说的比较明了。看看书,都可以解决问题。
      

  5.   

    我是楼主:
    还有一个小问题,就是在MainForm.Create事件里有
    Appplication.Create(Tform2,form2)
    form2.show
    怎么样通过form2的按钮退出form2,返回显示mainform
      

  6.   

    我是楼主:
    还有一个小问题,就是在MainForm.Create事件里有
    Appplication.Create(Tform2,form2)
    form2.show
    怎么样通过form2的按钮退出form2,返回显示mainform
      

  7.   

    登陆筐验证成功后返回
    procedure TLoginForm.BtnOKClick(Sender: TObject);begin
         ....
         ModalResult := mrok;;
    end;
    登陆筐显示改为available forms 
    (project->options) 
    procedure TMainForm.FormShow(Sender: TObject);
    begin
        Application.CreateForm(TLoginForm,LoginForm);
        if  LoginForm.ShowModal() = mrCancel then
        begin
            Application.Terminate;
            Abort;
        end;
        LoginForm.Free;
    ....
    end;
      

  8.   

    我是楼主:
    看不懂,我把我的代码发上,你们看下,要怎么改:
    主窗口
    procedure TForm1.FormCreate(Sender: TObject);
    var
    filename,sqlservername:string;
    ini: Boolean ;
    begin
      filename:=ExtractFilePath(paramstr(0))+'myini.ini';
      myinifile:=TInifile.Create(filename);
      ini := myinifile.readbool('程序参数','是否配置过',False);
      sqlservername := myinifile.readstring('程序参数','数据库服务器名称','');
      if not ini then
      begin
         Application.CreateForm(TConfigForm,ConfigForm);
         ConfigForm.ShowModal ;
      end
      else
      begin
         ADOConnection1.Connected := False ;
         ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=' + '' + sqlservername + '';
         ADOConnection1.Connected := True ;
      end;
    end;
    从窗口
    procedure TConfigForm.Button1Click(Sender: TObject);
    var
    filename:string;
    begin
      filename:=ExtractFilePath(paramstr(0))+'myini.ini';
      myinifile:=TInifile.Create(filename);
      myinifile.writestring('程序参数','数据库服务器名称',edit1.Text);
      myinifile.writebool('程序参数','是否配置过',True);
      myinifile.Destroy;
      Close ;  //?????就是这地方怎么关了当前窗口后没有继续执行下去显示主窗口.
    end;
      

  9.   

    把主窗口中显示从窗口的代码入到 OnFormShow 事件处理函数中
      

  10.   

    Close ;  //?????就是这地方怎么关了当前窗口后没有继续执行下去显示主窗口.
    self.close;
    application.showmainform:=true;
      

  11.   

    楼上的做法行不通呀.我的主窗口不叫mainform,其它名字好像不行.
      

  12.   

    放在Onshow事件里也不行呀,大家在想想,谢谢.
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FormShow(sender);
      Label1.Caption := 'Adsfadsfasdfsadfadsfsadf';
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      Application.CreateForm(TForm2,Form2);
      Form2.Show;
    end;
    ..............................................
    procedure TForm2.Button1Click(Sender: TObject);
    begin
      self.Close;
    end;
    还是一样,关了FORM2但是没显示FORM1呀.
      

  13.   

    还不行?
    OnCreate里不要写了,直接在OnShow里//项目文件 Project1.dpr :
    program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.//主窗体 Unit1.pas :
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}uses
      Unit2;procedure TForm1.FormShow(Sender: TObject);
    begin
      Form2 := TForm2.Create(Application);
      Form2.ShowModal;
    end;end.//Unit2.pas :
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm2 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
    begin
      Close;
    end;end.
    还不行留下 E_Mail