Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Acces Violation bei MousePos ermittlung
.50AE - Di 23.01.07 23:02
Titel: Acces Violation bei MousePos ermittlung
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
Chryzler - Mi 24.01.07 20:25
fedit gibt's aber schon oder? Kommt bei ShowMessage(fedit.text); auch ein Fehler?
.50AE - Mi 24.01.07 20:32
fEdit ist das Formular; sry wenn ich vergessen hab das zu schreiben.
(Hab das unnötigerweise im Code stehen)
MfG
50ae
Miri - Do 25.01.07 09:17
.50AE hat folgendes geschrieben: |
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); |
|
Liegt es vielleicht daran?
Wenn die Prozedur wirklich so ist, wie das kopierte, dürfte an der Stelle die Prozedur zuende sein und die Fehlerezeile außerhalb der Prozedur liegen...
Oder steht in dem ... noch ein begin mit drin?
ZeitGeist87 - Do 25.01.07 10:16
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| 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; |
ist ok so miri..
ich hab jetzt einiges ausprobiert und ich find den fehler nicht...
stellt es n problem dar, das Projekt hochzuladen, oder per PN zu schicken?
Vielleicht kann man dir so weiterhelfen.
LG
Stefan
Miri - Do 25.01.07 11:22
Klar... bis dahin passt das...
aber die Zeile, bei der .50AE den Fehler hatte, liegt außerhalb dieser begins / ends!
Hab aber gerade erst den Kommentar gesehen von wegen "Im OnResize"... ;-)
ZeitGeist87 - Do 25.01.07 11:44
achso den fehler
der hat so komisch kommentiert..
hab nur oben den fehler gesehen -.-
sorry miri :)
.50AE - Do 25.01.07 14:53
Tud mir Leid, wenn nich alles perfekt kommentiert ist ;)
Dafür hab ich jetzt mal den Editor selbst angehängt.
Ich hoffe ihr könnt was damit anfangen; Vielen Dank für die Bemühungen!!!
Download [
http://www.christopherhauck.de/Sonstiges/Editor.zip]
MfG
50ae
//Edit
Hab den Fehler. Er lag natürlich mal wieder wo ganz anders. Das Array ind das reingeschrieben wird welches Teil auf dem Feld ist war von 1..x deklariert; hätte aber von 0..x sein sollen. Wieso der Fehler jetzt ausgerechnet kommt wenn ich dieses bestimmte Teil zeichne (und z.B. bei dem 1. von links nicht) versteh ich aber trotzdem nicht.
Dankr für die Bemühungen; 50ae
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!