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

Вниз

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

 
fedor-dveniatin   (2009-08-14 14:12) [0]

Возможно ли загрузить для своей программы курсор больше чем 32х32?
WinXP и выше. Delphi7


 
KilkennyCat ©   (2009-08-14 16:39) [1]

да.


 
fedor-dveniatin   (2009-08-14 16:45) [2]

Можно узнать как?

В случае ответа - да, дополнительный вопрос - как?


 
turbouser ©   (2009-08-14 16:52) [3]

нет


 
fedor-dveniatin   (2009-08-14 17:09) [4]


> turbouser ©   (14.08.09 16:52) [3]
> нет

Что нет? Нельзя узнать или нельзя загрузить?


 
Jeer ©   (2009-08-14 17:26) [5]

CursorSizeX := GetSystemMetrics(SM_CXCURSOR);
CursorSizeY := GetSystemMetrics(SM_CYCURSOR);

Узнаешь предельные (максимальные) размеры курсора.


 
Jeer ©   (2009-08-14 17:32) [6]

http://support.microsoft.com/kb/307213


 
fedor-dveniatin   (2009-08-14 17:42) [7]

Jeer © Спасибо, попробую.


 
fedor-dveniatin   (2009-08-14 23:29) [8]

Так и не получилось. =(

Курсор у меня в .ani 48х48 RGB/A Как выполнить CreateCursor (с такими исходными данными) я не понимаю. Остается только LoadCursor и иже с ним. Устанавливаю курсор в обработчике WM_SetCursor с помощью SetCursor.

Где и как задавать размеры - не понимаю.


 
TIF ©   (2009-08-15 01:15) [9]

> Так и не получилось. =(

Статья базы знаний support.microsoft.com/kb/307213 не помогла?
Или с английским туго? Вот это как раз не проблема...

http://www.microsofttranslator.com/BV.aspx?ref=Internal&a=http://support.microsoft.com/default.aspx/kb/307213

Качество перевода очень даже ничего, не зря Microsoft создавала этот переводчик с рассчётом больше для внутреннего использования внутри корпорации (например, при переводе с разных языков на английский отзывов и сообщений об ошибках в Windows 7), чем ради привлечения народа очередным бесплатным сервисом :)

Смотрим:

Cursor sizes
Although cursors can, in theory, be any size, the system imposes a standard size that is exposed by means of the SM_CXCURSOR and SM_CYCURSOR values. These metrics are read-only. On standard, low-DPI systems, these metrics are set to 32x32 pixels (32 bytes/row). When the system loads cursors by means of the standard LoadCursor function, the cursor is stretched to this dimension.
- - -
Размеры курсора
Хотя в теории, курсоры могут быть любого размера в системе налагает стандартного размера, которые предоставляются в виде значения SM_CXCURSOR и SM_CYCURSOR. Этих показателей доступны только для чтения. На стандартные, низкой DPI систем этих показателей устанавливаются 32 x 32 пикселей (32. байтов в строку). Когда система загружает курсоры в виде стандартных функция LoadCursor, курсор растягивается к этому измерению.

The system also provides the SetSystemCursor API function that you can use to change the system cursor for specific categories. You can use this function to set a cursor of any size. However, you must call the function programmatically, and you can only use it to set a cursor for a specific category. You cannot use it to make all cursors on the system the same size.
- - -
Система также предоставляет функцию SetSystemCursor API, которые можно использовать для изменения системы курсора для конкретных категорий. Эту функцию можно использовать для установки указателя любого размера. Однако необходимо вызвать функцию программным путем, и можно использовать только он для установки указателя для определенной категории. Его нельзя использовать вносить все курсоры в системе тот же размер.

Выводы:
1) Хм, значит лазейка вроде как и есть: если нужен курсор нестандартного размера, можно подменить один из системных курсоров своим...
Только я вот не соображу, как мы его тогда загрузим, если LoadCursor или LoadCursorFromFile его сожмут до стандартных размеров:
var C: Cardinal;
begin
 C:=LoadCursorFromFile("my.cur");
 SetSystemCursor(C, OCR_NORMAL);
end;

У меня курсор 48x48 уменьшается до 32x32

2) Работаем только под системой с high DPI, например, DPI 200, и система расширит допустимые размеры курсора до 64x64 (при DPI 120 действует 32x32, промежуточные значения не проверял).
Но выглядеть всё этоизвращение будет вот так:
http://pinpic.ru/img/1447/6ed7f72423f34e5deb890449f458b06a.jpg.html
Страшно, да? :)))

