Форум: "Прочее";
Текущий архив: 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