Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2015, 01:43   #1
Karazon
Пользователь
 
Регистрация: 05.10.2015
Сообщений: 16
По умолчанию image двигается как курсор

нужно чтобы картинка двигалась параллельно курсора по форме. я поставил таймер и написал туда
Код:
if ((ScreenToClient(Mouse->CursorPos).x==Image1->Left+25)||(ScreenToClient(Mouse->CursorPos).x<Image1->Left+25) )
Image2->Left=Image1->Left;
else
if ((ScreenToClient(Mouse->CursorPos).x==Image1->Left+810)||(ScreenToClient(Mouse->CursorPos).x>Image1->Left+810) )
Image2->Left=Image1->Left+810;
else
Image2->Left = ScreenToClient(Mouse->CursorPos).x-25;
картинка двигается и не выходит за форму но при движение она моргает как избавится от моргания?

Последний раз редактировалось Stilet; 19.10.2015 в 09:35.
Karazon вне форума Ответить с цитированием
Старый 19.10.2015, 09:01   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

https://en.wikipedia.org/wiki/Multiple_buffering
waleri вне форума Ответить с цитированием
Старый 19.10.2015, 09:48   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А чего не привязать к WM_MOVE или OnMouseMove? И таймера не надо
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.10.2015, 10:51   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Эти события будут приходить только когда курсор в своем окне а через таймер можно следить за курсором по всему экрану.

Другое дело, что именно требуется...
waleri вне форума Ответить с цитированием
Старый 19.10.2015, 10:53   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
нужно чтобы картинка двигалась параллельно курсора по форме
Как бы намекает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.10.2015, 13:51   #6
Karazon
Пользователь
 
Регистрация: 05.10.2015
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А чего не привязать к WM_MOVE или OnMouseMove? И таймера не надо
я попробывал OnMouseMove на форму OnMouseMove поставить и вписать код картинка не двигается так как на форме находится фоновая картинка если у неё поставить OnMouseMove то всё равно картинка при движение моргает и если зайти курсором на кнопку картинка останавливается, а WM_MOVE я не знаю как через это сделать
Karazon вне форума Ответить с цитированием
Старый 22.10.2015, 02:02   #7
sklees
Пользователь
 
Регистрация: 21.04.2013
Сообщений: 23
По умолчанию

Архив с исходником (на Delphi c exe-файлом)
animate.rar

можно применить функцию API
Код:
BitBlt(Canvas->Handle, 0, 0, ClientWidth, ClientHeight,
         BackGnd1->Canvas.Handle, 0, 0, SRCCOPY);
тогда изображение параллельно мыши не мигает на клиентском изображении формы а как через это сделалось я не знаю

Последний раз редактировалось sklees; 22.10.2015 в 02:15.
sklees вне форума Ответить с цитированием
Старый 28.10.2015, 04:38   #8
sklees
Пользователь
 
Регистрация: 21.04.2013
Сообщений: 23
По умолчанию

как-то-так
Код:
TRect *OldMouseBounds;
TRect *MouseBounds;
Graphics::TBitmap *FonImage1;
Graphics::TBitmap *FonImage2;
Graphics::TBitmap *MouseImage;

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MouseImage = new Graphics::TBitmap;
MouseImage->LoadFromResourceName((int)HInstance, "IM101");
FonImage1 = new Graphics::TBitmap;
FonImage1->LoadFromResourceName((int)HInstance, "IM102");
FonImage1->SetSize(Form1->Width, Form1->Height);
FonImage2 = new Graphics::TBitmap;
FonImage2->SetSize(Form1->Width, Form1->Height);
FonImage2->Assign(FonImage1);
//-----
MouseBounds = new TRect;
MouseBounds->Left = 0;
MouseBounds->Top = 0;
MouseBounds->Right = MouseImage->Width;
MouseBounds->Bottom = MouseImage->Height;
//
OldMouseBounds = new TRect;
OldMouseBounds->Left = 0;
OldMouseBounds->Top = 0;
OldMouseBounds->Right = MouseImage->Width ;
OldMouseBounds->Bottom = MouseImage->Height;
//
Application->OnIdle = IdleLoop;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdleLoop(TObject*, bool& done)
{
	done = false;
	DrawMouseImage();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DrawMouseImage()
{
 OldMouseBounds->Left = MouseBounds->Left;
 OldMouseBounds->Top = MouseBounds->Top;
 //
 MouseBounds->Left = ScreenToClient(Mouse->CursorPos).x;
 MouseBounds->Top = ScreenToClient(Mouse->CursorPos).y;
 //-----
 BitBlt(FonImage2->Canvas->Handle, OldMouseBounds->Left, OldMouseBounds->Top, OldMouseBounds->Right, OldMouseBounds->Bottom,
		   FonImage1->Canvas->Handle, OldMouseBounds->Left, OldMouseBounds->Top, SRCCOPY);
 BitBlt(FonImage2->Canvas->Handle, MouseBounds->Left, MouseBounds->Top, MouseBounds->Right, MouseBounds->Bottom,
		   MouseImage->Canvas->Handle, 0, 0, SRCCOPY);
 BitBlt(Form1->Canvas->Handle, OldMouseBounds->Left-2, OldMouseBounds->Top-2, OldMouseBounds->Right+2, OldMouseBounds->Bottom+2,
		   FonImage2->Canvas->Handle, OldMouseBounds->Left-2, OldMouseBounds->Top-2, SRCCOPY);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormPaint(TObject *Sender)
{
 BitBlt(Form1->Canvas->Handle, 0, 0, FonImage1->Width, FonImage1->Height,
		   FonImage1->Canvas->Handle, 0, 0, SRCCOPY);
}
//---------------------------------------------------------------------------
sklees вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кнопка не двигается(( phasha Помощь студентам 3 30.10.2011 18:10
Курсор под Image-м BuT@JL Мультимедиа в Delphi 8 18.10.2009 10:46
Курсор на Image ! or ? ZuBy Общие вопросы Delphi 14 01.10.2009 16:23
уберите курсор (в конце программы верните курсор), HECTOR.A. Паскаль, Turbo Pascal, PascalABC.NET 2 05.06.2009 20:10
ШАрик двигается по петли jomix Помощь студентам 3 01.06.2007 12:46