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

Вниз

Можно ли сделать бесконечный цикл в Delphi   Найти похожие ветки 

 
любитель   (2003-03-31 05:24) [0]

Есть форма-Form1, на ней Edit1.При перемещении мыши в Edit1 должны отображаться её координаты.
Создал поток, где происходит считывание координат и их отображение.

procedure TTestThread.Execute;
var
p:TPoint;
xt,yt:String;
begin

//!!!начало цикла
begin
GetCursorPos(p);
xt:=IntToStr(p.x);
yt:=IntToStr(p.Y);
Form1.Edit1.Text:="X:"+xt+" Y:"+yt;
//!!!конец цикла
end;


Возникли 2 вопроса:

1)можно ли в Delphi осуществить бесконечный цикл
2)существует ли функция, которая которая возвращает значения типа BOOL в зависимости от того, пришло определенное сообщение или нет?
(например отлавливать сообщение wm_Quit или wm_Close формы:
//!!!начало цикла
while SomeFunction(Form1.Handle,wm_Quit или wm_Close)=false do begin
....
end;

Спасибо, что дочитали вопрос до конца! Буду рад услышать ваши соображения...



 
Демонов Е.В.   (2003-03-31 05:32) [1]

1)можно ли в Delphi осуществить бесконечный цикл

While true do


?????


 
Демонов Е.В.   (2003-03-31 05:38) [2]

Но та наверно лучше

while not Terminated do ...



repeat
...

until terminated







 
Демонов Е.В.   (2003-03-31 05:43) [3]

существует ли функция, которая которая возвращает значения типа BOOL в зависимости от того, пришло определенное сообщение или нет?

Это тебе нужно про очередь сообшщений почитать .

Смотри хотябы код метода Application.ProcessMessages


 
Palladin   (2003-03-31 05:51) [4]


> существует ли функция, которая которая возвращает значения
> типа BOOL в зависимости от того, пришло определенное
> сообщение или нет?


нет не существует...
на каждое событие необходимо вешать обработчик...
если тебе уж так надо ловить в потоке свершившееся то заведи public переменную (или вообще property) IsClosing в потоке

OnClose формы устанавливай ее в True...


 
любитель   (2003-03-31 05:55) [5]

При закрытии приложения возникает исключение:
Project xxxx raised exception class EAccessViolation with message "Access violation at address".
Process stopped. Use Step or Run to continue.
на строке
1)while true do
2)until terminated
Но за бесконечный цикл большое спасибо!



 
Демонов Е.В.   (2003-03-31 06:16) [6]

>>любитель

А ты про метод Synchronize Обекта TThread Слыхал
сторока
Form1.Edit1.Text:="X:"+xt+" Y:"+yt;
вызывается у тебя в этом потоке - тогда как Form1.Edit1 существует в главном потоке.

Вот оттуда я уверен и EAccessViolation


 
любитель   (2003-03-31 06:23) [7]

Спасибо всем за помощь!!!.
Про Synchronize слыхал, но по-моему в моем случае он не уместен.

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

Вот бы все проблемы так решались.:)

Ещё раз большое спасибо!!!


 
Демонов Е.В.   (2003-03-31 06:25) [8]

или можно в execute делать SendMessage(WM_USER+nn
И обрабатывать его.

А лучше всего делать это не при помощи потока а при SetTimer -0


 
Демонов Е.В.   (2003-03-31 06:30) [9]

>>Про Synchronize слыхал, но по-моему в моем случае он не уместен.

Нееееет очень даже уместен.
Вот сейчас работает после чая - а если человек кофе попьет так у него опять и EAccessViolation

Нельзя методы обьекта существующего в одном потоке вызывать в другом.


 
Palladin   (2003-03-31 07:01) [10]


> Демонов Е.В. © (31.03.03 06:30)

методы можно вызывать, при этом они будут выполнятся в контексте вызывающего потока, но вот обращение к members другого потока нужно контролировать, например критическими секциями...


 
любитель   (2003-03-31 07:22) [11]



> А лучше всего делать это не при помощи потока а при SetTimer
> -0

не понял о чем идет речь


 
Демонов Е.В.   (2003-03-31 07:45) [12]

>>не понял о чем идет речь

Тогда просто используй компонент TIMER



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

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

Наверх





Память: 0.47 MB
Время: 0.007 c
14-30564
uu
2003-03-24 21:33
2003.04.10
Справочник по математике


3-30303
Sirus
2003-03-23 10:43
2003.04.10
IBase 5.5 и IBase 6 на одной машине... Можно или нет???


1-30398
Intell
2003-03-30 14:18
2003.04.10
Как изменить цвет выделения строки в ListBox?


1-30385
Demon_mhm
2003-03-28 20:23
2003.04.10
Как работать с TListWiew


3-30269
Goga
2003-03-19 16:04
2003.04.10
Работа с несколькими БД MS Access





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