Главная страница
    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.045 c
15-1211704569
Kostafey
2008-05-25 12:36
2008.07.06
С днем рождения ! 24 мая


15-1211360284
Knight
2008-05-21 12:58
2008.07.06
Программа для MS SQL..


2-1212680998
Makaveli
2008-06-05 19:49
2008.07.06
idhttp


15-1211727630
TIF
2008-05-25 19:00
2008.07.06
Получить все возможные комбинации символов :(


2-1212990723
Mishenka
2008-06-09 09:52
2008.07.06
Как сделать панель наподобие инспектора объектов в Delphi ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский