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

Вниз

Почему если из витка ( thread ) создать фору - выдается сообщение   Найти похожие ветки 

 
Dimk   (2002-08-31 21:45) [0]

EInvalidOperation - Canvas does not allow drawing

Проявляется на W2k и выше.
Вот кусок текста
procedure TDelDupThread.Execute;
var
DF: TDelDupForm;
begin
DF := nil;
try
Application.MainForm.Enabled := False;

!!!!!!
DF := TDelDupForm.Create(Application);
!!!!!! тут и вылезает исключение.

DF.Show;
DF.Memo.Text := "


 
CrazyAngel ©   (2002-08-31 21:51) [1]

В хелпе написано что при работе с визуальнами обьектами рекомендуется ипользовать syncronize
Не пробовал с ним тоже вылазит ?


 
Dimk   (2002-08-31 21:55) [2]

Пробовал - не вылазит.
Но мне интересно почему. :0)


 
CrazyAngel ©   (2002-08-31 22:25) [3]

из хелпа :
Synchronize causes the call specified by Method to be executed using the main VCL thread, thereby avoiding multi-thread conflicts.
Может и всамом деле конфликтует с основным потоком программы ?



 
Dimk   (2002-08-31 22:40) [4]

Конфликт налицо...
ProcessMessages перед созданием формы не помогает.

Может SendMessage в главную форму в конструкторе TDelDupForm
сделать - это даст задержку так как из SendMessage не вернестя пока сообщение в главной форме не обработается.

Жаль что в отладчике протрассировать не получается - там видимо из за задержек все проходит нормально.

Может WinIce-ом ковырнуть? В нем ведь все останавливается.
Тока пока доберешься до места - упаришься.


 
Юрий Зотов ©   (2002-08-31 23:07) [5]

Чтобы форма могла работать, она должна получать сообщения. Для этого поток, в котором она создана должен иметь цикл выборки сообщений. В главном потоке такой цикл реализован в объекте Application.

А в Вашем потоке есть цикл выборки сообщений? Нет. Тогда ничего удивительного.


 
Dimk   (2002-08-31 23:20) [6]

В главном витке - формы тоже создаются до входа в цикл обработки сообений:
begin
Application.Initialize;
SplashForm := TSplashForm.Create(Application);

// обратите внимание - сплэщ показывается без проблем!
// потому что Update посылает сообщение прямо в оконную функцию обработки сообщений.
SplashForm.Update;
Application.CreateForm(TTFStatDM, TFStatDM);
Application.CreateForm(TTFStatForm, TFStatForm);
SplashForm.Free;
Application.Run;
end.
Однако это никому не мешает...
И главное исключение не выбрасываются.
Тут какой-то конфликт.
К томуже на w95-98, NT4 все на ура. Это какаято особенность
w2k и выше.


 
Dimk   (2002-09-02 11:12) [7]

Позвольте снова поднять тему - понедельник, с новыми силами...
:0)


 
Skier ©   (2002-09-02 11:23) [8]

>Dimk

Не поможет ?


begin
SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
Application.CreateForm(TTFStatDM, TFStatDM);
Application.CreateForm(TTFStatForm, TFStatForm);
SplashForm.Hide;
SplashForm.Free;
Application.Run;
end.


 
Dimk   (2002-09-02 11:31) [9]

To Skier
Вопрос не о том - читай с самого начала.
Про сплэш я написал чтобы аргументировать почему я не согласен с Юрием Зотовым.


 
Skier ©   (2002-09-02 11:35) [10]

>Dimk
Ну тебе же вроде написали что нужен syncronize,т.к. обращатся
к полям, свойствам и методам объектов можно только в контексте
основного потока приложения и syncronize как раз должен помочь...


 
Skier ©   (2002-09-02 11:37) [11]

>Dimk
Дополнение : я имел ввиду объекты VCL


 
Dimk   (2002-09-02 11:42) [12]

Дык это я и сам знал - вопрос в том из за чего такое происходит?
Только и всего. Может кто раскопал когдато?

Мне в данном случае это безразлично - но ведь есть нюансы:
например все что вызывается через synchronize выполняется в контексте главного витка - а что в Execute в контексте текущего.

Вот и интересуюсь - что же там с чем раздирается? В чем Суть проблемы?


 
Skier ©   (2002-09-02 11:48) [13]

>Dimk

> Вот и интересуюсь - что же там с чем раздирается?

Почитай Тейксейру и Пачеко у них есть подробности по этому
поводу...


 
Dimk   (2002-09-02 11:50) [14]

Если можно - ссылочку или название книг.


 
Skier ©   (2002-09-02 11:54) [15]

"Delphi 5. Руководство разработчика" два тома.
То что тебя интересует можно прочитать в 1 томе. стр. 455


 
Dimk   (2002-09-02 12:10) [16]

Спасибо.



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

Текущий архив: 2002.09.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
14-35888
limon
2002-08-16 15:42
2002.09.12
CLIPPER и быстрые процессора


3-35547
@lex
2002-08-21 14:55
2002.09.12
TQuery, главный-подчиненный


1-35715
$HiC0
2002-09-02 18:48
2002.09.12
Передача двумерного массива методу объекта...


1-35644
zxas
2002-09-01 20:18
2002.09.12
Интересный вопрос !!!


14-35871
Карлсон
2002-08-17 23:40
2002.09.12
Какие книги стоит покупать, а какие - нет?