Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Экранный курсор crSQLWait [D7, WinXP]


Stager ©   (2004-07-27 15:26:00) 

В моей задаче приходится регулярно, с промежутком около 1 c, выполнять SQL-запросы через TQuery. Проблема: на время каждого запроса экранный курсор показывает часы и надпись "SQL". Длительность запросов мизерная, поэтому курсор отвратительно моргает каждую секунду. Нужно, чтобы он НЕ ИЗМЕНЯЛСЯ при запросе. Победить путем развешивания Screen.Cursor := crDefault на все возможные события TQuery не помогло. Подскажите, пожалуйста, как победить эту заразу?


Anatoly Podgoretsky   (2004-07-27 18:37:00) [1]

Значит спрятал мусор под ковер.


Sandman25   (2004-07-27 16:43:00) [2]

[5] Stager   (27.07.04 16:24)

Разница между DBScreen.Cursor и Screen.Cursor достаточно велика, чтобы не считать синонимами эти буквосочетания

Из интереса посмотрел, как используется TSession.SQLHourGlass и выяснил, что Вы ошибаетесь.


Stager   (2004-07-27 16:28:00) [3]

2 AlexSV

Database1.Session.SQLHourGlass := False

Спаситель! С меня большая виртуальная бутылка, спасибо огромное.


Stager   (2004-07-27 16:24:00) [4]

SetCursor := (GetCurrentThreadID = MainThreadID) and (DBScreen.Cursor = dcrDefault);
if SetCursor then
  DBScreen.Cursor := dcrHourGlass;


Получается, что если установить Screen.Cursor в, скажем, crArrow, то изменения не будет.


Ничего подобного. Разница между DBScreen.Cursor и Screen.Cursor достаточно велика, чтобы не считать синонимами эти буквосочетания. Из интереса проверил (ну мало ли?) - действительно не работает - моргает курсор, как прежде.


AlexSV   (2004-07-27 16:20:00) [5]

Database1.Session.SQLHourGlass := False ?


Sandman25   (2004-07-27 16:15:00) [6]

Насколько я понял по трассировке, курсор изменяется в
procedure TSession.InitializeBDE;

SetCursor := (GetCurrentThreadID = MainThreadID) and (DBScreen.Cursor = dcrDefault);
 if SetCursor then
   DBScreen.Cursor := dcrHourGlass;

Получается, что если установить Screen.Cursor в, скажем, crArrow, то изменения не будет.


Stager   (2004-07-27 16:06:00) [7]

Насколько я понимаю, он изменяется где-то в дебрях стандартного Delphi-модуля DB. Попытка это отследить ни к чему полезному не привела, тем более, что буквосочетание Cursor там чаще используется для обозначения не экранного, а DB-курсора.

Подскажите, имеет ли смысл, к примеру, выполнять запрос в отдельном потоке (если, конечно, можно запретить этому потоку взаимодействовать с экраном)?


Sandman25   (2004-07-27 15:27:00) [8]

Для начала надо разобраться, кто и когда изменяет курсор. После этого уже можно будет начать думать :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо