so also mein Problem: ich habe ein Anwenfung, solange ich die allein benutze funktioniert alles mit OpenGL.
Nun habe ich die Form in ein anderes Programm integriert. wenn ich nun die Form mit Show oder ShowModal aufruf, seh ich nix, also der zeichnet nichts.
Ich vermute(is aber ein schuss ins blaue) das ich vergess irgendwo den Rendercontext nochmal zu setzen. Das ist aber geraten, weil ich nicht weis was es sonst sein soll.
Hier mein Reihenfolge:
In der formCreate wird OpenGL initialisiert, also Pixelformat usw. , Renderkonetxt anlegen und mit HDC verbinden
Da das die einzige Form mit OpenGL ist, rufe ich nirgends wieder wglMakeCurrent auf. in der stand-Alone-Anwendung geht jka auch alles.
Liegt es daran: Falls ja was muss ich machen das es klappt?
Oder ist es was anderes? Bin ratlos
Also ich habe rausgefunden, dass es mit dem Renderkontext zusammen hängt. Wenn ich es in der FormShow initialisiere dann klappt es.
1. kann mir das wer erklären?
2. das kann ich nicht benutzen, weil wenn ich die Form ein zweites mal öffne stürzt er da dann ab. Also wie kann ich wo was initialisieren???
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
eventuell hängt es damit zusammen, das im formcreate die form irgendwelche sachen anders hat als im formshow, da sie ja nicht sofort angezeigt wird (nehm ich jetzt mal an).
zu dem problem im formshow: einfach ein private boolean "init", im formcreate auf true setzen, im formshow überprüfen, initialisieren, und dann auf false setzen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Warum das im OnShow geht aber im OnCreate nicht verstehe ich nicht ganz, da an beiden Stellen das Form bereits existiert. OnShow ist nur Bruchteile vor dem Anzeigen. Ich persönlich benutze immer OnShow. Könnte mir aber vorstellen, dass das Problem eher wo anders liegt. Wo initialisiertst du denn eigentlich den ViewPort?
Dein "Problem" mit dem doppelten ShowAufruf ist kein Problem. Das ist höchstens ein wiederer Umstand. Überlege mal genau was du da machen könntest! Im Endeffekt musst du ja lediglich verhindern, dass der Initialisierungscode zwei mal aufgerufen wird. Am Einfachsten ginge dies in dem du abprüfst ob dein DC und dein RC gesetzt sind. Bei Deinitialisieren müsstest du die aber wieder auf 0 setzen. Oder du machst eine Booleanvariable. Evtl wäre es auch sinnvoll deine Form beim Beenden frei zu geben und beim Show wieder richtig zu erstellen. Also Möglichkeiten gibt es genug. Es bleibt deiner Phantasie überlassen was du machst.
Das ist meine Initialisierung. Und wenn das halt in der formCreate steht in meiner Standalone-Anwendung funzt das halt auch.
Wenn ich die Unit woanders als modalen Dialog auruf, seh ich einfach nichts(beim nichtmodalen funktioniert es jetzt). Aber ich bekomme einen DC und die Methoden liefern auch true zurück.
Ich hab das ganze mal getrennt. Im create ist die setPixelFormat, wenn ich nun die setRendereingContext in der Show aufrufe, funktioert es wieder beim nichmodalen, aber es gibt eine Fehler
meldung beim modalen, also das Erstellen des Rendercontexts bringt einen Fehler. ???
Also ich habe jetzt die gesamte Initialisierung in die OnShow gepackt und in die Close das Freigeben des Speichers. So funktioniert das jetzt erstmal. Trotzdem würde mich mal interessieren, woran das liegt, dass es bei modal nicht funktioniert in der create, also wer was weis ...
noch was anderes kurzes: in der Show rufe ich eine Methode auf, die was zeichnet, Jedoch wird danach immer noch ein EraseBackground oder sowas aufgerufen, sodass meien Grafik wieder überzeichent wird und ich erst wieder per verschieben ein OnDraw auslösen muss.
Wie krieg ich das weg?
edit: noch ne Speicertechnische Frage: wenn ich das setPixelFormat mehrmahls benutz mach ich da memleaks?
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.