Страница 1 из 1

В чём ошибка?

Добавлено: 06 июн 2005, 10:54
scorpi.on
Подскажите В чём ОШИБКА?

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Label1: TLabel;
Image1: TImage;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Hide;
Form2.Show;
end;

end.
:(

Добавлено: 06 июн 2005, 10:57
scorpi.on
Совсем забыл сказать, что компилятор пишет: Undeclared identifier: 'Form2'

Добавлено: 06 июн 2005, 11:39
AndreykA
Необходимо прописать Form2 в uses. Иначе Делфя просто не видит кто такой Form2.
То есть в Uses пишешь физиеское имя файла где храниться юнит (ессестно без расширения - просто имя). А в процедуре procedure TForm1.Button1Click(Sender: TObject); в переменных надо написать var Form2 : TForm2 (то есть класс второй формы). В дальнейшем можно использовать переменную Form2.

Должно выглядеть примерно так:

Код: Выделить всё

unit Unit1; 

interface 

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

type 
TForm1 = class(TForm) 
Label1: TLabel; 
Image1: TImage; 
Label2: TLabel; 
Button1: TButton; 
procedure Button1Click(Sender: TObject); 
private 
{ Private declarations } 
public 
{ Public declarations } 
end; 

var 
Form1: TForm1; 
implementation 

{$R *.dfm} 

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject); 
var Form2 : TForm2;
begin 
Form1.Hide; 
Form2.Show; 
end; 

end. 

Добавлено: 06 июн 2005, 11:56
LAngel
А в процедуре procedure TForm1.Button1Click(Sender: TObject); в переменных надо написать var Form2 : TForm2 (то есть класс второй формы)
Не стоит. ошибка будет, однако...
экземпляр класса TForm2 обычно объявляется в Unit2. Если, конечно ты сам не хочешь динамечески создавать ещё один экземпляр этой формы. (да и тогда нужен дополнительный код:

Код: Выделить всё

Form2 := TForm2.Create(application)
А так - вполне достаточно

Код: Выделить всё

uses unit2
:)

Добавлено: 06 июн 2005, 12:12
AndreykA
Если вторая форма автокриейтиться при запуске приложения то конечно ее достаточно прописать в uses, а вообще (по крайней мере я сам всегда так делаю) в автокриейте у меня только главная форма, а остальные создаются по мере необходимости (а после использования грохаются).
Так вот при втором варианте ее естественно перед использованием необходимо создать:

Код: Выделить всё

 Form2 := TForm2.Create(self); 

Добавлено: 07 июн 2005, 20:10
VirusXP
чтобы функцию увидели другие модули её нужно объявлять в разделе interface и соответственно включать этот модуль в uses других модулей.

unit Unit1;

interface
----
procedure WriteIni;
----
implementation

{$R *.dfm}

procedure WriteIni;
var MyIni:TIniFile;
begin
MyIni:=TIniFile.Create(IniPath);
MyIni.WriteBool('sound','cbSound',Form1.cbSound.Checked);
MyIni.WriteBool('Title','timer', Form1.cbTimer.Checked);
MyIni.Free;
Form1.Close
end;

end.