Fenster Größe (wichtig/dringend)



  • also einfach in die erste Zeile der FormCreate Methode den Code da reinschreiben?
    so hab ich das nämlich gemacht.



  • Hi,

    ist schon richtig; bevor das Formular zur Anzeige kommt, ermittelt man Höhe
    und Breite des Bildschirms. Also in OnCreate.

    TScreen ist in VCL eine Klasse, schau sie dir mal an.
    Möglicherweise (ganz bestimmt) musst du alle Steuerelemente und dein Formular skalieren,
    wenn dein Spiel auf kleineren Bildschirmen laufen soll.

    mfg
    kpeter



  • Hallo,

    wie wärs denn mit WindowState -> wsMaximized und BorderStyle -> bsNone??

    //Edit: Frage nicht korrekt gelesen 😃

    Du kannst auch die Auflösung an das Spiel anpassen...
    hier

    LG, Micha



  • also muss man das doch anpassen, wenn es auf einem kleineren bildschirm läuft. schade.. ich dahcte das geht vielleicht irgentwie anders. naja, werd mal mit der bildschirmauflösung prob.



  • Die Anweisung gehört übrigens in den Konstruktor und nicht in OnCreate. Das sollte man besser gar nicht verwenden. Siehe auch dazu die Hilfe zu OnCreate.



  • Hi,

    @Braunstein,

    Braunstein schrieb:

    Die Anweisung gehört übrugens in den Konstruktor und nicht in OnCreate. Das sollte man besser gar nicht verwenden. Siehe auch dazu die Hilfe zu OnCreate.

    Welche Anweisung meinst du, in diesem Thread stehen schon einige Lösungsvorschläge.

    mfg
    Peter



  • Ich meine all das, was in OnCreate geschrieben worden ist. OnCreate sollte einfach nicht mehr verwendet werden.



  • Also ich habe die Erfahrung gemacht das einige Objekte im Konstruktor noch nicht existieren, im OnCreate allerdings schon.



  • Hundeman schrieb:

    Also ich habe die Erfahrung gemacht das einige Objekte im Konstruktor noch nicht existieren, im OnCreate allerdings schon.

    In anderen UI-Frameworks kenne ich das auch so, beim C++ Builder habe ich aber noch nie einen solchen Fall erlebt.



  • OnCreate kann aber durchaus vor dem Konstruktor aufgerufen werden, so dass das nicht sicher ist. Wenn du wirklich sicher gehen willst nimm lieber OnShow oder OnActivate, aber auf keinem Fall OnCreate.
    siehe auch
    http://web.archive.org/web/20041208115505/http://www.bcbdev.com/articles/suggest.htm#oncreate



  • Ich hab den BCB 5 und 6 und habe dort ebenfalls kein solches Verhalten feststellen können.



  • Hi,

    @Braunstein,
    die Webseite ist schon etwas angestaubt...

    Note: Updated Feb 21, 2000. New items have a NEW icon.

    Zumal in den Beispielprojekten des BCB6 ausgiebig in FromCreate gecodet wird.
    Werd mir das Thema aber dennoch genauer ansehen.

    mfg
    kpeter



  • Ich weiß, dass die Seite schon etwas älter ist (ist ja auch aus dem Archiv). Das Thema ist aber weiterhin gültig. Wenn du genaueres wissen willst suche mal nach OldCreateOrder.



  • Hundeman schrieb:

    Also ich habe die Erfahrung gemacht das einige Objekte im Konstruktor noch nicht existieren, im OnCreate allerdings schon.

    Konkretisiere das mal.

    Wie die Vorposter bereits feststellten, passiert das eigentlich nicht. Der Konstruktor wird von Application::CreateForm() aufgerufen, der Konstruktor der Basisklasse lädt und initialisiert alle Komponenten.

    Anders ist die Situation natürlich, wenn du eine Komponente entwickelst, da diese erst nach der Konstruktion vom Streaming-System geladen werden. In diesem Falle könntest du TComponent::Loaded() überladen (darin aber die Loaded()-Methode der Basisklasse aufrufen!), das unmittelbar nach der Deserialisierung aufgerufen wird.



  • So wie ich es verstanden habe ist es nur gefährlich OnCreate bzw. OnDestroy zu verwenden wenn man alte Projekte importiert werden. Wenn man etwas komplett neu erstellt ab dem BCB5 sollte man nur wissen das es zu Problemen kommen kann.

    audacia schrieb:

    Konkretisiere das mal.
    Wie die Vorposter bereits feststellten, passiert das eigentlich nicht. Der Konstruktor wird von Application::CreateForm() aufgerufen, der Konstruktor der Basisklasse lädt und initialisiert alle Komponenten.

    Anders ist die Situation natürlich, wenn du eine Komponente entwickelst, da diese erst nach der Konstruktion vom Streaming-System geladen werden. In diesem Falle könntest du TComponent::Loaded() überladen (darin aber die Loaded()-Methode der Basisklasse aufrufen!), das unmittelbar nach der Deserialisierung aufgerufen wird.

    Die genaue Sitauation weoß ich nicht mehr. Ich weiß nur noch das ich auf TLabels zugreifen wollte und ich im Konstruktor das jedesmal um die Ohren geschlagen bekommen habe.


Anmelden zum Antworten