Entwickler-Ecke
Multimedia / Grafik - In einem Image nach MouseUp an bestimmter Position zeichnen
galagher - Sa 30.01.16 11:07
Titel: In einem Image nach MouseUp an bestimmter Position zeichnen
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!
jaenicke - Sa 30.01.16 12:27
Hört sich nach einem gezeichneten Raster an wie ich es hier demonstriert habe:
http://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
x div 50.
galagher - 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!
jaenicke hat folgendes geschrieben : |
sprich eigentlich reicht x 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:
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!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!