Проверить, находится ли курсор на линииDelphi , ОС и Железо , Мышка и КурсорПроверить, находится ли курсор на линии
Оформил: DeeCo { Check if a Point(X,Y) (e.g a Cursor) is on a Linie (x1,y1) ; (x2,y2) d = line width (min. 1) Testen, ob sich der Punkt(X,Y) (z.B der Maus-Cursor) auf der Linie x1,y1 nach x2,y2 befindet. d = halbe Liniendicke (min 1) durch direkte Programmierung der FPU wird die Unit Math nicht benotigt nur mit 80387 oder hoher einsetzbar! } function CursorOnLinie(X, Y, x1, y1, x2, y2, d: Integer): Boolean; var sine, cosinus: Double; dx, dy, len: Integer; begin if d = 0 then d := 1; asm fild(y2) fisub(y1) // Y-Difference fild(x2) fisub(x1) // X-Difference fpatan // Angle of the line in st(0) fsincos // Cosinus in st(0), Sinus in st(1) fstp cosinus fstp sine end; dx := Round(cosinus * (x - x1) + sine * (y - y1)); dy := Round(cosinus * (y - y1) - sine * (x - x1)); len := Round(cosinus * (x2 - x1) + sine * (y2 - y1)); // length of line if (dy > -d) and (dy < d) and (dx > -d) and (dx < len + d) then Result := True else Result := False; end; procedure TForm1.FormPaint(Sender: TObject); begin Canvas.Pen.Width := 1; Canvas.MoveTo(0, 0); Canvas.LineTo(Width, Weight); end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var p: TPoint; begin GetCursorPos(p); p := ScreenToClient(p); if CursorOnLinie(p.x, p.y, 0, 0, Width, Height, 1) then Caption := 'Mouse on line.' else Caption := 'Mouse not on line.' end; Программа на языке Delphi, которая проверяет, находится ли курсор (покажчик мыши) над определенной линией. Программа использует Фloating Point Unit (FPU) для выполнения некоторых математических расчетов. Вот подробное описание работы программы:
Программа затем использует эту функцию в обработчике события В отношении предложений и улучшений:
В целом, это интересный пример использования ассемблерного кода в Delphi для выполнения математических расчетов. Однако программа может выиграть от более современного и поддерживаемого подхода с использованием более высокоуровневых программных конструкций. Функция CursorOnLinie проверяет, находится ли курсор на линии, заданной координатами x1, y1 и x2, y2 с учетом ширины линии d. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Мышка и Курсор ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |