Man stelle sich vor man erstellt ein Fenster mit einigen Gadgets.
Wenn man jetzt die Fenstergröße des Browsers ändert, gibt es eine Möglichkeit, dass sich das erstellte Fenster automatisch erneuert und alle Gargets in ihm sich in Größe und Abstand zueinander automatisch anpassen?
Bis jetzt muss ich immer erst alles umständlich umrechnen und ggf sogar die Images in den Gadgets neu resizen und so. Das kostet immer viel Rechenzeit und ist alles andere als "flüssig".
Gadgets automates anpassen
-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Gadgets automates anpassen
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Gadgets automates anpassen
Dafür gibt es doch Dialog. Muss man allerdings ein bischen umdenken. Von HeX0R gibts dafür den DialogDesignOR.
"Papa, ich laufe schneller - dann ist es nicht so weit."
-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Gadgets automates anpassen
Sorry, ich habe mir das eben mal heruntergeladen. Damit kann ich überhauptnichts anfangen...
Ich habe auch keine xml Dateien, nur Spiderbasic-Dateien.
Ich habe auch keine xml Dateien, nur Spiderbasic-Dateien.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Gadgets automates anpassen
Nunja das ginge vermutlich wohl am Einfachsten mit "wrappen" wenn keine Dialogs möglich sind, und es nicht in HTML/CSS selbst geht.
1) Du müsstest für jedes Gadget eine Info-Struktur anlegen. Darin enthalten: gadget_id, x.f,y.f,w.f,h.f., ggf. window_id. Die id's sind die PB bzw. SB id's (nicht WindowID(#Window) sondern -> #Window benutzen).
Die Werte in der Info Struktur entsprechen bei x,w = GadgetX() bzw. GadgetWidth() geteilt durch original Fenster Breite, und bei y,h = Wert/Original Höhe.
2) Des Weiteren eine Struktur für das Fenster mit den Original Abmaßen (Breite x Höhe) und #Window Nummer. Vielleicht ließe sich in diese Struktur die Gadget Liste je Fenster implementieren, aber es ginge auch mit einer globalen Liste die sich alle Gadgets teilen.
3) Wenn die Fenstergröße sich ändert arbeitest Du die Gadget-Info Liste ab und multiplizierst x,y,w,h mit den neuen jeweiligen Größen. Dann sollte das komplette Fenster perfekt skallieren. Du könnstest auch mit den Strukturen rumspielen, min/max werte hinzufügen für die höhen und breiten. Damit kannst du verhindern dass die Gadgets zu groß oder klein werden können, ggf. das WindowResize begrenzen und erneuern.
Nach dem Aufbauen eines Fensters könntest Du deine Gadgets "registrieren" also der Liste bzw. den Listen (je nachdem wie Du es machen willst) hinzufügen mit RegisterAutoResize(#Gadget, #Window) oder sowas Ähnliches. Vorher solltest Du aber schon das Fenster "registrieren", also die Abmaße in eine Info struktur setzen, weil ja die RegisterAutoResize() unter Punkt 3 die u/v Koordinaten damit rausrechnen muß. Daher bräuchtest Du auch eine GetWindowInfoStructure() und GetGadgetInfoStructure() Hilfsfunktionen, sowie eine AutoResizeWindowGadgets()...
1) Du müsstest für jedes Gadget eine Info-Struktur anlegen. Darin enthalten: gadget_id, x.f,y.f,w.f,h.f., ggf. window_id. Die id's sind die PB bzw. SB id's (nicht WindowID(#Window) sondern -> #Window benutzen).
Die Werte in der Info Struktur entsprechen bei x,w = GadgetX() bzw. GadgetWidth() geteilt durch original Fenster Breite, und bei y,h = Wert/Original Höhe.
2) Des Weiteren eine Struktur für das Fenster mit den Original Abmaßen (Breite x Höhe) und #Window Nummer. Vielleicht ließe sich in diese Struktur die Gadget Liste je Fenster implementieren, aber es ginge auch mit einer globalen Liste die sich alle Gadgets teilen.
3) Wenn die Fenstergröße sich ändert arbeitest Du die Gadget-Info Liste ab und multiplizierst x,y,w,h mit den neuen jeweiligen Größen. Dann sollte das komplette Fenster perfekt skallieren. Du könnstest auch mit den Strukturen rumspielen, min/max werte hinzufügen für die höhen und breiten. Damit kannst du verhindern dass die Gadgets zu groß oder klein werden können, ggf. das WindowResize begrenzen und erneuern.
Nach dem Aufbauen eines Fensters könntest Du deine Gadgets "registrieren" also der Liste bzw. den Listen (je nachdem wie Du es machen willst) hinzufügen mit RegisterAutoResize(#Gadget, #Window) oder sowas Ähnliches. Vorher solltest Du aber schon das Fenster "registrieren", also die Abmaße in eine Info struktur setzen, weil ja die RegisterAutoResize() unter Punkt 3 die u/v Koordinaten damit rausrechnen muß. Daher bräuchtest Du auch eine GetWindowInfoStructure() und GetGadgetInfoStructure() Hilfsfunktionen, sowie eine AutoResizeWindowGadgets()...
-
- Beiträge: 700
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Gadgets automates anpassen
Ja, so in der Art dachte ich mir das auch.
Das finde ich allerdings ziemlich umständlich und ich bin mir nicht einmal sicher, ob das mit Spiderbasic so richtig funktionieren kann, da einige Dinge denn doch noch immer noch recht fehlerhaft sind.
Da kann man ja eigendlich fast gleich direkt Javascript programmieren.
Ok, erst einmal danke für die Info
Das finde ich allerdings ziemlich umständlich und ich bin mir nicht einmal sicher, ob das mit Spiderbasic so richtig funktionieren kann, da einige Dinge denn doch noch immer noch recht fehlerhaft sind.
Da kann man ja eigendlich fast gleich direkt Javascript programmieren.
Ok, erst einmal danke für die Info

Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: Gadgets automates anpassen
Da ist gar nix umständlich, wenn man denn auf dige gehört hätte.
Ich meine jetzt den Hinweis mit Dialogen, nicht mit meinem Tool, wenn Dir das zu kompliziert ist, brauchst Du es ja nicht benutzen.
Dialoge kann man auch zu Fuß erstellen (wenn man denn möchte).
Hier 5 Minuten Arbeit (Achtung: SpiderBasic Code!):
Ich meine jetzt den Hinweis mit Dialogen, nicht mit meinem Tool, wenn Dir das zu kompliziert ist, brauchst Du es ja nicht benutzen.
Dialoge kann man auch zu Fuß erstellen (wenn man denn möchte).
Hier 5 Minuten Arbeit (Achtung: SpiderBasic Code!):
Code: Alles auswählen
Procedure.s GetXMLString()
Protected XML$
XML$ + "<?xml version='1.0' encoding='UTF-16'?>"
XML$ + ""
XML$ + "<dialogs><!--Created by Dialog Design0R V1.84 => get it from: https://hex0rs.coderbu.de/en/sdm_downloads/dialogdesign0r/-->"
XML$ + " <window flags='#PB_Window_SystemMenu|#PB_Window_SizeGadget' minwidth='300' name='window_1' minheight='350' xpos='84' ypos='286'>"
XML$ + " <vbox expand='item:3'>"
XML$ + " <hbox expand='item:2'>"
XML$ + " <text text='Bratpfannentyp:' name='text_1'/>"
XML$ + " <string width='100' name='string_1' height='24'/>"
XML$ + " </hbox>"
XML$ + " <frame text='Stinktiere' name='frame_1'>"
XML$ + " <gridbox columns='3' colexpand='item:2'>"
XML$ + " <text text='Name:' name='text_2'/>"
XML$ + " <string colspan='2' name='string_2' height='24'/>"
XML$ + " <text text='Genitallänge:' name='text_3'/>"
XML$ + " <string colspan='2' name='string_3' height='24'/>"
XML$ + " <text text='Geschlecht:' name='text_4'/>"
XML$ + " <combobox name='combobox_1' height='24'/>"
XML$ + " <checkbox text='divers' name='checkbox_1'/>"
XML$ + " </gridbox>"
XML$ + " </frame>"
XML$ + " <frame text='Log:' name='frame_2'>"
XML$ + " <editor height='200' name='editor_1'/>"
XML$ + " </frame>"
XML$ + " </vbox>"
XML$ + " </window>"
XML$ + "</dialogs><!--DDesign0R Definition: SpiderBasic|1|1|1|__|example_with_declares|0|AddOn:3:0-->"
XML$ + ""
ProcedureReturn XML$
EndProcedure
a$ = GetXMLString()
If ParseXML(0, a$) And XMLStatus(0) = #PB_XML_Success
CreateDialog(0)
OpenXMLDialog(0, 0, "window_1")
AddGadgetItem(DialogGadget(0, "combobox_1"), -1, "weiblich")
AddGadgetItem(DialogGadget(0, "combobox_1"), -1, "männlich")
SetGadgetState(DialogGadget(0, "combobox_1"), 0)
EndIf
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}