![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TRichEdit
iviom © (2007-03-01 17:30:00)Народ, просто руки опускаются. Что с этим компонентом?
Ситуация такая. Форма1. Из нее открывается Форма2. На форме2 лежит вышеупомянутый компонент. Ни одного!! свойства не трогала. Все по умолчанию. Из формы1 открываю форму2. Закрываю форму2. Закрываю форму1 - ошибка!
"Access violation as address..."
Почему?
Цбираю с формы2 этот компоннт. та же последовательность действий - ошибка нет.
В чем тут дело? Он не работает с настройками по умолванию? Что не так?
Ega23 (2007-03-01 18:29:00) [1]
> Убрано-убрано и в самом файле проекта тоже ее нет. А главная
> только одна - именна та, что в файле проекта. =)
Честно говоря, конкретно на этот вопрос в данный момент ответ дать не могу, а лезть и проверять, что там происходит нет времени.
Но:
Если ты создаёшь TComponent и в качестве Owner даёшь nil - будь любезен сам потом его грохнуть.
iviom (2007-03-01 18:25:00) [2]
> А в юните Unit2 var Form2:TForm2 скорее всего не убрано.
Убрано-убрано и в самом файле проекта тоже ее нет. А главная только одна - именна та, что в файле проекта. =)
Ega23 (2007-03-01 18:20:00) [3]
> Если я правильно понял автора, в его примере Form2 - локальная
> переменная в обработчике кнопки.
Ну да. А в юните Unit2 var Form2:TForm2 скорее всего не убрано.
И в самом файле проекта обе формы, скорее всего, автоматом создаются. А какая из них становится главной - дело крайне тёмное.
iviom (2007-03-01 18:19:00) [4]Form2 - действительно локальная переменная. Ее класс TForm2 подробно описан в своем юните. А как писать с with или без нее.. для этих трех строчек думаю, без разницы.
> Ладно, признаю ошибку. А все таки вопрос. Ну почему, если
> не делать Free пустой, предположим, форме, то все рабоает,
> а если на форме этот контрол, то нет?
И все таки мой вопрос остался в стороне.
Германн (2007-03-01 18:14:00) [5]
> Ega23 © (01.03.07 18:10) [12]
>
> А почему бы и нет?
>
Если я правильно понял автора, в его примере Form2 - локальная переменная в обработчике кнопки.
Ega23 (2007-03-01 18:10:00) [6]А почему бы и нет?
Германн (2007-03-01 18:09:00) [7]
> Ega23 © (01.03.07 18:05) [10]
>
>
> > Германн © (01.03.07 17:58) [9]
>
>
> Ну это вопрос стиля, ИМХО.
Не совсем так, имхо.
Тогда у автора не было бы соблазна писАть вот это:
Форма 2 создается так (по нажатию кнопки на форме1):
var
Form2: TForm2;
begin
...
Ega23 (2007-03-01 18:05:00) [8]
> Германн © (01.03.07 17:58) [9]
Ну это вопрос стиля, ИМХО.
Вот как раз только что написал:
procedure TFMain.CarZonesAdd;
begin
Application.CreateForm(TCarZonesAddForm, CarZonesAddForm);
try
CarZonesAddForm.ShowModal;
if CarZonesAddForm.ModalResult<>mrOK then Exit;
finally
CarZonesAddForm.Free;
end;
end;
Тут дальше ещё некая фнкциональность будет накручиваться, когда форму доделаю. В частности, коннект передать, значение поля и т.п.
Плюс потом, переоткрывать запрос, по ModalResult или нет...
В целом, для не сильно сложных модальных форм With предпочитаю не использовать, т.к. часто наименования пропертей совпадают.
Германн (2007-03-01 17:58:00) [9]Тогда уж лучше так:
begin
with TForm2.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;
iviom (2007-03-01 17:57:00) [10]Ладно, признаю ошибку. А все таки вопрос. Ну почему, если не делать Free пустой, предположим, форме, то все рабоает, а если с этим контролом, то нет?
Ega23 (2007-03-01 17:52:00) [11]Ну и убрать нафиг создание из файла проекта.
Ega23 (2007-03-01 17:52:00) [12]
> Пардон, люди. Написала у форме1 в событии OnClose() Form2.
> Destroy;
> Ошибка исчезла.
>
Делать это надо в обработчике этой же кнопки:
var
Form2: TForm2;
begin
Application.CreateForm(TForm2, Form2);
try
Form2.ShowModal;
finally
Form2.Free;
end;
end;
Ega23 (2007-03-01 17:50:00) [13]
var
Form2: TForm2;
begin
Form2:= TForm2.Create(nil);
Form2.ShowModal;
end;
А Free форме 2 Дядя Вася делать будет?
iviom (2007-03-01 17:50:00) [14]Пардон, люди. Написала у форме1 в событии OnClose() Form2.Destroy;
Ошибка исчезла.
iviom (2007-03-01 17:47:00) [15]
> Как создаются формы 1 и 2?
Форма1 создается по умолчанию, то есть она главная в проекте и самим проектос создается и запускается (возможно криво говорю).
Форма 2 создается так (по нажатию кнопки на форме1):
var
Form2: TForm2;
begin
Form2:= TForm2.Create(nil);
Form2.ShowModal;
end;
На форме2 лежит компонент TRichEdit c настройками по умолчанию. И когда я закртываю форму1 у меня выдается ошибка Access Violation
Ega23 (2007-03-01 17:36:00) [16]Как создаются формы 1 и 2?
Германн (2007-03-01 17:35:00) [17]
> Что с этим компонентом?
С "этим компонентом" всё в порядке.