Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Positionen aller Forms wiederherstellen (https://www.delphipraxis.net/146050-positionen-aller-forms-wiederherstellen.html)

Schwedenbitter 13. Jan 2010 12:48

Re: Positionen aller Forms wiederherstellen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Heiko,

danke erstmal!

Zitat:

Zitat von hoika
Erstelle mal ein Bsp-Projekt, was den Fehler reproduziert.

Erledigt.
Ich habe eine 2. Variante. Die funktioniert immer dann, wenn das Programm frisch gestartet wird. Wenn ich aber das Fenster innerhalb einer laufenden Instanz mehrfach öffne und die Sub-Form zuletzt vor dem Schließen maximiert habe, dann klappt es auch nicht :wall:

Zitat:

Zitat von hoika
Kann es sein, dass du immer noch was im OnForm von Form2 stehen hast?

Nein! Die ist absolut leer, wie man anhand des angehängten Codes sehen kann.

Zitat:

Zitat von hoika
WP.Length:=SizeOf(TWindowPlacement);

Da es kein Pointer ist, kann ich es mir auch nicht erklären. Aber ich habe das so irgendwo hier im Forum oder anderswo so gefunden und einfach übernommen.

Zitat:

Zitat von hoika
Ich benutze Formular-Vererbung, nur mein Basis-Form enthält den "2-Zeiler".

Gibt es dazu eine Anleitung? Würde mich ggf. auch interessieren!

Gruß, Alex

hoika 13. Jan 2010 13:10

Re: Positionen aller Forms wiederherstellen
 
Hallo,

Form-Vererbung findest im Handbuch bzw. in der Hilfe-Datei.

WP.Length ist mir jetzt auch klar

TWindowPlacement ist ein Record. Ein Zeiger wird an Windows übergeben,
damit weiss Windows nicht, wie gross bzw. wie viele Felder der hat.
Es könnten ja mit neuen Windows-Versionen neue Felder hinzukommen.

Length ist meistens das 1. Feld des TRecords.

Indem du ihm "deine" Record-Länge angibst,
weiss Windows, welche Record-"Version" du hast.

Zu var_2

Klappt bei mir mit einer Ausnahme,
Maximized wird falsch geladen.
Das musst du selber abfangen.

Delphi-Quellcode:
            ReadBinaryData(Wnd.Name, Pos, SizeOf(TPos));
            CloseKey;

            Wnd.WindowState:= Pos.WState;
                                if Wnd.WindowState<>wsMaximized then
                                begin
                                  Wnd.Left:=         Pos.Left;
                                  Wnd.Top:=          Pos.Top;
                                  Wnd.Width:=         Pos.Width;
                                  Wnd.Height:=      Pos.Height;
                                end;

Und bei der Gelegenheit solltest du mal deine Tab-Taste ölen,
die hängt ;)

Einzüge sind in der Regel 2 Leerzeichen, nicht Tab.


Heiko

Schwedenbitter 13. Jan 2010 14:01

Re: Positionen aller Forms wiederherstellen
 
Zitat:

Zitat von hoika
Form-Vererbung findest im Handbuch bzw. in der Hilfe-Datei.

Danke. Das werde ich mir dann mal bei Gelegenheit reinziehen.

Zitat:

Zitat von hoika
Klappt bei mir mit einer Ausnahme,
Maximized wird falsch geladen.
Das musst du selber abfangen.

Delphi-Quellcode:
            ReadBinaryData(Wnd.Name, Pos, SizeOf(TPos));
            CloseKey;

            Wnd.WindowState:= Pos.WState;
                                if Wnd.WindowState<>wsMaximized then
                                begin
                                  Wnd.Left:=         Pos.Left;
                                  Wnd.Top:=          Pos.Top;
                                  Wnd.Width:=         Pos.Width;
                                  Wnd.Height:=      Pos.Height;
                                end;

Das will ich so aber nicht.

Den Umweg über TWindowPlacement bin ich doch extra gegangen, damit ich auch bei einem maximierten Fenster die Abmessungen bekomme, die es im normalen Zustand (=wsNormal) hat.
Wenn ich jetzt die Werte zurück auf das Fenster übertrage, soll es ja auch maximiert sein. Aber versuche mal, mit Deinem Code ein so maximiertes Fenster zu minimieren. Das wird ohne das Zuweisen der Werte für Left, Top, ... nicht klappen. Bei mir kommen dann so Sachen wie -4 bei Top und Left heraus. Ein Klick auf den Minimieren-Button quittiert das System dann mit einem einfachen statt doppelten Rahmen aber das Fenster bleibt dann riesig.

Bei mir funktioniert die 2. Variante des Codes jetzt komischer Weise...

Gruß, Alex

hoika 13. Jan 2010 14:05

Re: Positionen aller Forms wiederherstellen
 
Hallo,

dann dreh es halt um

Delphi-Quellcode:
Wnd.Left:=        Pos.Left;
Wnd.Top:=         Pos.Top;
Wnd.Width:=        Pos.Width;
Wnd.Height:=     Pos.Height;
Wnd.WindowState:= Pos.WState;
Das Problem kommt,weil du vorher zuerst Maximized und dann Left/Top gesetzt hast


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz