Hallo,
ich möchte in meiner Anwendung gerne ein paar Grafikelemente einbauen, die so zu sagen als "Button" funktionieren sollen. Um es konkret zu beschreiben, ich male ein Universum mit Sternen und Galaxien und möchte, dass der Benutzer auf die Galaxien klicken kann um einen neue Ansicht zu bekommen.
Ich habe bisher meine Galaxien in einem Array gespeichert, jede Galaxie hat eine "Range" (TRect), mit der ich prüfen möchte, ob die Mouse-Koordinaten in dieser Range einer Galaxie sind.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function TSDUniverse.getGalaxyIndexAt (mouseX, mouseY: integer): integer; var index: integer; i: integer; r: TRect;
begin index := -1;
for i:= 0 to length(fGalaxies) do begin r := fGalaxies[i].getRange; if (mouseX >= r.Left) and (mouseX <= r.Right) and (mouseY >= r.Top) and (mouseY <= r.Bottom) then begin index := i; end; end; result := index; end; |
Diese Funktion soll angeben, an welcher Array-Position sich die angeklickte Galaxie befindet. Nur leider gibt sie mir verdächtig oft -1 zurück.
Kann es sein, dass GDI+ irgendwie ein anderes System für seine Mouse-Koordinaten verwendet und dass ich dafür irgendwelche Umwandlungen brauche? Wenn ja, kann mir jemand sagen, wie das geht? Wenn nein, was habe ich dann falsch gemacht?
Gruß
Schwarzer Vampir
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt