Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.12.2012, 15:51
Rabid Coyote Rabid Coyote вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 32
Версия Delphi: 10 Lite, 2007
Репутация: 10
Восклицание Динамическое изменение состояния курсора

В книжке М. Фленова описывается такой фокус:
Цитата:
Изменчивый указатель

Есть такая интересная WindowsAPI-функция - setSystemCursor. У нее есть два параметра.

□ Курсор, который надо изменить. Чтобы указать на системный курсор, МОЖНО ИСПОЛЬЗОВАТЬ ФУНКЦИЮ GetCursor.

Вид системного курсора, который нужно установить. Здесь можно указать одно из следующих значений:

• ocr_NORMAL - нормальный курсор в виде стрелки;

• ocr_ibeam - курсор, используемый для выделения текста;

• ocr_wait - большие песочные часы;

• OCR_CROSS - крестик;

• ocr__up - стрелка вверх;

• OCRSIZE - курсор изменения размера;

• ocr^icon - значок;


• ocr__sizewe - курсор горизонтального изменения размера;

• OCR_sizens - курсор вертикального изменения размера;

• ocr_sizeall - курсор горизонтального и вертикального изменения размера;

• ocr__sizeno - интернациональный несимвольный курсор;

• ocr_appstarting - маленькие песочные часы со стрелкой.

И сразу же небольшой пример изменения текущего вида указателя мыши:

procedure TForml.ButtonlClick(Sender: TObject);

begin

SetSystemCursor(GetCursor, OCR_CROSS);

end;

Этот код изменяет текущий курсор на крестик, который используется при графическом выделении.

Вопрос: Можно ли рандомно менять вид системного курсора, чтобы в течение определенного времени курсор последовательно принимал все перечисленные значения?
Ответить с цитированием
  #2  
Старый 31.12.2012, 17:32
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Можно. В чем проблема?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 31.12.2012, 18:30
Rabid Coyote Rabid Coyote вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 32
Версия Delphi: 10 Lite, 2007
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Можно. В чем проблема?

проблема в том, что у меня не получается. )))

попробовал вот так:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
repeat
randomize;
setSystemCursor(GetCursor, ocr_cross);
  setSystemCursor(GetCursor, ocr_wait)
         setSystemCursor(GetCursor, ocr_up);
           setSystemCursor(GetCursor, ocr_normal);
until true;
end;

end.;

lmikle: пользуемся правильными тегами!

но может быть, можно лучше? ))

Последний раз редактировалось lmikle, 01.01.2013 в 12:21.
Ответить с цитированием
  #4  
Старый 31.12.2012, 22:11
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Во-первых, рандомайз внутри цикла лишен смысла. Он делается один раз при старте программы. Далее используется рандом. Во-вторых, рандомности в коде нет. Как вариант, сделать массив из всех возможных значений курсоров, в цикле брать рандом от размера этого массива и юзать полученное число как индекс курсора в массиве. Вариант 2 - посмотреть, чему соответствуют эти константы курсоров. Это будут числа, и скорее всего они будут по порядку. Поэтому можно брать рандом сразу от них. Ну и в цикле надо делать ожидание, иначе курсоры будут мигать с огромной скоростью и сольются в марево.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 01.01.2013, 09:49
Rabid Coyote Rabid Coyote вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 32
Версия Delphi: 10 Lite, 2007
Репутация: 10
По умолчанию

Bargest

Благодарствую.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter