Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.011 c
1-35747
Злой!!!
2002-08-30 12:15
2002.09.12
Запись динамического массива в файл


8-35826
Fredericco
2002-04-04 17:35
2002.09.12
Простите за, наверное, глупый вопрос.


1-35707
Mic_2000
2002-09-02 15:21
2002.09.12
как запустить файл с параметрами?


3-35571
MW
2002-08-21 17:36
2002.09.12
ODAC


3-35623
Дмитрий Калугин
2002-08-22 15:05
2002.09.12
Вычисляемое поле в IB/FB




   Наверх