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

Вниз

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

 
x.pro   (2007-09-29 11:25) [0]

Здравствуйте, мастера!

У меня возникла проблема такого сорта: есть 3 формы (f1(unit1), f2(unit2), f3(unit3)). f1 создается при запуске проги. Жму на кнопку на f1 - создается f2, жму на кнопку на f2 - создается f3. Все три формы в настройках проекта - Auto-Create. Код создания форм:

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

Цель. Из главного окна проги создать f2. из нее запустить f3, и передать компонентам на ней информацию из f2. f3 отрабатывает и передает данные в f2.
Понять не могу почему данные f3 -> f2 не передаются. хотя f3 -> f1 передаются.

Заранее, спасибо!


 
boa_kaa ©   (2007-09-29 11:29) [1]

ошибка в 17ой строке


 
Washington ©   (2007-09-29 11:31) [2]

В uses поройся.


 
x.pro   (2007-09-29 11:31) [3]

17ой или 7й?


 
x.pro   (2007-09-29 11:33) [4]

да, Delphi генерирует 2 uses: до и после описания формы. так что куда нужно дописать?


 
Washington ©   (2007-09-29 11:36) [5]

После


 
Washington ©   (2007-09-29 11:36) [6]

В uses формы 3 нужно вписать f2


 
x.pro   (2007-09-29 11:37) [7]

в uses у меня все описано. а обращение к f2 из f3 такое:

...
f2.Edit1.Text := f3.label1.capton;
...


 
x.pro   (2007-09-29 11:45) [8]

все равно не работает... блин.

а какой uses за что отвечает?


 
engine ©   (2007-09-29 11:54) [9]

uses отвечает за объявление unit"ов.
А уж за что отвечают твои unit"ы — это у тебя надо спросить.


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

отвечу. разные формы сделаны для более наглядного обращения к БД. f3 - берет данные из f2 (таблица, представляющая таблицу БД), после использует эти данные и возвращяет результат в f2 ужt в ListView. а F1 создана просто типа заставки...


 
x.pro   (2007-09-29 12:09) [11]

в общем. как все решилось. в F3 по нажатии на кнопке кроме

...
f2.edit1.text := "...";
...

дописал:

...
f2.Show;
f2.edit1.text := "...";
...

и все заработало! Ну елы-палы! как это объяснить!


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

> x.pro  (29.09.2007 11:33:04)  [4]

До использования, но как можно дальше.


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

Что ж все спасибо за участие!

Ув. админы, закрывайте ветку!


 
x.pro   (2007-09-29 12:16) [14]


> Anatoly Podgoretsky ©   (29.09.07 12:13) [12]


Минутку!!!!!!! что значит

> До использования,

и

> как можно дальше.

?


 
Anatoly Podgoretsky ©   (2007-09-29 12:22) [15]


> Все три формы в настройках проекта - Auto-Create. Код создания
> форм:
>
> procedure BtnClick...
> var
> f: Tf2;
> begin
> f := Tf2.Create(self);

Из Auto-Create надо убрать, а из модуля убрать переменную типа Tf2 и сделать это немедленно, пока не много дел натворил.


 
Anatoly Podgoretsky ©   (2007-09-29 12:25) [16]


> x.pro   (29.09.07 12:16) [14]

Это значит, что если можно поместить в implementation, то туда в остальных случаях в interface/

implementation как раз дальше находится.

ЗЫ: а почему тему здесь разместил, а не в Начинающих, как наиболее подходящее место?


 
x.pro   (2007-09-29 12:30) [17]

спасибо, сейчас попробую...

> ЗЫ: а почему тему здесь разместил, а не в Начинающих, как
> наиболее подходящее место?


мне показалось что в выходной день здесь быстрее заметят.


 
x.pro   (2007-09-29 12:34) [18]

Такс. Значит, из auto-create убрал, теперь когдана 3й форме нажимаю на кнопку (данные должны передаться в form2.edit1) возникает av.


 
Anatoly Podgoretsky ©   (2007-09-29 12:36) [19]

> x.pro  (29.09.2007 12:30:17)  [17]

Заметят быстрее, но и пошутят злее.


 
Anatoly Podgoretsky ©   (2007-09-29 12:37) [20]

> x.pro  (29.09.2007 12:34:18)  [18]

Ошибка в 17 строке.
и наверно не прислушал к совету насчет убрать переменную формы из var в модуле формы.


 
x.pro   (2007-09-29 12:40) [21]


> Anatoly Podgoretsky ©   (29.09.07 12:36) [19]

Ну, на каждую шутку есть своя прибаутка. ;)


> Ошибка в 17 строке.

:)) погодите. какая 17 строка? откуда 17 строка? в том листинге что я привел всего 9.


 
Anatoly Podgoretsky ©   (2007-09-29 12:42) [22]

> x.pro  (29.09.2007 12:40:21)  [21]

А ты поищи, может найдешь.


 
x.pro   (2007-09-29 12:44) [23]

но если убрать из auto-create и переписать код как:

procedure TForm1.Button1Click(Sender: TObject);
begin
   Form2.Create(Application);
   Form2.Show;
   Form2.label1.caption := "From form1: hello";
end;

то как же так получится?

вот весь код:

interface

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

procedure TForm1.Button1Click(Sender: TObject);
begin
   Form2.Create(Application);
   Form2.Show;
   Form2.label1.caption := "From form1: hello";
end;
----------------------------------------------------------------
interface

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

uses Unit1;
....
procedure TForm2.Button1Click(Sender: TObject);
begin
   Form3.Create(Application);
   Form3.Show;
   Form3.Label1.Caption := "From form2: Hello, World!";
