Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
ВнизПочему если из витка ( 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c