Hauptfenster -> weitere Fenster aufrufen und zurückkehren
Hauptfenster -> weitere Fenster aufrufen und zurückkehren
Meine bishereige Programmierumgebung ist / war VBA6. Purebasic gefällt mir wesentlich besser da schneller und kompakter.
Problem:
Hauptfenster mit MENU
Aus diesem Fenster möchte ich verschiedene Berechnungen in anderen Fenstern erstellen. Nach Beendigung der Berechnung im Sub-Fenster möchte ich mit einem "Button" z.b. "zurück" ins Hauptfenster zurückkehren aber den Inhalt des Hauptfensters wieder angezeigt bekommen. Aus dem Hauptfenster mit Menu möchte ich alle Aktionen starten : entweder über Buttons oder über MENUEinträge
Hat jemand eine Idee
Problem:
Hauptfenster mit MENU
Aus diesem Fenster möchte ich verschiedene Berechnungen in anderen Fenstern erstellen. Nach Beendigung der Berechnung im Sub-Fenster möchte ich mit einem "Button" z.b. "zurück" ins Hauptfenster zurückkehren aber den Inhalt des Hauptfensters wieder angezeigt bekommen. Aus dem Hauptfenster mit Menu möchte ich alle Aktionen starten : entweder über Buttons oder über MENUEinträge
Hat jemand eine Idee
- 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
Ja, aber Deine Ausführungen sind nicht so klar
Also, erstelle alle 3 Fenster, invisible am besten. Bei dem 2ten und 3ten
Fenster die ParentID des ersten Fensters mit angeben. Je nach Button einfach
das entsprechende Fenster mit HideWindow(bla, #False) anzeigen.
Am besten eine Ereignisscleife für alle 3 Fenster, wobei du vor allem bei
#PB_Event_CloseWindow unterscheiden mußt, welches Fenster löste diese
Ereignis aus.
Am besten erstmal anfangen und dann etwas konkreter Fragen
Also, erstelle alle 3 Fenster, invisible am besten. Bei dem 2ten und 3ten
Fenster die ParentID des ersten Fensters mit angeben. Je nach Button einfach
das entsprechende Fenster mit HideWindow(bla, #False) anzeigen.
Am besten eine Ereignisscleife für alle 3 Fenster, wobei du vor allem bei
#PB_Event_CloseWindow unterscheiden mußt, welches Fenster löste diese
Ereignis aus.
Am besten erstmal anfangen und dann etwas konkreter Fragen

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.

Tipp: Wenn ein "Chldfenster" oder "Subfenster" geöffnet ist, solange das Hauptfenster mit EnableWindow_(WindowID(), #False) sperren.
Dies bewirkt, dass das Hauptfenster keinerlei Eregnisse empfangen kann und man auch nicht von Childfenster zum hauptfenster wechseln kann. Ist ein Childwindow geöffnet und ich klicke auf deinHauptfenster blinkt dies automatisch kurz auf und es ist der WIndowssound "Ding" zu hören.
Danach das Childfenster wieder schließen und das Hauptfenster mit #True wieder aktivieren.
Dies bewirkt, dass das Hauptfenster keinerlei Eregnisse empfangen kann und man auch nicht von Childfenster zum hauptfenster wechseln kann. Ist ein Childwindow geöffnet und ich klicke auf deinHauptfenster blinkt dies automatisch kurz auf und es ist der WIndowssound "Ding" zu hören.
Danach das Childfenster wieder schließen und das Hauptfenster mit #True wieder aktivieren.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Für faule Programmierer: (Werbung)
http://www.purearea.net/pb/showcase/sho ... p=0&sort=1
Mehrere Fenster Erzeugen mit unterschiedliche WindowID-Namen und dann Projekt erzeugen.
FF
http://www.purearea.net/pb/showcase/sho ... p=0&sort=1
Mehrere Fenster Erzeugen mit unterschiedliche WindowID-Namen und dann Projekt erzeugen.
FF

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
Danke für Eure Info´s
Die Frage ist ob ich mich komplett auf dem "Holzweg" befinde, d.h. die Struktur des Programms falsch ist.
Also, habe ein Hauptfenster mit MENU einigen Texten und einer Tabelle.
Über einen Menueintrag wird die Subroutine geöffnet (=weiteres Fenster etc). Die Subroutine kann nur über einen Button "Beenden" verlassen werden. Verlassen der SR klappt auch. Anzeige von Window(0) klappt auch, aber die Texte, Tabelle etc. sind im Anzeigebereich von Window(1) nicht mehr vorhanden. (Funktioniert aber unter VBA6). Müssen die Inhalte von Window(0) neu generiert werden oder ist hier der Weg über eine Subroutine falsch. Procedure benutzen ?
Ein weiterer Punkt: Wenn ich im Hauptfenster zurück bin (das Menu ist noch vorhanden) und ich den gleichen Menupunkt noch einmal wähle kommt das Programm komplett "aus dem Tritt".
*********** Hauptfenster erstellen mit Menu, Text, etc *********
Edit Falko
Die Frage ist ob ich mich komplett auf dem "Holzweg" befinde, d.h. die Struktur des Programms falsch ist.
Also, habe ein Hauptfenster mit MENU einigen Texten und einer Tabelle.
Über einen Menueintrag wird die Subroutine geöffnet (=weiteres Fenster etc). Die Subroutine kann nur über einen Button "Beenden" verlassen werden. Verlassen der SR klappt auch. Anzeige von Window(0) klappt auch, aber die Texte, Tabelle etc. sind im Anzeigebereich von Window(1) nicht mehr vorhanden. (Funktioniert aber unter VBA6). Müssen die Inhalte von Window(0) neu generiert werden oder ist hier der Weg über eine Subroutine falsch. Procedure benutzen ?
Ein weiterer Punkt: Wenn ich im Hauptfenster zurück bin (das Menu ist noch vorhanden) und ich den gleichen Menupunkt noch einmal wähle kommt das Programm komplett "aus dem Tritt".
*********** Hauptfenster erstellen mit Menu, Text, etc *********
Code: Alles auswählen
;- 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")
....
EndIf
;- Startbildschirm
If CreateGadgetList(WindowID(0))
Date$ = FormatDate("%dd.%mm.%yyyy", Date())
TextGadget(2, 680, 80, 250,25, "Lotto 2006 Stand: "+Date$)
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
*** Subfenster ************************************
;- Subroutine Auswertung aller Zahlen (006) => Drucker
Auswertung006:
If entree.b =0:Return:EndIf
HideWindow(0,1)
If OpenWindow(1, 200, 200, 750, 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")
......
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 105 ; Beenden
CloseWindow(1):ende=1
HideWindow(0,0)
EndSelect
Return
Edit Falko
- 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
Bitte Codetags setzen, am anfang auf Code drücken und am Ende nochmal.
Und bitte die Bemerkungen mit Semikolon als solche Kennzeichnen, so das
der Code ausführbar ist, ohne Fehlermeldungen
Und bitte die Bemerkungen mit Semikolon als solche Kennzeichnen, so das
der Code ausführbar ist, ohne Fehlermeldungen
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.

Hier noch einmal ein Auszug des Programmcodes. Läßt sich compilieren und ausführen. Ins Subfenster mit Menupunkt Numerische Auswertung -->Auswertung006. Rückkehr ins Hauptfenster mit Button "Beenden".
--> Tabelle fehlt (ist normalerweise gefüllt mit Daten)
Nochmaliges aufrufen über Auswerutng006
--> Subfenster lässt sich über "Beenden" nicht mehr schließen.
Bei Bedarf könnte ich auch meine komplette Source per E-Mail senden
(ca. 450 Zeilen Code und dazugehörige Dateien). Das Gesamtprojekt ca. 10.000 Zeilen ist bereits unter VBA6 realisiert). Ich möchte es auf Purebasic portieren.
edit Falko
--> Tabelle fehlt (ist normalerweise gefüllt mit Daten)
Nochmaliges aufrufen über Auswerutng006
--> Subfenster lässt sich über "Beenden" nicht mehr schließen.
Bei Bedarf könnte ich auch meine komplette Source per E-Mail senden
(ca. 450 Zeilen Code und dazugehörige Dateien). Das Gesamtprojekt ca. 10.000 Zeilen ist bereits unter VBA6 realisiert). Ich möchte es auf Purebasic portieren.
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(1, 30, 30, 345, 600,"Kombination", 100,#PB_ListIcon_GridLines | #PB_Gadget_FrontColor)
AddGadgetColumn(1, 1, "1. Zahl", 60)
AddGadgetColumn(1, 2, "2. Zahl", 60)
AddGadgetColumn(1, 3, "3. Zahl", 60)
AddGadgetColumn(1, 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
Return
- 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
Code immer in Code Tags setzen
[code]
; ab hier wird normallerweise alles als code dargestellt
[/code]
Hier gehts normal weiter
PS: Deinen obigen Code kannste auch editieren, und die Tags noch einfügen
danke
[code]
; ab hier wird normallerweise alles als code dargestellt
[/code]
Hier gehts normal weiter
PS: Deinen obigen Code kannste auch editieren, und die Tags noch einfügen
danke

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.

- 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:
@ms, sorry, das ich bei dir die Codetags gesetzt habe, aber besser sieht's
schon aus.
Nur habe ich den Code so nicht getestet, weil da noch ... und ein Return
am Ende vorhanden ist, was so nicht läuft.
Wenn das nur Codeabschnitte sein sollten müsstest du jeweils die Codetags,
so wie ts-soft beschreibt, noch manuell anpassen.
Gruß Falko
schon aus.
Nur habe ich den Code so nicht getestet, weil da noch ... und ein Return
am Ende vorhanden ist, was so nicht läuft.
Wenn das nur Codeabschnitte sein sollten müsstest du jeweils die Codetags,
so wie ts-soft beschreibt, noch manuell anpassen.

Gruß Falko
Man kann das gesamte Fenster kopieren in den PB4 Editor laden und testen. Das Problem mit der fehlenden Tabelle habe ich gelöst. ListIconGadget hat in beiden Fenstern die Identität 1 sowohl in Window 0 als auch in Window 1. Ich war aber der Meinung dass Purebasic für jedes Window die Zuordnungen selbst organisiert. Aber egal.
Aber die Sache mit dem 2-fach Aufruf des Subfensters ist noch offen.
Falko, was ist am Return=Rücksprung aus Subroutine am Ende zu ändern? Vielleicht liegt ja hier die Lösung für den Mehrfachaufruf.
Aber die Sache mit dem 2-fach Aufruf des Subfensters ist noch offen.
Falko, was ist am Return=Rücksprung aus Subroutine am Ende zu ändern? Vielleicht liegt ja hier die Lösung für den Mehrfachaufruf.