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

Вниз

Форма в новом потоке   Найти похожие ветки 

 
dima_matrix   (2004-01-27 20:55) [0]

Столкнулся с проблемой и застрял, что-то ни туда и ни сюда. А дело в следующем. Хотелось бы создавать и запускать форму в отдельном потоке, поскольку в основном может вывалиться модальное окно и, соответственно, всю программу затормозить. А форму эту хотелось бы использовать в любой момент. Но у меня почему-то при вызове метода Show этой формы в отдельном потоке программа "уходит в себя" безвозвратно. Как это можно поправить? Спасибо!


 
circul   (2004-01-27 20:58) [1]

>dima_matrix (27.01.04 20:55)

Никак. Формы используются в основном потоке.


 
dima_matrix   (2004-01-27 21:39) [2]

С чего это вы взяли?


 
Dred2k   (2004-01-27 22:27) [3]

> dima_matrix (27.01.04 21:39) [2]

Тебе правду говорят.
Win32.hlp -> Modal dialog boxes
When creating the modal dialog box, Windows makes it the active window. The dialog box remains active until the dialog box procedure calls the EndDialog
function or Windows activates a window in another application. Neither the user nor the application can make the owner window active until the modal dialog box is destroyed.


 
dima_matrix   (2004-01-28 19:51) [4]

Да, это все правильно, но только в случае однопоточного приложения. В отдельном потоке можно создать и вывести модальное окно и в то же время в основном потоке отобразить свое модальное окно. При этом оба потока естественно остановятся, но независимо друг от друга. Тут главное с синхронизацией данных не прошляпить...


 
YuRock   (2004-01-28 19:55) [5]

Создайте в вашем потоке вместо формы окно через API


 
Polevi   (2004-01-28 20:09) [6]

.. и цикл выборки сообщений не забудьте .. а лучше забудьте про эту идею


 
denisov   (2004-01-28 20:18) [7]

var T: THandle;

function Bebe(P: Pointer): Integer;
begin
TForm.Create(nil).ShowModal;
Result := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
BeginThread(nil,0,@bebe,nil,0,T);
MessageBox(Handle,"bebe runs","",16)
end;


 
Digitman   (2004-01-29 09:17) [8]


> denisov (28.01.04 20:18) [7]


работать это не будет, не вводи автора в заблуждение


 
Nikolay M.   (2004-01-29 09:38) [9]

Имхо, если проблема только в диалоговых окнах, то проще, конечно, делать приложение MDI-ным, а вместо ShowMessage, MessageBox и тд показывать свою формочку, которая будет всегда поверх той MDIChild-формы, которая его вызвала.
AFAIK, кто-то пытался делать такое около полугода назад, наверное, давно уже потеряно в архивах форума.


 
dima_matrix   (2004-01-29 18:58) [10]

Да можно и без Апи все сделать, нужно только аккуратно следить за синхронизацией данных. Особенно в этом вопросе могут подвести глобальные переменные!



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

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

Наверх




Память: 0.46 MB
Время: 0.007 c
14-29568
fag2000
2004-01-20 16:07
2004.02.10
Как посмотреть что написано в реестре у другого пользователя.


1-29354
MicroWorld
2004-02-01 21:33
2004.02.10
StringGrid


14-29571
syte_ser78
2004-01-20 11:41
2004.02.10
Уже наверно всем надоевший вопрос :(


3-29212
Silver_
2004-01-19 11:09
2004.02.10
FreeReport - Как напечатать пустых строк


3-29259
Burafchick
2004-01-18 13:02
2004.02.10
как указать относительный путь к папке базы данных





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