Fensterposition speichern



  • Mordamir schrieb:

    Hab ich irgendwo etwas übersehen?

    Höchstwahrscheinlich, da es eigentlich funktionieren sollte.
    Prüfe mal Deine "Position"-Property. Die sollte auf "poDesigned" stehen, damit es funktionieren kann.



  • Ag3nt schrieb:

    ....
    Form1-Left=IntToStr(IntVariable) in die Form zurück.
    ....

    int IntVariable = 123;
    Form1->Left = IntToStr(IntVariable);
    

    ➡ [C++ Fehler] E2034 Konvertierung von 'AnsiString' nach 'int' nicht möglich ⚠

    😃 😃 -Kein Kommentar-



  • promicha schrieb:

    -Kein Kommentar-

    Nachmacher 😉



  • Sorry, bin erst jetzt weider dazu gekommen. Ein OnInit-Event gibt es nicht, höchstens OnCreate.
    Das Schreiben der Werte in die Registry klappt ja auch, und auch das zurücklesen in Form1->Top und Form1->Left, nur öffnet sich das Fenster dann trotzdem an der alten Position. Die Eigentschaft Position steht auf poDesigned.
    Habe das zurücklesen der Werte in den Events OnCreate und OnShow probiert, bei beiden kein Ergebnis.



  • OnCreate 🙂 ist gemeint 🙂

    Ehm ich kann ja mal naher nen Code für dich progen 🙂 Als Beispiel 🙂



  • Mordamir schrieb:

    Sorry, bin erst jetzt weider dazu gekommen. Ein OnInit-Event gibt es nicht, höchstens OnCreate.
    Das Schreiben der Werte in die Registry klappt ja auch, und auch das zurücklesen in Form1->Top und Form1->Left, nur öffnet sich das Fenster dann trotzdem an der alten Position. Die Eigentschaft Position steht auf poDesigned.
    Habe das zurücklesen der Werte in den Events OnCreate und OnShow probiert, bei beiden kein Ergebnis.

    Meinst du mit alten Position, etwa die Position an der das Fenster beim letzten
    Programmstart stand, und wurde dieser vieleicht gespeichert?

    Probier doch einfach mal Testwerte aus um den eigentlichen Fehler nähr zu kommen, z.B. Left = 0,Top = 0. und das im OnCreate Ereigniss.
    Sollte das Funktionieren, liegt der Fehler wo anders, wenn nicht dann giebt
    das hier vermutlich noch ein langer Thread, da es funktionieren sollte.

    gruß Micha

    Zusatz:
    Hast Du ein NT System (NT,2000,XP)??? Dann könnte es Möglich sein das die
    Daten gar nicht in der Registry stehen, wenn dem so ist, dann Zeige mal
    dein Code für die Registry. Wenn du die ganz einfache Variante verwendest, haut es nicht.



  • Ja, es geht darum, dass das Fenster wieder an der gleichen Position geöffnet wird.
    Die Daten werden schon richtig in die Registry gespeichert. Wenn ich das Fenster ganz oben links hin verschiebe, dann steht in der Registry beim beenden des Programms auch 0, 0 für die Koordinaten. Auch das zurücklesen an sich funktioniert. 0,0 stehen dann auch in Top & Left. Nur wenn das Fenster dann auch angezeigt wird, ist es wieder an den alten Koordinaten. Position ist poDesigned. Betriebssystem ist Windows 2000.



  • Und auf was hast du Form->Align stehen?



  • Das Problem is dein poDesigned. Stell das mal auf poDefault um, dann sollte es klappen.



  • -=]xXx[=- schrieb:

    Das Problem is dein poDesigned. Stell das mal auf poDefault um, dann sollte es klappen.

    Sicher das es mit poDesigned nicht geht?

    Bei mir Funktioniert es prima



  • Bei mir hats nicht geklappt.



  • Hab das Problem bei mir gefunden. Ich hatte ein Unterprogramm geschrieben, welches die Registry-Daten für die Fensterposition ausliest. Top & Left hatte ich dabei als Adresse übergeben. Das sah so aus:

    void LoadWindowPosition(AnsiString WindowName, int *Left, int *Top)
    {
    ...
    }
    

    Das Problem daran scheint wohl zu sein, das man auf diese Weise nicht die Properties Top & Left übergeben kann, weil die ja nicht direkt eine Speicheradresse haben.
    Wenn ich jetzt der Funktion 2 Temporäre Variablen für Top & Left übergebe, und diese anschliesend den Form-Properties zuweise, dann funktioniert es.



  • 1000 Wege führen zum richtigen Code 🙂

    Also Glückwunsch das es nun geht 🙂


Anmelden zum Antworten