Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.25;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
15-1172951913
eXPell
2007-03-03 22:58
2007.03.25
Где-то ошибка...


15-1172783150
Игорь Шевченко
2007-03-02 00:05
2007.03.25
Поздравляю k2 с днем рождения!


2-1172935222
z80maniac
2007-03-03 18:20
2007.03.25
Повторная загрузка DLL


4-1163159712
novill
2006-11-10 14:55
2007.03.25
Есть у кого-нибудь заголовки функций gina.dll на Delphi?


2-1172906780
Windows
2007-03-03 10:26
2007.03.25
Piette компоненты