![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Доступ к форме [D7]
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 нигде не инициализируется.