Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  166

•  TDictionary Custom Sort  3 340

•  Fast Watermark Sources  3 093

•  3D Designer  4 849

•  Sik Screen Capture  3 348

•  Patch Maker  3 554

•  Айболит (remote control)  3 664

•  ListBox Drag & Drop  3 016

•  Доска для игры Реверси  81 714

•  Графические эффекты  3 946

•  Рисование по маске  3 250

•  Перетаскивание изображений  2 631

•  Canvas Drawing  2 754

•  Рисование Луны  2 584

•  Поворот изображения  2 191

•  Рисование стержней  2 169

•  Paint on Shape  1 569

•  Генератор кроссвордов  2 238

•  Головоломка Paletto  1 767

•  Теорема Монжа об окружностях  2 232

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 057

•  Игра HIP  1 282

•  Игра Go (Го)  1 230

•  Симулятор лифта  1 475

•  Программа укладки плитки  1 218

•  Генератор лабиринта  1 548

•  Проверка числового ввода  1 366

•  HEX View  1 497

•  Физический маятник  1 358

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Проверить, находится ли курсор на линии



Оформил: 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;




Похожие по теме исходники

Послушные линии

Пасьянс Четыре линии

Lines (игра Линии)




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте