Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.051 c
2-1192884365
user1024
2007-10-20 16:46
2007.11.11
Как записать значение типа Memo в таблицу БД?


4-1177781077
delete_file
2007-04-28 21:24
2007.11.11
Удаление файла занятого другим процессом


11-1177066445
restar82
2007-04-20 14:54
2007.11.11
управление одной кнопкой


4-1177134586
Admiral
2007-04-21 09:49
2007.11.11
снимки системного реестра


15-1192019663
ANTPro
2007-10-10 16:34
2007.11.11
У кого есть книга Ф. Юань — Программирование графики для Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский