Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 25.12.2020, 15:00   #1
IvaNoff2020
Пользователь
 
Регистрация: 09.12.2020
Сообщений: 28
По умолчанию конвертер изображения в *.cur

Никто не в курсе: можно ли изображение перевезти в *.cur.
Допустим построил линию длиной 5мм.
В переводе на пиксели это будет 5*3.793627 = 18.968135 px
и его бы желательно сохранить в *.cur файл
IvaNoff2020 вне форума Ответить с цитированием
Старый 29.12.2020, 11:24   #2
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 107
По умолчанию

На коленке сварганить конвертор так просто не получится. Надо знать спецификацию ico формата. cur формат похож на ico формат. Начать можно со статей по формату ico тут и тут
Так же можно использовать свободную библиотеку которая может конвертировать в ico формат, например FreeImage и от нее плясать.
ichi вне форума Ответить с цитированием
Старый 29.12.2020, 12:45   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,561
По умолчанию

попробуй программу AWicons Pro 9.1.6. она работает с графическими файлами иконок и курсора.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 30.12.2020, 14:27   #4
IvaNoff2020
Пользователь
 
Регистрация: 09.12.2020
Сообщений: 28
По умолчанию

ichi, Спасибо за совет.
Ок. Сейчас начнем изучать скинутые вами ссылки. Времени в принципе разбираться много. Впереди новогодние праздники))
На данный момент что у меня готово: у меня рисуется "резиновый" курсор меняется в зависимости от введенного размера в пикселях и сохраняется в *.bmp формате.
Осталось с конвертером разобраться. А уж потом подгружать создаваемый во время работы программы курсор не составит труда.
IvaNoff2020 вне форума Ответить с цитированием
Старый 30.12.2020, 14:41   #5
IvaNoff2020
Пользователь
 
Регистрация: 09.12.2020
Сообщений: 28
По умолчанию

NetSpace, "Чужеродные" программы не прокатят.
Я в курсе, что существует куча сайтов делающих подобное онлайн.
Но так как курсор по сути это для моей программы линейка. И ее размер каждый раз меняется.
Цель реализовать это в lazarus. Ладно, разберемся. Если какие возникнут подзадачи для решения моей задачи, задам. Всем спасибо.
IvaNoff2020 вне форума Ответить с цитированием
Старый 30.12.2020, 14:57   #6
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,209
По умолчанию

А что мешает сделать его невидимым, просто с перемещением показывая на соответствующем месте нужное изображение?
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 30.12.2020, 15:09   #7
IvaNoff2020
Пользователь
 
Регистрация: 09.12.2020
Сообщений: 28
По умолчанию

MihalNik, Я хочу сначала с конвертером разобраться. Если не получится, тогда будем придумывать костыли. Но спасибо за совет.
IvaNoff2020 вне форума Ответить с цитированием
Старый 30.12.2020, 20:14   #8
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,469
По умолчанию

Цитата:
Сообщение от IvaNoff2020 Посмотреть сообщение
Я хочу сначала с конвертером разобраться.
Там всё элементарно. Если у вас есть готовый и подходящий BMP, то посмотрите описание win API CreateIconIndirect, она создает значок ico или курсор. Примеров применения на Делфи предостаточно, не стану тут их выкладывать.
kvitaliy на форуме Ответить с цитированием
Старый 11.01.2021, 10:18   #9
IvaNoff2020
Пользователь
 
Регистрация: 09.12.2020
Сообщений: 28
По умолчанию

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
Там всё элементарно. Если у вас есть готовый и подходящий BMP, то посмотрите описание win API CreateIconIndirect, она создает значок ico или курсор. Примеров применения на Делфи предостаточно, не стану тут их выкладывать.

Что-то не идет дело. Синтаксис функции CreateIconIndirect нашел следующее:

Код:
HICON CreateIconIndirect
(
	PICONINFO piconinfo
);
Не совсем понятно что здесь делается.
Есть еще пример битмапа в иконку (ico). Но он выдает ошибку на этапе создания битмапа маски:
"AndMask := TBitmap.Create;"

процедура следующая:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
   IconSizeX : integer;
   IconSizeY : integer;
   AndMask : TBitmap;
   XOrMask : TBitmap;
   IconInfo : TIconInfo;
   icons : TIcon;
