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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2008, 20:56   #1
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию "Две" onMouseMove у одного компонента. Как?

Здравствуйте.

Существует процедура onMouseMove у объекта Image1. В ней очень большой код, настолько что выполнение его отстает от действий пользователя, одним словом подтормаживает. Возникла необходимость разгрузить данный код, вынести часть кода (в котором вся проблема) в другую процедуру, которая будет переодически выполнятся (как onMouseMove пока пользователь двигает мышкой), при чем одновременно с основной процедурой onMouseMove. Как бы две процедуры onMouseMove у одного компонента.
Каким образом можно решить этот вопрос?

Экспериментировал с Таймером, но это не дало желаемых результатов.
Задумался о создании Image2 и вписать этот код туда, и вызывать процедуру Image2MouseMove в Image1MouseMove, но не знаю на сколько это рационально и как вызывать одну процедуру через другую...

Заранее благодарен!
лучший подарок женщине-программисту

Последний раз редактировалось chandrasecar; 27.10.2008 в 21:01.
chandrasecar вне форума Ответить с цитированием
Старый 27.10.2008, 21:11   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
В ней очень большой код, настолько что выполнение его отстает от действий пользователя, одним словом подтормаживает
У вас компьютер отстает от действий пользователя? Да вы феномен какой-то!
Цитата:
как вызывать одну процедуру через другую
Код:
procedure TForm1.Procedure1(Sender: TObject);
begin
Procedure2(self);
end;

procedure TForm1.Procedure2(Sender: TObject);
begin
Procedure3(self);
end;
...
Ну хоть какую-нибудь книжку по Дельфи почитайте, умоляю... Ну хотя бы начните читать!
mihali4 вне форума Ответить с цитированием
Старый 27.10.2008, 21:16   #3
xkor
 
Регистрация: 27.10.2008
Сообщений: 3
По умолчанию

Просто создание дополнительной процедуры никак не скажется на времени выполнения...
В вашем случае скорее всего следует использовать второй поток в котором выполнять "проблемную" часть кода, НО тут есть пара моментов: к компонентам лучше в дополнительном потоке не обращаться так как они не расчитаны на работу в нескольких потоках, ну а если надо всётаки работать с компонентами в обоих потоках делать это надо осторожно
xkor вне форума Ответить с цитированием
Старый 27.10.2008, 21:22   #4
xkor
 
Регистрация: 27.10.2008
Сообщений: 3
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
У вас компьютер отстает от действий пользователя? Да вы феномен какой-то!
По видимому автор в той злосчастной процедуре либо рисует что то сложное, либо там какието большие математические расчеты, а эти действия жрут довольно много времени и комп вполне может не успевать их производить.
Другой вопрос насколько оптимизированны там эти действия...
Цитата:
Сообщение от mihali4 Посмотреть сообщение
Ну хоть какую-нибудь книжку по Дельфи почитайте, умоляю... Ну хотя бы начните читать!
Зачем читать книги? На форумах есть всё что нужно! Да и статей в инете полно...
xkor вне форума Ответить с цитированием
Старый 27.10.2008, 21:35   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
По видимому автор в той злосчастной процедуре либо рисует что то сложное, либо там какието большие математические расчеты, а эти действия жрут довольно много времени и комп вполне может не успевать их производить.
Кто ж такие процедуры вешает на OnMouseMove?!
mihali4 вне форума Ответить с цитированием
Старый 27.10.2008, 21:42   #6
xkor
 
Регистрация: 27.10.2008
Сообщений: 3
По умолчанию

новички не знающие как часто она вызывается)
xkor вне форума Ответить с цитированием
Старый 27.10.2008, 22:03   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

chandrasecar, резче двигайте мышью, процедура будет реже вызываться )))
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.10.2008, 22:07   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Нет, ну если уж приспичило, можно ввести критерий. Допустим, процедура вызывается, если мышь прошла после предыдущего вызова не менее, чем 10 пикселов по горизонтали и/или 10 по вертикали...
А потоки не спасут. (если кто понимает принципы организации многозадачности)

Последний раз редактировалось mihali4; 27.10.2008 в 23:02.
mihali4 вне форума Ответить с цитированием
Старый 27.10.2008, 22:52   #9
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию

Благодарю, xkor! Потоки - это интересно. Если не сложно, подскажите, как создать два параллельных потока, которые будут порождаться событием Image1.onMouseMove?
Заранее благодарен!
лучший подарок женщине-программисту

Последний раз редактировалось chandrasecar; 27.10.2008 в 22:56.
chandrasecar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++, препроцессор, как из "int" сделать "char"? Максай Помощь студентам 3 05.09.2008 08:16
сделать окно "открыть","сохранить как" blackstersl Общие вопросы Delphi 1 24.08.2008 10:31
Две программы на "Файлы" vitekbest Помощь студентам 2 23.03.2008 18:59
Как "динамически" использовать "DLL" Air Общие вопросы Delphi 7 11.12.2007 21:55
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49