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

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

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

Есть два 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2016, 16:45
Ответы с готовыми решениями:

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

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

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

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

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32488 / 20974 / 8115
Регистрация: 22.10.2011
Сообщений: 36,246
Записей в блоге: 7
05.04.2016, 16:56 2
Гадание по фото было бы более эффективно. Где и как создается Image2, каков его размер изначально - это что, надо по ауре вычислить?
0
10 / 7 / 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
32488 / 20974 / 8115
Регистрация: 22.10.2011
Сообщений: 36,246
Записей в блоге: 7
05.04.2016, 17:05 4
Лучше б ты минимальный тестовый проект прикрепил, чтобы открыть и посмотреть, воспроизвести ошибку. Заодно проверим, воспроизводится ли проблема на чистом проекте, или у тебя там уже настолько много накуралесилось, что конфликтует с уже существующим кодом.
0
10 / 7 / 3
Регистрация: 14.07.2015
Сообщений: 284
05.04.2016, 17:07  [ТС] 5
Сейчас

Добавлено через 56 секунд
У меня лазарус на другом компе скопировать надо
0
10 / 7 / 3
Регистрация: 14.07.2015
Сообщений: 284
05.04.2016, 17:23  [ТС] 6
выдает ошибку некорректнй файл
Вложения
Тип файла: rar Unit1.rar (2.5 Кб, 3 просмотров)
0
10 / 7 / 3
Регистрация: 14.07.2015
Сообщений: 284
05.04.2016, 17:24  [ТС] 7
а закинул
0
74 / 65 / 12
Регистрация: 09.02.2016
Сообщений: 880
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2016, 04:58
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru