Загрузка произвольного курсора из файла

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Загрузка произвольного курсора из файла

Сообщение Padre_Mortius »

Подскажите, возможно ли использование внешних файлов с курсорами. Интересует кросплатформенный вариант. Гугление по данному поводу ничего не дало. Буду признателен за простой пример.
Павел Ишенин
постоялец
Сообщения: 475
Зарегистрирован: 24.03.2007 09:16:52

Сообщение Павел Ишенин »

Простой пример лежит в examples\cursors
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

В примере используется загрузка из ресурсов. Хотелось бы возможность на лету менять курсор без перекомпиляции проекта.
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

В Windows можно сделать так: http://lazarus.su/other/zagruzka-kursora-iz-fayla.html

Кросс-платформенный способ, увы, не знаю.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Пишем свою следующую функцию (не забыв добавить модуль LCLType):

Код: Выделить всё

function LoadCursorFromFile(const aFileName: String): HCURSOR;
var
 cur: TCursorImage;
begin
  cur:=TCursorImage.Create;
  cur.LoadFromFile(aFileName);
  Result:=cur.ReleaseHandle;
  cur.Free;
end;


после вызываем:

Код: Выделить всё

...
  if OpenDialog1.Execute then
   begin
    Screen.Cursors[1]:=LoadCursorFromFile(UTF8ToSys(OpenDialog1.FileName));
    Panel1.Cursor:=1;
   end;
...
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

что-то не заработал сей способ(((

Добавлено спустя 1 час 25 минут 24 секунды:
но все заработало, когда оформил все одной процедурой.

Код: Выделить всё

procedure TMainForm.MenuItemCursorClick(Sender: TObject);
Var
   Cur: TCursorImage;
begin
   if OpenDialogCursor.Execute then
   begin
    Cur := TCursorImage.Create;
  try
    Cur.LoadFromFile(UTF8ToSys(OpenDialogCursor.FileName));
    Screen.Cursors[1024] := Cur.ReleaseHandle;
  finally
    Cur.Free;
  end;
  Screen.Cursor := 1024;
   end else begin end;
end;                         
Ответить