Recent

Author Topic: Draw on image and get proportional coordinates  (Read 1573 times)

xinyiman

  • Hero Member
  • *****
  • Posts: 1963
    • Lazarus and Free Pascal italian community
Draw on image and get proportional coordinates
« on: October 01, 2018, 12:13:31 pm »
Hi guys, I have a need. I have to draw some dots on a proportional image and then if I click on one of the dots with the mouse, I have to return the id of the dot. So to understand we have to draw a football field, then above the disposition of the players, the problem is that the field must be resizable. I attach a project that does not work as I would like.

Url of example:
www.lazaruspascal.it/esempi/test_cc.zip
Win10, Ubuntu and Mac
Lazarus: 2.1.0
FPC: 3.3.1

GetMem

  • Hero Member
  • *****
  • Posts: 3508
Re: Draw on image and get proportional coordinates
« Reply #1 on: October 01, 2018, 01:29:47 pm »
You're method seems overcomplicated to me. Why don't you use regions to determine the position of the players?
« Last Edit: October 01, 2018, 01:36:02 pm by GetMem »

xinyiman

  • Hero Member
  • *****
  • Posts: 1963
    • Lazarus and Free Pascal italian community
Re: Draw on image and get proportional coordinates
« Reply #2 on: October 01, 2018, 02:17:51 pm »
How? One example
Win10, Ubuntu and Mac
Lazarus: 2.1.0
FPC: 3.3.1

GetMem

  • Hero Member
  • *****
  • Posts: 3508
Re: Draw on image and get proportional coordinates
« Reply #3 on: October 01, 2018, 02:20:05 pm »
Quote
How? One example
Here you go:
Code: Pascal  [Select]
  1. uses LCLType, LCLIntf;
  2.  
  3. type
  4.   TData = record
  5.     FX, FY, FR: Integer;
  6.     FRgn: HRGN;
  7.   end;
  8.  
  9. var
  10.   Data: array of TData;
  11.  
  12. procedure TForm1.FormCreate(Sender: TObject);
  13. begin
  14.   //just some random circles
  15.   SetLength(Data, 3);
  16.   with Data[0] do
  17.   begin
  18.     FX := 10; FY := 10; FR := 30;
  19.     FRgn := CreateEllipticRgn(FX, FY, FX + FR, FY + FR);
  20.   end;
  21.  
  22.   with Data[1] do
  23.   begin
  24.     FX := 120; FY := 130; FR := 30;
  25.     FRgn := CreateEllipticRgn(FX, FY, FX + FR, FY + FR);
  26.   end;
  27.  
  28.   with Data[2] do
  29.   begin
  30.     FX := 100; FY := 40; FR := 30;
  31.     FRgn := CreateEllipticRgn(FX, FY, FX + FR, FY + FR);
  32.   end;
  33. end;
  34.  
  35. procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  36.   Shift: TShiftState; X, Y: Integer);
  37. var
  38.   Res: Bool;
  39.   I: Integer;
  40. begin
  41.   for I := Low(Data) to High(Data) do
  42.   begin
  43.     Res := PtInRegion(Data[I].FRgn, X, Y);
  44.     if Res then
  45.     begin
  46.       ShowMessage('You clicked circle ' + IntToStr(I + 1));
  47.       Break;
  48.     end;
  49.   end;
  50. end;
  51.  
  52. procedure TForm1.FormPaint(Sender: TObject);
  53. var
  54.   I: Integer;
  55. begin
  56.   with Self.Canvas do
  57.   begin
  58.     Pen.Width := 2;
  59.     Pen.Color := clBlack;
  60.     Brush.Color := clRed;
  61.  end;
  62.  
  63.  for I := Low(Data) to High(Data) do
  64.    Self.Canvas.Ellipse(Data[I].FX, Data[I].FY, Data[I].FX + Data[I].FR, Data[I].FY + Data[I].FR);
  65. end;
  66.  

xinyiman

  • Hero Member
  • *****
  • Posts: 1963
    • Lazarus and Free Pascal italian community
Re: Draw on image and get proportional coordinates
« Reply #4 on: October 01, 2018, 04:45:41 pm »
Thank you very much
Win10, Ubuntu and Mac
Lazarus: 2.1.0
FPC: 3.3.1