创建了一个主窗口form1,其中它的 formstyle 为 fsmidform,我要创建一个登陆窗口form2,我将其formstyle设置为fsmidchild,然后我在project栏的options中将auto-create forms下面的登陆窗口form2移动到右边的available forms下面.
在系统登陆按纽下,我用了语句
application.application.CreateForm(Tform2,form2);
form2.show;
在运行测试的时候为什么报错:[Error] main.pas(41): Undeclared identifier: 'Tform2'?
这个错误应该不是语句写错了吧?是否在上面的设置中出现了什么问题?
敬请高手们指点一二,学生感激不尽.

解决方案 »

  1.   

    form2:=tform2.create(self);
    form2.show;
      

  2.   

    在工程的选项中,去掉FORM2的自动建立,改用上面代码
      

  3.   

    给你一段代码,在工程文件里照这样就可以了
      Application.Initialize;
      Flogin:=TFlogin.Create(application);
      flogin.ShowModal;
      flogin.Update;
      if not flogin.ok then
      application.Terminate
      else begin
      Application.CreateForm(TFmain, Fmain);
      Application.CreateForm(TFdm, Fdm);
      Application.CreateForm(TFlogin, Flogin);
      Application.Run;
      end;
    登陆窗口代码是这样的,也同样给你,不过注意给分呀
    unit login;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, bsSkinBoxCtrls, bsSkinCtrls, bsSkinData,
      BusinessSkinForm, DB, DBTables;type
      TFlogin = class(TForm)
        bsSkinButton1: TbsSkinButton;
        bsSkinButton2: TbsSkinButton;
        bsSkinLabel1: TbsSkinLabel;
        bsSkinLabel2: TbsSkinLabel;
        bsSkinPasswordEdit1: TbsSkinPasswordEdit;
        bsSkinComboBox1: TbsSkinComboBox;
        bsSkinData1: TbsSkinData;
        bsCompressedStoredSkin1: TbsCompressedStoredSkin;
        bsBusinessSkinForm1: TbsBusinessSkinForm;
        Table1: TTable;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure bsSkinButton1Click(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure bsSkinButton2Click(Sender: TObject);
        procedure bsSkinPasswordEdit1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
      private
        { Private declarations }
      public
        { Public declarations }
        ok:boolean;
      end;var
      Flogin: TFlogin;implementation{$R *.dfm}
    uses
    dm;
    procedure TFlogin.FormCreate(Sender: TObject);
    begin
    ok:=false;
    end;procedure TFlogin.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    if not ok then
    application.Terminate;
    end;procedure TFlogin.bsSkinButton1Click(Sender: TObject);
    begin
    table1.Open;
    if table1.Locate('user',self.bsSkinComboBox1.Text,[]) then
    begin
    if self.Table1.FieldValues['Pasword']=self.bsSkinPasswordEdit1.Text then
    begin
    ok:=true;
    self.Close;
    end else
    showmessage('密码错误!');
    end else
    begin
    showmessage('非法用户!');
    end;
    end;procedure TFlogin.FormShow(Sender: TObject);
    var
    i:integer;
    begin
    self.Table1.Open;
    self.Table1.First;
    self.bsSkinComboBox1.Items.Clear;
    for i:=0 to table1.RecordCount-1 do
    begin
    self.bsSkinComboBox1.Items.Add(self.Table1.FieldValues['User']);
    self.Table1.Next;
    end;
    self.bsSkinComboBox1.ItemIndex:=0;
    self.Table1.Close;
    self.bsskinpasswordedit1.SetFocus;
    end;procedure TFlogin.bsSkinButton2Click(Sender: TObject);
    begin
    self.close;
    end;procedure TFlogin.bsSkinPasswordEdit1KeyDown(Sender: TObject;
      var Key: Word; Shift: TShiftState);
    begin
    if key=13 then
    self.bsSkinButton1Click(self);
    end;end.
      

  4.   

    在程序中如果有MDI的话,MDI只能是主窗口,不能作子窗口,不过我变通了一下,可以的,给你了,注意给分呀
      

  5.   

    uses 一下就可以了你的例子因该是 uses unit2