Keine File-Dialogs bei OpenGL
spacer
Autor Nachricht
Kaspall
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: Mo 26.09.11 16:27 
Hallo Leute, also mich hält folgendes Problem wach:
Ich hab eine Fullscreen Anwendung geschrieben in der alles mit OpenGL gerendert wird. Ich brauche nun einen OpenDialog der mir Dateien laden kann, das Problem ist sobald der Dialog mit OpenDialog1.execute(); geöffnet wird macht er sich im Hintergrund auf und wird nicht angezeigt.
Jetzt hab ich dann versucht erst das Programm unsichtbar zu machen und dann den openDialog aufzurufe, aber wenn ich die Form
(laut code) verschwinden lasse und dann den openDialog öffne bleibt die Form angezeigt und der Dialog öffnet sich wieder im Hintergrund ohne das man ihn sieht. Wenn ich jedoch nach Form1.visible:=false(also unsichtbar machen) NICHT den Befehl gebe den openDialog zu öffnen verschwindet die Form wie gewünscht.

Ich kann mir das echt nicht mehr erklären was da los ist. Es muss doch einen Weg geben den OpenDialog angezeigt zu bekommen wenn man OpenGL auf der Form laufen hat.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
EE-Maler
Beiträge: 1754
Erhaltene Danke: 62

Windows XP
Delphi (2005 Bug Edition), Java (Eclipse), Haskell (ghci), C++ (Visual Studio 2010, Qt Creator)
BeitragVerfasst: Fr 14.10.11 21:56 
Ich würde ja behaupten, es liegt daran, dass du Fullscreen arbeitest. Da gibt es 2 verschiedene Varianten:

:arrow: Einfach nur ein "Vollbild-Fenster". Dann kannst du auch per Alt+Tab das Programm wechseln. In dem Fall sollte ein OpenDialog vorne erscheinen.

:arrow: Spiele verwenden das fast immer: Der komplette Bildschirminhalt ist an OpenGL gebunden. Die Bildschirmauflösung wird evtl verstellt. In dem Fall wird das Programm bei Alt+Tab minimiert. Soweit ich weiß kannst du dann kein andres Fenster vor deinem OpenGL-Fenster erscheinen lassen.

_________________
a broken heart is like a broken window - it'll never heal
Jen, [this computer] is infected. If this was a human being, I'd shoot it in the face. (IT Crowd)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1572
Erhaltene Danke: 50

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Sa 15.10.11 19:22 
Hey,

prizipell hat Xion recht. Aber da gibt es auch einen Trick. erstell dir einfach ne Form ohne Rand die so groß is wie die Bildschirmauflösung. So wie es Xion schon beschrieben hat. Dann geht das mit den Dialogen normalerweiße auch wieder. Und wenn du ne andere Auflösung brauchst, dann stellst du die einfach im FormCreate auf die gewünschten Werte. Wenn ich mich recht erinner wird die normale Auflösung wieder hergestellt, sobald die Form den Fokus verliert. Hier die Funktion für das umstellen der Auflösung:

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
//Wechselt die Auflösung des Monitors
//@Width: Breite in Pixeln;
//@Height: Höhe in Pixeln;
//@ColorDepth: Farbtiefe;
//@Freq: Bildwiederholfrequenz;
function gluToggleFullScreen(Width, Height, ColorDepth, Freq: Integer): Boolean;
var dmScreenSettings : DevMode;
begin
result := True;
ZeroMemory(@dmScreenSettings, SizeOf(dmScreenSettings));
with dmScreenSettings do begin
dmSize := SizeOf(dmScreenSettings);
dmPelsWidth := Width; // Breite
dmPelsHeight := Height; // Höhe
dmBitsPerPel := ColorDepth; // Farbtiefe
dmDisplayFrequency := Freq; // Bildwiederholfrequenz
dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_DISPLAYFREQUENCY;
end;
if (ChangeDisplaySettings(dmScreenSettings, CDS_FULLSCREEN) = DISP_CHANGE_FAILED) then begin
result := false;
end;
end;


Wie oben schon angedeutet bin ich mir aber nicht 100%tig sicher, da es lange her is, das ich damit gearbeitet habe. Kannst du nur ausprobieren ;)

MfG Bergmann.

_________________
Ich weiß nicht viel lern aber dafür umso schneller^^
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home