end;
----------------------------------------------------------------
implementation

uses Unit2;

procedure TForm3.Button1Click(Sender: TObject);
begin
Form2.Edit1.Text := "From form3"+Edit1.Text;
close;
end;


 
x.pro   (2007-09-29 12:46) [24]

но этот код заведомо не верен за счет строк типа

Form3.Create(Application);


 
Anatoly Podgoretsky ©   (2007-09-29 12:47) [25]

Переменные Form2/3 не описаны локально.
У классов отсутствую поля или свойства для передачи значений.
А все потому, что ты изначально стал работать с AutoCreate и глобальными переменными форм.
Сейчас надо менять подход.
Да и такая сильная завязка между формами еще много где проявится в виде ошибок.


 
Anatoly Podgoretsky ©   (2007-09-29 12:48) [26]


> но этот код заведомо не верен за счет строк типа

Именно. Не должно быть ссылок на другие формы. Это путь в никуда.


 
Anatoly Podgoretsky ©   (2007-09-29 12:53) [27]

Там у тебя еще много ошибок в процедурах
Должно быть примерно так.

procedure TForm2.Button1Click(Sender: TObject);
begin
   with TForm3.Create(Self);
     Label1.Caption := "From form2: Hello, World!";
     Show;
 end;
end;


или с ненужной локальной переменно

procedure TForm2.Button1Click(Sender: TObject);
var
 Form3: TForm3;
begin
  Form3.Create(Application);
  Form3.Show;
  Form3.Label1.Caption := "From form2: Hello, World!";
end;


 
x.pro   (2007-09-29 12:53) [28]


> Не должно быть ссылок на другие формы. Это путь в никуда.


подскажите, пожалуйста, в какую сторону нужно поменять подход? как обращаться к объектам на форамах? нужно что бы формы 2 и 3 создавались вместе с 1? но это и есть auto-create...


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

апрвильно. у меня все так изначально и было написано. а теперь попробуйте по нажатию на кнопке на форме 3 передать данные, ну хотя бы в Edit., на форме 2.


 
Anatoly Podgoretsky ©   (2007-09-29 12:55) [30]

Ошибся при копировании

begin
  Form3.Create(Application);
  Form3.Label1.Caption := "From form2: Hello, World!";
  Form3.Show;
end;


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


begin
Form3.Create(Application);
Form3.Label1.Caption:= "From form2: Hello, World!";
Form3.Show;
end;


а вот тут и ошибка!


 
Anatoly Podgoretsky ©   (2007-09-29 12:59) [32]

> x.pro  (29.09.2007 12:55:29)  [29]

У тебя написано не так и читай, что я написал про завязку на формы и про свойства.
В любом случае такая программа не сможет жить, это только для избавиться от надоедливой лабораторной работы. Это не для программирования, там так не пишут.


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


> Anatoly Podgoretsky ©   (29.09.07 12:55) [30]
> Form3.Create(Application);

Анатолий, а Вы намеренно или специально вводите человека в заблуждение? :)


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

нет, нет, я имею ввиду состояние кода, до того, как полез на форум.

> Anatoly Podgoretsky ©   (29.09.07 12:59) [32]

Хорошо, согласен. Что так не пишут. Но я хочу научиться писать "так". есть вполне конретная задача, которую я пытаюсь решить уже и с вашими усилиями. за что я вам очень благодарен. Но прошу вас, вот как для тупых, поясните, что за свойства, что за заявки на формы.


 
Anatoly Podgoretsky ©   (2007-09-29 13:07) [35]

> boa_kaa  (29.09.2007 13:02:33)  [33]

Случайно, скопировал его код, а мой без переменной чуть выше, там все правильно.
Ладно еще раз исправлю, набив с руки, а не копируя, я его привел как не нужную альтернативу и отнесся безответсвенно :-(
Это правильный вариант с ненужной переменной.


begin
 Form3 := TForm3.Create(Application);
 Form3.Label1.Caption := "From form2: Hello, World!";
 Form3.Show;
end;


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


> что за заявки на формы

не заявки, а завязки

procedure TForm2.Button1Click(Sender: TObject);
var
Form3: TForm3;
begin
 Form3 := TForm3.Create(Application);
 Form3.Label1.Caption := "From form2: Hello, World!";
 Form3.Show;
end;


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

> x.pro  (29.09.2007 13:05:34)  [34]

Завязка появится, когда вздумаешь из Form3 обратиться к Form2


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

Правильно. Все формы созданы. теперь мне нужно перенести данные из edit на форме 3 в edit на форме 2. и все. но не переносит. но почему?! ведь все создано!


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

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

type
 TForm3 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   Label1: TLabel;
   procedure Button1Click(Sender: TObject);
 private
 public
 end;
var
 Form3: TForm3;
implementation
uses Unit2;

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
With form2.Edit1 do
   text := Edit1.Text;
close;
end;
end.

и ничего не фурычит! заявка была


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


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

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



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

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

Наверх




Память: 0.56 MB
Время: 0.015 c
2-1192969619
Lebedev
2007-10-21 16:26
2007.11.11
Caption RadioGroup должен переходить на новую строку.


2-1192796073
andreil
2007-10-19 16:14
2007.11.11
Как сделать дерево CheckBox ов?


15-1191959183
Bogdan1024
2007-10-09 23:46
2007.11.11
суперсистема синхронизации паролей


15-1191043444
Washington
2007-09-29 09:24
2007.11.11
Delphi vs. VB


11-1176476126
D[u]fa
2007-04-13 18:55
2007.11.11
Str2Extended