Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.01.2010, 12:25
SlavikSG SlavikSG вне форума
Прохожий
 
Регистрация: 26.02.2009
Адрес: Новомосковск
Сообщения: 7
Репутация: 10
По умолчанию Передача параметра в динамически создаваемую форму

Если в опциях проекта поместить форму в Auto-create-Form, то она будет создаваться сразу после старта программы. Если в форме в свойствах Visible присвоить Hide, то форма видна не будет. По мере надобности, форму можно делать то видимой, то невидимой. И тут все просто. В такую форму параметры из другой формы передаются самым замечательным образом через точечную нотацию. Например: Form2.Edit1.Text := 'asfgafg';

И все тут же перестает работать, если у меня дочерняя форма создается динамически в пункте меню MDI-формы (главной формы) таким образом:

Код:
PROCEDURE TForm1.N2Click(Sender: TObject);
VAR Child: TForm2;
BEGIN
Child := TForm2.Create(Application);
Child.Top := 6;
Child.Left := 300;
END;

Начиная с этого момента команда Form2.Edit1.Text := 'asfgafg'; работать перестает. На стадии компиляции компилятор никакой ошибки не выдает, а при исполнении этой команды вживую, программа выдает ошибку:
"Acces violation at address 004B42CF in module 'Forma1.exe'. Read of address 00000380."

Никак не могу понять, как передать значение в форму, создаваемую таким образом. И мне нужно именно ТАК создавать форму, так-как значение Hide "дочерней форме" присвоить нельзя. Ну, или, быть может, еще каким-то другим способом делать видимой или невидимой дочернюю форму, про который я не знаю.

В разделе Uses все модули прописаны. Как я уже говорил, компилятор не ругается. Тут у меня все Ок.

Прошу прощения, если вопрос глупый. Я совсем еще новичок в Дельфи.
Ответить с цитированием
  #2  
Старый 19.01.2010, 13:00
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

я это дело обходил так:
для Form1
Код:
uses uForm2;
public
StartKey : integeer;
...

procedure TForm1.N2Click(Sender: TObject);
var 
chForm: TForm;
begin
StartKey :=1;
chForm := TForm.Create(Application);
end;
для Form2
Код:
uses uForm1
...
procedure TForm2.Create(Sender:TObject);
begin
case Form1.StartKey of
1 : begin Top := 6; Left := 300; end; 
2 : begin ... end;
end;
end;
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #3  
Старый 19.01.2010, 15:01
SlavikSG SlavikSG вне форума
Прохожий
 
Регистрация: 26.02.2009
Адрес: Новомосковск
Сообщения: 7
Репутация: 10
По умолчанию

Честно говоря не понял, причем тут переменная StartKey и последующая проверка её значения в другой форме.

Если коротко, то мне нужно передать значение в из одной дочерней формы, в другую дочернюю форму таким образом:
Form2.Edit1.Text := Form3.Edit1.Text;

Но если форма Form2 создавалась командой TForm2.Create(Application); то у меня ничего не работает. Программа в этом месте выдает ошибку.

И еще. Переменную StartKey я смог засунуть только в эту часть кода:
Код:
  PUBLIC
    { Public declarations }

  StartKey: integer;

  END;

VAR
  Form1: TForm1;

IMPLEMENTATION

USES Form2;

Ниже служебного слова USES я засунуть не смог. Компилятор ругается.

В общем, или я что-то не до понял, или не так вопрос задал.
Ответить с цитированием
  #4  
Старый 19.01.2010, 16:27
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

а ты и не сможешь ничего менять на Форме2, пока не создашь её
и только после того как она будет созданная, ты сможешь передавать ей то, что те нужно
ЗЫ: StartKey ты как раз туда и поставил, куда нужно было
ЗЫ2: это был пример, когда мне нужно было менять вид одной и той же формы в момент её создания, в зависимости от того, какая форма и кнопка её вызвала
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #5  
Старый 19.01.2010, 16:50
SlavikSG SlavikSG вне форума
Прохожий
 
Регистрация: 26.02.2009
Адрес: Новомосковск
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Yurk@
а ты и не сможешь ничего менять на Форме2, пока не создашь её...
Вот я как чувствовал, что что-то не так делаю.
Тогда вопрос - Как создавать дочернюю форму?

Я думал, что такое написание:
Код:
Child := TForm2.Create(Application);
это и есть создание формы. А получается, что это не так?
Ответить с цитированием
  #6  
Старый 19.01.2010, 16:52
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

я создаю так:
Код:
Application.CreateForm(TfList,fList);
и дальше уже работаю по сути
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #7  
Старый 19.01.2010, 17:54
SlavikSG SlavikSG вне форума
Прохожий
 
Регистрация: 26.02.2009
Адрес: Новомосковск
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Yurk@
я создаю так:
Код:
Application.CreateForm(TfList,fList);
и дальше уже работаю по сути
Именно твоя "Application.CreateForm(TForm2, Form2);" спасла мне жизнь!!!
После того, как я вместо Child := TForm2.Create(Application); написал по твоему, наконец-то все заработало. Большое спасибо!

Кстати, в примерах пишут три строки, а не одну. И пишут так:
Код:
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.Run;
Вопрос: Нужно ли и мне так писать? Дело в том, что все пашет нормально и с одной строкой и с тремя. Но как грамотнее?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter