Я не понимаю почему Курсор. Положение отличается от MouseEventArgs. Местоположение, они должны быть тем же, не так ли?
Править: Ответ, кажется, предлагает это Cursor.Position== PointToScreen(MouseEventArgs.Location)
, но мое тестирование указывает иначе.
MouseEventArgs.Position - это позиция курсора мыши относительно управления во время события, в момент события.
Cursor.Position - это текущая позиция курсора мыши относительно рабочего стола.
.MouseEventArgs.location указывает позицию курсора относительно элемента управления во время события.
Windows.Forms.Cursor.Position указывает позицию курсора относительно рабочего стола.
Очевидно, что эти две позиции не обязательно должны быть и не являются одинаковыми. Последнее можно использовать и без события как таковое, в отличие от MouseEventArgs.Location
. Можно перехватить импорт
и из... import
, определив собственную функцию __ import __
и назначив ее __ builtin __. __ import __
(обязательно сохраните предыдущее значение, так как переопределение, несомненно, захочется делегировать ему; и вам потребуется импортировать __ builtin __
, чтобы получить модуль builtin-objects).
Например (Py2.4 specific, поскольку это то, о чем вы спрашиваете), сохраните в aim.py следующее:
import __builtin__
realimp = __builtin__.__import__
def my_import(name, globals={}, locals={}, fromlist=[]):
print 'importing', name, fromlist
return realimp(name, globals, locals, fromlist)
__builtin__.__import__ = my_import
from os import path
и теперь:
$ python2.4 aim.py
importing os ('path',)
Таким образом, это позволяет перехватить любой конкретный запрос на импорт и изменить импортированный модуль [s], как вы хотите, прежде чем вернуть их - см. спецификации здесь . Это тот «крючок», который вы ищете, верно?
-121--4349843-Да. но с оговоркой. Идея о том, что закольцовывание назад быстрее никогда не применяется ко всем старым процессорам. Это x86 вещь (как в 8086-486, возможно Pentium, хотя я не думаю больше).
Эта оптимизация никогда не применялась к какой-либо другой архитектуре ЦП, о которой я знаю.
Вот почему.
Регистр 8086 был специально оптимизирован для использования в качестве счетчика циклов. Вы помещаете счетчик циклов в CX, а затем есть несколько инструкций, которые уменьшают CX, а затем устанавливают коды условий, если они равны нулю. Фактически, существовал префикс команды, который можно было поставить перед другими командами (префикс REP), которые в основном итерируют другую команду, пока CX не достигнет 0.
Еще в те дни, когда мы подсчитывали команды и инструкции, были известны фиксированные счетчики циклов с использованием cx в качестве счетчика циклов, и cx был оптимизирован для подсчета.
Но это было давно время назад. С тех пор как Pentium, эти сложные команды были в целом медленнее, чем использование большего количества и более простых инструкций. (RISC ребенок!) Ключевая вещь, которую мы пытаемся сделать в эти дни, - это попытаться поставить некоторое время между загрузкой регистра и его использованием, потому что трубопроводы на самом деле могут делать несколько вещей за цикл, пока вы не пытаетесь использовать один и тот же регистр для нескольких вещей одновременно.
В настоящее время убивает производительность не сравнение, а ветвление, и только тогда, когда предсказание ветви предсказывает неверное.
-121--1709643-Я думаю, что Позиция находится относительно рабочего стола, тогда как MouseEventArgs.Location - относительно элемента управления, который вызвал событие
useEventargs.position относится к прямоугольнику клиента контроля, курсор.позиция находится в координате экрана.