Тема: Zinc FAQ
Показать сообщение отдельно
Старый 27.11.2007, 23:28
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
По умолчанию Zinc: рецепты применения.

Контроль над мышью

для реализации на цинке под WinXP пример выглядит примерно так
Код:
// задействуем обработчик события onAppExit чтобы при выходе "восстановить" скорость  мыши. 
mdm.Application.enableExitHandler();
// ставим "наугад" 10, т.к. считать и запомнить бывшее значение скорости в данном примере нельзя. 
// но это можно сделать при помощи своей DLL и только так.
mdm.Application.onAppExit = function() {
	SetSpeed(10);
	myDLL.close();
	mdm.Application.exit();
};
// здесь иллюстрируем позиционирование курсора
// x1 - х-координата формы +30
x1 = mdm.Forms.thisForm.x + 30;
// y1 - y-координата формы +30
y1 = mdm.Forms.thisForm.y + 30;
for (i = 0; i <= 15; i++) {
	// в цикле "перемещаем" курсор
	mdm.Input.Mouse.setPosition(x1 + i * i, y1 + i * i);
	// делаем паузу между перемещениями курсора 200 мс
	mdm.Application.delay(200);
}
// подключаем системную DLL c:\windows\system32\user32.dll, полный 
// путь для файлов DLL в этой папке указывать необязательно
myDLL = new mdm.DLL("user32.dll");
// на сцене имеем мувик mc - простой прямоугольник, например.
// задаем обработчики onRollOver и onRollOut для этого клипа.
mc.onRollOver = function() {
	SetSpeed(1);
};
mc.onRollOut = function() {
	SetSpeed(10);
};
// функция, изменяющая скорость мыши, v - скорость от 1 до ... не проверял, 1 -самая маленькая.
function SetSpeed(v) {
	// формируем список параметров вызова API-функции из user32.dll
	// оригинальный вид ее таков
	//BOOL SystemParametersInfo(
	//	UINT uiAction,	// system parameter to query or set
	//	UINT uiParam,	// depends on action to be taken
	//	PVOID pvParam,	// depends on action to be taken
	//	UINT fWinIni 	// user profile update flag
	//);буковка А в конце названия функции ниже в примере
	//означает ANSI-версию функции (W - UNICODE версию соответственно)
	// здесь я вызываю ее так 
	//SystemParametersInfoA (SPI_SETMOUSESPEED, 0, (PVOID)1, SPIF_SENDCHANGE);
	// например 113 - численное значение API-константы SPI_SETMOUSESPEED
	// и т.д.
	myDLL.addParameter("integer", 113);
	myDLL.addParameter("integer", 0);
	myDLL.addParameter("integer", v);
	myDLL.addParameter("integer", 2);
	// собственно, вызов функции.
	myDLL.call("boolean", "SystemParametersInfoA");
	// очищаем список параметров для последующих вызовов.
	myDLL.clear();
}
для более детального управления можно ипользовать свою DLL.
модераторам: в это тему можно складывать удачные примеры использования цинка.