Seite 3 von 3
Re: AutoResizeWindow.pbi - Größe und Position wiederherstell
Verfasst: 19.01.2014 13:17
von ts-soft
Thorsten1867 hat geschrieben:Hiermit kann man die Position und Größe von Fenstern speichern und beim nächsten Aufruf des Fenster bzw. Start des Programms wiederherstellen.
Aber die Problematik mit minimierten und maximierten Fenster wurde nicht berücksichtigt
Es darf nur die Größe beim normal-state gespeichert werden und zusätzlich noch der state.
Das Fenster sollte dann, immer erst im normal-state (evtl. versteckt) erstellt werden, bevor man den gespeicherten state
wiederherstellt.
Um die richtigen Werte für normal-state zu haben, auch wenn das Fenster bei Programmende einen anderen state hat, ist
es erforderlich, diese Werte bei jedem size bzw. move, im normal state mitzuschreiben (oder WinAPI).
Das jetzt allgemeingültig umzusetzen ist wohl nicht so einfach.
Gruß
Thomas
Re: AutoResizeGadgets.pbi - Gadgets an Fenstergröße anpassen
Verfasst: 19.01.2014 15:16
von mk-soft
Finde ich sehr gut.
Was ich mir wünsche ist eine Autofunktion die alle Gadgets erkennt und hinzufügt.
Nach der Methode was am Rand liegt, bleibt am Rand. Alle anderen scallieren und neu positionieren, außer optional Buttons scallieren.
Geht allerding dann nicht mit den Type "PB_Any"

Re: AutoResizeGadgets.pbi - Gadgets an Fenstergröße anpassen
Verfasst: 19.01.2014 15:27
von Thorsten1867
Das dürfte wohl eher in den Aufgabenbereich des Form-Designers bzw. PureVisionXP fallen, entsprechende Einträge zu erzeugen.

Re: AutoResizeGadgets.pbi - Gadgets an Fenstergröße anpassen
Verfasst: 20.01.2014 17:51
von Thorsten1867
Habe noch ein Problem gefunden.
Bei mehrmaligen Öffnen eines Fenster werden die Resize-Information immer wieder neu hinzugefügt und die Gadget u.U. mehrfach "resized".
Anstatt die Informationen in einer LinkedList abzulegen, benutze ich jetzt eine Map() und habe noch den Befehle "GadgetResize::RemoveWindow()" hinzugefügt, um bei Schließen des Fensters alle Elemente des Fensters aus der Map zu entfernen.
Damit es auch möglich ist, z.B. bei einem ListIconGadget die Spaltenbreite an die geänderte Gadgetbreite anzupassen, habe ich gleich noch den Befehl "SetResizeColumn()" hinzugefügt.
[Änderungen]
- Geändert: Map anstatt LinkedList
- Hinzugefügt: RemoveWindow(WindowID.i)
- Hinzugefügt: SetResizeColumn(GadgetID.i, Column.i)
Re: AutoResizeWindow.pbi - Größe und Position wiederherstell
Verfasst: 20.01.2014 18:25
von Thorsten1867
ts-soft hat geschrieben:Aber die Problematik mit minimierten und maximierten Fenster wurde nicht berücksichtigt

Ich habe entsprechende Änderungen vorgenommen.
Die Fenstergröße wird nur noch gespeichert, wenn das Fenster weder minimiert noch maximiert ist.
Ich denke das ist ein akzeptabler Kompromiss.
Re: AutoResizeWindow.pbi - Größe und Position wiederherstell
Verfasst: 20.01.2014 18:49
von ts-soft
Thorsten1867 hat geschrieben:Ich denke das ist ein akzeptabler Kompromiss.
Ist besser als nichts
Aber da dies nur bei Singleusern funktioniert (mit nur einem Bildschirm) halte ich die Nutzung von
GetWindowState() für sinnvoller!
Gruß
Thomas
Re: AutoResizeWindow.pbi - Größe und Position wiederherstell
Verfasst: 20.01.2014 19:06
von Thorsten1867
ts-soft hat geschrieben:Aber da dies nur bei Singleusern funktioniert (mit nur einem Bildschirm) halte ich die Nutzung von
GetWindowState() für sinnvoller!
Und wieder einen neuen Befehl gelernt.
Aber warum einfach, wenn es kompliziert geht oder war das anders herum.
Nachdem man SaveWindow() sinnvollerweise beim Schließen des Fensters benutzt, würde ein Zurücksetzen in den Normalzustand eigentlich alle Probleme lösen oder habe ich da etwas übersehen?
Re: AutoResizeWindow.pbi - Größe und Position wiederherstell
Verfasst: 20.01.2014 19:14
von ts-soft
Thorsten1867 hat geschrieben:Nachdem man SaveWindow() sinnvollerweise beim Schließen des Fensters benutzt, würde ein Zurücksetzen in den Normalzustand eigentlich alle Probleme lösen oder habe ich da etwas übersehen?
Ja, kein Mensch wird dieses aufflackern übersehen und erfreut sein
Nein, state speichern und ein bindevent für move, wo Du den state überprüfst und bei normal, x und y einer var übergibst.
Dann noch ein bindevent für size, wo Du dasselbe für widht und height machst.
Somit hast Du immer aktuelle Werte, wo das Fenster im Normal-Modus war. Unter Windows gibt es zwar noch eine etwas
einfachere Möglichkeit, aber API sollten wir vermeiden (vor allem, da ich Linux nutze

)
Gruß
Thomas
// pseudocode:
Code: Alles auswählen
Procedure SizeWin()
Protected WinID = EventWindow()
suchen in der Liste oder Map
wenn gefunden:
If GetWindowState(WinID) = #PB_Window_Normal
bla\Height = WindowHeight(WinID)
bla\width = WindowWidth(WinID)
EndIf
EndProcedure
Procedure MoveWin()
Protected WinID = EventWindow()
suchen in der Liste oder Map
wenn gefunden:
If GetWindowState(WinID) = #PB_Window_Normal
bla\X = WindowX(WinID)
bla\Y = WindowY(WinID)
EndIf
EndProcedure
Re: AutoResizeGadgets.pbi - Gadgets an Fenstergröße anpassen
Verfasst: 20.01.2014 22:42
von Thorsten1867
Zwei Module die den gleichen Event nutzen, sind wohl nicht so optimal. Daher habe ich sie zu einem Komplettpaket zusammengefasst:
Gadgets an Fenstergröße anpassen & Fenstergröße speichern