MyGLFont.Print(8,28,'Press left, right, up or down to rotate and + or - to zoom.');
MyGLFont.EndFont;
SwapBuffers(h_DC);
end;
Wenn ich nun die Zeilen
Code:
glColor3f(1,1,1);
MyGLFont.BeginFont;
MyGLFont.Print(8,12,PChar(ToPrint));
MyGLFont.Print(8,28,'Press left, right, up or down to rotate and + or - to zoom.');
MyGLFont.EndFont;
als letzte Zeilen vor dem abschließenden end; in die procedure RenderScene packe, dann crasht das Programm mit einer Access Violation bei der Adresse 00000000, sobald ich das Formular anklicke.
Wobei die OnClick Procedure eigentlich nichts kritisches macht. Die Selection-Funktion ist die, aus dem Tutorial:
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Das sieht für mich nach nem "Random-Fehler" aus, also einem Fehler der nicht direkt mit deiner oben geschilderten Änderung zu tun hat. Das kommt gerne vor wenn man irgendwo was mit Zeigern falsch macht oder Array-Grenzen verletzt. Von daher mal alle Debugging-Optionen einschalten und im Einzelschritt durchgehen und auch ggf. verdächtige Variablen in dein Watchfenster nehmen.
Eine Idee wäre nicht den ganzen Block zu verschieben, sondern immer nur einzelnen Anweisungen. Vielleicht gibt dir die kritische Anweisung dann irgendeinen Hinweis. Wenn man z.B. mit dynamischen Arrays Fehler macht, dann wird es nacher vermutlich wieder bei einem Befehl der Speicher belegt einen Fehler geben. Dann würde ich nochmal einen Haltepunkt direkt auf das Begin setzen und schauen, wie die OnClick Prozedure ausgeführt werden kann. Vielleicht sind auch irgendwelche Objekte nicht initialisiert oder der Zeiger wurde überschrieben. Dann bringt es auch immer was einzelne Zeilen auszukommentieren und sich Stück für Stück voranzuarbeiten, so daß man nacher genau feststellen kann welche Befehl für den Fehler verantwortlich ist.
Dass der Crash mit der Procedure .Print zusammenhängt, soweit war ich, aber in der geschieht meines errachtens nichts böses. :/
Ich hab mal die glFont.pas angehängt...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ersetz mal in der print Funktion pchar durch String. Vielleicht geht das was mit den Strings, die ja auch ähnlich wie dynamische Arrays verwaltet werden, durcheinander. Das dürfte dann aber nicht der einzelne Fehler sondern nur ein Nebeneffekt sein.
Der Crash tritt Form1.RenderScene; auf.
Und jop, der Aufruf von einer Funktion der Klasse Form1 aus der Funktion Selection ist ziemlich unelegant und wird noch beizeiten geändert.
Und noch die Procedure Renderscene:
Code:
procedure TForm1.RenderScene;
begin
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity;
glInitnames;
glPushname(0);
glPushMatrix;
glRotateF(globalangle,1,1,1);
glTranslatef(-500,-500,-500);
DrawTexCube(Room,RoomTex);
glPopMatrix;
glPushMatrix;
MyGameField.Draw;
glPopMatrix;
glColor3f(1,1,1);
MyGLFont.BeginFont;
MyGLFont.Print(8,12,ToPrint);
MyGLFont.Print(8,28,'Press left, right, up or down to rotate and + or - to zoom.');
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.