Autor Beitrag
.50AE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: Di 23.01.07 23:02 
Hi,

folgender Code löst ein Acces Violation aus.

ausblenden 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); //<-- Fehler
  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;

//Der Code hier löst den Fehler auch aus: (beim OnResize)
TileBox.Top := (fedit.Height - 172);
//TileBox ist ein Panel in dem eine Scrollbox mit aufgezeichneten Bitmaps drin ist.


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:
ausblenden 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
//Wenn etwas ausgewählt ist...
  if not (edit_seltile = 0then begin
//Get Tile Pos
  tx := (mx) div 24;
  ty := (my) div 24;
//Teil in Array speichern..
  if (pTiles.Color = clred) or (pTilesBg.Color = clred) then edit_tileatpos[tx,ty] := edit_seltile;
//Teil auf OffsetBmp zeichnen
  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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mi 24.01.07 20:25 
fedit gibt's aber schon oder? Kommt bei ShowMessage(fedit.text); auch ein Fehler?
.50AE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Do 25.01.07 09:17 
user profile icon.50AE hat folgendes geschrieben:
ausblenden 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); //<-- Fehler
  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;

//Der Code hier löst den Fehler auch aus: (beim OnResize)
TileBox.Top := (fedit.Height - 172);
//TileBox ist ein Panel in dem eine Scrollbox mit aufgezeichneten Bitmaps drin ist.



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?

_________________
Anonymes Eckenkind
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 25.01.07 10:16 
ausblenden 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); //<-- Fehler
  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

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: 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"... ;-)

_________________
Anonymes Eckenkind
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 25.01.07 11:44 
achso den fehler
der hat so komisch kommentiert..
hab nur oben den fehler gesehen -.-

sorry miri :)

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
.50AE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: 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

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