3) А зачем вообще нужен курсор 48x48, да ещё и анимированный? Это какая-то игрушка создаётся? Тогда лучше поискать другие пути ;-)
Вообще, в Microsoft, судя по всему вышеизложенному, не одобряют курсоры больше 32x32 и считают это лишним для пользователей... Так что и правда стоит уменьшить анимацию до 32x32 (самое простое), либо отрисовывать анимацию на экране (ой, ё...)


 
fedor-dveniatin   (2009-08-15 01:29) [10]


> TIF ©   (15.08.09 01:15) [9]

Когда я писал, что не получилось, я имел в виду, что не получилось решить задачу в [0].
А то, что описали вы, я понял и так же воспроизвел. Но, во-первых, как вы и говорите, курсор уменьшается, т.е. уже не выполняется поставленая задача. А во-вторых, происходит подмена системного курсора, которая сказывается на всех приложениях, что вообще не приемлимо, к тому же, так же не выполняется требование "загрузить для своей программы".
Попробовав и реализовав все это, я и пришел к выводу, что "Так и не получилось. =("


 
fedor-dveniatin   (2009-08-15 01:32) [11]


> TIF ©   (15.08.09 01:15) [9]
> http://www.microsofttranslator.com/BV.aspx?ref=Internal&a=http://support.microsoft.com/default.aspx/kb/307213

А вот за это, действительно спасибо ;)


 
CSS   (2009-08-16 03:43) [12]

Я как-то делал курсор любого размера...
Но это только для своей программы (формы), а не для всей системы... Подойдёт? Могу поискать... =)
Только он при больших размерах почему-то начинает мерцать неприятно... =(

А вообще мне интересно как сделана программа "StarDock CursorXP"...
Полупрозрачный курсор 64х64 с анимацией... Для всей системы... И не мерцает как у меня было... =(


 
fedor-dveniatin   (2009-08-16 11:14) [13]


> CSS   (16.08.09 03:43) [12]
> Я как-то делал курсор любого размера...Но это только для
> своей программы (формы), а не для всей системы... Подойдёт?

Именно это мне и надо. Было бы замечатель, если бы вы это нашли.


 
KilkennyCat ©   (2009-08-16 11:25) [14]

1. убить системный курсор.
2. при изменении мышиных координат отобразить любую свою картинку с текущими координатами мыши
в чем сложность-то?
а мерцание - это всего лишь неправильная реализация вывода графики.


 
CSS   (2009-08-20 05:17) [15]

> Именно это мне и надо. Было бы замечатель, если бы вы это нашли.

Это я когда-то на каком-то форуме отыскал... ^___^
Воть:

procedure TForm1.Button1Click(Sender: TObject);
begin
Screen.Cursors[1]:=LoadImage(hInstance, PChar("C:\Cur_32bit_128x128.cur"), IMAGE_CURSOR, 128, 128, LR_LOADFROMFILE);
Screen.Cursor:=1;
end;


Как говориться, ларчик просто открывался... =)


 
CSS   (2009-08-20 05:19) [16]

Оппа... А она и вне программы срабатывает...

SetSystemCursor(LoadImage(hInstance, PChar("C:\Cur_32bit_128x128.cur"), IMAGE_CURSOR, 128, 128, LR_LOADFROMFILE), OCR_NORMAL);


 
fedor-dveniatin   (2009-08-20 11:34) [17]


> CSS   (20.08.09 05:17) [15]

Да, действительно... Спасибо большое.



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

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

Наверх





Память: 0.49 MB
Время: 0.005 c
2-1250149664
BornInUSSR
2009-08-13 11:47
2009.10.18
MDI-интерфейс


6-1207054869
SpellCaster
2008-04-01 17:01
2009.10.18
Асинхронные сокеты "забивают" очередь сообщений


1-1219767772
Dr.Andrew
2008-08-26 20:22
2009.10.18
При переключении между чекбоксами - ошибка Stack overflow.


2-1250834158
ford
2009-08-21 09:55
2009.10.18
TRxDBRichEdit не выводит popupmenu


15-1249326864
TStas
2009-08-03 23:14
2009.10.18
Где Ворд хранит словарь?





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