Dialog - Aktualisieren von Teilen des UI
- alen
- Beiträge: 107
- Registriert: 09.04.2007 17:38
- Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms - Wohnort: Duisburg
- Kontaktdaten:
Dialog - Aktualisieren von Teilen des UI
Hallo Community,
ich beschäftige mich noch nicht so sehr lang mit dem genialen neuen Dialog Feature.
An der ein oder anderen Stelle hakt es noch.
Und hier habe ich mal eine Frage in die Runde.
Ich habe mir hier eine UI per XML Definition erstellt und möchte Teile davon, sprich einzelne Gadgets zur Laufzeit aktualisieren.
Inhalte abhängig von Datenbankanfragen einbauen, Resizing etc.
Alles was man so für eine dynamische Anwendung braucht.
Wie ist hier die beste Strategie bzw. Vorgehensweise ? Hat hier jemand schon mal Erfahrungen gemacht ?
Hier gibt es ja den Befehl: RefreshDialog(#Dialog)
In der Anleitung ist die Beschreibung sehr dünn und ohne echte Beispiele.
Kann mir jemand hier mal einen Denkanstoss geben, wie man den Befehl sinnvoll einsetzt.
Oder gibt es einen anderen Weg.
Grüße
Alen
ich beschäftige mich noch nicht so sehr lang mit dem genialen neuen Dialog Feature.
An der ein oder anderen Stelle hakt es noch.
Und hier habe ich mal eine Frage in die Runde.
Ich habe mir hier eine UI per XML Definition erstellt und möchte Teile davon, sprich einzelne Gadgets zur Laufzeit aktualisieren.
Inhalte abhängig von Datenbankanfragen einbauen, Resizing etc.
Alles was man so für eine dynamische Anwendung braucht.
Wie ist hier die beste Strategie bzw. Vorgehensweise ? Hat hier jemand schon mal Erfahrungen gemacht ?
Hier gibt es ja den Befehl: RefreshDialog(#Dialog)
In der Anleitung ist die Beschreibung sehr dünn und ohne echte Beispiele.
Kann mir jemand hier mal einen Denkanstoss geben, wie man den Befehl sinnvoll einsetzt.
Oder gibt es einen anderen Weg.
Grüße
Alen
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Re: Dialog - Aktualisieren von Teilen des UI
Schau dir mal die Beispiele unten in der Hilfe bei dem Befehl "OpenXMLDialog" an. Danach wird es dir denk ich klar sein, wie auf die Gadgets zugegriffen wird.

Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
- alen
- Beiträge: 107
- Registriert: 09.04.2007 17:38
- Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms - Wohnort: Duisburg
- Kontaktdaten:
Re: Dialog - Aktualisieren von Teilen des UI
Hallo Sicro,
vielleicht habe ich das etwas missverständlich aufgeschrieben.
Es soll nicht nur auf einzelne Gadgets zugegriffem werden, sondern Teile der UI Definition erneuert werden.
Ich ersetze den Teil des ursprünglichen XML Codes über den Platzhalter "<SettingsPlaceHolder/>". Es wird neuer XML Code generiert, durch die Procedure CreatePrefsXML() erzeugt wird.
Also wird der der komplette XML Part
neu erzeugt, im Ursprungs XML Code ersetzt. Anschliessend wird die UI neu erstellt.
Nur das ist eine sehr unschöne Vorgehensweise und nur ein Workaround weil keine bessere Losung in Sicht ist.
Genau hier setzt meine Frage an.
Bekommt man das irgendwie eleganter hin ?
Grüße
Alen
Hier mein Beispielcode:
vielleicht habe ich das etwas missverständlich aufgeschrieben.
Es soll nicht nur auf einzelne Gadgets zugegriffem werden, sondern Teile der UI Definition erneuert werden.
Ich ersetze den Teil des ursprünglichen XML Codes über den Platzhalter "<SettingsPlaceHolder/>". Es wird neuer XML Code generiert, durch die Procedure CreatePrefsXML() erzeugt wird.
Also wird der der komplette XML Part
Code: Alles auswählen
...
xml + "<hbox expand='item:2'>" + #CRLF$
xml + " <string name='" + key + "' width='180' text='" + key + "' flags='" + flags + "'/>" + #CRLF$
xml + " <string name='" + value + "' text='" + value + "'/>" + #CRLF$
xml + "</hbox>" + #CRLF$
...
Nur das ist eine sehr unschöne Vorgehensweise und nur ein Workaround weil keine bessere Losung in Sicht ist.
Genau hier setzt meine Frage an.
Bekommt man das irgendwie eleganter hin ?
Grüße
Alen
Hier mein Beispielcode:
Code: Alles auswählen
EnableExplicit
Runtime Enumeration Gadget
#XML
#Dialog
#MainWindow
#button_run
#button_quit
EndEnumeration
CompilerIf #PB_Compiler_Unicode
#XmlEncoding = #PB_UTF8
CompilerElse
#XmlEncoding = #PB_Ascii
CompilerEndIf
Global.s XML
Define.l event
Procedure.s CreatePrefsXML()
Protected.l count
Protected.s key, value, xml = ""
Protected.s flags = "#PB_String_BorderLess|#PB_String_UpperCase|#PB_String_ReadOnly"
NewMap conf.s()
For count = 1 To Random(10,3)
conf(Str(Random(10,3))) = Str(Random(1400,3))
Next
ForEach conf()
key = MapKey(conf())
value = conf()
xml + "<hbox expand='item:2'>" + #CRLF$
xml + " <string name='" + key + "' width='180' text='" + key + "' flags='" + flags + "'/>" + #CRLF$
xml + " <string name='" + value + "' text='" + value + "'/>" + #CRLF$
xml + "</hbox>" + #CRLF$
Next
FreeMap(conf())
ProcedureReturn xml
EndProcedure
Procedure CreateDialogFormXML(XML.s)
If CatchXML(#Xml, @XML, StringByteLength(XML), 0, #XmlEncoding) And XMLStatus(#Xml) = #PB_XML_Success
If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
ProcedureReturn #True
Else
MessageRequester("XML ERROR", DialogError(#Dialog))
ProcedureReturn #False
EndIf
Else
MessageRequester("XML ERROR","XML error: " + XMLError(#Xml) + " (Line: " + XMLErrorLine(#Xml) + ")")
ProcedureReturn #False
EndIf
EndProcedure
Procedure RecreateUIfromXML()
FreeDialog(#Dialog)
CreateDialogFormXML(ReplaceString(XML, "<SettingsPlaceHolder/>", CreatePrefsXML(), #PB_String_NoCase))
RefreshDialog(#Dialog)
EndProcedure
Runtime Procedure Quit()
End
EndProcedure
Runtime Procedure RunMe()
RecreateUIfromXML()
EndProcedure
XML = "<window id='#PB_Any' name='test' text='test' minwidth='400' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
" <vbox expand='item:3'>" +
" <hbox>" +
" <button id='#button_run' text='Run Command' onevent='RunMe()'/>" +
" <button id='#button_quit' text='Quit' onevent='Quit()'/>" +
" </hbox>" +
" <SettingsPlaceHolder/>" +
" <editor text='content' height='150'/>" +
" </vbox>" +
"</window>"
If CreateDialogFormXML(XML)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
EndIf
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
- 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: Dialog - Aktualisieren von Teilen des UI
Was macht es für einen Sinn, nur Teile der UI in einem dynamischen Dialog zu refreshen? Die Bestandteile sind doch alle voneinander
Abhängig in Größe und Breite, sowie in der Reihenfolge, wie dies geschieht.
RefreshDialog() ist für mich die einzige sinnvolle Option oder ich habe die Fragestellung nicht verstanden.
Abhängig in Größe und Breite, sowie in der Reihenfolge, wie dies geschieht.
RefreshDialog() ist für mich die einzige sinnvolle Option oder ich habe die Fragestellung nicht verstanden.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- alen
- Beiträge: 107
- Registriert: 09.04.2007 17:38
- Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms - Wohnort: Duisburg
- Kontaktdaten:
Re: Dialog - Aktualisieren von Teilen des UI
Hallo ts-soft,
das ganze wird benötigt um Preferences - (Keys / Values) aus einer DB auszulesen und in ein Gadget einzusetzen.
Je nach Anzahl der Einträge müsste die UI dann angepasst werden. Größenverhältnisse etc.
Dabei dachte ich an RefreshDialog(#Dialog).
Allerdings habe ich aus der Hilfe von PB kein geeignetes Gadget rausfinden können.
Daher die etwas unbeholfene Krücke um erstmal irgendeinen Ansatz zu haben.
Welche Art von Gadget würde sich da anbieten wenn die Werte des Gadgets editierbar sein sollen ?
Ich wollte eigentlich nur Ideen und Inspirationen sammeln.
Hoffe das ganze wird klarer.
Grüße
Alen
das ganze wird benötigt um Preferences - (Keys / Values) aus einer DB auszulesen und in ein Gadget einzusetzen.
Je nach Anzahl der Einträge müsste die UI dann angepasst werden. Größenverhältnisse etc.
Dabei dachte ich an RefreshDialog(#Dialog).
Allerdings habe ich aus der Hilfe von PB kein geeignetes Gadget rausfinden können.
Daher die etwas unbeholfene Krücke um erstmal irgendeinen Ansatz zu haben.
Welche Art von Gadget würde sich da anbieten wenn die Werte des Gadgets editierbar sein sollen ?
Ich wollte eigentlich nur Ideen und Inspirationen sammeln.
Hoffe das ganze wird klarer.
Grüße
Alen
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
- Andre
- PureBasic Team
- Beiträge: 1765
- Registriert: 11.09.2004 16:35
- Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10 - Wohnort: Saxony / Deutscheinsiedel
- Kontaktdaten:
Re: Dialog - Aktualisieren von Teilen des UI
Hallo alen,
ohne jetzt etwas testen zu können, nur mal auf die Schnelle paar Anregungen:
- Mit Hilfe der Dialog-Library kannst du derzeit automatisches Anpassen aller Größen/Positionen durch RefreshDialog() erreichen, z.B. weil du Inhalte von Gadgets veränderst etc.
- Was du derzeit (noch) nicht kannst, ist ganze Gadgets on-the-fly hinzufügen/löschen und dann den Dialog neu berechnen lassen. Das ist ein "Feature-Request", den Fred auch von mir kennt.
- Behelfsweise bleibt dann nur das Neuerstellen der Dialog-Definition und ff. des GUI.
- Eine andere Möglichkeit ist es (verwende ich hier und da in meinem Projekt), einen kleineren Teil des GUI nicht über die Dialog-Lib zu realisieren, sondern hierfür z.B. in der Dialog-Definition einen "Container" einzubauen, innerhalb dessen du z.B. einzelne Gadgets nach der Dialog-Erstellung "händisch" verändern kannst. Das funktioniert auch ganz gut...
- Für das Ausgeben von Daten in Tabellenform eignet sich m.E. das ListIconGadget perfekt. Das ist nur leider (standardmäßig) nicht editierbar. Zumindest für Windows solltest du jedoch entsprechende Beispiele in den Foren (deutsch/englisch) finden, die die auch das ermöglichen. Und das sollte auch problemlos innerhalb eines Dialogs funktionieren.
Mit Beispielen kann ich im Moment leider nicht dienen.
PS: Noch ein Tipp, unbedingt die genialen "DynamicDialogs"-Module von PureLust anschauen, erleichtert das Arbeiten mit Dialogen enorm!
ohne jetzt etwas testen zu können, nur mal auf die Schnelle paar Anregungen:
- Mit Hilfe der Dialog-Library kannst du derzeit automatisches Anpassen aller Größen/Positionen durch RefreshDialog() erreichen, z.B. weil du Inhalte von Gadgets veränderst etc.
- Was du derzeit (noch) nicht kannst, ist ganze Gadgets on-the-fly hinzufügen/löschen und dann den Dialog neu berechnen lassen. Das ist ein "Feature-Request", den Fred auch von mir kennt.
- Behelfsweise bleibt dann nur das Neuerstellen der Dialog-Definition und ff. des GUI.
- Eine andere Möglichkeit ist es (verwende ich hier und da in meinem Projekt), einen kleineren Teil des GUI nicht über die Dialog-Lib zu realisieren, sondern hierfür z.B. in der Dialog-Definition einen "Container" einzubauen, innerhalb dessen du z.B. einzelne Gadgets nach der Dialog-Erstellung "händisch" verändern kannst. Das funktioniert auch ganz gut...
- Für das Ausgeben von Daten in Tabellenform eignet sich m.E. das ListIconGadget perfekt. Das ist nur leider (standardmäßig) nicht editierbar. Zumindest für Windows solltest du jedoch entsprechende Beispiele in den Foren (deutsch/englisch) finden, die die auch das ermöglichen. Und das sollte auch problemlos innerhalb eines Dialogs funktionieren.
Mit Beispielen kann ich im Moment leider nicht dienen.
PS: Noch ein Tipp, unbedingt die genialen "DynamicDialogs"-Module von PureLust anschauen, erleichtert das Arbeiten mit Dialogen enorm!

Re: Dialog - Aktualisieren von Teilen des UI
Vielleicht kannst du dieses verwenden. Ist nicht XML, finde ich aber sehr gut...
PropertyGadget:
http://www.purebasic.fr/english/viewtop ... ertygadget
http://www.purebasic.fr/english/viewtop ... ertygadget
PropertyGadget:
http://www.purebasic.fr/english/viewtop ... ertygadget
http://www.purebasic.fr/english/viewtop ... ertygadget
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- alen
- Beiträge: 107
- Registriert: 09.04.2007 17:38
- Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms - Wohnort: Duisburg
- Kontaktdaten:
Re: Dialog - Aktualisieren von Teilen des UI
Hallo Andre,
danke für die Anregungen, das hat schon mal ein wenig geholfen.
Ich bin mit dem Problem aktuell unter Linux unterwegs.
Da muss ich vorher prüfen ob bestimmte Dinge sich so 1:1 aus Forenbespielen umsetzen lassen.
Grüße
Alen
danke für die Anregungen, das hat schon mal ein wenig geholfen.
Ich bin mit dem Problem aktuell unter Linux unterwegs.
Da muss ich vorher prüfen ob bestimmte Dinge sich so 1:1 aus Forenbespielen umsetzen lassen.
Grüße
Alen
Das wäre ein nettes Feature. Aktuell schreibe ich das GUI Fenster neu aber das ganze hat einen Nachteil, das neu erstellte Fenster befindet sich nicht mehr an der Ursprungsposiotion und muss korregiert werden. Auch der erneute Aufbau / Verzögerung ist nicht schön. Aber es ist ein Workaround.Andre hat geschrieben: - Was du derzeit (noch) nicht kannst, ist ganze Gadgets on-the-fly hinzufügen/löschen und dann den Dialog neu berechnen lassen. Das ist ein "Feature-Request", den Fred auch von mir kennt.
Das werde ich auch mal probieren, klingt schonmal ganz praktikabel.Andre hat geschrieben: - Eine andere Möglichkeit ist es (verwende ich hier und da in meinem Projekt), einen kleineren Teil des GUI nicht über die Dialog-Lib zu realisieren, sondern hierfür z.B. in der Dialog-Definition einen "Container" einzubauen, innerhalb dessen du z.B. einzelne Gadgets nach der Dialog-Erstellung "händisch" verändern kannst. Das funktioniert auch ganz gut...
Hier habe ich nicht getestet ob das ganze auch unter Linux funktioniert. Werde ich aber noch nachholen.Andre hat geschrieben: PS: Noch ein Tipp, unbedingt die genialen "DynamicDialogs"-Module von PureLust anschauen, erleichtert das Arbeiten mit Dialogen enorm!
Zuletzt geändert von alen am 11.07.2016 10:56, insgesamt 1-mal geändert.
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
- alen
- Beiträge: 107
- Registriert: 09.04.2007 17:38
- Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms - Wohnort: Duisburg
- Kontaktdaten:
Re: Dialog - Aktualisieren von Teilen des UI
Hallo mk-soft,
Ich werde mal damit experementieren.
Grüße
Alen
Danke für den Tipp. Sieht beides unter Linux funktional ganz gut. Nur die Optik ist gewöhnungsbedürftig.mk-soft hat geschrieben:Vielleicht kannst du dieses verwenden. Ist nicht XML, finde ich aber sehr gut...
PropertyGadget:
http://www.purebasic.fr/english/viewtop ... ertygadget
http://www.purebasic.fr/english/viewtop ... ertygadget
Ich werde mal damit experementieren.
Grüße
Alen
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)