Hallo
DP,
ich stehe mal wieder kurz vorm Verzwefeln -.-
Ich sitze atm an einer MineSweeper-Version und habe für die Minenfelder Runtime-Buttons erstellt.
Die werden alle erstellt, sind sichtbar und funktionieren alle sehr gut.
Aber wenn ich dann anhand der Mausposition versuche herauszufinden, welcher der Buttons gedrückt worden ist, bekomme ich seltsame Ergebnisse!
Hier mal der Code:
Delphi-Quellcode:
procedure TFrmMS.MineBtnDadClick(Sender: TObject);
var x, y: integer;
RealPosX, RealPosY: integer;
Found: boolean;
begin
RealPosX := Mouse.CursorPos.X - Left;
RealPosY := Mouse.CursorPos.Y - Top ;
ShowMessage(IntToStr(RealPosX)+', '+IntToStr(RealPosY));
x:=0;
repeat
begin
if ((MineBtn[x, 0].Left < RealPosX) and (MineBtn[x, 0].Left + MineBtn[0, 0].Width > RealPosX)) then
begin
y:=0;
repeat
begin
if ((MineBtn[x, y].Top < RealPosY) and (MineBtn[x, y].Top + MineBtn[x, y].Height > RealPosY)) then Found := TRUE;
y:=y+1;
end;
until ((y = RowsForLevel) or Found);
end;
x:=x+1;
end;
until ((x = ColsForLevel) or Found);
Aufdecken(x, y);
end;
Das ist die Prozedur, die ausgelöst wird wenn IRGENDEINER meiner Runtime-Buttons gedrückt wird.
(MineBtn ist ein Array aus TSpeedButtons (groß genug!) und Rows/ColsForLevel sind integers, der Name erklärt den Rest)
Misteriöserweise bekomme ich immer ein "y" welches 2 zuviel ist als es eingentlich sein müsste und wenn ich das einfach korrigiere indem ich später sage y ist y-2, dann erhalte ich immer Fehler wenn ich Buttons der rechten unteren Ecke drücke.
Also iwas stimmt da nicht, aber ich kann den Fehler nicht finden...
Wer kann helfen?
Danke schonmal, greetZ DaSebi