Hallo! Bitte haltet mich nicht für total bescheuert, aber ich habe eine ganz grundlegende Frage zum logischen Aufbau einer GUI-Anwendung: Wie man die Fenster, Menüs und Gadgets usw. programmiert, ist mir klar. Und allgemein, wie man ein Programm strukturiert, auch.
Aber ich überlege schon die ganze Zeit, wie man die Ereignisabrage-Schleifen für eine richtige GUI-Anwendung aufbaut. D.h. es soll ein Hauptfenster mit Menü geben, und die Auswahl von Menüpunkten soll dann natürlich weitere (Unter-)fenster öffnen. Und während man sich in einem solchen Unterfenster aufhält (dessen Code in Prozeduren geschrieben würde), muss natürlich weiterhin das Hauptmenü abgefragt und auf Benutzeraktionen reagiert werden. Und das Window-Close-Event sollte natürlich für Unter- und Hauptfenster getrennt ausgewertet werden können.
Wie macht das? Packt man alles in eine einzige REPEAT...UNTIL-Schleife?
Kann man eigentlich Unterfenster automatisch richtig in das Parent-Fenster einpassen (von den Abmessungen her, meine ich)?
Also, vielen Dank schon mal!
Dumme Frage zu GUI-Programmierung
-
- Beiträge: 3
- Registriert: 24.08.2009 22:47
- Wohnort: Baden-Württemberg
Dumme Frage zu GUI-Programmierung
Nur weil jemand paranoid ist, heißt das noch lange nicht, dass er nicht wirklich verfolgt wird.
Re: Dumme Frage zu GUI-Programmierung
kann man machen, muss man nichtCurrywurst hat geschrieben:Wie macht das? Packt man alles in eine einzige REPEAT...UNTIL-Schleife?

Ich glaube erahnen zu können, dass Dir eine einzige Event-Schleife nicht sonderlich zusagt
(vielleicht aus Gründen der Übersichtlichkeit). Wenn dem so ist, kannst Du Dir ja mal
EasyVENT von srod anschauen. Hier kannst Du für jedes Fenster und Gadget einen
EventHandler definieren. Tritt dann ein Event auf, so wird in die im EventHandler angegebene
Prozedur gesprungen. Das erinnert ein wenig an das EventHandling von VB.
Beispiel:
Code: Alles auswählen
SetEventHandler(WindowID(#frmMain), #OnClose, @frmMain_OnClose()) ; Springt in die Prozedur frmMain_OnClose(), wenn das Close-Ereignis auftritt
SetEventHandler(GadgetID(#cmdOK), #OnButtonClick, @cmdOK_OnButtonClick()) ; Springt in die Prozedur cmdOK_OnButtonClick, wenn das Click-Ereignis auftritt
a²+b²=mc²
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Dumme Frage zu GUI-Programmierung
ein Beispiel für eine einzige EventSchleife hab ich hier schon mal gepostet:
http://www.purebasic.fr/german/viewtopi ... 52&start=0
welche Lösung du letztendlich wählst, ist natürlich dir überlassen.
http://www.purebasic.fr/german/viewtopi ... 52&start=0
welche Lösung du letztendlich wählst, ist natürlich dir überlassen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Dumme Frage zu GUI-Programmierung
Hallo, Currywurst!
Wie Kiffi schon ausführte, kannste objektorientiert arbeiten. Das ist mir zu aufwendig - ich bevorzuge tatsächlich eine einzige Hauptschleife. Die Fensternummer kannste abfragen und so entscheiden, was beim Druck auf jede Klickfläche inkl. Fensterschließung passieren soll. Code findeste in der PB-Hilfe und hier über die Suche. Falls die Länge der Schleife ausufern sollte, kannste mit der Faltfunktion des Editors immer noch für Übersicht sorgen.
Eine weitere Methode - wenn auch nur theoretisch und mit vielen Fallstricken verbunden - ist, zu jedem Fenster, das Du aufmachst, einen nebenläufigen Prozeß zu erstellen. Der kümmert sich dann um die Klickflächenabfrage. Dann mußt Du allerdings auch die Kommunikation zwischen allen Nebenlaufprozessen schreiben (Mutex und Semaphoren
), was sich bei zwei oder drei solcher Prozesse allerdings absolut nicht lohnt.
Fazit: Nimm eine Schleife für alles - ist am schnellsten programmiert und mit der Faltfunktion übersichtlich genug.
Grüße - WPo
Wie Kiffi schon ausführte, kannste objektorientiert arbeiten. Das ist mir zu aufwendig - ich bevorzuge tatsächlich eine einzige Hauptschleife. Die Fensternummer kannste abfragen und so entscheiden, was beim Druck auf jede Klickfläche inkl. Fensterschließung passieren soll. Code findeste in der PB-Hilfe und hier über die Suche. Falls die Länge der Schleife ausufern sollte, kannste mit der Faltfunktion des Editors immer noch für Übersicht sorgen.
Eine weitere Methode - wenn auch nur theoretisch und mit vielen Fallstricken verbunden - ist, zu jedem Fenster, das Du aufmachst, einen nebenläufigen Prozeß zu erstellen. Der kümmert sich dann um die Klickflächenabfrage. Dann mußt Du allerdings auch die Kommunikation zwischen allen Nebenlaufprozessen schreiben (Mutex und Semaphoren

Fazit: Nimm eine Schleife für alles - ist am schnellsten programmiert und mit der Faltfunktion übersichtlich genug.
Grüße - WPo
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Re: Dumme Frage zu GUI-Programmierung
Ups, nicht schnell genug... 

Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Re: Dumme Frage zu GUI-Programmierung
Hallo,
ich möchte noch ergänzen, dass EasyVENT nur für Windows ist. Der genannte Code von Kaeru Gaman ist hingegen nativer PB-Code und damit cross-platform.
Gruß, Little John
ich möchte noch ergänzen, dass EasyVENT nur für Windows ist. Der genannte Code von Kaeru Gaman ist hingegen nativer PB-Code und damit cross-platform.
Gruß, Little John
Re: Dumme Frage zu GUI-Programmierung
Offtopic:
ich hatte heute mittag Currywurst als Mahlzeit.....
Würg......
ich hatte heute mittag Currywurst als Mahlzeit.....
Würg......

Rings hat geschrieben:ziert sich nich beim zitieren