Страница 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. Если, конечно ты сам не хочешь динамечески создавать ещё один экземпляр этой формы. (да и тогда нужен дополнительный код:
А так - вполне достаточно

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