Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.11;
Скачать: CL | DM;

Вниз

Проблема с формами... или руками моими...   Найти похожие ветки 

 
boa_kaa ©   (2007-09-29 13:13) [40]


> x.pro   (29.09.07 13:09) [38]

если не добавлять перекрестные ссылки на юниты, то нужно делать это через какое-нибудь событие, например, при нажатии на кнопку или ловить закрытие (или изменение) на form3


 
Anatoly Podgoretsky ©   (2007-09-29 13:16) [41]

> x.pro  (29.09.2007 13:09:38)  [38]

Я так и не понял, насчет глобальных переменных формы и что куда переносится.
Говорю же могила.


 
x.pro   (2007-09-29 13:20) [42]

нет никаких глобальных переменных.

нужно просто перенести текст из edit на форме3 в edit на форме 2. а форма 3 содается когда нажимается кнопка на форме 2. и все.


 
boa_kaa ©   (2007-09-29 13:29) [43]

Специально сотворил то, о чем речь. Переносится, однако. Правда у меня только Form1 и Form2.

Unit1:

var
 Form1: TForm1;

implementation

{$R *.dfm}

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
var
 Form2: TForm2;
begin
 Form2 := TForm2.Create(Application);
 Form2.Edit1.Text := Edit1.Text;
 Form2.Show;
end;


Unit2:

var
 Form2: TForm2;

implementation

{$R *.dfm}

uses Unit1;

procedure TForm2.Button1Click(Sender: TObject);
begin
 Form1.Edit1.Text := Edit1.Text;
 Close;
end;


 
boa_kaa ©   (2007-09-29 13:30) [44]

Да! из Unit2 можно убрать
var
Form2: TForm2;
они там случайно завалялись


 
Anatoly Podgoretsky ©   (2007-09-29 13:32) [45]

> boa_kaa  (29.09.2007 13:29:43)  [43]

А вот и завязка

Form1.Edit1.Text := Edit1.Text;


 
boa_kaa ©   (2007-09-29 13:34) [46]


> Anatoly Podgoretsky ©   (29.09.07 13:32) [45]

угу. Потому я и говорю:
> boa_kaa ©   (29.09.07 13:13) [40]


 
x.pro   (2007-09-29 13:37) [47]


> boa_kaa ©   (29.09.07 13:29) [43]

и у меня это работает! отлично работает. но вот если еще одну форму сделать, то ничего не получится! добавить еще одну форму и вызывайте ее при созданой 2й


 
x.pro   (2007-09-29 13:38) [48]

перекрестная ссылка это указатель что ли?


 
x.pro   (2007-09-29 13:42) [49]

все верное, уважаемые! но если создать еще одну форму и создавать ее только таким де путем но из формы 2, то из 3 в 2 ничего не передается!


 
x.pro   (2007-09-29 13:45) [50]

но что самое поразительное из 3 в 1 передает!!!!!!!!!!! а из 3 в 2 - нет!


 
engine ©   (2007-09-29 13:47) [51]

Ты в 17-й строке ошибку исправил?


 
boa_kaa ©   (2007-09-29 13:50) [52]

Естественно! Потому я и говорю:
> boa_kaa ©   (29.09.07 13:30) [44]

Та форма, которую ты создаешь из Form1 - это не та, которую ты используешь из Form3. Из Form3 ты используешь именно глобально описанную в Unit2 Form2. Если ты уберешь глобально описание и приведешь код в токое согласие

type
 TForm2 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

//здесь был Form2

implementation


то ты получишь именно то, о чем говорил Анатолий, т.е. ж...


 
x.pro   (2007-09-29 13:51) [53]


> engine ©   (29.09.07 13:47) [51]

что это за строка 17?! где она?!

здесь:

procedure BtnClick...
var
f: Tf2;
begin
f := Tf2.Create(self);
f.Show;
f.Label1.Caption := "...";
...
end;

их всего 9!


 
boa_kaa ©   (2007-09-29 13:51) [54]


> x.pro   (29.09.07 13:45) [50]
> но что самое поразительное из 3 в 1 передает!!!!!!!!!!!
> а из 3 в 2 - нет!

Это не поразительно, а вполне объяснимо, т.к. Form1 объявлен глобально!


 
x.pro   (2007-09-29 13:51) [55]


> engine ©   (29.09.07 13:47) [51]

