Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2156
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: Sa 30.01.16 11:07 
Hallo!

Ich habe ein Image, 500x500 Pixel.

Es sollen 50x50 Pixel grosse Icons so heineingezeichnet werden, dass sie genau neben- und untereinander sind, also je 10 waag- und senkrecht.

Wenn ich nun auf das Image klicke, soll das Icon korrekt in jenem Bereich eingepasst werden, in dem es nach obigem Schema liegen soll. Also kann ich nicht einfach Mouse.CursorPos.X, Mouse.CursorPos.Y verwenden.
Wie muss ich Mouse.CursorPos, ScreenToClient und X, Y zusammen einsetzen?

Ich hoffe, ihr versteht, was ich meine!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18517
Erhaltene Danke: 1572

W10 x64 (Chrome, IE11)
Delphi 10.1 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.01.16 12:27 
Hört sich nach einem gezeichneten Raster an wie ich es hier demonstriert habe:
www.delphi-forum.de/viewtopic.php?p=557541

Prinzipiell ist das ja einfache Mathematik. Du teilst einfach die Mausposition bezogen auf das Bild durch 50, der ganzzahlige Anteil ist dann die Spalte bzw. Zeile. Sprich Image.ScreenToClient(Mouse.CursorPos).X div 50. Wobei du Mouse.CursorPos.X eigentlich gar nicht brauchst, da du im MouseUp die Position ja mitbekommst, sprich eigentlich reicht div 50.

_________________
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2156
Erhaltene Danke: 42

Windows 7 64 Bit
Delphi XE2 Starter, Delphi 10.1 Starter
BeitragVerfasst: So 31.01.16 19:10 
Dein Projekt kann ich nicht kompilieren, da gibt's 39 Fehlermeldungen:
Zitat:
[DCC Fehler] PeriodXtremeSHDocVw.pas(1686): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen

Nimm's nicht persönlich, aber ich möchte dem jetzt nicht auf den Grund gehen!

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
sprich eigentlich reicht div 50.

Wenn ich, wie du vorschlägst, Image1.Canvas.Draw(X div 50, Y div 50, aIcon); angebe, wird bei jedem Klicken alles stets in der linken oberen Ecke gezeichnet, je nachdem, wo ich klicke, um einige Pixel versetzt, aber im Grunde alles links oben!

//Edit: Habe die Lösung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  p := Image1.ScreenToClient(Mouse.CursorPos);

  p.x := p.x div 50;
  p.y := p.y div 50;
 
  aIcon := TIcon.Create;

  ImageList1.GetIcon(0, aIcon);
  Image1.Canvas.Draw(p.X * 50, p.Y * 50, aIcon);

  aIcon.Free;


Das kriege ich noch einfacher hin, mal sehen!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!