Hi,
folgender Code löst ein Acces Violation aus.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure Tfedit.TScrollAreaTimer(Sender: TObject); var p:Tpoint; begin p := fedit.ScreenToClient(mouse.CursorPos); if (p.X > lLeft.Left) and (p.X < lLeft.Left+lLeft.Width) and (p.Y > lLeft.Top) and (p.Y < lLeft.Top+lLeft.Height) then begin scrollto(Scroll.X - 1,Scroll.Y); lLeft.Color := clred; end; end;
TileBox.Top := (fedit.Height - 172); |
Soo. Es geht um einen Leveleditor. Am Start geht das noch fehlerfrei. Wenn ich aber auf der Zeichenfläche (Paintbox) an Teilposition (1,0) ein Teil erstellt habe (also ganz oben das 2. teil von links) löst die markierte Zeile ein Acces Violation aus. Selbst wenn die Maus
nicht auf dem Label lLeft liegt. Um auszuschließen, dass der Fehler von was anderem kommt, habe ich
scrollto mal ausgeklammert (ab
begin bis
end...)
Wenn ich die markierte Zeile ausklammere kommt kein Fehler. Wenn ich das 2. Teil nicht gezeichnet habe kommt auch kein Fehler.
==> Wo steckt der Wurm drin?
Vielleicht sollte ich noch erwähnen, dass das Formular ein MainMenu hat und frei skalierbar ist. (man kann ja nie wissen...) Beim OnShow wird es bereits skaliert.
Hier noch der Code mit dem das Teil platziert wird:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure Tfedit.PlaceTile(mx,my: integer); var tx,ty: integer; begin if not (edit_seltile = 0) then begin tx := (mx) div 24; ty := (my) div 24; if (pTiles.Color = clred) or (pTilesBg.Color = clred) then edit_tileatpos[tx,ty] := edit_seltile; if (pTiles.Color = clred) or (pTilesBg.Color = clred) then offsetbmp_tiles.Canvas.Draw(tx*24,ty*24,edit_bmpTile[edit_seltile]); end; pbWorld.Refresh; end; |
MfG
50ae