AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Positionen aller Forms wiederherstellen

Ein Thema von Schwedenbitter · begonnen am 13. Jan 2010 · letzter Beitrag vom 13. Jan 2010
Antwort Antwort
Seite 2 von 2     12   
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Positionen aller Forms wiederherstellen

  Alt 13. Jan 2010, 13:48
Hallo Heiko,

danke erstmal!

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

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 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 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
Angehängte Dateien
Dateityp: zip var_2_p_189.zip (1,9 KB, 2x aufgerufen)
Dateityp: zip var_1_p_108.zip (1,7 KB, 0x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Positionen aller Forms wiederherstellen

  Alt 13. Jan 2010, 14:10
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
Heiko
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Positionen aller Forms wiederherstellen

  Alt 13. Jan 2010, 15:01
Zitat von hoika:
Form-Vererbung findest im Handbuch bzw. in der Hilfe-Datei.
Danke. Das werde ich mir dann mal bei Gelegenheit reinziehen.

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
Alex Winzer
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: Positionen aller Forms wiederherstellen

  Alt 13. Jan 2010, 15:05
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 Uhr.
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