Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-35576
koks
2002-08-19 17:24
2002.09.12
Обработка ошибки в гриде


1-35668
Starkom
2002-09-02 10:52
2002.09.12
Проблема с процессами


1-35645
Starkom
2002-08-30 11:28
2002.09.12
Можно ли использовать в C++ Buildere 5 модули из Delphi 5?


1-35660
Begin
2002-09-02 03:54
2002.09.12
Мне показалось, или на www.borland.com говорят о Delphi 7 ?


1-35714
MikeFW
2002-09-02 10:41
2002.09.12
Как запустить другой файл из моего приложения?





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