AutoResizeGadgets.pbi - Gadgets an Fenstergröße anpassen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: AutoResizeWindow.pbi - Größe und Position wiederherstell

Beitrag 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 :wink:
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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3856
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: AutoResizeGadgets.pbi - Gadgets an Fenstergröße anpassen

Beitrag von mk-soft »

Finde ich sehr gut. :allright:

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"

:wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: AutoResizeGadgets.pbi - Gadgets an Fenstergröße anpassen

Beitrag von Thorsten1867 »

Das dürfte wohl eher in den Aufgabenbereich des Form-Designers bzw. PureVisionXP fallen, entsprechende Einträge zu erzeugen. :wink:
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: AutoResizeGadgets.pbi - Gadgets an Fenstergröße anpassen

Beitrag 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)
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: AutoResizeWindow.pbi - Größe und Position wiederherstell

Beitrag von Thorsten1867 »

ts-soft hat geschrieben:Aber die Problematik mit minimierten und maximierten Fenster wurde nicht berücksichtigt :wink:
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.
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: AutoResizeWindow.pbi - Größe und Position wiederherstell

Beitrag von ts-soft »

Thorsten1867 hat geschrieben:Ich denke das ist ein akzeptabler Kompromiss.
Ist besser als nichts :wink:
Aber da dies nur bei Singleusern funktioniert (mit nur einem Bildschirm) halte ich die Nutzung von
GetWindowState() für sinnvoller!

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: AutoResizeWindow.pbi - Größe und Position wiederherstell

Beitrag 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. :mrgreen:

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?

Code: Alles auswählen

SetWindowState(WindowsID, #PB_Window_Normal)
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: AutoResizeWindow.pbi - Größe und Position wiederherstell

Beitrag 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?

Code: Alles auswählen

SetWindowState(WindowsID, #PB_Window_Normal)
Ja, kein Mensch wird dieses aufflackern übersehen und erfreut sein :mrgreen:

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 :mrgreen: )

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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: AutoResizeGadgets.pbi - Gadgets an Fenstergröße anpassen

Beitrag 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
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Antworten