Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];

Вниз

AV при Synchronize в модальной форме.   Найти похожие ветки 

 
tytus   (2008-06-09 17:25) [0]

Доброго дня всем.
Показываю одальную форму:

MForm:=TMForm.Create(Application);
try
 MForm.ShowModal;
finally
 FreeAndNil(MForm);
end;


В этой форме создаю поток.
Из потока вызываю Synchronize(UpdateRE);

procedure TMyThread.UpdateRE;
begin
 with MForm.RE1 do
 begin
   Lines.Add("какой-то текст");
   PostMessage(Handle, WM_VSCROLL, SB_BOTTOM, 0);
 end;
end;

Ругается на строке with MForm.RE1 do.
В чем тут дело? Ведь в случае сглавной формой никаких проблем нет.


 
Поросенок Винни-Пух ©   (2008-06-09 17:27) [1]

в переменной MForm мусор


 
tytus   (2008-06-09 17:31) [2]

>Поросенок Винни-Пух ©   (09.06.08 17:27) [1]
вы имеете ввиду что переменная MForm ниначто не ссылается?
Но в юните потока стоит uses MForm;


 
Поросенок Винни-Пух ©   (2008-06-09 17:35) [3]

И чего?


 
Поросенок Винни-Пух ©   (2008-06-09 17:37) [4]

Кроме того, вот этого делать нельзя

procedure TMyThread.UpdateRE;
begin
with MForm.RE1 do
begin
  Lines.Add("какой-то текст");


 
tytus   (2008-06-09 17:38) [5]

>Поросенок Винни-Пух ©   (09.06.08 17:35) [3]
а то, что с Главной формой приложения метод потока Synchronize работает нормально, а с модальной - нет!
Поясните, что значит в переменной MForm мусор


 
tytus   (2008-06-09 17:39) [6]

>Поросенок Винни-Пух ©   (09.06.08 17:37) [4]
тысчю раз делал - работает атлична.


 
Поросенок Винни-Пух ©   (2008-06-09 17:39) [7]

это значит в ней нет валидной ссылки на экземпляр класса формы


 
Поросенок Винни-Пух ©   (2008-06-09 17:40) [8]

тысчю раз делал - работает атлична.

Я просто не обратил внимание что там вызов идет через syncronize

остается версия с мусором.


 
Loginov Dmitry ©   (2008-06-09 17:46) [9]

> В этой форме создаю поток.
> Из потока вызываю Synchronize(UpdateRE);


В какой момент создается поток? Если по OnCreate модальной формы, то в этом момент MForm не определено (особенно высока вероятность AV, если после создания треда происходит длительная задержка). Еще - откуда вызывается Synchronize(UpdateRE)?


 
tytus   (2008-06-09 17:46) [10]

>Поросенок Винни-Пух ©   (09.06.08 17:39) [7]
дак мне что - передавать ссылку в поток?

{TMyThread}
private
 FForm:TObject;
public
 constructor Create(AForm: TObject);
...
constructor TMyThread.Create(AForm: TObject);
begin
 FForm:=AForm;
end;

procedure TMyThread.UpdateRE;
begin
with TMForm(FForm).RE1 do
begin
  Lines.Add("какой-то текст");
  PostMessage(Handle, WM_VSCROLL, SB_BOTTOM, 0);
end;
end;

счаз так попробую... а как по-другому?


 
tytus   (2008-06-09 17:50) [11]

>Loginov Dmitry ©   (09.06.08 17:46) [9]
поток создается в модальной форме при клике на кнопке.
откуда вызывается Synchronize(UpdateRE)? - я думаю большой разницы в этом нет. Что из метода Execute потока, что из какой-нибудь другой процедуры потока - все равно работает. Делал много раз, но только с главной фомой.


 
Поросенок Винни-Пух ©   (2008-06-09 17:52) [12]

чудес-то не бывает.
главная или заглавная форма, ав он и в африке ав.


 
tytus   (2008-06-09 17:57) [13]

>Поросенок Винни-Пух ©   (09.06.08 17:52) [12]
однако чудеса случаются.
Делал я сей поток с главной формой (для тестирования). Все работает отлично.
Перенес код потока в другое приложение, с модальной формой (думал - какая разница где поток вызывать?) - и вот вам - AV!


 
Поросенок Винни-Пух ©   (2008-06-09 17:59) [14]

чудес не бывает.


 
tytus   (2008-06-09 18:01) [15]

>tytus   (09.06.08 17:46) [10]
заработало!
Всем спасибо!


 
Тын-Дын ©   (2008-06-09 20:21) [16]

Ссылку на форму-то зачем передавать?
Разве не достаточно ссылки на Re1?


 
Loginov Dmitry ©   (2008-06-09 20:33) [17]

> однако чудеса случаются.


случаются. Раз в 100 лет.
Но уж точно не в этом случае ))


 
Anatoly Podgoretsky ©   (2008-06-09 21:09) [18]

> Loginov Dmitry  (09.06.2008 20:33:17)  [17]

Но в этом случае чудо сработало.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.041 c
2-1212990723
Mishenka
2008-06-09 09:52
2008.07.06
Как сделать панель наподобие инспектора объектов в Delphi ?


2-1212792183
redlord
2008-06-07 02:43
2008.07.06
отображение каретки ввода в компоненте edit


15-1211457004
Дмитрий С
2008-05-22 15:50
2008.07.06
На каком это языке?


11-1190891758
max727
2007-09-27 15:15
2008.07.06
KolFTP Demo не компилится


2-1212664962
Андрей Пл
2008-06-05 15:22
2008.07.06
компонент TStringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский