Форум: "Основная";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];
ВнизПеремещение курсора по сетке Найти похожие ветки
← →
Navi (2003-05-31 08:03) [0]Здравствуйте!
Подскажите, пожалуйста, как реализовать перемещение курсора в TImage только по узлам сетки, например как в AutoCAD или PCAD?
Спасибо.
← →
Song (2003-05-31 10:14) [1]Вероятно фиксировно устанавливать позицию курсора на onMouseMove
← →
Cobalt (2003-05-31 10:38) [2]2 Song © (31.05.03 10:14)
Теперь при одном движении мышки курсор будет делать в 7 раз больше!!! :)
2 Navi © (31.05.03 08:03)
Отслеживай onMouseMove и считай дельты от текущего положения(суммируй), а сам курсор устанавливай обратно. Как только сумма дельт перевалит за половину высоты сетки перемещай курсор.
← →
Forester (2003-05-31 11:14) [3]Пример решения "в лоб"
unit UMMove;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, ExtCtrls, Math;
const
XStep = 10; //шаг сетки по X
YStep = 10; //шаг сетки по Y
type
TForm1 = class(TForm)
Image1: TImage;
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
LastCoord:TPoint; //последние координаты курсора в терминах
//TImage
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
XDisplacement, YDisplacement:Double;
begin
if (X=LastCoord.X) and (Y=LastCoord.Y) then
exit;
XDisplacement:=(X-LastCoord.X) / XStep;
YDisplacement:=(Y-LastCoord.Y) / YStep;
X:=LastCoord.X+round(sign(XDisplacement)*Abs(XDisplacement+1)
*XStep);//
Y:=LastCoord.Y+round(sign(YDisplacement)*Abs(YDisplacement+1)
*YStep);//
SetCursorPos((Sender as TImage).ClientOrigin.X+X,
(Sender as TImage).ClientOrigin.Y+Y);
LastCoord.X:=X;
LastCoord.Y:=Y;
end;
end.
← →
Navi (2003-06-01 08:09) [4]To Forester: нет у меня и в help про sign, но если это знак числа - тогда я правильно понял и Ваш пример работает не так, т.е. при малом сдвиге мыши перемещает курсор на единицу сетки, а надо так: мышь проползает n-пиксел и потом курсор перескакивает в следующий узел сетки.
← →
Forester (2003-06-01 08:58) [5]>Navi
>>надо так: мышь проползает n-пиксел и потом курсор >>перескакивает в следующий узел сетки.
Тогда это не совсем как в AutoCad. Там мышь передвигается точно по узлам. Но если надо именно так, то сделай проверку на величину
дробной части XDisplacement, YDisplacement. 0.5 - смещение курсора на половину ячейки сетки.
>>нет у меня и в help про sign
Наверняка есть, в описании модуля Math. Это действительно определение знака.
← →
Navi (2003-06-07 07:51) [6]To Forester: блин, загрузил AutoCAD проверить (думал а уж что-то забыл, но нет). Наверно просто плохо объяснил: мышь проползает n-пиксел по ковру, а не по экрану. Не знаю, как это называется, но например в Paint мышь по экрану ходит на 1 пиксел=столько-же и по ковру (утрированно). А в AutoCAD она ползет по ковру какое-то расстояние, оставаясь неподвижно в узле сетки, а за тем перескакивает на следующий. Это очень заметно при увеличении, когда на экране шаг сетки размером неск. см. Мне кажется, что Cobalt дельную мысль дал, просто реализовать пока некогда.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c