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

Вниз

Курсор и блокировка формы   Найти похожие ветки 

 
Кодер ©   (2008-04-02 19:58) [0]

Приветствую всех, столкнулся с небольшой проблемой. После нажатия пользователем кнопки на форме запускается долговременный процесс (скажем секунд на 10), в это время курсор должен измениться на crHourGlass, а форма заблокироваться, после завершения выполнения долговременного процесса, должны произойти обратные действия. Использую следующий код:


try
 Screen.Cursor := crHourGlass;
 EnableWindow(Handle, FALSE);
...
finally
  EnableWindow(Handle, TRUE);
  Screen.Cursor := crDefault;
end;


Проблема в том, что как только я вызываю EnableWindow(Handle, FALSE), то курсор сразу же "сбрасывается" на дефолтный. Не подскажете как побороть проблему? Спасибо.


 
tesseract ©   (2008-04-02 20:41) [1]


>  Не подскажете как побороть проблему? Спасибо.


Использовать потоки.


 
sniknik ©   (2008-04-02 21:36) [2]

> Проблема в том, что как только я вызываю EnableWindow(Handle, FALSE), то курсор сразу же "сбрасывается" на дефолтный.
нет такой проблемы... здесь. она у тебя гдето в другом месте.

хотя код неправильный, не изза того на что "грешишь" но тем не менее. правильнее так
EnableWindow(Handle, FALSE);
try
 Screen.Cursor:= crHourGlass;

 Sleep(10000); //типа полезный, долговременный процесс (скажем секунд на 10)

 Screen.Cursor:= crDefault;
finally
 EnableWindow(Handle, TRUE);
end
;

> Использовать потоки
немного не с той оперы. он же не хочет чтобы интерфейс оставался "живым" на время работы процесса, наоборот, он его специально блокирует.


 
{RASkov} ©   (2008-04-02 21:55) [3]

Восстановление курсора как бы тоже нужно в секцию finally поместить.... мало ли... бывает :)


 
tesseract ©   (2008-04-02 22:21) [4]


> немного не с той оперы. он же не хочет чтобы интерфейс оставался
> "живым" на время работы процесса, наоборот, он его специально
> блокирует.


Курсор над "зависшим " окном особо не перерисовываеться. Да и пользователь может стулом запустить в экран.


 
sniknik ©   (2008-04-02 23:30) [5]

> Курсор над "зависшим " окном особо не перерисовываеться.
курсор рисуется аппаратными средствами, ему зависшее окно пофигу, главное чтобы команда на смену прошла. а она прошла (и не одна... судя по тому что у него дефаултный курсор возвращается, проходит еще и возвратная команда, чтото ее выполняет, чтото, но не приведенный в [0] код. чтото в "волшебных пузырьках").


 
Кодер ©   (2008-04-03 09:41) [6]


> курсор рисуется аппаратными средствами, ему зависшее окно
> пофигу, главное чтобы команда на смену прошла. а она прошла
> (и не одна... судя по тому что у него дефаултный курсор
> возвращается, проходит еще и возвратная команда, чтото ее
> выполняет, чтото, но не приведенный в [0] код. чтото в "волшебных
> пузырьках").

"Неприведенный" кусок кода содержит работу с сокетами, никаких команд работы с курсором не содержит. EnableWindow(Handle, FALSE) как и Screen.Cursor:= crHourGlass есстественно нужно вынести перед try ... finally, это мой недогляд - не корректно привел пример. Но согласившись с {RASkov} Screen.Cursor := crDefault внести в finally ... end все-таки нужно. А какие еще есть способы блокировки окна, чтобы сохранить к примеру его перерисовку, чтобы достичь цели - просто не дать шаловливым рукам юзера нажать что-нибудь пока идет "долговременный процесс (скажем секунд на 10)"?


 
tesseract ©   (2008-04-03 10:06) [7]


> чтото ее выполняет, чтото, но не приведенный в [0] код.
> чтото в "волшебных пузырьках").


Вроде винда должна его сбрасывать если софт не отвечает, у меня по жизни как 1с-ка уйдёт в шамбалу, так курсор на дефолтный меняеться.


 
Кодер ©   (2008-04-03 10:23) [8]

Вот у тут происходит нечто подобное, при блокировке окна именно над блокируемым окном курсор становится снова дефолтным.


 
Игорь Шевченко ©   (2008-04-03 10:25) [9]

