Das liegt daran, dass Dein Panel noch kein Handle hat. Dieses bekommt es erst, wenn es sichtbar wird. Du darfst also nicht im FormCreate den Context erstellen, sondern musst warten, bis das Panel ein Handle hat. Am einfachsten erreichst Du das mit einem TPanel-Nachfolger, der dann die Methode CreateWnd überschreibt. Hier kannst Du dann nach dem Inherited Aufruf Deinen Kontext erstellen (aber Obacht: nicht wenn csDestroying im ComponentState ist, da wird das Handle wieder zerstört).
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kann jemand den Code geradeziehen und wieder hochladen. Ich hab ehrlich gesagt keinen Nerv mich wieder mit dem Delphi-Zeugs rumzuschlagen.
Es gibt auch ne Erwähnung im Tutorial.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Das Problem ist nicht der DC. Das Panel existiert bereits zum Zeitpunkt des GetDC-Aufrufs und die Adresse "00000008" läßt auch so gar nicht auf ein fehlendes Handle oder sowas schließen. Nene, das Problem liegt ganz woanders
Während nämlich GetDC ausgeführt wird, wird intern FormResize aufgerufen (ja, direkt nach InitOpenGL !). Hier existiert zwar noch kein Renderkontext und nix, aber Fromresize läuft trotzdem durch - bis der Aufruf "IdleHandler()" kommt.
Auch im IdleHandler passiert nichts schlimmes - bis "Render" aufgerufen wird. Hier knallt es dann bei
Code:
TScriptElement(Script[i]).Call;
Tja... "Script" ist zu diesem Zeitpunkt noch völlig uninitialisiert. Dies passiert erst im Init und damit leider zu spät. Abhilfe:
FormCreate modifizieren:
Code:
procedure TForm1.FormCreate(Sender:TObject);
begin
Script := TScript.Create(true);
ifnot InitOpenGL then Application.Terminate;
DC:= Windows.GetDC(Panel1.Handle);
RC:= CreateRenderingContext( DC,
[opDoubleBuffered],
32,
24,
0,0,0,
0);
ActivateRenderingContext(DC, RC);
SetupGL;
Init;
Application.OnIdle:= IdleHandler;
end;
Init modifizieren:
Code:
procedure TForm1.Init;
begin
GLError := GL_NO_ERROR;
Step :=-1;
aGrid := TGrid.Create;
//Script := TScript.Create;
//Script.OwnsObjects := true;
SetCommand(GL_CMD_NONE);
end;
Problem solved. Das Phänomen tritt unter D2006 übrigens nicht auf.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kann es sein, dass das gepostete "zip" das unveränderte Projekt enthält?
Kannst du die exe gleich mal mit anhängen (als zip).
(Ich will mal ausprobieren, ob das Fensterproblem (rechts verschwidnet was) durch das hochladen zum server, oder durch mein Delphi verursacht wird.)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich sage das nur äußerst ungern. Aber irgendwie sieht und verhält sich die Anwendung bei mir gerade ziemlich gruselig. Ich habe mir mal den Code gezogen und werde das heute abend mal etwas überarbeiten, wenns recht ist.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wobei ich aber auch gestehen muss, dass ich mir das Programm jetzt das erste Mal so wirklich bewusst angesehen habe. Aber ein paar Sachen die mir aufgefallen sind. Die Ansicht verändert sich in der Größe. Die Einstellungen bleiben aber wo sie sind. Die Schrift neben der Listbox ist ohne Kantenglättung nicht lesbar. Die Listbox an sich ist bei mir von den Edits überlagert. Das mit dem "Ausführen bis Zeile Nr" reagiert sehr komisch wenn Einträge löscht. etc. Das sind so viele Kleinigkeiten die jemaden wie mich, der seit Jahren nur Oberflächen entwickelt, etwas schaudern lassen.
PS: Ja ich weiß. Ich bin in manchen Dingen etwas kleinlich. Das regt meine Frau auch häufiger auf.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das Programm ist auch schon ein paar Jährchen alt. Und damals wurde es einfach schnell zusammen gehackt um mein Tutorial zu bebildern. Eigentlich sollte man nur die tollen Bilder bewundern. Das jemand mal den Code sieht *räusper* war so nicht gedacht.
Falls du es geradebiegen kannst - tu dir keinen Zwang an.
Funktioniert eigentlich die neue Version die ich dank OlafSt hochladen konnte?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
So delle. Hier mal die überarbeitet Version. Im Groben und Ganzen hat sich nur was an der GUI getan. Bzw die Klasse TScript ist etwas leerer als vorher. Und etwas den Code des Forms etwas angepasst.
PS Flash: Ich hoffe du bekommst keinen Shock.
edit link entfernt
Zuletzt geändert von Lossy eX am Fr Aug 03, 2007 22:21, insgesamt 1-mal geändert.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn ich das Projekt öffne kommt ne Fehlermeldung mit "Eigenschaft exisitert nicht: PanelSettings.DesignSize"
Da wirst du wohl nichts ändern können. Die Klasse sah bei D5 wohl noch anders aus.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 24 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.