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

Вниз

Проблема доступа из потока к данным MDI окна.   Найти похожие ветки 

 
lukey   (2003-05-12 12:42) [0]

Такая проблема: при попытки изменить данные в дочернем(MDI) окне(форме) из потока(или главного окна), т.е. тривиально изменить Caption у Lable, происходит исключение, т.е. ошибка доступа.
Помогите разобратся с причиной.


 
Dms   (2003-05-12 12:48) [1]

возможно, объект на момент изменения уже/еще не существует


 
MBo   (2003-05-12 12:49) [2]

Код?


 
lukey   (2003-05-12 13:00) [3]

Код:
procedure TComRead.View;
begin
Form1.Panel1.Caption:=sss;
end;

sss - глобалььная переменная типа string;
Form1 - дочернее окно.
Процедура вызывается в потоке через Synchronize.
Ошибка возникает именно в момент присваивния.


 
lukey   (2003-05-12 13:01) [4]

P.S. TComRead - класс потока.


 
Smithson   (2003-05-12 13:05) [5]

Synchronize при любом обращении к VCL!!
Сколько раз говорить!


 
MBo   (2003-05-12 13:06) [6]

Form1 - глобальная переменная?
Где проверка на существование?


 
lukey   (2003-05-12 13:30) [7]

Синхронайз есть. И класс потока создается только когда форма(Form1) создается, т.е. экземпляр класса создается в методе Form1.Create. И убивается при закрытии окна. Грубо говоря поток работает только когда окно открыто.

Сейчас разобрались что ошибка возникает когда используется метод
Form1.Create(Application) в главной форме, а когда используется Form1.CreateForm(...) то все работает.
Дело в том что приходится работать с чужим приложением(содержащим только форм 130 штук). И то что уже работатет не хотелось бы трогать или по крайне мере терять время на разбор кода. Поэтому почему применяется метод Form1.Create(Application), я не могу сказать.


 
Skier   (2003-05-12 13:32) [8]

>lukey
А не DLL ли это часом ?


 
lukey   (2003-05-12 13:40) [9]

>Skier
Нет, все в одном приложении


 
Dms   (2003-05-12 13:55) [10]


> а когда используется Form1.CreateForm(...) то

вообще то надо Application.CreateForm


 
lukey   (2003-05-12 14:22) [11]

>Dms
Ну да обшибся, так оно и есть Application.CreateForm


 
nikkie   (2003-05-12 15:43) [12]

>ошибка возникает когда используется метод Form1.Create(Application)
немудрено. надо хотя бы
Form1 := TForm1.Create(Application)



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

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

Наверх




Память: 0.46 MB
Время: 0.006 c
3-70135
Nikos
2003-04-30 14:20
2003.05.22
зависает программа


1-70243
Comp
2003-05-12 09:26
2003.05.22
Как заставить дочернюю форму MiDI не появляться???


14-70437
fighter@str
2003-04-30 18:56
2003.05.22
Жесткий диск IBM


14-70454
Mirva
2003-05-03 06:03
2003.05.22
Подскажите алгоритм


3-70177
jonymoto
2003-05-02 11:02
2003.05.22
Как запретить ввод руских букв в таблицу





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