Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mausposition auf ImgView32 / Layer scrollen (https://www.delphipraxis.net/77252-mausposition-auf-imgview32-layer-scrollen.html)

RobertP 16. Sep 2006 22:14


Mausposition auf ImgView32 / Layer scrollen
 
Moin,
ich möchte wenn jemand auf das Bild (mit ImgView32) klickt, die Mausposition auf dem Bild haben.

Delphi-Quellcode:
procedure TEditorForm.mapImageClick(Sender: TObject);
var
  x, y : Integer;
  P : TPoint;
begin
  P := ScreenToClient(Mouse.CursorPos);
  x := P.X;
  y := P.Y;
  x := x - mapImage.Left;
  y := y - mapImage.Top;
end;
Funktioniert auch wenn die Scrollbalken ganz links und ganz oben sind. Was mach ich jetzt aber wenn sie das nicht sind?

Grüße,
MrPayne

Hawkeye219 16. Sep 2006 22:30

Re: Mausposition auf ImgView32
 
Hallo MrPayne,

vielleicht findest du in diesem Beitrag den richtigen Ansatz.

Gruß Hawkeye

RobertP 16. Sep 2006 23:15

Re: Mausposition auf ImgView32
 
Jup Problem gelöst, Danke!

Falls es jemand interessiert:
Delphi-Quellcode:
P := ScreenToClient(Mouse.CursorPos);
P := mapImage.ControlToBitmap(P);
P.X := P.X - mapImage.Left;
P.Y := P.Y - mapImage.Top;

RobertP 17. Sep 2006 14:05

Re: Mausposition auf ImgView32
 
Schon wieder ein Problem:

In des ImgView32 lad ich ne Grafik, da drauf mach ich ein Layer, wo ich was reinzeichne. Wenn ich jetzt scrolle scrollt zwar die Grafik aber das gezeichnete, also das Layer, bleibt am selben Fleck. Wie krieg ich das Layer dazu dass es mitscrollt?

Mein Versuch war leider net so erfolgreich:
Delphi-Quellcode:
procedure TEditorForm.mapImageScroll(Sender: TObject);
var
P : TPoint;
left, top, right, bottom : Integer;
begin
  left := Trunc(L.Location.Left);
  top := Trunc(L.Location.Top);

  P.X := left - mapImage.Left;
  P.Y := top - mapImage.Top;

  P := mapImage.ControlToBitmap(P);


  left := P.X;
  top := P.Y;
  right := left + 10;
  bottom := top + 10;

  Label3.Caption := IntToStr(left);
  Label4.Caption := IntToStr(top);
  L.Location := FloatRect(left, top, right, bottom);
end;

RobertP 18. Sep 2006 20:14

Re: Mausposition auf ImgView32 / Layer scrollen
 
War vielleicht net so klug des in alten Thread zu posten, da habens denk ich viele übersehen. Aber weiß denn niemand ne Lösung um die Layer mitscrollen zu lassen? Wäre recht wichtig....

PS: nochn Problem :roll:

Wenn ich auf des Image klick wird ja im onMouseDown das Layer übergeben. Wenn ich nu neinmal ein Layer angeklickt habe dann ist dieses irgendwie so groß wie die ganze Grafik, danach wird, egal wo ich hinklicke dieses Layer angegeben... :?: :!:
Als Notlösung geht natürlich alle Layer neu zu erstellen, aber da musses ja auch ne bessere Methode geben... Btw wie kann ichs eigentlich machen dass klicks nur auf dem nichttransparenten Teil des Layers registriert werden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz