Seite 2 von 2

Verfasst: 28.08.2006 22:44
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:

Verfasst: 28.08.2006 23:03
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

Verfasst: 28.08.2006 23:09
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!

Verfasst: 29.08.2006 20:28
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.