Abend miteinander,
Ich glaube das wird jetzt relativ schwer euch zu erklären was ich denn genau machen möchte, aber ich probiers' einfach mal:
Ich möchte das Formular in ein Raster unterteilen. Jeder Rasterteil hat einen bestimmten (jedes gleichgroß und quadratisch) zuständigen Pixelbereich. Im Beispiel ist dieser 49x49 Pixel pro Koordinate. Später möchte ich auf Mausklicks in diesen Zuständigkeitsbereichen agieren. Für das MausClick-Event sollen also Integerwerte angegeben werden, welche die Beträge haben, als ob ein Pixel auf 49*49 Pixel gezehrrt wird.
(Verständlich ausgedrückt

)
Demnach brauch ich ja eine Umrechnung von Pixel zu Koordinate und genau an dieser Scheitert es momentan.
Das Raster für die Events soll übrigens in einem 2-Dimensionalem Integer-Array gespeichert werden.
Ich dachte da an die Rechnung
Zuständige Koordinate = Rastergröße in Pixel / Koordinatenbreite/-höhe
Da ich für die Unterteilung in das Array "Raster" auf Anhieb nichts implementieren konnte, hatte ich es erstmal damit versucht, die Koordinate auf die geklickt wurde zu ermitteln.
So in etwa sah das aus: (Bekomme konstante Ergebnisse herau, egal wo geklickt wird, hatte heute Mittag noch dynamische Ergebnisse, welche aber auch falsch waren. Leider nach Programmabsturz Code weg...)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| var GameForm: TGameForm;
MapsizeInPixel: TPoint; MapsizeGrid: TPoint;
Walk_Zielpunkt: TPoint;
Raster: Array of Array of Integer;
procedure TGameForm.CreateGrid(LengthX,LengthY,Size: Integer); begin
MapsizeInPixel.X:= LengthX * Size; MapsizeInPixel.Y:= LengthY * Size;
SetLength(Raster,LengthX,LengthY);
procedure TGameForm.Move; var Extractpath: String;
begin Extractpath:= ExtractFilePath(ParamStr(0));
Image1.Picture.LoadFromFile(Extractpath + '\data\gui\Walk.gif');
Walk_Zielpunkt.X:= MapsizeInPixel.X div 24; Walk_Zielpunkt.Y:= MapsizeInPixel.Y div 24;
WalkTimer.Enabled:= true;
ShowMessage(IntToStr(Walk_Zielpunkt.X)+' '+IntToStr(Walk_Zielpunkt.Y)); end; |
Habe lieber mal zuviel Code als zuwenig reingepostet, also sorry wenn was unnötiges drin ist.
Hoffe ich versteht was ich will und könnt mir helfen
Grüße ConditionZero