Консультация № 25202
23.08.2005, 10:35
0.00 руб.
0 5 4
Здраствуйте уважаемые эксперты!
Вопрос такой. Как можно в ходе в ходе выполнения пргограммы менять курсор, а именно создавать свой курсор (к примеру в виде прямоугольника) в памяти, с нужными параметрами (высота, ширина) а потом подставлять его вместо текущего на оъекте

Обсуждение

Неизвестный
23.08.2005, 11:20
общий
это ответ
Здравствуйте, Danik!
Рисовать его на канве а потом подставить в Screen.Cursor.
примерно так
//...........
var
C: TCursor;
begin
c:= TCursor.Create;
c.Canvas. // Твои действия по рисованию.
c.Free;
// Прости если что-то не так. Под рукой небыло дельфи.
давно
Мастер-Эксперт
425
4118
23.08.2005, 12:08
общий
это ответ
Здравствуйте, Danik!
Будет куда лучше, если Вы загрузите саои курсоры в RES файл. Потом просто прилинкуете его к программе и будете загружать свои курсоры не отходя от кассы:
LoadCursor(Instance: THandle; CursorName: PChar): HCursor;
где Handle - это хэндл Вашей программы, CursorName - имя курсора.
Дельфийский редактор изображений позволяет создавать курсоры.
К сожалению, напрямую присвоить курсор не получится, поэтому нужно написать пару лишних строк кода. :)
У объекта screen есть свойство Cursors - массив курсоров. Предопределенные курсоры хранятся в массиве с индексом от -1 и ниже, значит Вы можете загнать свои курсоры в элементы с индексом от 1 и выше:
screen.Cursors[1]:=LoadCursor(Handle, ‘MY_CURSOR_PTICHKA‘);
screen.Cursors[1]:=LoadCursor(Handle, ‘MY_CURSOR_LAYGUSHKA‘);
screen.Cursors[1]:=LoadCursor(Handle, ‘MY_CURSOR_KVADRAT‘);
Далее индекс элемента массива присваивается курсору формы:
Form1.Cursor:=1;
Точно так-же можно присвоить курсор любому объекту:
Edit1.Cursor:=3;

Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
23.08.2005, 13:17
общий
это ответ
Здравствуйте, Danik!
Воспользуйтесь API-функцией <b>CreateCursor()</b>. После этого вы получите идентификатор этого курсора, по которому и следует изменять курсор для объекта. Однако этот способ - трудный. Гораздо проще заранее нарисовать курсоры и затем зарегистрировать их в системе, а после - использовать:

<font color=#0066CC>var h: THandle;
begin
h := LoadImage(0, ‘c:\Cursor.cur‘, IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE or LR_LOADFROMFILE);
if h = 0 then
ShowMessage(‘Ошибка при загрузке курсора.‘)
else
begin
Screen.Cursors[1] := h;
Button1.Cursor := 1;
end;
end;</font>

Этот простой пример загружает курсор из файла C:\Cursor.cur и устанавливает его для Button1.
Рисовать курсоры можно во многих редакторах. Лично я предпочитаю <b>AWIcons Pro</b>. Но можно использовать и <b>Resource Workshop</b>, идущий в комплекте <b>Delphi</b>. Удачи!
Неизвестный
23.08.2005, 14:15
общий
это ответ
Здравствуйте, Danik!
Курсор в памяти - это к описанию формата .cur - в интернет, удобнее брать готовый из ресурсов, что и делает большинство программ.
Как сделать чтобы был он - setcursor (смотри WINAPI SDK Refence из комплекта Delphi для полного описания)
Но проще как обычно : LoadCursor->SetCursor
P.S.
Не забывай возвращать курсор обратно, иначе это будет дурной тон.
Неизвестный
24.08.2005, 10:48
общий
Спасибо всем за ответы, но это не совсем точто надо, наверное я неправильно поставил вопрос. Загрузка из res и готовых фалов не подой дет так как курсоров надо очень много. Подробнее, пишу что-то вроде графич. редактора.Надо чтобы с изменением масштаба полотна и толщины пера менялся размер и форма курсора как в Фотошопе.
Форма ответа