|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Передача параметра в динамически создаваемую форму
Если в опциях проекта поместить форму в 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
|
||||
|
||||
я это дело обходил так:
для Form1 Код:
uses uForm2; public StartKey : integeer; ... procedure TForm1.N2Click(Sender: TObject); var chForm: TForm; begin StartKey :=1; chForm := TForm.Create(Application); end; Код:
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
|
|||
|
|||
Честно говоря не понял, причем тут переменная 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
|
||||
|
||||
а ты и не сможешь ничего менять на Форме2, пока не создашь её
и только после того как она будет созданная, ты сможешь передавать ей то, что те нужно ЗЫ: StartKey ты как раз туда и поставил, куда нужно было ЗЫ2: это был пример, когда мне нужно было менять вид одной и той же формы в момент её создания, в зависимости от того, какая форма и кнопка её вызвала Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#5
|
|||
|
|||
Цитата:
Тогда вопрос - Как создавать дочернюю форму? Я думал, что такое написание: Код:
Child := TForm2.Create(Application); |
#6
|
||||
|
||||
я создаю так:
Код:
Application.CreateForm(TfList,fList); Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#7
|
|||
|
|||
Цитата:
После того, как я вместо Child := TForm2.Create(Application); написал по твоему, наконец-то все заработало. Большое спасибо! Кстати, в примерах пишут три строки, а не одну. И пишут так: Код:
Application.Initialize; Application.CreateForm(TForm2, Form2); Application.Run; |