что это за строка 17?! где она?!

здесь:

procedure BtnClick...
var
f: Tf2;
begin
f := Tf2.Create(self);
f.Show;
f.Label1.Caption := "...";
...
end;

их всего 9!


 
boa_kaa ©   (2007-09-29 13:52) [56]


> x.pro   (29.09.07 13:51) [55]

Отстань ты с 17 строкой. Это обычный подкол, когда не приводят код и говорят, что он не работает


 
boa_kaa ©   (2007-09-29 13:55) [57]

Короче! Если в 2х словах, то ты путаешь КЛАССЫ с ОБЪЕКТАМИ


 
x.pro   (2007-09-29 13:58) [58]


> boa_kaa ©   (29.09.07 13:50) [52]

Хорошо, если я напишу так как вы говорите, то как обратиться к form2 из form3?

ее нужно локально объявить? тогда - Av


 
x.pro   (2007-09-29 14:06) [59]

все проблему решил так. в Private формы 1 написал переменную типа Tform2, когда создавай 2ю форму писла такой код:

frm2 := tForm2.Create(Application);
frm2.label1.caption := "From form1: hello";
frm2.Show;
-------------------------------------------
а из 3й формы обращался так:
Form1.Frm2.Edit1.text := "Form form 3";
-------------------------------------------

в Одессу через китай... но может так и надо было?


 
Anatoly Podgoretsky ©   (2007-09-29 14:09) [60]

> x.pro  (29.09.2007 14:06:59)  [59]

Ни одна вызымаемая форма не должна ничего знать про вызывающею.


 
boa_kaa ©   (2007-09-29 14:09) [61]

сейчас самым простым для тебя будет:
1) Перенести все 3 формы в автокриэйт
2) Привести код в состояние, приведенное ниже
3) Разобраться с тем, что такое класс, а что такое его экземпляр.
4) Научиться использовать объекты там, где их создаешь.

Состояние кода.

Unit1
var
 Form1: TForm1;

implementation

{$R *.dfm}

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Form2.Edit1.Text := Edit1.Text;
 Form2.Show;
end;


Unit2:
var
 Form2: TForm2;

implementation

{$R *.dfm}

uses Unit1, Unit3;

procedure TForm2.Button1Click(Sender: TObject);
begin
 Form1.Edit1.Text := Edit1.Text;
 Form3.Edit1.Text := Edit1.Text;
 Form3.Show;
end;


Unit3:
var
 Form3: TForm3;

implementation

{$R *.dfm}
uses Unit2, Unit1;

procedure TForm3.Button1Click(Sender: TObject);
begin
 Form1.Edit1.Text := Edit1.Text;
 Form2.Edit1.Text := Edit1.Text;
end;


 
{RASkov} ©   (2007-09-29 14:11) [62]

> [58] x.pro   (29.09.07 13:58)
> то как обратиться к form2 из form3?

Если у тебя показ форм идет как Show, то имхо, лучше вернуть все как было, т.е. переменные форм и в AutoCreate их тоже вернуть
Только не нужно по нажатию кнопок ничего заного создавать....
Или как вариант перед обращением к конкретной форме, проверить есть ли она - Assigned(), но и не забывать нилить ее после удаления...
С ShowModal такого не должно быть.....

ЗЫ: А вернуть все наместо нужно(желательно) и еще по одной причине См [57] Пока не научишься их отличать...


 
x.pro   (2007-09-29 15:43) [63]

Всем большое спасибо! Я для себя сделал урок. Спасибо!


 
имя   (2007-10-07 22:12) [64]

Удалено модератором


 
имя   (2007-10-07 22:26) [65]

Удалено модератором



Страницы: 1 2 вся ветка

Текущий архив: 2007.11.11;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.023 c
2-1192455837
фыва
2007-10-15 17:43
2007.11.11
Вставка в мемо


2-1192622267
foreverDelphi
2007-10-17 15:57
2007.11.11
f1:File;


15-1190555879
Nchik93
2007-09-23 17:57
2007.11.11
Срочно нужен работающий дистрибутив Delphi. Пожалуйста.


2-1193036940
_user_
2007-10-22 11:09
2007.11.11
Как учесть масштаб в свойствах экрана (96, 120... т/дюйм)?


2-1192561443
smartleds
2007-10-16 23:04
2007.11.11
Коллеги, подскажите как найти максимальный номер элемента