Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> onmousemove, мигание  
V
    Опции темы
darkida
Дата 27.1.2010, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Как избавиться от мигания при использовании onmousemove? Или какая есть этому альтернатива?
Ну вот к примеру я хочу создать кнопку, ставлю изображение и на каждое действие изменяю её на другое. На onmousemove, onclick, onup, ondown. Так если мышкой водить по этому изображению начинают идти полосы. Как быть?
PM MAIL   Вверх
darkida
Дата 27.1.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Блин, хотя может быть это потому что использую Delphi 6, не помню сейчас как работало на 7. Проверьте пожалуйста.

Ну а если же на последних версиях такая же баида. То хорошо было бы менять картинки используя IF. К примеру: если курсор мышы находиться в таком то квадрате то такое то изображение иначе другое. 

Это сообщение отредактировал(а) darkida - 27.1.2010, 16:07
PM MAIL   Вверх
darkida
Дата 27.1.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Ой, да перло. Можно с viseble играть, но вот тока почему то не работает. Почему? Что не так? Или надо что то дополнительно прописывать вот к этому: 
image1.Visible:=true;

Хотя тоже не уверен в том что поможет. Ведь она будет выполняться ровно столько же сколько мы будем двигать мышью.

Помогите народ... 
Неужто у всех все нормально с этим.

PM MAIL   Вверх
darkida
Дата 27.1.2010, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Код

procedure CMMouseEnter(var msg:TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
..
..
..
procedure MyComponent.CMMouseEnter(var msg:TMessage);
begin

inherited;
{действия на вход мыши в область компонента}
end;

procedure MyComponent.CMMouseLeave(var msg: TMessage);
begin

inherited;
{действия на покидание мыши области компонента}
end; 


Нашел вот это. Но воспользоваться никак не смог. Походу для них еще обработчик надо писать.

Я запарился ждать разумный вариант. И сделал пока так чтоб глаза не резала. Создал shape и на него событие onmove и на image загружаю картинку на этот shape наложил еще один shape чуть меньше размером опять onmove и на тот же image другую картинку,  а потом тока сам image опять же меньший размером предыдущих shapov. Вот такую вот глупость пришлось делать, и если умных ответов не будет,  то может кому-нибудь то поможет.  
PM MAIL   Вверх
~FoX~
Дата 27.1.2010, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



darkida, Ух, какая активность...
Мигание происходит потому что при каждом движении ты свою картинку подгружаешь, рисуешь или чего ты там с ней делаешь... работа с графикой вообще процесс напряжный, для ВЦЛ-я.
Заведи специальный флажок булевый глобальный, при событии онмаусмув проверяй его состояние и если он, допустим истеный, то меня картинку и ставь его в ложь..
Код

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if flag = true then begin
    //Меняем картинку
  end;
  flag := false;
end;

А при остальных событиях  
Цитата

onclick, onup, ondown
 возвращай его в истину...

Это сообщение отредактировал(а) ~FoX~ - 27.1.2010, 21:24


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
darkida
Дата 27.1.2010, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



О дождался.
А то как чокнутый сам спрашиваю. И сам себе отвечаю и сам идеи себе талкаю. Но это я потому что память плохая и с блокнотами проблема и комп люблю форматировать.  
Мда точно что-то не подумал. С флажками то. ))

Пусть гооглик будет всегда здоровым. ))) Вот нашел ещё методы, испробовал - рабочие. Выложу чтоб другие не тратили на поиски свое время.  И мне легче было потом найти.
Код

const  
  BS_UP=1001;         //последнее событие было mouseup  
  BS_DOWN=1002;       //последнее событие было mousedown  
  BS_HOVER=1003;      //последнее событие было mousemove  
  BS_FORM=1004;  //мышь двигается по форме  

а потом присваиваем их:
Код

   procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,  
   Y: Integer);  
   begin  
   if Image1.Tag<>BS_HOVER then  
   SetState(Image1,IM_HOVER);  
   Image1.Tag:=BS_HOVER;  
   end;  
  
   procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;  
  10.   Shift: TShiftState; X, Y: Integer);  
   begin  
   if Image1.Tag<>BS_UP then  
   SetState(Image1,IM_MAIN);  
   Image1.Tag:=BS_UP;  
   end;  
 
   procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;  
   Shift: TShiftState; X, Y: Integer);  
   begin  
   if Image1.Tag<>BS_DOWN then  
   SetState(Image1,IM_DOWN);  
  Image1.Tag:=BS_DOWN;  
  end;  
   
  procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,  
  Y: Integer);  
  begin  
   if Image1.Tag<>BS_FORM then  
   SetState(Image1,IM_MAIN);  
   Image1.Tag:=BS_FORM;  
   end;  
 

Хотя можно было тока часть скинуть и так понятно. Ну ладно.

 аниме кнопки без мирцания

2 метод 

B:Bool; //Объявите B где-нибудь после implementation

В FormCreate включите следующее

B:=True;
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, 0, @B,  SPIF_SENDCHANGE)

тоже помогает. 

Так что методы есть. АЖ целых 3. Хотя на vingrade не находил.
Спасибо FOX. Сейчас проверю. 
PM MAIL   Вверх
darkida
Дата 27.1.2010, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Вот ещё один вопрос, ну даже не вопрос а просьба. 
Скиньте кодинг как можно checkbox заменить image' ами. Что то не получается? Думаю что image надо присваивать TAG и считать клики? А как правильно не знаю. Помогите?  
PM MAIL   Вверх
~FoX~
Дата 28.1.2010, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



darkida, Одна тема - один вопрос!
Тебе галочки нужно заменить картинками или что?



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
darkida
Дата 28.1.2010, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Ну да. Так же две картинки. одна с галочкой другая без нее. И при клике менялись.  

Цитата

Одна тема - один вопрос!
 
Я думаю из-за такого вопроса не стоит создавать тему. Напиши пожалуйста код FOX. Заранее благодарен. 

Это сообщение отредактировал(а) darkida - 28.1.2010, 13:26
PM MAIL   Вверх
eXtr0gen
Дата 2.2.2010, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.2.2010

Репутация: нет
Всего: нет



Так же рекомендую поставить флаг DoubleBuffered в значение True. Тоже повышает скорость отрисовки. + более тщательно проработай процедуру перерисовки. Очень часто некоторые функции можно вынести за пределы цикла... 
PM MAIL   Вверх
darkida
Дата 3.2.2010, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Да DoubleBuffered  помогает. Но страшно жрет ресурсы. Если много картинок то потом начинает подвисать все.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1082 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.