Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Доступ к форме [D7]


Страницы:   1 2

zokzok ©   (2004-12-29 15:09:00) 

есть три формы: из 1й открывается (ShowModal) 2я, из 2й - 3я (ShowModal). При этом  необходимо иметь доступ из 3й формы во 2ю, но получается, что 2я форма (при обращении к ней из Form3) равна NIL!!! Но аналогичным способом Form1 совершенно свободно доступна из Form2. Как при такой ситуации получить доступ к Form2 из Form3?


Fay   (2004-12-29 20:14:00) [1]

2 maxz ©   (29.12.04 19:59) [26]
А что, бывают run-time ошибки такого рода?


maxz   (2004-12-29 19:59:00) [2]

возможно ошибка в том, что у вас два юнита ссылаются друг на друга из implementation


HSolo   (2004-12-29 18:32:00) [3]

>Fay ©   (29.12.04 18:24) [24]
Ну мало ли :) чем черт не шутит, когда бог спит :)


Fay   (2004-12-29 18:24:00) [4]

2 HSolo ©   (29.12.04 18:22) [23]
Да не боись! Мы, типа, догадались, что Unit2 юзается в interface 8)


HSolo   (2004-12-29 18:22:00) [5]

sorry, конечно же

unit3.pas
...
implementation
uses unit2;


HSolo   (2004-12-29 18:20:00) [6]

Глобальные переменные противоречат моему эстетическому чуйству :)
Лучше попробуйте так:

unit2.pas
...
implementation
uses unit3;
...
procedure TForm2.Button1Click(Sender: TObject);
begin
with TForm3.Create(Self) do
 try
   ShowModal
 finally
   Free
 end;
end;

{----------------------------------------------}

unit3.pas
...
implementation
uses unit1;
...
procedure TForm3.Button1Click(Sender: TObject);
begin
(owner as TForm2).Caption := 'string';
end;


Fay   (2004-12-29 17:52:00) [7]

При
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);

замени все
procedure TFormX.Button1Click(Sender: TObject);
var
 Jopa : TFormY;
begin
Jopa := TFormY.Create(Application);
try
  Jopa.ShowModal;
finally
  Jopa.Free;
end;
end;

на
FormY.ShowModal;

и проверь


GuAV   (2004-12-29 17:50:00) [8]

Form2 не тем инициализируется.


>   Modal:=TForm2.Create(Application);

здесь в Modal одна TForm2

>  Application.CreateForm(TForm2, Form2);

а здесь в Form2 другая.

а чтоб там nil - эт' врядли ...


Symb   (2004-12-29 17:41:00) [9]

2 Fay ©   (29.12.04 17:37) [16]
Наверное, мы слишком много информации для переваривания сразу насыпали :)


begin...end   (2004-12-29 17:40:00) [10]

> [16] Fay ©   (29.12.04 17:37)

Какой ёжик?


Плохиш   (2004-12-29 17:38:00) [11]

2zokzok

Я так понимаю, читать книжки это не для реальных пацанов, а для последних лохов.


Fay   (2004-12-29 17:37:00) [12]

Ёжик задумался...


Fay   (2004-12-29 17:22:00) [13]

А так?
procedure TForm2.Button1Click(Sender: TObject);
begin
 Form3 :=TForm3.Create(Application);
 try
   Form3.ShowModal
 finally
   Form3.Free;
 end;
end;


Symb   (2004-12-29 17:19:00) [14]

А вторая форма точно равна nil? Т. е. Delphi выдает соответствующую runtime-ошибку?
Или просто caption не изменяется?


Fay   (2004-12-29 17:18:00) [15]

2 Symb   (29.12.04 17:06) [11]
Sorry. Меня просто замкнуло малость - dpr c dfm перепутал 8)


zokzok   (2004-12-29 17:08:00) [16]


program Project1;

uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1},
 Unit2 in 'Unit2.pas' {Form2},
 Unit3 in 'Unit3.pas' {Form3};

{$R *.RES}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.CreateForm(TForm2, Form2);
 Application.CreateForm(TForm3, Form3);
 Application.Run;
end.


всё равно не работает


Symb   (2004-12-29 17:06:00) [17]

Ну, у тебя три модуля: unit1.pas, unit2.pas и unit3.pas. И еще есть один файл проекта: Project1.DPR или что-то типа того. Там тоже дельфевый код, который может что-то делать (например, создавать формы).
А в Unit1 ты создаешь экземпляр класса TForm2 под названием Modal, а не Form2.


Fay   (2004-12-29 16:56:00) [18]

>> не создавалась и в DPR
?!


Symb   (2004-12-29 16:55:00) [19]

В Unit2 есть переменная Form2, но в приведенном куске кода ее конструктор нигде не вызывался. Если она не создавалась и в DPR, то она будет равна nil.


Fay   (2004-12-29 16:55:00) [20]

Form2 нигде не инициализируется.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо