11 / 8 / 3
Регистрация: 14.07.2015
Сообщений: 284
1

Как по нажатию мыши менять TImage и перерисовывать на него bmp с другого TImage?

05.04.2016, 16:45. Показов 1453. Ответов 7

Author24 — интернет-сервис помощи студентам
Есть два TImage. На Image1 картинка TBitmap, Image1 растянут на всю форму. При нажатии на Image1 и OnMouseMove
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
x1, y1: integer;
...
OnMouseDown:
x1 := X;
y1 := Y;
mousepressed := true;
Image2.Left := X;
Image2.Top := Y;
 
OnMouseMove:
if X > x1 then Image2.Width := X - x1 else
begin
 Image2.Left := X;
 Image2.Width := x1 - X;
end;
if Y > y1 then Image2.Height := Y - y1 else
begin
 Image2.Top := Y;
 Image2.Height := y1 - Y;
end;
BitBlt(Image2.Canvas.Handle, Image2.Left, Image2.Top, Image2.Width, Image2.Height,
  Image1.Canvas.Handle, 0, 0, SRCCOPY);
Что я делаю не правельно ,?

Добавлено через 6 минут
Кроме черного квадратика ничего нет

Добавлено через 16 минут
Исправил на
Delphi
1
2
BitBlt(Image2.Canvas.Handle, 0, 0, Image2.Width, Image2.Height,
  Image1.Canvas.Handle, Image2.Left, Image2.Top, SRCCOPY);
Теперь работает, но ширина-высота Image2 ограничена примерно 20-30 пикселями
0
05.04.2016, 16:45
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.04.2016, 16:45
Ответы с готовыми решениями:

Как по нажатию кнопки поместить на форму компонент TImage и загрузить в него рисунок?
Помогите pliz, нужно что бы при нажатии кнопки, на определённой форме многооконного приложения создавался компонент типа TImage с...

Как задать другую картинку в TImage по нажатию кнопки
Как сделать так, чтобы по нажатию кнопки компоненту TImage присваивалась новая картинка? Нужна сама процедура замены изображения. Чтобы...

Как задать другую картинку в TImage по нажатию кнопки?
Как сделать так, чтобы по нажатию кнопки компоненту TImage присваивалась новая картинка? Нужна сама процедура замены изображения. Чтобы...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33068 / 21370 / 8210
Регистрация: 22.10.2011
Сообщений: 36,687
Записей в блоге: 9
05.04.2016, 16:56 2
Гадание по фото было бы более эффективно. Где и как создается Image2, каков его размер изначально - это что, надо по ауре вычислить?
0
11 / 8 / 3
Регистрация: 14.07.2015
Сообщений: 284
05.04.2016, 17:05  [ТС] 3
Image2 уже существует на форме, расположен произвольно.

Как я писал, копирование заработало при
Delphi
1
2
BitBlt(Image2.Canvas.Handle, 0, 0, Image2.Width, Image2.Height,
  Image1.Canvas.Handle, Image2.Left, Image2.Top, SRCCOPY);
Теперь работает, но ширина-высота Image2 ограничена примерно 20-30 пикселями
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33068 / 21370 / 8210
Регистрация: 22.10.2011
Сообщений: 36,687
Записей в блоге: 9
05.04.2016, 17:05 4
Лучше б ты минимальный тестовый проект прикрепил, чтобы открыть и посмотреть, воспроизвести ошибку. Заодно проверим, воспроизводится ли проблема на чистом проекте, или у тебя там уже настолько много накуралесилось, что конфликтует с уже существующим кодом.
0
11 / 8 / 3
Регистрация: 14.07.2015
Сообщений: 284
05.04.2016, 17:07  [ТС] 5
Сейчас

Добавлено через 56 секунд
У меня лазарус на другом компе скопировать надо
0
11 / 8 / 3
Регистрация: 14.07.2015
Сообщений: 284
05.04.2016, 17:23  [ТС] 6
выдает ошибку некорректнй файл
Вложения
Тип файла: rar Unit1.rar (2.5 Кб, 6 просмотров)
0
11 / 8 / 3
Регистрация: 14.07.2015
Сообщений: 284
05.04.2016, 17:24  [ТС] 7
а закинул
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 902
Записей в блоге: 16
06.04.2016, 04:58 8
а что, BitBlt работает быстрее CopyRect ?

мне volvo некоторое время назад предложил работать через bitMap - у меня все отлично работает
вот пример притянутый за уши но рабочий:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.FormCreate(Sender: TObject);
var 
  d, s:trect;
  bm:Tbitmap;
begin
// исходное изображение 
   Image1.Canvas.Brush.Color:=$888888;
   Image1.Canvas.RoundRect(100,Image1.Height-40,130,Image1.Height-10,5,5);
  
// куда положить
   d.Top:=0;
   d.Left:=0;
   d.Right:=Image1.Width;
   d.Bottom:=Image1.Height-50;
 
// откуда положить
   s.Top:=50;
   s.Left:=0;
   s.Right:=Image1.Width;
   s.Bottom:=Image1.Height;
 
   bm:=tbitmap.Create;
   bm.Assign(Image1.Picture.Bitmap); // чтобы не мудрить взял исходную картинку и с нее буду копировать
   Image1.Canvas.CopyRect(d,bm.canvas,s);
end;
1
06.04.2016, 04:58
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.04.2016, 04:58
Помогаю со студенческими работами здесь

Мерцание компонента Timage и перемещение Timage при нажатии
Здравствуйте! Помогите убрать мерцание компонента Timage при изменении размера. Нашел в поиске, советуют так: procedure...

bmp-изображения и компонента TImage
Здраствуйте! Подскажите, пожалуйста, решение проблеми. Задача - скопировать определённые пиксели изображения bmp1 в изображение...

TImage/bmp/ico и движение
Добрый день, ребят! Есть идеи как указывать направление движения объекта, если таковое известно? Требуется рисовать стрелку. Можно было...

Could not find a match for 'TImage::TImage()'
Решил поработать с классами. Ну и заодно разобраться с firemonkey. Сразу же нарвался на такую штуку. Вроде в firemonkey есть TImage,...

Изменение значений массива по нажатию на область TImage
Хочется сделать игру подобную Сапёру, но что бы при нажатии на клетку открывалась другая форма и в ней можно выбрать число каким...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Обработка массивов с помощью циклов в JavaScript
hw_wired 12.02.2025
Массивы в JavaScript - это упорядоченные наборы элементов, где каждый элемент имеет свой индекс, начиная с нуля. Они невероятно гибки в использовании, позволяя хранить данные любых типов - числа,. . .
Создание каталога и всех родительских каталогов с помощью Python
hw_wired 12.02.2025
Работа с файловой системой - одна из ключевых задач при разработке программного обеспечения. Особенно часто возникает потребность создавать каталоги для хранения файлов, логов, временных данных и. . .
Возврат файла к состоянию указанного коммита Git
hw_wired 12.02.2025
Git - распределенная система контроля версий, без которой сложно представить современную разработку программного обеспечения. Когда речь заходит о восстановлении файлов, Git предоставляет целый. . .
Сброс локальной ветки Git до состояния HEAD удаленного репозитория
hw_wired 12.02.2025
Работая в команде разработчиков, часто сталкиваешься с ситуацией, когда локальная версия кода существенно отличается от той, что находится в центральном репозитории. Такое расхождение может. . .
Запрет подсветки выделения текста с помощью CSS
hw_wired 12.02.2025
Выделение текста - одна из базовых возможностей взаимодействия пользователя с контентом на веб-странице. Однако в некоторых случаях стандартное поведение выделения может нарушать задуманный дизайн. . .
Выполнение другой программы из приложения Python
hw_wired 12.02.2025
При разработке современных приложений часто возникает потребность в запуске и взаимодействии с другими программами прямо из кода. Python предоставляет множество эффективных средств для выполнения. . .
Отличия между let и var в JavaScript
hw_wired 12.02.2025
Работа с переменными - один из основных моментов при написании программ на JavaScript. От правильного объявления и использования переменных зависит не только читаемость кода, но и его надежность, а. . .
Подключение файла JavaScript в других файлах JavaScript
hw_wired 12.02.2025
Самый современный и рекомендуемый способ подключения JavaScript-файлов - использование системы модулей ES6 с ключевыми словами 'import' и 'export'. Этот подход позволяет явно указывать зависимости. . .
Отмена изменений, не внесенных в индекс Git
hw_wired 12.02.2025
Управление изменениями в Git - одна из важнейших задач при разработке программного обеспечения. В процессе работы часто возникают ситуации, когда нужно отменить внесенные изменения, которые еще не. . .
Что такое px, dip, dp, and sp в Android
hw_wired 12.02.2025
При разработке мобильных приложений для Android одним из ключевых вызовов становится адаптация интерфейса под различные устройства. А ведь их действительно немало - от компактных смартфонов до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru