Hauptfenster -> weitere Fenster aufrufen und zurückkehren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

1. Procedure statt Gosub
2. DisableWindow(#Window, Status)
Aktiviert und deaktiviert die Benutzereingaben für das angegebene Fenster '#Window'.
'Status' kann einen der folgenden Werte annehmen:
1: Das Fenster wird deaktiviert.
0: Das Fenster wird aktiviert.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

@ms, nee, das mit dem Return läuft schon richtig, wie ich es gerade aus dem 2. Source testen konnte. Du musst aber dein Ende wieder auf 0 zurücksetzen, damit es beim nächsten Mal wieder abgefragt werden kann ;).

Also ich ich würde vor dem Return nach dem Until ein "ende=0" schreiben.
Dann kannst du immer beenden.

Was mir an der Liste auffällt, du bentuzt zweimal die gleiche ID und darum kommt im ersten Fenster dein ListiconGadget nicht zurück. Habs
mal geändert. Ich habe aber nicht weiter auf Fehler überprüft.


Code: Alles auswählen

;Hier ist der code
;- Hauptfenster mit Menu
If OpenWindow(0, 200, 200, 1000, 750, "Lotto 2006", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)
SetWindowColor(0,$E0FFFF)
If CreateMenu(0, WindowID(0))
MenuTitle("&System")
MenuItem( 1, "Samstagslotto")
MenuTitle("&Numerische Auswertung")
MenuItem(21, "Auswertung006 -> Drucker")
MenuItem(22, "Auswertung007 -> Drucker")
EndIf
;- Startbildschirm
If CreateGadgetList(WindowID(0))
Date$ = FormatDate("%dd.%mm.%yyyy", Date())
TextGadget(2, 680, 80, 250,25, "Lotto 2006 Stand: "+Date$)
TextGadget(2, 680, 80, 250,25, "Lotto 2006     Stand:   "+Date$)
TextGadget(3, 680, 155, 200,25, "Keine Daten Geladen...")
TextGadget(4, 680, 230, 200,25, "Anzahl Ziehungen...")
TextGadget(5, 680, 260, 200,25, "Erste Ziehung...")
TextGadget(6, 680, 290, 200,25, "Letzte Ziehung...")
TextGadget(7, 680, 440, 200,25, "Version 1.2 - 21.08.2006")

ButtonGadget(101, 680, 610, 120, 40, "Samstagslotto")
ButtonGadget(102, 820, 610, 120, 40, "Mittwochslotto")

ListIconGadget(1, 60, 70, 590, 590,"Nr", 65, #PB_ListIcon_GridLines | #PB_Gadget_FrontColor)
AddGadgetColumn(1, 1, "Datum", 85)
EndIf

;- Auswertung MENU oder Schalter
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget() ; Schalter auswählen
Case 101
;Gosub Samstagslotto ; Samstagslotto
Case 102
;Gosub Mittwochslotto ; Mittwochslotto
EndSelect

Case #PB_Event_Menu ; Menupunkt auswählen
Select EventMenu()
Case 1 ; Samstagslotto
;Gosub Samstagslotto
Case 21
Gosub Auswertung006 ;Auswertung 006 -> Drucker
;***** Hier wird ein SUB-Fenster eröffnet ****
EndSelect
Case #PB_Event_CloseWindow
Quit=1
EndSelect
Until Quit=1
EndIf
End

;- Subroutine Auswertung aller Zahlen (006) => Drucker
Auswertung006:

HideWindow(0,1)
If OpenWindow(1, 200, 200, 950, 700, Titel.s ,#PB_Window_MinimizeGadget ,0 )

If CreateGadgetList(WindowID(1))
Date$ = FormatDate("%dd.%mm.%yyyy", Date())
TextGadget(2, 450, 30, 300,25, "Lotto 2006 Stand: "+Date$)
ButtonGadget(105, 450, 600, 100, 30, "Beenden")
ListIconGadget(2, 30, 30, 345, 600,"Kombination", 100,#PB_ListIcon_GridLines | #PB_Gadget_FrontColor)
AddGadgetColumn(2, 1, "1. Zahl", 60)
AddGadgetColumn(2, 2, "2. Zahl", 60)
AddGadgetColumn(2, 3, "3. Zahl", 60)
AddGadgetColumn(2, 4, "x. Zahl", 60)
EndIf
EndIf

Repeat
Select WaitWindowEvent()

Case #PB_Event_Gadget
Select EventGadget()                 
Case 105                               ; Beenden
CloseWindow(1):ende=1
HideWindow(0,0)
EndSelect   

Case #PB_Event_CloseWindow
CloseWindow(1):ende=1
HideWindow(0,0)
EndSelect
Until ende=1
ende=0
Return


Gruß Falko
Zuletzt geändert von Falko am 28.08.2006 23:14, insgesamt 3-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
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 »

>> 1. Procedure statt Gosub
bestätigt. Gosub, Goto usw. möglichst garnicht erst angewöhnen. Ausnahmen
bestätigen die Regel, aber Windows GUI sollte man es auf jeden fall meiden!
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
ms
Beiträge: 26
Registriert: 24.08.2006 21:56

Beitrag von ms »

Danke für die zahlreichen Tipps. Die 100 Punkte erhält Falko für den Tipp "ende=0". Werde dieses Problem mit einer Globalen Variablen generell lösen d.h. "ende" bei jedem Einsprung in eine Sub oder Procedure auf null setzen. Andere Möglichkeit wäre "ende" als lokale Variable einzusetzen. Ich bin mir aber nicht ganz sicher was Windowclose() genau bewirkt. Werden alle Variablen, Structuren, Identnummern für Gadgets etc. des Fensters generell gelöscht und sind somit wieder frei? In VBA6 sind die Resourcen nach dem schließen eines Fensters wieder verfügbar. Die Dokumentation ist zu diesem Punkt nicht sehr Aussagekräftig.
Auf jeden Fall geht es erst einmal weiter - ohne Änderungen des Konzeptes.
Antworten