begin
  {Получаем размер иконки}
   IconSizeX := GetSystemMetrics(SM_CXICON);
   IconSizeY := GetSystemMetrics(SM_CYICON);

  {Создаём маску "And"}
   AndMask := TBitmap.Create;
   AndMask.Monochrome := true;
   AndMask.Width := IconSizeX;
   AndMask.Height := IconSizeY;

  {Рисуем на маске "And"}
   AndMask.Canvas.Brush.Color := clWhite;
   AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
   AndMask.Canvas.Brush.Color := clBlack;
   AndMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);

  {Рисуем для теста}
   Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask);

  {Создаём маску "XOr"}
   XOrMask := TBitmap.Create;
   XOrMask.Width := IconSizeX;
   XOrMask.Height := IconSizeY;

  {Рисуем на маске "XOr"}
   XOrMask.Canvas.Brush.Color := ClBlack;
   XOrMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
   XOrMask.Canvas.Pen.Color := clRed;
   XOrMask.Canvas.Brush.Color := clRed;
   XOrMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);

  {Рисуем в качестве теста}
   Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask);

  {Создаём иконку}
   icons := TIcon.Create;
   IconInfo.fIcon := true;
   IconInfo.xHotspot := 0;
   IconInfo.yHotspot := 0;
   IconInfo.hbmMask := AndMask.Handle;
   IconInfo.hbmColor := XOrMask.Handle;
   icons.Handle := CreateIconIndirect(IconInfo);

  {Уничтожаем временные битмапы}
   AndMask.Free;
   XOrMask.Free;

  {Рисуем в качестве теста}
   Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, icons);

  {Объявляем иконку в качестве иконки приложения}
   Application.Icon := icons;

  {генерируем перерисовку}
   InvalidateRect(Application.Handle, nil, true);

  {Освобождаем иконку}
   icons.Free;

end;
Может чуть подробнее подскажешь?

Само изображение я делаю так:
Image1.Picture.Bitmap.SaveToFile('F :\1.bmp');

Здесь все работает, создается
IvaNoff2020 вне форума Ответить с цитированием
Старый 11.01.2021, 12:52   #10
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,265
По умолчанию

Не знаю чего он в D7 и FPC по разному работает. Нашло комбинацию которая и там и там работает:
создаю маску и её передаю в качестве хэндла и фон у ксора поменял.
Цитата:
procedure TForm1.Button1Click(Sender: TObject);
var
IconSizeX : integer;
IconSizeY : integer;
AndMask : TBitmap;
XOrMask : TBitmap;
IconInfo : TIconInfo;
icons : TIcon;
begin
{Получаем размер иконки}
IconSizeX := GetSystemMetrics(SM_CXICON);
IconSizeY := GetSystemMetrics(SM_CYICON);

{Создаём маску "And"}
AndMask := TBitmap.Create;
AndMask.Monochrome := true;
AndMask.Width := IconSizeX;
AndMask.Height := IconSizeY;

{Рисуем на маске "And"}
AndMask.Canvas.Brush.Color := clWhite;
AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
AndMask.Canvas.Brush.Color := clBlack;
AndMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);
AndMask.Mask(clWhite);

{Рисуем для теста}
Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask);

{Создаём маску "XOr"}
XOrMask := TBitmap.Create;
XOrMask.Width := IconSizeX;
XOrMask.Height := IconSizeY;

{Рисуем на маске "XOr"}
XOrMask.Canvas.Brush.Color := clBlack;
XOrMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
XOrMask.Canvas.Pen.Color := clRed;
XOrMask.Canvas.Brush.Color := clRed;
XOrMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);

{Рисуем в качестве теста}
Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask);

{Создаём иконку}
icons := TIcon.Create;
IconInfo.fIcon := true;
IconInfo.xHotspot := 0;
IconInfo.yHotspot := 0;
IconInfo.hbmMask := AndMask.MaskHandle;
IconInfo.hbmColor := XOrMask.Handle;
icons.Handle := CreateIconIndirect(IconInfo);

{Уничтожаем временные битмапы}
AndMask.Free;
XOrMask.Free;

{Рисуем в качестве теста}
Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, icons);

{Объявляем иконку в качестве иконки приложения}
Application.Icon := icons;

{генерируем перерисовку}
InvalidateRect(Application.Handle, nil, true);

{Освобождаем иконку}
icons.Free;

end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение изображения с ФРАГМЕНТОМ другого изображения egorka2134 Общие вопросы Delphi 8 13.08.2013 18:04
Классы. Чтение и создание .bmp изображения. Пропадает 1 пиксел при создании изображения. s-mumrik Visual C++ 3 12.04.2013 20:21
Сохранить текущий курсор в файл .cur Тоба Win Api 9 17.05.2011 05:41
Загрузка курсора из фаила *.cur и/или *.res Ciberal Общие вопросы Delphi 2 29.10.2008 19:25
конвертер KORT Свободное общение 3 27.08.2007 00:47


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS