Leider mal wieder Fullscreen *duck*
-
hi... leider ist es immer wieder dasselbe Thema...
ich hab in der letzten Stunde nix anderes gemacht, als den Code durchzugehen, und mit anderen zu vergleichen.... Klammern überprüft usw.... aber ich komme auf keinen grünen Zweig... ich wette es ist ein ganz einfacher Fehler... und ich werde mir an den Kopf fassen, wenn mir wer den Fehler nennt. Also hier ist der Code...//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; bool fullscreen = true; bool OsWinNt(void); int NW,NH,NC,NF; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Form1->Left = (Screen->Width - 800) / 2; //Hier setzten wir unsere Form erstmal in die Mitte Form1->Top = (Screen->Height - 600) / 2; //des Bildschirms Form1->DoubleBuffered = true; //Hier nicht unbedingt notwendig, schadet aber nicht Form1->BorderStyle = bsNone; //Die Titelleiste der Form ausblenden (kein Border) NW = Screen->Width; // alte Breite der Bildschirmauflösung NH = Screen->Height; // und alte Höhe, das brauchen wir zum Zurückschalten NC = GetDeviceCaps(Canvas->Handle,BITSPIXEL); //Farbtiefe erfragen DEVMODE Modus; bool Modok = false; int CurrentModeNo = 0; while (EnumDisplaySettings(NULL, CurrentModeNo, &Modus)) // Prüfen, ob einer der verfügbaren Videomodi die { // neuen Einstellungen unterstützt if (Modus.dmBitsPerPel == DWORD(NC) && Modus.dmPelsHeight == DWORD(600) && Modus.dmPelsWidth == DWORD(800)) { // Wenn ja, if(OsWinNt()) // und wenn OS NT,2000 oder XP ist, { // vergleiche die Bildwiederholfrequenz: if(Modus.dmDisplayFrequency == (DWORD)NF) { Modok = true; //dann ist der Modus ok break; } } else { Modok = true; // Wenn kein NT-System, dann break; // ist Modus auf jedenfall ok } } CurrentModeNo++; } AnsiString screenMessage; //screenMessage wird deklariert if(Modok) //Wenn Modus ok { int Status = ChangeDisplaySettings(&Modus, CDS_UPDATEREGISTRY); if (Status == DISP_CHANGE_SUCCESSFUL) //Wenn Display erfolgreich geändert { //wurde fullscreen = true; //setze fullscreen auf true } else //Wenn Display nicht erfolgreich { //geändert wurde screenMessage = "Angegebene Bildschirmeinstellungen werden " "auf diesem System nicht unterstützt !"; //Zeige folgende Message ShowMessage(screenMessage); } } Button2->Visible = true; //Button wird angezeigt } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Button2->Visible = false; if (fullscreen) //Wenn momentan Fullscreen { DEVMODE Modus; int CurrentModeNo = 0; while(EnumDisplaySettings(NULL, CurrentModeNo, &Modus)) //Prüfen, ob einer der verfügbaren Videomodi die { // neuen Einstellungen unterstützt if (Modus.dmBitsPerPel == (DWORD)NC && Modus.dmPelsHeight == (DWORD)NH && Modus.dmPelsWidth == (DWORD)NW) { break; } CurrentModeNo++; } fullscreen = false; //Kein Fullscreen mehr } //Nun noch die standart größen der Form, wieder in die Mitte setzten und den Border //auf bsSingle zurück setzten, damit wir die Titelleiste sehen Form1->Width = 800; Form1->Height = 600; Form1->Left = (Screen->Width - 800) / 2; Form1->Top = (Screen->Height - 600) / 2; Form1->BorderStyle = bsSingle; } //--------------------------------------------------------------------------- bool OsWinNt(void) //Überprüfung, ob es ein NTsystem ist, wenn ja wird true zurückgegeben { OSVERSIONINFO stVerInfo; stVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&stVerInfo); return (stVerInfo.dwPlatformId==VER_PLATFORM_WIN32_NT); }ich hoffe er ist ausreichend kommentiert...
im Prinzip macht der Code nix anderes als die Form1 im Fullscreen anzuzeigen und wenn man dann auf den Button klickt, der erst dann erscheint... kommt man wieder in den Window-mode...Nun ist das Problem, dass er einfach nich in den Fullscreenmode geht... er ändert meine Screengröße einfach nich ab...
Wenn ich die OS-Überprüfung und die Frequenz-Überprüfung rausnehm, dann geht er zwar in den Fullscreenmode, aber behält dann die größe 800*600 bei... also muss ich von Hand meine Einstellung wieder machen...
Für jede Hilfe wär ich dankbar... wenn ich irgendwas forenregeltechnisches Falsch gemacht hab, bidde daraufhinweisen...mfg mck...
-
Wäre nett, wenn du uns auch noch sagst, was nicht funktioniert.

-
Nett wäre auch, wenn du nochmal erklärst, was du damit eigentlich vorhast. Ich verstehe z.B. nicht, was das mit dem Umschalten der Auflösung soll.
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Top = 0; Left = 0; Width = Screen->Width; Height = Screen->Height; BorderStyle = bsNone; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Top = 100; Left = 100; Width = 640; Height = 480; BorderStyle = bsSingle; } //---------------------------------------------------------------------------Fertig ist die FullScreen-Form inklusive "Exit".
-
Erstma thx für deine schnelle Antwort...
das Problem ist, dass er überhaupt nicht in den Fullscreenmode geht... also er ändert nicht die Auflösung des Users. Dein Code ändert ja die Form... aber ich möcht nich die Form an den User anpassen, sondern den User an die Form...
-
Hallo
also er ändert nicht die Auflösung des Users. Dein Code ändert ja die Form... aber ich möcht nich die Form an den User anpassen, sondern den User an die Form
Die Auflösung des Users? Meinst du die Auflösung des Desktops?

bis bald
akari
-
die Auflösung zu verändern würd ich mir wirklich gut überlegen.
Wenn der User ein paar Icons ganz rechts oder ganz unten am
Desktop hat, kann es vorkommen, dass diese verschoben werden.
Sowas find ich z.B. immer total nervig.
-
Jau, im Prinzip genau das...
Wie kann man das verschieben von Icons verhindern? Ich mein bei den meisten Spielen, die die Auflösung ändern werden ja auch keine Icons verschoben oder? Mein Programm soll nicht einfach nur die Auflöung ändern, sondern nur solange geändert lassen, bis ich wieder auf den Button1 drück...