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