有一个Form14窗口,这个Form14窗口是要根据注册表的中值来决定先显示这个Form14窗口,还是先运行frmMain程序,为什么像下面这样写不行了,请指教,谢谢!
program demo;
uses
  Forms,Registry,
  MainForm in 'MainForm.pas' {frmMain},
  AppUnit in 'AppUnit.pas',
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit4 in 'Unit4.pas' {Form4},
  Unit3 in 'Unit3.pas' {Form3},
  Unit5 in 'Unit5.pas' {Form5},
  Unit6 in 'Unit6.pas' {Form6},
  Unit7 in 'Unit7.pas' {Form7},
  Unit8 in 'Unit8.pas' {Form8},
  Unit9 in 'Unit9.pas' {Form9},
  Unit10 in 'Unit10.pas' {Form10},
  Unit11 in 'Unit11.pas' {Form11},
  Unit12 in 'Unit12.pas' {Form12},
  Unit13 in 'Unit13.pas' {Form13},
  Unit14 in 'Unit14.pas' {Form14};
{$R *.res}
{$R myres.res}
var
Reg:Registry;
RegeditID:string;
begin
  Application.Initialize;
  Application.Title := '测试';
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\Software\D\time',False) then
    begin
    RegeditID:=Reg.ReadString('bz');
    Reg.CloseKey;
    if  RegeditID=0 then
    begin
     Application.CreateForm(TfrmMain, frmMain);
     Application.CreateForm(TForm1, Form1);
     Application.CreateForm(TForm2, Form2);
     Application.CreateForm(TForm4, Form4);
     Application.CreateForm(TForm3, Form3);
     Application.CreateForm(TForm5, Form5);
     Application.CreateForm(TForm6, Form6);
     Application.CreateForm(TForm7, Form7);
     Application.CreateForm(TForm8, Form8);
     Application.CreateForm(TForm9, Form9);
     Application.CreateForm(TForm10, Form10);
     Application.CreateForm(TForm13, Form13);
     form10.Hide;
     form10.Enabled:=false;
     Application.CreateForm(TForm11, Form11);
     Application.CreateForm(TForm12, Form12);
    end;
    if  RegeditID=1 then
    begin
      Application.CreateForm(TForm14, Form14);
    end;
    end;
    Reg.Free;
   Application.Run;
end.

解决方案 »

  1.   

    程序运行前读注册表当然没问题。上面是你自己的程序写错了,如果读出来的不是0,你的主窗体frmMain就没被创建,而你的TForm14变成了主窗口。。还有,不要一开始就创建所有窗口,最好用到才创建,用完就释放,象你这样程序会占更多内存
      

  2.   

    程序运行前读注册表当然没问题,可是我在编译时,这一句报错,Reg.RootKey:=HKEY_LOCAL_MACHINE; 
    说没有定义,var 
    Reg:Registry; 
    RegeditID:string;

    已改成var 
    Reg:TRegistry; 
    RegeditID:string;  为什么在别的地方这样写可以的,在这里不行呢
      

  3.   

    1.点Project->Options的Forms页,把左边的列表除了主窗体外,都点>按扭移到右边,就不会自己动创建了。不过这样你要显示窗体就要手动创建,不用直接用Form.show这样显示了。
    2.不是不能声明变量,是因为你的HKEY_LOCAL_MACHINE这个要引用WIndows单元