Clientbereich der Form Fullscreen



  • Folgendes Problem der C++Builder erlaubt OpenGL nur im Clientbereich zu Zeichnen.
    Eigentlich kein Problem, doch selbst wenn ich den BoarderStyle auf bsNone setze und mittels Form1->WindowState = wsMaximized; sicherstelle das das Fenster Fullscreen ist, bleibt der Clientbereich etwas kleiner.
    Das bewirkt das ich Oben (ich schätze in etwa breite der Titelleiste) und Rechts (ich schätze breite der Fensterumrandung) nicht Rendern kann.
    Interresanter weise sind Objekte der VCL z.B. Label in diesem bereich Platzierbar.



  • Versuch mal die Größe des Bildschirms zu lesen mit der "Screen" Klasse und dann die Größe und Breite manuell zu setzen, anstatt Maximize zu benutzen.
    + stay on top.
    Könnte vielleicht helfen... Vielleicht aber auch nicht 😃



  • Danke für die Antwort, Funktioniert aber leider nicht:(
    Ich denke ich werde auf die Form verzichten und statt dessen Manuell ein Fenster erstellen.
    Hatt wer eine ahnung ob ich in diesem Fenster trotzdem noch VCL-Elemente nutzen kann (das es nicht Visuel geht ist klarr, aber halt aus dem Code herraus)?



  • Welche VCL Elemente meinst du?



  • GenialerIdiot schrieb:

    Folgendes Problem der C++Builder erlaubt OpenGL nur im Clientbereich zu Zeichnen.
    Eigentlich kein Problem, doch selbst wenn ich den BoarderStyle auf bsNone setze und mittels Form1->WindowState = wsMaximized; sicherstelle das das Fenster Fullscreen ist, bleibt der Clientbereich etwas kleiner.
    Das bewirkt das ich Oben (ich schätze in etwa breite der Titelleiste) und Rechts (ich schätze breite der Fensterumrandung) nicht Rendern kann.
    Interresanter weise sind Objekte der VCL z.B. Label in diesem bereich Platzierbar.

    Kann es sein das du nicht direkt in der Form deinen OpenGL Bereich erstellt?

    Wenn ich das Fenster maximiert darstellen lasse und BorderStyle auf None setzt sehe ich bei mir keinen Rand.



  • Also im Speziellen währen mir die VCL_Elemente Timer und für TCP/IP ClientSocket und ServerSocket wichtig.
    Ich Zeichne direkt auf die Form, die Ränder werden in der OpenGL Eingestellten Hintergrundfarbe gezeichnet, jedoch wenn ich z.B. ein Rechteck über den ganzen Bildschirm Zeichne geschiet das an diesen Rändern ebend nicht. Für die Positionierung werden die Ränder auch Ignoriert (also Links Oben ist halt Links aber etwas unterhalb), warum OpenGL sie überhaupt einfärbt ist mir ein Rätsel.



  • Hallo,

    Timer, Client- und ServerSocket sind sowieso eine visuellen Elemente. Grundsätzlich kannst du jedes Objekt zur Laufzeit erstellen.

    TServerSocket *sSocket = new TServerSocket();
    TClientSocket *cSocket = new TClientSocket();
    // usw.
    

    VlG



  • Hallo

    hmmz schrieb:

    Timer, Client- und ServerSocket sind sowieso eine visuellen Elemente.

    Du meintest sicher :
    Timer, Client- und ServerSocket sind sowieso keine visuellen Elemente.

    bis bald
    akari



  • Hallo,

    oh 🙂 selbstverständlich! Danke für die Korrektur

    VlG



  • GenialerIdiot schrieb:

    Also im Speziellen währen mir die VCL_Elemente Timer und für TCP/IP ClientSocket und ServerSocket wichtig.
    Ich Zeichne direkt auf die Form, die Ränder werden in der OpenGL Eingestellten Hintergrundfarbe gezeichnet, jedoch wenn ich z.B. ein Rechteck über den ganzen Bildschirm Zeichne geschiet das an diesen Rändern ebend nicht. Für die Positionierung werden die Ränder auch Ignoriert (also Links Oben ist halt Links aber etwas unterhalb), warum OpenGL sie überhaupt einfärbt ist mir ein Rätsel.

    Ich denke mal du verwendest glOrtho ?
    Welche Parameter verwendest du bzw. mit welchen Koordinaten lässt du dann deinen Rand zeichnen?



  • ja im moment nutze ich GLOrtho mit 0,0 Links Oben und 1600.900 Rechts Unten.
    Bei einer Auflösung von 1600 zu 900 (ich habe auch schon versucht in den minusbereich zu gehen, was natürlich nicht Funktionierte).
    Außerdem bestand das Problem auch schon unter GluPerspektiv, wo ich die Koordinaten natürlich nicht zu Windows hin verzehrte. Ich bin für jede Lösung sehr Dankbar (Hoffnungsvoll auf die Knie werfend, die Hände zum Gebet verschränkt).^^



  • Wenn du 0,0 Links Oben und 1600,900 Rechts Unten hast, dann definierst Du, daß deine OpenGL Fläche 1601x901 groß ist.
    Da OpenGL aber bei Vollbild nur die 1600x900 Pixel zur Verfügung stehen werden deine 1601x901 reingepresst und wenn du Pixelangaben machen willst klappt das natürlich nicht.

    Also setzte dein Raster auf 1, 1, 1600, 900 oder auf 0,0, 1599,899.



  • Ohh danke, ganz vergessen^^
    Doch am Problem ändert sich natürlich trotzdem nichts, denn dank der Ränder sind Pixelangaben ehh nicht Richtig.


Log in to reply