Eure Vorgehensweise / Grundsätze für GUIs unter PB ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
dussel
Beiträge: 49
Registriert: 15.09.2004 12:52
Wohnort: Bei Frankfurt/Main

Eure Vorgehensweise / Grundsätze für GUIs unter PB ?

Beitrag von dussel »

Hallo,

bisher habe ich unter PB lediglich kleinere Tools auf Kommandozeile oder mit minimaler Oberfläche programmiert. Nun komme ich erstmalig in die Verlegenheit eine umfangreichere grafische Oberfläche in einem Fenster realisieren zu wollen. Dabei stosse ich auf grundsätzliche Fragen und Gedanken, über die ich mich gerne austauschen würde.

- Verseht Ihr jedes Gadget mit einer eindeutigen ID ? Oder nutzt Ihr ein Gadget gleich für mehrere Zwecke ?
- Wie löst Ihr die Anzeige bestimmter Gadgets und hiden der übrigen? Über eine "hide_all_gadgets()" und anschließendem einblenden der gewünschten?
- Wie identifiziert ihr bei einem resize des Window welche Gadgets in ihrer Größe angepasst werden müssen?
- Habt Ihr für diese grundsätzlichen Fragen ein gutes Framework?

Jetzt bin ich ja mal gespannt auf die Antworten :)
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Sicher verwenden wir eine eindeutige ID.

Ich merke mir aber nicht: 1 war das Menü, 45 war dieses TextGadget und 371 war das ListIcon...

Sieh dir mal Enumeration an! Damit kann man Konstantenpraktisch vordefinieren. Die setze ich dann statt der IDs ein.
Zuletzt geändert von AND51 am 13.10.2006 14:47, insgesamt 1-mal geändert.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Enumeration...

wichtig ist vor allem, mit den nummern bei 0 anzufangen und fortlaufend zu numerieren (was Enum ja zur verfügung stellt)

bei Enum muss man eben drauf achten, dass man es nicht mehrmals verwendet,
ohne sie fortlaufen zu lassen und sich dann nummern überschneiden,
also, für mehrere aufzählungen von gadgets.

fenster und gadgets können afaik sich überschneidende nummernkreise haben.

---------------------
meistens zeigt man immer alle gadgets an, und disabled nur die, die nicht benötigt werden.
solltest du mehr platz brauchen, nimm lieber Panels oder extra-fenster,
als wild hin und her zu schalten, das tötet dein layout.

-----
wie auf resize reagiert wird, liegt vor allem an deinem grundlayout.
oft hat ein fenster eine hauptarbeitsfläche, und die wird als einziges mitresized.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Schreibfehler gefixt, scheiß Browster... >_<

Wenn du neu in dem Bereich GUI einsteigst, empfehle ich dir z. B. gnozales PureRESIZE Lib, welche das Resizen von Gadgets automatisch übernimmt.

>fenster und gadgets können afaik sich überschneidende nummernkreise haben.
stimmt

>solltest du mehr platz brauchen, nimm lieber Panels oder extra-fenster
Oder ContainerGadgets() und ScrollareaGadgets().
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
dussel
Beiträge: 49
Registriert: 15.09.2004 12:52
Wohnort: Bei Frankfurt/Main

Beitrag von dussel »

Sicher verwenden wir eine eindeutige ID.

Ich merke mir aber nicht: 1 war das Menü, 45 war dieses TextGadget und 371 war das ListIcon...

Sieh dir mal numeration an! Damit kann man Konstantenpraktisch vordefinieren. Die setze ich dann statt der IDs ein.
Das jedes Gadget eine eindeutige ID erfordert und sich diese über enumeration kompfortable erstellen lassen ist der Hilfe zu entnehmen. Hmmm... Vielleicht habe ich mich etwas missverständlich ausgedrückt und sollte es mit einem präziseren Beispiel verdeutlichen.

Nutzt du für leicht abweichende Zwecke in einer Anwendung das gleiche Gadged (eine ID) oder mehrere Gadgets? Beispielsweise ein ListIconGadget mit jeweils varierenden Spalten für unterschiedliche Ausgaben oder mehrere ListIconGadgets? Selbstverständlich angenommen das die ListIconGadgets nicht gleichzeitig dargestellt werden sollen. Die erste Variante hätte seinen Charm im geringeren Ressourcenverbrauch; die zweitere ist (soweit ich das überblicke) wesentlich einfacher zu programmieren.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Ich würde die zweite Variante verwenden.

Außerdem kannst du bisher noch keine Spalten beim ListIconGadget löschen,
was ich persönlich aber ziemlich blöd finde. Den Namen der Spalten kann
man nachträglich auch nicht mehr ändern. Da hilft nur noch FreeGadget() und
ein neues erstellen.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Also eine besonders große Anwendung mit größenveränderbarer
Oberfläche hab ich bisher so weit ich weis noch nicht erstellt. Aber so in
etwa, wie ich es machen würde ist in einem etwas kleinerem, im Forum
veröffentlichten Programm zu sehen. Habs extra für dich grad eben neu
hoch geladen ;-) .

Thread: PMVs AutoPicConverter

Als IDs verwende ich immer Variablen (#PB_Any), so kann einem nie
mals passieren, dass doch mal 2 Objekte die gleichen IDs haben. Als
Antworten auf die restlichen Fragen ist es einfacher, wenn du dir den
Coden oben anschaust :D ... allerdings ists schon was älter, somit noch
PB 3.94. Erlich gesagt weis ich auch garnicht mehr genau, wie ich's
damals gelöst hab :lol: .

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Über die Aufteilung der IDs mache ich mir nicht den grossen Kopf.
Bei grösseren Projekten mit mehreren Gadget und Fenster nehme ich gleich den Visual Designer. Erstelle allerdings für jedes Fenster eine eigene Common Datei und generiere mir mit meinen Tool eine gemeinsame Common Datei.
Alle Events sind dann auch gleich vorbereit :allright:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

NicTheQuick hat geschrieben:Ich würde die zweite Variante verwenden.

Außerdem kannst du bisher noch keine Spalten beim ListIconGadget löschen,
was ich persönlich aber ziemlich blöd finde. Den Namen der Spalten kann
man nachträglich auch nicht mehr ändern. Da hilft nur noch FreeGadget() und
ein neues erstellen.
Seit 3.90:
> - Added: RemoveGadgetColumn()

Seit 4.00:
> - Supports GetGadgetItemText(#Gadget, -1, 2) ; return header text for column 2
> - Supports SetGadgetItemText(#Gadget, -1, "New Text", 2) ; change header text for column 2
dussel
Beiträge: 49
Registriert: 15.09.2004 12:52
Wohnort: Bei Frankfurt/Main

Beitrag von dussel »

Danke an alle !
Antworten