Не надо блокировать онко, надо блокировать кнопки, меню, Actions и т.д.


 
sniknik ©   (2008-04-03 10:41) [10]

> "Неприведенный" кусок кода содержит работу с сокетами, никаких команд работы с курсором не содержит.
это ты так думаешь... а проверь, и замени весь "Неприведенный" (кстати почему в кавычках? ведь он реально не приведен) код на sleep как у меня. ???
и кстати исключи влияние потоков, чегонибудь асинхронного, что имеет потоки внутри (всего параллельно выполняющегося кода в общем) буде оно у тебя там есть. иначе эксперимент не будет чистым. а лучше вообще новый проект для проверки только с этим кодом.


 
Кодер ©   (2008-04-03 18:12) [11]

to sniknik: да, действительно, при использовании
Sleep(10000); //типа полезный, долговременный процесс (скажем секунд на 10) работает как нужно. У меня при работе с сокетами используются потоки...

Но вот совет Игоря Шевченко мне более по душе.

Всем спасибо за ответы и советы.


 
sniknik ©   (2008-04-03 20:02) [12]

> У меня при работе с сокетами используются потоки...
как многозначительно... и глупо.

потоки сами по себе курсор не меняют, сделай проверку с пустым потоком (тот же слип внутри), и в коде замени слип в проверке на него, + ожидание его завершения, будет тоже ->
> работает как нужно.

> Но вот совет Игоря Шевченко мне более по душе.
более чем что? я тебе советов не давал, я пытался помочь разобраться в чем же собственно причина глюка.
и совет Игоря тебе от проблемы избавиться не поможет, если ты вместо блокирования окна будеш "дизейблить" его содержимое курсор все одно будет меняться пока не найдешь(/уберешь) причину.
хотя, подозреваю, что ты воспринял его совет как вообще, замену установке курсору "часиков". и попросту спрятал глюк. мелкий но всеже.
т.е. ты его не переставляешь и получается не видно как он возвращается. дело твое, более не вмешиваюсь.


 
Кодер ©   (2008-04-03 20:20) [13]

to sniknik: при блокировке кнопок, меню и т.д. все работает как и требуется, плюс сохраняется подвижность формы, ее перерисовка, т.е. приложение не кажется в этот момент умершим.

> как многозначительно... и глупо.
А вообще, если честно, немного напрягает такой стиль общения, может я и выразился неверно или вопрос не самый интересный задал, но подобный форум и существует для того, чтобы на нем задавали вопросы и помогали решать проблемы. Не привык (к сожалению, а может и нет) если честно к такому стилю общения за свои годы.

Еще раз спасибо за обращение своего внимания на мою проблему.


 
sniknik ©   (2008-04-03 21:34) [14]

> немного напрягает такой стиль общения
аналогично. только меня "напрягает"  когда спрашивают одно, а решением считают совсем другое. совсем не связанное с "проблемой".

не у всех здесь хорошие телепаторы.
(в вопросе совершенно четко прописано, что должно происходить
> ... курсор должен измениться на crHourGlass, а форма заблокироваться, ...
, и в чем заключается проблема.
> курсор сразу же "сбрасывается" на дефолтный
что и подкупило... думал хоть ктото адекватный. но видимо не судьба.)

> подобный форум и существует для того
и это еще одно, что тоже немного "напрягает".
все спрашивающие почемуто точно знают для чего существует форум, и как другим для них нужно отвечать.
а вот сами использовать эти знания "как нужно", для других, почемуто не спешат.

> Еще раз спасибо за обращение своего внимания на мою проблему.
да не за что. буквально. проблема так и не была решена.



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

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

Наверх





Память: 0.49 MB
Время: 0.153 c
3-1213733259
Ulti
2008-06-18 00:07
2009.01.25
БД paradox


15-1227878192
Jeer
2008-11-28 16:16
2009.01.25
FoxBase


15-1227601063
Вопрошающий
2008-11-25 11:17
2009.01.25
Переход сайта на новый движок.


15-1227671554
Slider007
2008-11-26 06:52
2009.01.25
С днем рождения ! 26 ноября 2008 среда


3-1213161383
Инна
2008-06-11 09:16
2009.01.25
Как у компонента ADOConnect прописать путь до базы данных 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
Английский Французский Немецкий Итальянский Португальский Русский Испанский