Verständnisproblem Fensterapplikation/CreateGadget()

Anfängerfragen zum Programmieren mit PureBasic.
Kaltstart
Beiträge: 17
Registriert: 27.07.2008 12:43

Verständnisproblem Fensterapplikation/CreateGadget()

Beitrag von Kaltstart »

Nach dem Udate auf PB 4.3 habe ich nun ein kleines Verständnisproblem mit meiner Programm-Grundstruktur:

Für die Menüstruktur meiner Programme nutzte ich bisher die 'exbar.pbi' von LuckyLuke. (Links Outlookbarmäßig die Menüs und rechts dann die 'Inhalte')

Bis PB 4.2 habe ich dazu ein (1!) Fenster erstellt (hMainWindow = OpenWindow( #spma_Main_Window, 100, 100... ) und in diesem Fenster jedesmal zu jedem Menüpunkt ein CreateGadgetList/CloseGadgetList erstellt.

Mit einer Funktion CloseAllGadgets() habe ich dann immer alle nicht benötigten Gadgets geschlossen und wieder mit IF CreateGadgetList das entsprechende 'Fenster' neu aufgebaut.

Hauptfenster:

Code: Alles auswählen

	; hwnd
	hMainWindow = OpenWindow( #spma_Main_Window, 100, 100, 700, 400, "Programmtitel - Konfiguration", #PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) 
Auswertung in der Event-Schleife:

Code: Alles auswählen

Case 2 
	Select msgSubItem 
	    Case 1
	    	CloseAllGadgets()
	    	spma_24x7_HDD()
	    Case 2 
	    	CloseAllGadgets()
				spma_In_Arbeit()
			...

Code: Alles auswählen

Procedure CloseAllGadgets()
	If IsGadget( #container_wStatus ) <> 0
		HideGadget(#container_wStatus, 		1)	
	EndIf
	If IsGadget( #container_wEmailConfig ) <> 0
		HideGadget(#container_wEmailConfig, 		1)
	EndIf
        .....
Neues 'Fenster' innerhalb des 'Fensters':

Code: Alles auswählen

Procedure spma_In_Arbeit()
	; -------------------------------------------------------------------------   
	; PureFORM
	; -------------------------------------------------------------------------   
	If CreateGadgetList( WindowID( #spma_Main_Window ) )
		ContainerGadget(#container_wInArbeit, 225, 0, 470, 350, #PB_Container_BorderLess )
      Frame3DGadget(#wInArbeit_Frame3D_1, 5, 5, 460, 340, "In Arbeit")
      TextGadget(#wInArbeit_Text_1, 95, 120, 290, 30, "Dieses Modul ist in Arbeit und wird in einer der nächsten Versionen enthalten sein.", #PB_Text_Center)
    CloseGadgetList()
  EndIf
EndProcedure
Je nach Menüpunkt wurde dann das Fenster 'geschlossen' (Procedure CloseAllGadgets() ) und der neue Menüpunkt neu aufgebaut (IF CreateGadgetList()...)

Nun benötigt man in PB 4.3 das CreateGadgetList() nicht mehr.
Aber damit wird meine ganze Programmlogik umgeworfen. (Glaube ich zumindest).

Nun meine Frage(n):
- Wie baut man denn grundsätzliche eine solche Fensterapplikation auf?
Mit ContainerGadget()? oder mit UseGadgetList()?
- Kennt jemand ein 'gutes' Grundgerüst für eine solche Applikation.

Die ganzen Beispiele/Grundgerüste die ich im Forum gefunden habe erzeugen immer 'neue' Windows und in diesen werden dann 'neue' Gadgets erstellt.
z.B: http://www.purebasic.fr/german/viewtopic.php?t=20152


(Da exbar.pbi unter PB 4.3 nicht mehr läuft zukünftig vermutlich mit der nxExplorerBar von Stephen Rodriguez)

Danke im Voraus
Kaltstart
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

Beitrag von ts-soft »

Wenn ich Dich jetzt richtig verstanden habe, brauchste doch nur mehrere
ContainerGadgets erstellen und diese je nach Bedarf Anzeigen oder
Verstecken. Neu erstellen von Gadgets sorgt höchstens für flimmern.
Container verstecken versteckt auch alle Gadgets im Container.
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
Kaltstart
Beiträge: 17
Registriert: 27.07.2008 12:43

Beitrag von Kaltstart »

Hallo Thomas,
ts-soft hat geschrieben: Wenn ich Dich jetzt richtig verstanden habe, brauchste doch nur mehrere
ContainerGadgets erstellen und diese je nach Bedarf Anzeigen oder
Verstecken. Neu erstellen von Gadgets sorgt höchstens für flimmern.
Container verstecken versteckt auch alle Gadgets im Container.
Also im Grunde alle einzelnen Menü-'Fenster' VORHER mit ContainerGadget() erstellen und dann mit CloseGadgetList() und OpenGadgetList() arbeiten?
(Bei 10 Menüpunkten wären das dann 10 Container welcher je nach Menüauswahl mit OpenGadgetList() dann aktiviert wird? Evtl. könnte ich dann sogar mit Enumerationen arbeiten um Menü und Container zu identifizieren/abzugleichen. (Stichwort: Dynamic))

Problem ist, daß ich im Grunde nicht genau weiss was ich brauche.

Bisher habe ich etwas ausprobier und es hat einfach funktioniert.
Bei einfachen Programmen mit nur einem Fenster hat das immer geklappt.

Nun möchte ich aber gerne vom Anfänger zum Fortgeschrittenen 'aufsteigen'. Daher die Neugierde: 'Wie macht man das normalerweise richtig?'

So suche ich nun entsprechende Code-Templates oder Beispiele, damit ich weiss wie man so eine Programmstruktur am besten aufbaut.

Gruss
Kaltstart
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Kaltstart hat geschrieben:Also im Grunde alle einzelnen Menü-'Fenster' VORHER mit ContainerGadget() erstellen und dann mit CloseGadgetList() und OpenGadgetList() arbeiten?
Genau, z.B.:

Code: Alles auswählen

OpenWindow(...) ; Hauptfenster
ContainerGadget(...) ; erster Container
CloseGadgetList() ; ersten Container schließen
ContainerGadget(...) ; zweiter Container
CloseGadgetList() ; zweiten Container schließen
Kaltstart hat geschrieben:(Bei 10 Menüpunkten wären das dann 10 Container welcher je nach Menüauswahl mit OpenGadgetList() dann aktiviert wird?
Nicht mit OpenGadgetList(), das benutzt du, um den Inhalt der Container zu ändern.
Um einen Container ein/auszublenden, benutze HideGadget(), Parameter
siehe Hilfe. Wenn du zehn Menüpunkte hast, müsstest du auch zehn Container
erstellen und am Besten eine Procedure machen in der du die Container
ein/ausblendest.
Win11 x64 | PB 6.20
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

Beitrag von ts-soft »

> Problem ist, daß ich im Grunde nicht genau weiss was ich brauche.
So gehts mir auch gerade :mrgreen:

Ein Fenster mit verschiedenen Inhalt? Also so wie ein Assistent oder Installer

Ein Fenster + mehrere Dialogfenster? (modal oder modeless?)

Oder eine MDI-Anwendung, statt einer SDI-Anwendung?


Der Tipp von mir und auch von Andesdaf bezieht sich auf ein Fenster mit
verschiedenen Inhalt.
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
Antworten