Autor Beitrag
Kaspall
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65
Erhaltene Danke: 10



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.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
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
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

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
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^^