Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 13:25

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Fullscreen in Oncreate
BeitragVerfasst: Mi Sep 16, 2009 23:01 
Offline
DGL Member

Registriert: Do Okt 23, 2008 21:15
Beiträge: 6
Wohnort: Berlin
hi @ all,

ich habe eigentlich ein simples Problem.
Ich möchte meine Anwendung im Fullscreenmode starten und hab mir diesen Tollen Code herausgesucht
Code:
  1.  
  2. procedure Tform1.GoTofullscreen(width,height:integer);
  3. var dmScreenSettings: DevMode;
  4. begin
  5. WindowState := wsMaximized;
  6. BorderStyle := bsNone;
  7. Form1.Cursor:=crNone;
  8. ZeroMemory(@dmScreenSettings, SizeOf(dmScreenSettings));
  9. with dmScreenSettings do
  10. begin
  11. dmSize := SizeOf(dmScreenSettings);
  12. dmPelsWidth :=width; // Breite
  13. dmPelsHeight :=height; // H?e
  14. dmBitsPerPel := 32; // Farbtiefe
  15. dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL ;
  16. end;
  17.  
  18. if (ChangeDisplaySettings(dmScreenSettings, CDS_FULLSCREEN) = DISP_CHANGE_FAILED) then
  19.  
  20. begin
  21. showmessage('Fullscreen konnte nicht aktiviert werden');
  22. exit;
  23. end;
  24. end;
  25.  


der Code funktioniert auch gut, aber iwie gibt es eine zugriffsverletzung, wenn ich das ganze in die On create Methode so reinschreibe
Code:
  1.  
  2.  
  3. procedure TForm1.FormCreate(Sender: TObject);
  4. begin
  5.    gotofullscreen(1280,800);
  6.  DC:= GetDC(Handle);
  7.   if not InitOpenGL then Application.Terminate;
  8.   RC:= CreateRenderingContext( DC,
  9.                                [opDoubleBuffered],
  10.                                32,
  11.                                24,
  12.                                0,0,0,
  13.                                0);
  14.   ActivateRenderingContext(DC, RC);
  15.    setupopengl;
  16.   Application.OnIdle := IdleHandler;
  17.  


Jetzt frag ich mich natürlich, warum denn das jetzt schon wieder. Ich hab das Problem jetzt zwar so gelöst, das ich das initialisieren zwei mal mache, einmal vor und einmal nach dem Fullscreensetzen, da der ja anscheinend das handle zusammenschlägt.
Aber irgendwie kann ich mich mit der lösung nicht ganz anfreunden, zumal sich auch Andere sachen in oncreate auf einmal komisch verhalten.
( Tmeineklasse.create wird nicht ausgeführt).

Es wär also ganz gut, wenn mir iwer mal genau erklären könnte wieso das da nich hin darf.
[/code]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 16, 2009 23:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
In GoToFullScreen referenzierst du Form1 (u.a. Form1.Cursor...), aber Form1 besitzt zu diesem Zeitpunkt noch keine gültige Referenz, das dürfte dann auch die Zugriffsverletzung verursachen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 17, 2009 06:14 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Also ich hab meine Fullscreen methode nicht an eine Form gebunden, sondern einfach global in eine seperate Unit für solche Dinge gepackt und ich führe das Wechseln zum Fullcreenmodus erst am Ende der FormCreate aus, damit ich sicherstelln kann, dass alles vorher richtig initialisiert wurde, denn ein Fullscreenwechsel ruft automatisch ein Resize auf und setzt dort evtl. Eigenschaften, die zum Zeitpunkt des Fullscreenaufrufs noch garnicht initialisiert wurden.

Edit: Die einstellungen der Form muss man natürlich vor der Initialisierung von OpenGl machen, weil dir der Border wechsel das handel zermalmt und das ist der Grund, warum das nicht zusammen sollte. Im groben sieht da dann so aus:

1. Form einstellen
2. OpenGl initialisieren
3. anderen Krempel createn und initialisieren
4. Fullscreenswitch => dadurch geht ein Resize event los, sorg also dafür, dass das Resize keinen ungültigen kram anstellt.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 17, 2009 13:48 
Offline
DGL Member

Registriert: Do Okt 23, 2008 21:15
Beiträge: 6
Wohnort: Berlin
Ok. Also wird form1 erst nach Form Create erzeugt?
Komischerweiße klappt das Umschalten in den Vollbilmodus aber, wenn ich die anderen Sachen weglasse.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 17, 2009 13:51 
Offline
DGL Member

Registriert: Do Okt 23, 2008 21:15
Beiträge: 6
Wohnort: Berlin
Unter Form einstellen verstehst du komponenten und so einrichten? Wenn das so ist brauch ich das ja nicht, weil meine Form nur eine Gl ausgabe erfüllen soll.

Aber danke. Jetzt versteh ich das komische Verhalten mit der create methode. da schon einmal resize aufgerufen wurde, bemüht er sich einmal zu render mit meinen klassen, die noch nicht erstellt sind.

thx

Döni


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 17, 2009 15:15 
Offline
DGL Member

Registriert: Do Okt 23, 2008 21:15
Beiträge: 6
Wohnort: Berlin
Ok eine Frage hätte ich dazu noch.

Wenn ich meine Form dann in den Fullscreenmode gesetzt habe, muss ich mir aber trotzdem nochmal die handles hohlen und opengl initialisieren oder?
sonst bleibt meine Form grau.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 17, 2009 15:55 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
Eigentlich dürfte der Fullscreen die Handles des Device-Kontextes und des Render-Kontextes nicht verändern, in meinen Projekten (wenn ich mit Fullscreen arbeite) initialisiere ich OpenGL und dann lade ich bestimmte daten und dann gleich in den Fullscreen, und bei mir is nix grau...
Im groben sehe ich allerdings auch keine Unterschiede zwischen meinem und deinem Quelltext :?

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]