Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
30th
Май
Рисование на картинке мышью
Posted by obzor under Delphi
Возникла необходимость рисовать на картинке в компоненте TImage.
У Image1 установлено свойство Stretch и Proportional в true.
На пустом компоненте рисуется без проблем в том месте где проходит курсор мыши следующим образом:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
with Image1.Canvas do begin
Pen.Color:= clNavy;
Pen.Width:= 10;
MoveTo(X, Y);
end;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then Image1.Canvas.LineTo(X, Y);
end;
Проблема возникает тогда, когда в компонент Image1 загружается какая-то картинка, реальный размер которой не равен размеру Image1. Благодаря установленным свойствам она подгоняется под размеры компонента, но при этом линии перестают рисоваться в том месте где находится курсор и той толщиной, которая была установлена. К примеру рисую в центре Image, а на картинке рисуется сбоку.
Пользуйтесь.
procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var xx,yy:real;
a,b :real;
begin
if Shift = [ssRight] then
begin
a:= ((Form1.Image2.Picture.Width)/Form1.Image2.Width);
b:= ((Form1.Image2.Picture.Height)/Form1.Image2.Height);
if a<=b then
begin
xx:= x*b;
yy:= y*b;
end else
begin
xx:= x*a;
yy:= y*a;
end;
Image2.Canvas.Pen.Color:=clRed;
Image2.Canvas.Pen.Width:=8;
Image2.Picture.Bitmap.Canvas.MoveTo(Trunc(xx),Trunc(yy));
Image2.Picture.Bitmap.Canvas.LineTo(Trunc(xx),Trunc(yy));
end;
end;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)