PDA

Просмотр полной версии : Delphi 7. Не могу открыть Форму2 из Формы 1



Twins
27.11.2004, 15:11
Help me.
Глупость но факт.
В Delphi 7 не могу открыть форму2 из формы1

Создаю Form1
Создаю Button1 в Form1
Компилирую
Создаю Form2

Вешаю на Button1 в Form1
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.ShowModal;
end;

Компилирую
Пишет
(Ошибка) Unit.pas(35): Undeclared identifier: "form2"
(Фатальная ошибка) Proect1.dpr6: Cold not compile used unit 'Unit1.pas'

Дальше - мрак. Тишина

Заранее спасибо за помощь.
Чайник (надеюсь не на долго)

AiK
27.11.2004, 17:22
Twins, во-первых, ошибка из-за того, что в первом модуле переменная form2 не объявлена.
Во-вторых, прежде чем показывать форму, её создать нужно.

Т.е. тебе нужно что-то вроде этого:
В первом модуле:
Uses Unit2.pas;

procedure TForm1.Button1Click(Sender: TObject);
var form2: TForm2;
begin
form2:=TForm2.Create(Form1);
form2.ShowModal;
end;

Twins
27.11.2004, 22:22
AiK

Большое человеческое спасибо.
Хватило
В первом модуле:
Uses Unit2;

Еще Чайник, но уже меньше.
Twins

Лопата:)
17.12.2013, 09:36
Twins,
procedure TForm1.Button1Click(Sender: TObject);

вот на этой строчке он меня и мучает:
[Error] Unit1.pas(36): Statement expected but 'PROCEDURE' found
что делать??

somewhere
17.12.2013, 10:56
что делать??
Скорее всего процедура не описана в классе TForm1

Лопата:)
17.12.2013, 11:05
А можно подробнее написать, как это сделать, а то я совсем не понимаю:)

somewhere
17.12.2013, 11:08
В описателе класса добавить
procedure Button1Click(Sender: TObject);

кнопке Button1 событию OnClick присвоить обработчик Button1Click

Лопата:)
17.12.2013, 11:25
type
TForm1 = class(TForm)
Button1Click(Sender: TObject);
теперь он просит заменить ( на :

заменила
теперь опять докопался до процедуры
[Error] Unit1.pas(50): Statement expected but 'PROCEDURE' found

somewhere
17.12.2013, 11:40
Дальше ничего не могу сказать - нет полного кода

Лопата:)
17.12.2013, 14:45
unit Unit1;

interface

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

type
TForm1 = class(TForm)
lbl1: TLabel;
edt1: TEdit;
procedure button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm;
Form2: TForm;
Edit1: TEdit;
implementation
{$R *.dfm}
begin
procedure button1Click(Sender: TObject);
begin
form2.Show;
end;

end.

somewhere
17.12.2013, 15:00
1) Процедуры и функции должны располагаться вне основного исполняемого блока (begin..end.)
2) Переменная Form1 скорее всего типа TForm1
3) button1Click указана как принадлежащая к классу TForm1, но описана потом без классового префикса

Oleg_Rus
13.03.2014, 13:21
т.е. если мне не изменяет мой маразъм (что вполне может быть), ваш модуль должен иметь вид:


unit Unit1;

interface

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

type
TForm1 = class(TForm)
lbl1: TLabel;
edt1: TEdit;
procedure button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Form2: TForm1;
Edit1: TEdit;
implementation
{$R *.dfm}
procedure TForm1.button1Click(Sender: TObject);
begin
form2.Show;
end;

begin
end.

PS: Код правил навскидку, возможны ошибки